Api-Roll 52: 2017-07-31

R=vegorov@google.com

Review-Url: https://codereview.chromium.org//2987103002 .
diff --git a/generated/googleapis/lib/acceleratedmobilepageurl/v1.dart b/generated/googleapis/lib/acceleratedmobilepageurl/v1.dart
index 1d21d41..aaf60d6 100644
--- a/generated/googleapis/lib/acceleratedmobilepageurl/v1.dart
+++ b/generated/googleapis/lib/acceleratedmobilepageurl/v1.dart
@@ -15,8 +15,8 @@
 const core.String USER_AGENT = 'dart-api-client acceleratedmobilepageurl/v1';
 
 /**
- * Retrieves the list of AMP URL (and equivalent AMP Cache URL) for a given list
- * of public URL(s).
+ * Retrieves the list of AMP URLs (and equivalent AMP Cache URLs) for a given
+ * list of public URL(s).
  */
 class AcceleratedmobilepageurlApi {
 
diff --git a/generated/googleapis/lib/admin/directory_v1.dart b/generated/googleapis/lib/admin/directory_v1.dart
index 8190043..deecd52 100644
--- a/generated/googleapis/lib/admin/directory_v1.dart
+++ b/generated/googleapis/lib/admin/directory_v1.dart
@@ -518,6 +518,56 @@
   }
 
   /**
+   * Move or insert multiple Chrome OS Devices to Organization Unit
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [customerId] - Immutable ID of the G Suite account
+   *
+   * [orgUnitPath] - Full path of the target organization unit or its Id
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future moveDevicesToOu(ChromeOsMoveDevicesToOu request, core.String customerId, core.String orgUnitPath) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (customerId == null) {
+      throw new core.ArgumentError("Parameter customerId is required.");
+    }
+    if (orgUnitPath == null) {
+      throw new core.ArgumentError("Parameter orgUnitPath is required.");
+    }
+    _queryParams["orgUnitPath"] = [orgUnitPath];
+
+    _downloadOptions = null;
+
+    _url = 'customer/' + commons.Escaper.ecapeVariable('$customerId') + '/devices/chromeos/moveDevicesToOu';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => null);
+  }
+
+  /**
    * Update Chrome OS Device. This method supports patch semantics.
    *
    * [request] - The metadata request object.
@@ -5801,6 +5851,31 @@
   }
 }
 
+/**
+ * JSON request template for moving ChromeOs Device to given OU in Directory
+ * Devices API.
+ */
+class ChromeOsMoveDevicesToOu {
+  /** ChromeOs Devices to be moved to OU */
+  core.List<core.String> deviceIds;
+
+  ChromeOsMoveDevicesToOu();
+
+  ChromeOsMoveDevicesToOu.fromJson(core.Map _json) {
+    if (_json.containsKey("deviceIds")) {
+      deviceIds = _json["deviceIds"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deviceIds != null) {
+      _json["deviceIds"] = deviceIds;
+    }
+    return _json;
+  }
+}
+
 /** JSON template for Customer Resource object in Directory API. */
 class Customer {
   /**
@@ -8004,6 +8079,13 @@
   core.bool isEnrolledIn2Sv;
   /** Is mailbox setup (Read-only) */
   core.bool isMailboxSetup;
+  /**
+   *
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Object keywords;
   /** Kind of resource this is. */
   core.String kind;
   /**
@@ -8156,6 +8238,9 @@
     if (_json.containsKey("isMailboxSetup")) {
       isMailboxSetup = _json["isMailboxSetup"];
     }
+    if (_json.containsKey("keywords")) {
+      keywords = _json["keywords"];
+    }
     if (_json.containsKey("kind")) {
       kind = _json["kind"];
     }
@@ -8283,6 +8368,9 @@
     if (isMailboxSetup != null) {
       _json["isMailboxSetup"] = isMailboxSetup;
     }
+    if (keywords != null) {
+      _json["keywords"] = keywords;
+    }
     if (kind != null) {
       _json["kind"] = kind;
     }
@@ -8716,6 +8804,50 @@
   }
 }
 
+/** JSON template for a keyword entry. */
+class UserKeyword {
+  /** Custom Type. */
+  core.String customType;
+  /**
+   * Each entry can have a type which indicates standard type of that entry. For
+   * example, keyword could be of type occupation or outlook. In addition to the
+   * standard type, an entry can have a custom type and can give it any name.
+   * Such types should have the CUSTOM value as type and also have a customType
+   * value.
+   */
+  core.String type;
+  /** Keyword. */
+  core.String value;
+
+  UserKeyword();
+
+  UserKeyword.fromJson(core.Map _json) {
+    if (_json.containsKey("customType")) {
+      customType = _json["customType"];
+    }
+    if (_json.containsKey("type")) {
+      type = _json["type"];
+    }
+    if (_json.containsKey("value")) {
+      value = _json["value"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (customType != null) {
+      _json["customType"] = customType;
+    }
+    if (type != null) {
+      _json["type"] = type;
+    }
+    if (value != null) {
+      _json["value"] = value;
+    }
+    return _json;
+  }
+}
+
 /** JSON template for a language entry. */
 class UserLanguage {
   /**
diff --git a/generated/googleapis/lib/analytics/v3.dart b/generated/googleapis/lib/analytics/v3.dart
index f4a24a3..2c644fb 100644
--- a/generated/googleapis/lib/analytics/v3.dart
+++ b/generated/googleapis/lib/analytics/v3.dart
@@ -9306,7 +9306,10 @@
   core.String remarketingAudienceId;
   /** The status of this foreign account link. */
   core.String status;
-  /** The type of the foreign account. For example `ADWORDS_LINKS`. */
+  /**
+   * The type of the foreign account. For example, `ADWORDS_LINKS`, `DBM_LINKS`,
+   * `MCC_LINKS` or `OPTIMIZE`.
+   */
   core.String type;
   /**
    * Web property ID of the form UA-XXXXX-YY to which this linked foreign
diff --git a/generated/googleapis/lib/androiddeviceprovisioning/v1.dart b/generated/googleapis/lib/androiddeviceprovisioning/v1.dart
new file mode 100644
index 0000000..6e9b977
--- /dev/null
+++ b/generated/googleapis/lib/androiddeviceprovisioning/v1.dart
@@ -0,0 +1,1660 @@
+// This is a generated file (see the discoveryapis_generator project).
+
+library googleapis.androiddeviceprovisioning.v1;
+
+import 'dart:core' as core;
+import 'dart:async' as async;
+import 'dart:convert' as convert;
+
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
+import 'package:http/http.dart' as http;
+
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
+    ApiRequestError, DetailedApiRequestError;
+
+const core.String USER_AGENT = 'dart-api-client androiddeviceprovisioning/v1';
+
+/** Android Device Provisioning Partner API */
+class AndroiddeviceprovisioningApi {
+
+  final commons.ApiRequester _requester;
+
+  OperationsResourceApi get operations => new OperationsResourceApi(_requester);
+  PartnersResourceApi get partners => new PartnersResourceApi(_requester);
+
+  AndroiddeviceprovisioningApi(http.Client client, {core.String rootUrl: "https://androiddeviceprovisioning.googleapis.com/", core.String servicePath: ""}) :
+      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
+}
+
+
+class OperationsResourceApi {
+  final commons.ApiRequester _requester;
+
+  OperationsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * 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.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation resource.
+   * Value must have pattern "^operations/.+$".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+}
+
+
+class PartnersResourceApi {
+  final commons.ApiRequester _requester;
+
+  PartnersCustomersResourceApi get customers => new PartnersCustomersResourceApi(_requester);
+  PartnersDevicesResourceApi get devices => new PartnersDevicesResourceApi(_requester);
+
+  PartnersResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+}
+
+
+class PartnersCustomersResourceApi {
+  final commons.ApiRequester _requester;
+
+  PartnersCustomersResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * List all the customers that has delegates some role to this customer.
+   *
+   * Request parameters:
+   *
+   * [partnerId] - the id of the partner.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [ListCustomersResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListCustomersResponse> list(core.String partnerId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (partnerId == null) {
+      throw new core.ArgumentError("Parameter partnerId is required.");
+    }
+
+    _url = 'v1/partners/' + commons.Escaper.ecapeVariableReserved('$partnerId') + '/customers';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListCustomersResponse.fromJson(data));
+  }
+
+}
+
+
+class PartnersDevicesResourceApi {
+  final commons.ApiRequester _requester;
+
+  PartnersDevicesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Claim the device identified by device identifier.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [partnerId] - Id of the partner.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [ClaimDeviceResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ClaimDeviceResponse> claim(ClaimDeviceRequest request, core.String partnerId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (partnerId == null) {
+      throw new core.ArgumentError("Parameter partnerId is required.");
+    }
+
+    _url = 'v1/partners/' + commons.Escaper.ecapeVariableReserved('$partnerId') + '/devices:claim';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ClaimDeviceResponse.fromJson(data));
+  }
+
+  /**
+   * Claim devices asynchronously
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [partnerId] - partner id.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> claimAsync(ClaimDevicesRequest request, core.String partnerId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (partnerId == null) {
+      throw new core.ArgumentError("Parameter partnerId is required.");
+    }
+
+    _url = 'v1/partners/' + commons.Escaper.ecapeVariableReserved('$partnerId') + '/devices:claimAsync';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Find devices by device identifier.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [partnerId] - id of the partner.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [FindDevicesByDeviceIdentifierResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<FindDevicesByDeviceIdentifierResponse> findByIdentifier(FindDevicesByDeviceIdentifierRequest request, core.String partnerId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (partnerId == null) {
+      throw new core.ArgumentError("Parameter partnerId is required.");
+    }
+
+    _url = 'v1/partners/' + commons.Escaper.ecapeVariableReserved('$partnerId') + '/devices:findByIdentifier';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new FindDevicesByDeviceIdentifierResponse.fromJson(data));
+  }
+
+  /**
+   * Find devices by ownership.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [partnerId] - id of the partner.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [FindDevicesByOwnerResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<FindDevicesByOwnerResponse> findByOwner(FindDevicesByOwnerRequest request, core.String partnerId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (partnerId == null) {
+      throw new core.ArgumentError("Parameter partnerId is required.");
+    }
+
+    _url = 'v1/partners/' + commons.Escaper.ecapeVariableReserved('$partnerId') + '/devices:findByOwner';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new FindDevicesByOwnerResponse.fromJson(data));
+  }
+
+  /**
+   * Get a device
+   *
+   * Request parameters:
+   *
+   * [name] - resource name in 'partners/[PARTNER_ID]/devices/[DEVICE_ID]'.
+   * Value must have pattern "^partners/[^/]+/devices/[^/]+$".
+   *
+   * Completes with a [Device].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Device> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Device.fromJson(data));
+  }
+
+  /**
+   * Update the metadata
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [metadataOwnerId] - The owner of the newly set metadata. Should be partner
+   * id itself.
+   * Value must have pattern "^[^/]+$".
+   *
+   * [deviceId] - id of the partner.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [DeviceMetadata].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<DeviceMetadata> metadata(UpdateDeviceMetadataRequest request, core.String metadataOwnerId, core.String deviceId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (metadataOwnerId == null) {
+      throw new core.ArgumentError("Parameter metadataOwnerId is required.");
+    }
+    if (deviceId == null) {
+      throw new core.ArgumentError("Parameter deviceId is required.");
+    }
+
+    _url = 'v1/partners/' + commons.Escaper.ecapeVariableReserved('$metadataOwnerId') + '/devices/' + commons.Escaper.ecapeVariableReserved('$deviceId') + '/metadata';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new DeviceMetadata.fromJson(data));
+  }
+
+  /**
+   * Unclaim the device identified by device_id or identifier.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [partnerId] - Id of the partner.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> unclaim(UnclaimDeviceRequest request, core.String partnerId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (partnerId == null) {
+      throw new core.ArgumentError("Parameter partnerId is required.");
+    }
+
+    _url = 'v1/partners/' + commons.Escaper.ecapeVariableReserved('$partnerId') + '/devices:unclaim';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Unclaim devices asynchronously
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [partnerId] - partner id.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> unclaimAsync(UnclaimDevicesRequest request, core.String partnerId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (partnerId == null) {
+      throw new core.ArgumentError("Parameter partnerId is required.");
+    }
+
+    _url = 'v1/partners/' + commons.Escaper.ecapeVariableReserved('$partnerId') + '/devices:unclaimAsync';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Set metadata in batch asynchronously.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [partnerId] - partner id.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> updateMetadataAsync(UpdateDeviceMetadataInBatchRequest request, core.String partnerId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (partnerId == null) {
+      throw new core.ArgumentError("Parameter partnerId is required.");
+    }
+
+    _url = 'v1/partners/' + commons.Escaper.ecapeVariableReserved('$partnerId') + '/devices:updateMetadataAsync';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+}
+
+
+
+/** Request message to claim a device on behalf of a customer. */
+class ClaimDeviceRequest {
+  /** The customer to claim for. */
+  core.String customerId;
+  /** The device identifier of the device to claim. */
+  DeviceIdentifier deviceIdentifier;
+  /**
+   * Section to claim
+   * Possible string values are:
+   * - "SECTION_TYPE_UNSPECIFIED" : Unspecified
+   * - "SECTION_TYPE_ZERO_TOUCH" : Zero touch
+   */
+  core.String sectionType;
+
+  ClaimDeviceRequest();
+
+  ClaimDeviceRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("customerId")) {
+      customerId = _json["customerId"];
+    }
+    if (_json.containsKey("deviceIdentifier")) {
+      deviceIdentifier = new DeviceIdentifier.fromJson(_json["deviceIdentifier"]);
+    }
+    if (_json.containsKey("sectionType")) {
+      sectionType = _json["sectionType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (customerId != null) {
+      _json["customerId"] = customerId;
+    }
+    if (deviceIdentifier != null) {
+      _json["deviceIdentifier"] = (deviceIdentifier).toJson();
+    }
+    if (sectionType != null) {
+      _json["sectionType"] = sectionType;
+    }
+    return _json;
+  }
+}
+
+/** Response message containing device id of the claim. */
+class ClaimDeviceResponse {
+  /** the device id of the claimed device. */
+  core.String deviceId;
+  /**
+   * the resource name of the device in
+   * 'partners/[PARTNER_ID]/devices/[DEVICE_ID]'.
+   */
+  core.String deviceName;
+
+  ClaimDeviceResponse();
+
+  ClaimDeviceResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("deviceId")) {
+      deviceId = _json["deviceId"];
+    }
+    if (_json.containsKey("deviceName")) {
+      deviceName = _json["deviceName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deviceId != null) {
+      _json["deviceId"] = deviceId;
+    }
+    if (deviceName != null) {
+      _json["deviceName"] = deviceName;
+    }
+    return _json;
+  }
+}
+
+/** Request to claim devices asynchronously in batch. */
+class ClaimDevicesRequest {
+  /** list of claims. */
+  core.List<PartnerClaim> claims;
+
+  ClaimDevicesRequest();
+
+  ClaimDevicesRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("claims")) {
+      claims = _json["claims"].map((value) => new PartnerClaim.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (claims != null) {
+      _json["claims"] = claims.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** Company */
+class Company {
+  /** company id */
+  core.String companyId;
+  /** company name */
+  core.String companyName;
+
+  Company();
+
+  Company.fromJson(core.Map _json) {
+    if (_json.containsKey("companyId")) {
+      companyId = _json["companyId"];
+    }
+    if (_json.containsKey("companyName")) {
+      companyName = _json["companyName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (companyId != null) {
+      _json["companyId"] = companyId;
+    }
+    if (companyName != null) {
+      _json["companyName"] = companyName;
+    }
+    return _json;
+  }
+}
+
+/** Device */
+class Device {
+  /** claims */
+  core.List<DeviceClaim> claims;
+  /** Device id */
+  core.String deviceId;
+  /** Device identifier */
+  DeviceIdentifier deviceIdentifier;
+  /** Device metadata */
+  DeviceMetadata deviceMetadata;
+  /** Resource name in 'partners/[PARTNER_ID]/devices/[DEVICE_ID]'. */
+  core.String name;
+
+  Device();
+
+  Device.fromJson(core.Map _json) {
+    if (_json.containsKey("claims")) {
+      claims = _json["claims"].map((value) => new DeviceClaim.fromJson(value)).toList();
+    }
+    if (_json.containsKey("deviceId")) {
+      deviceId = _json["deviceId"];
+    }
+    if (_json.containsKey("deviceIdentifier")) {
+      deviceIdentifier = new DeviceIdentifier.fromJson(_json["deviceIdentifier"]);
+    }
+    if (_json.containsKey("deviceMetadata")) {
+      deviceMetadata = new DeviceMetadata.fromJson(_json["deviceMetadata"]);
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (claims != null) {
+      _json["claims"] = claims.map((value) => (value).toJson()).toList();
+    }
+    if (deviceId != null) {
+      _json["deviceId"] = deviceId;
+    }
+    if (deviceIdentifier != null) {
+      _json["deviceIdentifier"] = (deviceIdentifier).toJson();
+    }
+    if (deviceMetadata != null) {
+      _json["deviceMetadata"] = (deviceMetadata).toJson();
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    return _json;
+  }
+}
+
+/** containing the necessary info about a claim for a partner. */
+class DeviceClaim {
+  /** owner id */
+  core.String ownerCompanyId;
+  /**
+   * section type.
+   * Possible string values are:
+   * - "SECTION_TYPE_UNSPECIFIED" : Unspecified
+   * - "SECTION_TYPE_ZERO_TOUCH" : Zero touch
+   */
+  core.String sectionType;
+
+  DeviceClaim();
+
+  DeviceClaim.fromJson(core.Map _json) {
+    if (_json.containsKey("ownerCompanyId")) {
+      ownerCompanyId = _json["ownerCompanyId"];
+    }
+    if (_json.containsKey("sectionType")) {
+      sectionType = _json["sectionType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (ownerCompanyId != null) {
+      _json["ownerCompanyId"] = ownerCompanyId;
+    }
+    if (sectionType != null) {
+      _json["sectionType"] = sectionType;
+    }
+    return _json;
+  }
+}
+
+/** DeviceIdentifiers identifies an unique device. */
+class DeviceIdentifier {
+  /** IMEI (either IMEI or MEID is required). */
+  core.String imei;
+  /** Manufacturer to match android.os.Build.MANUFACTURER (required). */
+  core.String manufacturer;
+  /** MEID */
+  core.String meid;
+  /** Model to match android.os.Build.MODEL (required). */
+  core.String model;
+  /** Serial number (optional) */
+  core.String serialNumber;
+
+  DeviceIdentifier();
+
+  DeviceIdentifier.fromJson(core.Map _json) {
+    if (_json.containsKey("imei")) {
+      imei = _json["imei"];
+    }
+    if (_json.containsKey("manufacturer")) {
+      manufacturer = _json["manufacturer"];
+    }
+    if (_json.containsKey("meid")) {
+      meid = _json["meid"];
+    }
+    if (_json.containsKey("model")) {
+      model = _json["model"];
+    }
+    if (_json.containsKey("serialNumber")) {
+      serialNumber = _json["serialNumber"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (imei != null) {
+      _json["imei"] = imei;
+    }
+    if (manufacturer != null) {
+      _json["manufacturer"] = manufacturer;
+    }
+    if (meid != null) {
+      _json["meid"] = meid;
+    }
+    if (model != null) {
+      _json["model"] = model;
+    }
+    if (serialNumber != null) {
+      _json["serialNumber"] = serialNumber;
+    }
+    return _json;
+  }
+}
+
+/** metadata */
+class DeviceMetadata {
+  /** Metadata entries */
+  core.Map<core.String, core.String> entries;
+
+  DeviceMetadata();
+
+  DeviceMetadata.fromJson(core.Map _json) {
+    if (_json.containsKey("entries")) {
+      entries = _json["entries"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (entries != null) {
+      _json["entries"] = entries;
+    }
+    return _json;
+  }
+}
+
+/** Long running operation metadata. */
+class DevicesLongRunningOperationMetadata {
+  /** Number of devices parsed in your requests. */
+  core.int devicesCount;
+  /**
+   * The overall processing status.
+   * Possible string values are:
+   * - "BATCH_PROCESS_STATUS_UNSPECIFIED" : Invalid code. Shouldn't be used.
+   * - "BATCH_PROCESS_PENDING" : Pending
+   * - "BATCH_PROCESS_IN_PROGRESS" : In progress
+   * - "BATCH_PROCESS_PROCESSED" : Processed.
+   * This doesn't mean all items were processed sucessfully, you should
+   * check the `response` field for the result of every item.
+   */
+  core.String processingStatus;
+  /** Processing progress from 0 to 100. */
+  core.int progress;
+
+  DevicesLongRunningOperationMetadata();
+
+  DevicesLongRunningOperationMetadata.fromJson(core.Map _json) {
+    if (_json.containsKey("devicesCount")) {
+      devicesCount = _json["devicesCount"];
+    }
+    if (_json.containsKey("processingStatus")) {
+      processingStatus = _json["processingStatus"];
+    }
+    if (_json.containsKey("progress")) {
+      progress = _json["progress"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (devicesCount != null) {
+      _json["devicesCount"] = devicesCount;
+    }
+    if (processingStatus != null) {
+      _json["processingStatus"] = processingStatus;
+    }
+    if (progress != null) {
+      _json["progress"] = progress;
+    }
+    return _json;
+  }
+}
+
+/** Long running operation response. */
+class DevicesLongRunningOperationResponse {
+  /**
+   * processing status for each device.
+   * One PerDeviceStatus per device. The order is the same as in your requests.
+   */
+  core.List<OperationPerDevice> perDeviceStatus;
+  /** Number of succeesfully processed ones. */
+  core.int successCount;
+
+  DevicesLongRunningOperationResponse();
+
+  DevicesLongRunningOperationResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("perDeviceStatus")) {
+      perDeviceStatus = _json["perDeviceStatus"].map((value) => new OperationPerDevice.fromJson(value)).toList();
+    }
+    if (_json.containsKey("successCount")) {
+      successCount = _json["successCount"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (perDeviceStatus != null) {
+      _json["perDeviceStatus"] = perDeviceStatus.map((value) => (value).toJson()).toList();
+    }
+    if (successCount != null) {
+      _json["successCount"] = successCount;
+    }
+    return _json;
+  }
+}
+
+/**
+ * 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 `{}`.
+ */
+class Empty {
+
+  Empty();
+
+  Empty.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/** Request to find devices. */
+class FindDevicesByDeviceIdentifierRequest {
+  /** The device identifier to search */
+  DeviceIdentifier deviceIdentifier;
+  /** Number of devices to show. */
+  core.String limit;
+  /** Page token */
+  core.String pageToken;
+
+  FindDevicesByDeviceIdentifierRequest();
+
+  FindDevicesByDeviceIdentifierRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("deviceIdentifier")) {
+      deviceIdentifier = new DeviceIdentifier.fromJson(_json["deviceIdentifier"]);
+    }
+    if (_json.containsKey("limit")) {
+      limit = _json["limit"];
+    }
+    if (_json.containsKey("pageToken")) {
+      pageToken = _json["pageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deviceIdentifier != null) {
+      _json["deviceIdentifier"] = (deviceIdentifier).toJson();
+    }
+    if (limit != null) {
+      _json["limit"] = limit;
+    }
+    if (pageToken != null) {
+      _json["pageToken"] = pageToken;
+    }
+    return _json;
+  }
+}
+
+/** Response containing found devices. */
+class FindDevicesByDeviceIdentifierResponse {
+  /** Found devices. */
+  core.List<Device> devices;
+  /** Page token of next page */
+  core.String nextPageToken;
+
+  FindDevicesByDeviceIdentifierResponse();
+
+  FindDevicesByDeviceIdentifierResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("devices")) {
+      devices = _json["devices"].map((value) => new Device.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (devices != null) {
+      _json["devices"] = devices.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** Request to find devices by customers. */
+class FindDevicesByOwnerRequest {
+  /** List of customer ids to search for. */
+  core.List<core.String> customerId;
+  /** The number of devices to show in the result. */
+  core.String limit;
+  /** Page token */
+  core.String pageToken;
+  /**
+   * The section type.
+   * Possible string values are:
+   * - "SECTION_TYPE_UNSPECIFIED" : Unspecified
+   * - "SECTION_TYPE_ZERO_TOUCH" : Zero touch
+   */
+  core.String sectionType;
+
+  FindDevicesByOwnerRequest();
+
+  FindDevicesByOwnerRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("customerId")) {
+      customerId = _json["customerId"];
+    }
+    if (_json.containsKey("limit")) {
+      limit = _json["limit"];
+    }
+    if (_json.containsKey("pageToken")) {
+      pageToken = _json["pageToken"];
+    }
+    if (_json.containsKey("sectionType")) {
+      sectionType = _json["sectionType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (customerId != null) {
+      _json["customerId"] = customerId;
+    }
+    if (limit != null) {
+      _json["limit"] = limit;
+    }
+    if (pageToken != null) {
+      _json["pageToken"] = pageToken;
+    }
+    if (sectionType != null) {
+      _json["sectionType"] = sectionType;
+    }
+    return _json;
+  }
+}
+
+/** Response containing found devices. */
+class FindDevicesByOwnerResponse {
+  /** Devices found. */
+  core.List<Device> devices;
+  /** Page token of next page */
+  core.String nextPageToken;
+
+  FindDevicesByOwnerResponse();
+
+  FindDevicesByOwnerResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("devices")) {
+      devices = _json["devices"].map((value) => new Device.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (devices != null) {
+      _json["devices"] = devices.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** Response message of all customers related to this partner. */
+class ListCustomersResponse {
+  /** List of customers related to this partner. */
+  core.List<Company> customers;
+
+  ListCustomersResponse();
+
+  ListCustomersResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("customers")) {
+      customers = _json["customers"].map((value) => new Company.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (customers != null) {
+      _json["customers"] = customers.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/**
+ * This resource represents a long-running operation that is the result of a
+ * network API call.
+ */
+class Operation {
+  /**
+   * 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.
+   */
+  core.bool done;
+  /**
+   * This field will always be not set if the operation is created by
+   * `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`. In this case, error
+   * information for each device is set in
+   * `response.perDeviceStatus.result.status`.
+   */
+  Status error;
+  /**
+   * This field will contain a `DevicesLongRunningOperationMetadata` object if
+   * the operation is created by `claimAsync`, `unclaimAsync`, or
+   * `updateMetadataAsync`.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> metadata;
+  /**
+   * 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`.
+   */
+  core.String name;
+  /**
+   * This field will contain a `DevicesLongRunningOperationResponse` object if
+   * the operation is created by `claimAsync`, `unclaimAsync`, or
+   * `updateMetadataAsync`.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> response;
+
+  Operation();
+
+  Operation.fromJson(core.Map _json) {
+    if (_json.containsKey("done")) {
+      done = _json["done"];
+    }
+    if (_json.containsKey("error")) {
+      error = new Status.fromJson(_json["error"]);
+    }
+    if (_json.containsKey("metadata")) {
+      metadata = _json["metadata"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("response")) {
+      response = _json["response"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (done != null) {
+      _json["done"] = done;
+    }
+    if (error != null) {
+      _json["error"] = (error).toJson();
+    }
+    if (metadata != null) {
+      _json["metadata"] = metadata;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (response != null) {
+      _json["response"] = response;
+    }
+    return _json;
+  }
+}
+
+/** Operation the server received for every device. */
+class OperationPerDevice {
+  /** Request to claim a device. */
+  PartnerClaim claim;
+  /** Processing result for every device. */
+  PerDeviceStatusInBatch result;
+  /** Request to unclaim a device. */
+  PartnerUnclaim unclaim;
+  /** Request to set metadata for a device. */
+  UpdateMetadataArguments updateMetadata;
+
+  OperationPerDevice();
+
+  OperationPerDevice.fromJson(core.Map _json) {
+    if (_json.containsKey("claim")) {
+      claim = new PartnerClaim.fromJson(_json["claim"]);
+    }
+    if (_json.containsKey("result")) {
+      result = new PerDeviceStatusInBatch.fromJson(_json["result"]);
+    }
+    if (_json.containsKey("unclaim")) {
+      unclaim = new PartnerUnclaim.fromJson(_json["unclaim"]);
+    }
+    if (_json.containsKey("updateMetadata")) {
+      updateMetadata = new UpdateMetadataArguments.fromJson(_json["updateMetadata"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (claim != null) {
+      _json["claim"] = (claim).toJson();
+    }
+    if (result != null) {
+      _json["result"] = (result).toJson();
+    }
+    if (unclaim != null) {
+      _json["unclaim"] = (unclaim).toJson();
+    }
+    if (updateMetadata != null) {
+      _json["updateMetadata"] = (updateMetadata).toJson();
+    }
+    return _json;
+  }
+}
+
+/** Identifies one claim request. */
+class PartnerClaim {
+  /** customer id to claim for. */
+  core.String customerId;
+  /** Device identifier of the device. */
+  DeviceIdentifier deviceIdentifier;
+  /** metadata to set at claim. */
+  DeviceMetadata deviceMetadata;
+  /**
+   * section type to claim.
+   * Possible string values are:
+   * - "SECTION_TYPE_UNSPECIFIED" : Unspecified
+   * - "SECTION_TYPE_ZERO_TOUCH" : Zero touch
+   */
+  core.String sectionType;
+
+  PartnerClaim();
+
+  PartnerClaim.fromJson(core.Map _json) {
+    if (_json.containsKey("customerId")) {
+      customerId = _json["customerId"];
+    }
+    if (_json.containsKey("deviceIdentifier")) {
+      deviceIdentifier = new DeviceIdentifier.fromJson(_json["deviceIdentifier"]);
+    }
+    if (_json.containsKey("deviceMetadata")) {
+      deviceMetadata = new DeviceMetadata.fromJson(_json["deviceMetadata"]);
+    }
+    if (_json.containsKey("sectionType")) {
+      sectionType = _json["sectionType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (customerId != null) {
+      _json["customerId"] = customerId;
+    }
+    if (deviceIdentifier != null) {
+      _json["deviceIdentifier"] = (deviceIdentifier).toJson();
+    }
+    if (deviceMetadata != null) {
+      _json["deviceMetadata"] = (deviceMetadata).toJson();
+    }
+    if (sectionType != null) {
+      _json["sectionType"] = sectionType;
+    }
+    return _json;
+  }
+}
+
+/** Identifies one unclaim request. */
+class PartnerUnclaim {
+  /** device id of the device. */
+  core.String deviceId;
+  /** device identifier of the device. */
+  DeviceIdentifier deviceIdentifier;
+  /**
+   * section type to unclaim.
+   * Possible string values are:
+   * - "SECTION_TYPE_UNSPECIFIED" : Unspecified
+   * - "SECTION_TYPE_ZERO_TOUCH" : Zero touch
+   */
+  core.String sectionType;
+
+  PartnerUnclaim();
+
+  PartnerUnclaim.fromJson(core.Map _json) {
+    if (_json.containsKey("deviceId")) {
+      deviceId = _json["deviceId"];
+    }
+    if (_json.containsKey("deviceIdentifier")) {
+      deviceIdentifier = new DeviceIdentifier.fromJson(_json["deviceIdentifier"]);
+    }
+    if (_json.containsKey("sectionType")) {
+      sectionType = _json["sectionType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deviceId != null) {
+      _json["deviceId"] = deviceId;
+    }
+    if (deviceIdentifier != null) {
+      _json["deviceIdentifier"] = (deviceIdentifier).toJson();
+    }
+    if (sectionType != null) {
+      _json["sectionType"] = sectionType;
+    }
+    return _json;
+  }
+}
+
+/** Stores the processing result for each device. */
+class PerDeviceStatusInBatch {
+  /** device id of the device if process succeeds. */
+  core.String deviceId;
+  /** Error identifier. */
+  core.String errorIdentifier;
+  /** Error message */
+  core.String errorMessage;
+  /**
+   * Process result.
+   * Possible string values are:
+   * - "SINGLE_DEVICE_STATUS_UNSPECIFIED" : Invalid code. Shouldn' be used.
+   * - "SINGLE_DEVICE_STATUS_UNKNOWN_ERROR" : Unknown error.
+   * Unknown error is we don't expect it here.
+   * - "SINGLE_DEVICE_STATUS_OTHER_ERROR" : Other error.
+   * Other error is we know/expect this error, but not having proper error
+   * code yet.
+   * - "SINGLE_DEVICE_STATUS_SUCCESS" : Success.
+   * - "SINGLE_DEVICE_STATUS_PERMISSION_DENIED" : Permission denied
+   * - "SINGLE_DEVICE_STATUS_INVALID_DEVICE_IDENTIFIER" : Invalid device
+   * identifier.
+   * - "SINGLE_DEVICE_STATUS_INVALID_SECTION_TYPE" : Invalid section type.
+   * - "SINGLE_DEVICE_STATUS_SECTION_NOT_YOURS" : This section is claimed by
+   * other company.
+   */
+  core.String status;
+
+  PerDeviceStatusInBatch();
+
+  PerDeviceStatusInBatch.fromJson(core.Map _json) {
+    if (_json.containsKey("deviceId")) {
+      deviceId = _json["deviceId"];
+    }
+    if (_json.containsKey("errorIdentifier")) {
+      errorIdentifier = _json["errorIdentifier"];
+    }
+    if (_json.containsKey("errorMessage")) {
+      errorMessage = _json["errorMessage"];
+    }
+    if (_json.containsKey("status")) {
+      status = _json["status"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deviceId != null) {
+      _json["deviceId"] = deviceId;
+    }
+    if (errorIdentifier != null) {
+      _json["errorIdentifier"] = errorIdentifier;
+    }
+    if (errorMessage != null) {
+      _json["errorMessage"] = errorMessage;
+    }
+    if (status != null) {
+      _json["status"] = status;
+    }
+    return _json;
+  }
+}
+
+/**
+ * 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` that 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.
+ *
+ * - 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.
+ */
+class Status {
+  /** The status code, which should be an enum value of google.rpc.Code. */
+  core.int code;
+  /**
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.List<core.Map<core.String, core.Object>> details;
+  /**
+   * 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.
+   */
+  core.String message;
+
+  Status();
+
+  Status.fromJson(core.Map _json) {
+    if (_json.containsKey("code")) {
+      code = _json["code"];
+    }
+    if (_json.containsKey("details")) {
+      details = _json["details"];
+    }
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (code != null) {
+      _json["code"] = code;
+    }
+    if (details != null) {
+      _json["details"] = details;
+    }
+    if (message != null) {
+      _json["message"] = message;
+    }
+    return _json;
+  }
+}
+
+/** Request message to unclaim a device. */
+class UnclaimDeviceRequest {
+  /** The device id returned by ClaimDevice. */
+  core.String deviceId;
+  /** The device identifier you use when you claimed this device. */
+  DeviceIdentifier deviceIdentifier;
+  /**
+   * The section type to unclaim for.
+   * Possible string values are:
+   * - "SECTION_TYPE_UNSPECIFIED" : Unspecified
+   * - "SECTION_TYPE_ZERO_TOUCH" : Zero touch
+   */
+  core.String sectionType;
+
+  UnclaimDeviceRequest();
+
+  UnclaimDeviceRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("deviceId")) {
+      deviceId = _json["deviceId"];
+    }
+    if (_json.containsKey("deviceIdentifier")) {
+      deviceIdentifier = new DeviceIdentifier.fromJson(_json["deviceIdentifier"]);
+    }
+    if (_json.containsKey("sectionType")) {
+      sectionType = _json["sectionType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deviceId != null) {
+      _json["deviceId"] = deviceId;
+    }
+    if (deviceIdentifier != null) {
+      _json["deviceIdentifier"] = (deviceIdentifier).toJson();
+    }
+    if (sectionType != null) {
+      _json["sectionType"] = sectionType;
+    }
+    return _json;
+  }
+}
+
+/** Request to unclaim devices asynchronously in batch. */
+class UnclaimDevicesRequest {
+  /** list of unclaims. */
+  core.List<PartnerUnclaim> unclaims;
+
+  UnclaimDevicesRequest();
+
+  UnclaimDevicesRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("unclaims")) {
+      unclaims = _json["unclaims"].map((value) => new PartnerUnclaim.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (unclaims != null) {
+      _json["unclaims"] = unclaims.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** Request to update device metadata in batch. */
+class UpdateDeviceMetadataInBatchRequest {
+  /** list of metadata updates. */
+  core.List<UpdateMetadataArguments> updates;
+
+  UpdateDeviceMetadataInBatchRequest();
+
+  UpdateDeviceMetadataInBatchRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("updates")) {
+      updates = _json["updates"].map((value) => new UpdateMetadataArguments.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (updates != null) {
+      _json["updates"] = updates.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** Request to set metadata for a device. */
+class UpdateDeviceMetadataRequest {
+  /** The metdata to set. */
+  DeviceMetadata deviceMetadata;
+
+  UpdateDeviceMetadataRequest();
+
+  UpdateDeviceMetadataRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("deviceMetadata")) {
+      deviceMetadata = new DeviceMetadata.fromJson(_json["deviceMetadata"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deviceMetadata != null) {
+      _json["deviceMetadata"] = (deviceMetadata).toJson();
+    }
+    return _json;
+  }
+}
+
+/** Identifies metdata updates to one device. */
+class UpdateMetadataArguments {
+  /** device id of the device. */
+  core.String deviceId;
+  /** device identifier. */
+  DeviceIdentifier deviceIdentifier;
+  /** The metadata to update. */
+  DeviceMetadata deviceMetadata;
+
+  UpdateMetadataArguments();
+
+  UpdateMetadataArguments.fromJson(core.Map _json) {
+    if (_json.containsKey("deviceId")) {
+      deviceId = _json["deviceId"];
+    }
+    if (_json.containsKey("deviceIdentifier")) {
+      deviceIdentifier = new DeviceIdentifier.fromJson(_json["deviceIdentifier"]);
+    }
+    if (_json.containsKey("deviceMetadata")) {
+      deviceMetadata = new DeviceMetadata.fromJson(_json["deviceMetadata"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deviceId != null) {
+      _json["deviceId"] = deviceId;
+    }
+    if (deviceIdentifier != null) {
+      _json["deviceIdentifier"] = (deviceIdentifier).toJson();
+    }
+    if (deviceMetadata != null) {
+      _json["deviceMetadata"] = (deviceMetadata).toJson();
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/androidenterprise/v1.dart b/generated/googleapis/lib/androidenterprise/v1.dart
index 9b265bb..7359d0e 100644
--- a/generated/googleapis/lib/androidenterprise/v1.dart
+++ b/generated/googleapis/lib/androidenterprise/v1.dart
@@ -570,6 +570,45 @@
   }
 
   /**
+   * Returns the Android Device Policy config resource.
+   *
+   * Request parameters:
+   *
+   * [enterpriseId] - The ID of the enterprise.
+   *
+   * Completes with a [AndroidDevicePolicyConfig].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<AndroidDevicePolicyConfig> getAndroidDevicePolicyConfig(core.String enterpriseId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (enterpriseId == null) {
+      throw new core.ArgumentError("Parameter enterpriseId is required.");
+    }
+
+    _url = 'enterprises/' + commons.Escaper.ecapeVariable('$enterpriseId') + '/androidDevicePolicyConfig';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new AndroidDevicePolicyConfig.fromJson(data));
+  }
+
+  /**
    * Returns a service account and credentials. The service account can be bound
    * to the enterprise by calling setAccount. The service account is unique to
    * this enterprise and EMM, and will be deleted if the enterprise is unbound.
@@ -910,6 +949,52 @@
   }
 
   /**
+   * Sets the Android Device Policy config resource. EMM may use this API to
+   * enable or disable Android Device Policy support for the specified
+   * enterprise.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [enterpriseId] - The ID of the enterprise.
+   *
+   * Completes with a [AndroidDevicePolicyConfig].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<AndroidDevicePolicyConfig> setAndroidDevicePolicyConfig(AndroidDevicePolicyConfig request, core.String enterpriseId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (enterpriseId == null) {
+      throw new core.ArgumentError("Parameter enterpriseId is required.");
+    }
+
+    _url = 'enterprises/' + commons.Escaper.ecapeVariable('$enterpriseId') + '/androidDevicePolicyConfig';
+
+    var _response = _requester.request(_url,
+                                       "PUT",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new AndroidDevicePolicyConfig.fromJson(data));
+  }
+
+  /**
    * Sets the store layout for the enterprise. By default, storeLayoutType is
    * set to "basic" and the basic store layout is enabled. The basic layout only
    * contains apps approved by the admin, and that have been added to the
@@ -4114,6 +4199,43 @@
   }
 }
 
+/** The Android Device Policy configuration of an enterprise. */
+class AndroidDevicePolicyConfig {
+  /**
+   * Identifies what kind of resource this is. Value: the fixed string
+   * "androidenterprise#androidDevicePolicyConfig".
+   */
+  core.String kind;
+  /**
+   * The state of Android Device Policy. "enabled" indicates that Android Device
+   * Policy is enabled for the enterprise and the EMM is allowed to manage
+   * devices with Android Device Policy, while "disabled" means that it cannot.
+   */
+  core.String state;
+
+  AndroidDevicePolicyConfig();
+
+  AndroidDevicePolicyConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("kind")) {
+      kind = _json["kind"];
+    }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (kind != null) {
+      _json["kind"] = kind;
+    }
+    if (state != null) {
+      _json["state"] = state;
+    }
+    return _json;
+  }
+}
+
 /**
  * Represents the list of app restrictions available to be pre-configured for
  * the product.
diff --git a/generated/googleapis/lib/androidmanagement/v1.dart b/generated/googleapis/lib/androidmanagement/v1.dart
new file mode 100644
index 0000000..1d8eb8a
--- /dev/null
+++ b/generated/googleapis/lib/androidmanagement/v1.dart
@@ -0,0 +1,4065 @@
+// This is a generated file (see the discoveryapis_generator project).
+
+library googleapis.androidmanagement.v1;
+
+import 'dart:core' as core;
+import 'dart:async' as async;
+import 'dart:convert' as convert;
+
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
+import 'package:http/http.dart' as http;
+
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
+    ApiRequestError, DetailedApiRequestError;
+
+const core.String USER_AGENT = 'dart-api-client androidmanagement/v1';
+
+/**
+ * The Android Management API provides remote enterprise management of Android
+ * devices and apps.
+ */
+class AndroidmanagementApi {
+
+  final commons.ApiRequester _requester;
+
+  EnterprisesResourceApi get enterprises => new EnterprisesResourceApi(_requester);
+  SignupUrlsResourceApi get signupUrls => new SignupUrlsResourceApi(_requester);
+
+  AndroidmanagementApi(http.Client client, {core.String rootUrl: "https://androidmanagement.googleapis.com/", core.String servicePath: ""}) :
+      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
+}
+
+
+class EnterprisesResourceApi {
+  final commons.ApiRequester _requester;
+
+  EnterprisesApplicationsResourceApi get applications => new EnterprisesApplicationsResourceApi(_requester);
+  EnterprisesDevicesResourceApi get devices => new EnterprisesDevicesResourceApi(_requester);
+  EnterprisesEnrollmentTokensResourceApi get enrollmentTokens => new EnterprisesEnrollmentTokensResourceApi(_requester);
+  EnterprisesPoliciesResourceApi get policies => new EnterprisesPoliciesResourceApi(_requester);
+  EnterprisesWebTokensResourceApi get webTokens => new EnterprisesWebTokensResourceApi(_requester);
+
+  EnterprisesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates an enterprise by completing the enterprise signup flow.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [signupUrlName] - The name of the
+   * [`SignupUrl`](/android/management/reference/rest/v1/signupUrls#SignupUrl)
+   * used to sign up for the enterprise.
+   *
+   * [enterpriseToken] - The enterprise token appended to the callback URL.
+   *
+   * [projectId] - The id of the Google Cloud Platform project which will own
+   * the enterprise.
+   *
+   * Completes with a [Enterprise].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Enterprise> create(Enterprise request, {core.String signupUrlName, core.String enterpriseToken, core.String projectId}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (signupUrlName != null) {
+      _queryParams["signupUrlName"] = [signupUrlName];
+    }
+    if (enterpriseToken != null) {
+      _queryParams["enterpriseToken"] = [enterpriseToken];
+    }
+    if (projectId != null) {
+      _queryParams["projectId"] = [projectId];
+    }
+
+    _url = 'v1/enterprises';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Enterprise.fromJson(data));
+  }
+
+  /**
+   * Gets an enterprise.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the enterprise in the form
+   * `enterprises/{enterpriseId}`
+   * Value must have pattern "^enterprises/[^/]+$".
+   *
+   * Completes with a [Enterprise].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Enterprise> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Enterprise.fromJson(data));
+  }
+
+  /**
+   * Updates an enterprise.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the enterprise in the form
+   * `enterprises/{enterpriseId}`
+   * Value must have pattern "^enterprises/[^/]+$".
+   *
+   * [updateMask] - The field mask indicating the fields to update.
+   * If not set, all modifiable fields will be modified.
+   *
+   * Completes with a [Enterprise].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Enterprise> patch(Enterprise request, core.String name, {core.String updateMask}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "PATCH",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Enterprise.fromJson(data));
+  }
+
+}
+
+
+class EnterprisesApplicationsResourceApi {
+  final commons.ApiRequester _requester;
+
+  EnterprisesApplicationsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Gets info about an application.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the application in the form
+   * `enterprises/{enterpriseId}/applications/{package_name}`
+   * Value must have pattern "^enterprises/[^/]+/applications/[^/]+$".
+   *
+   * [languageCode] - The preferred language for localized application info, as
+   * a BCP47 tag
+   * (e.g. "en-US", "de"). If not specified the default language of the
+   * application will be used.
+   *
+   * Completes with a [Application].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Application> get(core.String name, {core.String languageCode}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (languageCode != null) {
+      _queryParams["languageCode"] = [languageCode];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Application.fromJson(data));
+  }
+
+}
+
+
+class EnterprisesDevicesResourceApi {
+  final commons.ApiRequester _requester;
+
+  EnterprisesDevicesOperationsResourceApi get operations => new EnterprisesDevicesOperationsResourceApi(_requester);
+
+  EnterprisesDevicesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Deletes a device, which causes the device to be wiped.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the device in the form
+   * `enterprises/{enterpriseId}/devices/{deviceId}`
+   * Value must have pattern "^enterprises/[^/]+/devices/[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Gets a device.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the device in the form
+   * `enterprises/{enterpriseId}/devices/{deviceId}`
+   * Value must have pattern "^enterprises/[^/]+/devices/[^/]+$".
+   *
+   * Completes with a [Device].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Device> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Device.fromJson(data));
+  }
+
+  /**
+   * Issues a command to a device. The
+   * [`Operation`](/android/management/reference/rest/v1/enterprises.devices.operations#Operation)
+   * resource returned contains a
+   * [`Command`](/android/management/reference/rest/v1/enterprises.devices/issueCommand#Command)
+   * in its `metadata` field.
+   * Use the
+   * [get operation
+   * method](/android/management/reference/rest/v1/enterprises.devices.operations/get)
+   * to get the status of the command.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the device in the form
+   * `enterprises/{enterpriseId}/devices/{deviceId}`
+   * Value must have pattern "^enterprises/[^/]+/devices/[^/]+$".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> issueCommand(Command request, core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + ':issueCommand';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Lists devices for a given enterprise.
+   *
+   * Request parameters:
+   *
+   * [parent] - The name of the enterprise in the form
+   * `enterprises/{enterpriseId}`
+   * Value must have pattern "^enterprises/[^/]+$".
+   *
+   * [pageSize] - The requested page size. The actual page size may be fixed to
+   * a min or max
+   * value.
+   *
+   * [pageToken] - A token identifying a page of results the server should
+   * return.
+   *
+   * Completes with a [ListDevicesResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListDevicesResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/devices';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListDevicesResponse.fromJson(data));
+  }
+
+  /**
+   * Updates a device.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the device in the form
+   * `enterprises/{enterpriseId}/devices/{deviceId}`
+   * Value must have pattern "^enterprises/[^/]+/devices/[^/]+$".
+   *
+   * [updateMask] - The field mask indicating the fields to update.
+   * If not set, all modifiable fields will be modified.
+   *
+   * Completes with a [Device].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Device> patch(Device request, core.String name, {core.String updateMask}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "PATCH",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Device.fromJson(data));
+  }
+
+}
+
+
+class EnterprisesDevicesOperationsResourceApi {
+  final commons.ApiRequester _requester;
+
+  EnterprisesDevicesOperationsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Starts asynchronous cancellation on a long-running operation.  The server
+   * makes a best effort to cancel the operation, but success is not
+   * guaranteed.  If the server doesn't support this method, it returns
+   * `google.rpc.Code.UNIMPLEMENTED`.  Clients can use
+   * Operations.GetOperation or
+   * other methods to check whether the cancellation succeeded or whether the
+   * operation completed despite cancellation. On successful cancellation,
+   * the operation is not deleted; instead, it becomes an operation with
+   * an Operation.error value with a google.rpc.Status.code of 1,
+   * corresponding to `Code.CANCELLED`.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation resource to be cancelled.
+   * Value must have pattern
+   * "^enterprises/[^/]+/devices/[^/]+/operations/[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> cancel(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + ':cancel';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Deletes a long-running operation. This method indicates that the client is
+   * no longer interested in the operation result. It does not cancel the
+   * operation. If the server doesn't support this method, it returns
+   * `google.rpc.Code.UNIMPLEMENTED`.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation resource to be deleted.
+   * Value must have pattern
+   * "^enterprises/[^/]+/devices/[^/]+/operations/[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * 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.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation resource.
+   * Value must have pattern
+   * "^enterprises/[^/]+/devices/[^/]+/operations/[^/]+$".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * 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 allows API services to override the binding
+   * to use different resource name schemes, such as `users / * /operations`. To
+   * override the binding, API services can add a binding such as
+   * `"/v1/{name=users / * }/operations"` to their service configuration.
+   * For backwards compatibility, the default name includes the operations
+   * collection id, however overriding users must ensure the name binding
+   * is the parent resource, without the operations collection id.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation's parent resource.
+   * Value must have pattern "^enterprises/[^/]+/devices/[^/]+/operations$".
+   *
+   * [pageSize] - The standard list page size.
+   *
+   * [filter] - The standard list filter.
+   *
+   * [pageToken] - The standard list page token.
+   *
+   * Completes with a [ListOperationsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListOperationsResponse> list(core.String name, {core.int pageSize, core.String filter, core.String pageToken}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListOperationsResponse.fromJson(data));
+  }
+
+}
+
+
+class EnterprisesEnrollmentTokensResourceApi {
+  final commons.ApiRequester _requester;
+
+  EnterprisesEnrollmentTokensResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates an enrollment token for a given enterprise.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [parent] - The name of the enterprise in the form
+   * `enterprises/{enterpriseId}`
+   * Value must have pattern "^enterprises/[^/]+$".
+   *
+   * Completes with a [EnrollmentToken].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<EnrollmentToken> create(EnrollmentToken request, core.String parent) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/enrollmentTokens';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new EnrollmentToken.fromJson(data));
+  }
+
+  /**
+   * Deletes an enrollment token, which prevents future use of the token.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the enrollment token in the form
+   * `enterprises/{enterpriseId}/enrollmentTokens/{enrollmentTokenId}`
+   * Value must have pattern "^enterprises/[^/]+/enrollmentTokens/[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+}
+
+
+class EnterprisesPoliciesResourceApi {
+  final commons.ApiRequester _requester;
+
+  EnterprisesPoliciesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Deletes a policy. This operation is only permitted if no devices are
+   * currently referencing the policy.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the policy in the form
+   * `enterprises/{enterpriseId}/policies/{policyId}`
+   * Value must have pattern "^enterprises/[^/]+/policies/[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Gets a policy.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the policy in the form
+   * `enterprises/{enterpriseId}/policies/{policyId}`
+   * Value must have pattern "^enterprises/[^/]+/policies/[^/]+$".
+   *
+   * Completes with a [Policy].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Policy> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Policy.fromJson(data));
+  }
+
+  /**
+   * Lists policies for a given enterprise.
+   *
+   * Request parameters:
+   *
+   * [parent] - The name of the enterprise in the form
+   * `enterprises/{enterpriseId}`
+   * Value must have pattern "^enterprises/[^/]+$".
+   *
+   * [pageSize] - The requested page size. The actual page size may be fixed to
+   * a min or max
+   * value.
+   *
+   * [pageToken] - A token identifying a page of results the server should
+   * return.
+   *
+   * Completes with a [ListPoliciesResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListPoliciesResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/policies';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListPoliciesResponse.fromJson(data));
+  }
+
+  /**
+   * Updates or creates a policy.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the policy in the form
+   * `enterprises/{enterpriseId}/policies/{policyId}`
+   * Value must have pattern "^enterprises/[^/]+/policies/[^/]+$".
+   *
+   * [updateMask] - The field mask indicating the fields to update.
+   * If not set, all modifiable fields will be modified.
+   *
+   * Completes with a [Policy].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Policy> patch(Policy request, core.String name, {core.String updateMask}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "PATCH",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Policy.fromJson(data));
+  }
+
+}
+
+
+class EnterprisesWebTokensResourceApi {
+  final commons.ApiRequester _requester;
+
+  EnterprisesWebTokensResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates a web token to access an embeddable managed Google Play web UI for
+   * a given enterprise.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [parent] - The name of the enterprise in the form
+   * `enterprises/{enterpriseId}`
+   * Value must have pattern "^enterprises/[^/]+$".
+   *
+   * Completes with a [WebToken].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<WebToken> create(WebToken request, core.String parent) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/webTokens';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new WebToken.fromJson(data));
+  }
+
+}
+
+
+class SignupUrlsResourceApi {
+  final commons.ApiRequester _requester;
+
+  SignupUrlsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates an enterprise signup URL.
+   *
+   * Request parameters:
+   *
+   * [callbackUrl] - The callback URL to which the admin will be redirected
+   * after successfully
+   * creating an enterprise. Before redirecting there the system will add a
+   * query parameter to this URL named `enterpriseToken` which will
+   * contain an opaque token to be used for the
+   * [create
+   * enterprise](/android/management/reference/rest/v1/enterprises/create)
+   * request. The URL will be parsed then reformatted in order to add the
+   * `enterpriseToken` parameter, so there may be some minor formatting changes.
+   *
+   * [projectId] - The id of the Google Cloud Platform project which will own
+   * the enterprise.
+   *
+   * Completes with a [SignupUrl].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<SignupUrl> create({core.String callbackUrl, core.String projectId}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (callbackUrl != null) {
+      _queryParams["callbackUrl"] = [callbackUrl];
+    }
+    if (projectId != null) {
+      _queryParams["projectId"] = [projectId];
+    }
+
+    _url = 'v1/signupUrls';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new SignupUrl.fromJson(data));
+  }
+
+}
+
+
+
+/**
+ * A compliance rule condition which is satisfied if the Android Framework API
+ * level on the device does not meet a minimum requirement. There can only be
+ * one rule with this type of condition per policy.
+ */
+class ApiLevelCondition {
+  /**
+   * The minimum desired Android Framework API level. If the device does not
+   * meet the minimum requirement, this condition is satisfied. Must be greater
+   * than zero.
+   */
+  core.int minApiLevel;
+
+  ApiLevelCondition();
+
+  ApiLevelCondition.fromJson(core.Map _json) {
+    if (_json.containsKey("minApiLevel")) {
+      minApiLevel = _json["minApiLevel"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (minApiLevel != null) {
+      _json["minApiLevel"] = minApiLevel;
+    }
+    return _json;
+  }
+}
+
+/** Application information. */
+class Application {
+  /**
+   * The set of managed properties available to be pre-configured for the
+   * application.
+   */
+  core.List<ManagedProperty> managedProperties;
+  /**
+   * The name of the application in the form
+   * `enterprises/{enterpriseId}/applications/{package_name}`
+   */
+  core.String name;
+  /** The permissions required by the app. */
+  core.List<ApplicationPermission> permissions;
+  /** The title of the application. Localized. */
+  core.String title;
+
+  Application();
+
+  Application.fromJson(core.Map _json) {
+    if (_json.containsKey("managedProperties")) {
+      managedProperties = _json["managedProperties"].map((value) => new ManagedProperty.fromJson(value)).toList();
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("permissions")) {
+      permissions = _json["permissions"].map((value) => new ApplicationPermission.fromJson(value)).toList();
+    }
+    if (_json.containsKey("title")) {
+      title = _json["title"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (managedProperties != null) {
+      _json["managedProperties"] = managedProperties.map((value) => (value).toJson()).toList();
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (permissions != null) {
+      _json["permissions"] = permissions.map((value) => (value).toJson()).toList();
+    }
+    if (title != null) {
+      _json["title"] = title;
+    }
+    return _json;
+  }
+}
+
+/** Application permission. */
+class ApplicationPermission {
+  /**
+   * A longer description of the permission, giving more details of
+   * what it affects. Localized.
+   */
+  core.String description;
+  /** The name of the permission. Localized. */
+  core.String name;
+  /** An opaque string uniquely identifying the permission. Not localized. */
+  core.String permissionId;
+
+  ApplicationPermission();
+
+  ApplicationPermission.fromJson(core.Map _json) {
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("permissionId")) {
+      permissionId = _json["permissionId"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (permissionId != null) {
+      _json["permissionId"] = permissionId;
+    }
+    return _json;
+  }
+}
+
+/** Policy for an individual app. */
+class ApplicationPolicy {
+  /**
+   * The default policy for all permissions requested by the app. If specified,
+   * this overrides the policy-level `default_permission_policy` which applies
+   * to all apps.
+   * Possible string values are:
+   * - "PERMISSION_POLICY_UNSPECIFIED" : Policy not specified. If no policy is
+   * specified for a permission at any
+   * level, then the `PROMPT` behavior is used by default.
+   * - "PROMPT" : Prompt the user to grant a permission.
+   * - "GRANT" : Automatically grant a permission.
+   * - "DENY" : Automatically deny a permission.
+   */
+  core.String defaultPermissionPolicy;
+  /**
+   * The type of installation to perform.
+   * Possible string values are:
+   * - "INSTALL_TYPE_UNSPECIFIED" : No automatic installation is performed. Any
+   * other app policies will be
+   * applied if the user installs the app.
+   * - "PREINSTALLED" : The application is automatically installed and can be
+   * removed by the
+   * user.
+   * - "FORCE_INSTALLED" : The application is automatically installed and cannot
+   * be removed by the
+   * user.
+   */
+  core.String installType;
+  /** Whether the application is allowed to lock itself in full-screen mode. */
+  core.bool lockTaskAllowed;
+  /**
+   * Managed configuration applied to the app. The format for the configuration
+   * is dictated by the
+   * [`ManagedProperty`](/android/management/reference/rest/v1/enterprises.applications#ManagedProperty)
+   * values supported by the app. Each field name in the managed configuration
+   * must match the `key` field of the `ManagedProperty`. The field value must
+   * be compatible with the `type` of the `ManagedProperty`:
+   * <table>
+   * <tr><td><i>type</i></td><td><i>JSON value</i></td></tr>
+   * <tr><td>`BOOL`</td><td>`true` or `false`</td></tr>
+   * <tr><td>`STRING`</td><td>string</td></tr>
+   * <tr><td>`INTEGER`</td><td>number</td></tr>
+   * <tr><td>`CHOICE`</td><td>string</td></tr>
+   * <tr><td>`MULTISELECT`</td><td>array of strings</td></tr>
+   * <tr><td>`HIDDEN`</td><td>string</td></tr>
+   * <tr><td>`BUNDLE_ARRAY`</td><td>array of objects</td></tr>
+   * </table>
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> managedConfiguration;
+  /**
+   * The package name of the app, e.g. `com.google.android.youtube` for the
+   * YouTube app.
+   */
+  core.String packageName;
+  /**
+   * Explicit permission grants or denials for the app. These values override
+   * the `default_permission_policy`.
+   */
+  core.List<PermissionGrant> permissionGrants;
+
+  ApplicationPolicy();
+
+  ApplicationPolicy.fromJson(core.Map _json) {
+    if (_json.containsKey("defaultPermissionPolicy")) {
+      defaultPermissionPolicy = _json["defaultPermissionPolicy"];
+    }
+    if (_json.containsKey("installType")) {
+      installType = _json["installType"];
+    }
+    if (_json.containsKey("lockTaskAllowed")) {
+      lockTaskAllowed = _json["lockTaskAllowed"];
+    }
+    if (_json.containsKey("managedConfiguration")) {
+      managedConfiguration = _json["managedConfiguration"];
+    }
+    if (_json.containsKey("packageName")) {
+      packageName = _json["packageName"];
+    }
+    if (_json.containsKey("permissionGrants")) {
+      permissionGrants = _json["permissionGrants"].map((value) => new PermissionGrant.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (defaultPermissionPolicy != null) {
+      _json["defaultPermissionPolicy"] = defaultPermissionPolicy;
+    }
+    if (installType != null) {
+      _json["installType"] = installType;
+    }
+    if (lockTaskAllowed != null) {
+      _json["lockTaskAllowed"] = lockTaskAllowed;
+    }
+    if (managedConfiguration != null) {
+      _json["managedConfiguration"] = managedConfiguration;
+    }
+    if (packageName != null) {
+      _json["packageName"] = packageName;
+    }
+    if (permissionGrants != null) {
+      _json["permissionGrants"] = permissionGrants.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** A command. */
+class Command {
+  /**
+   * The timestamp at which the command was created. The timestamp is
+   * automatically generated by the server.
+   */
+  core.String createTime;
+  /**
+   * The duration for which the command is valid. The command will expire if not
+   * executed by the device during this time.  The default duration if
+   * unspecified is ten minutes. There is no maximum duration.
+   */
+  core.String duration;
+  /**
+   * For commands of type `RESET_PASSWORD`, optionally specifies the new
+   * password.
+   */
+  core.String newPassword;
+  /** For commands of type `RESET_PASSWORD`, optionally specifies flags. */
+  core.List<core.String> resetPasswordFlags;
+  /**
+   * The type of the command.
+   * Possible string values are:
+   * - "COMMAND_TYPE_UNSPECIFIED" : This value is disallowed.
+   * - "LOCK" : Lock the device, as if the lock screen timeout had expired.
+   * - "RESET_PASSWORD" : Reset the user's password.
+   * - "REBOOT" : Reboot the device. Only supported on API level 24+.
+   */
+  core.String type;
+
+  Command();
+
+  Command.fromJson(core.Map _json) {
+    if (_json.containsKey("createTime")) {
+      createTime = _json["createTime"];
+    }
+    if (_json.containsKey("duration")) {
+      duration = _json["duration"];
+    }
+    if (_json.containsKey("newPassword")) {
+      newPassword = _json["newPassword"];
+    }
+    if (_json.containsKey("resetPasswordFlags")) {
+      resetPasswordFlags = _json["resetPasswordFlags"];
+    }
+    if (_json.containsKey("type")) {
+      type = _json["type"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (createTime != null) {
+      _json["createTime"] = createTime;
+    }
+    if (duration != null) {
+      _json["duration"] = duration;
+    }
+    if (newPassword != null) {
+      _json["newPassword"] = newPassword;
+    }
+    if (resetPasswordFlags != null) {
+      _json["resetPasswordFlags"] = resetPasswordFlags;
+    }
+    if (type != null) {
+      _json["type"] = type;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A rule declaring which mitigating actions to take when a device is not
+ * compliant with its policy. For every rule, there is always an implicit
+ * mitigating action to set `policy_compliant` to false for the
+ * [`Device`](/android/management/reference/rest/v1/enterprises.devices#Device)
+ * resource, and display a message on the device indicating that the device is
+ * not compliant with its policy. Other mitigating actions may optionally be
+ * taken as well, depending on the field values in the rule.
+ */
+class ComplianceRule {
+  /**
+   * A condition which is satisfied if the Android Framework API level on the
+   * device does not meet a minimum requirement.
+   */
+  ApiLevelCondition apiLevelCondition;
+  /**
+   * If set to true, the rule includes a mitigating action to disable
+   * applications so that the device is effectively disabled, but application
+   * data is preserved. If the device is running an app in locked task mode, the
+   * app will be closed and a UI showing the reason for non-compliance will be
+   * displayed.
+   */
+  core.bool disableApps;
+  /**
+   * A condition which is satisfied if there exists *any* matching
+   * [`NonComplianceDetail`](/android/management/reference/rest/v1/enterprises.devices#NonComplianceDetail)
+   * for the device.
+   */
+  NonComplianceDetailCondition nonComplianceDetailCondition;
+
+  ComplianceRule();
+
+  ComplianceRule.fromJson(core.Map _json) {
+    if (_json.containsKey("apiLevelCondition")) {
+      apiLevelCondition = new ApiLevelCondition.fromJson(_json["apiLevelCondition"]);
+    }
+    if (_json.containsKey("disableApps")) {
+      disableApps = _json["disableApps"];
+    }
+    if (_json.containsKey("nonComplianceDetailCondition")) {
+      nonComplianceDetailCondition = new NonComplianceDetailCondition.fromJson(_json["nonComplianceDetailCondition"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (apiLevelCondition != null) {
+      _json["apiLevelCondition"] = (apiLevelCondition).toJson();
+    }
+    if (disableApps != null) {
+      _json["disableApps"] = disableApps;
+    }
+    if (nonComplianceDetailCondition != null) {
+      _json["nonComplianceDetailCondition"] = (nonComplianceDetailCondition).toJson();
+    }
+    return _json;
+  }
+}
+
+/**
+ * A device owned by an enterprise.
+ * Unless otherwise noted, all fields are read-only and cannot be modified by
+ * an update device request.
+ */
+class Device {
+  /** The API level of the Android platform version running on the device. */
+  core.int apiLevel;
+  /** The name of the policy that is currently applied by the device. */
+  core.String appliedPolicyName;
+  /** The version of the policy that is currently applied by the device. */
+  core.String appliedPolicyVersion;
+  /**
+   * The state that is currently applied by the device.
+   * Possible string values are:
+   * - "DEVICE_STATE_UNSPECIFIED" : This value is disallowed.
+   * - "ACTIVE" : The device is active.
+   * - "DISABLED" : The device is disabled.
+   * - "DELETED" : The device was deleted. This state will never be returned by
+   * an API call,
+   * but will be used in the final policy compliance report published to Cloud
+   * Pub/Sub when the device acknowledges the deletion.
+   * - "PROVISIONING" : The device is being provisioned. Newly enrolled devices
+   * will be in this
+   * state until they have applied policy.
+   */
+  core.String appliedState;
+  /**
+   * If the device state is `DISABLED`, an optional message that is displayed on
+   * the device indicating the reason the device is disabled. This field may be
+   * modified by an update request.
+   */
+  UserFacingMessage disabledReason;
+  /**
+   * Displays on the device. This information is only available when
+   * `displayInfoEnabled` is true in the device's policy.
+   */
+  core.List<Display> displays;
+  /** The time of device enrollment. */
+  core.String enrollmentTime;
+  /**
+   * If this device was enrolled with an enrollment token with additional data
+   * provided, this field contains that data.
+   */
+  core.String enrollmentTokenData;
+  /**
+   * If this device was enrolled with an enrollment token, this field contains
+   * the name of the token.
+   */
+  core.String enrollmentTokenName;
+  /** Detailed information about the device hardware. */
+  HardwareInfo hardwareInfo;
+  /**
+   * Hardware status samples in chronological order. This information is only
+   * available when `hardwareStatusEnabled` is true in the device's policy.
+   */
+  core.List<HardwareStatus> hardwareStatusSamples;
+  /** The last time the device sent a policy compliance report. */
+  core.String lastPolicyComplianceReportTime;
+  /** The last time the device fetched its policy. */
+  core.String lastPolicySyncTime;
+  /** The last time the device sent a status report. */
+  core.String lastStatusReportTime;
+  /**
+   * Events related to memory and storage measurements in chronological order.
+   * This information is only available when `memoryInfoEnabled` is true in the
+   * device's policy.
+   */
+  core.List<MemoryEvent> memoryEvents;
+  /**
+   * Memory information. This information is only available when
+   * `memoryInfoEnabled` is true in the device's policy.
+   */
+  MemoryInfo memoryInfo;
+  /**
+   * The name of the device in the form
+   * `enterprises/{enterpriseId}/devices/{deviceId}`
+   */
+  core.String name;
+  /**
+   * Device network information. This information is only available when
+   * `networkInfoEnabled` is true in the device's policy.
+   */
+  NetworkInfo networkInfo;
+  /**
+   * Details about policy settings for which the device is not in compliance.
+   */
+  core.List<NonComplianceDetail> nonComplianceDetails;
+  /** Whether the device is compliant with its policy. */
+  core.bool policyCompliant;
+  /**
+   * The name of the policy that is intended to be applied to the device. If
+   * empty, the policy with id `default` is applied.
+   * This field may be modified by an update request.
+   * The name of the policy is in the form
+   * `enterprises/{enterpriseId}/policies/{policyId}`.
+   * It is also permissible to only specify the `policyId` when updating this
+   * field as long as the `policyId` contains no slashes since the rest of the
+   * policy name can be inferred from context.
+   */
+  core.String policyName;
+  /**
+   * Power management events on the device in chronological order. This
+   * information is only available when `powerManagementEventsEnabled` is true
+   * in the device's policy.
+   */
+  core.List<PowerManagementEvent> powerManagementEvents;
+  /**
+   * The previous device names used for the same physical device when it has
+   * been enrolled multiple times. The serial number is used as the unique
+   * identifier to determine if the same physical device has enrolled
+   * previously. The names are in chronological order.
+   */
+  core.List<core.String> previousDeviceNames;
+  /**
+   * Detailed information about the device software. This information is only
+   * available when `softwareInfoEnabled` is true in the device's policy.
+   */
+  SoftwareInfo softwareInfo;
+  /**
+   * The state that is intended to be applied to the device. This field may be
+   * modified by an update request.
+   * Note that UpdateDevice only handles toggling between `ACTIVE` and
+   * `DISABLED` states. Use the
+   * [delete device
+   * method](/android/management/reference/rest/v1/enterprises.devices/delete)
+   * to cause the device to enter the `DELETED` state.
+   * Possible string values are:
+   * - "DEVICE_STATE_UNSPECIFIED" : This value is disallowed.
+   * - "ACTIVE" : The device is active.
+   * - "DISABLED" : The device is disabled.
+   * - "DELETED" : The device was deleted. This state will never be returned by
+   * an API call,
+   * but will be used in the final policy compliance report published to Cloud
+   * Pub/Sub when the device acknowledges the deletion.
+   * - "PROVISIONING" : The device is being provisioned. Newly enrolled devices
+   * will be in this
+   * state until they have applied policy.
+   */
+  core.String state;
+  /**
+   * The resource name of the user of the device in the form
+   * `enterprises/{enterpriseId}/users/{userId}`. This is the name of the
+   * device account automatically created for this device.
+   */
+  core.String userName;
+
+  Device();
+
+  Device.fromJson(core.Map _json) {
+    if (_json.containsKey("apiLevel")) {
+      apiLevel = _json["apiLevel"];
+    }
+    if (_json.containsKey("appliedPolicyName")) {
+      appliedPolicyName = _json["appliedPolicyName"];
+    }
+    if (_json.containsKey("appliedPolicyVersion")) {
+      appliedPolicyVersion = _json["appliedPolicyVersion"];
+    }
+    if (_json.containsKey("appliedState")) {
+      appliedState = _json["appliedState"];
+    }
+    if (_json.containsKey("disabledReason")) {
+      disabledReason = new UserFacingMessage.fromJson(_json["disabledReason"]);
+    }
+    if (_json.containsKey("displays")) {
+      displays = _json["displays"].map((value) => new Display.fromJson(value)).toList();
+    }
+    if (_json.containsKey("enrollmentTime")) {
+      enrollmentTime = _json["enrollmentTime"];
+    }
+    if (_json.containsKey("enrollmentTokenData")) {
+      enrollmentTokenData = _json["enrollmentTokenData"];
+    }
+    if (_json.containsKey("enrollmentTokenName")) {
+      enrollmentTokenName = _json["enrollmentTokenName"];
+    }
+    if (_json.containsKey("hardwareInfo")) {
+      hardwareInfo = new HardwareInfo.fromJson(_json["hardwareInfo"]);
+    }
+    if (_json.containsKey("hardwareStatusSamples")) {
+      hardwareStatusSamples = _json["hardwareStatusSamples"].map((value) => new HardwareStatus.fromJson(value)).toList();
+    }
+    if (_json.containsKey("lastPolicyComplianceReportTime")) {
+      lastPolicyComplianceReportTime = _json["lastPolicyComplianceReportTime"];
+    }
+    if (_json.containsKey("lastPolicySyncTime")) {
+      lastPolicySyncTime = _json["lastPolicySyncTime"];
+    }
+    if (_json.containsKey("lastStatusReportTime")) {
+      lastStatusReportTime = _json["lastStatusReportTime"];
+    }
+    if (_json.containsKey("memoryEvents")) {
+      memoryEvents = _json["memoryEvents"].map((value) => new MemoryEvent.fromJson(value)).toList();
+    }
+    if (_json.containsKey("memoryInfo")) {
+      memoryInfo = new MemoryInfo.fromJson(_json["memoryInfo"]);
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("networkInfo")) {
+      networkInfo = new NetworkInfo.fromJson(_json["networkInfo"]);
+    }
+    if (_json.containsKey("nonComplianceDetails")) {
+      nonComplianceDetails = _json["nonComplianceDetails"].map((value) => new NonComplianceDetail.fromJson(value)).toList();
+    }
+    if (_json.containsKey("policyCompliant")) {
+      policyCompliant = _json["policyCompliant"];
+    }
+    if (_json.containsKey("policyName")) {
+      policyName = _json["policyName"];
+    }
+    if (_json.containsKey("powerManagementEvents")) {
+      powerManagementEvents = _json["powerManagementEvents"].map((value) => new PowerManagementEvent.fromJson(value)).toList();
+    }
+    if (_json.containsKey("previousDeviceNames")) {
+      previousDeviceNames = _json["previousDeviceNames"];
+    }
+    if (_json.containsKey("softwareInfo")) {
+      softwareInfo = new SoftwareInfo.fromJson(_json["softwareInfo"]);
+    }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
+    if (_json.containsKey("userName")) {
+      userName = _json["userName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (apiLevel != null) {
+      _json["apiLevel"] = apiLevel;
+    }
+    if (appliedPolicyName != null) {
+      _json["appliedPolicyName"] = appliedPolicyName;
+    }
+    if (appliedPolicyVersion != null) {
+      _json["appliedPolicyVersion"] = appliedPolicyVersion;
+    }
+    if (appliedState != null) {
+      _json["appliedState"] = appliedState;
+    }
+    if (disabledReason != null) {
+      _json["disabledReason"] = (disabledReason).toJson();
+    }
+    if (displays != null) {
+      _json["displays"] = displays.map((value) => (value).toJson()).toList();
+    }
+    if (enrollmentTime != null) {
+      _json["enrollmentTime"] = enrollmentTime;
+    }
+    if (enrollmentTokenData != null) {
+      _json["enrollmentTokenData"] = enrollmentTokenData;
+    }
+    if (enrollmentTokenName != null) {
+      _json["enrollmentTokenName"] = enrollmentTokenName;
+    }
+    if (hardwareInfo != null) {
+      _json["hardwareInfo"] = (hardwareInfo).toJson();
+    }
+    if (hardwareStatusSamples != null) {
+      _json["hardwareStatusSamples"] = hardwareStatusSamples.map((value) => (value).toJson()).toList();
+    }
+    if (lastPolicyComplianceReportTime != null) {
+      _json["lastPolicyComplianceReportTime"] = lastPolicyComplianceReportTime;
+    }
+    if (lastPolicySyncTime != null) {
+      _json["lastPolicySyncTime"] = lastPolicySyncTime;
+    }
+    if (lastStatusReportTime != null) {
+      _json["lastStatusReportTime"] = lastStatusReportTime;
+    }
+    if (memoryEvents != null) {
+      _json["memoryEvents"] = memoryEvents.map((value) => (value).toJson()).toList();
+    }
+    if (memoryInfo != null) {
+      _json["memoryInfo"] = (memoryInfo).toJson();
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (networkInfo != null) {
+      _json["networkInfo"] = (networkInfo).toJson();
+    }
+    if (nonComplianceDetails != null) {
+      _json["nonComplianceDetails"] = nonComplianceDetails.map((value) => (value).toJson()).toList();
+    }
+    if (policyCompliant != null) {
+      _json["policyCompliant"] = policyCompliant;
+    }
+    if (policyName != null) {
+      _json["policyName"] = policyName;
+    }
+    if (powerManagementEvents != null) {
+      _json["powerManagementEvents"] = powerManagementEvents.map((value) => (value).toJson()).toList();
+    }
+    if (previousDeviceNames != null) {
+      _json["previousDeviceNames"] = previousDeviceNames;
+    }
+    if (softwareInfo != null) {
+      _json["softwareInfo"] = (softwareInfo).toJson();
+    }
+    if (state != null) {
+      _json["state"] = state;
+    }
+    if (userName != null) {
+      _json["userName"] = userName;
+    }
+    return _json;
+  }
+}
+
+/** Device display information. */
+class Display {
+  /** Display density expressed as dots-per-inch. */
+  core.int density;
+  /** Unique display id. */
+  core.int displayId;
+  /** Display height in pixels. */
+  core.int height;
+  /** Name of the display. */
+  core.String name;
+  /** Refresh rate of the display in frames per second. */
+  core.int refreshRate;
+  /**
+   * State of the display.
+   * Possible string values are:
+   * - "DISPLAY_STATE_UNSPECIFIED" : This value is disallowed.
+   * - "OFF" : Display is off.
+   * - "ON" : Display is on.
+   * - "DOZE" : Display is dozing in a low power state
+   * - "SUSPENDED" : Display is dozing in a suspended low power state.
+   */
+  core.String state;
+  /** Display width in pixels. */
+  core.int width;
+
+  Display();
+
+  Display.fromJson(core.Map _json) {
+    if (_json.containsKey("density")) {
+      density = _json["density"];
+    }
+    if (_json.containsKey("displayId")) {
+      displayId = _json["displayId"];
+    }
+    if (_json.containsKey("height")) {
+      height = _json["height"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("refreshRate")) {
+      refreshRate = _json["refreshRate"];
+    }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
+    if (_json.containsKey("width")) {
+      width = _json["width"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (density != null) {
+      _json["density"] = density;
+    }
+    if (displayId != null) {
+      _json["displayId"] = displayId;
+    }
+    if (height != null) {
+      _json["height"] = height;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (refreshRate != null) {
+      _json["refreshRate"] = refreshRate;
+    }
+    if (state != null) {
+      _json["state"] = state;
+    }
+    if (width != null) {
+      _json["width"] = width;
+    }
+    return _json;
+  }
+}
+
+/**
+ * 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 `{}`.
+ */
+class Empty {
+
+  Empty();
+
+  Empty.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/** An enrollment token. */
+class EnrollmentToken {
+  /**
+   * Optional, arbitrary data associated with the enrollment token.
+   * This could contain, for example, the id of an org unit to which the device
+   * is assigned after enrollment.
+   * After a device enrolls with the token, this data will be exposed in the
+   * `enrollment_token_data` field of the
+   * [`Device`](/android/management/reference/rest/v1/enterprises.devices#Device)
+   * resource. The data must be 1024 characters or less; otherwise, the creation
+   * request will fail.
+   */
+  core.String additionalData;
+  /**
+   * The duration of the token. If not specified, the duration will be 1 hour.
+   * The allowed range is 1 minute to 30 days.
+   */
+  core.String duration;
+  /**
+   * The expiration time of the token. This is a read-only field generated by
+   * the server.
+   */
+  core.String expirationTimestamp;
+  /**
+   * The name of the enrollment token, which is generated by the server during
+   * creation, in the form
+   * `enterprises/{enterpriseId}/enrollmentTokens/{enrollmentTokenId}`
+   */
+  core.String name;
+  /**
+   * The name of the policy that will be initially applied to the enrolled
+   * device in the form `enterprises/{enterpriseId}/policies/{policyId}`.
+   * If not specified, the policy with id `default` is applied.
+   * It is permissible to only specify the `policyId` when updating this
+   * field as long as the `policyId` contains no slashes since the rest of the
+   * policy name can be inferred from context.
+   */
+  core.String policyName;
+  /**
+   * A JSON string whose UTF-8 representation can be used to generate a QR code
+   * to enroll a device with this enrollment token. To enroll a device using
+   * NFC, the NFC record must contain a serialized `java.util.Properties`
+   * representation of the properties in the JSON.
+   */
+  core.String qrCode;
+  /**
+   * The token value which is passed to the device and authorizes the device to
+   * enroll. This is a read-only field generated by the server.
+   */
+  core.String value;
+
+  EnrollmentToken();
+
+  EnrollmentToken.fromJson(core.Map _json) {
+    if (_json.containsKey("additionalData")) {
+      additionalData = _json["additionalData"];
+    }
+    if (_json.containsKey("duration")) {
+      duration = _json["duration"];
+    }
+    if (_json.containsKey("expirationTimestamp")) {
+      expirationTimestamp = _json["expirationTimestamp"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("policyName")) {
+      policyName = _json["policyName"];
+    }
+    if (_json.containsKey("qrCode")) {
+      qrCode = _json["qrCode"];
+    }
+    if (_json.containsKey("value")) {
+      value = _json["value"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (additionalData != null) {
+      _json["additionalData"] = additionalData;
+    }
+    if (duration != null) {
+      _json["duration"] = duration;
+    }
+    if (expirationTimestamp != null) {
+      _json["expirationTimestamp"] = expirationTimestamp;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (policyName != null) {
+      _json["policyName"] = policyName;
+    }
+    if (qrCode != null) {
+      _json["qrCode"] = qrCode;
+    }
+    if (value != null) {
+      _json["value"] = value;
+    }
+    return _json;
+  }
+}
+
+/** The configuration applied to an enterprise. */
+class Enterprise {
+  /**
+   * Whether app auto-approval is enabled. When enabled, apps installed via
+   * policy for this enterprise have all permissions automatically approved.
+   * When enabled, it is the caller's responsibility to display the permissions
+   * required by an app to the enterprise admin before setting the app to be
+   * installed in a policy.
+   */
+  core.bool appAutoApprovalEnabled;
+  /** The notification types to enable via Google Cloud Pub/Sub. */
+  core.List<core.String> enabledNotificationTypes;
+  /** The name of the enterprise as it will appear to users. */
+  core.String enterpriseDisplayName;
+  /**
+   * An image displayed as a logo during device provisioning. Supported types
+   * are: image/bmp, image/gif, image/x-ico, image/jpeg, image/png, image/webp,
+   * image/vnd.wap.wbmp, image/x-adobe-dng.
+   */
+  ExternalData logo;
+  /**
+   * The name of the enterprise which is generated by the server during
+   * creation, in the form
+   * `enterprises/{enterpriseId}`
+   */
+  core.String name;
+  /**
+   * A color in RGB format indicating the predominant color to display in the
+   * device management app UI. The color components are stored as follows:
+   * `(red << 16) | (green << 8) | blue`, where each component may take a value
+   * between 0 and 255 inclusive.
+   */
+  core.int primaryColor;
+  /**
+   * When Cloud Pub/Sub notifications are enabled, this field is required to
+   * indicate the topic to which the notifications will be published. The format
+   * of this field is `projects/{project}/topics/{topic}`. You must have granted
+   * the publish permission on this topic to
+   * android-cloud-policy@system.gserviceaccount.com
+   */
+  core.String pubsubTopic;
+
+  Enterprise();
+
+  Enterprise.fromJson(core.Map _json) {
+    if (_json.containsKey("appAutoApprovalEnabled")) {
+      appAutoApprovalEnabled = _json["appAutoApprovalEnabled"];
+    }
+    if (_json.containsKey("enabledNotificationTypes")) {
+      enabledNotificationTypes = _json["enabledNotificationTypes"];
+    }
+    if (_json.containsKey("enterpriseDisplayName")) {
+      enterpriseDisplayName = _json["enterpriseDisplayName"];
+    }
+    if (_json.containsKey("logo")) {
+      logo = new ExternalData.fromJson(_json["logo"]);
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("primaryColor")) {
+      primaryColor = _json["primaryColor"];
+    }
+    if (_json.containsKey("pubsubTopic")) {
+      pubsubTopic = _json["pubsubTopic"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (appAutoApprovalEnabled != null) {
+      _json["appAutoApprovalEnabled"] = appAutoApprovalEnabled;
+    }
+    if (enabledNotificationTypes != null) {
+      _json["enabledNotificationTypes"] = enabledNotificationTypes;
+    }
+    if (enterpriseDisplayName != null) {
+      _json["enterpriseDisplayName"] = enterpriseDisplayName;
+    }
+    if (logo != null) {
+      _json["logo"] = (logo).toJson();
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (primaryColor != null) {
+      _json["primaryColor"] = primaryColor;
+    }
+    if (pubsubTopic != null) {
+      _json["pubsubTopic"] = pubsubTopic;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Data hosted at an external location. The data is to be downloaded by Android
+ * Device Policy and verified against the hash.
+ */
+class ExternalData {
+  /**
+   * The base-64 encoded SHA-256 hash of the content hosted at url. If the
+   * content does not match this hash, Android Device Policy will not use the
+   * data.
+   */
+  core.String sha256Hash;
+  /**
+   * The absolute URL to the data, which must use either the http or https
+   * scheme. Android Device Policy does not provide any credentials in the GET
+   * request, so the URL must be publicly accessible. Including a long, random
+   * component in the URL may be used to prevent attackers from discovering the
+   * URL.
+   */
+  core.String url;
+
+  ExternalData();
+
+  ExternalData.fromJson(core.Map _json) {
+    if (_json.containsKey("sha256Hash")) {
+      sha256Hash = _json["sha256Hash"];
+    }
+    if (_json.containsKey("url")) {
+      url = _json["url"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (sha256Hash != null) {
+      _json["sha256Hash"] = sha256Hash;
+    }
+    if (url != null) {
+      _json["url"] = url;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Information about device hardware. The fields related to temperature
+ * thresholds are only available when hardwareStatusEnabled is true in the
+ * device's policy.
+ */
+class HardwareInfo {
+  /**
+   * Battery shutdown temperature thresholds in Celsius for each battery on the
+   * device.
+   */
+  core.List<core.double> batteryShutdownTemperatures;
+  /**
+   * Battery throttling temperature thresholds in Celsius for each battery on
+   * the device.
+   */
+  core.List<core.double> batteryThrottlingTemperatures;
+  /** Brand of the device, e.g. `Google`. */
+  core.String brand;
+  /**
+   * CPU shutdown temperature thresholds in Celsius for each CPU on the device.
+   */
+  core.List<core.double> cpuShutdownTemperatures;
+  /**
+   * CPU throttling temperature thresholds in Celsius for each CPU on the
+   * device.
+   */
+  core.List<core.double> cpuThrottlingTemperatures;
+  /** Baseband version, e.g. `MDM9625_104662.22.05.34p`. */
+  core.String deviceBasebandVersion;
+  /**
+   * GPU shutdown temperature thresholds in Celsius for each GPU on the device.
+   */
+  core.List<core.double> gpuShutdownTemperatures;
+  /**
+   * GPU throttling temperature thresholds in Celsius for each GPU on the
+   * device.
+   */
+  core.List<core.double> gpuThrottlingTemperatures;
+  /** Name of the hardware, e.g. `Angler`. */
+  core.String hardware;
+  /** Manufacturer, e.g. `Motorola`. */
+  core.String manufacturer;
+  /** The model of the device, e.g. `Asus Nexus 7`. */
+  core.String model;
+  /** The device serial number. */
+  core.String serialNumber;
+  /** Device skin shutdown temperature thresholds in Celsius. */
+  core.List<core.double> skinShutdownTemperatures;
+  /** Device skin throttling temperature thresholds in Celsius. */
+  core.List<core.double> skinThrottlingTemperatures;
+
+  HardwareInfo();
+
+  HardwareInfo.fromJson(core.Map _json) {
+    if (_json.containsKey("batteryShutdownTemperatures")) {
+      batteryShutdownTemperatures = _json["batteryShutdownTemperatures"];
+    }
+    if (_json.containsKey("batteryThrottlingTemperatures")) {
+      batteryThrottlingTemperatures = _json["batteryThrottlingTemperatures"];
+    }
+    if (_json.containsKey("brand")) {
+      brand = _json["brand"];
+    }
+    if (_json.containsKey("cpuShutdownTemperatures")) {
+      cpuShutdownTemperatures = _json["cpuShutdownTemperatures"];
+    }
+    if (_json.containsKey("cpuThrottlingTemperatures")) {
+      cpuThrottlingTemperatures = _json["cpuThrottlingTemperatures"];
+    }
+    if (_json.containsKey("deviceBasebandVersion")) {
+      deviceBasebandVersion = _json["deviceBasebandVersion"];
+    }
+    if (_json.containsKey("gpuShutdownTemperatures")) {
+      gpuShutdownTemperatures = _json["gpuShutdownTemperatures"];
+    }
+    if (_json.containsKey("gpuThrottlingTemperatures")) {
+      gpuThrottlingTemperatures = _json["gpuThrottlingTemperatures"];
+    }
+    if (_json.containsKey("hardware")) {
+      hardware = _json["hardware"];
+    }
+    if (_json.containsKey("manufacturer")) {
+      manufacturer = _json["manufacturer"];
+    }
+    if (_json.containsKey("model")) {
+      model = _json["model"];
+    }
+    if (_json.containsKey("serialNumber")) {
+      serialNumber = _json["serialNumber"];
+    }
+    if (_json.containsKey("skinShutdownTemperatures")) {
+      skinShutdownTemperatures = _json["skinShutdownTemperatures"];
+    }
+    if (_json.containsKey("skinThrottlingTemperatures")) {
+      skinThrottlingTemperatures = _json["skinThrottlingTemperatures"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (batteryShutdownTemperatures != null) {
+      _json["batteryShutdownTemperatures"] = batteryShutdownTemperatures;
+    }
+    if (batteryThrottlingTemperatures != null) {
+      _json["batteryThrottlingTemperatures"] = batteryThrottlingTemperatures;
+    }
+    if (brand != null) {
+      _json["brand"] = brand;
+    }
+    if (cpuShutdownTemperatures != null) {
+      _json["cpuShutdownTemperatures"] = cpuShutdownTemperatures;
+    }
+    if (cpuThrottlingTemperatures != null) {
+      _json["cpuThrottlingTemperatures"] = cpuThrottlingTemperatures;
+    }
+    if (deviceBasebandVersion != null) {
+      _json["deviceBasebandVersion"] = deviceBasebandVersion;
+    }
+    if (gpuShutdownTemperatures != null) {
+      _json["gpuShutdownTemperatures"] = gpuShutdownTemperatures;
+    }
+    if (gpuThrottlingTemperatures != null) {
+      _json["gpuThrottlingTemperatures"] = gpuThrottlingTemperatures;
+    }
+    if (hardware != null) {
+      _json["hardware"] = hardware;
+    }
+    if (manufacturer != null) {
+      _json["manufacturer"] = manufacturer;
+    }
+    if (model != null) {
+      _json["model"] = model;
+    }
+    if (serialNumber != null) {
+      _json["serialNumber"] = serialNumber;
+    }
+    if (skinShutdownTemperatures != null) {
+      _json["skinShutdownTemperatures"] = skinShutdownTemperatures;
+    }
+    if (skinThrottlingTemperatures != null) {
+      _json["skinThrottlingTemperatures"] = skinThrottlingTemperatures;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Hardware status. Temperatures may be compared to the temperature thresholds
+ * available in `hardwareInfo` to determine hardware health.
+ */
+class HardwareStatus {
+  /**
+   * Current battery temperatures in Celsius for each battery on the device.
+   */
+  core.List<core.double> batteryTemperatures;
+  /** Current CPU temperatures in Celsius for each CPU on the device. */
+  core.List<core.double> cpuTemperatures;
+  /**
+   * CPU usages in percentage for each core available on the device.
+   * Usage is 0 for each unplugged core. Empty array implies that CPU usage
+   * is not supported in the system.
+   */
+  core.List<core.double> cpuUsages;
+  /** The time the measurements were taken. */
+  core.String createTime;
+  /**
+   * Fan speeds in RPM for each fan on the device. Empty array means that there
+   * are no fans or fan speed is not supported on the system.
+   */
+  core.List<core.double> fanSpeeds;
+  /** Current GPU temperatures in Celsius for each GPU on the device. */
+  core.List<core.double> gpuTemperatures;
+  /** Current device skin temperatures in Celsius. */
+  core.List<core.double> skinTemperatures;
+
+  HardwareStatus();
+
+  HardwareStatus.fromJson(core.Map _json) {
+    if (_json.containsKey("batteryTemperatures")) {
+      batteryTemperatures = _json["batteryTemperatures"];
+    }
+    if (_json.containsKey("cpuTemperatures")) {
+      cpuTemperatures = _json["cpuTemperatures"];
+    }
+    if (_json.containsKey("cpuUsages")) {
+      cpuUsages = _json["cpuUsages"];
+    }
+    if (_json.containsKey("createTime")) {
+      createTime = _json["createTime"];
+    }
+    if (_json.containsKey("fanSpeeds")) {
+      fanSpeeds = _json["fanSpeeds"];
+    }
+    if (_json.containsKey("gpuTemperatures")) {
+      gpuTemperatures = _json["gpuTemperatures"];
+    }
+    if (_json.containsKey("skinTemperatures")) {
+      skinTemperatures = _json["skinTemperatures"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (batteryTemperatures != null) {
+      _json["batteryTemperatures"] = batteryTemperatures;
+    }
+    if (cpuTemperatures != null) {
+      _json["cpuTemperatures"] = cpuTemperatures;
+    }
+    if (cpuUsages != null) {
+      _json["cpuUsages"] = cpuUsages;
+    }
+    if (createTime != null) {
+      _json["createTime"] = createTime;
+    }
+    if (fanSpeeds != null) {
+      _json["fanSpeeds"] = fanSpeeds;
+    }
+    if (gpuTemperatures != null) {
+      _json["gpuTemperatures"] = gpuTemperatures;
+    }
+    if (skinTemperatures != null) {
+      _json["skinTemperatures"] = skinTemperatures;
+    }
+    return _json;
+  }
+}
+
+/** Response to a request to list devices for a given enterprise. */
+class ListDevicesResponse {
+  /** The list of devices. */
+  core.List<Device> devices;
+  /** If there are more results, a token to retrieve next page of results. */
+  core.String nextPageToken;
+
+  ListDevicesResponse();
+
+  ListDevicesResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("devices")) {
+      devices = _json["devices"].map((value) => new Device.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (devices != null) {
+      _json["devices"] = devices.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** The response message for Operations.ListOperations. */
+class ListOperationsResponse {
+  /** The standard List next-page token. */
+  core.String nextPageToken;
+  /** A list of operations that matches the specified filter in the request. */
+  core.List<Operation> operations;
+
+  ListOperationsResponse();
+
+  ListOperationsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("operations")) {
+      operations = _json["operations"].map((value) => new Operation.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (operations != null) {
+      _json["operations"] = operations.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** Response to a request to list policies for a given enterprise. */
+class ListPoliciesResponse {
+  /** If there are more results, a token to retrieve next page of results. */
+  core.String nextPageToken;
+  /** The list of policies. */
+  core.List<Policy> policies;
+
+  ListPoliciesResponse();
+
+  ListPoliciesResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("policies")) {
+      policies = _json["policies"].map((value) => new Policy.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (policies != null) {
+      _json["policies"] = policies.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** Managed property. */
+class ManagedProperty {
+  /**
+   * The default value of the properties. `BUNDLE_ARRAY` properties
+   * never have a default value.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Object defaultValue;
+  /**
+   * A longer description of the property, giving more detail of what it
+   * affects. Localized.
+   */
+  core.String description;
+  /**
+   * For `CHOICE` or `MULTISELECT` properties, the list
+   * of possible entries.
+   */
+  core.List<ManagedPropertyEntry> entries;
+  /**
+   * The unique key that the application uses to identify the property,
+   * e.g. "com.google.android.gm.fieldname".
+   */
+  core.String key;
+  /**
+   * For `BUNDLE_ARRAY` properties, the list of nested properties. A
+   * `BUNDLE_ARRAY` property is at most two levels deep.
+   */
+  core.List<ManagedProperty> nestedProperties;
+  /** The name of the property. Localized. */
+  core.String title;
+  /**
+   * The type of the property.
+   * Possible string values are:
+   * - "MANAGED_PROPERTY_TYPE_UNSPECIFIED" : Not used.
+   * - "BOOL" : A property of boolean type.
+   * - "STRING" : A property of string type.
+   * - "INTEGER" : A property of integer type.
+   * - "CHOICE" : A choice of one item from a set.
+   * - "MULTISELECT" : A choice of multiple items from a set.
+   * - "HIDDEN" : A hidden restriction of string type (the default value can be
+   * used
+   * to pass along information that cannot be modified, such as a version
+   * code).
+   * - "BUNDLE_ARRAY" : An array of property bundles.
+   */
+  core.String type;
+
+  ManagedProperty();
+
+  ManagedProperty.fromJson(core.Map _json) {
+    if (_json.containsKey("defaultValue")) {
+      defaultValue = _json["defaultValue"];
+    }
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("entries")) {
+      entries = _json["entries"].map((value) => new ManagedPropertyEntry.fromJson(value)).toList();
+    }
+    if (_json.containsKey("key")) {
+      key = _json["key"];
+    }
+    if (_json.containsKey("nestedProperties")) {
+      nestedProperties = _json["nestedProperties"].map((value) => new ManagedProperty.fromJson(value)).toList();
+    }
+    if (_json.containsKey("title")) {
+      title = _json["title"];
+    }
+    if (_json.containsKey("type")) {
+      type = _json["type"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (defaultValue != null) {
+      _json["defaultValue"] = defaultValue;
+    }
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (entries != null) {
+      _json["entries"] = entries.map((value) => (value).toJson()).toList();
+    }
+    if (key != null) {
+      _json["key"] = key;
+    }
+    if (nestedProperties != null) {
+      _json["nestedProperties"] = nestedProperties.map((value) => (value).toJson()).toList();
+    }
+    if (title != null) {
+      _json["title"] = title;
+    }
+    if (type != null) {
+      _json["type"] = type;
+    }
+    return _json;
+  }
+}
+
+/** An entry of a managed property. */
+class ManagedPropertyEntry {
+  /** The human-readable name of the value. Localized. */
+  core.String name;
+  /**
+   * The machine-readable value of the entry, which should be used in the
+   * configuration. Not localized.
+   */
+  core.String value;
+
+  ManagedPropertyEntry();
+
+  ManagedPropertyEntry.fromJson(core.Map _json) {
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("value")) {
+      value = _json["value"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (value != null) {
+      _json["value"] = value;
+    }
+    return _json;
+  }
+}
+
+/** An event related to memory and storage measurements. */
+class MemoryEvent {
+  /**
+   * The number of free bytes in the medium, or for `EXTERNAL_STORAGE_DETECTED`,
+   * the total capacity in bytes of the storage medium.
+   */
+  core.String byteCount;
+  /** The creation time of the event. */
+  core.String createTime;
+  /**
+   * Event type.
+   * Possible string values are:
+   * - "MEMORY_EVENT_TYPE_UNSPECIFIED" : Unspecified. No events have this type.
+   * - "RAM_MEASURED" : Free space in RAM was measured.
+   * - "INTERNAL_STORAGE_MEASURED" : Free space in internal storage was
+   * measured.
+   * - "EXTERNAL_STORAGE_DETECTED" : A new external storage medium was detected.
+   * The reported byte count is
+   * the total capacity of the storage medium.
+   * - "EXTERNAL_STORAGE_REMOVED" : An external storage medium was removed. The
+   * reported byte count is zero.
+   * - "EXTERNAL_STORAGE_MEASURED" : Free space in an external storage medium
+   * was measured.
+   */
+  core.String eventType;
+
+  MemoryEvent();
+
+  MemoryEvent.fromJson(core.Map _json) {
+    if (_json.containsKey("byteCount")) {
+      byteCount = _json["byteCount"];
+    }
+    if (_json.containsKey("createTime")) {
+      createTime = _json["createTime"];
+    }
+    if (_json.containsKey("eventType")) {
+      eventType = _json["eventType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (byteCount != null) {
+      _json["byteCount"] = byteCount;
+    }
+    if (createTime != null) {
+      _json["createTime"] = createTime;
+    }
+    if (eventType != null) {
+      _json["eventType"] = eventType;
+    }
+    return _json;
+  }
+}
+
+/** Information about device memory and storage. */
+class MemoryInfo {
+  /** Total internal storage on device in bytes. */
+  core.String totalInternalStorage;
+  /** Total RAM on device in bytes. */
+  core.String totalRam;
+
+  MemoryInfo();
+
+  MemoryInfo.fromJson(core.Map _json) {
+    if (_json.containsKey("totalInternalStorage")) {
+      totalInternalStorage = _json["totalInternalStorage"];
+    }
+    if (_json.containsKey("totalRam")) {
+      totalRam = _json["totalRam"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (totalInternalStorage != null) {
+      _json["totalInternalStorage"] = totalInternalStorage;
+    }
+    if (totalRam != null) {
+      _json["totalRam"] = totalRam;
+    }
+    return _json;
+  }
+}
+
+/** Device network info. */
+class NetworkInfo {
+  /** IMEI number of the GSM device, e.g. `A1000031212`. */
+  core.String imei;
+  /** MEID number of the CDMA device, e.g. `A00000292788E1`. */
+  core.String meid;
+  /** WiFi MAC address of the device, e.g. `7c:11:11:11:11:11`. */
+  core.String wifiMacAddress;
+
+  NetworkInfo();
+
+  NetworkInfo.fromJson(core.Map _json) {
+    if (_json.containsKey("imei")) {
+      imei = _json["imei"];
+    }
+    if (_json.containsKey("meid")) {
+      meid = _json["meid"];
+    }
+    if (_json.containsKey("wifiMacAddress")) {
+      wifiMacAddress = _json["wifiMacAddress"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (imei != null) {
+      _json["imei"] = imei;
+    }
+    if (meid != null) {
+      _json["meid"] = meid;
+    }
+    if (wifiMacAddress != null) {
+      _json["wifiMacAddress"] = wifiMacAddress;
+    }
+    return _json;
+  }
+}
+
+/** Provides detail about non-compliance with a policy setting. */
+class NonComplianceDetail {
+  /**
+   * If the policy setting could not be applied, the current value of the
+   * setting on the device.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Object currentValue;
+  /**
+   * For settings with nested fields, if a particular nested field is out of
+   * compliance, this specifies the full path to the offending field. The path
+   * is formatted in the same way the policy JSON field would be referenced in
+   * JavaScript, that is:
+   * 1) For object-typed fields, the field name is followed by a dot then by a
+   *    subfield name.
+   * 2) For array-typed fields, the field name is followed by the array index
+   *    enclosed in brackets.
+   * For example, to indicate a problem with the `url` field in the
+   * `externalData` field in the 3rd application, the path would be
+   * `applications[2].externalData.url`
+   */
+  core.String fieldPath;
+  /**
+   * If `package_name` is set and the non-compliance reason is
+   * `APP_NOT_INSTALLED`, the detailed reason the app cannot be installed.
+   * Possible string values are:
+   * - "INSTALLATION_FAILURE_REASON_UNSPECIFIED" : This value is disallowed.
+   * - "INSTALLATION_FAILURE_REASON_UNKNOWN" : An unknown condition is
+   * preventing the app from being installed. Some
+   * potential reaons are that the device does not have enough storage, the
+   * device network connection is unreliable, or the installation is taking
+   * longer than expected. The installation will be retried automatically.
+   * - "IN_PROGRESS" : The installation is still in progress.
+   * - "NOT_FOUND" : The app was not found in Play.
+   * - "NOT_COMPATIBLE_WITH_DEVICE" : The app is incompatible with the device.
+   * - "NOT_APPROVED" : The app has not been approved by the admin.
+   * - "PERMISSIONS_NOT_ACCEPTED" : The app has new permissions that have not
+   * been accepted by the admin.
+   * - "NOT_AVAILABLE_IN_COUNTRY" : The app is not available in the user's
+   * country.
+   * - "NO_LICENSES_REMAINING" : There are no more licenses to assign to the
+   * user.
+   * - "NOT_ENROLLED" : The enterprise is no longer enrolled with Play for Work
+   * or Android Device
+   * Policy is not enabled for the enterprise.
+   */
+  core.String installationFailureReason;
+  /**
+   * The reason the device is not in compliance with the setting.
+   * Possible string values are:
+   * - "NON_COMPLIANCE_REASON_UNSPECIFIED" : This value is disallowed.
+   * - "API_LEVEL" : The setting is not supported in the API level of Android OS
+   * version the
+   * device is running.
+   * - "ADMIN_TYPE" : The admin type (profile owner, device owner, etc.) does
+   * not support the
+   * setting.
+   * - "USER_ACTION" : The user has not taken required action to comply with the
+   * setting.
+   * - "INVALID_VALUE" : The setting has an invalid value.
+   * - "APP_NOT_INSTALLED" : The application required to implement the policy is
+   * not installed.
+   * - "UNSUPPORTED" : The policy is not supported by the version of Android
+   * Device Policy on
+   * the device.
+   * - "APP_INSTALLED" : A blocked application is installed.
+   * - "PENDING" : The setting was not applied yet at the time of the report,
+   * but is
+   * expected to be applied shortly.
+   * - "APP_INCOMPATIBLE" : The setting cannot be applied to the application
+   * because its target SDK
+   * version is not high enough.
+   */
+  core.String nonComplianceReason;
+  /**
+   * The package name indicating which application is out of compliance, if
+   * applicable.
+   */
+  core.String packageName;
+  /**
+   * The name of the policy setting. This is the JSON field name of a top-level
+   * [`Policy`](/android/management/reference/rest/v1/enterprises.policies#Policy)
+   *  field.
+   */
+  core.String settingName;
+
+  NonComplianceDetail();
+
+  NonComplianceDetail.fromJson(core.Map _json) {
+    if (_json.containsKey("currentValue")) {
+      currentValue = _json["currentValue"];
+    }
+    if (_json.containsKey("fieldPath")) {
+      fieldPath = _json["fieldPath"];
+    }
+    if (_json.containsKey("installationFailureReason")) {
+      installationFailureReason = _json["installationFailureReason"];
+    }
+    if (_json.containsKey("nonComplianceReason")) {
+      nonComplianceReason = _json["nonComplianceReason"];
+    }
+    if (_json.containsKey("packageName")) {
+      packageName = _json["packageName"];
+    }
+    if (_json.containsKey("settingName")) {
+      settingName = _json["settingName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (currentValue != null) {
+      _json["currentValue"] = currentValue;
+    }
+    if (fieldPath != null) {
+      _json["fieldPath"] = fieldPath;
+    }
+    if (installationFailureReason != null) {
+      _json["installationFailureReason"] = installationFailureReason;
+    }
+    if (nonComplianceReason != null) {
+      _json["nonComplianceReason"] = nonComplianceReason;
+    }
+    if (packageName != null) {
+      _json["packageName"] = packageName;
+    }
+    if (settingName != null) {
+      _json["settingName"] = settingName;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A compliance rule condition which is satisfied if there exists *any*
+ * matching
+ * [`NonComplianceDetail`](/android/management/reference/rest/v1/enterprises.devices#NonComplianceDetail)
+ * for the device. A `NonComplianceDetail` matches a
+ * `NonComplianceDetailCondition` if *all* the fields which are set within the
+ * `NonComplianceDetailCondition` match the corresponding `NonComplianceDetail`
+ * fields.
+ */
+class NonComplianceDetailCondition {
+  /**
+   * The reason the device is not in compliance with the setting. If not set,
+   * then this condition matches any reason.
+   * Possible string values are:
+   * - "NON_COMPLIANCE_REASON_UNSPECIFIED" : This value is disallowed.
+   * - "API_LEVEL" : The setting is not supported in the API level of Android OS
+   * version the
+   * device is running.
+   * - "ADMIN_TYPE" : The admin type (profile owner, device owner, etc.) does
+   * not support the
+   * setting.
+   * - "USER_ACTION" : The user has not taken required action to comply with the
+   * setting.
+   * - "INVALID_VALUE" : The setting has an invalid value.
+   * - "APP_NOT_INSTALLED" : The application required to implement the policy is
+   * not installed.
+   * - "UNSUPPORTED" : The policy is not supported by the version of Android
+   * Device Policy on
+   * the device.
+   * - "APP_INSTALLED" : A blocked application is installed.
+   * - "PENDING" : The setting was not applied yet at the time of the report,
+   * but is
+   * expected to be applied shortly.
+   * - "APP_INCOMPATIBLE" : The setting cannot be applied to the application
+   * because its target SDK
+   * version is not high enough.
+   */
+  core.String nonComplianceReason;
+  /**
+   * The package name indicating which application is out of compliance. If not
+   * set, then this condition matches any package name. If this field is set,
+   * then `setting_name` must be unset or set to `applications`; otherwise, the
+   * condition would never be satisfied.
+   */
+  core.String packageName;
+  /**
+   * The name of the policy setting. This is the JSON field name of a top-level
+   * [`Policy`](/android/management/reference/rest/v1/enterprises.policies#Policy)
+   * field. If not set, then this condition matches any setting name.
+   */
+  core.String settingName;
+
+  NonComplianceDetailCondition();
+
+  NonComplianceDetailCondition.fromJson(core.Map _json) {
+    if (_json.containsKey("nonComplianceReason")) {
+      nonComplianceReason = _json["nonComplianceReason"];
+    }
+    if (_json.containsKey("packageName")) {
+      packageName = _json["packageName"];
+    }
+    if (_json.containsKey("settingName")) {
+      settingName = _json["settingName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nonComplianceReason != null) {
+      _json["nonComplianceReason"] = nonComplianceReason;
+    }
+    if (packageName != null) {
+      _json["packageName"] = packageName;
+    }
+    if (settingName != null) {
+      _json["settingName"] = settingName;
+    }
+    return _json;
+  }
+}
+
+/**
+ * This resource represents a long-running operation that is the result of a
+ * network API call.
+ */
+class Operation {
+  /**
+   * 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.
+   */
+  core.bool done;
+  /** The error result of the operation in case of failure or cancellation. */
+  Status error;
+  /**
+   * 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.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> metadata;
+  /**
+   * 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`.
+   */
+  core.String name;
+  /**
+   * 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`.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> response;
+
+  Operation();
+
+  Operation.fromJson(core.Map _json) {
+    if (_json.containsKey("done")) {
+      done = _json["done"];
+    }
+    if (_json.containsKey("error")) {
+      error = new Status.fromJson(_json["error"]);
+    }
+    if (_json.containsKey("metadata")) {
+      metadata = _json["metadata"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("response")) {
+      response = _json["response"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (done != null) {
+      _json["done"] = done;
+    }
+    if (error != null) {
+      _json["error"] = (error).toJson();
+    }
+    if (metadata != null) {
+      _json["metadata"] = metadata;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (response != null) {
+      _json["response"] = response;
+    }
+    return _json;
+  }
+}
+
+/** Requirements for the password used to unlock a device. */
+class PasswordRequirements {
+  /**
+   * A device will be wiped after too many incorrect device-unlock passwords
+   * have been entered. A value of 0 means there is no restriction.
+   */
+  core.int maximumFailedPasswordsForWipe;
+  /** Password expiration timeout. */
+  core.String passwordExpirationTimeout;
+  /**
+   * The length of the password history. After setting this, the user will
+   * not be able to enter a new password that is the same as any password in
+   * the history. A value of 0 means there is no restriction.
+   */
+  core.int passwordHistoryLength;
+  /**
+   * The minimum allowed password length. A value of 0 means there is no
+   * restriction.
+   * Only enforced when `password_quality` is `NUMERIC`, `NUMERIC_COMPLEX`,
+   * `ALPHABETIC`, `ALPHANUMERIC`, or `COMPLEX`.
+   */
+  core.int passwordMinimumLength;
+  /**
+   * Minimum number of letters required in the password.
+   * Only enforced when `password_quality` is `COMPLEX`.
+   */
+  core.int passwordMinimumLetters;
+  /**
+   * Minimum number of lower case letters required in the password.
+   * Only enforced when `password_quality` is `COMPLEX`.
+   */
+  core.int passwordMinimumLowerCase;
+  /**
+   * Minimum number of non-letter characters (numerical digits or symbols)
+   * required in the password.
+   * Only enforced when `password_quality` is `COMPLEX`.
+   */
+  core.int passwordMinimumNonLetter;
+  /**
+   * Minimum number of numerical digits required in the password.
+   * Only enforced when `password_quality` is `COMPLEX`.
+   */
+  core.int passwordMinimumNumeric;
+  /**
+   * Minimum number of symbols required in the password.
+   * Only enforced when `password_quality` is `COMPLEX`.
+   */
+  core.int passwordMinimumSymbols;
+  /**
+   * Minimum number of upper case letters required in the password.
+   * Only enforced when `password_quality` is `COMPLEX`.
+   */
+  core.int passwordMinimumUpperCase;
+  /**
+   * The required password quality.
+   * Possible string values are:
+   * - "PASSWORD_QUALITY_UNSPECIFIED" : There are no requirements for the
+   * password.
+   * - "SOMETHING" : There must be a password, but there are no restrictions on
+   * its
+   * characters.
+   * - "NUMERIC" : The password must contain numeric characters.
+   * - "NUMERIC_COMPLEX" : The password must contain numeric characters with no
+   * repeating (4444) or
+   * ordered (1234, 4321, 2468) sequences.
+   * - "ALPHABETIC" : The password must contain alphabetic (or symbol)
+   * characters.
+   * - "ALPHANUMERIC" : The password must contain at both numeric and alphabetic
+   * (or symbol)
+   * characters.
+   * - "COMPLEX" : The password must contain at least a letter, a numerical
+   * digit and a
+   * special symbol. Other password constraints, for example,
+   * `password_minimum_letters` are enforced.
+   */
+  core.String passwordQuality;
+
+  PasswordRequirements();
+
+  PasswordRequirements.fromJson(core.Map _json) {
+    if (_json.containsKey("maximumFailedPasswordsForWipe")) {
+      maximumFailedPasswordsForWipe = _json["maximumFailedPasswordsForWipe"];
+    }
+    if (_json.containsKey("passwordExpirationTimeout")) {
+      passwordExpirationTimeout = _json["passwordExpirationTimeout"];
+    }
+    if (_json.containsKey("passwordHistoryLength")) {
+      passwordHistoryLength = _json["passwordHistoryLength"];
+    }
+    if (_json.containsKey("passwordMinimumLength")) {
+      passwordMinimumLength = _json["passwordMinimumLength"];
+    }
+    if (_json.containsKey("passwordMinimumLetters")) {
+      passwordMinimumLetters = _json["passwordMinimumLetters"];
+    }
+    if (_json.containsKey("passwordMinimumLowerCase")) {
+      passwordMinimumLowerCase = _json["passwordMinimumLowerCase"];
+    }
+    if (_json.containsKey("passwordMinimumNonLetter")) {
+      passwordMinimumNonLetter = _json["passwordMinimumNonLetter"];
+    }
+    if (_json.containsKey("passwordMinimumNumeric")) {
+      passwordMinimumNumeric = _json["passwordMinimumNumeric"];
+    }
+    if (_json.containsKey("passwordMinimumSymbols")) {
+      passwordMinimumSymbols = _json["passwordMinimumSymbols"];
+    }
+    if (_json.containsKey("passwordMinimumUpperCase")) {
+      passwordMinimumUpperCase = _json["passwordMinimumUpperCase"];
+    }
+    if (_json.containsKey("passwordQuality")) {
+      passwordQuality = _json["passwordQuality"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (maximumFailedPasswordsForWipe != null) {
+      _json["maximumFailedPasswordsForWipe"] = maximumFailedPasswordsForWipe;
+    }
+    if (passwordExpirationTimeout != null) {
+      _json["passwordExpirationTimeout"] = passwordExpirationTimeout;
+    }
+    if (passwordHistoryLength != null) {
+      _json["passwordHistoryLength"] = passwordHistoryLength;
+    }
+    if (passwordMinimumLength != null) {
+      _json["passwordMinimumLength"] = passwordMinimumLength;
+    }
+    if (passwordMinimumLetters != null) {
+      _json["passwordMinimumLetters"] = passwordMinimumLetters;
+    }
+    if (passwordMinimumLowerCase != null) {
+      _json["passwordMinimumLowerCase"] = passwordMinimumLowerCase;
+    }
+    if (passwordMinimumNonLetter != null) {
+      _json["passwordMinimumNonLetter"] = passwordMinimumNonLetter;
+    }
+    if (passwordMinimumNumeric != null) {
+      _json["passwordMinimumNumeric"] = passwordMinimumNumeric;
+    }
+    if (passwordMinimumSymbols != null) {
+      _json["passwordMinimumSymbols"] = passwordMinimumSymbols;
+    }
+    if (passwordMinimumUpperCase != null) {
+      _json["passwordMinimumUpperCase"] = passwordMinimumUpperCase;
+    }
+    if (passwordQuality != null) {
+      _json["passwordQuality"] = passwordQuality;
+    }
+    return _json;
+  }
+}
+
+/** Configuration for an Android permission and its grant state. */
+class PermissionGrant {
+  /** The android permission, e.g. `android.permission.READ_CALENDAR`. */
+  core.String permission;
+  /**
+   * The policy for granting the permission.
+   * Possible string values are:
+   * - "PERMISSION_POLICY_UNSPECIFIED" : Policy not specified. If no policy is
+   * specified for a permission at any
+   * level, then the `PROMPT` behavior is used by default.
+   * - "PROMPT" : Prompt the user to grant a permission.
+   * - "GRANT" : Automatically grant a permission.
+   * - "DENY" : Automatically deny a permission.
+   */
+  core.String policy;
+
+  PermissionGrant();
+
+  PermissionGrant.fromJson(core.Map _json) {
+    if (_json.containsKey("permission")) {
+      permission = _json["permission"];
+    }
+    if (_json.containsKey("policy")) {
+      policy = _json["policy"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (permission != null) {
+      _json["permission"] = permission;
+    }
+    if (policy != null) {
+      _json["policy"] = policy;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A default activity for handling intents that match a particular intent
+ * filter.
+ */
+class PersistentPreferredActivity {
+  /**
+   * The intent actions to match in the filter.  If any actions are included in
+   * the filter, then an intent's action must be one of those values for it to
+   * match. If no actions are included, the intent action is ignored.
+   */
+  core.List<core.String> actions;
+  /**
+   * The intent categories to match in the filter.  An intent includes the
+   * categories that it requires, all of which must be included in the filter in
+   * order to match. In other words, adding a category to the filter has no
+   * impact on matching unless that category is specified in the intent.
+   */
+  core.List<core.String> categories;
+  /**
+   * The activity that should be the default intent handler. This should be an
+   * Android component name, e.g. `com.android.enterprise.app/.MainActivity`.
+   * Alternatively, the value may be the package name of an app, which causes
+   * Android Device Policy to choose an appropriate activity from the app to
+   * handle the intent.
+   */
+  core.String receiverActivity;
+
+  PersistentPreferredActivity();
+
+  PersistentPreferredActivity.fromJson(core.Map _json) {
+    if (_json.containsKey("actions")) {
+      actions = _json["actions"];
+    }
+    if (_json.containsKey("categories")) {
+      categories = _json["categories"];
+    }
+    if (_json.containsKey("receiverActivity")) {
+      receiverActivity = _json["receiverActivity"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (actions != null) {
+      _json["actions"] = actions;
+    }
+    if (categories != null) {
+      _json["categories"] = categories;
+    }
+    if (receiverActivity != null) {
+      _json["receiverActivity"] = receiverActivity;
+    }
+    return _json;
+  }
+}
+
+/** A policy, which governs behavior for a device. */
+class Policy {
+  /** Whether adding new users and profiles is disabled. */
+  core.bool addUserDisabled;
+  /** Whether adjusting the master volume is disabled. */
+  core.bool adjustVolumeDisabled;
+  /** Policy applied to apps. */
+  core.List<ApplicationPolicy> applications;
+  /**
+   * Whether applications other than the ones configured in `applications` are
+   * blocked from being installed. When set, applications that were
+   * installed under a previous policy but no longer appear in the policy are
+   * automatically uninstalled.
+   */
+  core.bool blockApplicationsEnabled;
+  /** Whether all cameras on the device are disabled. */
+  core.bool cameraDisabled;
+  /**
+   * Rules declaring which mitigating actions to take when a device is not
+   * compliant with its policy. When the conditions for multiple rules are
+   * satisfied, all of the mitigating actions for the rules are taken. There is
+   * a maximum limit of 100 rules.
+   */
+  core.List<ComplianceRule> complianceRules;
+  /** Whether the user is allowed to enable debugging features. */
+  core.bool debuggingFeaturesAllowed;
+  /**
+   * The default permission policy for requests for runtime permissions.
+   * Possible string values are:
+   * - "PERMISSION_POLICY_UNSPECIFIED" : Policy not specified. If no policy is
+   * specified for a permission at any
+   * level, then the `PROMPT` behavior is used by default.
+   * - "PROMPT" : Prompt the user to grant a permission.
+   * - "GRANT" : Automatically grant a permission.
+   * - "DENY" : Automatically deny a permission.
+   */
+  core.String defaultPermissionPolicy;
+  /** Whether factory resetting from settings is disabled. */
+  core.bool factoryResetDisabled;
+  /**
+   * Email addresses of device administrators for factory reset protection.
+   * When the device is factory reset, it will require one of these admins to
+   * log in with the Google account email and password to unlock the device.
+   * If no admins are specified, the device will not provide factory reset
+   * protection.
+   */
+  core.List<core.String> frpAdminEmails;
+  /**
+   * Whether the user is allowed to enable the "Unknown Sources" setting,
+   * which allows installation of apps from unknown sources.
+   */
+  core.bool installUnknownSourcesAllowed;
+  /** Whether the keyguard is disabled. */
+  core.bool keyguardDisabled;
+  /**
+   * Maximum time in milliseconds for user activity until the device will lock.
+   * A value of 0 means there is no restriction.
+   */
+  core.String maximumTimeToLock;
+  /** Whether adding or removing accounts is disabled. */
+  core.bool modifyAccountsDisabled;
+  /**
+   * The name of the policy in the form
+   * `enterprises/{enterpriseId}/policies/{policyId}`
+   */
+  core.String name;
+  /**
+   * Flag to specify if network escape hatch is enabled. If this flag has been
+   * enabled then upon device boot if device has no network connection, then an
+   * activity will be shown that allows the user to temporarily connect to a
+   * network to fetch the latest policy. The launched activity will time out if
+   * no network has been connected for a given while and will return to the
+   * previous activity that was shown.
+   */
+  core.bool networkEscapeHatchEnabled;
+  /**
+   * Network configuration for the device. See
+   * [configure networks](/android/management/configure-networks)
+   * for more information.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> openNetworkConfiguration;
+  /** Password requirements. */
+  PasswordRequirements passwordRequirements;
+  /** Default intent handler activities. */
+  core.List<PersistentPreferredActivity> persistentPreferredActivities;
+  /** Whether removing other users is disabled. */
+  core.bool removeUserDisabled;
+  /** Whether rebooting the device into safe boot is disabled. */
+  core.bool safeBootDisabled;
+  /** Whether screen capture is disabled. */
+  core.bool screenCaptureDisabled;
+  /**
+   * Whether the status bar is disabled. This disables notifications, quick
+   * settings and other screen overlays that allow escape from full-screen mode.
+   */
+  core.bool statusBarDisabled;
+  /** Status reporting settings */
+  StatusReportingSettings statusReportingSettings;
+  /**
+   * The battery plugged in modes for which the device stays on. When using this
+   * setting, it is recommended to clear `maximum_time_to_lock` so that the
+   * device doesn't lock itself while it stays on.
+   */
+  core.List<core.String> stayOnPluggedModes;
+  /**
+   * The system update policy, which controls how OS updates are applied. If the
+   * update type is `WINDOWED` and the device has a device account, the update
+   * window will automatically apply to Play app updates as well.
+   */
+  SystemUpdate systemUpdate;
+  /**
+   * Whether the microphone is muted and adjusting microphone volume is
+   * disabled.
+   */
+  core.bool unmuteMicrophoneDisabled;
+  /**
+   * The version of the policy. This is a read-only field. The version is
+   * incremented each time the policy is updated.
+   */
+  core.String version;
+
+  Policy();
+
+  Policy.fromJson(core.Map _json) {
+    if (_json.containsKey("addUserDisabled")) {
+      addUserDisabled = _json["addUserDisabled"];
+    }
+    if (_json.containsKey("adjustVolumeDisabled")) {
+      adjustVolumeDisabled = _json["adjustVolumeDisabled"];
+    }
+    if (_json.containsKey("applications")) {
+      applications = _json["applications"].map((value) => new ApplicationPolicy.fromJson(value)).toList();
+    }
+    if (_json.containsKey("blockApplicationsEnabled")) {
+      blockApplicationsEnabled = _json["blockApplicationsEnabled"];
+    }
+    if (_json.containsKey("cameraDisabled")) {
+      cameraDisabled = _json["cameraDisabled"];
+    }
+    if (_json.containsKey("complianceRules")) {
+      complianceRules = _json["complianceRules"].map((value) => new ComplianceRule.fromJson(value)).toList();
+    }
+    if (_json.containsKey("debuggingFeaturesAllowed")) {
+      debuggingFeaturesAllowed = _json["debuggingFeaturesAllowed"];
+    }
+    if (_json.containsKey("defaultPermissionPolicy")) {
+      defaultPermissionPolicy = _json["defaultPermissionPolicy"];
+    }
+    if (_json.containsKey("factoryResetDisabled")) {
+      factoryResetDisabled = _json["factoryResetDisabled"];
+    }
+    if (_json.containsKey("frpAdminEmails")) {
+      frpAdminEmails = _json["frpAdminEmails"];
+    }
+    if (_json.containsKey("installUnknownSourcesAllowed")) {
+      installUnknownSourcesAllowed = _json["installUnknownSourcesAllowed"];
+    }
+    if (_json.containsKey("keyguardDisabled")) {
+      keyguardDisabled = _json["keyguardDisabled"];
+    }
+    if (_json.containsKey("maximumTimeToLock")) {
+      maximumTimeToLock = _json["maximumTimeToLock"];
+    }
+    if (_json.containsKey("modifyAccountsDisabled")) {
+      modifyAccountsDisabled = _json["modifyAccountsDisabled"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("networkEscapeHatchEnabled")) {
+      networkEscapeHatchEnabled = _json["networkEscapeHatchEnabled"];
+    }
+    if (_json.containsKey("openNetworkConfiguration")) {
+      openNetworkConfiguration = _json["openNetworkConfiguration"];
+    }
+    if (_json.containsKey("passwordRequirements")) {
+      passwordRequirements = new PasswordRequirements.fromJson(_json["passwordRequirements"]);
+    }
+    if (_json.containsKey("persistentPreferredActivities")) {
+      persistentPreferredActivities = _json["persistentPreferredActivities"].map((value) => new PersistentPreferredActivity.fromJson(value)).toList();
+    }
+    if (_json.containsKey("removeUserDisabled")) {
+      removeUserDisabled = _json["removeUserDisabled"];
+    }
+    if (_json.containsKey("safeBootDisabled")) {
+      safeBootDisabled = _json["safeBootDisabled"];
+    }
+    if (_json.containsKey("screenCaptureDisabled")) {
+      screenCaptureDisabled = _json["screenCaptureDisabled"];
+    }
+    if (_json.containsKey("statusBarDisabled")) {
+      statusBarDisabled = _json["statusBarDisabled"];
+    }
+    if (_json.containsKey("statusReportingSettings")) {
+      statusReportingSettings = new StatusReportingSettings.fromJson(_json["statusReportingSettings"]);
+    }
+    if (_json.containsKey("stayOnPluggedModes")) {
+      stayOnPluggedModes = _json["stayOnPluggedModes"];
+    }
+    if (_json.containsKey("systemUpdate")) {
+      systemUpdate = new SystemUpdate.fromJson(_json["systemUpdate"]);
+    }
+    if (_json.containsKey("unmuteMicrophoneDisabled")) {
+      unmuteMicrophoneDisabled = _json["unmuteMicrophoneDisabled"];
+    }
+    if (_json.containsKey("version")) {
+      version = _json["version"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (addUserDisabled != null) {
+      _json["addUserDisabled"] = addUserDisabled;
+    }
+    if (adjustVolumeDisabled != null) {
+      _json["adjustVolumeDisabled"] = adjustVolumeDisabled;
+    }
+    if (applications != null) {
+      _json["applications"] = applications.map((value) => (value).toJson()).toList();
+    }
+    if (blockApplicationsEnabled != null) {
+      _json["blockApplicationsEnabled"] = blockApplicationsEnabled;
+    }
+    if (cameraDisabled != null) {
+      _json["cameraDisabled"] = cameraDisabled;
+    }
+    if (complianceRules != null) {
+      _json["complianceRules"] = complianceRules.map((value) => (value).toJson()).toList();
+    }
+    if (debuggingFeaturesAllowed != null) {
+      _json["debuggingFeaturesAllowed"] = debuggingFeaturesAllowed;
+    }
+    if (defaultPermissionPolicy != null) {
+      _json["defaultPermissionPolicy"] = defaultPermissionPolicy;
+    }
+    if (factoryResetDisabled != null) {
+      _json["factoryResetDisabled"] = factoryResetDisabled;
+    }
+    if (frpAdminEmails != null) {
+      _json["frpAdminEmails"] = frpAdminEmails;
+    }
+    if (installUnknownSourcesAllowed != null) {
+      _json["installUnknownSourcesAllowed"] = installUnknownSourcesAllowed;
+    }
+    if (keyguardDisabled != null) {
+      _json["keyguardDisabled"] = keyguardDisabled;
+    }
+    if (maximumTimeToLock != null) {
+      _json["maximumTimeToLock"] = maximumTimeToLock;
+    }
+    if (modifyAccountsDisabled != null) {
+      _json["modifyAccountsDisabled"] = modifyAccountsDisabled;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (networkEscapeHatchEnabled != null) {
+      _json["networkEscapeHatchEnabled"] = networkEscapeHatchEnabled;
+    }
+    if (openNetworkConfiguration != null) {
+      _json["openNetworkConfiguration"] = openNetworkConfiguration;
+    }
+    if (passwordRequirements != null) {
+      _json["passwordRequirements"] = (passwordRequirements).toJson();
+    }
+    if (persistentPreferredActivities != null) {
+      _json["persistentPreferredActivities"] = persistentPreferredActivities.map((value) => (value).toJson()).toList();
+    }
+    if (removeUserDisabled != null) {
+      _json["removeUserDisabled"] = removeUserDisabled;
+    }
+    if (safeBootDisabled != null) {
+      _json["safeBootDisabled"] = safeBootDisabled;
+    }
+    if (screenCaptureDisabled != null) {
+      _json["screenCaptureDisabled"] = screenCaptureDisabled;
+    }
+    if (statusBarDisabled != null) {
+      _json["statusBarDisabled"] = statusBarDisabled;
+    }
+    if (statusReportingSettings != null) {
+      _json["statusReportingSettings"] = (statusReportingSettings).toJson();
+    }
+    if (stayOnPluggedModes != null) {
+      _json["stayOnPluggedModes"] = stayOnPluggedModes;
+    }
+    if (systemUpdate != null) {
+      _json["systemUpdate"] = (systemUpdate).toJson();
+    }
+    if (unmuteMicrophoneDisabled != null) {
+      _json["unmuteMicrophoneDisabled"] = unmuteMicrophoneDisabled;
+    }
+    if (version != null) {
+      _json["version"] = version;
+    }
+    return _json;
+  }
+}
+
+/** A power management event. */
+class PowerManagementEvent {
+  /**
+   * For `BATTERY_LEVEL_COLLECTED` events, the battery level as a percentage.
+   */
+  core.double batteryLevel;
+  /** The creation time of the event. */
+  core.String createTime;
+  /**
+   * Event type.
+   * Possible string values are:
+   * - "POWER_MANAGEMENT_EVENT_TYPE_UNSPECIFIED" : Unspecified. No events have
+   * this type.
+   * - "BATTERY_LEVEL_COLLECTED" : Battery level was measured.
+   * - "POWER_CONNECTED" : The device started charging.
+   * - "POWER_DISCONNECTED" : The device stopped charging.
+   * - "BATTERY_LOW" : The device entered low-power mode.
+   * - "BATTERY_OKAY" : The device exited low-power mode.
+   * - "BOOT_COMPLETED" : The device booted.
+   * - "SHUTDOWN" : The device shut down.
+   */
+  core.String eventType;
+
+  PowerManagementEvent();
+
+  PowerManagementEvent.fromJson(core.Map _json) {
+    if (_json.containsKey("batteryLevel")) {
+      batteryLevel = _json["batteryLevel"];
+    }
+    if (_json.containsKey("createTime")) {
+      createTime = _json["createTime"];
+    }
+    if (_json.containsKey("eventType")) {
+      eventType = _json["eventType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (batteryLevel != null) {
+      _json["batteryLevel"] = batteryLevel;
+    }
+    if (createTime != null) {
+      _json["createTime"] = createTime;
+    }
+    if (eventType != null) {
+      _json["eventType"] = eventType;
+    }
+    return _json;
+  }
+}
+
+/** An enterprise signup URL. */
+class SignupUrl {
+  /**
+   * The name of the resource. This must be included in the
+   * [create
+   * enterprise](/android/management/reference/rest/v1/enterprises/create)
+   * request at the end of the signup flow.
+   */
+  core.String name;
+  /**
+   * A URL under which the Admin can sign up for an enterprise.
+   * The page pointed to cannot be rendered in an iframe.
+   */
+  core.String url;
+
+  SignupUrl();
+
+  SignupUrl.fromJson(core.Map _json) {
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("url")) {
+      url = _json["url"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (url != null) {
+      _json["url"] = url;
+    }
+    return _json;
+  }
+}
+
+/** Information about device software. */
+class SoftwareInfo {
+  /**
+   * Android build Id string meant for displaying to the user,
+   * e.g. `shamu-userdebug 6.0.1 MOB30I 2756745 dev-keys`.
+   */
+  core.String androidBuildNumber;
+  /** Build time. */
+  core.String androidBuildTime;
+  /** The user visible Android version string, e.g. `6.0.1`. */
+  core.String androidVersion;
+  /** The system bootloader version number, e.g. `0.6.7`. */
+  core.String bootloaderVersion;
+  /** Kernel version, e.g. `2.6.32.9-g103d848`. */
+  core.String deviceKernelVersion;
+  /** Security patch level, e.g. `2016-05-01`. */
+  core.String securityPatchLevel;
+
+  SoftwareInfo();
+
+  SoftwareInfo.fromJson(core.Map _json) {
+    if (_json.containsKey("androidBuildNumber")) {
+      androidBuildNumber = _json["androidBuildNumber"];
+    }
+    if (_json.containsKey("androidBuildTime")) {
+      androidBuildTime = _json["androidBuildTime"];
+    }
+    if (_json.containsKey("androidVersion")) {
+      androidVersion = _json["androidVersion"];
+    }
+    if (_json.containsKey("bootloaderVersion")) {
+      bootloaderVersion = _json["bootloaderVersion"];
+    }
+    if (_json.containsKey("deviceKernelVersion")) {
+      deviceKernelVersion = _json["deviceKernelVersion"];
+    }
+    if (_json.containsKey("securityPatchLevel")) {
+      securityPatchLevel = _json["securityPatchLevel"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (androidBuildNumber != null) {
+      _json["androidBuildNumber"] = androidBuildNumber;
+    }
+    if (androidBuildTime != null) {
+      _json["androidBuildTime"] = androidBuildTime;
+    }
+    if (androidVersion != null) {
+      _json["androidVersion"] = androidVersion;
+    }
+    if (bootloaderVersion != null) {
+      _json["bootloaderVersion"] = bootloaderVersion;
+    }
+    if (deviceKernelVersion != null) {
+      _json["deviceKernelVersion"] = deviceKernelVersion;
+    }
+    if (securityPatchLevel != null) {
+      _json["securityPatchLevel"] = securityPatchLevel;
+    }
+    return _json;
+  }
+}
+
+/**
+ * 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` that 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.
+ *
+ * - 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.
+ */
+class Status {
+  /** The status code, which should be an enum value of google.rpc.Code. */
+  core.int code;
+  /**
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.List<core.Map<core.String, core.Object>> details;
+  /**
+   * 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.
+   */
+  core.String message;
+
+  Status();
+
+  Status.fromJson(core.Map _json) {
+    if (_json.containsKey("code")) {
+      code = _json["code"];
+    }
+    if (_json.containsKey("details")) {
+      details = _json["details"];
+    }
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (code != null) {
+      _json["code"] = code;
+    }
+    if (details != null) {
+      _json["details"] = details;
+    }
+    if (message != null) {
+      _json["message"] = message;
+    }
+    return _json;
+  }
+}
+
+/** Settings controlling the behavior of status reports. */
+class StatusReportingSettings {
+  /** Whether displays reporting is enabled. */
+  core.bool displayInfoEnabled;
+  /** Whether hardware status reporting is enabled. */
+  core.bool hardwareStatusEnabled;
+  /** Whether memory info reporting is enabled. */
+  core.bool memoryInfoEnabled;
+  /** Whether network info reporting is enabled. */
+  core.bool networkInfoEnabled;
+  /** Whether power management event reporting is enabled. */
+  core.bool powerManagementEventsEnabled;
+  /** Whether software info reporting is enabled. */
+  core.bool softwareInfoEnabled;
+
+  StatusReportingSettings();
+
+  StatusReportingSettings.fromJson(core.Map _json) {
+    if (_json.containsKey("displayInfoEnabled")) {
+      displayInfoEnabled = _json["displayInfoEnabled"];
+    }
+    if (_json.containsKey("hardwareStatusEnabled")) {
+      hardwareStatusEnabled = _json["hardwareStatusEnabled"];
+    }
+    if (_json.containsKey("memoryInfoEnabled")) {
+      memoryInfoEnabled = _json["memoryInfoEnabled"];
+    }
+    if (_json.containsKey("networkInfoEnabled")) {
+      networkInfoEnabled = _json["networkInfoEnabled"];
+    }
+    if (_json.containsKey("powerManagementEventsEnabled")) {
+      powerManagementEventsEnabled = _json["powerManagementEventsEnabled"];
+    }
+    if (_json.containsKey("softwareInfoEnabled")) {
+      softwareInfoEnabled = _json["softwareInfoEnabled"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (displayInfoEnabled != null) {
+      _json["displayInfoEnabled"] = displayInfoEnabled;
+    }
+    if (hardwareStatusEnabled != null) {
+      _json["hardwareStatusEnabled"] = hardwareStatusEnabled;
+    }
+    if (memoryInfoEnabled != null) {
+      _json["memoryInfoEnabled"] = memoryInfoEnabled;
+    }
+    if (networkInfoEnabled != null) {
+      _json["networkInfoEnabled"] = networkInfoEnabled;
+    }
+    if (powerManagementEventsEnabled != null) {
+      _json["powerManagementEventsEnabled"] = powerManagementEventsEnabled;
+    }
+    if (softwareInfoEnabled != null) {
+      _json["softwareInfoEnabled"] = softwareInfoEnabled;
+    }
+    return _json;
+  }
+}
+
+/** Configuration for managing system updates */
+class SystemUpdate {
+  /**
+   * If the type is `WINDOWED`, the end of the maintenance window, measured as
+   * the number of minutes after midnight in device local time. This value must
+   * be between 0 and 1439, inclusive. If this value is less than
+   * `start_minutes`, then the maintenance window spans midnight. If the
+   * maintenance window specified is smaller than 30 minutes, the actual window
+   * is extended to 30 minutes beyond the start time.
+   */
+  core.int endMinutes;
+  /**
+   * If the type is `WINDOWED`, the start of the maintenance window, measured as
+   * the number of minutes after midnight in device local time. This value must
+   * be between 0 and 1439, inclusive.
+   */
+  core.int startMinutes;
+  /**
+   * The type of system update to configure.
+   * Possible string values are:
+   * - "SYSTEM_UPDATE_TYPE_UNSPECIFIED" : Follow the default update behavior for
+   * the device, which typically
+   * requires the user to accept system updates.
+   * - "AUTOMATIC" : Install automatically as soon as an update is available.
+   * - "WINDOWED" : Install automatically within a daily maintenance window. If
+   * the device
+   * has a device account, this also configures Play apps to be updated within
+   * the window. This is strongly recommended for kiosk devices because this
+   * is the only way apps persistently pinned to the foreground can be updated
+   * by Play.
+   * - "POSTPONE" : Postpone automatic install up to a maximum of 30 days.
+   */
+  core.String type;
+
+  SystemUpdate();
+
+  SystemUpdate.fromJson(core.Map _json) {
+    if (_json.containsKey("endMinutes")) {
+      endMinutes = _json["endMinutes"];
+    }
+    if (_json.containsKey("startMinutes")) {
+      startMinutes = _json["startMinutes"];
+    }
+    if (_json.containsKey("type")) {
+      type = _json["type"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (endMinutes != null) {
+      _json["endMinutes"] = endMinutes;
+    }
+    if (startMinutes != null) {
+      _json["startMinutes"] = startMinutes;
+    }
+    if (type != null) {
+      _json["type"] = type;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Provides user facing message with locale info. The maximum message length is
+ * 4096 characters.
+ */
+class UserFacingMessage {
+  /**
+   * The default message that gets displayed if no localized message is
+   * specified, or the user's locale does not match with any of the localized
+   * messages. A default message must be provided if any localized messages are
+   * provided.
+   */
+  core.String defaultMessage;
+  /**
+   * A map which contains <locale, message> pairs.
+   * The locale is a BCP 47 language code, e.g. en-US, es-ES, fr.
+   */
+  core.Map<core.String, core.String> localizedMessages;
+
+  UserFacingMessage();
+
+  UserFacingMessage.fromJson(core.Map _json) {
+    if (_json.containsKey("defaultMessage")) {
+      defaultMessage = _json["defaultMessage"];
+    }
+    if (_json.containsKey("localizedMessages")) {
+      localizedMessages = _json["localizedMessages"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (defaultMessage != null) {
+      _json["defaultMessage"] = defaultMessage;
+    }
+    if (localizedMessages != null) {
+      _json["localizedMessages"] = localizedMessages;
+    }
+    return _json;
+  }
+}
+
+/** A web token used to access an embeddable managed Google Play web UI. */
+class WebToken {
+  /**
+   * The name of the web token, which is generated by the server during
+   * creation, in the form
+   * `enterprises/{enterpriseId}/webTokens/{webTokenId}`.
+   */
+  core.String name;
+  /**
+   * The URL of the parent frame hosting the iframe with the embedded UI. To
+   * prevent XSS, the iframe may not be hosted at other URLs. The URL must use
+   * the https scheme.
+   */
+  core.String parentFrameUrl;
+  /**
+   * Permissions the admin may exercise in the embedded UI. The admin must have
+   * all of these permissions in order to view the UI.
+   */
+  core.List<core.String> permissions;
+  /**
+   * The token value which is used in the hosting page to generate the iframe
+   * with the embedded UI. This is a read-only field generated by the server.
+   */
+  core.String value;
+
+  WebToken();
+
+  WebToken.fromJson(core.Map _json) {
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("parentFrameUrl")) {
+      parentFrameUrl = _json["parentFrameUrl"];
+    }
+    if (_json.containsKey("permissions")) {
+      permissions = _json["permissions"];
+    }
+    if (_json.containsKey("value")) {
+      value = _json["value"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (parentFrameUrl != null) {
+      _json["parentFrameUrl"] = parentFrameUrl;
+    }
+    if (permissions != null) {
+      _json["permissions"] = permissions;
+    }
+    if (value != null) {
+      _json["value"] = value;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/appengine/v1.dart b/generated/googleapis/lib/appengine/v1.dart
index c987edb..a5fcc69 100644
--- a/generated/googleapis/lib/appengine/v1.dart
+++ b/generated/googleapis/lib/appengine/v1.dart
@@ -413,12 +413,12 @@
    *
    * [appsId] - Part of `name`. The name of the operation's parent resource.
    *
+   * [pageToken] - The standard list page token.
+   *
    * [pageSize] - The standard list page size.
    *
    * [filter] - The standard list filter.
    *
-   * [pageToken] - The standard list page token.
-   *
    * Completes with a [ListOperationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -427,7 +427,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list(core.String appsId, {core.int pageSize, core.String filter, core.String pageToken}) {
+  async.Future<ListOperationsResponse> list(core.String appsId, {core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -438,15 +438,15 @@
     if (appsId == null) {
       throw new core.ArgumentError("Parameter appsId is required.");
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
 
     _url = 'v1/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/operations';
 
@@ -623,6 +623,8 @@
    *
    * [servicesId] - Part of `name`. See documentation of `appsId`.
    *
+   * [updateMask] - Standard field mask for the set of fields to be updated.
+   *
    * [migrateTraffic] - Set to true to gradually shift traffic to one or more
    * versions that you specify. By default, traffic is shifted immediately. For
    * gradual traffic migration, the target versions must be located within
@@ -637,8 +639,6 @@
    * Splitting Traffic
    * (https://cloud.google.com/appengine/docs/admin-api/migrating-splitting-traffic).
    *
-   * [updateMask] - Standard field mask for the set of fields to be updated.
-   *
    * Completes with a [Operation].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -647,7 +647,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Operation> patch(Service request, core.String appsId, core.String servicesId, {core.bool migrateTraffic, core.String updateMask}) {
+  async.Future<Operation> patch(Service request, core.String appsId, core.String servicesId, {core.String updateMask, core.bool migrateTraffic}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -664,12 +664,12 @@
     if (servicesId == null) {
       throw new core.ArgumentError("Parameter servicesId is required.");
     }
-    if (migrateTraffic != null) {
-      _queryParams["migrateTraffic"] = ["${migrateTraffic}"];
-    }
     if (updateMask != null) {
       _queryParams["updateMask"] = [updateMask];
     }
+    if (migrateTraffic != null) {
+      _queryParams["migrateTraffic"] = ["${migrateTraffic}"];
+    }
 
     _url = 'v1/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/services/' + commons.Escaper.ecapeVariable('$servicesId');
 
@@ -863,6 +863,8 @@
    *
    * [servicesId] - Part of `parent`. See documentation of `appsId`.
    *
+   * [pageToken] - Continuation token for fetching the next page of results.
+   *
    * [pageSize] - Maximum results to return per page.
    *
    * [view] - Controls the set of fields returned in the List response.
@@ -870,8 +872,6 @@
    * - "BASIC" : A BASIC.
    * - "FULL" : A FULL.
    *
-   * [pageToken] - Continuation token for fetching the next page of results.
-   *
    * Completes with a [ListVersionsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -880,7 +880,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListVersionsResponse> list(core.String appsId, core.String servicesId, {core.int pageSize, core.String view, core.String pageToken}) {
+  async.Future<ListVersionsResponse> list(core.String appsId, core.String servicesId, {core.String pageToken, core.int pageSize, core.String view}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -894,15 +894,15 @@
     if (servicesId == null) {
       throw new core.ArgumentError("Parameter servicesId is required.");
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (view != null) {
       _queryParams["view"] = [view];
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
 
     _url = 'v1/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/services/' + commons.Escaper.ecapeVariable('$servicesId') + '/versions';
 
@@ -1362,7 +1362,7 @@
 
 /**
  * An Application resource contains the top-level configuration of an App Engine
- * application. Next tag: 19
+ * application. Next tag: 20
  */
 class Application {
   /**
@@ -3336,6 +3336,12 @@
  * removed from traffic rotation.
  */
 class ReadinessCheck {
+  /**
+   * A maximum time limit on application initialization, measured from moment
+   * the application successfully replies to a healthcheck until it is ready to
+   * serve traffic.
+   */
+  core.String appStartTimeout;
   /** Interval between health checks. */
   core.String checkInterval;
   /** Number of consecutive failed checks required before removing traffic. */
@@ -3357,6 +3363,9 @@
   ReadinessCheck();
 
   ReadinessCheck.fromJson(core.Map _json) {
+    if (_json.containsKey("appStartTimeout")) {
+      appStartTimeout = _json["appStartTimeout"];
+    }
     if (_json.containsKey("checkInterval")) {
       checkInterval = _json["checkInterval"];
     }
@@ -3379,6 +3388,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (appStartTimeout != null) {
+      _json["appStartTimeout"] = appStartTimeout;
+    }
     if (checkInterval != null) {
       _json["checkInterval"] = checkInterval;
     }
@@ -3705,8 +3717,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details. There will be a common set
-   * of message types for APIs to use.
+   * A list of messages that carry the error details. There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/bigquery/v2.dart b/generated/googleapis/lib/bigquery/v2.dart
index f879413..332dcec 100644
--- a/generated/googleapis/lib/bigquery/v2.dart
+++ b/generated/googleapis/lib/bigquery/v2.dart
@@ -2888,9 +2888,14 @@
    */
   core.String sourceFormat;
   /**
-   * [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.
+   * [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.
    */
   core.List<core.String> sourceUris;
   /**
@@ -3129,9 +3134,8 @@
    * 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.
+   * useLegacySql is set to false, the value of flattenResults is ignored; query
+   * will be run as if flattenResults is false.
    */
   core.bool useLegacySql;
   /**
@@ -3147,13 +3151,14 @@
   /**
    * [Optional] Specifies the action that occurs if the destination table
    * already exists. The following values are supported: WRITE_TRUNCATE: If the
-   * table already exists, BigQuery overwrites the table data. WRITE_APPEND: If
-   * the table already exists, BigQuery appends the data to the table.
-   * WRITE_EMPTY: If the table already exists and contains data, a 'duplicate'
-   * error is returned in the job result. The default value is WRITE_EMPTY. Each
-   * action is atomic and only occurs if BigQuery is able to complete the job
-   * successfully. Creation, truncation and append actions occur as one atomic
-   * update upon job completion.
+   * table already exists, BigQuery overwrites the table data and uses the
+   * schema from the query result. WRITE_APPEND: If the table already exists,
+   * BigQuery appends the data to the table. WRITE_EMPTY: If the table already
+   * exists and contains data, a 'duplicate' error is returned in the job
+   * result. The default value is WRITE_EMPTY. Each action is atomic and only
+   * occurs if BigQuery is able to complete the job successfully. Creation,
+   * truncation and append actions occur as one atomic update upon job
+   * completion.
    */
   core.String writeDisposition;
 
@@ -3705,6 +3710,13 @@
 }
 
 class JobStatistics3 {
+  /**
+   * [Output-only] The number of bad records encountered. Note that if the job
+   * has failed because of more bad records encountered than the maximum allowed
+   * in the load job configuration, then this number can be less than the total
+   * number of bad records present in the input data.
+   */
+  core.String badRecords;
   /** [Output-only] Number of bytes of source data in a load job. */
   core.String inputFileBytes;
   /** [Output-only] Number of source files in a load job. */
@@ -3723,6 +3735,9 @@
   JobStatistics3();
 
   JobStatistics3.fromJson(core.Map _json) {
+    if (_json.containsKey("badRecords")) {
+      badRecords = _json["badRecords"];
+    }
     if (_json.containsKey("inputFileBytes")) {
       inputFileBytes = _json["inputFileBytes"];
     }
@@ -3739,6 +3754,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (badRecords != null) {
+      _json["badRecords"] = badRecords;
+    }
     if (inputFileBytes != null) {
       _json["inputFileBytes"] = inputFileBytes;
     }
@@ -4202,9 +4220,8 @@
    * 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.
+   * useLegacySql is set to false, the value of flattenResults is ignored; query
+   * will be run as if flattenResults is false.
    */
   core.bool useLegacySql;
   /**
diff --git a/generated/googleapis/lib/bigquerydatatransfer/v1.dart b/generated/googleapis/lib/bigquerydatatransfer/v1.dart
index e53ddd6..e1d74f9 100644
--- a/generated/googleapis/lib/bigquerydatatransfer/v1.dart
+++ b/generated/googleapis/lib/bigquerydatatransfer/v1.dart
@@ -747,9 +747,6 @@
    * should be returned: `projects/{project_id}`.
    * Value must have pattern "^projects/[^/]+/locations/[^/]+$".
    *
-   * [dataSourceIds] - When specified, only configurations of requested data
-   * sources are returned.
-   *
    * [pageToken] - Pagination token, which can be used to request a specific
    * page
    * of `ListTransfersRequest` list results. For multiple-page
@@ -760,6 +757,9 @@
    * [pageSize] - Page size. The default page size is the maximum value of 1000
    * results.
    *
+   * [dataSourceIds] - When specified, only configurations of requested data
+   * sources are returned.
+   *
    * Completes with a [ListTransferConfigsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -768,7 +768,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferConfigsResponse> list(core.String parent, {core.List<core.String> dataSourceIds, core.String pageToken, core.int pageSize}) {
+  async.Future<ListTransferConfigsResponse> list(core.String parent, {core.String pageToken, core.int pageSize, core.List<core.String> dataSourceIds}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -779,15 +779,15 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (dataSourceIds != null) {
-      _queryParams["dataSourceIds"] = dataSourceIds;
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (dataSourceIds != null) {
+      _queryParams["dataSourceIds"] = dataSourceIds;
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/transferConfigs';
 
@@ -817,6 +817,8 @@
    * Value must have pattern
    * "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$".
    *
+   * [updateMask] - Required list of fields to be updated in this request.
+   *
    * [authorizationCode] - Optional OAuth2 authorization code to use with this
    * transfer configuration.
    * If it is provided, the transfer configuration will be associated with the
@@ -835,8 +837,6 @@
    *   returned in the title bar of the browser, with the page text prompting
    *   the user to copy the code and paste it in the application.
    *
-   * [updateMask] - Required list of fields to be updated in this request.
-   *
    * Completes with a [TransferConfig].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -845,7 +845,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<TransferConfig> patch(TransferConfig request, core.String name, {core.String authorizationCode, core.String updateMask}) {
+  async.Future<TransferConfig> patch(TransferConfig request, core.String name, {core.String updateMask, core.String authorizationCode}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -859,12 +859,12 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (authorizationCode != null) {
-      _queryParams["authorizationCode"] = [authorizationCode];
-    }
     if (updateMask != null) {
       _queryParams["updateMask"] = [updateMask];
     }
+    if (authorizationCode != null) {
+      _queryParams["authorizationCode"] = [authorizationCode];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
 
@@ -1118,6 +1118,9 @@
    * Value must have pattern
    * "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+/runs/[^/]+$".
    *
+   * [pageSize] - Page size. The default page size is the maximum value of 1000
+   * results.
+   *
    * [messageTypes] - Message types to return. If not populated - INFO, WARNING
    * and ERROR
    * messages are returned.
@@ -1129,9 +1132,6 @@
    * a `next_page` token, which can be used as the
    * `page_token` value to request the next page of list results.
    *
-   * [pageSize] - Page size. The default page size is the maximum value of 1000
-   * results.
-   *
    * Completes with a [ListTransferLogsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1140,7 +1140,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferLogsResponse> list(core.String parent, {core.List<core.String> messageTypes, core.String pageToken, core.int pageSize}) {
+  async.Future<ListTransferLogsResponse> list(core.String parent, {core.int pageSize, core.List<core.String> messageTypes, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1151,15 +1151,15 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
     if (messageTypes != null) {
       _queryParams["messageTypes"] = messageTypes;
     }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/transferLogs';
 
@@ -1350,6 +1350,9 @@
    * should be returned: `projects/{project_id}`.
    * Value must have pattern "^projects/[^/]+$".
    *
+   * [pageSize] - Page size. The default page size is the maximum value of 1000
+   * results.
+   *
    * [dataSourceIds] - When specified, only configurations of requested data
    * sources are returned.
    *
@@ -1360,9 +1363,6 @@
    * a `next_page` token, which can be used as the
    * `page_token` value to request the next page of list results.
    *
-   * [pageSize] - Page size. The default page size is the maximum value of 1000
-   * results.
-   *
    * Completes with a [ListTransferConfigsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1371,7 +1371,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferConfigsResponse> list(core.String parent, {core.List<core.String> dataSourceIds, core.String pageToken, core.int pageSize}) {
+  async.Future<ListTransferConfigsResponse> list(core.String parent, {core.int pageSize, core.List<core.String> dataSourceIds, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1382,15 +1382,15 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
     if (dataSourceIds != null) {
       _queryParams["dataSourceIds"] = dataSourceIds;
     }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/transferConfigs';
 
@@ -1637,11 +1637,6 @@
    * `projects/{project_id}/transferConfigs/{config_id}`.
    * Value must have pattern "^projects/[^/]+/transferConfigs/[^/]+$".
    *
-   * [runAttempt] - Indicates how run attempts are to be pulled.
-   * Possible string values are:
-   * - "RUN_ATTEMPT_UNSPECIFIED" : A RUN_ATTEMPT_UNSPECIFIED.
-   * - "LATEST" : A LATEST.
-   *
    * [pageToken] - Pagination token, which can be used to request a specific
    * page
    * of `ListTransferRunsRequest` list results. For multiple-page
@@ -1655,6 +1650,11 @@
    * [statuses] - When specified, only transfer runs with requested statuses are
    * returned.
    *
+   * [runAttempt] - Indicates how run attempts are to be pulled.
+   * Possible string values are:
+   * - "RUN_ATTEMPT_UNSPECIFIED" : A RUN_ATTEMPT_UNSPECIFIED.
+   * - "LATEST" : A LATEST.
+   *
    * Completes with a [ListTransferRunsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1663,7 +1663,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferRunsResponse> list(core.String parent, {core.String runAttempt, core.String pageToken, core.int pageSize, core.List<core.String> statuses}) {
+  async.Future<ListTransferRunsResponse> list(core.String parent, {core.String pageToken, core.int pageSize, core.List<core.String> statuses, core.String runAttempt}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1674,9 +1674,6 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (runAttempt != null) {
-      _queryParams["runAttempt"] = [runAttempt];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
@@ -1686,6 +1683,9 @@
     if (statuses != null) {
       _queryParams["statuses"] = statuses;
     }
+    if (runAttempt != null) {
+      _queryParams["runAttempt"] = [runAttempt];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/runs';
 
diff --git a/generated/googleapis/lib/calendar/v3.dart b/generated/googleapis/lib/calendar/v3.dart
index c8be0e7..fa8b566 100644
--- a/generated/googleapis/lib/calendar/v3.dart
+++ b/generated/googleapis/lib/calendar/v3.dart
@@ -1667,12 +1667,14 @@
    * [timeMax] - Upper bound (exclusive) for an event's start time to filter by.
    * Optional. The default is not to filter by start time. Must be an RFC3339
    * timestamp with mandatory time zone offset, e.g., 2011-06-03T10:00:00-07:00,
-   * 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored.
+   * 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored. If
+   * timeMin is set, timeMax must be greater than timeMin.
    *
    * [timeMin] - Lower bound (inclusive) for an event's end time to filter by.
    * Optional. The default is not to filter by end time. Must be an RFC3339
    * timestamp with mandatory time zone offset, e.g., 2011-06-03T10:00:00-07:00,
-   * 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored.
+   * 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored. If
+   * timeMax is set, timeMin must be smaller than timeMax.
    *
    * [timeZone] - Time zone used in the response. Optional. The default is the
    * time zone of the calendar.
@@ -2131,12 +2133,14 @@
    * [timeMax] - Upper bound (exclusive) for an event's start time to filter by.
    * Optional. The default is not to filter by start time. Must be an RFC3339
    * timestamp with mandatory time zone offset, e.g., 2011-06-03T10:00:00-07:00,
-   * 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored.
+   * 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored. If
+   * timeMin is set, timeMax must be greater than timeMin.
    *
    * [timeMin] - Lower bound (inclusive) for an event's end time to filter by.
    * Optional. The default is not to filter by end time. Must be an RFC3339
    * timestamp with mandatory time zone offset, e.g., 2011-06-03T10:00:00-07:00,
-   * 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored.
+   * 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored. If
+   * timeMax is set, timeMin must be smaller than timeMax.
    *
    * [timeZone] - Time zone used in the response. Optional. The default is the
    * time zone of the calendar.
@@ -3218,81 +3222,6 @@
   }
 }
 
-class DeepLinkData {
-  core.List<Link> links;
-  core.String url;
-
-  DeepLinkData();
-
-  DeepLinkData.fromJson(core.Map _json) {
-    if (_json.containsKey("links")) {
-      links = _json["links"].map((value) => new Link.fromJson(value)).toList();
-    }
-    if (_json.containsKey("url")) {
-      url = _json["url"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (links != null) {
-      _json["links"] = links.map((value) => (value).toJson()).toList();
-    }
-    if (url != null) {
-      _json["url"] = url;
-    }
-    return _json;
-  }
-}
-
-class DisplayInfo {
-  core.String appIconUrl;
-  core.String appShortTitle;
-  core.String appTitle;
-  core.String linkShortTitle;
-  core.String linkTitle;
-
-  DisplayInfo();
-
-  DisplayInfo.fromJson(core.Map _json) {
-    if (_json.containsKey("appIconUrl")) {
-      appIconUrl = _json["appIconUrl"];
-    }
-    if (_json.containsKey("appShortTitle")) {
-      appShortTitle = _json["appShortTitle"];
-    }
-    if (_json.containsKey("appTitle")) {
-      appTitle = _json["appTitle"];
-    }
-    if (_json.containsKey("linkShortTitle")) {
-      linkShortTitle = _json["linkShortTitle"];
-    }
-    if (_json.containsKey("linkTitle")) {
-      linkTitle = _json["linkTitle"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (appIconUrl != null) {
-      _json["appIconUrl"] = appIconUrl;
-    }
-    if (appShortTitle != null) {
-      _json["appShortTitle"] = appShortTitle;
-    }
-    if (appTitle != null) {
-      _json["appTitle"] = appTitle;
-    }
-    if (linkShortTitle != null) {
-      _json["linkShortTitle"] = linkShortTitle;
-    }
-    if (linkTitle != null) {
-      _json["linkTitle"] = linkTitle;
-    }
-    return _json;
-  }
-}
-
 class Error {
   /** Domain, or broad category, of the error. */
   core.String domain;
@@ -3817,9 +3746,10 @@
   /**
    * Whether the event blocks time on the calendar. Optional. Possible values
    * are:
-   * - "opaque" - The event blocks time on the calendar. This is the default
-   * value.
-   * - "transparent" - The event does not block time on the calendar.
+   * - "opaque" - Default value. The event does block time on the calendar. This
+   * is equivalent to setting Show me as to Busy in the Calendar UI.
+   * - "transparent" - The event does not block time on the calendar. This is
+   * equivalent to setting Show me as to Available in the Calendar UI.
    */
   core.String transparency;
   /**
@@ -4291,35 +4221,6 @@
   }
 }
 
-class EventHabitInstance {
-  /** Metadata specific to this instance. */
-  HabitInstanceData data;
-  /** Id of the habit this instance belongs to. */
-  core.String parentId;
-
-  EventHabitInstance();
-
-  EventHabitInstance.fromJson(core.Map _json) {
-    if (_json.containsKey("data")) {
-      data = new HabitInstanceData.fromJson(_json["data"]);
-    }
-    if (_json.containsKey("parentId")) {
-      parentId = _json["parentId"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (data != null) {
-      _json["data"] = (data).toJson();
-    }
-    if (parentId != null) {
-      _json["parentId"] = parentId;
-    }
-    return _json;
-  }
-}
-
 class EventReminder {
   /**
    * The method used by this reminder. Possible values are:
@@ -4687,129 +4588,6 @@
   }
 }
 
-class HabitInstanceData {
-  core.String status;
-  core.bool statusInferred;
-  core.String type;
-
-  HabitInstanceData();
-
-  HabitInstanceData.fromJson(core.Map _json) {
-    if (_json.containsKey("status")) {
-      status = _json["status"];
-    }
-    if (_json.containsKey("statusInferred")) {
-      statusInferred = _json["statusInferred"];
-    }
-    if (_json.containsKey("type")) {
-      type = _json["type"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (status != null) {
-      _json["status"] = status;
-    }
-    if (statusInferred != null) {
-      _json["statusInferred"] = statusInferred;
-    }
-    if (type != null) {
-      _json["type"] = type;
-    }
-    return _json;
-  }
-}
-
-class LaunchInfo {
-  core.String appId;
-  core.String installUrl;
-  core.String intentAction;
-  core.String uri;
-
-  LaunchInfo();
-
-  LaunchInfo.fromJson(core.Map _json) {
-    if (_json.containsKey("appId")) {
-      appId = _json["appId"];
-    }
-    if (_json.containsKey("installUrl")) {
-      installUrl = _json["installUrl"];
-    }
-    if (_json.containsKey("intentAction")) {
-      intentAction = _json["intentAction"];
-    }
-    if (_json.containsKey("uri")) {
-      uri = _json["uri"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (appId != null) {
-      _json["appId"] = appId;
-    }
-    if (installUrl != null) {
-      _json["installUrl"] = installUrl;
-    }
-    if (intentAction != null) {
-      _json["intentAction"] = intentAction;
-    }
-    if (uri != null) {
-      _json["uri"] = uri;
-    }
-    return _json;
-  }
-}
-
-class Link {
-  core.String applinkingSource;
-  DisplayInfo displayInfo;
-  LaunchInfo launchInfo;
-  core.String platform;
-  core.String url;
-
-  Link();
-
-  Link.fromJson(core.Map _json) {
-    if (_json.containsKey("applinkingSource")) {
-      applinkingSource = _json["applinkingSource"];
-    }
-    if (_json.containsKey("displayInfo")) {
-      displayInfo = new DisplayInfo.fromJson(_json["displayInfo"]);
-    }
-    if (_json.containsKey("launchInfo")) {
-      launchInfo = new LaunchInfo.fromJson(_json["launchInfo"]);
-    }
-    if (_json.containsKey("platform")) {
-      platform = _json["platform"];
-    }
-    if (_json.containsKey("url")) {
-      url = _json["url"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (applinkingSource != null) {
-      _json["applinkingSource"] = applinkingSource;
-    }
-    if (displayInfo != null) {
-      _json["displayInfo"] = (displayInfo).toJson();
-    }
-    if (launchInfo != null) {
-      _json["launchInfo"] = (launchInfo).toJson();
-    }
-    if (platform != null) {
-      _json["platform"] = platform;
-    }
-    if (url != null) {
-      _json["url"] = url;
-    }
-    return _json;
-  }
-}
-
 class Setting {
   /** ETag of the resource. */
   core.String etag;
diff --git a/generated/googleapis/lib/classroom/v1.dart b/generated/googleapis/lib/classroom/v1.dart
index 03c3eeb..49bbcea 100644
--- a/generated/googleapis/lib/classroom/v1.dart
+++ b/generated/googleapis/lib/classroom/v1.dart
@@ -854,6 +854,17 @@
    * This identifier can be either the Classroom-assigned identifier or an
    * alias.
    *
+   * [pageSize] - 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.
+   *
+   * [courseWorkStates] - Restriction on the work status to return. Only
+   * courseWork that matches
+   * is returned. If unspecified, items with a work status of `PUBLISHED`
+   * is returned.
+   *
    * [pageToken] - nextPageToken
    * value returned from a previous
    * list call,
@@ -869,17 +880,6 @@
    * If not specified, `updateTime desc` is the default behavior.
    * Examples: `dueDate asc,updateTime desc`, `updateTime,dueDate desc`
    *
-   * [pageSize] - 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.
-   *
-   * [courseWorkStates] - Restriction on the work status to return. Only
-   * courseWork that matches
-   * is returned. If unspecified, items with a work status of `PUBLISHED`
-   * is returned.
-   *
    * Completes with a [ListCourseWorkResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -888,7 +888,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListCourseWorkResponse> list(core.String courseId, {core.String pageToken, core.String orderBy, core.int pageSize, core.List<core.String> courseWorkStates}) {
+  async.Future<ListCourseWorkResponse> list(core.String courseId, {core.int pageSize, core.List<core.String> courseWorkStates, core.String pageToken, core.String orderBy}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -899,18 +899,18 @@
     if (courseId == null) {
       throw new core.ArgumentError("Parameter courseId is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
-    if (orderBy != null) {
-      _queryParams["orderBy"] = [orderBy];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (courseWorkStates != null) {
       _queryParams["courseWorkStates"] = courseWorkStates;
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
+    }
 
     _url = 'v1/courses/' + commons.Escaper.ecapeVariable('$courseId') + '/courseWork';
 
@@ -1109,6 +1109,15 @@
    * This may be set to the string literal `"-"` to request student work for
    * all course work in the specified course.
    *
+   * [late] - Requested lateness value. If specified, returned student
+   * submissions are
+   * restricted by the requested value.
+   * If unspecified, submissions are returned regardless of `late` value.
+   * Possible string values are:
+   * - "LATE_VALUES_UNSPECIFIED" : A LATE_VALUES_UNSPECIFIED.
+   * - "LATE_ONLY" : A LATE_ONLY.
+   * - "NOT_LATE_ONLY" : A NOT_LATE_ONLY.
+   *
    * [pageToken] - nextPageToken
    * value returned from a previous
    * list call,
@@ -1117,16 +1126,16 @@
    * The list request
    * must be otherwise identical to the one that resulted in this token.
    *
+   * [states] - Requested submission states. If specified, returned student
+   * submissions
+   * match one of the specified submission states.
+   *
    * [pageSize] - 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.
    *
-   * [states] - Requested submission states. If specified, returned student
-   * submissions
-   * match one of the specified submission states.
-   *
    * [userId] - Optional argument to restrict returned student work to those
    * owned by the
    * student with the specified identifier. The identifier can be one of the
@@ -1136,15 +1145,6 @@
    * * the email address of the user
    * * the string literal `"me"`, indicating the requesting user
    *
-   * [late] - Requested lateness value. If specified, returned student
-   * submissions are
-   * restricted by the requested value.
-   * If unspecified, submissions are returned regardless of `late` value.
-   * Possible string values are:
-   * - "LATE_VALUES_UNSPECIFIED" : A LATE_VALUES_UNSPECIFIED.
-   * - "LATE_ONLY" : A LATE_ONLY.
-   * - "NOT_LATE_ONLY" : A NOT_LATE_ONLY.
-   *
    * Completes with a [ListStudentSubmissionsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1153,7 +1153,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListStudentSubmissionsResponse> list(core.String courseId, core.String courseWorkId, {core.String pageToken, core.int pageSize, core.List<core.String> states, core.String userId, core.String late}) {
+  async.Future<ListStudentSubmissionsResponse> list(core.String courseId, core.String courseWorkId, {core.String late, core.String pageToken, core.List<core.String> states, core.int pageSize, core.String userId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1167,21 +1167,21 @@
     if (courseWorkId == null) {
       throw new core.ArgumentError("Parameter courseWorkId is required.");
     }
+    if (late != null) {
+      _queryParams["late"] = [late];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (states != null) {
       _queryParams["states"] = states;
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
     if (userId != null) {
       _queryParams["userId"] = [userId];
     }
-    if (late != null) {
-      _queryParams["late"] = [late];
-    }
 
     _url = 'v1/courses/' + commons.Escaper.ecapeVariable('$courseId') + '/courseWork/' + commons.Escaper.ecapeVariable('$courseWorkId') + '/studentSubmissions';
 
@@ -1790,6 +1790,10 @@
    * This identifier can be either the Classroom-assigned identifier or an
    * alias.
    *
+   * [pageSize] - Maximum number of items to return. Zero means no maximum.
+   *
+   * The server may return fewer than the specified number of results.
+   *
    * [pageToken] - nextPageToken
    * value returned from a previous
    * list call, indicating that
@@ -1798,10 +1802,6 @@
    * The list request must be
    * otherwise identical to the one that resulted in this token.
    *
-   * [pageSize] - Maximum number of items to return. Zero means no maximum.
-   *
-   * The server may return fewer than the specified number of results.
-   *
    * Completes with a [ListStudentsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1810,7 +1810,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListStudentsResponse> list(core.String courseId, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListStudentsResponse> list(core.String courseId, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1821,12 +1821,12 @@
     if (courseId == null) {
       throw new core.ArgumentError("Parameter courseId is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v1/courses/' + commons.Escaper.ecapeVariable('$courseId') + '/students';
 
@@ -2993,7 +2993,7 @@
 class Assignment {
   /**
    * Drive folder where attachments from student submissions are placed.
-   * This is only populated for course teachers.
+   * This is only populated for course teachers and administrators.
    */
   DriveFolder studentWorkFolder;
 
diff --git a/generated/googleapis/lib/cloudbuild/v1.dart b/generated/googleapis/lib/cloudbuild/v1.dart
index 7a0d4ed..6573f32 100644
--- a/generated/googleapis/lib/cloudbuild/v1.dart
+++ b/generated/googleapis/lib/cloudbuild/v1.dart
@@ -370,12 +370,12 @@
    *
    * [projectId] - ID of the project.
    *
-   * [pageToken] - Token to provide to skip to a particular spot in the list.
-   *
    * [pageSize] - Number of results to return in the list.
    *
    * [filter] - The raw filter text to constrain the results.
    *
+   * [pageToken] - Token to provide to skip to a particular spot in the list.
+   *
    * Completes with a [ListBuildsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -384,7 +384,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListBuildsResponse> list(core.String projectId, {core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListBuildsResponse> list(core.String projectId, {core.int pageSize, core.String filter, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -395,15 +395,15 @@
     if (projectId == null) {
       throw new core.ArgumentError("Parameter projectId is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/builds';
 
@@ -739,6 +739,8 @@
    * @OutputOnly
    */
   Results results;
+  /** Secrets to decrypt using Cloud KMS. */
+  core.List<Secret> secrets;
   /** Describes where to find the source files to build. */
   Source source;
   /**
@@ -818,6 +820,9 @@
     if (_json.containsKey("results")) {
       results = new Results.fromJson(_json["results"]);
     }
+    if (_json.containsKey("secrets")) {
+      secrets = _json["secrets"].map((value) => new Secret.fromJson(value)).toList();
+    }
     if (_json.containsKey("source")) {
       source = new Source.fromJson(_json["source"]);
     }
@@ -879,6 +884,9 @@
     if (results != null) {
       _json["results"] = (results).toJson();
     }
+    if (secrets != null) {
+      _json["secrets"] = secrets.map((value) => (value).toJson()).toList();
+    }
     if (source != null) {
       _json["source"] = (source).toJson();
     }
@@ -1035,6 +1043,22 @@
    */
   core.String name;
   /**
+   * A list of environment variables which are encrypted using a Cloud KMS
+   * crypto key. These values must be specified in the build's secrets.
+   */
+  core.List<core.String> secretEnv;
+  /**
+   * List of volumes to mount into the build step.
+   *
+   * Each volume will be created as an empty volume prior to execution of the
+   * build step. Upon completion of the build, volumes and their contents will
+   * be discarded.
+   *
+   * Using a named volume in only one step is not valid as it is indicative
+   * of a mis-configured build request.
+   */
+  core.List<Volume> volumes;
+  /**
    * The ID(s) of the step(s) that this build step depends on.
    * This build step will not start until all the build steps in wait_for
    * have completed successfully. If wait_for is empty, this build step will
@@ -1064,6 +1088,12 @@
     if (_json.containsKey("name")) {
       name = _json["name"];
     }
+    if (_json.containsKey("secretEnv")) {
+      secretEnv = _json["secretEnv"];
+    }
+    if (_json.containsKey("volumes")) {
+      volumes = _json["volumes"].map((value) => new Volume.fromJson(value)).toList();
+    }
     if (_json.containsKey("waitFor")) {
       waitFor = _json["waitFor"];
     }
@@ -1089,6 +1119,12 @@
     if (name != null) {
       _json["name"] = name;
     }
+    if (secretEnv != null) {
+      _json["secretEnv"] = secretEnv;
+    }
+    if (volumes != null) {
+      _json["volumes"] = volumes.map((value) => (value).toJson()).toList();
+    }
     if (waitFor != null) {
       _json["waitFor"] = waitFor;
     }
@@ -1606,6 +1642,46 @@
 }
 
 /**
+ * Secret pairs a set of secret environment variables containing encrypted
+ * values with the Cloud KMS key to use to decrypt the value.
+ */
+class Secret {
+  /** Cloud KMS key name to use to decrypt these envs. */
+  core.String kmsKeyName;
+  /**
+   * Map of environment variable name to its encrypted value.
+   *
+   * Secret environment variables must be unique across all of a build's
+   * secrets, and must be used by at least one build step. Values can be at most
+   * 1 KB in size. There can be at most ten secret values across all of a
+   * build's secrets.
+   */
+  core.Map<core.String, core.String> secretEnv;
+
+  Secret();
+
+  Secret.fromJson(core.Map _json) {
+    if (_json.containsKey("kmsKeyName")) {
+      kmsKeyName = _json["kmsKeyName"];
+    }
+    if (_json.containsKey("secretEnv")) {
+      secretEnv = _json["secretEnv"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (kmsKeyName != null) {
+      _json["kmsKeyName"] = kmsKeyName;
+    }
+    if (secretEnv != null) {
+      _json["secretEnv"] = secretEnv;
+    }
+    return _json;
+  }
+}
+
+/**
  * Source describes the location of the source in a supported storage
  * service.
  */
@@ -1854,3 +1930,46 @@
     return _json;
   }
 }
+
+/**
+ * Volume describes a Docker container volume which is mounted into build steps
+ * in order to persist files across build step execution.
+ */
+class Volume {
+  /**
+   * Name of the volume to mount.
+   *
+   * Volume names must be unique per build step and must be valid names for
+   * Docker volumes. Each named volume must be used by at least two build steps.
+   */
+  core.String name;
+  /**
+   * Path at which to mount the volume.
+   *
+   * Paths must be absolute and cannot conflict with other volume paths on the
+   * same build step or with certain reserved volume paths.
+   */
+  core.String path;
+
+  Volume();
+
+  Volume.fromJson(core.Map _json) {
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("path")) {
+      path = _json["path"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (path != null) {
+      _json["path"] = path;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/clouddebugger/v2.dart b/generated/googleapis/lib/clouddebugger/v2.dart
index 5d23d33..5d8912c 100644
--- a/generated/googleapis/lib/clouddebugger/v2.dart
+++ b/generated/googleapis/lib/clouddebugger/v2.dart
@@ -114,7 +114,7 @@
   /**
    * Returns the list of all active breakpoints for the debuggee.
    *
-   * The breakpoint specification (location, condition, and expression
+   * The breakpoint specification (`location`, `condition`, and `expressions`
    * fields) is semantically immutable, although the field values may
    * change. For example, an agent may update the location line number
    * to reflect the actual line where the breakpoint was set, but this
@@ -188,7 +188,7 @@
    *
    * Updates to active breakpoint fields are only allowed if the new value
    * does not change the breakpoint specification. Updates to the `location`,
-   * `condition` and `expression` fields should not alter the breakpoint
+   * `condition` and `expressions` fields should not alter the breakpoint
    * semantics. These may only make changes such as canonicalizing a value
    * or snapping the location to the correct line of code.
    *
@@ -264,9 +264,6 @@
    *
    * Request parameters:
    *
-   * [clientVersion] - The client version making the call.
-   * Following: `domain/type/version` (e.g., `google.com/intellij/v1`).
-   *
    * [includeInactive] - When set to `true`, the result includes all debuggees.
    * Otherwise, the
    * result includes only debuggees that are active.
@@ -274,6 +271,9 @@
    * [project] - Project number of a Google Cloud project whose debuggees to
    * list.
    *
+   * [clientVersion] - The client version making the call.
+   * Following: `domain/type/version` (e.g., `google.com/intellij/v1`).
+   *
    * Completes with a [ListDebuggeesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -282,7 +282,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListDebuggeesResponse> list({core.String clientVersion, core.bool includeInactive, core.String project}) {
+  async.Future<ListDebuggeesResponse> list({core.bool includeInactive, core.String project, core.String clientVersion}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -290,15 +290,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (clientVersion != null) {
-      _queryParams["clientVersion"] = [clientVersion];
-    }
     if (includeInactive != null) {
       _queryParams["includeInactive"] = ["${includeInactive}"];
     }
     if (project != null) {
       _queryParams["project"] = [project];
     }
+    if (clientVersion != null) {
+      _queryParams["clientVersion"] = [clientVersion];
+    }
 
     _url = 'v2/debugger/debuggees';
 
@@ -428,10 +428,6 @@
    *
    * [debuggeeId] - ID of the debuggee whose breakpoints to list.
    *
-   * [stripResults] - This field is deprecated. The following fields are always
-   * stripped out of
-   * the result: `stack_frames`, `evaluated_expressions` and `variable_table`.
-   *
    * [waitToken] - A wait token that, if specified, blocks the call until the
    * breakpoints
    * list has changed, or a server selected timeout has expired.  The value
@@ -448,13 +444,17 @@
    * - "CAPTURE" : A CAPTURE.
    * - "LOG" : A LOG.
    *
+   * [includeInactive] - When set to `true`, the response includes active and
+   * inactive
+   * breakpoints. Otherwise, it includes only active breakpoints.
+   *
    * [includeAllUsers] - 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] - When set to `true`, the response includes active and
-   * inactive
-   * breakpoints. Otherwise, it includes only active breakpoints.
+   * [stripResults] - This field is deprecated. The following fields are always
+   * stripped out of
+   * the result: `stack_frames`, `evaluated_expressions` and `variable_table`.
    *
    * Completes with a [ListBreakpointsResponse].
    *
@@ -464,7 +464,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListBreakpointsResponse> list(core.String debuggeeId, {core.bool stripResults, core.String waitToken, core.String clientVersion, core.String action_value, core.bool includeAllUsers, core.bool includeInactive}) {
+  async.Future<ListBreakpointsResponse> list(core.String debuggeeId, {core.String waitToken, core.String clientVersion, core.String action_value, core.bool includeInactive, core.bool includeAllUsers, core.bool stripResults}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -475,9 +475,6 @@
     if (debuggeeId == null) {
       throw new core.ArgumentError("Parameter debuggeeId is required.");
     }
-    if (stripResults != null) {
-      _queryParams["stripResults"] = ["${stripResults}"];
-    }
     if (waitToken != null) {
       _queryParams["waitToken"] = [waitToken];
     }
@@ -487,11 +484,14 @@
     if (action_value != null) {
       _queryParams["action.value"] = [action_value];
     }
+    if (includeInactive != null) {
+      _queryParams["includeInactive"] = ["${includeInactive}"];
+    }
     if (includeAllUsers != null) {
       _queryParams["includeAllUsers"] = ["${includeAllUsers}"];
     }
-    if (includeInactive != null) {
-      _queryParams["includeInactive"] = ["${includeInactive}"];
+    if (stripResults != null) {
+      _queryParams["stripResults"] = ["${stripResults}"];
     }
 
     _url = 'v2/debugger/debuggees/' + commons.Escaper.ecapeVariable('$debuggeeId') + '/breakpoints';
@@ -1363,7 +1363,7 @@
    * List of breakpoints matching the request.
    * The fields `id` and `location` are guaranteed to be set on each breakpoint.
    * The fields: `stack_frames`, `evaluated_expressions` and `variable_table`
-   * are cleared on each breakpoint regardless of it's status.
+   * are cleared on each breakpoint regardless of its status.
    */
   core.List<Breakpoint> breakpoints;
   /**
@@ -1758,7 +1758,7 @@
 class UpdateActiveBreakpointRequest {
   /**
    * Updated breakpoint information.
-   * The field 'id' must be set.
+   * The field `id` must be set.
    */
   Breakpoint breakpoint;
 
diff --git a/generated/googleapis/lib/cloudfunctions/v1.dart b/generated/googleapis/lib/cloudfunctions/v1.dart
index 467c190..a259bfb 100644
--- a/generated/googleapis/lib/cloudfunctions/v1.dart
+++ b/generated/googleapis/lib/cloudfunctions/v1.dart
@@ -19,14 +19,412 @@
  * events.
  */
 class CloudfunctionsApi {
+  /** View and manage your data across Google Cloud Platform services */
+  static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
+
 
   final commons.ApiRequester _requester;
 
+  OperationsResourceApi get operations => new OperationsResourceApi(_requester);
+  ProjectsResourceApi get projects => new ProjectsResourceApi(_requester);
+
   CloudfunctionsApi(http.Client client, {core.String rootUrl: "https://cloudfunctions.googleapis.com/", core.String servicePath: ""}) :
       _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
 }
 
 
+class OperationsResourceApi {
+  final commons.ApiRequester _requester;
+
+  OperationsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * 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.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation resource.
+   * Value must have pattern "^operations/[^/]+$".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * 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 allows API services to override the binding
+   * to use different resource name schemes, such as `users / * /operations`. To
+   * override the binding, API services can add a binding such as
+   * `"/v1/{name=users / * }/operations"` to their service configuration.
+   * For backwards compatibility, the default name includes the operations
+   * collection id, however overriding users must ensure the name binding
+   * is the parent resource, without the operations collection id.
+   *
+   * Request parameters:
+   *
+   * [pageToken] - The standard list page token.
+   *
+   * [name] - The name of the operation's parent resource.
+   *
+   * [pageSize] - The standard list page size.
+   *
+   * [filter] - The standard list filter.
+   *
+   * Completes with a [ListOperationsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListOperationsResponse> list({core.String pageToken, core.String name, core.int pageSize, core.String filter}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (name != null) {
+      _queryParams["name"] = [name];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+
+    _url = 'v1/operations';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListOperationsResponse.fromJson(data));
+  }
+
+}
+
+
+class ProjectsResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsLocationsResourceApi get locations => new ProjectsLocationsResourceApi(_requester);
+
+  ProjectsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+}
+
+
+class ProjectsLocationsResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsLocationsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Lists information about the supported locations for this service.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource that owns the locations collection, if applicable.
+   * Value must have pattern "^projects/[^/]+$".
+   *
+   * [filter] - The standard list filter.
+   *
+   * [pageToken] - The standard list page token.
+   *
+   * [pageSize] - The standard list page size.
+   *
+   * Completes with a [ListLocationsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListLocationsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + '/locations';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListLocationsResponse.fromJson(data));
+  }
+
+}
+
+
+
+/** The response message for Locations.ListLocations. */
+class ListLocationsResponse {
+  /** A list of locations that matches the specified filter in the request. */
+  core.List<Location> locations;
+  /** The standard List next-page token. */
+  core.String nextPageToken;
+
+  ListLocationsResponse();
+
+  ListLocationsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("locations")) {
+      locations = _json["locations"].map((value) => new Location.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (locations != null) {
+      _json["locations"] = locations.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** The response message for Operations.ListOperations. */
+class ListOperationsResponse {
+  /** The standard List next-page token. */
+  core.String nextPageToken;
+  /** A list of operations that matches the specified filter in the request. */
+  core.List<Operation> operations;
+
+  ListOperationsResponse();
+
+  ListOperationsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("operations")) {
+      operations = _json["operations"].map((value) => new Operation.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (operations != null) {
+      _json["operations"] = operations.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** A resource that represents Google Cloud Platform location. */
+class Location {
+  /**
+   * Cross-service attributes for the location. For example
+   *
+   *     {"cloud.googleapis.com/region": "us-east1"}
+   */
+  core.Map<core.String, core.String> labels;
+  /** The canonical id for this location. For example: `"us-east1"`. */
+  core.String locationId;
+  /**
+   * Service-specific metadata. For example the available capacity at the given
+   * location.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> metadata;
+  /**
+   * Resource name for the location, which may vary between implementations.
+   * For example: `"projects/example-project/locations/us-east1"`
+   */
+  core.String name;
+
+  Location();
+
+  Location.fromJson(core.Map _json) {
+    if (_json.containsKey("labels")) {
+      labels = _json["labels"];
+    }
+    if (_json.containsKey("locationId")) {
+      locationId = _json["locationId"];
+    }
+    if (_json.containsKey("metadata")) {
+      metadata = _json["metadata"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (labels != null) {
+      _json["labels"] = labels;
+    }
+    if (locationId != null) {
+      _json["locationId"] = locationId;
+    }
+    if (metadata != null) {
+      _json["metadata"] = metadata;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    return _json;
+  }
+}
+
+/**
+ * This resource represents a long-running operation that is the result of a
+ * network API call.
+ */
+class Operation {
+  /**
+   * 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.
+   */
+  core.bool done;
+  /** The error result of the operation in case of failure or cancellation. */
+  Status error;
+  /**
+   * 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.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> metadata;
+  /**
+   * 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`.
+   */
+  core.String name;
+  /**
+   * 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`.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> response;
+
+  Operation();
+
+  Operation.fromJson(core.Map _json) {
+    if (_json.containsKey("done")) {
+      done = _json["done"];
+    }
+    if (_json.containsKey("error")) {
+      error = new Status.fromJson(_json["error"]);
+    }
+    if (_json.containsKey("metadata")) {
+      metadata = _json["metadata"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("response")) {
+      response = _json["response"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (done != null) {
+      _json["done"] = done;
+    }
+    if (error != null) {
+      _json["error"] = (error).toJson();
+    }
+    if (metadata != null) {
+      _json["metadata"] = metadata;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (response != null) {
+      _json["response"] = response;
+    }
+    return _json;
+  }
+}
 
 /** Metadata describing an Operation */
 class OperationMetadataV1Beta2 {
@@ -80,3 +478,106 @@
     return _json;
   }
 }
+
+/**
+ * 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` that 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.
+ *
+ * - 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.
+ */
+class Status {
+  /** The status code, which should be an enum value of google.rpc.Code. */
+  core.int code;
+  /**
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.List<core.Map<core.String, core.Object>> details;
+  /**
+   * 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.
+   */
+  core.String message;
+
+  Status();
+
+  Status.fromJson(core.Map _json) {
+    if (_json.containsKey("code")) {
+      code = _json["code"];
+    }
+    if (_json.containsKey("details")) {
+      details = _json["details"];
+    }
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (code != null) {
+      _json["code"] = code;
+    }
+    if (details != null) {
+      _json["details"] = details;
+    }
+    if (message != null) {
+      _json["message"] = message;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/cloudkms/v1.dart b/generated/googleapis/lib/cloudkms/v1.dart
index 73be975..77aade2 100644
--- a/generated/googleapis/lib/cloudkms/v1.dart
+++ b/generated/googleapis/lib/cloudkms/v1.dart
@@ -1126,15 +1126,15 @@
    * Value must have pattern
    * "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$".
    *
-   * [pageToken] - Optional pagination token, returned earlier via
-   * ListCryptoKeyVersionsResponse.next_page_token.
-   *
    * [pageSize] - Optional limit on the number of CryptoKeyVersions to
    * include in the response. Further CryptoKeyVersions can
    * subsequently be obtained by including the
    * ListCryptoKeyVersionsResponse.next_page_token in a subsequent request.
    * If unspecified, the server will pick an appropriate default.
    *
+   * [pageToken] - Optional pagination token, returned earlier via
+   * ListCryptoKeyVersionsResponse.next_page_token.
+   *
    * Completes with a [ListCryptoKeyVersionsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1143,7 +1143,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListCryptoKeyVersionsResponse> list(core.String parent, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListCryptoKeyVersionsResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1154,12 +1154,12 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/cryptoKeyVersions';
 
diff --git a/generated/googleapis/lib/cloudresourcemanager/v1.dart b/generated/googleapis/lib/cloudresourcemanager/v1.dart
index 696a3b4..d15712b 100644
--- a/generated/googleapis/lib/cloudresourcemanager/v1.dart
+++ b/generated/googleapis/lib/cloudresourcemanager/v1.dart
@@ -434,15 +434,15 @@
    *
    * Request parameters:
    *
+   * [pageToken] - The `next_page_token` value returned from a previous List
+   * request, if any.
+   *
    * [pageSize] - The maximum number of items to return. This is a suggestion
    * for the server.
    *
    * [parent] - The name of the resource to list all attached Liens.
    * For example, `projects/1234`.
    *
-   * [pageToken] - The `next_page_token` value returned from a previous List
-   * request, if any.
-   *
    * Completes with a [ListLiensResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -451,7 +451,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListLiensResponse> list({core.int pageSize, core.String parent, core.String pageToken}) {
+  async.Future<ListLiensResponse> list({core.String pageToken, core.int pageSize, core.String parent}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -459,15 +459,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (parent != null) {
       _queryParams["parent"] = [parent];
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
 
     _url = 'v1/liens';
 
@@ -1480,12 +1480,6 @@
    *
    * Request parameters:
    *
-   * [pageSize] - 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] - An expression for filtering the results of the request.  Filter
    * rules are
    * case insensitive. The fields eligible for filtering are:
@@ -1524,6 +1518,12 @@
    *
    * Optional.
    *
+   * [pageSize] - 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.
+   *
    * Completes with a [ListProjectsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1532,7 +1532,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListProjectsResponse> list({core.int pageSize, core.String filter, core.String pageToken}) {
+  async.Future<ListProjectsResponse> list({core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1540,15 +1540,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
 
     _url = 'v1/projects';
 
@@ -4043,8 +4043,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/cloudresourcemanager/v2beta1.dart b/generated/googleapis/lib/cloudresourcemanager/v2beta1.dart
index bad4faf..2cf3cb9 100644
--- a/generated/googleapis/lib/cloudresourcemanager/v2beta1.dart
+++ b/generated/googleapis/lib/cloudresourcemanager/v2beta1.dart
@@ -1553,8 +1553,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/cloudtrace/v1.dart b/generated/googleapis/lib/cloudtrace/v1.dart
index 276fd4b..294ac2a 100644
--- a/generated/googleapis/lib/cloudtrace/v1.dart
+++ b/generated/googleapis/lib/cloudtrace/v1.dart
@@ -156,6 +156,20 @@
    *
    * [projectId] - ID of the Cloud project where the trace data is stored.
    *
+   * [orderBy] - Field used to sort the returned traces. Optional.
+   * Can be one of the following:
+   *
+   * *   `trace_id`
+   * *   `name` (`name` field of root span in the trace)
+   * *   `duration` (difference between `end_time` and `start_time` fields of
+   *      the root span)
+   * *   `start` (`start_time` field of the root span)
+   *
+   * Descending order can be specified by appending `desc` to the sort field
+   * (for example, `name desc`).
+   *
+   * Only one sort field is permitted.
+   *
    * [filter] - An optional filter against labels for the request.
    *
    * By default, searches use prefix matching. To specify exact match, prepend
@@ -191,14 +205,14 @@
    * data was
    * collected from the application.
    *
-   * [startTime] - Start of the time interval (inclusive) during which the trace
-   * data was
-   * collected from the application.
-   *
    * [pageToken] - Token identifying the page of results to return. If provided,
    * use the
    * value of the `next_page_token` field from a previous request. Optional.
    *
+   * [startTime] - Start of the time interval (inclusive) during which the trace
+   * data was
+   * collected from the application.
+   *
    * [pageSize] - Maximum number of traces to return. If not specified or <= 0,
    * the
    * implementation selects a reasonable value.  The implementation may
@@ -212,20 +226,6 @@
    * - "ROOTSPAN" : A ROOTSPAN.
    * - "COMPLETE" : A COMPLETE.
    *
-   * [orderBy] - Field used to sort the returned traces. Optional.
-   * Can be one of the following:
-   *
-   * *   `trace_id`
-   * *   `name` (`name` field of root span in the trace)
-   * *   `duration` (difference between `end_time` and `start_time` fields of
-   *      the root span)
-   * *   `start` (`start_time` field of the root span)
-   *
-   * Descending order can be specified by appending `desc` to the sort field
-   * (for example, `name desc`).
-   *
-   * Only one sort field is permitted.
-   *
    * Completes with a [ListTracesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -234,7 +234,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTracesResponse> list(core.String projectId, {core.String filter, core.String endTime, core.String startTime, core.String pageToken, core.int pageSize, core.String view, core.String orderBy}) {
+  async.Future<ListTracesResponse> list(core.String projectId, {core.String orderBy, core.String filter, core.String endTime, core.String pageToken, core.String startTime, core.int pageSize, core.String view}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -245,27 +245,27 @@
     if (projectId == null) {
       throw new core.ArgumentError("Parameter projectId is required.");
     }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
+    }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
     if (endTime != null) {
       _queryParams["endTime"] = [endTime];
     }
-    if (startTime != null) {
-      _queryParams["startTime"] = [startTime];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (startTime != null) {
+      _queryParams["startTime"] = [startTime];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (view != null) {
       _queryParams["view"] = [view];
     }
-    if (orderBy != null) {
-      _queryParams["orderBy"] = [orderBy];
-    }
 
     _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/traces';
 
diff --git a/generated/googleapis/lib/cloudtrace/v2.dart b/generated/googleapis/lib/cloudtrace/v2.dart
index 901b4a0..4678aa8 100644
--- a/generated/googleapis/lib/cloudtrace/v2.dart
+++ b/generated/googleapis/lib/cloudtrace/v2.dart
@@ -118,12 +118,6 @@
    * is `projects/PROJECT_ID`.
    * Value must have pattern "^projects/[^/]+$".
    *
-   * [pageSize] - Optional. The maximum number of results to return from this
-   * request.
-   * Non-positive values are ignored. The presence of `next_page_token` in the
-   * response indicates that more results might be available, even if fewer than
-   * the maximum number of results is returned by this request.
-   *
    * [orderBy] - Optional. A single field used to sort the returned traces.
    * Only the following field names can be used:
    *
@@ -145,14 +139,20 @@
    * [endTime] - Optional. Do not return traces whose start time is later than
    * this time.
    *
+   * [startTime] - Optional. Do not return traces whose end time is earlier than
+   * this time.
+   *
    * [pageToken] - Optional. If present, then retrieve the next batch of results
    * from the
    * preceding call to this method.  `page_token` must be the value of
    * `next_page_token` from the previous response.  The values of other method
    * parameters should be identical to those in the previous call.
    *
-   * [startTime] - Optional. Do not return traces whose end time is earlier than
-   * this time.
+   * [pageSize] - Optional. The maximum number of results to return from this
+   * request.
+   * Non-positive values are ignored. The presence of `next_page_token` in the
+   * response indicates that more results might be available, even if fewer than
+   * the maximum number of results is returned by this request.
    *
    * Completes with a [ListTracesResponse].
    *
@@ -162,7 +162,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTracesResponse> list(core.String parent, {core.int pageSize, core.String orderBy, core.String filter, core.String endTime, core.String pageToken, core.String startTime}) {
+  async.Future<ListTracesResponse> list(core.String parent, {core.String orderBy, core.String filter, core.String endTime, core.String startTime, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -173,9 +173,6 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (orderBy != null) {
       _queryParams["orderBy"] = [orderBy];
     }
@@ -185,11 +182,14 @@
     if (endTime != null) {
       _queryParams["endTime"] = [endTime];
     }
+    if (startTime != null) {
+      _queryParams["startTime"] = [startTime];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (startTime != null) {
-      _queryParams["startTime"] = [startTime];
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
     }
 
     _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + '/traces';
@@ -1119,8 +1119,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/compute/v1.dart b/generated/googleapis/lib/compute/v1.dart
index c748a61..d14d8fb 100644
--- a/generated/googleapis/lib/compute/v1.dart
+++ b/generated/googleapis/lib/compute/v1.dart
@@ -9953,7 +9953,7 @@
       _requester = client;
 
   /**
-   * Disable this project as an XPN host project.
+   * Disable this project as a shared VPC host project.
    *
    * Request parameters:
    *
@@ -9994,7 +9994,8 @@
   }
 
   /**
-   * Disable an XPN resource associated with this host project.
+   * Disable a serivce resource (a.k.a service project) associated with this
+   * host project.
    *
    * [request] - The metadata request object.
    *
@@ -10040,7 +10041,7 @@
   }
 
   /**
-   * Enable this project as an XPN host project.
+   * Enable this project as a shared VPC host project.
    *
    * Request parameters:
    *
@@ -10081,9 +10082,9 @@
   }
 
   /**
-   * Enable XPN resource (a.k.a service project or service folder in the future)
-   * for a host project, so that subnetworks in the host project can be used by
-   * instances in the service project or folder.
+   * Enable service resource (a.k.a service project) for a host project, so that
+   * subnets in the host project can be used by instances in the service
+   * project.
    *
    * [request] - The metadata request object.
    *
@@ -10170,8 +10171,8 @@
   }
 
   /**
-   * Get the XPN host project that this project links to. May be empty if no
-   * link exists.
+   * Get the shared VPC host project that this project links to. May be empty if
+   * no link exists.
    *
    * Request parameters:
    *
@@ -10212,7 +10213,8 @@
   }
 
   /**
-   * Get XPN resources associated with this host project.
+   * Get service resources (a.k.a service project) associated with this host
+   * project.
    *
    * Request parameters:
    *
@@ -10273,7 +10275,7 @@
   }
 
   /**
-   * List all XPN host projects visible to the user in an organization.
+   * List all shared VPC host projects visible to the user in an organization.
    *
    * [request] - The metadata request object.
    *
@@ -13574,7 +13576,8 @@
 
   /**
    * Patches the specified Router resource with the data included in the
-   * request. This method supports patch semantics.
+   * request. This method supports PATCH semantics and uses JSON merge patch
+   * format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -19261,11 +19264,10 @@
 
 class AcceleratorTypeAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A map of scoped accelerator type lists. */
+  /** A list of AcceleratorTypesScopedList resources. */
   core.Map<core.String, AcceleratorTypesScopedList> items;
   /**
    * [Output Only] Type of resource. Always
@@ -19338,7 +19340,13 @@
    * lists of accelerator types.
    */
   core.String kind;
-  /** [Output Only] A token used to continue a truncated list request. */
+  /**
+   * [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.
+   */
   core.String nextPageToken;
   /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
@@ -19726,7 +19734,7 @@
    * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A map of scoped address lists. */
+  /** A list of AddressesScopedList resources. */
   core.Map<core.String, AddressesScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#addressAggregatedList for
@@ -19788,11 +19796,10 @@
 /** Contains a list of addresses. */
 class AddressList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of addresses. */
+  /** A list of Address resources. */
   core.List<Address> items;
   /**
    * [Output Only] Type of resource. Always compute#addressList for lists of
@@ -19807,7 +19814,7 @@
    * continue paging through the results.
    */
   core.String nextPageToken;
-  /** [Output Only] Server-defined URL for the resource. */
+  /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
 
   AddressList();
@@ -19986,6 +19993,46 @@
   }
 }
 
+/** An alias IP range attached to an instance's network interface. */
+class AliasIpRange {
+  /**
+   * The IP CIDR range represented by this alias IP range. This IP CIDR range
+   * must belong to the specified subnetwork and cannot contain IP addresses
+   * reserved by system or used by other network interfaces. This range may be a
+   * single IP address (e.g. 10.2.3.4), a netmask (e.g. /24) or a CIDR format
+   * string (e.g. 10.1.2.0/24).
+   */
+  core.String ipCidrRange;
+  /**
+   * Optional subnetwork secondary range name specifying the secondary range
+   * from which to allocate the IP CIDR range for this alias IP range. If left
+   * unspecified, the primary range of the subnetwork will be used.
+   */
+  core.String subnetworkRangeName;
+
+  AliasIpRange();
+
+  AliasIpRange.fromJson(core.Map _json) {
+    if (_json.containsKey("ipCidrRange")) {
+      ipCidrRange = _json["ipCidrRange"];
+    }
+    if (_json.containsKey("subnetworkRangeName")) {
+      subnetworkRangeName = _json["subnetworkRangeName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (ipCidrRange != null) {
+      _json["ipCidrRange"] = ipCidrRange;
+    }
+    if (subnetworkRangeName != null) {
+      _json["subnetworkRangeName"] = subnetworkRangeName;
+    }
+    return _json;
+  }
+}
+
 /** An instance-attached disk resource. */
 class AttachedDisk {
   /**
@@ -20445,11 +20492,10 @@
 
 class AutoscalerAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A map of scoped autoscaler lists. */
+  /** A list of AutoscalersScopedList resources. */
   core.Map<core.String, AutoscalersScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#autoscalerAggregatedList for
@@ -20511,8 +20557,7 @@
 /** Contains a list of Autoscaler resources. */
 class AutoscalerList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of Autoscaler resources. */
@@ -20989,17 +21034,17 @@
    */
   core.String description;
   /**
-   * The fully-qualified URL of a zonal Instance Group resource. This instance
-   * group defines the list of instances that serve traffic. Member virtual
-   * machine instances from each instance group must live in the same zone as
-   * the instance group itself. No two backends in a backend service are allowed
-   * to use same Instance Group resource.
+   * The fully-qualified URL of a Instance Group resource. This instance group
+   * defines the list of instances that serve traffic. Member virtual machine
+   * instances from each instance group must live in the same zone as the
+   * instance group itself. No two backends in a backend service are allowed to
+   * use same Instance Group resource.
    *
    * Note that you must specify an Instance Group resource using the
    * fully-qualified URL, rather than a partial URL.
    *
    * When the BackendService has load balancing scheme INTERNAL, the instance
-   * group must be in a zone within the same region as the BackendService.
+   * group must be within the same region as the BackendService.
    */
   core.String group;
   /**
@@ -21211,7 +21256,13 @@
   core.List<BackendBucket> items;
   /** Type of resource. */
   core.String kind;
-  /** [Output Only] A token used to continue a truncated list request. */
+  /**
+   * [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.
+   */
   core.String nextPageToken;
   /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
@@ -21547,11 +21598,17 @@
    * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A map of scoped BackendService lists. */
+  /** A list of BackendServicesScopedList resources. */
   core.Map<core.String, BackendServicesScopedList> items;
   /** Type of resource. */
   core.String kind;
-  /** [Output Only] A token used to continue a truncated list request. */
+  /**
+   * [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.
+   */
   core.String nextPageToken;
   /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
@@ -22166,11 +22223,10 @@
 
 class CommitmentAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** Commitments by scope. */
+  /** A list of CommitmentsScopedList resources. */
   core.Map<core.String, CommitmentsScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#commitmentAggregatedList for
@@ -22232,8 +22288,7 @@
 /** Contains a list of Commitment resources. */
 class CommitmentList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of Commitment resources. */
@@ -22930,11 +22985,10 @@
 
 class DiskAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A map of scoped disk lists. */
+  /** A list of DisksScopedList resources. */
   core.Map<core.String, DisksScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#diskAggregatedList for
@@ -22946,8 +23000,7 @@
    * 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. Acceptable values are 0 to 500,
-   * inclusive. (Default: 500)
+   * continue paging through the results.
    */
   core.String nextPageToken;
   /** [Output Only] Server-defined URL for this resource. */
@@ -23007,11 +23060,11 @@
    */
   core.String kind;
   /**
-   * 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.
+   * [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.
    */
   core.String nextPageToken;
   /** [Output Only] Server-defined URL for this resource. */
@@ -23204,11 +23257,10 @@
 
 class DiskTypeAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A map of scoped disk type lists. */
+  /** A list of DiskTypesScopedList resources. */
   core.Map<core.String, DiskTypesScopedList> items;
   /** [Output Only] Type of resource. Always compute#diskTypeAggregatedList. */
   core.String kind;
@@ -23267,11 +23319,10 @@
 /** Contains a list of disk types. */
 class DiskTypeList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of Disk Type resources. */
+  /** A list of DiskType resources. */
   core.List<DiskType> items;
   /**
    * [Output Only] Type of resource. Always compute#diskTypeList for disk types.
@@ -23720,15 +23771,16 @@
    */
   core.List<core.String> sourceRanges;
   /**
-   * If source tags are specified, the firewall will apply only to traffic with
-   * source IP that belongs to a tag listed in source tags. Source tags cannot
-   * be used to control traffic to an instance's external IP address. Because
-   * tags are associated with an instance, not an IP address. One or both of
-   * sourceRanges and sourceTags may be set. If both properties are set, the
-   * firewall will apply to traffic that has source IP address within
-   * sourceRanges OR the source IP that belongs to a tag listed in the
-   * sourceTags property. The connection does not need to match both properties
-   * for the firewall to apply.
+   * If source tags are specified, the firewall will apply only to traffic from
+   * VM instances in the same virtual network with a tag listed in the source
+   * tags. Source tags cannot be used to control traffic to an instance's
+   * external IP address, it only applies to traffic between instances in the
+   * same virtual network. Because tags are associated with instances, not IP
+   * addresses. One or both of sourceRanges and sourceTags may be set. If both
+   * properties are set, the firewall will apply to traffic that has source IP
+   * address within sourceRanges OR the source IP that belongs to a tag listed
+   * in the sourceTags property. The connection does not need to match both
+   * properties for the firewall to apply.
    */
   core.List<core.String> sourceTags;
   /**
@@ -23819,11 +23871,10 @@
 /** Contains a list of firewalls. */
 class FirewallList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of Firewall resources. */
+  /** A list of Firewall resources. */
   core.List<Firewall> items;
   /**
    * [Output Only] Type of resource. Always compute#firewallList for lists of
@@ -23995,8 +24046,8 @@
    * Some types of forwarding target have constraints on the acceptable ports:
    * - TargetHttpProxy: 80, 8080
    * - TargetHttpsProxy: 443
-   * - TargetTcpProxy: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995
-   * - TargetSslProxy: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995
+   * - TargetTcpProxy: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 5222
+   * - TargetSslProxy: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 5222
    * - TargetVpnGateway: 500, 4500
    * -
    */
@@ -24157,11 +24208,10 @@
 
 class ForwardingRuleAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A map of scoped forwarding rule lists. */
+  /** A list of ForwardingRulesScopedList resources. */
   core.Map<core.String, ForwardingRulesScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#forwardingRuleAggregatedList
@@ -24222,7 +24272,9 @@
 
 /** Contains a list of ForwardingRule resources. */
 class ForwardingRuleList {
-  /** [Output Only] Unique identifier for the resource. Set by the server. */
+  /**
+   * [Output Only] Unique identifier for the resource; defined by the server.
+   */
   core.String id;
   /** A list of ForwardingRule resources. */
   core.List<ForwardingRule> items;
@@ -24813,8 +24865,7 @@
 /** Contains a list of HealthCheck resources. */
 class HealthCheckList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of HealthCheck resources. */
@@ -25165,7 +25216,7 @@
 /** Contains a list of HttpHealthCheck resources. */
 class HttpHealthCheckList {
   /**
-   * [Output Only] Unique identifier for the resource. Defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of HttpHealthCheck resources. */
@@ -25772,11 +25823,10 @@
 /** Contains a list of images. */
 class ImageList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of Image resources. */
+  /** A list of Image resources. */
   core.List<Image> items;
   /** Type of resource. */
   core.String kind;
@@ -26123,11 +26173,10 @@
 
 class InstanceAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A map of scoped instance lists. */
+  /** A list of InstancesScopedList resources. */
   core.Map<core.String, InstancesScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#instanceAggregatedList for
@@ -26353,11 +26402,10 @@
 
 class InstanceGroupAggregatedList {
   /**
-   * [Output Only] A unique identifier for this aggregated list of instance
-   * groups. The server generates this identifier.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A map of scoped instance group lists. */
+  /** A list of InstanceGroupsScopedList resources. */
   core.Map<core.String, InstanceGroupsScopedList> items;
   /**
    * [Output Only] The resource type, which is always
@@ -26373,10 +26421,7 @@
    * continue paging through the results.
    */
   core.String nextPageToken;
-  /**
-   * [Output Only] The URL for this resource type. The server generates this
-   * URL.
-   */
+  /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
 
   InstanceGroupAggregatedList();
@@ -26423,11 +26468,10 @@
 /** A list of InstanceGroup resources. */
 class InstanceGroupList {
   /**
-   * [Output Only] A unique identifier for this list of instance groups. The
-   * server generates this identifier.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A list of instance groups. */
+  /** A list of InstanceGroup resources. */
   core.List<InstanceGroup> items;
   /**
    * [Output Only] The resource type, which is always compute#instanceGroupList
@@ -26442,10 +26486,7 @@
    * continue paging through the results.
    */
   core.String nextPageToken;
-  /**
-   * [Output Only] The URL for this resource type. The server generates this
-   * URL.
-   */
+  /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
 
   InstanceGroupList();
@@ -26803,11 +26844,10 @@
 
 class InstanceGroupManagerAggregatedList {
   /**
-   * [Output Only] A unique identifier for this aggregated list of managed
-   * instance groups. The server generates this identifier.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A map of filtered managed instance group lists. */
+  /** A list of InstanceGroupManagersScopedList resources. */
   core.Map<core.String, InstanceGroupManagersScopedList> items;
   /**
    * [Output Only] The resource type, which is always
@@ -26823,10 +26863,7 @@
    * continue paging through the results.
    */
   core.String nextPageToken;
-  /**
-   * [Output Only] The URL for this resource type. The server generates this
-   * URL.
-   */
+  /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
 
   InstanceGroupManagerAggregatedList();
@@ -26873,11 +26910,10 @@
 /** [Output Only] A list of managed instance groups. */
 class InstanceGroupManagerList {
   /**
-   * [Output Only] A unique identifier for this resource type. The server
-   * generates this identifier.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of managed instance groups. */
+  /** A list of InstanceGroupManager resources. */
   core.List<InstanceGroupManager> items;
   /**
    * [Output Only] The resource type, which is always
@@ -27262,14 +27298,10 @@
 
 class InstanceGroupsListInstances {
   /**
-   * [Output Only] A unique identifier for this list of instances in the
-   * specified instance group. The server generates this identifier.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /**
-   * [Output Only] A list of instances and any named ports that are assigned to
-   * those instances.
-   */
+  /** A list of InstanceWithNamedPorts resources. */
   core.List<InstanceWithNamedPorts> items;
   /**
    * [Output Only] The resource type, which is always
@@ -27285,10 +27317,7 @@
    * continue paging through the results.
    */
   core.String nextPageToken;
-  /**
-   * [Output Only] The URL for this list of instances in the specified instance
-   * groups. The server generates this URL.
-   */
+  /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
 
   InstanceGroupsListInstances();
@@ -27564,11 +27593,10 @@
 /** Contains a list of instances. */
 class InstanceList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of instances. */
+  /** A list of Instance resources. */
   core.List<Instance> items;
   /**
    * [Output Only] Type of resource. Always compute#instanceList for lists of
@@ -27922,11 +27950,10 @@
 /** A list of instance templates. */
 class InstanceTemplateList {
   /**
-   * [Output Only] A unique identifier for this instance template. The server
-   * defines this identifier.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] list of InstanceTemplate resources. */
+  /** A list of InstanceTemplate resources. */
   core.List<InstanceTemplate> items;
   /**
    * [Output Only] The resource type, which is always
@@ -27941,10 +27968,7 @@
    * continue paging through the results.
    */
   core.String nextPageToken;
-  /**
-   * [Output Only] The URL for this instance template list. The server defines
-   * this URL.
-   */
+  /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
 
   InstanceTemplateList();
@@ -28549,11 +28573,10 @@
 
 class MachineTypeAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A map of scoped machine type lists. */
+  /** A list of MachineTypesScopedList resources. */
   core.Map<core.String, MachineTypesScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#machineTypeAggregatedList
@@ -28615,11 +28638,10 @@
 /** Contains a list of machine types. */
 class MachineTypeList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of Machine Type resources. */
+  /** A list of MachineType resources. */
   core.List<MachineType> items;
   /**
    * [Output Only] Type of resource. Always compute#machineTypeList for lists of
@@ -29022,7 +29044,7 @@
    * Value for the metadata entry. These are free-form strings, and only have
    * meaning as interpreted by the image running in the instance. The only
    * restriction placed on values is that their size must be less than or equal
-   * to 32768 bytes.
+   * to 262144 bytes (256 KiB).
    */
   core.String value;
 
@@ -29285,6 +29307,11 @@
    */
   core.List<AccessConfig> accessConfigs;
   /**
+   * An array of alias IP ranges for this network interface. Can only be
+   * specified for network interfaces on subnet-mode networks.
+   */
+  core.List<AliasIpRange> aliasIpRanges;
+  /**
    * [Output Only] Type of the resource. Always compute#networkInterface for
    * network interfaces.
    */
@@ -29337,6 +29364,9 @@
     if (_json.containsKey("accessConfigs")) {
       accessConfigs = _json["accessConfigs"].map((value) => new AccessConfig.fromJson(value)).toList();
     }
+    if (_json.containsKey("aliasIpRanges")) {
+      aliasIpRanges = _json["aliasIpRanges"].map((value) => new AliasIpRange.fromJson(value)).toList();
+    }
     if (_json.containsKey("kind")) {
       kind = _json["kind"];
     }
@@ -29359,6 +29389,9 @@
     if (accessConfigs != null) {
       _json["accessConfigs"] = accessConfigs.map((value) => (value).toJson()).toList();
     }
+    if (aliasIpRanges != null) {
+      _json["aliasIpRanges"] = aliasIpRanges.map((value) => (value).toJson()).toList();
+    }
     if (kind != null) {
       _json["kind"] = kind;
     }
@@ -29381,11 +29414,10 @@
 /** Contains a list of networks. */
 class NetworkList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of Network resources. */
+  /** A list of Network resources. */
   core.List<Network> items;
   /**
    * [Output Only] Type of resource. Always compute#networkList for lists of
@@ -30429,8 +30461,8 @@
    */
   UsageExportLocation usageExportLocation;
   /**
-   * [Output Only] The role this project has in a Cross Project Network (XPN)
-   * configuration. Currently only HOST projects are differentiated.
+   * [Output Only] The role this project has in a shared VPC configuration.
+   * Currently only HOST projects are differentiated.
    * Possible string values are:
    * - "HOST"
    * - "UNSPECIFIED_XPN_PROJECT_STATUS"
@@ -30521,7 +30553,7 @@
 }
 
 class ProjectsDisableXpnResourceRequest {
-  /** XPN resource ID. */
+  /** Service resource (a.k.a service project) ID. */
   XpnResourceId xpnResource;
 
   ProjectsDisableXpnResourceRequest();
@@ -30542,7 +30574,7 @@
 }
 
 class ProjectsEnableXpnResourceRequest {
-  /** XPN resource ID. */
+  /** Service resource (a.k.a service project) ID. */
   XpnResourceId xpnResource;
 
   ProjectsEnableXpnResourceRequest();
@@ -30565,7 +30597,7 @@
 class ProjectsGetXpnResources {
   /**
    * [Output Only] Type of resource. Always compute#projectsGetXpnResources for
-   * lists of XPN resources.
+   * lists of service resources (a.k.a service projects)
    */
   core.String kind;
   /**
@@ -30576,7 +30608,10 @@
    * continue paging through the results.
    */
   core.String nextPageToken;
-  /** XPN resources attached to this project as their XPN host. */
+  /**
+   * Serive resources (a.k.a service projects) attached to this project as their
+   * shared VPC host.
+   */
   core.List<XpnResourceId> resources;
 
   ProjectsGetXpnResources();
@@ -30611,8 +30646,8 @@
 class ProjectsListXpnHostsRequest {
   /**
    * Optional organization ID managed by Cloud Resource Manager, for which to
-   * list XPN host projects. If not specified, the organization will be inferred
-   * from the project.
+   * list shared VPC host projects. If not specified, the organization will be
+   * inferred from the project.
    */
   core.String organization;
 
@@ -30660,6 +30695,7 @@
    * - "NETWORKS"
    * - "NVIDIA_K80_GPUS"
    * - "PREEMPTIBLE_CPUS"
+   * - "PREEMPTIBLE_LOCAL_SSD_GB"
    * - "REGIONAL_AUTOSCALERS"
    * - "REGIONAL_INSTANCE_GROUP_MANAGERS"
    * - "ROUTERS"
@@ -30819,15 +30855,20 @@
 /** Contains a list of autoscalers. */
 class RegionAutoscalerList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A list of autoscalers. */
+  /** A list of Autoscaler resources. */
   core.List<Autoscaler> items;
   /** Type of resource. */
   core.String kind;
-  /** [Output Only] A token used to continue a truncated list request. */
+  /**
+   * [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.
+   */
   core.String nextPageToken;
   /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
@@ -30876,8 +30917,7 @@
 /** Contains a list of InstanceGroup resources. */
 class RegionInstanceGroupList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of InstanceGroup resources. */
@@ -30892,10 +30932,7 @@
    * continue paging through the results.
    */
   core.String nextPageToken;
-  /**
-   * [Output Only] The URL for this resource type. The server generates this
-   * URL.
-   */
+  /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
 
   RegionInstanceGroupList();
@@ -30942,11 +30979,10 @@
 /** Contains a list of managed instance groups. */
 class RegionInstanceGroupManagerList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A list of managed instance groups. */
+  /** A list of InstanceGroupManager resources. */
   core.List<InstanceGroupManager> items;
   /**
    * [Output Only] The resource type, which is always
@@ -30954,12 +30990,15 @@
    * exist in th regional scope.
    */
   core.String kind;
-  /** [Output only] A token used to continue a truncated list request. */
-  core.String nextPageToken;
   /**
-   * [Output only] The URL for this resource type. The server generates this
-   * URL.
+   * [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.
    */
+  core.String nextPageToken;
+  /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
 
   RegionInstanceGroupManagerList();
@@ -31166,13 +31205,10 @@
 
 class RegionInstanceGroupsListInstances {
   /**
-   * [Output Only] Unique identifier for the resource. Defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /**
-   * A list of instances and any named ports that are assigned to those
-   * instances.
-   */
+  /** A list of InstanceWithNamedPorts resources. */
   core.List<InstanceWithNamedPorts> items;
   /** The resource type. */
   core.String kind;
@@ -31184,7 +31220,7 @@
    * continue paging through the results.
    */
   core.String nextPageToken;
-  /** [Output Only] Server-defined URL for the resource. */
+  /** [Output Only] Server-defined URL for this resource. */
   core.String selfLink;
 
   RegionInstanceGroupsListInstances();
@@ -31313,11 +31349,10 @@
 /** Contains a list of region resources. */
 class RegionList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of Region resources. */
+  /** A list of Region resources. */
   core.List<Region> items;
   /**
    * [Output Only] Type of resource. Always compute#regionList for lists of
@@ -31755,10 +31790,10 @@
 /** Contains a list of Route resources. */
 class RouteList {
   /**
-   * [Output Only] Unique identifier for the resource. Defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of Route resources. */
+  /** A list of Route resources. */
   core.List<Route> items;
   /** Type of resource. */
   core.String kind;
@@ -31941,11 +31976,10 @@
 /** Contains a list of routers. */
 class RouterAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A map of scoped router lists. */
+  /** A list of Router resources. */
   core.Map<core.String, RoutersScopedList> items;
   /** Type of resource. */
   core.String kind;
@@ -32155,8 +32189,7 @@
 /** Contains a list of Router resources. */
 class RouterList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of Router resources. */
@@ -33006,11 +33039,10 @@
 /** Contains a list of Snapshot resources. */
 class SnapshotList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of Snapshot resources. */
+  /** A list of Snapshot resources. */
   core.List<Snapshot> items;
   /** Type of resource. */
   core.String kind;
@@ -33175,7 +33207,7 @@
 /** Contains a list of SslCertificate resources. */
 class SslCertificateList {
   /**
-   * [Output Only] Unique identifier for the resource. Defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of SslCertificate resources. */
@@ -33295,6 +33327,13 @@
    * at resource creation time.
    */
   core.String region;
+  /**
+   * An array of configurations for secondary IP ranges for VM instances
+   * contained in this subnetwork. The primary IP of such VM must belong to the
+   * primary ipCidrRange of the subnetwork. The alias IPs may belong to either
+   * primary or secondary ranges.
+   */
+  core.List<SubnetworkSecondaryRange> secondaryIpRanges;
   /** [Output Only] Server-defined URL for the resource. */
   core.String selfLink;
 
@@ -33331,6 +33370,9 @@
     if (_json.containsKey("region")) {
       region = _json["region"];
     }
+    if (_json.containsKey("secondaryIpRanges")) {
+      secondaryIpRanges = _json["secondaryIpRanges"].map((value) => new SubnetworkSecondaryRange.fromJson(value)).toList();
+    }
     if (_json.containsKey("selfLink")) {
       selfLink = _json["selfLink"];
     }
@@ -33368,6 +33410,9 @@
     if (region != null) {
       _json["region"] = region;
     }
+    if (secondaryIpRanges != null) {
+      _json["secondaryIpRanges"] = secondaryIpRanges.map((value) => (value).toJson()).toList();
+    }
     if (selfLink != null) {
       _json["selfLink"] = selfLink;
     }
@@ -33377,11 +33422,10 @@
 
 class SubnetworkAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output] A map of scoped Subnetwork lists. */
+  /** A list of SubnetworksScopedList resources. */
   core.Map<core.String, SubnetworksScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#subnetworkAggregatedList for
@@ -33443,11 +33487,10 @@
 /** Contains a list of Subnetwork resources. */
 class SubnetworkList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** The Subnetwork resources. */
+  /** A list of Subnetwork resources. */
   core.List<Subnetwork> items;
   /**
    * [Output Only] Type of resource. Always compute#subnetworkList for lists of
@@ -33506,6 +33549,45 @@
   }
 }
 
+/** Represents a secondary IP range of a subnetwork. */
+class SubnetworkSecondaryRange {
+  /**
+   * The range of IP addresses belonging to this subnetwork secondary range.
+   * Provide this property when you create the subnetwork. Ranges must be unique
+   * and non-overlapping with all primary and secondary IP ranges within a
+   * network. Only IPv4 is supported.
+   */
+  core.String ipCidrRange;
+  /**
+   * The name associated with this subnetwork secondary range, used when adding
+   * an alias IP range to a VM instance. The name must be 1-63 characters long,
+   * and comply with RFC1035. The name must be unique within the subnetwork.
+   */
+  core.String rangeName;
+
+  SubnetworkSecondaryRange();
+
+  SubnetworkSecondaryRange.fromJson(core.Map _json) {
+    if (_json.containsKey("ipCidrRange")) {
+      ipCidrRange = _json["ipCidrRange"];
+    }
+    if (_json.containsKey("rangeName")) {
+      rangeName = _json["rangeName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (ipCidrRange != null) {
+      _json["ipCidrRange"] = ipCidrRange;
+    }
+    if (rangeName != null) {
+      _json["rangeName"] = rangeName;
+    }
+    return _json;
+  }
+}
+
 class SubnetworksExpandIpCidrRangeRequest {
   /**
    * The IP (in CIDR format or netmask) of internal addresses that are legal on
@@ -33900,8 +33982,7 @@
 /** A list of TargetHttpProxy resources. */
 class TargetHttpProxyList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of TargetHttpProxy resources. */
@@ -34096,8 +34177,7 @@
 /** Contains a list of TargetHttpsProxy resources. */
 class TargetHttpsProxyList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of TargetHttpsProxy resources. */
@@ -34284,7 +34364,7 @@
    * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A map of scoped target instance lists. */
+  /** A list of TargetInstance resources. */
   core.Map<core.String, TargetInstancesScopedList> items;
   /** Type of resource. */
   core.String kind;
@@ -34343,8 +34423,7 @@
 /** Contains a list of TargetInstance resources. */
 class TargetInstanceList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of TargetInstance resources. */
@@ -34722,10 +34801,10 @@
 
 class TargetPoolAggregatedList {
   /**
-   * [Output Only] Unique identifier for the resource. Defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A map of scoped target pool lists. */
+  /** A list of TargetPool resources. */
   core.Map<core.String, TargetPoolsScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#targetPoolAggregatedList for
@@ -34818,7 +34897,7 @@
 /** Contains a list of TargetPool resources. */
 class TargetPoolList {
   /**
-   * [Output Only] Unique identifier for the resource. Defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of TargetPool resources. */
@@ -35320,8 +35399,7 @@
 /** Contains a list of TargetSslProxy resources. */
 class TargetSslProxyList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of TargetSslProxy resources. */
@@ -35532,8 +35610,7 @@
 /** Contains a list of TargetTcpProxy resources. */
 class TargetTcpProxyList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
   /** A list of TargetTcpProxy resources. */
@@ -35730,11 +35807,10 @@
 
 class TargetVpnGatewayAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** A map of scoped target vpn gateway lists. */
+  /** A list of TargetVpnGateway resources. */
   core.Map<core.String, TargetVpnGatewaysScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#targetVpnGateway for target
@@ -35796,11 +35872,10 @@
 /** Contains a list of TargetVpnGateway resources. */
 class TargetVpnGatewayList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of TargetVpnGateway resources. */
+  /** A list of TargetVpnGateway resources. */
   core.List<TargetVpnGateway> items;
   /**
    * [Output Only] Type of resource. Always compute#targetVpnGateway for target
@@ -36174,7 +36249,9 @@
 
 /** Contains a list of UrlMap resources. */
 class UrlMapList {
-  /** [Output Only] Unique identifier for the resource. Set by the server. */
+  /**
+   * [Output Only] Unique identifier for the resource; defined by the server.
+   */
   core.String id;
   /** A list of UrlMap resources. */
   core.List<UrlMap> items;
@@ -36634,11 +36711,10 @@
 
 class VpnTunnelAggregatedList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A map of scoped vpn tunnel lists. */
+  /** A list of VpnTunnelsScopedList resources. */
   core.Map<core.String, VpnTunnelsScopedList> items;
   /**
    * [Output Only] Type of resource. Always compute#vpnTunnel for VPN tunnels.
@@ -36699,11 +36775,10 @@
 /** Contains a list of VpnTunnel resources. */
 class VpnTunnelList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of VpnTunnel resources. */
+  /** A list of VpnTunnel resources. */
   core.List<VpnTunnel> items;
   /**
    * [Output Only] Type of resource. Always compute#vpnTunnel for VPN tunnels.
@@ -36898,15 +36973,14 @@
 
 class XpnHostList {
   /**
-   * [Output Only] The unique identifier for the resource. This identifier is
-   * defined by the server.
+   * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of XPN host project URLs. */
+  /** [Output Only] A list of shared VPC host project URLs. */
   core.List<Project> items;
   /**
-   * [Output Only] Type of resource. Always compute#xpnHostList for lists of XPN
-   * hosts.
+   * [Output Only] Type of resource. Always compute#xpnHostList for lists of
+   * shared VPC hosts.
    */
   core.String kind;
   /**
@@ -36961,15 +37035,15 @@
   }
 }
 
-/** XpnResourceId */
+/** Service resource (a.k.a service project) ID. */
 class XpnResourceId {
   /**
-   * The ID of the XPN resource. In the case of projects, this field matches the
-   * project's name, not the canonical ID.
+   * The ID of the service resource. In the case of projects, this field matches
+   * the project ID (e.g., my-project), not the project number (e.g., 12345678).
    */
   core.String id;
   /**
-   * The type of the XPN resource.
+   * The type of the service resource.
    * Possible string values are:
    * - "PROJECT"
    * - "XPN_RESOURCE_TYPE_UNSPECIFIED"
@@ -37099,7 +37173,7 @@
    * [Output Only] Unique identifier for the resource; defined by the server.
    */
   core.String id;
-  /** [Output Only] A list of Zone resources. */
+  /** A list of Zone resources. */
   core.List<Zone> items;
   /** Type of resource. */
   core.String kind;
diff --git a/generated/googleapis/lib/container/v1.dart b/generated/googleapis/lib/container/v1.dart
index 4271316..734d702 100644
--- a/generated/googleapis/lib/container/v1.dart
+++ b/generated/googleapis/lib/container/v1.dart
@@ -1730,6 +1730,39 @@
 
 
 
+/** AcceleratorConfig represents a Hardware Accelerator request. */
+class AcceleratorConfig {
+  /** The number of the accelerator cards exposed to an instance. */
+  core.String acceleratorCount;
+  /**
+   * The accelerator type resource name. List of supported accelerators
+   * [here](/compute/docs/gpus/#Introduction)
+   */
+  core.String acceleratorType;
+
+  AcceleratorConfig();
+
+  AcceleratorConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("acceleratorCount")) {
+      acceleratorCount = _json["acceleratorCount"];
+    }
+    if (_json.containsKey("acceleratorType")) {
+      acceleratorType = _json["acceleratorType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (acceleratorCount != null) {
+      _json["acceleratorCount"] = acceleratorCount;
+    }
+    if (acceleratorType != null) {
+      _json["acceleratorType"] = acceleratorType;
+    }
+    return _json;
+  }
+}
+
 /**
  * Configuration for the addons that can be automatically spun up in the
  * cluster, enabling additional functionality.
@@ -1746,6 +1779,8 @@
    * makes it easy to set up HTTP load balancers for services in a cluster.
    */
   HttpLoadBalancing httpLoadBalancing;
+  /** Configuration for the Kubernetes Dashboard. */
+  KubernetesDashboard kubernetesDashboard;
 
   AddonsConfig();
 
@@ -1756,6 +1791,9 @@
     if (_json.containsKey("httpLoadBalancing")) {
       httpLoadBalancing = new HttpLoadBalancing.fromJson(_json["httpLoadBalancing"]);
     }
+    if (_json.containsKey("kubernetesDashboard")) {
+      kubernetesDashboard = new KubernetesDashboard.fromJson(_json["kubernetesDashboard"]);
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -1766,6 +1804,9 @@
     if (httpLoadBalancing != null) {
       _json["httpLoadBalancing"] = (httpLoadBalancing).toJson();
     }
+    if (kubernetesDashboard != null) {
+      _json["kubernetesDashboard"] = (kubernetesDashboard).toJson();
+    }
     return _json;
   }
 }
@@ -1824,6 +1865,36 @@
   }
 }
 
+/** CidrBlock contains an optional name and one CIDR block. */
+class CidrBlock {
+  /** cidr_block must be specified in CIDR notation. */
+  core.String cidrBlock;
+  /** display_name is an optional field for users to identify CIDR blocks. */
+  core.String displayName;
+
+  CidrBlock();
+
+  CidrBlock.fromJson(core.Map _json) {
+    if (_json.containsKey("cidrBlock")) {
+      cidrBlock = _json["cidrBlock"];
+    }
+    if (_json.containsKey("displayName")) {
+      displayName = _json["displayName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (cidrBlock != null) {
+      _json["cidrBlock"] = cidrBlock;
+    }
+    if (displayName != null) {
+      _json["displayName"] = displayName;
+    }
+    return _json;
+  }
+}
+
 /** Configuration for client certificates on the cluster. */
 class ClientCertificateConfig {
   /** Issue a client certificate. */
@@ -1945,6 +2016,11 @@
   /** The authentication information for accessing the master endpoint. */
   MasterAuth masterAuth;
   /**
+   * Master authorized networks is a Beta feature.
+   * The configuration options for master authorized networks feature.
+   */
+  MasterAuthorizedNetworksConfig masterAuthorizedNetworksConfig;
+  /**
    * The monitoring service the cluster should use to write metrics.
    * Currently available options:
    *
@@ -2107,6 +2183,9 @@
     if (_json.containsKey("masterAuth")) {
       masterAuth = new MasterAuth.fromJson(_json["masterAuth"]);
     }
+    if (_json.containsKey("masterAuthorizedNetworksConfig")) {
+      masterAuthorizedNetworksConfig = new MasterAuthorizedNetworksConfig.fromJson(_json["masterAuthorizedNetworksConfig"]);
+    }
     if (_json.containsKey("monitoringService")) {
       monitoringService = _json["monitoringService"];
     }
@@ -2210,6 +2289,9 @@
     if (masterAuth != null) {
       _json["masterAuth"] = (masterAuth).toJson();
     }
+    if (masterAuthorizedNetworksConfig != null) {
+      _json["masterAuthorizedNetworksConfig"] = (masterAuthorizedNetworksConfig).toJson();
+    }
     if (monitoringService != null) {
       _json["monitoringService"] = monitoringService;
     }
@@ -2280,6 +2362,11 @@
    */
   core.List<core.String> desiredLocations;
   /**
+   * Master authorized networks is a Beta feature.
+   * The desired configuration options for master authorized networks feature.
+   */
+  MasterAuthorizedNetworksConfig desiredMasterAuthorizedNetworksConfig;
+  /**
    * 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.
@@ -2326,6 +2413,9 @@
     if (_json.containsKey("desiredLocations")) {
       desiredLocations = _json["desiredLocations"];
     }
+    if (_json.containsKey("desiredMasterAuthorizedNetworksConfig")) {
+      desiredMasterAuthorizedNetworksConfig = new MasterAuthorizedNetworksConfig.fromJson(_json["desiredMasterAuthorizedNetworksConfig"]);
+    }
     if (_json.containsKey("desiredMasterVersion")) {
       desiredMasterVersion = _json["desiredMasterVersion"];
     }
@@ -2354,6 +2444,9 @@
     if (desiredLocations != null) {
       _json["desiredLocations"] = desiredLocations;
     }
+    if (desiredMasterAuthorizedNetworksConfig != null) {
+      _json["desiredMasterAuthorizedNetworksConfig"] = (desiredMasterAuthorizedNetworksConfig).toJson();
+    }
     if (desiredMasterVersion != null) {
       _json["desiredMasterVersion"] = desiredMasterVersion;
     }
@@ -2636,6 +2729,28 @@
   }
 }
 
+/** Configuration for the Kubernetes Dashboard. */
+class KubernetesDashboard {
+  /** Whether the Kubernetes Dashboard is enabled for this cluster. */
+  core.bool disabled;
+
+  KubernetesDashboard();
+
+  KubernetesDashboard.fromJson(core.Map _json) {
+    if (_json.containsKey("disabled")) {
+      disabled = _json["disabled"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (disabled != null) {
+      _json["disabled"] = disabled;
+    }
+    return _json;
+  }
+}
+
 /**
  * Configuration for the legacy Attribute Based Access Control authorization
  * mode.
@@ -2845,6 +2960,45 @@
 }
 
 /**
+ * Master authorized networks is a Beta feature.
+ * Configuration options for the master authorized networks feature. Enabled
+ * master authorized networks will disallow all external traffic to access
+ * Kubernetes master through HTTPS except traffic from the given CIDR blocks,
+ * Google Compute Engine Public IPs and Google Prod IPs.
+ */
+class MasterAuthorizedNetworksConfig {
+  /**
+   * cidr_blocks define up to 10 external networks that could access
+   * Kubernetes master through HTTPS.
+   */
+  core.List<CidrBlock> cidrBlocks;
+  /** Whether or not master authorized networks is enabled. */
+  core.bool enabled;
+
+  MasterAuthorizedNetworksConfig();
+
+  MasterAuthorizedNetworksConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("cidrBlocks")) {
+      cidrBlocks = _json["cidrBlocks"].map((value) => new CidrBlock.fromJson(value)).toList();
+    }
+    if (_json.containsKey("enabled")) {
+      enabled = _json["enabled"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (cidrBlocks != null) {
+      _json["cidrBlocks"] = cidrBlocks.map((value) => (value).toJson()).toList();
+    }
+    if (enabled != null) {
+      _json["enabled"] = enabled;
+    }
+    return _json;
+  }
+}
+
+/**
  * Configuration options for the NetworkPolicy feature.
  * https://kubernetes.io/docs/concepts/services-networking/networkpolicies/
  */
@@ -2854,7 +3008,7 @@
   /**
    * The selected network policy provider.
    * Possible string values are:
-   * - "UNKNOWN" : Not set
+   * - "PROVIDER_UNSPECIFIED" : Not set
    * - "CALICO" : Tigera (Calico Felix).
    */
   core.String provider;
@@ -2885,6 +3039,12 @@
 /** Parameters that describe the nodes in a cluster. */
 class NodeConfig {
   /**
+   * A list of hardware accelerators to be attached to each node.
+   * See https://cloud.google.com/compute/docs/gpus for more information about
+   * support for GPUs.
+   */
+  core.List<AcceleratorConfig> accelerators;
+  /**
    * Size of the disk attached to each node, specified in GB.
    * The smallest allowed disk size is 10GB.
    *
@@ -2980,6 +3140,9 @@
   NodeConfig();
 
   NodeConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("accelerators")) {
+      accelerators = _json["accelerators"].map((value) => new AcceleratorConfig.fromJson(value)).toList();
+    }
     if (_json.containsKey("diskSizeGb")) {
       diskSizeGb = _json["diskSizeGb"];
     }
@@ -3014,6 +3177,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (accelerators != null) {
+      _json["accelerators"] = accelerators.map((value) => (value).toJson()).toList();
+    }
     if (diskSizeGb != null) {
       _json["diskSizeGb"] = diskSizeGb;
     }
diff --git a/generated/googleapis/lib/content/v2.dart b/generated/googleapis/lib/content/v2.dart
index 4149a9a..30f3ca1 100644
--- a/generated/googleapis/lib/content/v2.dart
+++ b/generated/googleapis/lib/content/v2.dart
@@ -84,8 +84,8 @@
   /**
    * Claims the website of a Merchant Center sub-account. This method can only
    * be called for accounts to which the managing account has access: either the
-   * managing account itself or sub-accounts if the managing account is a
-   * multi-client account.
+   * managing account itself for any Merchant Center account, or any sub-account
+   * when the managing account is a multi-client account.
    *
    * Request parameters:
    *
@@ -232,8 +232,8 @@
   /**
    * Retrieves a Merchant Center account. This method can only be called for
    * accounts to which the managing account has access: either the managing
-   * account itself or sub-accounts if the managing account is a multi-client
-   * account.
+   * account itself for any Merchant Center account, or any sub-account when the
+   * managing account is a multi-client account.
    *
    * Request parameters:
    *
@@ -380,8 +380,9 @@
   /**
    * Updates a Merchant Center account. This method can only be called for
    * accounts to which the managing account has access: either the managing
-   * account itself or sub-accounts if the managing account is a multi-client
-   * account. This method supports patch semantics.
+   * account itself for any Merchant Center account, or any sub-account when the
+   * managing account is a multi-client account. This method supports patch
+   * semantics.
    *
    * [request] - The metadata request object.
    *
@@ -437,8 +438,8 @@
   /**
    * Updates a Merchant Center account. This method can only be called for
    * accounts to which the managing account has access: either the managing
-   * account itself or sub-accounts if the managing account is a multi-client
-   * account.
+   * account itself for any Merchant Center account, or any sub-account when the
+   * managing account is a multi-client account.
    *
    * [request] - The metadata request object.
    *
@@ -540,8 +541,8 @@
   /**
    * Retrieves the status of a Merchant Center account. This method can only be
    * called for accounts to which the managing account has access: either the
-   * managing account itself or sub-accounts if the managing account is a
-   * multi-client account.
+   * managing account itself for any Merchant Center account, or any sub-account
+   * when the managing account is a multi-client account.
    *
    * Request parameters:
    *
@@ -692,8 +693,8 @@
   /**
    * Retrieves the tax settings of the account. This method can only be called
    * for accounts to which the managing account has access: either the managing
-   * account itself or sub-accounts if the managing account is a multi-client
-   * account.
+   * account itself for any Merchant Center account, or any sub-account when the
+   * managing account is a multi-client account.
    *
    * Request parameters:
    *
@@ -791,8 +792,9 @@
   /**
    * Updates the tax settings of the account. This method can only be called for
    * accounts to which the managing account has access: either the managing
-   * account itself or sub-accounts if the managing account is a multi-client
-   * account. This method supports patch semantics.
+   * account itself for any Merchant Center account, or any sub-account when the
+   * managing account is a multi-client account. This method supports patch
+   * semantics.
    *
    * [request] - The metadata request object.
    *
@@ -849,8 +851,8 @@
   /**
    * Updates the tax settings of the account. This method can only be called for
    * accounts to which the managing account has access: either the managing
-   * account itself or sub-accounts if the managing account is a multi-client
-   * account.
+   * account itself for any Merchant Center account, or any sub-account when the
+   * managing account is a multi-client account.
    *
    * [request] - The metadata request object.
    *
@@ -2787,8 +2789,8 @@
   /**
    * Retrieves the shipping settings of the account. This method can only be
    * called for accounts to which the managing account has access: either the
-   * managing account itself or sub-accounts if the managing account is a
-   * multi-client account.
+   * managing account itself for any Merchant Center account, or any sub-account
+   * when the managing account is a multi-client account.
    *
    * Request parameters:
    *
@@ -2926,8 +2928,9 @@
   /**
    * Updates the shipping settings of the account. This method can only be
    * called for accounts to which the managing account has access: either the
-   * managing account itself or sub-accounts if the managing account is a
-   * multi-client account. This method supports patch semantics.
+   * managing account itself for any Merchant Center account, or any sub-account
+   * when the managing account is a multi-client account. This method supports
+   * patch semantics.
    *
    * [request] - The metadata request object.
    *
@@ -2984,8 +2987,8 @@
   /**
    * Updates the shipping settings of the account. This method can only be
    * called for accounts to which the managing account has access: either the
-   * managing account itself or sub-accounts if the managing account is a
-   * multi-client account.
+   * managing account itself for any Merchant Center account, or any sub-account
+   * when the managing account is a multi-client account.
    *
    * [request] - The metadata request object.
    *
@@ -4463,6 +4466,8 @@
   core.int minuteOfHour;
   /** An optional password for fetch_url. */
   core.String password;
+  /** Whether the scheduled fetch is paused or not. */
+  core.bool paused;
   /**
    * Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
    */
@@ -4490,6 +4495,9 @@
     if (_json.containsKey("password")) {
       password = _json["password"];
     }
+    if (_json.containsKey("paused")) {
+      paused = _json["paused"];
+    }
     if (_json.containsKey("timeZone")) {
       timeZone = _json["timeZone"];
     }
@@ -4518,6 +4526,9 @@
     if (password != null) {
       _json["password"] = password;
     }
+    if (paused != null) {
+      _json["paused"] = paused;
+    }
     if (timeZone != null) {
       _json["timeZone"] = timeZone;
     }
@@ -5866,7 +5877,7 @@
   core.String placedDate;
   /**
    * The details of the merchant provided promotions applied to the order. More
-   * details about the program are  here.
+   * details about the program are here.
    */
   core.List<OrderPromotion> promotions;
   /** Refunds for the order. */
@@ -9305,9 +9316,7 @@
   core.String postalCode;
   /** Fixed shipping price, represented as a number. */
   Price price;
-  /**
-   * The geographic region to which a shipping rate applies (e.g. zip code).
-   */
+  /** The geographic region to which a shipping rate applies. */
   core.String region;
   /** A free-form description of the service class or delivery speed. */
   core.String service;
@@ -9456,6 +9465,8 @@
   core.String lastUpdateDate;
   /** The link to the product. */
   core.String link;
+  /** Product data after applying all the join inputs. */
+  Product product;
   /** The id of the product for which status is reported. */
   core.String productId;
   /** The title of the product. */
@@ -9485,6 +9496,9 @@
     if (_json.containsKey("link")) {
       link = _json["link"];
     }
+    if (_json.containsKey("product")) {
+      product = new Product.fromJson(_json["product"]);
+    }
     if (_json.containsKey("productId")) {
       productId = _json["productId"];
     }
@@ -9516,6 +9530,9 @@
     if (link != null) {
       _json["link"] = link;
     }
+    if (product != null) {
+      _json["product"] = (product).toJson();
+    }
     if (productId != null) {
       _json["productId"] = productId;
     }
@@ -9998,6 +10015,7 @@
 class ProductstatusesCustomBatchRequestEntry {
   /** An entry ID, unique within the batch request. */
   core.int batchId;
+  core.bool includeAttributes;
   /** The ID of the managing account. */
   core.String merchantId;
   core.String method;
@@ -10010,6 +10028,9 @@
     if (_json.containsKey("batchId")) {
       batchId = _json["batchId"];
     }
+    if (_json.containsKey("includeAttributes")) {
+      includeAttributes = _json["includeAttributes"];
+    }
     if (_json.containsKey("merchantId")) {
       merchantId = _json["merchantId"];
     }
@@ -10026,6 +10047,9 @@
     if (batchId != null) {
       _json["batchId"] = batchId;
     }
+    if (includeAttributes != null) {
+      _json["includeAttributes"] = includeAttributes;
+    }
     if (merchantId != null) {
       _json["merchantId"] = merchantId;
     }
@@ -10678,7 +10702,7 @@
   core.String predefinedDeliveryAddress;
   /**
    * The details of the merchant provided promotions applied to the order. More
-   * details about the program are  here.
+   * details about the program are here.
    */
   core.List<OrderPromotion> promotions;
   /** The total cost of shipping for all items. */
diff --git a/generated/googleapis/lib/content/v2sandbox.dart b/generated/googleapis/lib/content/v2sandbox.dart
index 1d66fa8..06fd742 100644
--- a/generated/googleapis/lib/content/v2sandbox.dart
+++ b/generated/googleapis/lib/content/v2sandbox.dart
@@ -922,7 +922,7 @@
   core.String placedDate;
   /**
    * The details of the merchant provided promotions applied to the order. More
-   * details about the program are  here.
+   * details about the program are here.
    */
   core.List<OrderPromotion> promotions;
   /** Refunds for the order. */
@@ -3473,7 +3473,7 @@
   core.String predefinedDeliveryAddress;
   /**
    * The details of the merchant provided promotions applied to the order. More
-   * details about the program are  here.
+   * details about the program are here.
    */
   core.List<OrderPromotion> promotions;
   /** The total cost of shipping for all items. */
diff --git a/generated/googleapis/lib/dataproc/v1.dart b/generated/googleapis/lib/dataproc/v1.dart
index d376dc8..2ee5301 100644
--- a/generated/googleapis/lib/dataproc/v1.dart
+++ b/generated/googleapis/lib/dataproc/v1.dart
@@ -1674,8 +1674,8 @@
    * Optional. The zone where the Google Compute Engine cluster will be located.
    * On a create request, it is required in the "global" region. If omitted in a
    * non-global Cloud Dataproc region, the service will pick a zone in the
-   * corresponding GCE region. On a get request, zone will always be present.A
-   * full URL, partial URI, or short name are valid. Examples:
+   * corresponding Compute Engine region. On a get request, zone will always be
+   * present.A full URL, partial URI, or short name are valid. Examples:
    * https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]
    * projects/[project_id]/zones/[zone]
    * us-central1-f
@@ -3154,8 +3154,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details. There will be a common set
-   * of message types for APIs to use.
+   * A list of messages that carry the error details. There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/dataproc/v1beta2.dart b/generated/googleapis/lib/dataproc/v1beta2.dart
deleted file mode 100644
index b5d6dfe..0000000
--- a/generated/googleapis/lib/dataproc/v1beta2.dart
+++ /dev/null
@@ -1,3260 +0,0 @@
-// This is a generated file (see the discoveryapis_generator project).
-
-library googleapis.dataproc.v1beta2;
-
-import 'dart:core' as core;
-import 'dart:async' as async;
-import 'dart:convert' as convert;
-
-import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
-import 'package:http/http.dart' as http;
-
-export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
-    ApiRequestError, DetailedApiRequestError;
-
-const core.String USER_AGENT = 'dart-api-client dataproc/v1beta2';
-
-/** Manages Hadoop-based clusters and jobs on Google Cloud Platform. */
-class DataprocApi {
-  /** View and manage your data across Google Cloud Platform services */
-  static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
-
-
-  final commons.ApiRequester _requester;
-
-  ProjectsResourceApi get projects => new ProjectsResourceApi(_requester);
-
-  DataprocApi(http.Client client, {core.String rootUrl: "https://dataproc.googleapis.com/", core.String servicePath: ""}) :
-      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
-}
-
-
-class ProjectsResourceApi {
-  final commons.ApiRequester _requester;
-
-  ProjectsRegionsResourceApi get regions => new ProjectsRegionsResourceApi(_requester);
-
-  ProjectsResourceApi(commons.ApiRequester client) : 
-      _requester = client;
-}
-
-
-class ProjectsRegionsResourceApi {
-  final commons.ApiRequester _requester;
-
-  ProjectsRegionsClustersResourceApi get clusters => new ProjectsRegionsClustersResourceApi(_requester);
-  ProjectsRegionsJobsResourceApi get jobs => new ProjectsRegionsJobsResourceApi(_requester);
-  ProjectsRegionsOperationsResourceApi get operations => new ProjectsRegionsOperationsResourceApi(_requester);
-
-  ProjectsRegionsResourceApi(commons.ApiRequester client) : 
-      _requester = client;
-}
-
-
-class ProjectsRegionsClustersResourceApi {
-  final commons.ApiRequester _requester;
-
-  ProjectsRegionsClustersResourceApi(commons.ApiRequester client) : 
-      _requester = client;
-
-  /**
-   * Creates a cluster in a project.
-   *
-   * [request] - The metadata request object.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the cluster belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * Completes with a [Operation].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Operation> create(Cluster request, core.String projectId, core.String region) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (request != null) {
-      _body = convert.JSON.encode((request).toJson());
-    }
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters';
-
-    var _response = _requester.request(_url,
-                                       "POST",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Operation.fromJson(data));
-  }
-
-  /**
-   * Deletes a cluster in a project.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the cluster belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [clusterName] - Required. The cluster name.
-   *
-   * Completes with a [Operation].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Operation> delete(core.String projectId, core.String region, core.String clusterName) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (clusterName == null) {
-      throw new core.ArgumentError("Parameter clusterName is required.");
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterName');
-
-    var _response = _requester.request(_url,
-                                       "DELETE",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Operation.fromJson(data));
-  }
-
-  /**
-   * Gets cluster diagnostic information. After the operation completes, the
-   * Operation.response field contains DiagnoseClusterOutputLocation.
-   *
-   * [request] - The metadata request object.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the cluster belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [clusterName] - Required. The cluster name.
-   *
-   * Completes with a [Operation].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Operation> diagnose(DiagnoseClusterRequest request, core.String projectId, core.String region, core.String clusterName) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (request != null) {
-      _body = convert.JSON.encode((request).toJson());
-    }
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (clusterName == null) {
-      throw new core.ArgumentError("Parameter clusterName is required.");
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterName') + ':diagnose';
-
-    var _response = _requester.request(_url,
-                                       "POST",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Operation.fromJson(data));
-  }
-
-  /**
-   * Gets the resource representation for a cluster in a project.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the cluster belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [clusterName] - Required. The cluster name.
-   *
-   * Completes with a [Cluster].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Cluster> get(core.String projectId, core.String region, core.String clusterName) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (clusterName == null) {
-      throw new core.ArgumentError("Parameter clusterName is required.");
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterName');
-
-    var _response = _requester.request(_url,
-                                       "GET",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Cluster.fromJson(data));
-  }
-
-  /**
-   * Lists all regions/{region}/clusters in a project.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the cluster belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [filter] - Optional. A filter constraining the clusters to list. Filters
-   * are case-sensitive and have the following syntax:field = value AND field =
-   * value ...where field is one of status.state, clusterName, or labels.[KEY],
-   * and [KEY] is a label key. value can be * to match all values. status.state
-   * can be one of the following: ACTIVE, INACTIVE, CREATING, RUNNING, ERROR,
-   * DELETING, or UPDATING. ACTIVE contains the CREATING, UPDATING, and RUNNING
-   * states. INACTIVE contains the DELETING and ERROR states. clusterName is the
-   * name of the cluster provided at creation time. Only the logical AND
-   * operator is supported; space-separated items are treated as having an
-   * implicit AND operator.Example filter:status.state = ACTIVE AND clusterName
-   * = mycluster AND labels.env = staging AND labels.starred = *
-   *
-   * [pageToken] - Optional. The standard List page token.
-   *
-   * [pageSize] - Optional. The standard List page size.
-   *
-   * Completes with a [ListClustersResponse].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<ListClustersResponse> list(core.String projectId, core.String region, {core.String filter, core.String pageToken, core.int pageSize}) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters';
-
-    var _response = _requester.request(_url,
-                                       "GET",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new ListClustersResponse.fromJson(data));
-  }
-
-  /**
-   * Updates a cluster in a project.
-   *
-   * [request] - The metadata request object.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project the
-   * cluster belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [clusterName] - Required. The cluster name.
-   *
-   * [updateMask] - Required. Specifies the path, relative to
-   * <code>Cluster</code>, of the field to update. For example, to change the
-   * number of workers in a cluster to 5, the <code>update_mask</code> parameter
-   * would be specified as <code>config.worker_config.num_instances</code>, 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 <code>update_mask</code> parameter would be
-   * <code>config.secondary_worker_config.num_instances</code>, and the PATCH
-   * request body would be set as follows:
-   * {
-   *   "config":{
-   *     "secondaryWorkerConfig":{
-   *       "numInstances":"5"
-   *     }
-   *   }
-   * }
-   * <strong>Note:</strong> currently only some fields can be updated:
-   * |Mask|Purpose| |labels|Updates labels|
-   * |config.worker_config.num_instances|Resize primary worker group|
-   * |config.secondary_worker_config.num_instances|Resize secondary worker
-   * group|
-   *
-   * Completes with a [Operation].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Operation> patch(Cluster request, core.String projectId, core.String region, core.String clusterName, {core.String updateMask}) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (request != null) {
-      _body = convert.JSON.encode((request).toJson());
-    }
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (clusterName == null) {
-      throw new core.ArgumentError("Parameter clusterName is required.");
-    }
-    if (updateMask != null) {
-      _queryParams["updateMask"] = [updateMask];
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterName');
-
-    var _response = _requester.request(_url,
-                                       "PATCH",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Operation.fromJson(data));
-  }
-
-}
-
-
-class ProjectsRegionsJobsResourceApi {
-  final commons.ApiRequester _requester;
-
-  ProjectsRegionsJobsResourceApi(commons.ApiRequester client) : 
-      _requester = client;
-
-  /**
-   * Starts a job cancellation request. To access the job resource after
-   * cancellation, call regions/{region}/jobs.list or regions/{region}/jobs.get.
-   *
-   * [request] - The metadata request object.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the job belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [jobId] - Required. The job ID.
-   *
-   * Completes with a [Job].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Job> cancel(CancelJobRequest request, core.String projectId, core.String region, core.String jobId) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (request != null) {
-      _body = convert.JSON.encode((request).toJson());
-    }
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (jobId == null) {
-      throw new core.ArgumentError("Parameter jobId is required.");
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs/' + commons.Escaper.ecapeVariable('$jobId') + ':cancel';
-
-    var _response = _requester.request(_url,
-                                       "POST",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Job.fromJson(data));
-  }
-
-  /**
-   * Deletes the job from the project. If the job is active, the delete fails,
-   * and the response returns FAILED_PRECONDITION.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the job belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [jobId] - Required. The job ID.
-   *
-   * Completes with a [Empty].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Empty> delete(core.String projectId, core.String region, core.String jobId) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (jobId == null) {
-      throw new core.ArgumentError("Parameter jobId is required.");
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs/' + commons.Escaper.ecapeVariable('$jobId');
-
-    var _response = _requester.request(_url,
-                                       "DELETE",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Empty.fromJson(data));
-  }
-
-  /**
-   * Gets the resource representation for a job in a project.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the job belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [jobId] - Required. The job ID.
-   *
-   * Completes with a [Job].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Job> get(core.String projectId, core.String region, core.String jobId) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (jobId == null) {
-      throw new core.ArgumentError("Parameter jobId is required.");
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs/' + commons.Escaper.ecapeVariable('$jobId');
-
-    var _response = _requester.request(_url,
-                                       "GET",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Job.fromJson(data));
-  }
-
-  /**
-   * Lists regions/{region}/jobs in a project.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the job belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [filter] - Optional. A filter constraining the jobs to list. Filters are
-   * case-sensitive and have the following syntax:field = value AND field =
-   * value ...where field is status.state or labels.[KEY], and [KEY] is a label
-   * key. value can be * to match all values. status.state can be either ACTIVE
-   * or INACTIVE. Only the logical AND operator is supported; space-separated
-   * items are treated as having an implicit AND operator.Example
-   * filter:status.state = ACTIVE AND labels.env = staging AND labels.starred =
-   * *
-   *
-   * [jobStateMatcher] - Optional. Specifies enumerated categories of jobs to
-   * list (default = match ALL jobs).
-   * Possible string values are:
-   * - "ALL" : A ALL.
-   * - "ACTIVE" : A ACTIVE.
-   * - "NON_ACTIVE" : A NON_ACTIVE.
-   *
-   * [pageToken] - Optional. The page token, returned by a previous call, to
-   * request the next page of results.
-   *
-   * [pageSize] - Optional. The number of results to return in each response.
-   *
-   * [clusterName] - Optional. If set, the returned jobs list includes only jobs
-   * that were submitted to the named cluster.
-   *
-   * Completes with a [ListJobsResponse].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<ListJobsResponse> list(core.String projectId, core.String region, {core.String filter, core.String jobStateMatcher, core.String pageToken, core.int pageSize, core.String clusterName}) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
-    if (jobStateMatcher != null) {
-      _queryParams["jobStateMatcher"] = [jobStateMatcher];
-    }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
-    if (clusterName != null) {
-      _queryParams["clusterName"] = [clusterName];
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs';
-
-    var _response = _requester.request(_url,
-                                       "GET",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new ListJobsResponse.fromJson(data));
-  }
-
-  /**
-   * Updates a job in a project.
-   *
-   * [request] - The metadata request object.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the job belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * [jobId] - Required. The job ID.
-   *
-   * [updateMask] - Required. Specifies the path, relative to <code>Job</code>,
-   * of the field to update. For example, to update the labels of a Job the
-   * <code>update_mask</code> parameter would be specified as
-   * <code>labels</code>, and the PATCH request body would specify the new
-   * value. <strong>Note:</strong> Currently, <code>labels</code> is the only
-   * field that can be updated.
-   *
-   * Completes with a [Job].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Job> patch(Job request, core.String projectId, core.String region, core.String jobId, {core.String updateMask}) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (request != null) {
-      _body = convert.JSON.encode((request).toJson());
-    }
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-    if (jobId == null) {
-      throw new core.ArgumentError("Parameter jobId is required.");
-    }
-    if (updateMask != null) {
-      _queryParams["updateMask"] = [updateMask];
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs/' + commons.Escaper.ecapeVariable('$jobId');
-
-    var _response = _requester.request(_url,
-                                       "PATCH",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Job.fromJson(data));
-  }
-
-  /**
-   * Submits a job to a cluster.
-   *
-   * [request] - The metadata request object.
-   *
-   * Request parameters:
-   *
-   * [projectId] - Required. The ID of the Google Cloud Platform project that
-   * the job belongs to.
-   *
-   * [region] - Required. The Cloud Dataproc region in which to handle the
-   * request.
-   *
-   * Completes with a [Job].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Job> submit(SubmitJobRequest request, core.String projectId, core.String region) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (request != null) {
-      _body = convert.JSON.encode((request).toJson());
-    }
-    if (projectId == null) {
-      throw new core.ArgumentError("Parameter projectId is required.");
-    }
-    if (region == null) {
-      throw new core.ArgumentError("Parameter region is required.");
-    }
-
-    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs:submit';
-
-    var _response = _requester.request(_url,
-                                       "POST",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Job.fromJson(data));
-  }
-
-}
-
-
-class ProjectsRegionsOperationsResourceApi {
-  final commons.ApiRequester _requester;
-
-  ProjectsRegionsOperationsResourceApi(commons.ApiRequester client) : 
-      _requester = client;
-
-  /**
-   * Starts asynchronous cancellation on a long-running operation. The server
-   * makes a best effort to cancel the operation, but success is not guaranteed.
-   * If the server doesn't support this method, it returns
-   * google.rpc.Code.UNIMPLEMENTED. Clients can use Operations.GetOperation or
-   * other methods to check whether the cancellation succeeded or whether the
-   * operation completed despite cancellation. On successful cancellation, the
-   * operation is not deleted; instead, it becomes an operation with an
-   * Operation.error value with a google.rpc.Status.code of 1, corresponding to
-   * Code.CANCELLED.
-   *
-   * Request parameters:
-   *
-   * [name] - The name of the operation resource to be cancelled.
-   * Value must have pattern "^projects/[^/]+/regions/[^/]+/operations/[^/]+$".
-   *
-   * Completes with a [Empty].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Empty> cancel(core.String name) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (name == null) {
-      throw new core.ArgumentError("Parameter name is required.");
-    }
-
-    _url = 'v1beta2/' + commons.Escaper.ecapeVariableReserved('$name') + ':cancel';
-
-    var _response = _requester.request(_url,
-                                       "POST",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Empty.fromJson(data));
-  }
-
-  /**
-   * Deletes a long-running operation. This method indicates that the client is
-   * no longer interested in the operation result. It does not cancel the
-   * operation. If the server doesn't support this method, it returns
-   * google.rpc.Code.UNIMPLEMENTED.
-   *
-   * Request parameters:
-   *
-   * [name] - The name of the operation resource to be deleted.
-   * Value must have pattern "^projects/[^/]+/regions/[^/]+/operations/[^/]+$".
-   *
-   * Completes with a [Empty].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Empty> delete(core.String name) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (name == null) {
-      throw new core.ArgumentError("Parameter name is required.");
-    }
-
-    _url = 'v1beta2/' + commons.Escaper.ecapeVariableReserved('$name');
-
-    var _response = _requester.request(_url,
-                                       "DELETE",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Empty.fromJson(data));
-  }
-
-  /**
-   * 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.
-   *
-   * Request parameters:
-   *
-   * [name] - The name of the operation resource.
-   * Value must have pattern "^projects/[^/]+/regions/[^/]+/operations/[^/]+$".
-   *
-   * Completes with a [Operation].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Operation> get(core.String name) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (name == null) {
-      throw new core.ArgumentError("Parameter name is required.");
-    }
-
-    _url = 'v1beta2/' + commons.Escaper.ecapeVariableReserved('$name');
-
-    var _response = _requester.request(_url,
-                                       "GET",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Operation.fromJson(data));
-  }
-
-  /**
-   * 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 allows API services to override the binding to use different
-   * resource name schemes, such as users / * /operations. To override the
-   * binding, API services can add a binding such as "/v1/{name=users / *
-   * }/operations" to their service configuration. For backwards compatibility,
-   * the default name includes the operations collection id, however overriding
-   * users must ensure the name binding is the parent resource, without the
-   * operations collection id.
-   *
-   * Request parameters:
-   *
-   * [name] - The name of the operation's parent resource.
-   * Value must have pattern "^projects/[^/]+/regions/[^/]+/operations$".
-   *
-   * [pageSize] - The standard list page size.
-   *
-   * [filter] - The standard list filter.
-   *
-   * [pageToken] - The standard list page token.
-   *
-   * Completes with a [ListOperationsResponse].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<ListOperationsResponse> list(core.String name, {core.int pageSize, core.String filter, core.String pageToken}) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (name == null) {
-      throw new core.ArgumentError("Parameter name is required.");
-    }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
-
-    _url = 'v1beta2/' + commons.Escaper.ecapeVariableReserved('$name');
-
-    var _response = _requester.request(_url,
-                                       "GET",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new ListOperationsResponse.fromJson(data));
-  }
-
-}
-
-
-
-/**
- * Specifies the type and number of accelerator cards attached to the instances
- * of an instance group (see GPUs on Compute Engine).
- */
-class AcceleratorConfig {
-  /**
-   * The number of the accelerator cards of this type exposed to this instance.
-   */
-  core.int acceleratorCount;
-  /**
-   * Full URL, partial URI, or short name of the accelerator type resource to
-   * expose to this instance. See Google Compute Engine AcceleratorTypes(
-   * /compute/docs/reference/beta/acceleratorTypes)Examples *
-   * https://www.googleapis.com/compute/beta/projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80
-   * * projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80
-   * * nvidia-tesla-k80
-   */
-  core.String acceleratorTypeUri;
-
-  AcceleratorConfig();
-
-  AcceleratorConfig.fromJson(core.Map _json) {
-    if (_json.containsKey("acceleratorCount")) {
-      acceleratorCount = _json["acceleratorCount"];
-    }
-    if (_json.containsKey("acceleratorTypeUri")) {
-      acceleratorTypeUri = _json["acceleratorTypeUri"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (acceleratorCount != null) {
-      _json["acceleratorCount"] = acceleratorCount;
-    }
-    if (acceleratorTypeUri != null) {
-      _json["acceleratorTypeUri"] = acceleratorTypeUri;
-    }
-    return _json;
-  }
-}
-
-/** A request to cancel a job. */
-class CancelJobRequest {
-
-  CancelJobRequest();
-
-  CancelJobRequest.fromJson(core.Map _json) {
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    return _json;
-  }
-}
-
-/**
- * Describes the identifying information, config, and status of a cluster of
- * Google Compute Engine instances.
- */
-class Cluster {
-  /**
-   * Required. The cluster name. Cluster names within a project must be unique.
-   * Names of deleted clusters can be reused.
-   */
-  core.String clusterName;
-  /**
-   * Output-only. A cluster UUID (Unique Universal Identifier). Cloud Dataproc
-   * generates this value when it creates the cluster.
-   */
-  core.String clusterUuid;
-  /**
-   * Required. The cluster config. Note that Cloud Dataproc may set default
-   * values, and values may change when clusters are updated.
-   */
-  ClusterConfig config;
-  /**
-   * Optional. The labels to associate with this cluster. Label keys must
-   * contain 1 to 63 characters, and must conform to RFC 1035
-   * (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if
-   * present, must contain 1 to 63 characters, and must conform to RFC 1035
-   * (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be
-   * associated with a cluster.
-   */
-  core.Map<core.String, core.String> labels;
-  /**
-   * Contains cluster daemon metrics such as HDFS and YARN stats.Beta Feature:
-   * This report is available for testing purposes only. It may be changed
-   * before final release.
-   */
-  ClusterMetrics metrics;
-  /**
-   * Required. The Google Cloud Platform project ID that the cluster belongs to.
-   */
-  core.String projectId;
-  /** Output-only. Cluster status. */
-  ClusterStatus status;
-  /** Output-only. The previous cluster status. */
-  core.List<ClusterStatus> statusHistory;
-
-  Cluster();
-
-  Cluster.fromJson(core.Map _json) {
-    if (_json.containsKey("clusterName")) {
-      clusterName = _json["clusterName"];
-    }
-    if (_json.containsKey("clusterUuid")) {
-      clusterUuid = _json["clusterUuid"];
-    }
-    if (_json.containsKey("config")) {
-      config = new ClusterConfig.fromJson(_json["config"]);
-    }
-    if (_json.containsKey("labels")) {
-      labels = _json["labels"];
-    }
-    if (_json.containsKey("metrics")) {
-      metrics = new ClusterMetrics.fromJson(_json["metrics"]);
-    }
-    if (_json.containsKey("projectId")) {
-      projectId = _json["projectId"];
-    }
-    if (_json.containsKey("status")) {
-      status = new ClusterStatus.fromJson(_json["status"]);
-    }
-    if (_json.containsKey("statusHistory")) {
-      statusHistory = _json["statusHistory"].map((value) => new ClusterStatus.fromJson(value)).toList();
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (clusterName != null) {
-      _json["clusterName"] = clusterName;
-    }
-    if (clusterUuid != null) {
-      _json["clusterUuid"] = clusterUuid;
-    }
-    if (config != null) {
-      _json["config"] = (config).toJson();
-    }
-    if (labels != null) {
-      _json["labels"] = labels;
-    }
-    if (metrics != null) {
-      _json["metrics"] = (metrics).toJson();
-    }
-    if (projectId != null) {
-      _json["projectId"] = projectId;
-    }
-    if (status != null) {
-      _json["status"] = (status).toJson();
-    }
-    if (statusHistory != null) {
-      _json["statusHistory"] = statusHistory.map((value) => (value).toJson()).toList();
-    }
-    return _json;
-  }
-}
-
-/** The cluster config. */
-class ClusterConfig {
-  /**
-   * 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.
-   */
-  core.String configBucket;
-  /**
-   * Required. The shared Google Compute Engine config settings for all
-   * instances in a cluster.
-   */
-  GceClusterConfig gceClusterConfig;
-  /**
-   * Optional. Commands to execute on each node after config is completed. By
-   * default, executables are run on master and all worker nodes. You can test a
-   * node's <code>role</code> metadata to run an executable on a master or
-   * worker node, as shown below using curl (you can also use wget):
-   * ROLE=$(curl -H Metadata-Flavor:Google
-   * http://metadata/computeMetadata/v1beta2/instance/attributes/dataproc-role)
-   * if [[ "${ROLE}" == 'Master' ]]; then
-   *   ... master specific actions ...
-   * else
-   *   ... worker specific actions ...
-   * fi
-   */
-  core.List<NodeInitializationAction> initializationActions;
-  /**
-   * Optional. The Google Compute Engine config settings for the master instance
-   * in a cluster.
-   */
-  InstanceGroupConfig masterConfig;
-  /**
-   * Optional. The Google Compute Engine config settings for additional worker
-   * instances in a cluster.
-   */
-  InstanceGroupConfig secondaryWorkerConfig;
-  /** Optional. The config settings for software inside the cluster. */
-  SoftwareConfig softwareConfig;
-  /**
-   * Optional. The Google Compute Engine config settings for worker instances in
-   * a cluster.
-   */
-  InstanceGroupConfig workerConfig;
-
-  ClusterConfig();
-
-  ClusterConfig.fromJson(core.Map _json) {
-    if (_json.containsKey("configBucket")) {
-      configBucket = _json["configBucket"];
-    }
-    if (_json.containsKey("gceClusterConfig")) {
-      gceClusterConfig = new GceClusterConfig.fromJson(_json["gceClusterConfig"]);
-    }
-    if (_json.containsKey("initializationActions")) {
-      initializationActions = _json["initializationActions"].map((value) => new NodeInitializationAction.fromJson(value)).toList();
-    }
-    if (_json.containsKey("masterConfig")) {
-      masterConfig = new InstanceGroupConfig.fromJson(_json["masterConfig"]);
-    }
-    if (_json.containsKey("secondaryWorkerConfig")) {
-      secondaryWorkerConfig = new InstanceGroupConfig.fromJson(_json["secondaryWorkerConfig"]);
-    }
-    if (_json.containsKey("softwareConfig")) {
-      softwareConfig = new SoftwareConfig.fromJson(_json["softwareConfig"]);
-    }
-    if (_json.containsKey("workerConfig")) {
-      workerConfig = new InstanceGroupConfig.fromJson(_json["workerConfig"]);
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (configBucket != null) {
-      _json["configBucket"] = configBucket;
-    }
-    if (gceClusterConfig != null) {
-      _json["gceClusterConfig"] = (gceClusterConfig).toJson();
-    }
-    if (initializationActions != null) {
-      _json["initializationActions"] = initializationActions.map((value) => (value).toJson()).toList();
-    }
-    if (masterConfig != null) {
-      _json["masterConfig"] = (masterConfig).toJson();
-    }
-    if (secondaryWorkerConfig != null) {
-      _json["secondaryWorkerConfig"] = (secondaryWorkerConfig).toJson();
-    }
-    if (softwareConfig != null) {
-      _json["softwareConfig"] = (softwareConfig).toJson();
-    }
-    if (workerConfig != null) {
-      _json["workerConfig"] = (workerConfig).toJson();
-    }
-    return _json;
-  }
-}
-
-/**
- * Contains cluster daemon metrics, such as HDFS and YARN stats.Beta Feature:
- * This report is available for testing purposes only. It may be changed before
- * final release.
- */
-class ClusterMetrics {
-  /** The HDFS metrics. */
-  core.Map<core.String, core.String> hdfsMetrics;
-  /** The YARN metrics. */
-  core.Map<core.String, core.String> yarnMetrics;
-
-  ClusterMetrics();
-
-  ClusterMetrics.fromJson(core.Map _json) {
-    if (_json.containsKey("hdfsMetrics")) {
-      hdfsMetrics = _json["hdfsMetrics"];
-    }
-    if (_json.containsKey("yarnMetrics")) {
-      yarnMetrics = _json["yarnMetrics"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (hdfsMetrics != null) {
-      _json["hdfsMetrics"] = hdfsMetrics;
-    }
-    if (yarnMetrics != null) {
-      _json["yarnMetrics"] = yarnMetrics;
-    }
-    return _json;
-  }
-}
-
-/** Metadata describing the operation. */
-class ClusterOperationMetadata {
-  /** Output-only. Name of the cluster for the operation. */
-  core.String clusterName;
-  /** Output-only. Cluster UUID for the operation. */
-  core.String clusterUuid;
-  /** Output-only. Short description of operation. */
-  core.String description;
-  /** Output-only. Labels associated with the operation */
-  core.Map<core.String, core.String> labels;
-  /** Output-only. The operation type. */
-  core.String operationType;
-  /** Output-only. Current operation status. */
-  ClusterOperationStatus status;
-  /** Output-only. The previous operation status. */
-  core.List<ClusterOperationStatus> statusHistory;
-  /** Output-only. Errors encountered during operation execution. */
-  core.List<core.String> warnings;
-
-  ClusterOperationMetadata();
-
-  ClusterOperationMetadata.fromJson(core.Map _json) {
-    if (_json.containsKey("clusterName")) {
-      clusterName = _json["clusterName"];
-    }
-    if (_json.containsKey("clusterUuid")) {
-      clusterUuid = _json["clusterUuid"];
-    }
-    if (_json.containsKey("description")) {
-      description = _json["description"];
-    }
-    if (_json.containsKey("labels")) {
-      labels = _json["labels"];
-    }
-    if (_json.containsKey("operationType")) {
-      operationType = _json["operationType"];
-    }
-    if (_json.containsKey("status")) {
-      status = new ClusterOperationStatus.fromJson(_json["status"]);
-    }
-    if (_json.containsKey("statusHistory")) {
-      statusHistory = _json["statusHistory"].map((value) => new ClusterOperationStatus.fromJson(value)).toList();
-    }
-    if (_json.containsKey("warnings")) {
-      warnings = _json["warnings"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (clusterName != null) {
-      _json["clusterName"] = clusterName;
-    }
-    if (clusterUuid != null) {
-      _json["clusterUuid"] = clusterUuid;
-    }
-    if (description != null) {
-      _json["description"] = description;
-    }
-    if (labels != null) {
-      _json["labels"] = labels;
-    }
-    if (operationType != null) {
-      _json["operationType"] = operationType;
-    }
-    if (status != null) {
-      _json["status"] = (status).toJson();
-    }
-    if (statusHistory != null) {
-      _json["statusHistory"] = statusHistory.map((value) => (value).toJson()).toList();
-    }
-    if (warnings != null) {
-      _json["warnings"] = warnings;
-    }
-    return _json;
-  }
-}
-
-/** The status of the operation. */
-class ClusterOperationStatus {
-  /** Output-only.A message containing any operation metadata details. */
-  core.String details;
-  /** Output-only. A message containing the detailed operation state. */
-  core.String innerState;
-  /**
-   * Output-only. A message containing the operation state.
-   * Possible string values are:
-   * - "UNKNOWN" : Unused.
-   * - "PENDING" : The operation has been created.
-   * - "RUNNING" : The operation is running.
-   * - "DONE" : The operation is done; either cancelled or completed.
-   */
-  core.String state;
-  /** Output-only. The time this state was entered. */
-  core.String stateStartTime;
-
-  ClusterOperationStatus();
-
-  ClusterOperationStatus.fromJson(core.Map _json) {
-    if (_json.containsKey("details")) {
-      details = _json["details"];
-    }
-    if (_json.containsKey("innerState")) {
-      innerState = _json["innerState"];
-    }
-    if (_json.containsKey("state")) {
-      state = _json["state"];
-    }
-    if (_json.containsKey("stateStartTime")) {
-      stateStartTime = _json["stateStartTime"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (details != null) {
-      _json["details"] = details;
-    }
-    if (innerState != null) {
-      _json["innerState"] = innerState;
-    }
-    if (state != null) {
-      _json["state"] = state;
-    }
-    if (stateStartTime != null) {
-      _json["stateStartTime"] = stateStartTime;
-    }
-    return _json;
-  }
-}
-
-/** The status of a cluster and its instances. */
-class ClusterStatus {
-  /** Output-only. Optional details of cluster's state. */
-  core.String detail;
-  /**
-   * Output-only. The cluster's state.
-   * Possible string values are:
-   * - "UNKNOWN" : The cluster state is unknown.
-   * - "CREATING" : The cluster is being created and set up. It is not ready for
-   * use.
-   * - "RUNNING" : The cluster is currently running and healthy. It is ready for
-   * use.
-   * - "ERROR" : The cluster encountered an error. It is not ready for use.
-   * - "DELETING" : The cluster is being deleted. It cannot be used.
-   * - "UPDATING" : The cluster is being updated. It continues to accept and
-   * process jobs.
-   */
-  core.String state;
-  /** Output-only. Time when this state was entered. */
-  core.String stateStartTime;
-  /**
-   * Output-only. Additional state information that includes status reported by
-   * the agent.
-   * Possible string values are:
-   * - "UNSPECIFIED"
-   * - "UNHEALTHY" : The cluster is known to be in an unhealthy state (for
-   * example, critical daemons are not running or HDFS capacity is
-   * exhausted).Applies to RUNNING state.
-   * - "STALE_STATUS" : The agent-reported status is out of date (may occur if
-   * Cloud Dataproc loses communication with Agent).Applies to RUNNING state.
-   */
-  core.String substate;
-
-  ClusterStatus();
-
-  ClusterStatus.fromJson(core.Map _json) {
-    if (_json.containsKey("detail")) {
-      detail = _json["detail"];
-    }
-    if (_json.containsKey("state")) {
-      state = _json["state"];
-    }
-    if (_json.containsKey("stateStartTime")) {
-      stateStartTime = _json["stateStartTime"];
-    }
-    if (_json.containsKey("substate")) {
-      substate = _json["substate"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (detail != null) {
-      _json["detail"] = detail;
-    }
-    if (state != null) {
-      _json["state"] = state;
-    }
-    if (stateStartTime != null) {
-      _json["stateStartTime"] = stateStartTime;
-    }
-    if (substate != null) {
-      _json["substate"] = substate;
-    }
-    return _json;
-  }
-}
-
-/** A request to collect cluster diagnostic information. */
-class DiagnoseClusterRequest {
-
-  DiagnoseClusterRequest();
-
-  DiagnoseClusterRequest.fromJson(core.Map _json) {
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    return _json;
-  }
-}
-
-/** Specifies the config of disk options for a group of VM instances. */
-class DiskConfig {
-  /** Optional. Size in GB of the boot disk (default is 500GB). */
-  core.int bootDiskSizeGb;
-  /**
-   * Optional. Number of attached SSDs, from 0 to 4 (default is 0). If SSDs are
-   * not attached, the boot disk is used to store runtime logs and HDFS
-   * (https://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) data. If one
-   * or more SSDs are attached, this runtime bulk data is spread across them,
-   * and the boot disk contains only basic config and installed binaries.
-   */
-  core.int numLocalSsds;
-
-  DiskConfig();
-
-  DiskConfig.fromJson(core.Map _json) {
-    if (_json.containsKey("bootDiskSizeGb")) {
-      bootDiskSizeGb = _json["bootDiskSizeGb"];
-    }
-    if (_json.containsKey("numLocalSsds")) {
-      numLocalSsds = _json["numLocalSsds"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (bootDiskSizeGb != null) {
-      _json["bootDiskSizeGb"] = bootDiskSizeGb;
-    }
-    if (numLocalSsds != null) {
-      _json["numLocalSsds"] = numLocalSsds;
-    }
-    return _json;
-  }
-}
-
-/**
- * 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 {}.
- */
-class Empty {
-
-  Empty();
-
-  Empty.fromJson(core.Map _json) {
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    return _json;
-  }
-}
-
-/**
- * Common config settings for resources of Google Compute Engine cluster
- * instances, applicable to all instances in the cluster.
- */
-class GceClusterConfig {
-  /**
-   * Optional. If true, all instances in the cluster will only have internal IP
-   * addresses. By default, clusters are not restricted to internal IP
-   * addresses, and will have ephemeral external IP addresses assigned to each
-   * instance. This internal_ip_only restriction can only be enabled for
-   * subnetwork enabled networks, and all off-cluster dependencies must be
-   * configured to be accessible without external IP addresses.
-   */
-  core.bool internalIpOnly;
-  /**
-   * The Google Compute Engine metadata entries to add to all instances (see
-   * Project and instance metadata
-   * (https://cloud.google.com/compute/docs/storing-retrieving-metadata#project_and_instance_metadata)).
-   */
-  core.Map<core.String, core.String> metadata;
-  /**
-   * Optional. 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
-   * Using Subnetworks for more information).A full URL, partial URI, or short
-   * name are valid. Examples:
-   * https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default
-   * projects/[project_id]/regions/global/default
-   * default
-   */
-  core.String networkUri;
-  /**
-   * Optional. The service account of the instances. Defaults to the default
-   * Google Compute Engine service account. Custom service accounts need
-   * permissions equivalent to the folloing IAM roles:
-   * roles/logging.logWriter
-   * roles/storage.objectAdmin(see
-   * https://cloud.google.com/compute/docs/access/service-accounts#custom_service_accounts
-   * for more information). Example:
-   * [account_id]@[project_id].iam.gserviceaccount.com
-   */
-  core.String serviceAccount;
-  /**
-   * Optional. 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.writeIf no scopes are specified,
-   * 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
-   */
-  core.List<core.String> serviceAccountScopes;
-  /**
-   * Optional. The Google Compute Engine subnetwork to be used for machine
-   * communications. Cannot be specified with network_uri.A full URL, partial
-   * URI, or short name are valid. Examples:
-   * https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0
-   * projects/[project_id]/regions/us-east1/sub0
-   * sub0
-   */
-  core.String subnetworkUri;
-  /**
-   * The Google Compute Engine tags to add to all instances (see Tagging
-   * instances).
-   */
-  core.List<core.String> tags;
-  /**
-   * Optional. The zone where the Google Compute Engine cluster will be located.
-   * On a create request, it is required in the "global" region. If omitted in a
-   * non-global Cloud Dataproc region, the service will pick a zone in the
-   * corresponding GCE region. On a get request, zone will always be present.A
-   * full URL, partial URI, or short name are valid. Examples:
-   * https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]
-   * projects/[project_id]/zones/[zone]
-   * us-central1-f
-   */
-  core.String zoneUri;
-
-  GceClusterConfig();
-
-  GceClusterConfig.fromJson(core.Map _json) {
-    if (_json.containsKey("internalIpOnly")) {
-      internalIpOnly = _json["internalIpOnly"];
-    }
-    if (_json.containsKey("metadata")) {
-      metadata = _json["metadata"];
-    }
-    if (_json.containsKey("networkUri")) {
-      networkUri = _json["networkUri"];
-    }
-    if (_json.containsKey("serviceAccount")) {
-      serviceAccount = _json["serviceAccount"];
-    }
-    if (_json.containsKey("serviceAccountScopes")) {
-      serviceAccountScopes = _json["serviceAccountScopes"];
-    }
-    if (_json.containsKey("subnetworkUri")) {
-      subnetworkUri = _json["subnetworkUri"];
-    }
-    if (_json.containsKey("tags")) {
-      tags = _json["tags"];
-    }
-    if (_json.containsKey("zoneUri")) {
-      zoneUri = _json["zoneUri"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (internalIpOnly != null) {
-      _json["internalIpOnly"] = internalIpOnly;
-    }
-    if (metadata != null) {
-      _json["metadata"] = metadata;
-    }
-    if (networkUri != null) {
-      _json["networkUri"] = networkUri;
-    }
-    if (serviceAccount != null) {
-      _json["serviceAccount"] = serviceAccount;
-    }
-    if (serviceAccountScopes != null) {
-      _json["serviceAccountScopes"] = serviceAccountScopes;
-    }
-    if (subnetworkUri != null) {
-      _json["subnetworkUri"] = subnetworkUri;
-    }
-    if (tags != null) {
-      _json["tags"] = tags;
-    }
-    if (zoneUri != null) {
-      _json["zoneUri"] = zoneUri;
-    }
-    return _json;
-  }
-}
-
-/**
- * A Cloud Dataproc job for running Apache Hadoop MapReduce
- * (https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html)
- * jobs on Apache Hadoop YARN
- * (https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html).
- */
-class HadoopJob {
-  /**
-   * 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.
-   */
-  core.List<core.String> archiveUris;
-  /**
-   * 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.
-   */
-  core.List<core.String> args;
-  /**
-   * 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.
-   */
-  core.List<core.String> fileUris;
-  /**
-   * Optional. Jar file URIs to add to the CLASSPATHs of the Hadoop driver and
-   * tasks.
-   */
-  core.List<core.String> jarFileUris;
-  /** Optional. The runtime log config for job execution. */
-  LoggingConfig loggingConfig;
-  /**
-   * 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.
-   */
-  core.String mainClass;
-  /**
-   * 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'
-   */
-  core.String mainJarFileUri;
-  /**
-   * 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.
-   */
-  core.Map<core.String, core.String> properties;
-
-  HadoopJob();
-
-  HadoopJob.fromJson(core.Map _json) {
-    if (_json.containsKey("archiveUris")) {
-      archiveUris = _json["archiveUris"];
-    }
-    if (_json.containsKey("args")) {
-      args = _json["args"];
-    }
-    if (_json.containsKey("fileUris")) {
-      fileUris = _json["fileUris"];
-    }
-    if (_json.containsKey("jarFileUris")) {
-      jarFileUris = _json["jarFileUris"];
-    }
-    if (_json.containsKey("loggingConfig")) {
-      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
-    }
-    if (_json.containsKey("mainClass")) {
-      mainClass = _json["mainClass"];
-    }
-    if (_json.containsKey("mainJarFileUri")) {
-      mainJarFileUri = _json["mainJarFileUri"];
-    }
-    if (_json.containsKey("properties")) {
-      properties = _json["properties"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (archiveUris != null) {
-      _json["archiveUris"] = archiveUris;
-    }
-    if (args != null) {
-      _json["args"] = args;
-    }
-    if (fileUris != null) {
-      _json["fileUris"] = fileUris;
-    }
-    if (jarFileUris != null) {
-      _json["jarFileUris"] = jarFileUris;
-    }
-    if (loggingConfig != null) {
-      _json["loggingConfig"] = (loggingConfig).toJson();
-    }
-    if (mainClass != null) {
-      _json["mainClass"] = mainClass;
-    }
-    if (mainJarFileUri != null) {
-      _json["mainJarFileUri"] = mainJarFileUri;
-    }
-    if (properties != null) {
-      _json["properties"] = properties;
-    }
-    return _json;
-  }
-}
-
-/**
- * A Cloud Dataproc job for running Apache Hive (https://hive.apache.org/)
- * queries on YARN.
- */
-class HiveJob {
-  /**
-   * Optional. Whether to continue executing queries if a query fails. The
-   * default value is false. Setting to true can be useful when executing
-   * independent parallel queries.
-   */
-  core.bool continueOnFailure;
-  /**
-   * Optional. HCFS URIs of jar files to add to the CLASSPATH of the Hive server
-   * and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and UDFs.
-   */
-  core.List<core.String> jarFileUris;
-  /**
-   * Optional. A mapping of property names and values, used to configure Hive.
-   * Properties that conflict with values set by the Cloud Dataproc API may be
-   * overwritten. Can include properties set in /etc/hadoop/conf / * -site.xml,
-   * /etc/hive/conf/hive-site.xml, and classes in user code.
-   */
-  core.Map<core.String, core.String> properties;
-  /** The HCFS URI of the script that contains Hive queries. */
-  core.String queryFileUri;
-  /** A list of queries. */
-  QueryList queryList;
-  /**
-   * Optional. Mapping of query variable names to values (equivalent to the Hive
-   * command: SET name="value";).
-   */
-  core.Map<core.String, core.String> scriptVariables;
-
-  HiveJob();
-
-  HiveJob.fromJson(core.Map _json) {
-    if (_json.containsKey("continueOnFailure")) {
-      continueOnFailure = _json["continueOnFailure"];
-    }
-    if (_json.containsKey("jarFileUris")) {
-      jarFileUris = _json["jarFileUris"];
-    }
-    if (_json.containsKey("properties")) {
-      properties = _json["properties"];
-    }
-    if (_json.containsKey("queryFileUri")) {
-      queryFileUri = _json["queryFileUri"];
-    }
-    if (_json.containsKey("queryList")) {
-      queryList = new QueryList.fromJson(_json["queryList"]);
-    }
-    if (_json.containsKey("scriptVariables")) {
-      scriptVariables = _json["scriptVariables"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (continueOnFailure != null) {
-      _json["continueOnFailure"] = continueOnFailure;
-    }
-    if (jarFileUris != null) {
-      _json["jarFileUris"] = jarFileUris;
-    }
-    if (properties != null) {
-      _json["properties"] = properties;
-    }
-    if (queryFileUri != null) {
-      _json["queryFileUri"] = queryFileUri;
-    }
-    if (queryList != null) {
-      _json["queryList"] = (queryList).toJson();
-    }
-    if (scriptVariables != null) {
-      _json["scriptVariables"] = scriptVariables;
-    }
-    return _json;
-  }
-}
-
-/**
- * Optional. The config settings for Google Compute Engine resources in an
- * instance group, such as a master or worker group.
- */
-class InstanceGroupConfig {
-  /**
-   * Optional. The Google Compute Engine accelerator configuration for these
-   * instances.Beta Feature: This feature is still under development. It may be
-   * changed before final release.
-   */
-  core.List<AcceleratorConfig> accelerators;
-  /** Optional. Disk option config settings. */
-  DiskConfig diskConfig;
-  /**
-   * Output-only. The Google Compute Engine image resource used for cluster
-   * instances. Inferred from SoftwareConfig.image_version.
-   */
-  core.String imageUri;
-  /**
-   * Optional. 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).
-   */
-  core.List<core.String> instanceNames;
-  /**
-   * Optional. Specifies that this instance group contains preemptible
-   * instances.
-   */
-  core.bool isPreemptible;
-  /**
-   * Optional. The Google Compute Engine machine type used for cluster
-   * instances.A full URL, partial URI, or short name are valid. Examples:
-   * https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2
-   * projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2
-   * n1-standard-2
-   */
-  core.String machineTypeUri;
-  /**
-   * Output-only. The config for Google Compute Engine Instance Group Manager
-   * that manages this group. This is only used for preemptible instance groups.
-   */
-  ManagedGroupConfig managedGroupConfig;
-  /**
-   * Optional. The number of VM instances in the instance group. For master
-   * instance groups, must be set to 1.
-   */
-  core.int numInstances;
-
-  InstanceGroupConfig();
-
-  InstanceGroupConfig.fromJson(core.Map _json) {
-    if (_json.containsKey("accelerators")) {
-      accelerators = _json["accelerators"].map((value) => new AcceleratorConfig.fromJson(value)).toList();
-    }
-    if (_json.containsKey("diskConfig")) {
-      diskConfig = new DiskConfig.fromJson(_json["diskConfig"]);
-    }
-    if (_json.containsKey("imageUri")) {
-      imageUri = _json["imageUri"];
-    }
-    if (_json.containsKey("instanceNames")) {
-      instanceNames = _json["instanceNames"];
-    }
-    if (_json.containsKey("isPreemptible")) {
-      isPreemptible = _json["isPreemptible"];
-    }
-    if (_json.containsKey("machineTypeUri")) {
-      machineTypeUri = _json["machineTypeUri"];
-    }
-    if (_json.containsKey("managedGroupConfig")) {
-      managedGroupConfig = new ManagedGroupConfig.fromJson(_json["managedGroupConfig"]);
-    }
-    if (_json.containsKey("numInstances")) {
-      numInstances = _json["numInstances"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (accelerators != null) {
-      _json["accelerators"] = accelerators.map((value) => (value).toJson()).toList();
-    }
-    if (diskConfig != null) {
-      _json["diskConfig"] = (diskConfig).toJson();
-    }
-    if (imageUri != null) {
-      _json["imageUri"] = imageUri;
-    }
-    if (instanceNames != null) {
-      _json["instanceNames"] = instanceNames;
-    }
-    if (isPreemptible != null) {
-      _json["isPreemptible"] = isPreemptible;
-    }
-    if (machineTypeUri != null) {
-      _json["machineTypeUri"] = machineTypeUri;
-    }
-    if (managedGroupConfig != null) {
-      _json["managedGroupConfig"] = (managedGroupConfig).toJson();
-    }
-    if (numInstances != null) {
-      _json["numInstances"] = numInstances;
-    }
-    return _json;
-  }
-}
-
-/** A Cloud Dataproc job resource. */
-class Job {
-  /**
-   * Output-only. If present, the location of miscellaneous control files which
-   * may be used as part of job setup and handling. If not present, control
-   * files may be placed in the same location as driver_output_uri.
-   */
-  core.String driverControlFilesUri;
-  /**
-   * Output-only. A URI pointing to the location of the stdout of the job's
-   * driver program.
-   */
-  core.String driverOutputResourceUri;
-  /** Job is a Hadoop job. */
-  HadoopJob hadoopJob;
-  /** Job is a Hive job. */
-  HiveJob hiveJob;
-  /**
-   * Optional. The labels to associate with this job. Label keys must contain 1
-   * to 63 characters, and must conform to RFC 1035
-   * (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if
-   * present, must contain 1 to 63 characters, and must conform to RFC 1035
-   * (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be
-   * associated with a job.
-   */
-  core.Map<core.String, core.String> labels;
-  /** Job is a Pig job. */
-  PigJob pigJob;
-  /**
-   * Required. Job information, including how, when, and where to run the job.
-   */
-  JobPlacement placement;
-  /** Job is a Pyspark job. */
-  PySparkJob pysparkJob;
-  /**
-   * 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
-   * <code>job_id</code>.
-   */
-  JobReference reference;
-  /** Optional. Job scheduling configuration. */
-  JobScheduling scheduling;
-  /** Job is a Spark job. */
-  SparkJob sparkJob;
-  /** Job is a SparkSql job. */
-  SparkSqlJob sparkSqlJob;
-  /**
-   * Output-only. The job status. Additional application-specific status
-   * information may be contained in the <code>type_job</code> and
-   * <code>yarn_applications</code> fields.
-   */
-  JobStatus status;
-  /** Output-only. The previous job status. */
-  core.List<JobStatus> statusHistory;
-  /**
-   * Output-only. The collection of YARN applications spun up by this job.Beta
-   * Feature: This report is available for testing purposes only. It may be
-   * changed before final release.
-   */
-  core.List<YarnApplication> yarnApplications;
-
-  Job();
-
-  Job.fromJson(core.Map _json) {
-    if (_json.containsKey("driverControlFilesUri")) {
-      driverControlFilesUri = _json["driverControlFilesUri"];
-    }
-    if (_json.containsKey("driverOutputResourceUri")) {
-      driverOutputResourceUri = _json["driverOutputResourceUri"];
-    }
-    if (_json.containsKey("hadoopJob")) {
-      hadoopJob = new HadoopJob.fromJson(_json["hadoopJob"]);
-    }
-    if (_json.containsKey("hiveJob")) {
-      hiveJob = new HiveJob.fromJson(_json["hiveJob"]);
-    }
-    if (_json.containsKey("labels")) {
-      labels = _json["labels"];
-    }
-    if (_json.containsKey("pigJob")) {
-      pigJob = new PigJob.fromJson(_json["pigJob"]);
-    }
-    if (_json.containsKey("placement")) {
-      placement = new JobPlacement.fromJson(_json["placement"]);
-    }
-    if (_json.containsKey("pysparkJob")) {
-      pysparkJob = new PySparkJob.fromJson(_json["pysparkJob"]);
-    }
-    if (_json.containsKey("reference")) {
-      reference = new JobReference.fromJson(_json["reference"]);
-    }
-    if (_json.containsKey("scheduling")) {
-      scheduling = new JobScheduling.fromJson(_json["scheduling"]);
-    }
-    if (_json.containsKey("sparkJob")) {
-      sparkJob = new SparkJob.fromJson(_json["sparkJob"]);
-    }
-    if (_json.containsKey("sparkSqlJob")) {
-      sparkSqlJob = new SparkSqlJob.fromJson(_json["sparkSqlJob"]);
-    }
-    if (_json.containsKey("status")) {
-      status = new JobStatus.fromJson(_json["status"]);
-    }
-    if (_json.containsKey("statusHistory")) {
-      statusHistory = _json["statusHistory"].map((value) => new JobStatus.fromJson(value)).toList();
-    }
-    if (_json.containsKey("yarnApplications")) {
-      yarnApplications = _json["yarnApplications"].map((value) => new YarnApplication.fromJson(value)).toList();
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (driverControlFilesUri != null) {
-      _json["driverControlFilesUri"] = driverControlFilesUri;
-    }
-    if (driverOutputResourceUri != null) {
-      _json["driverOutputResourceUri"] = driverOutputResourceUri;
-    }
-    if (hadoopJob != null) {
-      _json["hadoopJob"] = (hadoopJob).toJson();
-    }
-    if (hiveJob != null) {
-      _json["hiveJob"] = (hiveJob).toJson();
-    }
-    if (labels != null) {
-      _json["labels"] = labels;
-    }
-    if (pigJob != null) {
-      _json["pigJob"] = (pigJob).toJson();
-    }
-    if (placement != null) {
-      _json["placement"] = (placement).toJson();
-    }
-    if (pysparkJob != null) {
-      _json["pysparkJob"] = (pysparkJob).toJson();
-    }
-    if (reference != null) {
-      _json["reference"] = (reference).toJson();
-    }
-    if (scheduling != null) {
-      _json["scheduling"] = (scheduling).toJson();
-    }
-    if (sparkJob != null) {
-      _json["sparkJob"] = (sparkJob).toJson();
-    }
-    if (sparkSqlJob != null) {
-      _json["sparkSqlJob"] = (sparkSqlJob).toJson();
-    }
-    if (status != null) {
-      _json["status"] = (status).toJson();
-    }
-    if (statusHistory != null) {
-      _json["statusHistory"] = statusHistory.map((value) => (value).toJson()).toList();
-    }
-    if (yarnApplications != null) {
-      _json["yarnApplications"] = yarnApplications.map((value) => (value).toJson()).toList();
-    }
-    return _json;
-  }
-}
-
-/** Cloud Dataproc job config. */
-class JobPlacement {
-  /** Required. The name of the cluster where the job will be submitted. */
-  core.String clusterName;
-  /**
-   * Output-only. A cluster UUID generated by the Cloud Dataproc service when
-   * the job is submitted.
-   */
-  core.String clusterUuid;
-
-  JobPlacement();
-
-  JobPlacement.fromJson(core.Map _json) {
-    if (_json.containsKey("clusterName")) {
-      clusterName = _json["clusterName"];
-    }
-    if (_json.containsKey("clusterUuid")) {
-      clusterUuid = _json["clusterUuid"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (clusterName != null) {
-      _json["clusterName"] = clusterName;
-    }
-    if (clusterUuid != null) {
-      _json["clusterUuid"] = clusterUuid;
-    }
-    return _json;
-  }
-}
-
-/** Encapsulates the full scoping used to reference a job. */
-class JobReference {
-  /**
-   * Optional. The job ID, which must be unique within the project. The job ID
-   * is generated by the server upon job submission or provided by the user as a
-   * means to perform retries without creating duplicate jobs. The ID must
-   * contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or hyphens
-   * (-). The maximum length is 100 characters.
-   */
-  core.String jobId;
-  /**
-   * Required. The ID of the Google Cloud Platform project that the job belongs
-   * to.
-   */
-  core.String projectId;
-
-  JobReference();
-
-  JobReference.fromJson(core.Map _json) {
-    if (_json.containsKey("jobId")) {
-      jobId = _json["jobId"];
-    }
-    if (_json.containsKey("projectId")) {
-      projectId = _json["projectId"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (jobId != null) {
-      _json["jobId"] = jobId;
-    }
-    if (projectId != null) {
-      _json["projectId"] = projectId;
-    }
-    return _json;
-  }
-}
-
-/**
- * Job scheduling options.Beta Feature: These options are available for testing
- * purposes only. They may be changed before final release.
- */
-class JobScheduling {
-  /**
-   * Optional. Maximum number of times per hour a driver may be restarted as a
-   * result of driver terminating with non-zero code before job is reported
-   * failed.A job may be reported as thrashing if driver exits with non-zero
-   * code 4 times within 10 minute window.Maximum value is 10.
-   */
-  core.int maxFailuresPerHour;
-
-  JobScheduling();
-
-  JobScheduling.fromJson(core.Map _json) {
-    if (_json.containsKey("maxFailuresPerHour")) {
-      maxFailuresPerHour = _json["maxFailuresPerHour"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (maxFailuresPerHour != null) {
-      _json["maxFailuresPerHour"] = maxFailuresPerHour;
-    }
-    return _json;
-  }
-}
-
-/** Cloud Dataproc job status. */
-class JobStatus {
-  /**
-   * Output-only. Optional job state details, such as an error description if
-   * the state is <code>ERROR</code>.
-   */
-  core.String details;
-  /**
-   * Output-only. A state message specifying the overall job state.
-   * Possible string values are:
-   * - "STATE_UNSPECIFIED" : The job state is unknown.
-   * - "PENDING" : The job is pending; it has been submitted, but is not yet
-   * running.
-   * - "SETUP_DONE" : Job has been received by the service and completed initial
-   * setup; it will soon be submitted to the cluster.
-   * - "RUNNING" : The job is running on the cluster.
-   * - "CANCEL_PENDING" : A CancelJob request has been received, but is pending.
-   * - "CANCEL_STARTED" : Transient in-flight resources have been canceled, and
-   * the request to cancel the running job has been issued to the cluster.
-   * - "CANCELLED" : The job cancellation was successful.
-   * - "DONE" : The job has completed successfully.
-   * - "ERROR" : The job has completed, but encountered an error.
-   * - "ATTEMPT_FAILURE" : Job attempt has failed. The detail field contains
-   * failure details for this attempt.Applies to restartable jobs only.
-   */
-  core.String state;
-  /** Output-only. The time when this state was entered. */
-  core.String stateStartTime;
-  /**
-   * Output-only. Additional state information, which includes status reported
-   * by the agent.
-   * Possible string values are:
-   * - "UNSPECIFIED"
-   * - "SUBMITTED" : The Job is submitted to the agent.Applies to RUNNING state.
-   * - "QUEUED" : The Job has been received and is awaiting execution (it may be
-   * waiting for a condition to be met). See the "details" field for the reason
-   * for the delay.Applies to RUNNING state.
-   * - "STALE_STATUS" : The agent-reported status is out of date, which may be
-   * caused by a loss of communication between the agent and Cloud Dataproc. If
-   * the agent does not send a timely update, the job will fail.Applies to
-   * RUNNING state.
-   */
-  core.String substate;
-
-  JobStatus();
-
-  JobStatus.fromJson(core.Map _json) {
-    if (_json.containsKey("details")) {
-      details = _json["details"];
-    }
-    if (_json.containsKey("state")) {
-      state = _json["state"];
-    }
-    if (_json.containsKey("stateStartTime")) {
-      stateStartTime = _json["stateStartTime"];
-    }
-    if (_json.containsKey("substate")) {
-      substate = _json["substate"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (details != null) {
-      _json["details"] = details;
-    }
-    if (state != null) {
-      _json["state"] = state;
-    }
-    if (stateStartTime != null) {
-      _json["stateStartTime"] = stateStartTime;
-    }
-    if (substate != null) {
-      _json["substate"] = substate;
-    }
-    return _json;
-  }
-}
-
-/** The list of all clusters in a project. */
-class ListClustersResponse {
-  /** Output-only. The clusters in the project. */
-  core.List<Cluster> clusters;
-  /**
-   * Output-only. 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 <code>ListClustersRequest</code>.
-   */
-  core.String nextPageToken;
-
-  ListClustersResponse();
-
-  ListClustersResponse.fromJson(core.Map _json) {
-    if (_json.containsKey("clusters")) {
-      clusters = _json["clusters"].map((value) => new Cluster.fromJson(value)).toList();
-    }
-    if (_json.containsKey("nextPageToken")) {
-      nextPageToken = _json["nextPageToken"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (clusters != null) {
-      _json["clusters"] = clusters.map((value) => (value).toJson()).toList();
-    }
-    if (nextPageToken != null) {
-      _json["nextPageToken"] = nextPageToken;
-    }
-    return _json;
-  }
-}
-
-/** A list of jobs in a project. */
-class ListJobsResponse {
-  /** Output-only. Jobs list. */
-  core.List<Job> jobs;
-  /**
-   * 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 <code>ListJobsRequest</code>.
-   */
-  core.String nextPageToken;
-
-  ListJobsResponse();
-
-  ListJobsResponse.fromJson(core.Map _json) {
-    if (_json.containsKey("jobs")) {
-      jobs = _json["jobs"].map((value) => new Job.fromJson(value)).toList();
-    }
-    if (_json.containsKey("nextPageToken")) {
-      nextPageToken = _json["nextPageToken"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (jobs != null) {
-      _json["jobs"] = jobs.map((value) => (value).toJson()).toList();
-    }
-    if (nextPageToken != null) {
-      _json["nextPageToken"] = nextPageToken;
-    }
-    return _json;
-  }
-}
-
-/** The response message for Operations.ListOperations. */
-class ListOperationsResponse {
-  /** The standard List next-page token. */
-  core.String nextPageToken;
-  /** A list of operations that matches the specified filter in the request. */
-  core.List<Operation> operations;
-
-  ListOperationsResponse();
-
-  ListOperationsResponse.fromJson(core.Map _json) {
-    if (_json.containsKey("nextPageToken")) {
-      nextPageToken = _json["nextPageToken"];
-    }
-    if (_json.containsKey("operations")) {
-      operations = _json["operations"].map((value) => new Operation.fromJson(value)).toList();
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (nextPageToken != null) {
-      _json["nextPageToken"] = nextPageToken;
-    }
-    if (operations != null) {
-      _json["operations"] = operations.map((value) => (value).toJson()).toList();
-    }
-    return _json;
-  }
-}
-
-/** The runtime logging config of the job. */
-class LoggingConfig {
-  /**
-   * The per-package log levels for the driver. This may include "root" package
-   * name to configure rootLogger. Examples:  'com.google = FATAL', 'root =
-   * INFO', 'org.apache = DEBUG'
-   */
-  core.Map<core.String, core.String> driverLogLevels;
-
-  LoggingConfig();
-
-  LoggingConfig.fromJson(core.Map _json) {
-    if (_json.containsKey("driverLogLevels")) {
-      driverLogLevels = _json["driverLogLevels"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (driverLogLevels != null) {
-      _json["driverLogLevels"] = driverLogLevels;
-    }
-    return _json;
-  }
-}
-
-/** Specifies the resources used to actively manage an instance group. */
-class ManagedGroupConfig {
-  /** Output-only. The name of the Instance Group Manager for this group. */
-  core.String instanceGroupManagerName;
-  /**
-   * Output-only. The name of the Instance Template used for the Managed
-   * Instance Group.
-   */
-  core.String instanceTemplateName;
-
-  ManagedGroupConfig();
-
-  ManagedGroupConfig.fromJson(core.Map _json) {
-    if (_json.containsKey("instanceGroupManagerName")) {
-      instanceGroupManagerName = _json["instanceGroupManagerName"];
-    }
-    if (_json.containsKey("instanceTemplateName")) {
-      instanceTemplateName = _json["instanceTemplateName"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (instanceGroupManagerName != null) {
-      _json["instanceGroupManagerName"] = instanceGroupManagerName;
-    }
-    if (instanceTemplateName != null) {
-      _json["instanceTemplateName"] = instanceTemplateName;
-    }
-    return _json;
-  }
-}
-
-/**
- * Specifies an executable to run on a fully configured node and a timeout
- * period for executable completion.
- */
-class NodeInitializationAction {
-  /** Required. Google Cloud Storage URI of executable file. */
-  core.String executableFile;
-  /**
-   * Optional. Amount of time executable has to complete. Default is 10 minutes.
-   * Cluster creation fails with an explanatory error message (the name of the
-   * executable that caused the error and the exceeded timeout period) if the
-   * executable is not completed at end of the timeout period.
-   */
-  core.String executionTimeout;
-
-  NodeInitializationAction();
-
-  NodeInitializationAction.fromJson(core.Map _json) {
-    if (_json.containsKey("executableFile")) {
-      executableFile = _json["executableFile"];
-    }
-    if (_json.containsKey("executionTimeout")) {
-      executionTimeout = _json["executionTimeout"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (executableFile != null) {
-      _json["executableFile"] = executableFile;
-    }
-    if (executionTimeout != null) {
-      _json["executionTimeout"] = executionTimeout;
-    }
-    return _json;
-  }
-}
-
-/**
- * This resource represents a long-running operation that is the result of a
- * network API call.
- */
-class Operation {
-  /**
-   * 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.
-   */
-  core.bool done;
-  /** The error result of the operation in case of failure or cancellation. */
-  Status error;
-  /**
-   * 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.
-   *
-   * The values for Object must be JSON objects. It can consist of `num`,
-   * `String`, `bool` and `null` as well as `Map` and `List` values.
-   */
-  core.Map<core.String, core.Object> metadata;
-  /**
-   * 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.
-   */
-  core.String name;
-  /**
-   * 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.
-   *
-   * The values for Object must be JSON objects. It can consist of `num`,
-   * `String`, `bool` and `null` as well as `Map` and `List` values.
-   */
-  core.Map<core.String, core.Object> response;
-
-  Operation();
-
-  Operation.fromJson(core.Map _json) {
-    if (_json.containsKey("done")) {
-      done = _json["done"];
-    }
-    if (_json.containsKey("error")) {
-      error = new Status.fromJson(_json["error"]);
-    }
-    if (_json.containsKey("metadata")) {
-      metadata = _json["metadata"];
-    }
-    if (_json.containsKey("name")) {
-      name = _json["name"];
-    }
-    if (_json.containsKey("response")) {
-      response = _json["response"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (done != null) {
-      _json["done"] = done;
-    }
-    if (error != null) {
-      _json["error"] = (error).toJson();
-    }
-    if (metadata != null) {
-      _json["metadata"] = metadata;
-    }
-    if (name != null) {
-      _json["name"] = name;
-    }
-    if (response != null) {
-      _json["response"] = response;
-    }
-    return _json;
-  }
-}
-
-/**
- * A Cloud Dataproc job for running Apache Pig (https://pig.apache.org/) queries
- * on YARN.
- */
-class PigJob {
-  /**
-   * Optional. Whether to continue executing queries if a query fails. The
-   * default value is false. Setting to true can be useful when executing
-   * independent parallel queries.
-   */
-  core.bool continueOnFailure;
-  /**
-   * Optional. HCFS URIs of jar files to add to the CLASSPATH of the Pig Client
-   * and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs.
-   */
-  core.List<core.String> jarFileUris;
-  /** Optional. The runtime log config for job execution. */
-  LoggingConfig loggingConfig;
-  /**
-   * Optional. A mapping of property names to values, used to configure Pig.
-   * Properties that conflict with values set by the Cloud Dataproc API may be
-   * overwritten. Can include properties set in /etc/hadoop/conf / * -site.xml,
-   * /etc/pig/conf/pig.properties, and classes in user code.
-   */
-  core.Map<core.String, core.String> properties;
-  /** The HCFS URI of the script that contains the Pig queries. */
-  core.String queryFileUri;
-  /** A list of queries. */
-  QueryList queryList;
-  /**
-   * Optional. Mapping of query variable names to values (equivalent to the Pig
-   * command: name=[value]).
-   */
-  core.Map<core.String, core.String> scriptVariables;
-
-  PigJob();
-
-  PigJob.fromJson(core.Map _json) {
-    if (_json.containsKey("continueOnFailure")) {
-      continueOnFailure = _json["continueOnFailure"];
-    }
-    if (_json.containsKey("jarFileUris")) {
-      jarFileUris = _json["jarFileUris"];
-    }
-    if (_json.containsKey("loggingConfig")) {
-      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
-    }
-    if (_json.containsKey("properties")) {
-      properties = _json["properties"];
-    }
-    if (_json.containsKey("queryFileUri")) {
-      queryFileUri = _json["queryFileUri"];
-    }
-    if (_json.containsKey("queryList")) {
-      queryList = new QueryList.fromJson(_json["queryList"]);
-    }
-    if (_json.containsKey("scriptVariables")) {
-      scriptVariables = _json["scriptVariables"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (continueOnFailure != null) {
-      _json["continueOnFailure"] = continueOnFailure;
-    }
-    if (jarFileUris != null) {
-      _json["jarFileUris"] = jarFileUris;
-    }
-    if (loggingConfig != null) {
-      _json["loggingConfig"] = (loggingConfig).toJson();
-    }
-    if (properties != null) {
-      _json["properties"] = properties;
-    }
-    if (queryFileUri != null) {
-      _json["queryFileUri"] = queryFileUri;
-    }
-    if (queryList != null) {
-      _json["queryList"] = (queryList).toJson();
-    }
-    if (scriptVariables != null) {
-      _json["scriptVariables"] = scriptVariables;
-    }
-    return _json;
-  }
-}
-
-/**
- * A Cloud Dataproc job for running Apache PySpark
- * (https://spark.apache.org/docs/0.9.0/python-programming-guide.html)
- * applications on YARN.
- */
-class PySparkJob {
-  /**
-   * Optional. HCFS URIs of archives to be extracted in the working directory of
-   * .jar, .tar, .tar.gz, .tgz, and .zip.
-   */
-  core.List<core.String> archiveUris;
-  /**
-   * 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.
-   */
-  core.List<core.String> args;
-  /**
-   * Optional. HCFS URIs of files to be copied to the working directory of
-   * Python drivers and distributed tasks. Useful for naively parallel tasks.
-   */
-  core.List<core.String> fileUris;
-  /**
-   * Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Python
-   * driver and tasks.
-   */
-  core.List<core.String> jarFileUris;
-  /** Optional. The runtime log config for job execution. */
-  LoggingConfig loggingConfig;
-  /**
-   * Required. The HCFS URI of the main Python file to use as the driver. Must
-   * be a .py file.
-   */
-  core.String mainPythonFileUri;
-  /**
-   * Optional. A mapping of property names to values, used to configure PySpark.
-   * 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.
-   */
-  core.Map<core.String, core.String> properties;
-  /**
-   * Optional. HCFS file URIs of Python files to pass to the PySpark framework.
-   * Supported file types: .py, .egg, and .zip.
-   */
-  core.List<core.String> pythonFileUris;
-
-  PySparkJob();
-
-  PySparkJob.fromJson(core.Map _json) {
-    if (_json.containsKey("archiveUris")) {
-      archiveUris = _json["archiveUris"];
-    }
-    if (_json.containsKey("args")) {
-      args = _json["args"];
-    }
-    if (_json.containsKey("fileUris")) {
-      fileUris = _json["fileUris"];
-    }
-    if (_json.containsKey("jarFileUris")) {
-      jarFileUris = _json["jarFileUris"];
-    }
-    if (_json.containsKey("loggingConfig")) {
-      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
-    }
-    if (_json.containsKey("mainPythonFileUri")) {
-      mainPythonFileUri = _json["mainPythonFileUri"];
-    }
-    if (_json.containsKey("properties")) {
-      properties = _json["properties"];
-    }
-    if (_json.containsKey("pythonFileUris")) {
-      pythonFileUris = _json["pythonFileUris"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (archiveUris != null) {
-      _json["archiveUris"] = archiveUris;
-    }
-    if (args != null) {
-      _json["args"] = args;
-    }
-    if (fileUris != null) {
-      _json["fileUris"] = fileUris;
-    }
-    if (jarFileUris != null) {
-      _json["jarFileUris"] = jarFileUris;
-    }
-    if (loggingConfig != null) {
-      _json["loggingConfig"] = (loggingConfig).toJson();
-    }
-    if (mainPythonFileUri != null) {
-      _json["mainPythonFileUri"] = mainPythonFileUri;
-    }
-    if (properties != null) {
-      _json["properties"] = properties;
-    }
-    if (pythonFileUris != null) {
-      _json["pythonFileUris"] = pythonFileUris;
-    }
-    return _json;
-  }
-}
-
-/** A list of queries to run on a cluster. */
-class QueryList {
-  /**
-   * Required. The queries to execute. You do not need to terminate a query with
-   * a semicolon. Multiple queries can be specified in one string by separating
-   * each with a semicolon. Here is an example of an Cloud Dataproc API snippet
-   * that uses a QueryList to specify a HiveJob:
-   * "hiveJob": {
-   *   "queryList": {
-   *     "queries": [
-   *       "query1",
-   *       "query2",
-   *       "query3;query4",
-   *     ]
-   *   }
-   * }
-   */
-  core.List<core.String> queries;
-
-  QueryList();
-
-  QueryList.fromJson(core.Map _json) {
-    if (_json.containsKey("queries")) {
-      queries = _json["queries"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (queries != null) {
-      _json["queries"] = queries;
-    }
-    return _json;
-  }
-}
-
-/** Specifies the selection and config of software inside the cluster. */
-class SoftwareConfig {
-  /**
-   * 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).
-   */
-  core.String imageVersion;
-  /**
-   * 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:
-   * capacity-scheduler: capacity-scheduler.xml
-   * core: core-site.xml
-   * distcp: distcp-default.xml
-   * hdfs: hdfs-site.xml
-   * hive: hive-site.xml
-   * mapred: mapred-site.xml
-   * pig: pig.properties
-   * spark: spark-defaults.conf
-   * yarn: yarn-site.xml
-   */
-  core.Map<core.String, core.String> properties;
-
-  SoftwareConfig();
-
-  SoftwareConfig.fromJson(core.Map _json) {
-    if (_json.containsKey("imageVersion")) {
-      imageVersion = _json["imageVersion"];
-    }
-    if (_json.containsKey("properties")) {
-      properties = _json["properties"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (imageVersion != null) {
-      _json["imageVersion"] = imageVersion;
-    }
-    if (properties != null) {
-      _json["properties"] = properties;
-    }
-    return _json;
-  }
-}
-
-/**
- * A Cloud Dataproc job for running Apache Spark (http://spark.apache.org/)
- * applications on YARN.
- */
-class SparkJob {
-  /**
-   * 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.
-   */
-  core.List<core.String> archiveUris;
-  /**
-   * 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.
-   */
-  core.List<core.String> args;
-  /**
-   * Optional. HCFS URIs of files to be copied to the working directory of Spark
-   * drivers and distributed tasks. Useful for naively parallel tasks.
-   */
-  core.List<core.String> fileUris;
-  /**
-   * Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Spark
-   * driver and tasks.
-   */
-  core.List<core.String> jarFileUris;
-  /** Optional. The runtime log config for job execution. */
-  LoggingConfig loggingConfig;
-  /**
-   * The name of the driver's main class. The jar file that contains the class
-   * must be in the default CLASSPATH or specified in jar_file_uris.
-   */
-  core.String mainClass;
-  /** The HCFS URI of the jar file that contains the main class. */
-  core.String mainJarFileUri;
-  /**
-   * 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.
-   */
-  core.Map<core.String, core.String> properties;
-
-  SparkJob();
-
-  SparkJob.fromJson(core.Map _json) {
-    if (_json.containsKey("archiveUris")) {
-      archiveUris = _json["archiveUris"];
-    }
-    if (_json.containsKey("args")) {
-      args = _json["args"];
-    }
-    if (_json.containsKey("fileUris")) {
-      fileUris = _json["fileUris"];
-    }
-    if (_json.containsKey("jarFileUris")) {
-      jarFileUris = _json["jarFileUris"];
-    }
-    if (_json.containsKey("loggingConfig")) {
-      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
-    }
-    if (_json.containsKey("mainClass")) {
-      mainClass = _json["mainClass"];
-    }
-    if (_json.containsKey("mainJarFileUri")) {
-      mainJarFileUri = _json["mainJarFileUri"];
-    }
-    if (_json.containsKey("properties")) {
-      properties = _json["properties"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (archiveUris != null) {
-      _json["archiveUris"] = archiveUris;
-    }
-    if (args != null) {
-      _json["args"] = args;
-    }
-    if (fileUris != null) {
-      _json["fileUris"] = fileUris;
-    }
-    if (jarFileUris != null) {
-      _json["jarFileUris"] = jarFileUris;
-    }
-    if (loggingConfig != null) {
-      _json["loggingConfig"] = (loggingConfig).toJson();
-    }
-    if (mainClass != null) {
-      _json["mainClass"] = mainClass;
-    }
-    if (mainJarFileUri != null) {
-      _json["mainJarFileUri"] = mainJarFileUri;
-    }
-    if (properties != null) {
-      _json["properties"] = properties;
-    }
-    return _json;
-  }
-}
-
-/**
- * A Cloud Dataproc job for running Apache Spark SQL
- * (http://spark.apache.org/sql/) queries.
- */
-class SparkSqlJob {
-  /** Optional. HCFS URIs of jar files to be added to the Spark CLASSPATH. */
-  core.List<core.String> jarFileUris;
-  /** Optional. The runtime log config for job execution. */
-  LoggingConfig loggingConfig;
-  /**
-   * Optional. A mapping of property names to values, used to configure Spark
-   * SQL's SparkConf. Properties that conflict with values set by the Cloud
-   * Dataproc API may be overwritten.
-   */
-  core.Map<core.String, core.String> properties;
-  /** The HCFS URI of the script that contains SQL queries. */
-  core.String queryFileUri;
-  /** A list of queries. */
-  QueryList queryList;
-  /**
-   * Optional. Mapping of query variable names to values (equivalent to the
-   * Spark SQL command: SET name="value";).
-   */
-  core.Map<core.String, core.String> scriptVariables;
-
-  SparkSqlJob();
-
-  SparkSqlJob.fromJson(core.Map _json) {
-    if (_json.containsKey("jarFileUris")) {
-      jarFileUris = _json["jarFileUris"];
-    }
-    if (_json.containsKey("loggingConfig")) {
-      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
-    }
-    if (_json.containsKey("properties")) {
-      properties = _json["properties"];
-    }
-    if (_json.containsKey("queryFileUri")) {
-      queryFileUri = _json["queryFileUri"];
-    }
-    if (_json.containsKey("queryList")) {
-      queryList = new QueryList.fromJson(_json["queryList"]);
-    }
-    if (_json.containsKey("scriptVariables")) {
-      scriptVariables = _json["scriptVariables"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (jarFileUris != null) {
-      _json["jarFileUris"] = jarFileUris;
-    }
-    if (loggingConfig != null) {
-      _json["loggingConfig"] = (loggingConfig).toJson();
-    }
-    if (properties != null) {
-      _json["properties"] = properties;
-    }
-    if (queryFileUri != null) {
-      _json["queryFileUri"] = queryFileUri;
-    }
-    if (queryList != null) {
-      _json["queryList"] = (queryList).toJson();
-    }
-    if (scriptVariables != null) {
-      _json["scriptVariables"] = scriptVariables;
-    }
-    return _json;
-  }
-}
-
-/**
- * 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 needsOverviewThe 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 that can be used for common
- * error conditions.Language mappingThe 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 usesThe 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.
- * 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.
- */
-class Status {
-  /** The status code, which should be an enum value of google.rpc.Code. */
-  core.int code;
-  /**
-   * A list of messages that carry the error details. There will be a common set
-   * of message types for APIs to use.
-   *
-   * The values for Object must be JSON objects. It can consist of `num`,
-   * `String`, `bool` and `null` as well as `Map` and `List` values.
-   */
-  core.List<core.Map<core.String, core.Object>> details;
-  /**
-   * 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.
-   */
-  core.String message;
-
-  Status();
-
-  Status.fromJson(core.Map _json) {
-    if (_json.containsKey("code")) {
-      code = _json["code"];
-    }
-    if (_json.containsKey("details")) {
-      details = _json["details"];
-    }
-    if (_json.containsKey("message")) {
-      message = _json["message"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (code != null) {
-      _json["code"] = code;
-    }
-    if (details != null) {
-      _json["details"] = details;
-    }
-    if (message != null) {
-      _json["message"] = message;
-    }
-    return _json;
-  }
-}
-
-/** A request to submit a job. */
-class SubmitJobRequest {
-  /** Required. The job resource. */
-  Job job;
-
-  SubmitJobRequest();
-
-  SubmitJobRequest.fromJson(core.Map _json) {
-    if (_json.containsKey("job")) {
-      job = new Job.fromJson(_json["job"]);
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (job != null) {
-      _json["job"] = (job).toJson();
-    }
-    return _json;
-  }
-}
-
-/**
- * A YARN application created by a job. Application information is a subset of
- * <code>org.apache.hadoop.yarn.proto.YarnProtos.ApplicationReportProto</code>.Beta
- * Feature: This report is available for testing purposes only. It may be
- * changed before final release.
- */
-class YarnApplication {
-  /** Required. The application name. */
-  core.String name;
-  /** Required. The numerical progress of the application, from 1 to 100. */
-  core.double progress;
-  /**
-   * Required. The application state.
-   * Possible string values are:
-   * - "STATE_UNSPECIFIED" : Status is unspecified.
-   * - "NEW" : Status is NEW.
-   * - "NEW_SAVING" : Status is NEW_SAVING.
-   * - "SUBMITTED" : Status is SUBMITTED.
-   * - "ACCEPTED" : Status is ACCEPTED.
-   * - "RUNNING" : Status is RUNNING.
-   * - "FINISHED" : Status is FINISHED.
-   * - "FAILED" : Status is FAILED.
-   * - "KILLED" : Status is KILLED.
-   */
-  core.String state;
-  /**
-   * Optional. The HTTP URL of the ApplicationMaster, HistoryServer, or
-   * TimelineServer that provides application-specific information. The URL uses
-   * the internal hostname, and requires a proxy server for resolution and,
-   * possibly, access.
-   */
-  core.String trackingUrl;
-
-  YarnApplication();
-
-  YarnApplication.fromJson(core.Map _json) {
-    if (_json.containsKey("name")) {
-      name = _json["name"];
-    }
-    if (_json.containsKey("progress")) {
-      progress = _json["progress"];
-    }
-    if (_json.containsKey("state")) {
-      state = _json["state"];
-    }
-    if (_json.containsKey("trackingUrl")) {
-      trackingUrl = _json["trackingUrl"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (name != null) {
-      _json["name"] = name;
-    }
-    if (progress != null) {
-      _json["progress"] = progress;
-    }
-    if (state != null) {
-      _json["state"] = state;
-    }
-    if (trackingUrl != null) {
-      _json["trackingUrl"] = trackingUrl;
-    }
-    return _json;
-  }
-}
diff --git a/generated/googleapis/lib/datastore/v1.dart b/generated/googleapis/lib/datastore/v1.dart
index 6dfc2dd..49f6ce6 100644
--- a/generated/googleapis/lib/datastore/v1.dart
+++ b/generated/googleapis/lib/datastore/v1.dart
@@ -1573,7 +1573,7 @@
    * - "MORE_RESULTS_AFTER_CURSOR" : The query is finished, but there may be
    * more results after the end
    * cursor.
-   * - "NO_MORE_RESULTS" : The query has been exhausted.
+   * - "NO_MORE_RESULTS" : The query is finished, and there are no more results.
    */
   core.String moreResults;
   /**
diff --git a/generated/googleapis/lib/firebaserules/v1.dart b/generated/googleapis/lib/firebaserules/v1.dart
index 2201def..ab32331 100644
--- a/generated/googleapis/lib/firebaserules/v1.dart
+++ b/generated/googleapis/lib/firebaserules/v1.dart
@@ -292,6 +292,14 @@
    * Format: `projects/{project_id}`
    * Value must have pattern "^projects/[^/]+$".
    *
+   * [pageToken] - Next page token for the next batch of `Release` instances.
+   *
+   * [pageSize] - Page size to load. Maximum of 100. Defaults to 10.
+   * Note: `page_size` is just a hint and the service may choose to load fewer
+   * than `page_size` results due to the size of the output. To traverse all of
+   * the releases, the caller should iterate until the `page_token` on the
+   * response is empty.
+   *
    * [filter] - `Release` filter. The list method supports filters with
    * restrictions on the
    * `Release.name`, `Release.ruleset_name`, and `Release.test_suite_name`.
@@ -318,14 +326,6 @@
    * relative to the project. Fully qualified prefixed may also be used. e.g.
    * `test_suite_name=projects/foo/testsuites/uuid1`
    *
-   * [pageToken] - Next page token for the next batch of `Release` instances.
-   *
-   * [pageSize] - Page size to load. Maximum of 100. Defaults to 10.
-   * Note: `page_size` is just a hint and the service may choose to load fewer
-   * than `page_size` results due to the size of the output. To traverse all of
-   * the releases, the caller should iterate until the `page_token` on the
-   * response is empty.
-   *
    * Completes with a [ListReleasesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -334,7 +334,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListReleasesResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
+  async.Future<ListReleasesResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -345,15 +345,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + '/releases';
 
diff --git a/generated/googleapis/lib/genomics/v1.dart b/generated/googleapis/lib/genomics/v1.dart
index 886cefa..93cea1e 100644
--- a/generated/googleapis/lib/genomics/v1.dart
+++ b/generated/googleapis/lib/genomics/v1.dart
@@ -1410,12 +1410,6 @@
    * [name] - The name of the operation's parent resource.
    * Value must have pattern "^operations$".
    *
-   * [pageToken] - The standard list page token.
-   *
-   * [pageSize] - The maximum number of results to return. If unspecified,
-   * defaults to
-   * 256. The maximum value is 2048.
-   *
    * [filter] - A string for filtering Operations.
    * The following filter fields are supported&#58;
    *
@@ -1436,6 +1430,12 @@
    * * `projectId = my-project AND labels.color = *`
    * * `projectId = my-project AND labels.color = red`
    *
+   * [pageToken] - The standard list page token.
+   *
+   * [pageSize] - The maximum number of results to return. If unspecified,
+   * defaults to
+   * 256. The maximum value is 2048.
+   *
    * Completes with a [ListOperationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1444,7 +1444,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListOperationsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1455,15 +1455,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
 
@@ -1826,6 +1826,15 @@
    * [readGroupSetId] - Required. The ID of the read group set over which
    * coverage is requested.
    *
+   * [targetBucketWidth] - The desired width of each reported coverage bucket in
+   * base pairs. This
+   * will be rounded down to the nearest precomputed bucket width; the value
+   * of which is returned as `bucketWidth` in the response. Defaults
+   * to infinity (each bucket spans an entire reference sequence) or the length
+   * of the target range, if specified. The smallest precomputed
+   * `bucketWidth` is currently 2048 base pairs; this is subject to
+   * change.
+   *
    * [referenceName] - The name of the reference to query, within the reference
    * set associated
    * with this query. Optional.
@@ -1848,15 +1857,6 @@
    * inclusive. If
    * specified, `referenceName` must also be specified. Defaults to 0.
    *
-   * [targetBucketWidth] - The desired width of each reported coverage bucket in
-   * base pairs. This
-   * will be rounded down to the nearest precomputed bucket width; the value
-   * of which is returned as `bucketWidth` in the response. Defaults
-   * to infinity (each bucket spans an entire reference sequence) or the length
-   * of the target range, if specified. The smallest precomputed
-   * `bucketWidth` is currently 2048 base pairs; this is subject to
-   * change.
-   *
    * Completes with a [ListCoverageBucketsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1865,7 +1865,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListCoverageBucketsResponse> list(core.String readGroupSetId, {core.String referenceName, core.String end, core.String pageToken, core.int pageSize, core.String start, core.String targetBucketWidth}) {
+  async.Future<ListCoverageBucketsResponse> list(core.String readGroupSetId, {core.String targetBucketWidth, core.String referenceName, core.String end, core.String pageToken, core.int pageSize, core.String start}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1876,6 +1876,9 @@
     if (readGroupSetId == null) {
       throw new core.ArgumentError("Parameter readGroupSetId is required.");
     }
+    if (targetBucketWidth != null) {
+      _queryParams["targetBucketWidth"] = [targetBucketWidth];
+    }
     if (referenceName != null) {
       _queryParams["referenceName"] = [referenceName];
     }
@@ -1891,9 +1894,6 @@
     if (start != null) {
       _queryParams["start"] = [start];
     }
-    if (targetBucketWidth != null) {
-      _queryParams["targetBucketWidth"] = [targetBucketWidth];
-    }
 
     _url = 'v1/readgroupsets/' + commons.Escaper.ecapeVariable('$readGroupSetId') + '/coveragebuckets';
 
@@ -2104,6 +2104,10 @@
    *
    * [referenceId] - The ID of the reference.
    *
+   * [end] - The end position (0-based, exclusive) of this query. Defaults to
+   * the length
+   * of this reference.
+   *
    * [pageToken] - 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
@@ -2116,10 +2120,6 @@
    *
    * [start] - The start position (0-based) of this query. Defaults to 0.
    *
-   * [end] - The end position (0-based, exclusive) of this query. Defaults to
-   * the length
-   * of this reference.
-   *
    * Completes with a [ListBasesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -2128,7 +2128,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListBasesResponse> list(core.String referenceId, {core.String pageToken, core.int pageSize, core.String start, core.String end}) {
+  async.Future<ListBasesResponse> list(core.String referenceId, {core.String end, core.String pageToken, core.int pageSize, core.String start}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -2139,6 +2139,9 @@
     if (referenceId == null) {
       throw new core.ArgumentError("Parameter referenceId is required.");
     }
+    if (end != null) {
+      _queryParams["end"] = [end];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
@@ -2148,9 +2151,6 @@
     if (start != null) {
       _queryParams["start"] = [start];
     }
-    if (end != null) {
-      _queryParams["end"] = [end];
-    }
 
     _url = 'v1/references/' + commons.Escaper.ecapeVariable('$referenceId') + '/bases';
 
diff --git a/generated/googleapis/lib/iam/v1.dart b/generated/googleapis/lib/iam/v1.dart
index e923a7b..eb0a529 100644
--- a/generated/googleapis/lib/iam/v1.dart
+++ b/generated/googleapis/lib/iam/v1.dart
@@ -26,6 +26,8 @@
 
   final commons.ApiRequester _requester;
 
+  OrganizationsResourceApi get organizations => new OrganizationsResourceApi(_requester);
+  PermissionsResourceApi get permissions => new PermissionsResourceApi(_requester);
   ProjectsResourceApi get projects => new ProjectsResourceApi(_requester);
   RolesResourceApi get roles => new RolesResourceApi(_requester);
 
@@ -34,9 +36,391 @@
 }
 
 
+class OrganizationsResourceApi {
+  final commons.ApiRequester _requester;
+
+  OrganizationsRolesResourceApi get roles => new OrganizationsRolesResourceApi(_requester);
+
+  OrganizationsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+}
+
+
+class OrganizationsRolesResourceApi {
+  final commons.ApiRequester _requester;
+
+  OrganizationsRolesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates a new Role.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [parent] - The resource name of the parent resource in one of the following
+   * formats:
+   * `organizations/{ORGANIZATION_ID}`
+   * `projects/{PROJECT_ID}`
+   * Value must have pattern "^organizations/[^/]+$".
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> create(CreateRoleRequest request, core.String parent) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/roles';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+  /**
+   * Soft deletes a role. The role is suspended and cannot be used to create new
+   * IAM Policy Bindings.
+   * The Role will not be included in `ListRoles()` unless `show_deleted` is set
+   * in the `ListRolesRequest`. The Role contains the deleted boolean set.
+   * Existing Bindings remains, but are inactive. The Role can be undeleted
+   * within 7 days. After 7 days the Role is deleted and all Bindings associated
+   * with the role are removed.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the role in one of the following formats:
+   * `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+   * `projects/{PROJECT_ID}/roles/{ROLE_NAME}`
+   * Value must have pattern "^organizations/[^/]+/roles/[^/]+$".
+   *
+   * [etag] - Used to perform a consistent read-modify-write.
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> delete(core.String name, {core.String etag}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (etag != null) {
+      _queryParams["etag"] = [etag];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+  /**
+   * Gets a Role definition.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the role in one of the following formats:
+   * `roles/{ROLE_NAME}`
+   * `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+   * `projects/{PROJECT_ID}/roles/{ROLE_NAME}`
+   * Value must have pattern "^organizations/[^/]+/roles/[^/]+$".
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+  /**
+   * Lists the Roles defined on a resource.
+   *
+   * Request parameters:
+   *
+   * [parent] - The resource name of the parent resource in one of the following
+   * formats:
+   * `` (empty string) -- this refers to curated roles.
+   * `organizations/{ORGANIZATION_ID}`
+   * `projects/{PROJECT_ID}`
+   * Value must have pattern "^organizations/[^/]+$".
+   *
+   * [pageToken] - Optional pagination token returned in an earlier
+   * ListRolesResponse.
+   *
+   * [pageSize] - Optional limit on the number of roles to include in the
+   * response.
+   *
+   * [view] - Optional view for the returned Role objects.
+   * Possible string values are:
+   * - "BASIC" : A BASIC.
+   * - "FULL" : A FULL.
+   *
+   * [showDeleted] - Include Roles that have been deleted.
+   *
+   * Completes with a [ListRolesResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListRolesResponse> list(core.String parent, {core.String pageToken, core.int pageSize, core.String view, core.bool showDeleted}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+    if (showDeleted != null) {
+      _queryParams["showDeleted"] = ["${showDeleted}"];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/roles';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListRolesResponse.fromJson(data));
+  }
+
+  /**
+   * Updates a Role definition.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the role in one of the following formats:
+   * `roles/{ROLE_NAME}`
+   * `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+   * `projects/{PROJECT_ID}/roles/{ROLE_NAME}`
+   * Value must have pattern "^organizations/[^/]+/roles/[^/]+$".
+   *
+   * [updateMask] - A mask describing which fields in the Role have changed.
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> patch(Role request, core.String name, {core.String updateMask}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "PATCH",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+  /**
+   * Undelete a Role, bringing it back in its previous state.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the role in one of the following formats:
+   * `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+   * `projects/{PROJECT_ID}/roles/{ROLE_NAME}`
+   * Value must have pattern "^organizations/[^/]+/roles/[^/]+$".
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> undelete(UndeleteRoleRequest request, core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + ':undelete';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+}
+
+
+class PermissionsResourceApi {
+  final commons.ApiRequester _requester;
+
+  PermissionsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Lists the permissions testable on a resource.
+   * A permission is testable if it can be tested for an identity on a resource.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * Completes with a [QueryTestablePermissionsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<QueryTestablePermissionsResponse> queryTestablePermissions(QueryTestablePermissionsRequest request) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+
+    _url = 'v1/permissions:queryTestablePermissions';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new QueryTestablePermissionsResponse.fromJson(data));
+  }
+
+}
+
+
 class ProjectsResourceApi {
   final commons.ApiRequester _requester;
 
+  ProjectsRolesResourceApi get roles => new ProjectsRolesResourceApi(_requester);
   ProjectsServiceAccountsResourceApi get serviceAccounts => new ProjectsServiceAccountsResourceApi(_requester);
 
   ProjectsResourceApi(commons.ApiRequester client) : 
@@ -44,6 +428,328 @@
 }
 
 
+class ProjectsRolesResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsRolesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates a new Role.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [parent] - The resource name of the parent resource in one of the following
+   * formats:
+   * `organizations/{ORGANIZATION_ID}`
+   * `projects/{PROJECT_ID}`
+   * Value must have pattern "^projects/[^/]+$".
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> create(CreateRoleRequest request, core.String parent) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/roles';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+  /**
+   * Soft deletes a role. The role is suspended and cannot be used to create new
+   * IAM Policy Bindings.
+   * The Role will not be included in `ListRoles()` unless `show_deleted` is set
+   * in the `ListRolesRequest`. The Role contains the deleted boolean set.
+   * Existing Bindings remains, but are inactive. The Role can be undeleted
+   * within 7 days. After 7 days the Role is deleted and all Bindings associated
+   * with the role are removed.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the role in one of the following formats:
+   * `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+   * `projects/{PROJECT_ID}/roles/{ROLE_NAME}`
+   * Value must have pattern "^projects/[^/]+/roles/[^/]+$".
+   *
+   * [etag] - Used to perform a consistent read-modify-write.
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> delete(core.String name, {core.String etag}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (etag != null) {
+      _queryParams["etag"] = [etag];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+  /**
+   * Gets a Role definition.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the role in one of the following formats:
+   * `roles/{ROLE_NAME}`
+   * `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+   * `projects/{PROJECT_ID}/roles/{ROLE_NAME}`
+   * Value must have pattern "^projects/[^/]+/roles/[^/]+$".
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+  /**
+   * Lists the Roles defined on a resource.
+   *
+   * Request parameters:
+   *
+   * [parent] - The resource name of the parent resource in one of the following
+   * formats:
+   * `` (empty string) -- this refers to curated roles.
+   * `organizations/{ORGANIZATION_ID}`
+   * `projects/{PROJECT_ID}`
+   * Value must have pattern "^projects/[^/]+$".
+   *
+   * [showDeleted] - Include Roles that have been deleted.
+   *
+   * [pageToken] - Optional pagination token returned in an earlier
+   * ListRolesResponse.
+   *
+   * [pageSize] - Optional limit on the number of roles to include in the
+   * response.
+   *
+   * [view] - Optional view for the returned Role objects.
+   * Possible string values are:
+   * - "BASIC" : A BASIC.
+   * - "FULL" : A FULL.
+   *
+   * Completes with a [ListRolesResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListRolesResponse> list(core.String parent, {core.bool showDeleted, core.String pageToken, core.int pageSize, core.String view}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+    if (showDeleted != null) {
+      _queryParams["showDeleted"] = ["${showDeleted}"];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/roles';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListRolesResponse.fromJson(data));
+  }
+
+  /**
+   * Updates a Role definition.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the role in one of the following formats:
+   * `roles/{ROLE_NAME}`
+   * `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+   * `projects/{PROJECT_ID}/roles/{ROLE_NAME}`
+   * Value must have pattern "^projects/[^/]+/roles/[^/]+$".
+   *
+   * [updateMask] - A mask describing which fields in the Role have changed.
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> patch(Role request, core.String name, {core.String updateMask}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "PATCH",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+  /**
+   * Undelete a Role, bringing it back in its previous state.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the role in one of the following formats:
+   * `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+   * `projects/{PROJECT_ID}/roles/{ROLE_NAME}`
+   * Value must have pattern "^projects/[^/]+/roles/[^/]+$".
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> undelete(UndeleteRoleRequest request, core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + ':undelete';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+}
+
+
 class ProjectsServiceAccountsResourceApi {
   final commons.ApiRequester _requester;
 
@@ -769,6 +1475,117 @@
       _requester = client;
 
   /**
+   * Gets a Role definition.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the role in one of the following formats:
+   * `roles/{ROLE_NAME}`
+   * `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+   * `projects/{PROJECT_ID}/roles/{ROLE_NAME}`
+   * Value must have pattern "^roles/[^/]+$".
+   *
+   * Completes with a [Role].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Role> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Role.fromJson(data));
+  }
+
+  /**
+   * Lists the Roles defined on a resource.
+   *
+   * Request parameters:
+   *
+   * [pageToken] - Optional pagination token returned in an earlier
+   * ListRolesResponse.
+   *
+   * [pageSize] - Optional limit on the number of roles to include in the
+   * response.
+   *
+   * [view] - Optional view for the returned Role objects.
+   * Possible string values are:
+   * - "BASIC" : A BASIC.
+   * - "FULL" : A FULL.
+   *
+   * [parent] - The resource name of the parent resource in one of the following
+   * formats:
+   * `` (empty string) -- this refers to curated roles.
+   * `organizations/{ORGANIZATION_ID}`
+   * `projects/{PROJECT_ID}`
+   *
+   * [showDeleted] - Include Roles that have been deleted.
+   *
+   * Completes with a [ListRolesResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListRolesResponse> list({core.String pageToken, core.int pageSize, core.String view, core.String parent, core.bool showDeleted}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+    if (parent != null) {
+      _queryParams["parent"] = [parent];
+    }
+    if (showDeleted != null) {
+      _queryParams["showDeleted"] = ["${showDeleted}"];
+    }
+
+    _url = 'v1/roles';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListRolesResponse.fromJson(data));
+  }
+
+  /**
    * Queries roles that can be granted on a particular resource.
    * A role is grantable if it can be used as the role in a binding for a policy
    * for that resource.
@@ -911,6 +1728,13 @@
    */
   core.String action;
   /**
+   * The condition that is associated with this binding.
+   * This field is GOOGLE_INTERNAL.
+   * This field is not logged in IAM side because it's only for audit logging.
+   * Optional
+   */
+  Expr condition;
+  /**
    * A single identity requesting access for a Cloud Platform resource.
    * Follows the same format of Binding.members.
    * Required
@@ -929,6 +1753,9 @@
     if (_json.containsKey("action")) {
       action = _json["action"];
     }
+    if (_json.containsKey("condition")) {
+      condition = new Expr.fromJson(_json["condition"]);
+    }
     if (_json.containsKey("member")) {
       member = _json["member"];
     }
@@ -942,6 +1769,9 @@
     if (action != null) {
       _json["action"] = action;
     }
+    if (condition != null) {
+      _json["condition"] = (condition).toJson();
+    }
     if (member != null) {
       _json["member"] = member;
     }
@@ -952,6 +1782,36 @@
   }
 }
 
+/** The request to create a new role. */
+class CreateRoleRequest {
+  /** The Role resource to create. */
+  Role role;
+  /** The role id to use for this role. */
+  core.String roleId;
+
+  CreateRoleRequest();
+
+  CreateRoleRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("role")) {
+      role = new Role.fromJson(_json["role"]);
+    }
+    if (_json.containsKey("roleId")) {
+      roleId = _json["roleId"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (role != null) {
+      _json["role"] = (role).toJson();
+    }
+    if (roleId != null) {
+      _json["roleId"] = roleId;
+    }
+    return _json;
+  }
+}
+
 /** The service account key create request. */
 class CreateServiceAccountKeyRequest {
   core.bool includePublicKeyData;
@@ -1070,6 +1930,107 @@
   }
 }
 
+/**
+ * Represents an expression text. Example:
+ *
+ *     title: "User account presence"
+ *     description: "Determines whether the request has a user account"
+ *     expression: "size(request.user) > 0"
+ */
+class Expr {
+  /**
+   * An optional description of the expression. This is a longer text which
+   * describes the expression, e.g. when hovered over it in a UI.
+   */
+  core.String description;
+  /**
+   * Textual representation of an expression in
+   * Common Expression Language syntax.
+   *
+   * The application context of the containing message determines which
+   * well-known feature set of CEL is supported.
+   */
+  core.String expression;
+  /**
+   * An optional string indicating the location of the expression for error
+   * reporting, e.g. a file name and a position in the file.
+   */
+  core.String location;
+  /**
+   * An optional title for the expression, i.e. a short string describing
+   * its purpose. This can be used e.g. in UIs which allow to enter the
+   * expression.
+   */
+  core.String title;
+
+  Expr();
+
+  Expr.fromJson(core.Map _json) {
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("expression")) {
+      expression = _json["expression"];
+    }
+    if (_json.containsKey("location")) {
+      location = _json["location"];
+    }
+    if (_json.containsKey("title")) {
+      title = _json["title"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (expression != null) {
+      _json["expression"] = expression;
+    }
+    if (location != null) {
+      _json["location"] = location;
+    }
+    if (title != null) {
+      _json["title"] = title;
+    }
+    return _json;
+  }
+}
+
+/** The response containing the roles defined under a resource. */
+class ListRolesResponse {
+  /**
+   * To retrieve the next page of results, set
+   * `ListRolesRequest.page_token` to this value.
+   */
+  core.String nextPageToken;
+  /** The Roles defined on this resource. */
+  core.List<Role> roles;
+
+  ListRolesResponse();
+
+  ListRolesResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("roles")) {
+      roles = _json["roles"].map((value) => new Role.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (roles != null) {
+      _json["roles"] = roles.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
 /** The service account keys list response. */
 class ListServiceAccountKeysResponse {
   /** The public keys for the service account. */
@@ -1126,6 +2087,82 @@
   }
 }
 
+/** A permission which can be included by a role. */
+class Permission {
+  /**
+   * The current custom role support level.
+   * Possible string values are:
+   * - "SUPPORTED" : Permission is fully supported for custom role use.
+   * - "TESTING" : Permission is being tested to check custom role
+   * compatibility.
+   * - "NOT_SUPPORTED" : Permission is not supported for custom role use.
+   */
+  core.String customRolesSupportLevel;
+  /** A brief description of what this Permission is used for. */
+  core.String description;
+  /** The name of this Permission. */
+  core.String name;
+  /** This permission can ONLY be used in predefined roles. */
+  core.bool onlyInPredefinedRoles;
+  /**
+   * The current launch stage of the permission.
+   * Possible string values are:
+   * - "ALPHA" : The permission is currently in an alpha phase.
+   * - "BETA" : The permission is currently in a beta phase.
+   * - "GA" : The permission is generally available.
+   * - "DEPRECATED" : The permission is being deprecated.
+   */
+  core.String stage;
+  /** The title of this Permission. */
+  core.String title;
+
+  Permission();
+
+  Permission.fromJson(core.Map _json) {
+    if (_json.containsKey("customRolesSupportLevel")) {
+      customRolesSupportLevel = _json["customRolesSupportLevel"];
+    }
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("onlyInPredefinedRoles")) {
+      onlyInPredefinedRoles = _json["onlyInPredefinedRoles"];
+    }
+    if (_json.containsKey("stage")) {
+      stage = _json["stage"];
+    }
+    if (_json.containsKey("title")) {
+      title = _json["title"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (customRolesSupportLevel != null) {
+      _json["customRolesSupportLevel"] = customRolesSupportLevel;
+    }
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (onlyInPredefinedRoles != null) {
+      _json["onlyInPredefinedRoles"] = onlyInPredefinedRoles;
+    }
+    if (stage != null) {
+      _json["stage"] = stage;
+    }
+    if (title != null) {
+      _json["title"] = title;
+    }
+    return _json;
+  }
+}
+
 /**
  * Defines an Identity and Access Management (IAM) policy. It is used to
  * specify access control policies for Cloud Platform resources.
@@ -1256,6 +2293,14 @@
    * QueryGrantableRolesResponse.
    */
   core.String pageToken;
+  /**
+   *
+   * Possible string values are:
+   * - "BASIC" : Omits the `included_permissions` field.
+   * This is the default value.
+   * - "FULL" : Returns all fields.
+   */
+  core.String view;
 
   QueryGrantableRolesRequest();
 
@@ -1269,6 +2314,9 @@
     if (_json.containsKey("pageToken")) {
       pageToken = _json["pageToken"];
     }
+    if (_json.containsKey("view")) {
+      view = _json["view"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -1282,6 +2330,9 @@
     if (pageToken != null) {
       _json["pageToken"] = pageToken;
     }
+    if (view != null) {
+      _json["view"] = view;
+    }
     return _json;
   }
 }
@@ -1319,10 +2370,111 @@
   }
 }
 
+/** A request to get permissions which can be tested on a resource. */
+class QueryTestablePermissionsRequest {
+  /**
+   * Required. The full resource name to query from the list of testable
+   * permissions.
+   *
+   * The name follows the Google Cloud Platform resource format.
+   * For example, a Cloud Platform project with id `my-project` will be named
+   * `//cloudresourcemanager.googleapis.com/projects/my-project`.
+   */
+  core.String fullResourceName;
+  /**
+   * Optional limit on the number of permissions to include in the response.
+   */
+  core.int pageSize;
+  /**
+   * Optional pagination token returned in an earlier
+   * QueryTestablePermissionsRequest.
+   */
+  core.String pageToken;
+
+  QueryTestablePermissionsRequest();
+
+  QueryTestablePermissionsRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("fullResourceName")) {
+      fullResourceName = _json["fullResourceName"];
+    }
+    if (_json.containsKey("pageSize")) {
+      pageSize = _json["pageSize"];
+    }
+    if (_json.containsKey("pageToken")) {
+      pageToken = _json["pageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (fullResourceName != null) {
+      _json["fullResourceName"] = fullResourceName;
+    }
+    if (pageSize != null) {
+      _json["pageSize"] = pageSize;
+    }
+    if (pageToken != null) {
+      _json["pageToken"] = pageToken;
+    }
+    return _json;
+  }
+}
+
+/** The response containing permissions which can be tested on a resource. */
+class QueryTestablePermissionsResponse {
+  /**
+   * To retrieve the next page of results, set
+   * `QueryTestableRolesRequest.page_token` to this value.
+   */
+  core.String nextPageToken;
+  /** The Permissions testable on the requested resource. */
+  core.List<Permission> permissions;
+
+  QueryTestablePermissionsResponse();
+
+  QueryTestablePermissionsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("permissions")) {
+      permissions = _json["permissions"].map((value) => new Permission.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (permissions != null) {
+      _json["permissions"] = permissions.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
 /** A role in the Identity and Access Management API. */
 class Role {
+  /**
+   * The current deleted state of the role. This field is read only.
+   * It will be ignored in calls to CreateRole and UpdateRole.
+   */
+  core.bool deleted;
   /** Optional.  A human-readable description for the role. */
   core.String description;
+  /** Used to perform a consistent read-modify-write. */
+  core.String etag;
+  core.List<core.int> get etagAsBytes {
+    return convert.BASE64.decode(etag);
+  }
+
+  void set etagAsBytes(core.List<core.int> _bytes) {
+    etag = convert.BASE64.encode(_bytes).replaceAll("/", "_").replaceAll("+", "-");
+  }
+  /**
+   * The names of the permissions this role grants when bound in an IAM policy.
+   */
+  core.List<core.String> includedPermissions;
   /**
    * The name of the role.
    *
@@ -1334,6 +2486,20 @@
    */
   core.String name;
   /**
+   * The current launch stage of the role.
+   * Possible string values are:
+   * - "ALPHA" : The user has indicated this role is currently in an alpha
+   * phase.
+   * - "BETA" : The user has indicated this role is currently in a beta phase.
+   * - "GA" : The user has indicated this role is generally available.
+   * - "DEPRECATED" : The user has indicated this role is being deprecated.
+   * - "DISABLED" : This role is disabled and will not contribute permissions to
+   * any members
+   * it is granted to in policies.
+   * - "EAP" : The user has indicated this role is currently in an eap phase.
+   */
+  core.String stage;
+  /**
    * Optional.  A human-readable title for the role.  Typically this
    * is limited to 100 UTF-8 bytes.
    */
@@ -1342,12 +2508,24 @@
   Role();
 
   Role.fromJson(core.Map _json) {
+    if (_json.containsKey("deleted")) {
+      deleted = _json["deleted"];
+    }
     if (_json.containsKey("description")) {
       description = _json["description"];
     }
+    if (_json.containsKey("etag")) {
+      etag = _json["etag"];
+    }
+    if (_json.containsKey("includedPermissions")) {
+      includedPermissions = _json["includedPermissions"];
+    }
     if (_json.containsKey("name")) {
       name = _json["name"];
     }
+    if (_json.containsKey("stage")) {
+      stage = _json["stage"];
+    }
     if (_json.containsKey("title")) {
       title = _json["title"];
     }
@@ -1355,12 +2533,24 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deleted != null) {
+      _json["deleted"] = deleted;
+    }
     if (description != null) {
       _json["description"] = description;
     }
+    if (etag != null) {
+      _json["etag"] = etag;
+    }
+    if (includedPermissions != null) {
+      _json["includedPermissions"] = includedPermissions;
+    }
     if (name != null) {
       _json["name"] = name;
     }
+    if (stage != null) {
+      _json["stage"] = stage;
+    }
     if (title != null) {
       _json["title"] = title;
     }
@@ -1516,6 +2706,10 @@
    * The private key data. Only provided in `CreateServiceAccountKey`
    * responses. Make sure to keep the private key data secure because it
    * allows for the assertion of the service account identity.
+   * When decoded, the private key data can be used to authenticate with
+   * Google API client libraries and with
+   * <a href="/sdk/gcloud/reference/auth/activate-service-account">gcloud
+   * auth activate-service-account</a>.
    */
   core.String privateKeyData;
   core.List<core.int> get privateKeyDataAsBytes {
@@ -1806,3 +3000,32 @@
     return _json;
   }
 }
+
+/** The request to undelete an existing role. */
+class UndeleteRoleRequest {
+  /** Used to perform a consistent read-modify-write. */
+  core.String etag;
+  core.List<core.int> get etagAsBytes {
+    return convert.BASE64.decode(etag);
+  }
+
+  void set etagAsBytes(core.List<core.int> _bytes) {
+    etag = convert.BASE64.encode(_bytes).replaceAll("/", "_").replaceAll("+", "-");
+  }
+
+  UndeleteRoleRequest();
+
+  UndeleteRoleRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("etag")) {
+      etag = _json["etag"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (etag != null) {
+      _json["etag"] = etag;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/identitytoolkit/v3.dart b/generated/googleapis/lib/identitytoolkit/v3.dart
index a46d54d..69644ca 100644
--- a/generated/googleapis/lib/identitytoolkit/v3.dart
+++ b/generated/googleapis/lib/identitytoolkit/v3.dart
@@ -1282,6 +1282,8 @@
   core.String idToken;
   /** The list of local ID's of the users to inquiry. */
   core.List<core.String> localId;
+  /** Privileged caller can query users by specified phone number. */
+  core.List<core.String> phoneNumber;
 
   IdentitytoolkitRelyingpartyGetAccountInfoRequest();
 
@@ -1298,6 +1300,9 @@
     if (_json.containsKey("localId")) {
       localId = _json["localId"];
     }
+    if (_json.containsKey("phoneNumber")) {
+      phoneNumber = _json["phoneNumber"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -1314,6 +1319,9 @@
     if (localId != null) {
       _json["localId"] = localId;
     }
+    if (phoneNumber != null) {
+      _json["phoneNumber"] = phoneNumber;
+    }
     return _json;
   }
 }
@@ -1547,6 +1555,8 @@
   core.String oobCode;
   /** The new password of the user. */
   core.String password;
+  /** Privileged caller can update user with specified phone number. */
+  core.String phoneNumber;
   /** The photo url of the user. */
   core.String photoUrl;
   /** The associated IDPs of the user. */
@@ -1609,6 +1619,9 @@
     if (_json.containsKey("password")) {
       password = _json["password"];
     }
+    if (_json.containsKey("phoneNumber")) {
+      phoneNumber = _json["phoneNumber"];
+    }
     if (_json.containsKey("photoUrl")) {
       photoUrl = _json["photoUrl"];
     }
@@ -1676,6 +1689,9 @@
     if (password != null) {
       _json["password"] = password;
     }
+    if (phoneNumber != null) {
+      _json["phoneNumber"] = phoneNumber;
+    }
     if (photoUrl != null) {
       _json["photoUrl"] = photoUrl;
     }
@@ -1900,6 +1916,8 @@
   core.String localId;
   /** The new password of the user. */
   core.String password;
+  /** Privileged caller can create user with specified phone number. */
+  core.String phoneNumber;
   /** The photo url of the user. */
   core.String photoUrl;
 
@@ -1936,6 +1954,9 @@
     if (_json.containsKey("password")) {
       password = _json["password"];
     }
+    if (_json.containsKey("phoneNumber")) {
+      phoneNumber = _json["phoneNumber"];
+    }
     if (_json.containsKey("photoUrl")) {
       photoUrl = _json["photoUrl"];
     }
@@ -1973,6 +1994,9 @@
     if (password != null) {
       _json["password"] = password;
     }
+    if (phoneNumber != null) {
+      _json["phoneNumber"] = phoneNumber;
+    }
     if (photoUrl != null) {
       _json["photoUrl"] = photoUrl;
     }
diff --git a/generated/googleapis/lib/kgsearch/v1.dart b/generated/googleapis/lib/kgsearch/v1.dart
index 5ba8ef2..80ae2c2 100644
--- a/generated/googleapis/lib/kgsearch/v1.dart
+++ b/generated/googleapis/lib/kgsearch/v1.dart
@@ -39,13 +39,6 @@
    *
    * Request parameters:
    *
-   * [ids] - The list of entity id to be used for search instead of query
-   * string.
-   * To specify multiple ids in the HTTP request, repeat the parameter in the
-   * URL as in ...?ids=A&ids=B
-   *
-   * [limit] - Limits the number of entities to be returned.
-   *
    * [prefix] - Enables prefix match against names and aliases of entities
    *
    * [query] - The literal query string for search.
@@ -60,6 +53,13 @@
    * query with,
    * e.g. 'en'.
    *
+   * [ids] - The list of entity id to be used for search instead of query
+   * string.
+   * To specify multiple ids in the HTTP request, repeat the parameter in the
+   * URL as in ...?ids=A&ids=B
+   *
+   * [limit] - Limits the number of entities to be returned.
+   *
    * Completes with a [SearchResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -68,7 +68,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<SearchResponse> search({core.List<core.String> ids, core.int limit, core.bool prefix, core.String query, core.List<core.String> types, core.bool indent, core.List<core.String> languages}) {
+  async.Future<SearchResponse> search({core.bool prefix, core.String query, core.List<core.String> types, core.bool indent, core.List<core.String> languages, core.List<core.String> ids, core.int limit}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -76,12 +76,6 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (ids != null) {
-      _queryParams["ids"] = ids;
-    }
-    if (limit != null) {
-      _queryParams["limit"] = ["${limit}"];
-    }
     if (prefix != null) {
       _queryParams["prefix"] = ["${prefix}"];
     }
@@ -97,6 +91,12 @@
     if (languages != null) {
       _queryParams["languages"] = languages;
     }
+    if (ids != null) {
+      _queryParams["ids"] = ids;
+    }
+    if (limit != null) {
+      _queryParams["limit"] = ["${limit}"];
+    }
 
     _url = 'v1/entities:search';
 
diff --git a/generated/googleapis/lib/language/v1.dart b/generated/googleapis/lib/language/v1.dart
index eacff7d..6491348 100644
--- a/generated/googleapis/lib/language/v1.dart
+++ b/generated/googleapis/lib/language/v1.dart
@@ -20,6 +20,11 @@
  * and text annotations.
  */
 class LanguageApi {
+  /**
+   * Apply machine learning models to reveal the structure and meaning of text
+   */
+  static const CloudLanguageScope = "https://www.googleapis.com/auth/cloud-language";
+
   /** View and manage your data across Google Cloud Platform services */
   static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
 
@@ -1331,8 +1336,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/logging/v2.dart b/generated/googleapis/lib/logging/v2.dart
index 3ae50ea..3b8992c 100644
--- a/generated/googleapis/lib/logging/v2.dart
+++ b/generated/googleapis/lib/logging/v2.dart
@@ -127,15 +127,15 @@
    *
    * Value must have pattern "^billingAccounts/[^/]+$".
    *
+   * [pageSize] - Optional. The maximum number of results to return from this
+   * request. Non-positive values are ignored. The presence of nextPageToken in
+   * the response indicates that more results might be available.
+   *
    * [pageToken] - Optional. If present, then retrieve the next batch of results
    * from the preceding call to this method. pageToken must be the value of
    * nextPageToken from the previous response. The values of other method
    * parameters should be identical to those in the previous call.
    *
-   * [pageSize] - Optional. The maximum number of results to return from this
-   * request. Non-positive values are ignored. The presence of nextPageToken in
-   * the response indicates that more results might be available.
-   *
    * Completes with a [ListLogsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -144,7 +144,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListLogsResponse> list(core.String parent, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListLogsResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -155,12 +155,12 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + '/logs';
 
@@ -356,15 +356,15 @@
    *
    * Value must have pattern "^billingAccounts/[^/]+$".
    *
+   * [pageSize] - Optional. The maximum number of results to return from this
+   * request. Non-positive values are ignored. The presence of nextPageToken in
+   * the response indicates that more results might be available.
+   *
    * [pageToken] - Optional. If present, then retrieve the next batch of results
    * from the preceding call to this method. pageToken must be the value of
    * nextPageToken from the previous response. The values of other method
    * parameters should be identical to those in the previous call.
    *
-   * [pageSize] - Optional. The maximum number of results to return from this
-   * request. Non-positive values are ignored. The presence of nextPageToken in
-   * the response indicates that more results might be available.
-   *
    * Completes with a [ListSinksResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -373,7 +373,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListSinksResponse> list(core.String parent, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListSinksResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -384,12 +384,12 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + '/sinks';
 
@@ -874,15 +874,15 @@
    *
    * Value must have pattern "^folders/[^/]+$".
    *
+   * [pageSize] - Optional. The maximum number of results to return from this
+   * request. Non-positive values are ignored. The presence of nextPageToken in
+   * the response indicates that more results might be available.
+   *
    * [pageToken] - Optional. If present, then retrieve the next batch of results
    * from the preceding call to this method. pageToken must be the value of
    * nextPageToken from the previous response. The values of other method
    * parameters should be identical to those in the previous call.
    *
-   * [pageSize] - Optional. The maximum number of results to return from this
-   * request. Non-positive values are ignored. The presence of nextPageToken in
-   * the response indicates that more results might be available.
-   *
    * Completes with a [ListSinksResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -891,7 +891,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListSinksResponse> list(core.String parent, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListSinksResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -902,12 +902,12 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + '/sinks';
 
@@ -1006,15 +1006,15 @@
    *
    * Request parameters:
    *
+   * [pageSize] - Optional. The maximum number of results to return from this
+   * request. Non-positive values are ignored. The presence of nextPageToken in
+   * the response indicates that more results might be available.
+   *
    * [pageToken] - Optional. If present, then retrieve the next batch of results
    * from the preceding call to this method. pageToken must be the value of
    * nextPageToken from the previous response. The values of other method
    * parameters should be identical to those in the previous call.
    *
-   * [pageSize] - Optional. The maximum number of results to return from this
-   * request. Non-positive values are ignored. The presence of nextPageToken in
-   * the response indicates that more results might be available.
-   *
    * Completes with a [ListMonitoredResourceDescriptorsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1023,7 +1023,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListMonitoredResourceDescriptorsResponse> list({core.String pageToken, core.int pageSize}) {
+  async.Future<ListMonitoredResourceDescriptorsResponse> list({core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1031,12 +1031,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v2/monitoredResourceDescriptors';
 
@@ -1134,15 +1134,15 @@
    *
    * Value must have pattern "^organizations/[^/]+$".
    *
-   * [pageSize] - Optional. The maximum number of results to return from this
-   * request. Non-positive values are ignored. The presence of nextPageToken in
-   * the response indicates that more results might be available.
-   *
    * [pageToken] - Optional. If present, then retrieve the next batch of results
    * from the preceding call to this method. pageToken must be the value of
    * nextPageToken from the previous response. The values of other method
    * parameters should be identical to those in the previous call.
    *
+   * [pageSize] - Optional. The maximum number of results to return from this
+   * request. Non-positive values are ignored. The presence of nextPageToken in
+   * the response indicates that more results might be available.
+   *
    * Completes with a [ListLogsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1151,7 +1151,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListLogsResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
+  async.Future<ListLogsResponse> list(core.String parent, {core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1162,12 +1162,12 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
 
     _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + '/logs';
 
@@ -3180,9 +3180,8 @@
    */
   core.String name;
   /**
-   * Optional. The log entry format to use for this sink's exported log entries.
-   * The v2 format is used by default. The v1 format is deprecated and should be
-   * used only as part of a migration effort to v2. See Migration to the v2 API.
+   * Deprecated. The log entry format to use for this sink's exported log
+   * entries. The v2 format is used by default and cannot be changed.
    * Possible string values are:
    * - "VERSION_FORMAT_UNSPECIFIED" : An unspecified format version that will
    * default to V2.
diff --git a/generated/googleapis/lib/manufacturers/v1.dart b/generated/googleapis/lib/manufacturers/v1.dart
index 98dc14f..9affd68 100644
--- a/generated/googleapis/lib/manufacturers/v1.dart
+++ b/generated/googleapis/lib/manufacturers/v1.dart
@@ -176,12 +176,12 @@
    * `account_id` - The ID of the Manufacturer Center account.
    * Value must have pattern "^accounts/[^/]+$".
    *
-   * [pageToken] - The token returned by the previous request.
-   *
    * [pageSize] - Maximum number of product statuses to return in the response,
    * used for
    * paging.
    *
+   * [pageToken] - The token returned by the previous request.
+   *
    * Completes with a [ListProductsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -190,7 +190,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListProductsResponse> list(core.String parent, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListProductsResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -201,12 +201,12 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/products';
 
diff --git a/generated/googleapis/lib/ml/v1.dart b/generated/googleapis/lib/ml/v1.dart
index 2cabb42..f899547 100644
--- a/generated/googleapis/lib/ml/v1.dart
+++ b/generated/googleapis/lib/ml/v1.dart
@@ -1294,7 +1294,7 @@
 }
 
 /** Options for automatically scaling a model. */
-class GoogleCloudMlV1AutomaticScaling {
+class GoogleCloudMlV1AutoScaling {
   /**
    * Optional. The minimum number of nodes to allocate for this model. These
    * nodes are always up, starting from the time the model is deployed, so the
@@ -1317,9 +1317,9 @@
    */
   core.int minNodes;
 
-  GoogleCloudMlV1AutomaticScaling();
+  GoogleCloudMlV1AutoScaling();
 
-  GoogleCloudMlV1AutomaticScaling.fromJson(core.Map _json) {
+  GoogleCloudMlV1AutoScaling.fromJson(core.Map _json) {
     if (_json.containsKey("minNodes")) {
       minNodes = _json["minNodes"];
     }
@@ -2736,7 +2736,7 @@
    * taken to ramp up traffic according to the model's ability to scale
    * or you will start seeing increases in latency and 429 response codes.
    */
-  GoogleCloudMlV1AutomaticScaling automaticScaling;
+  GoogleCloudMlV1AutoScaling autoScaling;
   /** Output only. The time the version was created. */
   core.String createTime;
   /**
@@ -2744,7 +2744,7 @@
    * create the version. See the
    * [overview of model
    * deployment](/ml-engine/docs/concepts/deployment-overview) for more
-   * informaiton.
+   * information.
    *
    * When passing Version to
    * [projects.models.versions.create](/ml-engine/reference/rest/v1/projects.models.versions/create)
@@ -2772,7 +2772,7 @@
   core.String lastUseTime;
   /**
    * Manually select the number of nodes to use for serving the
-   * model. You should generally use `automatic_scaling` with an appropriate
+   * model. You should generally use `auto_scaling` with an appropriate
    * `min_nodes` instead, but this option is available if you want more
    * predictable billing. Beware that latency and error rates will increase
    * if the traffic exceeds that capability of the system to serve it based
@@ -2804,8 +2804,8 @@
   GoogleCloudMlV1Version();
 
   GoogleCloudMlV1Version.fromJson(core.Map _json) {
-    if (_json.containsKey("automaticScaling")) {
-      automaticScaling = new GoogleCloudMlV1AutomaticScaling.fromJson(_json["automaticScaling"]);
+    if (_json.containsKey("autoScaling")) {
+      autoScaling = new GoogleCloudMlV1AutoScaling.fromJson(_json["autoScaling"]);
     }
     if (_json.containsKey("createTime")) {
       createTime = _json["createTime"];
@@ -2841,8 +2841,8 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (automaticScaling != null) {
-      _json["automaticScaling"] = (automaticScaling).toJson();
+    if (autoScaling != null) {
+      _json["autoScaling"] = (autoScaling).toJson();
     }
     if (createTime != null) {
       _json["createTime"] = createTime;
@@ -2879,7 +2879,7 @@
 }
 
 /** Options for automatically scaling a model. */
-class GoogleCloudMlV1beta1AutomaticScaling {
+class GoogleCloudMlV1beta1AutoScaling {
   /**
    * Optional. The minimum number of nodes to allocate for this model. These
    * nodes are always up, starting from the time the model is deployed, so the
@@ -2902,9 +2902,9 @@
    */
   core.int minNodes;
 
-  GoogleCloudMlV1beta1AutomaticScaling();
+  GoogleCloudMlV1beta1AutoScaling();
 
-  GoogleCloudMlV1beta1AutomaticScaling.fromJson(core.Map _json) {
+  GoogleCloudMlV1beta1AutoScaling.fromJson(core.Map _json) {
     if (_json.containsKey("minNodes")) {
       minNodes = _json["minNodes"];
     }
@@ -2925,7 +2925,7 @@
    * The number of nodes to allocate for this model. These nodes are always up,
    * starting from the time the model is deployed, so the cost of operating
    * this model will be proportional to `nodes` * number of hours since
-   * last billing cycle.
+   * last billing cycle plus the cost for each prediction performed.
    */
   core.int nodes;
 
@@ -3038,7 +3038,7 @@
    * taken to ramp up traffic according to the model's ability to scale
    * or you will start seeing increases in latency and 429 response codes.
    */
-  GoogleCloudMlV1beta1AutomaticScaling automaticScaling;
+  GoogleCloudMlV1beta1AutoScaling autoScaling;
   /** Output only. The time the version was created. */
   core.String createTime;
   /**
@@ -3046,7 +3046,7 @@
    * create the version. See the
    * [overview of model
    * deployment](/ml-engine/docs/concepts/deployment-overview) for more
-   * informaiton.
+   * information.
    *
    * When passing Version to
    * [projects.models.versions.create](/ml-engine/reference/rest/v1beta1/projects.models.versions/create)
@@ -3074,11 +3074,11 @@
   core.String lastUseTime;
   /**
    * Manually select the number of nodes to use for serving the
-   * model. You should generally use `automatic_scaling` with an appropriate
-   * `min_nodes` instead, but this option is available if you want predictable
-   * billing. Beware that latency and error rates will increase if the
-   * traffic exceeds that capability of the system to serve it based on
-   * the selected number of nodes.
+   * model. You should generally use `auto_scaling` with an appropriate
+   * `min_nodes` instead, but this option is available if you want more
+   * predictable billing. Beware that latency and error rates will increase
+   * if the traffic exceeds that capability of the system to serve it based
+   * on the selected number of nodes.
    */
   GoogleCloudMlV1beta1ManualScaling manualScaling;
   /**
@@ -3095,7 +3095,7 @@
   /**
    * Output only. The state of a version.
    * Possible string values are:
-   * - "UNKNOWN" : / The version state is unspecified.
+   * - "UNKNOWN" : The version state is unspecified.
    * - "READY" : The version is ready for prediction.
    * - "CREATING" : The version is still in the process of creation.
    * - "FAILED" : The version failed to be created, possibly cancelled.
@@ -3106,8 +3106,8 @@
   GoogleCloudMlV1beta1Version();
 
   GoogleCloudMlV1beta1Version.fromJson(core.Map _json) {
-    if (_json.containsKey("automaticScaling")) {
-      automaticScaling = new GoogleCloudMlV1beta1AutomaticScaling.fromJson(_json["automaticScaling"]);
+    if (_json.containsKey("autoScaling")) {
+      autoScaling = new GoogleCloudMlV1beta1AutoScaling.fromJson(_json["autoScaling"]);
     }
     if (_json.containsKey("createTime")) {
       createTime = _json["createTime"];
@@ -3143,8 +3143,8 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (automaticScaling != null) {
-      _json["automaticScaling"] = (automaticScaling).toJson();
+    if (autoScaling != null) {
+      _json["autoScaling"] = (autoScaling).toJson();
     }
     if (createTime != null) {
       _json["createTime"] = createTime;
@@ -4165,8 +4165,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/monitoring/v3.dart b/generated/googleapis/lib/monitoring/v3.dart
index 62c146e..3a09d37 100644
--- a/generated/googleapis/lib/monitoring/v3.dart
+++ b/generated/googleapis/lib/monitoring/v3.dart
@@ -269,11 +269,6 @@
    * "projects/{project_id_or_number}".
    * Value must have pattern "^projects/[^/]+$".
    *
-   * [childrenOfGroup] - 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.
-   *
    * [descendantsOfGroup] - 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
@@ -295,6 +290,11 @@
    * ancestor. If the specified group has no immediate parent, the results are
    * empty.
    *
+   * [childrenOfGroup] - 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.
+   *
    * Completes with a [ListGroupsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -303,7 +303,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListGroupsResponse> list(core.String name, {core.String childrenOfGroup, core.String descendantsOfGroup, core.String pageToken, core.int pageSize, core.String ancestorsOfGroup}) {
+  async.Future<ListGroupsResponse> list(core.String name, {core.String descendantsOfGroup, core.String pageToken, core.int pageSize, core.String ancestorsOfGroup, core.String childrenOfGroup}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -314,9 +314,6 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (childrenOfGroup != null) {
-      _queryParams["childrenOfGroup"] = [childrenOfGroup];
-    }
     if (descendantsOfGroup != null) {
       _queryParams["descendantsOfGroup"] = [descendantsOfGroup];
     }
@@ -329,6 +326,9 @@
     if (ancestorsOfGroup != null) {
       _queryParams["ancestorsOfGroup"] = [ancestorsOfGroup];
     }
+    if (childrenOfGroup != null) {
+      _queryParams["childrenOfGroup"] = [childrenOfGroup];
+    }
 
     _url = 'v3/' + commons.Escaper.ecapeVariableReserved('$name') + '/groups';
 
@@ -428,13 +428,13 @@
    * field causes the method to return additional results from the previous
    * method call.
    *
-   * [pageSize] - A positive number that is the maximum number of results to
-   * return.
-   *
    * [interval_startTime] - Optional. The beginning of the time interval. The
    * default value for the start time is the end time. The start time must not
    * be later than the end time.
    *
+   * [pageSize] - A positive number that is the maximum number of results to
+   * return.
+   *
    * Completes with a [ListGroupMembersResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -443,7 +443,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListGroupMembersResponse> list(core.String name, {core.String interval_endTime, core.String filter, core.String pageToken, core.int pageSize, core.String interval_startTime}) {
+  async.Future<ListGroupMembersResponse> list(core.String name, {core.String interval_endTime, core.String filter, core.String pageToken, core.String interval_startTime, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -463,12 +463,12 @@
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (interval_startTime != null) {
       _queryParams["interval.startTime"] = [interval_startTime];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
 
     _url = 'v3/' + commons.Escaper.ecapeVariableReserved('$name') + '/members';
 
@@ -635,6 +635,12 @@
    * "projects/{project_id_or_number}".
    * Value must have pattern "^projects/[^/]+$".
    *
+   * [filter] - If this field is empty, all custom and system-defined metric
+   * descriptors are returned. Otherwise, the filter specifies which metric
+   * descriptors are to be returned. For example, the following filter matches
+   * all custom metrics:
+   * metric.type = starts_with("custom.googleapis.com/")
+   *
    * [pageToken] - 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
@@ -643,12 +649,6 @@
    * [pageSize] - A positive number that is the maximum number of results to
    * return.
    *
-   * [filter] - If this field is empty, all custom and system-defined metric
-   * descriptors are returned. Otherwise, the filter specifies which metric
-   * descriptors are to be returned. For example, the following filter matches
-   * all custom metrics:
-   * metric.type = starts_with("custom.googleapis.com/")
-   *
    * Completes with a [ListMetricDescriptorsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -657,7 +657,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListMetricDescriptorsResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListMetricDescriptorsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -668,15 +668,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
 
     _url = 'v3/' + commons.Escaper.ecapeVariableReserved('$name') + '/metricDescriptors';
 
@@ -753,12 +753,6 @@
    * "projects/{project_id_or_number}".
    * Value must have pattern "^projects/[^/]+$".
    *
-   * [filter] - An optional filter 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] - 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
@@ -767,6 +761,12 @@
    * [pageSize] - A positive number that is the maximum number of results to
    * return.
    *
+   * [filter] - An optional filter 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
+   *
    * Completes with a [ListMonitoredResourceDescriptorsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -775,7 +775,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListMonitoredResourceDescriptorsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
+  async.Future<ListMonitoredResourceDescriptorsResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -786,15 +786,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
 
     _url = 'v3/' + commons.Escaper.ecapeVariableReserved('$name') + '/monitoredResourceDescriptors';
 
@@ -876,34 +876,6 @@
    * "projects/{project_id_or_number}".
    * Value must have pattern "^projects/[^/]+$".
    *
-   * [aggregation_groupByFields] - 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. It is not possible to reduce across different resource types,
-   * so this field implicitly contains resource.type. Fields not specified in
-   * groupByFields are aggregated away. If groupByFields is not specified and
-   * all the time series have the same resource type, then the time series are
-   * aggregated into a single output time series. If crossSeriesReducer is not
-   * defined, this field is ignored.
-   *
-   * [interval_endTime] - Required. The end of the time interval.
-   *
-   * [aggregation_alignmentPeriod] - The alignment period for per-time series
-   * 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.
-   *
-   * [pageSize] - 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.
-   *
    * [orderBy] - 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.
@@ -930,6 +902,7 @@
    * - "REDUCE_PERCENTILE_95" : A REDUCE_PERCENTILE_95.
    * - "REDUCE_PERCENTILE_50" : A REDUCE_PERCENTILE_50.
    * - "REDUCE_PERCENTILE_05" : A REDUCE_PERCENTILE_05.
+   * - "REDUCE_FRACTION_LESS_THAN" : A REDUCE_FRACTION_LESS_THAN.
    *
    * [filter] - A monitoring filter that specifies which time series should be
    * returned. The filter must specify a single metric type, and can
@@ -968,6 +941,7 @@
    * - "ALIGN_PERCENTILE_95" : A ALIGN_PERCENTILE_95.
    * - "ALIGN_PERCENTILE_50" : A ALIGN_PERCENTILE_50.
    * - "ALIGN_PERCENTILE_05" : A ALIGN_PERCENTILE_05.
+   * - "ALIGN_MAKE_DISTRIBUTION" : A ALIGN_MAKE_DISTRIBUTION.
    *
    * [interval_startTime] - Optional. The beginning of the time interval. The
    * default value for the start time is the end time. The start time must not
@@ -978,6 +952,42 @@
    * - "FULL" : A FULL.
    * - "HEADERS" : A HEADERS.
    *
+   * [aggregation_reduceFractionLessThanParams_threshold] - The threshold used
+   * by the REDUCE_FRACTION_LESS_THAN cross-series reducer.
+   *
+   * [aggregation_groupByFields] - 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. It is not possible to reduce across different resource types,
+   * so this field implicitly contains resource.type. Fields not specified in
+   * groupByFields are aggregated away. If groupByFields is not specified and
+   * all the time series have the same resource type, then the time series are
+   * aggregated into a single output time series. If crossSeriesReducer is not
+   * defined, this field is ignored.
+   *
+   * [interval_endTime] - Required. The end of the time interval.
+   *
+   * [aggregation_alignmentPeriod] - The alignment period for per-time series
+   * 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.
+   *
+   * [pageSize] - 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.
+   *
+   * [outputPeriod] - If outputPeriod is specified, the data in the response
+   * will have the given period. Must be equal to or longer than
+   * alignmentPeriod. Must not be used when view is HEADERS. Only used when
+   * interval describes an interval longer than a single point.
+   *
    * Completes with a [ListTimeSeriesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -986,7 +996,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTimeSeriesResponse> list(core.String name, {core.List<core.String> aggregation_groupByFields, core.String interval_endTime, core.String aggregation_alignmentPeriod, core.int pageSize, core.String orderBy, core.String aggregation_crossSeriesReducer, core.String filter, core.String pageToken, core.String aggregation_perSeriesAligner, core.String interval_startTime, core.String view}) {
+  async.Future<ListTimeSeriesResponse> list(core.String name, {core.String orderBy, core.String aggregation_crossSeriesReducer, core.String filter, core.String pageToken, core.String aggregation_perSeriesAligner, core.String interval_startTime, core.String view, core.double aggregation_reduceFractionLessThanParams_threshold, core.List<core.String> aggregation_groupByFields, core.String interval_endTime, core.String aggregation_alignmentPeriod, core.int pageSize, core.String outputPeriod}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -997,18 +1007,6 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (aggregation_groupByFields != null) {
-      _queryParams["aggregation.groupByFields"] = aggregation_groupByFields;
-    }
-    if (interval_endTime != null) {
-      _queryParams["interval.endTime"] = [interval_endTime];
-    }
-    if (aggregation_alignmentPeriod != null) {
-      _queryParams["aggregation.alignmentPeriod"] = [aggregation_alignmentPeriod];
-    }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (orderBy != null) {
       _queryParams["orderBy"] = [orderBy];
     }
@@ -1030,6 +1028,24 @@
     if (view != null) {
       _queryParams["view"] = [view];
     }
+    if (aggregation_reduceFractionLessThanParams_threshold != null) {
+      _queryParams["aggregation.reduceFractionLessThanParams.threshold"] = ["${aggregation_reduceFractionLessThanParams_threshold}"];
+    }
+    if (aggregation_groupByFields != null) {
+      _queryParams["aggregation.groupByFields"] = aggregation_groupByFields;
+    }
+    if (interval_endTime != null) {
+      _queryParams["interval.endTime"] = [interval_endTime];
+    }
+    if (aggregation_alignmentPeriod != null) {
+      _queryParams["aggregation.alignmentPeriod"] = [aggregation_alignmentPeriod];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (outputPeriod != null) {
+      _queryParams["outputPeriod"] = [outputPeriod];
+    }
 
     _url = 'v3/' + commons.Escaper.ecapeVariableReserved('$name') + '/timeSeries';
 
diff --git a/generated/googleapis/lib/partners/v2.dart b/generated/googleapis/lib/partners/v2.dart
index df3855e..9db967f 100644
--- a/generated/googleapis/lib/partners/v2.dart
+++ b/generated/googleapis/lib/partners/v2.dart
@@ -50,11 +50,11 @@
    *
    * Request parameters:
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [pageToken] - A token identifying a page of results that the server
    * returns.
    * Typically, this is the value of `ListAnalyticsResponse.next_page_token`
@@ -99,7 +99,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListAnalyticsResponse> list({core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String pageToken, core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
+  async.Future<ListAnalyticsResponse> list({core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String pageToken, core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -107,12 +107,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
     if (requestMetadata_partnersSessionId != null) {
       _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
     }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
@@ -215,6 +215,13 @@
    *
    * [companyId] - The ID of the company to retrieve.
    *
+   * [address] - The address to use for sorting the company's addresses by
+   * proximity.
+   * If not given, the geo-located address of the request is used.
+   * Used when order_by is set.
+   *
+   * [requestMetadata_locale] - Locale to use for the current request.
+   *
    * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
    * where the traffic comes from.
    * An identifier has multiple letters created by a team which redirected the
@@ -223,42 +230,35 @@
    * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
    * the user's geo-located IP address.
    *
-   * [requestMetadata_experimentIds] - Experiment IDs the current request
-   * belongs to.
-   *
    * [currencyCode] - If the company's budget is in a different currency code
    * than this one, then
    * the converted budget is converted to this currency code.
    *
+   * [requestMetadata_experimentIds] - Experiment IDs the current request
+   * belongs to.
+   *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
    * [orderBy] - How to order addresses within the returned company. Currently,
    * only
    * `address` and `address desc` is supported which will sorted by closest to
    * farthest in distance from given address and farthest to closest distance
    * from given address respectively.
    *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * [view] - The view of `Company` resource to be returned. This must not be
    * `COMPANY_VIEW_UNSPECIFIED`.
    * Possible string values are:
    * - "COMPANY_VIEW_UNSPECIFIED" : A COMPANY_VIEW_UNSPECIFIED.
    * - "CV_GOOGLE_PARTNER_SEARCH" : A CV_GOOGLE_PARTNER_SEARCH.
    *
-   * [address] - The address to use for sorting the company's addresses by
-   * proximity.
-   * If not given, the geo-located address of the request is used.
-   * Used when order_by is set.
-   *
-   * [requestMetadata_locale] - Locale to use for the current request.
-   *
    * Completes with a [GetCompanyResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -267,7 +267,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<GetCompanyResponse> get(core.String companyId, {core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String currencyCode, core.String orderBy, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String view, core.String address, core.String requestMetadata_locale}) {
+  async.Future<GetCompanyResponse> get(core.String companyId, {core.String address, core.String requestMetadata_locale, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_userOverrides_ipAddress, core.String currencyCode, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String orderBy, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String view}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -278,39 +278,39 @@
     if (companyId == null) {
       throw new core.ArgumentError("Parameter companyId is required.");
     }
+    if (address != null) {
+      _queryParams["address"] = [address];
+    }
+    if (requestMetadata_locale != null) {
+      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
+    }
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
     if (requestMetadata_userOverrides_ipAddress != null) {
       _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
     }
-    if (requestMetadata_experimentIds != null) {
-      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
-    }
     if (currencyCode != null) {
       _queryParams["currencyCode"] = [currencyCode];
     }
-    if (orderBy != null) {
-      _queryParams["orderBy"] = [orderBy];
+    if (requestMetadata_experimentIds != null) {
+      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
     }
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
     }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
     if (view != null) {
       _queryParams["view"] = [view];
     }
-    if (address != null) {
-      _queryParams["address"] = [address];
-    }
-    if (requestMetadata_locale != null) {
-      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
-    }
 
     _url = 'v2/companies/' + commons.Escaper.ecapeVariable('$companyId');
 
@@ -329,61 +329,6 @@
    *
    * Request parameters:
    *
-   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
-   * instead of the user's ID.
-   *
-   * [minMonthlyBudget_currencyCode] - The 3-letter currency code defined in ISO
-   * 4217.
-   *
-   * [view] - The view of the `Company` resource to be returned. This must not
-   * be
-   * `COMPANY_VIEW_UNSPECIFIED`.
-   * Possible string values are:
-   * - "COMPANY_VIEW_UNSPECIFIED" : A COMPANY_VIEW_UNSPECIFIED.
-   * - "CV_GOOGLE_PARTNER_SEARCH" : A CV_GOOGLE_PARTNER_SEARCH.
-   *
-   * [requestMetadata_locale] - Locale to use for the current request.
-   *
-   * [address] - The address to use when searching for companies.
-   * If not given, the geo-located address of the request is used.
-   *
-   * [minMonthlyBudget_units] - The whole units of the amount.
-   * For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
-   *
-   * [maxMonthlyBudget_nanos] - Number of nano (10^-9) units of the amount.
-   * The value must be between -999,999,999 and +999,999,999 inclusive.
-   * If `units` is positive, `nanos` must be positive or zero.
-   * If `units` is zero, `nanos` can be positive, zero, or negative.
-   * If `units` is negative, `nanos` must be negative or zero.
-   * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
-   *
-   * [services] - List of services that the returned agencies should provide. If
-   * this is
-   * not empty, any returned agency must have at least one of these services,
-   * or one of the specializations in the "specializations" field.
-   *
-   * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
-   * where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
-   * [maxMonthlyBudget_units] - The whole units of the amount.
-   * For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
-   *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
-   * [minMonthlyBudget_nanos] - Number of nano (10^-9) units of the amount.
-   * The value must be between -999,999,999 and +999,999,999 inclusive.
-   * If `units` is positive, `nanos` must be positive or zero.
-   * If `units` is zero, `nanos` can be positive, zero, or negative.
-   * If `units` is negative, `nanos` must be negative or zero.
-   * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
-   *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [companyName] - Company name to search for.
    *
    * [pageToken] - A token identifying a page of results that the server
@@ -430,6 +375,61 @@
    * [maxMonthlyBudget_currencyCode] - The 3-letter currency code defined in ISO
    * 4217.
    *
+   * [minMonthlyBudget_currencyCode] - The 3-letter currency code defined in ISO
+   * 4217.
+   *
+   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
+   * instead of the user's ID.
+   *
+   * [view] - The view of the `Company` resource to be returned. This must not
+   * be
+   * `COMPANY_VIEW_UNSPECIFIED`.
+   * Possible string values are:
+   * - "COMPANY_VIEW_UNSPECIFIED" : A COMPANY_VIEW_UNSPECIFIED.
+   * - "CV_GOOGLE_PARTNER_SEARCH" : A CV_GOOGLE_PARTNER_SEARCH.
+   *
+   * [requestMetadata_locale] - Locale to use for the current request.
+   *
+   * [address] - The address to use when searching for companies.
+   * If not given, the geo-located address of the request is used.
+   *
+   * [minMonthlyBudget_units] - The whole units of the amount.
+   * For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
+   *
+   * [maxMonthlyBudget_nanos] - Number of nano (10^-9) units of the amount.
+   * The value must be between -999,999,999 and +999,999,999 inclusive.
+   * If `units` is positive, `nanos` must be positive or zero.
+   * If `units` is zero, `nanos` can be positive, zero, or negative.
+   * If `units` is negative, `nanos` must be negative or zero.
+   * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
+   *
+   * [services] - List of services that the returned agencies should provide. If
+   * this is
+   * not empty, any returned agency must have at least one of these services,
+   * or one of the specializations in the "specializations" field.
+   *
+   * [maxMonthlyBudget_units] - The whole units of the amount.
+   * For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
+   *
+   * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
+   * where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
+   * [minMonthlyBudget_nanos] - Number of nano (10^-9) units of the amount.
+   * The value must be between -999,999,999 and +999,999,999 inclusive.
+   * If `units` is positive, `nanos` must be positive or zero.
+   * If `units` is zero, `nanos` can be positive, zero, or negative.
+   * If `units` is negative, `nanos` must be negative or zero.
+   * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
+   *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * Completes with a [ListCompaniesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -438,7 +438,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListCompaniesResponse> list({core.String requestMetadata_userOverrides_userId, core.String minMonthlyBudget_currencyCode, core.String view, core.String requestMetadata_locale, core.String address, core.String minMonthlyBudget_units, core.int maxMonthlyBudget_nanos, core.List<core.String> services, core.String requestMetadata_trafficSource_trafficSourceId, core.String maxMonthlyBudget_units, core.String requestMetadata_trafficSource_trafficSubId, core.int minMonthlyBudget_nanos, core.String requestMetadata_partnersSessionId, core.String companyName, core.String pageToken, core.List<core.String> industries, core.String websiteUrl, core.List<core.String> gpsMotivations, core.List<core.String> languageCodes, core.int pageSize, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String orderBy, core.List<core.String> specializations, core.String maxMonthlyBudget_currencyCode}) {
+  async.Future<ListCompaniesResponse> list({core.String companyName, core.String pageToken, core.List<core.String> industries, core.String websiteUrl, core.List<core.String> gpsMotivations, core.List<core.String> languageCodes, core.int pageSize, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String orderBy, core.List<core.String> specializations, core.String maxMonthlyBudget_currencyCode, core.String minMonthlyBudget_currencyCode, core.String requestMetadata_userOverrides_userId, core.String view, core.String requestMetadata_locale, core.String address, core.String minMonthlyBudget_units, core.int maxMonthlyBudget_nanos, core.List<core.String> services, core.String maxMonthlyBudget_units, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_trafficSource_trafficSubId, core.int minMonthlyBudget_nanos, core.String requestMetadata_partnersSessionId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -446,45 +446,6 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
-    if (minMonthlyBudget_currencyCode != null) {
-      _queryParams["minMonthlyBudget.currencyCode"] = [minMonthlyBudget_currencyCode];
-    }
-    if (view != null) {
-      _queryParams["view"] = [view];
-    }
-    if (requestMetadata_locale != null) {
-      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
-    }
-    if (address != null) {
-      _queryParams["address"] = [address];
-    }
-    if (minMonthlyBudget_units != null) {
-      _queryParams["minMonthlyBudget.units"] = [minMonthlyBudget_units];
-    }
-    if (maxMonthlyBudget_nanos != null) {
-      _queryParams["maxMonthlyBudget.nanos"] = ["${maxMonthlyBudget_nanos}"];
-    }
-    if (services != null) {
-      _queryParams["services"] = services;
-    }
-    if (requestMetadata_trafficSource_trafficSourceId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
-    }
-    if (maxMonthlyBudget_units != null) {
-      _queryParams["maxMonthlyBudget.units"] = [maxMonthlyBudget_units];
-    }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
-    }
-    if (minMonthlyBudget_nanos != null) {
-      _queryParams["minMonthlyBudget.nanos"] = ["${minMonthlyBudget_nanos}"];
-    }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
     if (companyName != null) {
       _queryParams["companyName"] = [companyName];
     }
@@ -521,6 +482,45 @@
     if (maxMonthlyBudget_currencyCode != null) {
       _queryParams["maxMonthlyBudget.currencyCode"] = [maxMonthlyBudget_currencyCode];
     }
+    if (minMonthlyBudget_currencyCode != null) {
+      _queryParams["minMonthlyBudget.currencyCode"] = [minMonthlyBudget_currencyCode];
+    }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+    if (requestMetadata_locale != null) {
+      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
+    }
+    if (address != null) {
+      _queryParams["address"] = [address];
+    }
+    if (minMonthlyBudget_units != null) {
+      _queryParams["minMonthlyBudget.units"] = [minMonthlyBudget_units];
+    }
+    if (maxMonthlyBudget_nanos != null) {
+      _queryParams["maxMonthlyBudget.nanos"] = ["${maxMonthlyBudget_nanos}"];
+    }
+    if (services != null) {
+      _queryParams["services"] = services;
+    }
+    if (maxMonthlyBudget_units != null) {
+      _queryParams["maxMonthlyBudget.units"] = [maxMonthlyBudget_units];
+    }
+    if (requestMetadata_trafficSource_trafficSourceId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
+    }
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    }
+    if (minMonthlyBudget_nanos != null) {
+      _queryParams["minMonthlyBudget.nanos"] = ["${minMonthlyBudget_nanos}"];
+    }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
 
     _url = 'v2/companies';
 
@@ -707,11 +707,11 @@
    *
    * Request parameters:
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [pageToken] - A token identifying a page of results that the server
    * returns.
    * Typically, this is the value of `ListLeadsResponse.next_page_token`
@@ -751,7 +751,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListLeadsResponse> list({core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String pageToken, core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String orderBy, core.String requestMetadata_trafficSource_trafficSubId}) {
+  async.Future<ListLeadsResponse> list({core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String pageToken, core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String orderBy, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -759,12 +759,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
     if (requestMetadata_partnersSessionId != null) {
       _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
     }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
@@ -836,11 +836,11 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * Completes with a [ListOffersResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -849,7 +849,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOffersResponse> list({core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId}) {
+  async.Future<ListOffersResponse> list({core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -872,12 +872,12 @@
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
 
     _url = 'v2/offers';
 
@@ -905,11 +905,23 @@
    *
    * Request parameters:
    *
-   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
-   * instead of the user's ID.
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
+   * [orderBy] - Comma-separated list of fields to order by, e.g.:
+   * "foo,bar,baz".
+   * Use "foo desc" to sort descending.
+   * List of valid field names is: name, offer_code, expiration_time, status,
+   *     last_modified_time, sender_name, creation_time, country_code,
+   *     offer_type.
    *
    * [requestMetadata_partnersSessionId] - Google Partners session ID.
    *
+   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
+   * instead of the user's ID.
+   *
    * [pageToken] - Token to retrieve a specific page.
    *
    * [pageSize] - Maximum number of rows to return per page.
@@ -924,23 +936,11 @@
    * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
    * the user's geo-located IP address.
    *
-   * [entireCompany] - if true, show history for the entire company.  Requires
-   * user to be admin.
-   *
    * [requestMetadata_experimentIds] - Experiment IDs the current request
    * belongs to.
    *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
-   * [orderBy] - Comma-separated list of fields to order by, e.g.:
-   * "foo,bar,baz".
-   * Use "foo desc" to sort descending.
-   * List of valid field names is: name, offer_code, expiration_time, status,
-   *     last_modified_time, sender_name, creation_time, country_code,
-   *     offer_type.
+   * [entireCompany] - if true, show history for the entire company.  Requires
+   * user to be admin.
    *
    * Completes with a [ListOffersHistoryResponse].
    *
@@ -950,7 +950,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOffersHistoryResponse> list({core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String pageToken, core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.bool entireCompany, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String orderBy}) {
+  async.Future<ListOffersHistoryResponse> list({core.String requestMetadata_trafficSource_trafficSubId, core.String orderBy, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String pageToken, core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.bool entireCompany}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -958,12 +958,18 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
     }
     if (requestMetadata_partnersSessionId != null) {
       _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
     }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
@@ -979,17 +985,11 @@
     if (requestMetadata_userOverrides_ipAddress != null) {
       _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
     }
-    if (entireCompany != null) {
-      _queryParams["entireCompany"] = ["${entireCompany}"];
-    }
     if (requestMetadata_experimentIds != null) {
       _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
     }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
-    }
-    if (orderBy != null) {
-      _queryParams["orderBy"] = [orderBy];
+    if (entireCompany != null) {
+      _queryParams["entireCompany"] = ["${entireCompany}"];
     }
 
     _url = 'v2/offers/history';
@@ -1066,17 +1066,6 @@
    *
    * Request parameters:
    *
-   * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
-   * the user's geo-located IP address.
-   *
-   * [requestMetadata_experimentIds] - Experiment IDs the current request
-   * belongs to.
-   *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
@@ -1089,6 +1078,17 @@
    *
    * [requestMetadata_locale] - Locale to use for the current request.
    *
+   * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
+   * the user's geo-located IP address.
+   *
+   * [requestMetadata_experimentIds] - Experiment IDs the current request
+   * belongs to.
+   *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
    * Completes with a [ListUserStatesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1097,7 +1097,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListUserStatesResponse> list({core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale}) {
+  async.Future<ListUserStatesResponse> list({core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1105,15 +1105,6 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (requestMetadata_userOverrides_ipAddress != null) {
-      _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
-    }
-    if (requestMetadata_experimentIds != null) {
-      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
-    }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
-    }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
@@ -1126,6 +1117,15 @@
     if (requestMetadata_locale != null) {
       _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
     }
+    if (requestMetadata_userOverrides_ipAddress != null) {
+      _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
+    }
+    if (requestMetadata_experimentIds != null) {
+      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
+    }
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    }
 
     _url = 'v2/userStates';
 
@@ -1158,19 +1158,11 @@
    * [userId] - The ID of the user. Can be set to <code>me</code> to mean
    * the currently authenticated user.
    *
-   * [requestMetadata_experimentIds] - Experiment IDs the current request
-   * belongs to.
-   *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
    *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
    * where the traffic comes from.
    * An identifier has multiple letters created by a team which redirected the
@@ -1181,6 +1173,14 @@
    * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
    * the user's geo-located IP address.
    *
+   * [requestMetadata_experimentIds] - Experiment IDs the current request
+   * belongs to.
+   *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
    * Completes with a [CompanyRelation].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1189,7 +1189,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<CompanyRelation> createCompanyRelation(CompanyRelation request, core.String userId, {core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress}) {
+  async.Future<CompanyRelation> createCompanyRelation(CompanyRelation request, core.String userId, {core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1203,18 +1203,12 @@
     if (userId == null) {
       throw new core.ArgumentError("Parameter userId is required.");
     }
-    if (requestMetadata_experimentIds != null) {
-      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
-    }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
     }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
@@ -1224,6 +1218,12 @@
     if (requestMetadata_userOverrides_ipAddress != null) {
       _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
     }
+    if (requestMetadata_experimentIds != null) {
+      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
+    }
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    }
 
     _url = 'v2/users/' + commons.Escaper.ecapeVariable('$userId') + '/companyRelation';
 
@@ -1330,11 +1330,11 @@
    * the currently
    * authenticated user.
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [userView] - Specifies what parts of the user information to return.
    * Possible string values are:
    * - "BASIC" : A BASIC.
@@ -1367,7 +1367,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<User> get(core.String userId, {core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String userView, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
+  async.Future<User> get(core.String userId, {core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String userView, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1378,12 +1378,12 @@
     if (userId == null) {
       throw new core.ArgumentError("Parameter userId is required.");
     }
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
     if (requestMetadata_partnersSessionId != null) {
       _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
     }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
     if (userView != null) {
       _queryParams["userView"] = [userView];
     }
@@ -1514,11 +1514,19 @@
    *
    * Request parameters:
    *
-   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
-   * instead of the user's ID.
+   * [requestMetadata_experimentIds] - Experiment IDs the current request
+   * belongs to.
+   *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
    *
    * [requestMetadata_partnersSessionId] - Google Partners session ID.
    *
+   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
+   * instead of the user's ID.
+   *
    * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
    * where the traffic comes from.
    * An identifier has multiple letters created by a team which redirected the
@@ -1529,14 +1537,6 @@
    * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
    * the user's geo-located IP address.
    *
-   * [requestMetadata_experimentIds] - Experiment IDs the current request
-   * belongs to.
-   *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
    * Completes with a [GetPartnersStatusResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1545,7 +1545,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<GetPartnersStatusResponse> getPartnersstatus({core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
+  async.Future<GetPartnersStatusResponse> getPartnersstatus({core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1553,12 +1553,18 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    if (requestMetadata_experimentIds != null) {
+      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
+    }
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
     if (requestMetadata_partnersSessionId != null) {
       _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
     }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
@@ -1568,12 +1574,6 @@
     if (requestMetadata_userOverrides_ipAddress != null) {
       _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
     }
-    if (requestMetadata_experimentIds != null) {
-      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
-    }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
-    }
 
     _url = 'v2/partnersstatus';
 
@@ -1595,6 +1595,11 @@
    *
    * Request parameters:
    *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
@@ -1616,11 +1621,6 @@
    * [requestMetadata_experimentIds] - Experiment IDs the current request
    * belongs to.
    *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
    * Completes with a [Company].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1629,7 +1629,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Company> updateCompanies(Company request, {core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.String updateMask, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
+  async.Future<Company> updateCompanies(Company request, {core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.String updateMask, core.List<core.String> requestMetadata_experimentIds}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1640,6 +1640,9 @@
     if (request != null) {
       _body = convert.JSON.encode((request).toJson());
     }
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
@@ -1661,9 +1664,6 @@
     if (requestMetadata_experimentIds != null) {
       _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
     }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
-    }
 
     _url = 'v2/companies';
 
@@ -1684,6 +1684,8 @@
    *
    * Request parameters:
    *
+   * [requestMetadata_locale] - Locale to use for the current request.
+   *
    * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
    * the user's geo-located IP address.
    *
@@ -1709,8 +1711,6 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
-   * [requestMetadata_locale] - Locale to use for the current request.
-   *
    * Completes with a [Lead].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1719,7 +1719,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Lead> updateLeads(Lead request, {core.String requestMetadata_userOverrides_ipAddress, core.String updateMask, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale}) {
+  async.Future<Lead> updateLeads(Lead request, {core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.String updateMask, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1730,6 +1730,9 @@
     if (request != null) {
       _body = convert.JSON.encode((request).toJson());
     }
+    if (requestMetadata_locale != null) {
+      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
+    }
     if (requestMetadata_userOverrides_ipAddress != null) {
       _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
     }
@@ -1751,9 +1754,6 @@
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
-    if (requestMetadata_locale != null) {
-      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
-    }
 
     _url = 'v2/leads';
 
@@ -4332,6 +4332,8 @@
    * certificate help icon.
    * - "SMB_CLICKED_VIDEO_ADS_CERTIFICATE_HELP_ICON" : Advertiser clicked
    * VideoAds certificate help icon.
+   * - "SMB_VIEWED_DIGITAL_SALES_CERTIFICATE" : Advertiser viewed Digital Sales
+   * certificate.
    * - "CLICKED_HELP_AT_BOTTOM" : Clicked `help` at bottom.
    * - "CLICKED_HELP_AT_TOP" : Clicked `help` at top.
    * - "CLIENT_ERROR" : Client error occurred.
diff --git a/generated/googleapis/lib/people/v1.dart b/generated/googleapis/lib/people/v1.dart
index 08d4d40..246dc84 100644
--- a/generated/googleapis/lib/people/v1.dart
+++ b/generated/googleapis/lib/people/v1.dart
@@ -68,11 +68,11 @@
    *
    * Request parameters:
    *
+   * [resourceNames] - The resource names of the contact groups to get.
+   *
    * [maxMembers] - Specifies the maximum number of members to return for each
    * group.
    *
-   * [resourceNames] - The resource names of the contact groups to get.
-   *
    * Completes with a [BatchGetContactGroupsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -81,7 +81,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<BatchGetContactGroupsResponse> batchGet({core.int maxMembers, core.List<core.String> resourceNames}) {
+  async.Future<BatchGetContactGroupsResponse> batchGet({core.List<core.String> resourceNames, core.int maxMembers}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -89,12 +89,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (maxMembers != null) {
-      _queryParams["maxMembers"] = ["${maxMembers}"];
-    }
     if (resourceNames != null) {
       _queryParams["resourceNames"] = resourceNames;
     }
+    if (maxMembers != null) {
+      _queryParams["maxMembers"] = ["${maxMembers}"];
+    }
 
     _url = 'v1/contactGroups:batchGet';
 
@@ -246,6 +246,8 @@
    *
    * Request parameters:
    *
+   * [pageSize] - The maximum number of resources to return.
+   *
    * [syncToken] - A sync token, returned by a previous call to
    * `contactgroups.list`.
    * Only resources changed since the sync token was created will be returned.
@@ -254,8 +256,6 @@
    * [ListContactGroups](/people/api/rest/v1/contactgroups/list).
    * Requests the next page of resources.
    *
-   * [pageSize] - The maximum number of resources to return.
-   *
    * Completes with a [ListContactGroupsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -264,7 +264,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListContactGroupsResponse> list({core.String syncToken, core.String pageToken, core.int pageSize}) {
+  async.Future<ListContactGroupsResponse> list({core.int pageSize, core.String syncToken, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -272,15 +272,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
     if (syncToken != null) {
       _queryParams["syncToken"] = [syncToken];
     }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
 
     _url = 'v1/contactGroups';
 
@@ -304,7 +304,7 @@
    *
    * [resourceName] - The resource name for the contact group, assigned by the
    * server. An ASCII
-   * string, in the form of `contactGroups/<contact_group_id>`.
+   * string, in the form of `contactGroups/`<var>contact_group_id</var>.
    * Value must have pattern "^contactGroups/[^/]+$".
    *
    * Completes with a [ContactGroup].
@@ -503,7 +503,8 @@
    * about.
    *
    * - To get information about the authenticated user, specify `people/me`.
-   * - To get information about a google account, specify `people/<account_id>`.
+   * - To get information about a google account, specify
+   *  `people/`<var>account_id</var>.
    * - To get information about a contact, specify the resource name that
    *   identifies the contact as returned by
    * [`people.connections.list`](/people/api/rest/v1/people.connections/list).
@@ -593,16 +594,6 @@
    *
    * Request parameters:
    *
-   * [requestMask_includeField] - **Required.** Comma-separated list of person
-   * fields to be included in the
-   * response. Each path should start with `person.`: for example,
-   * `person.names` or `person.photos`.
-   *
-   * [resourceNames] - The resource name, such as one returned by
-   * [`people.connections.list`](/people/api/rest/v1/people.connections/list),
-   * of one of the people to provide information about. You can include this
-   * parameter up to 50 times in one request.
-   *
    * [personFields] - **Required.** A field mask to restrict which fields on
    * each person are
    * returned. Valid values are:
@@ -635,6 +626,23 @@
    * * taglines
    * * urls
    *
+   * [requestMask_includeField] - **Required.** Comma-separated list of person
+   * fields to be included in the
+   * response. Each path should start with `person.`: for example,
+   * `person.names` or `person.photos`.
+   *
+   * [resourceNames] - The resource names of the people to provide information
+   * about.
+   *
+   * - To get information about the authenticated user, specify `people/me`.
+   * - To get information about a google account, specify
+   *   `people/`<var>account_id</var>.
+   * - To get information about a contact, specify the resource name that
+   *   identifies the contact as returned by
+   * [`people.connections.list`](/people/api/rest/v1/people.connections/list).
+   *
+   * You can include up to 50 resource names in one request.
+   *
    * Completes with a [GetPeopleResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -643,7 +651,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<GetPeopleResponse> getBatchGet({core.String requestMask_includeField, core.List<core.String> resourceNames, core.String personFields}) {
+  async.Future<GetPeopleResponse> getBatchGet({core.String personFields, core.String requestMask_includeField, core.List<core.String> resourceNames}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -651,15 +659,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (personFields != null) {
+      _queryParams["personFields"] = [personFields];
+    }
     if (requestMask_includeField != null) {
       _queryParams["requestMask.includeField"] = [requestMask_includeField];
     }
     if (resourceNames != null) {
       _queryParams["resourceNames"] = resourceNames;
     }
-    if (personFields != null) {
-      _queryParams["personFields"] = [personFields];
-    }
 
     _url = 'v1/people:batchGet';
 
@@ -693,7 +701,8 @@
    *
    * [resourceName] - The resource name for the person, assigned by the server.
    * An ASCII string
-   * with a max length of 27 characters, in the form of `people/<person_id>`.
+   * with a max length of 27 characters, in the form of
+   * `people/`<var>person_id</var>.
    * Value must have pattern "^people/[^/]+$".
    *
    * [updatePersonFields] - **Required.** A field mask to restrict which fields
@@ -779,10 +788,6 @@
    * `people/me` is valid.
    * Value must have pattern "^people/[^/]+$".
    *
-   * [syncToken] - A sync token, returned by a previous call to
-   * `people.connections.list`.
-   * Only resources changed since the sync token was created will be returned.
-   *
    * [personFields] - **Required.** A field mask to restrict which fields on
    * each person are
    * returned. Valid values are:
@@ -838,6 +843,10 @@
    * response. Each path should start with `person.`: for example,
    * `person.names` or `person.photos`.
    *
+   * [syncToken] - A sync token, returned by a previous call to
+   * `people.connections.list`.
+   * Only resources changed since the sync token was created will be returned.
+   *
    * Completes with a [ListConnectionsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -846,7 +855,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListConnectionsResponse> list(core.String resourceName, {core.String syncToken, core.String personFields, core.String sortOrder, core.bool requestSyncToken, core.String pageToken, core.int pageSize, core.String requestMask_includeField}) {
+  async.Future<ListConnectionsResponse> list(core.String resourceName, {core.String personFields, core.String sortOrder, core.bool requestSyncToken, core.String pageToken, core.int pageSize, core.String requestMask_includeField, core.String syncToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -857,9 +866,6 @@
     if (resourceName == null) {
       throw new core.ArgumentError("Parameter resourceName is required.");
     }
-    if (syncToken != null) {
-      _queryParams["syncToken"] = [syncToken];
-    }
     if (personFields != null) {
       _queryParams["personFields"] = [personFields];
     }
@@ -878,6 +884,9 @@
     if (requestMask_includeField != null) {
       _queryParams["requestMask.includeField"] = [requestMask_includeField];
     }
+    if (syncToken != null) {
+      _queryParams["syncToken"] = [syncToken];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resourceName') + '/connections';
 
@@ -1243,7 +1252,7 @@
   core.String name;
   /**
    * The resource name for the contact group, assigned by the server. An ASCII
-   * string, in the form of `contactGroups/<contact_group_id>`.
+   * string, in the form of `contactGroups/`<var>contact_group_id</var>.
    */
   core.String resourceName;
 
@@ -2106,12 +2115,12 @@
 class ModifyContactGroupMembersRequest {
   /**
    * The resource names of the contact people to add in the form of in the form
-   * `people/<person_id>`.
+   * `people/`<var>person_id</var>.
    */
   core.List<core.String> resourceNamesToAdd;
   /**
    * The resource names of the contact people to remove in the form of in the
-   * form of `people/<person_id>`.
+   * form of `people/`<var>person_id</var>.
    */
   core.List<core.String> resourceNamesToRemove;
 
@@ -2164,13 +2173,13 @@
 class Name {
   /**
    * The read-only display name formatted according to the locale specified by
-   * the viewer's account or the <code>Accept-Language</code> HTTP header.
+   * the viewer's account or the `Accept-Language` HTTP header.
    */
   core.String displayName;
   /**
    * The read-only display name with the last name first formatted according to
    * the locale specified by the viewer's account or the
-   * <code>Accept-Language</code> HTTP header.
+   * `Accept-Language` HTTP header.
    */
   core.String displayNameLastFirst;
   /** The family name. */
@@ -2594,7 +2603,8 @@
   core.List<Residence> residences;
   /**
    * The resource name for the person, assigned by the server. An ASCII string
-   * with a max length of 27 characters, in the form of `people/<person_id>`.
+   * with a max length of 27 characters, in the form of
+   * `people/`<var>person_id</var>.
    */
   core.String resourceName;
   /** The person's skills. */
@@ -3014,7 +3024,7 @@
   FieldMetadata metadata;
   /**
    * The URL of the photo. You can change the desired size by appending a query
-   * parameter `sz=<size>` at the end of the url. Example:
+   * parameter `sz=`<var>size</var> at the end of the url. Example:
    * `https://lh3.googleusercontent.com/-T_wVWLlmg7w/AAAAAAAAAAI/AAAAAAAABa8/00gzXvDBYqw/s100/photo.jpg?sz=50`
    */
   core.String url;
@@ -3325,14 +3335,19 @@
 /** The source of a field. */
 class Source {
   /**
+   * **Only populated in `person.metadata.sources`.**
+   *
    * The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the
-   * source. Used for web cache validation. Only populated in
-   * person.metadata.sources.
+   * source. Used for web cache validation.
    */
   core.String etag;
   /** The unique identifier within the source type generated by the server. */
   core.String id;
-  /** Metadata about a source of type PROFILE. */
+  /**
+   * **Only populated in `person.metadata.sources`.**
+   *
+   * Metadata about a source of type PROFILE.
+   */
   ProfileMetadata profileMetadata;
   /**
    * The source type.
@@ -3351,7 +3366,11 @@
    * is the source id.
    */
   core.String type;
-  /** Last update timestamp of this source. */
+  /**
+   * **Only populated in `person.metadata.sources`.**
+   *
+   * Last update timestamp of this source.
+   */
   core.String updateTime;
 
   Source();
diff --git a/generated/googleapis/lib/playcustomapp/v1.dart b/generated/googleapis/lib/playcustomapp/v1.dart
new file mode 100644
index 0000000..eba9798
--- /dev/null
+++ b/generated/googleapis/lib/playcustomapp/v1.dart
@@ -0,0 +1,141 @@
+// This is a generated file (see the discoveryapis_generator project).
+
+library googleapis.playcustomapp.v1;
+
+import 'dart:core' as core;
+import 'dart:async' as async;
+import 'dart:convert' as convert;
+
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
+import 'package:http/http.dart' as http;
+
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
+    ApiRequestError, DetailedApiRequestError, Media, UploadOptions,
+    ResumableUploadOptions, DownloadOptions, PartialDownloadOptions,
+    ByteRange;
+
+const core.String USER_AGENT = 'dart-api-client playcustomapp/v1';
+
+/** An API to publish custom Android apps. */
+class PlaycustomappApi {
+  /** View and manage your Google Play Developer account */
+  static const AndroidpublisherScope = "https://www.googleapis.com/auth/androidpublisher";
+
+
+  final commons.ApiRequester _requester;
+
+  AccountsResourceApi get accounts => new AccountsResourceApi(_requester);
+
+  PlaycustomappApi(http.Client client, {core.String rootUrl: "https://www.googleapis.com/", core.String servicePath: "playcustomapp/v1/accounts/"}) :
+      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
+}
+
+
+class AccountsResourceApi {
+  final commons.ApiRequester _requester;
+
+  AccountsCustomAppsResourceApi get customApps => new AccountsCustomAppsResourceApi(_requester);
+
+  AccountsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+}
+
+
+class AccountsCustomAppsResourceApi {
+  final commons.ApiRequester _requester;
+
+  AccountsCustomAppsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Create and publish a new custom app.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [account] - Developer account ID.
+   *
+   * [uploadMedia] - The media to upload.
+   *
+   * [uploadOptions] - Options for the media upload. Streaming Media without the
+   * length being known ahead of time is only supported via resumable uploads.
+   *
+   * Completes with a [CustomApp].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<CustomApp> create(CustomApp request, core.String account, {commons.UploadOptions uploadOptions : commons.UploadOptions.Default, commons.Media uploadMedia}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (account == null) {
+      throw new core.ArgumentError("Parameter account is required.");
+    }
+
+    _uploadMedia =  uploadMedia;
+    _uploadOptions =  uploadOptions;
+
+    if (_uploadMedia == null) {
+      _url = commons.Escaper.ecapeVariable('$account') + '/customApps';
+    } else if (_uploadOptions is commons.ResumableUploadOptions) {
+      _url = '/resumable/upload/playcustomapp/v1/accounts/' + commons.Escaper.ecapeVariable('$account') + '/customApps';
+    } else {
+      _url = '/upload/playcustomapp/v1/accounts/' + commons.Escaper.ecapeVariable('$account') + '/customApps';
+    }
+
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new CustomApp.fromJson(data));
+  }
+
+}
+
+
+
+/** This resource represents a custom app. */
+class CustomApp {
+  /** Default listing language in BCP 47 format. */
+  core.String languageCode;
+  /** Title for the Android app. */
+  core.String title;
+
+  CustomApp();
+
+  CustomApp.fromJson(core.Map _json) {
+    if (_json.containsKey("languageCode")) {
+      languageCode = _json["languageCode"];
+    }
+    if (_json.containsKey("title")) {
+      title = _json["title"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (languageCode != null) {
+      _json["languageCode"] = languageCode;
+    }
+    if (title != null) {
+      _json["title"] = title;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/playmoviespartner/v1.dart b/generated/googleapis/lib/playmoviespartner/v1.dart
index f24bf7c..17d310c 100644
--- a/generated/googleapis/lib/playmoviespartner/v1.dart
+++ b/generated/googleapis/lib/playmoviespartner/v1.dart
@@ -103,13 +103,6 @@
    * [accountId] - REQUIRED. See _General rules_ for more information about this
    * field.
    *
-   * [altId] - 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.
-   *
-   * [studioNames] - See _List methods rules_ for info about this field.
-   *
    * [territories] - Filter Avails that match (case-insensitive) any of the
    * given country codes,
    * using the "ISO 3166-1 alpha-2" format (examples: "US", "us", "Us").
@@ -119,10 +112,10 @@
    * or `episode_title_internal_alias` that contains the given
    * case-insensitive title.
    *
-   * [pageToken] - See _List methods rules_ for info about this field.
-   *
    * [videoIds] - Filter Avails that match any of the given `video_id`s.
    *
+   * [pageToken] - See _List methods rules_ for info about this field.
+   *
    * [pageSize] - See _List methods rules_ for info about this field.
    *
    * [altIds] - Filter Avails that match (case-insensitive) any of the given
@@ -130,6 +123,13 @@
    *
    * [pphNames] - See _List methods rules_ for info about this field.
    *
+   * [altId] - 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.
+   *
+   * [studioNames] - See _List methods rules_ for info about this field.
+   *
    * Completes with a [ListAvailsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -138,7 +138,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListAvailsResponse> list(core.String accountId, {core.String altId, core.List<core.String> studioNames, core.List<core.String> territories, core.String title, core.String pageToken, core.List<core.String> videoIds, core.int pageSize, core.List<core.String> altIds, core.List<core.String> pphNames}) {
+  async.Future<ListAvailsResponse> list(core.String accountId, {core.List<core.String> territories, core.String title, core.List<core.String> videoIds, core.String pageToken, core.int pageSize, core.List<core.String> altIds, core.List<core.String> pphNames, core.String altId, core.List<core.String> studioNames}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -149,24 +149,18 @@
     if (accountId == null) {
       throw new core.ArgumentError("Parameter accountId is required.");
     }
-    if (altId != null) {
-      _queryParams["altId"] = [altId];
-    }
-    if (studioNames != null) {
-      _queryParams["studioNames"] = studioNames;
-    }
     if (territories != null) {
       _queryParams["territories"] = territories;
     }
     if (title != null) {
       _queryParams["title"] = [title];
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (videoIds != null) {
       _queryParams["videoIds"] = videoIds;
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
@@ -176,6 +170,12 @@
     if (pphNames != null) {
       _queryParams["pphNames"] = pphNames;
     }
+    if (altId != null) {
+      _queryParams["altId"] = [altId];
+    }
+    if (studioNames != null) {
+      _queryParams["studioNames"] = studioNames;
+    }
 
     _url = 'v1/accounts/' + commons.Escaper.ecapeVariable('$accountId') + '/avails';
 
@@ -257,6 +257,8 @@
    * [accountId] - REQUIRED. See _General rules_ for more information about this
    * field.
    *
+   * [pageSize] - See _List methods rules_ for info about this field.
+   *
    * [pphNames] - See _List methods rules_ for info about this field.
    *
    * [status] - Filter Orders that match one of the given status.
@@ -274,8 +276,6 @@
    *
    * [pageToken] - See _List methods rules_ for info about this field.
    *
-   * [pageSize] - See _List methods rules_ for info about this field.
-   *
    * Completes with a [ListOrdersResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -284,7 +284,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOrdersResponse> list(core.String accountId, {core.List<core.String> pphNames, core.List<core.String> status, core.String name, core.List<core.String> studioNames, core.List<core.String> videoIds, core.String customId, core.String pageToken, core.int pageSize}) {
+  async.Future<ListOrdersResponse> list(core.String accountId, {core.int pageSize, core.List<core.String> pphNames, core.List<core.String> status, core.String name, core.List<core.String> studioNames, core.List<core.String> videoIds, core.String customId, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -295,6 +295,9 @@
     if (accountId == null) {
       throw new core.ArgumentError("Parameter accountId is required.");
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
     if (pphNames != null) {
       _queryParams["pphNames"] = pphNames;
     }
@@ -316,9 +319,6 @@
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
 
     _url = 'v1/accounts/' + commons.Escaper.ecapeVariable('$accountId') + '/orders';
 
@@ -354,11 +354,6 @@
    * [accountId] - REQUIRED. See _General rules_ for more information about this
    * field.
    *
-   * [studioNames] - See _List methods rules_ for info about this field.
-   *
-   * [name] - Filter that matches StoreInfos with a `name` or `show_name`
-   * that contains the given case-insensitive name.
-   *
    * [seasonIds] - Filter StoreInfos that match any of the given `season_id`s.
    *
    * [pageToken] - See _List methods rules_ for info about this field.
@@ -379,6 +374,11 @@
    * given country
    * codes, using the "ISO 3166-1 alpha-2" format (examples: "US", "us", "Us").
    *
+   * [studioNames] - See _List methods rules_ for info about this field.
+   *
+   * [name] - Filter that matches StoreInfos with a `name` or `show_name`
+   * that contains the given case-insensitive name.
+   *
    * Completes with a [ListStoreInfosResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -387,7 +387,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListStoreInfosResponse> list(core.String accountId, {core.List<core.String> studioNames, core.String name, core.List<core.String> seasonIds, core.String pageToken, core.String videoId, core.List<core.String> videoIds, core.int pageSize, core.List<core.String> mids, core.List<core.String> pphNames, core.List<core.String> countries}) {
+  async.Future<ListStoreInfosResponse> list(core.String accountId, {core.List<core.String> seasonIds, core.String pageToken, core.String videoId, core.List<core.String> videoIds, core.int pageSize, core.List<core.String> mids, core.List<core.String> pphNames, core.List<core.String> countries, core.List<core.String> studioNames, core.String name}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -398,12 +398,6 @@
     if (accountId == null) {
       throw new core.ArgumentError("Parameter accountId is required.");
     }
-    if (studioNames != null) {
-      _queryParams["studioNames"] = studioNames;
-    }
-    if (name != null) {
-      _queryParams["name"] = [name];
-    }
     if (seasonIds != null) {
       _queryParams["seasonIds"] = seasonIds;
     }
@@ -428,6 +422,12 @@
     if (countries != null) {
       _queryParams["countries"] = countries;
     }
+    if (studioNames != null) {
+      _queryParams["studioNames"] = studioNames;
+    }
+    if (name != null) {
+      _queryParams["name"] = [name];
+    }
 
     _url = 'v1/accounts/' + commons.Escaper.ecapeVariable('$accountId') + '/storeInfos';
 
diff --git a/generated/googleapis/lib/pubsub/v1.dart b/generated/googleapis/lib/pubsub/v1.dart
index 4447763..6e38f9e 100644
--- a/generated/googleapis/lib/pubsub/v1.dart
+++ b/generated/googleapis/lib/pubsub/v1.dart
@@ -457,13 +457,13 @@
    * Format is `projects/{project}`.
    * Value must have pattern "^projects/[^/]+$".
    *
+   * [pageSize] - Maximum number of subscriptions to return.
+   *
    * [pageToken] - The value returned by the last `ListSubscriptionsResponse`;
    * indicates that
    * this is a continuation of a prior `ListSubscriptions` call, and that the
    * system should return the next page of data.
    *
-   * [pageSize] - Maximum number of subscriptions to return.
-   *
    * Completes with a [ListSubscriptionsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -472,7 +472,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListSubscriptionsResponse> list(core.String project, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListSubscriptionsResponse> list(core.String project, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -483,12 +483,12 @@
     if (project == null) {
       throw new core.ArgumentError("Parameter project is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$project') + '/subscriptions';
 
@@ -953,13 +953,13 @@
    * Format is `projects/{project}`.
    * Value must have pattern "^projects/[^/]+$".
    *
+   * [pageSize] - Maximum number of topics to return.
+   *
    * [pageToken] - The value returned by the last `ListTopicsResponse`;
    * indicates that this is
    * a continuation of a prior `ListTopics` call, and that the system should
    * return the next page of data.
    *
-   * [pageSize] - Maximum number of topics to return.
-   *
    * Completes with a [ListTopicsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -968,7 +968,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTopicsResponse> list(core.String project, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListTopicsResponse> list(core.String project, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -979,12 +979,12 @@
     if (project == null) {
       throw new core.ArgumentError("Parameter project is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$project') + '/topics';
 
diff --git a/generated/googleapis/lib/safebrowsing/v4.dart b/generated/googleapis/lib/safebrowsing/v4.dart
index 0f635f0..300226c 100644
--- a/generated/googleapis/lib/safebrowsing/v4.dart
+++ b/generated/googleapis/lib/safebrowsing/v4.dart
@@ -47,12 +47,12 @@
    *
    * [encodedRequest] - A serialized FindFullHashesRequest proto.
    *
+   * [clientVersion] - The version of the client implementation.
+   *
    * [clientId] - A client ID that (hopefully) uniquely identifies the client
    * implementation
    * of the Safe Browsing API.
    *
-   * [clientVersion] - The version of the client implementation.
-   *
    * Completes with a [FindFullHashesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -61,7 +61,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<FindFullHashesResponse> get(core.String encodedRequest, {core.String clientId, core.String clientVersion}) {
+  async.Future<FindFullHashesResponse> get(core.String encodedRequest, {core.String clientVersion, core.String clientId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -72,12 +72,12 @@
     if (encodedRequest == null) {
       throw new core.ArgumentError("Parameter encodedRequest is required.");
     }
-    if (clientId != null) {
-      _queryParams["clientId"] = [clientId];
-    }
     if (clientVersion != null) {
       _queryParams["clientVersion"] = [clientVersion];
     }
+    if (clientId != null) {
+      _queryParams["clientId"] = [clientId];
+    }
 
     _url = 'v4/encodedFullHashes/' + commons.Escaper.ecapeVariable('$encodedRequest');
 
@@ -105,12 +105,12 @@
    *
    * [encodedRequest] - A serialized FetchThreatListUpdatesRequest proto.
    *
+   * [clientVersion] - The version of the client implementation.
+   *
    * [clientId] - A client ID that uniquely identifies the client implementation
    * of the Safe
    * Browsing API.
    *
-   * [clientVersion] - The version of the client implementation.
-   *
    * Completes with a [FetchThreatListUpdatesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -119,7 +119,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<FetchThreatListUpdatesResponse> get(core.String encodedRequest, {core.String clientId, core.String clientVersion}) {
+  async.Future<FetchThreatListUpdatesResponse> get(core.String encodedRequest, {core.String clientVersion, core.String clientId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -130,12 +130,12 @@
     if (encodedRequest == null) {
       throw new core.ArgumentError("Parameter encodedRequest is required.");
     }
-    if (clientId != null) {
-      _queryParams["clientId"] = [clientId];
-    }
     if (clientVersion != null) {
       _queryParams["clientVersion"] = [clientVersion];
     }
+    if (clientId != null) {
+      _queryParams["clientId"] = [clientId];
+    }
 
     _url = 'v4/encodedUpdates/' + commons.Escaper.ecapeVariable('$encodedRequest');
 
diff --git a/generated/googleapis/lib/servicecontrol/v1.dart b/generated/googleapis/lib/servicecontrol/v1.dart
index 709d46b..15fb800 100644
--- a/generated/googleapis/lib/servicecontrol/v1.dart
+++ b/generated/googleapis/lib/servicecontrol/v1.dart
@@ -741,7 +741,7 @@
   /**
    * The resource being accessed, as a REST-style string. For example:
    *
-   *     bigquery.googlapis.com/projects/PROJECTID/datasets/DATASETID
+   *     bigquery.googleapis.com/projects/PROJECTID/datasets/DATASETID
    */
   core.String resource;
 
@@ -872,6 +872,8 @@
 }
 
 class CheckInfo {
+  /** Consumer info of this check. */
+  ConsumerInfo consumerInfo;
   /**
    * A list of fields and label keys that are ignored by the server.
    * The client doesn't need to send them for following requests to improve
@@ -882,6 +884,9 @@
   CheckInfo();
 
   CheckInfo.fromJson(core.Map _json) {
+    if (_json.containsKey("consumerInfo")) {
+      consumerInfo = new ConsumerInfo.fromJson(_json["consumerInfo"]);
+    }
     if (_json.containsKey("unusedArguments")) {
       unusedArguments = _json["unusedArguments"];
     }
@@ -889,6 +894,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (consumerInfo != null) {
+      _json["consumerInfo"] = (consumerInfo).toJson();
+    }
     if (unusedArguments != null) {
       _json["unusedArguments"] = unusedArguments;
     }
@@ -1018,6 +1026,31 @@
   }
 }
 
+/** `ConsumerInfo` provides information about the consumer project. */
+class ConsumerInfo {
+  /**
+   * The Google cloud project number, e.g. 1234567890. A value of 0 indicates
+   * no project number is found.
+   */
+  core.String projectNumber;
+
+  ConsumerInfo();
+
+  ConsumerInfo.fromJson(core.Map _json) {
+    if (_json.containsKey("projectNumber")) {
+      projectNumber = _json["projectNumber"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (projectNumber != null) {
+      _json["projectNumber"] = projectNumber;
+    }
+    return _json;
+  }
+}
+
 /**
  * Distribution represents a frequency distribution of double-valued sample
  * points. It contains the size of the population of sample points plus
@@ -1869,6 +1902,14 @@
    * - "UNSPECIFIED" : This is never used.
    * - "RESOURCE_EXHAUSTED" : Quota allocation failed.
    * Same as google.rpc.Code.RESOURCE_EXHAUSTED.
+   * - "OUT_OF_RANGE" : Quota release failed.  This error is ONLY returned on a
+   * NORMAL release.
+   * More formally:  if a user requests a release of 10 tokens, but only
+   * 5 tokens were previously allocated, in a BEST_EFFORT release, this will
+   * be considered a success, 5 tokens will be released, and the result will
+   * be "Ok".  If this is done in NORMAL mode, no tokens will be released,
+   * and an OUT_OF_RANGE error will be returned.
+   * Same as google.rpc.Code.OUT_OF_RANGE.
    * - "BILLING_NOT_ACTIVE" : Consumer cannot access the service because the
    * service requires active
    * billing.
@@ -2448,7 +2489,16 @@
 
 /** Metadata about the request. */
 class RequestMetadata {
-  /** The IP address of the caller. */
+  /**
+   * The IP address of the caller.
+   * For caller from internet, this will be public IPv4 or IPv6 address.
+   * For caller from GCE VM with external IP address, this will be the VM's
+   * external IP address. For caller from GCE VM without external IP address, if
+   * the VM is in the same GCP organization (or project) as the accessed
+   * resource, `caller_ip` will be the GCE VM's internal IPv4 address, otherwise
+   * it will be redacted to "gce-internal-ip".
+   * See https://cloud.google.com/compute/docs/vpc/ for more information.
+   */
   core.String callerIp;
   /**
    * The user agent of the caller.
@@ -2462,7 +2512,6 @@
    * +   `AppEngine-Google; (+http://code.google.com/appengine; appid:
    * s~my-project`:
    *     The request was made from the `my-project` App Engine app.
-   *
    * NOLINT
    */
   core.String callerSuppliedUserAgent;
@@ -2642,8 +2691,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/servicemanagement/v1.dart b/generated/googleapis/lib/servicemanagement/v1.dart
index db2603c..d5ac500 100644
--- a/generated/googleapis/lib/servicemanagement/v1.dart
+++ b/generated/googleapis/lib/servicemanagement/v1.dart
@@ -96,14 +96,6 @@
    *
    * Request parameters:
    *
-   * [pageToken] - The standard list page token.
-   *
-   * [name] - Not used.
-   *
-   * [pageSize] - The maximum number of operations to return. If unspecified,
-   * defaults to
-   * 50. The maximum value is 100.
-   *
    * [filter] - A string for filtering Operations.
    *   The following filter fields are supported&#58;
    *
@@ -126,6 +118,14 @@
    * * `serviceName={some-service}.googleapis.com AND (status=done OR
    * startTime>="2017-02-01")`
    *
+   * [pageToken] - The standard list page token.
+   *
+   * [name] - Not used.
+   *
+   * [pageSize] - The maximum number of operations to return. If unspecified,
+   * defaults to
+   * 50. The maximum value is 100.
+   *
    * Completes with a [ListOperationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -134,7 +134,7 @@
    * If the used [http_1.Client] completes with an error when making a REST
    * call, this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list({core.String pageToken, core.String name, core.int pageSize, core.String filter}) {
+  async.Future<ListOperationsResponse> list({core.String filter, core.String pageToken, core.String name, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -142,6 +142,9 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
@@ -151,9 +154,6 @@
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
 
     _url = 'v1/operations';
 
@@ -469,6 +469,8 @@
    * [overview](/service-management/overview)
    * for naming requirements.  For example: `example.googleapis.com`.
    *
+   * [configId] - The id of the service configuration resource.
+   *
    * [view] - Specifies which parts of the Service Config should be returned in
    * the
    * response.
@@ -476,8 +478,6 @@
    * - "BASIC" : A BASIC.
    * - "FULL" : A FULL.
    *
-   * [configId] - The id of the service configuration resource.
-   *
    * Completes with a [Service].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -486,7 +486,7 @@
    * If the used [http_1.Client] completes with an error when making a REST
    * call, this method will complete with the same error.
    */
-  async.Future<Service> getConfig(core.String serviceName, {core.String view, core.String configId}) {
+  async.Future<Service> getConfig(core.String serviceName, {core.String configId, core.String view}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -497,12 +497,12 @@
     if (serviceName == null) {
       throw new core.ArgumentError("Parameter serviceName is required.");
     }
-    if (view != null) {
-      _queryParams["view"] = [view];
-    }
     if (configId != null) {
       _queryParams["configId"] = [configId];
     }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
 
     _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/config';
 
@@ -1279,10 +1279,6 @@
    * [overview](/service-management/overview)
    * for naming requirements.  For example: `example.googleapis.com`.
    *
-   * [pageToken] - The token of the page to retrieve.
-   *
-   * [pageSize] - The max number of items to include in the response list.
-   *
    * [filter] - Use `filter` to return subset of rollouts.
    * The following filters are supported:
    *   -- To limit the results to only those in
@@ -1292,6 +1288,10 @@
    *      [status](google.api.servicemanagement.v1.RolloutStatus) 'CANCELLED'
    *      or 'FAILED', use filter='status=CANCELLED OR status=FAILED'
    *
+   * [pageToken] - The token of the page to retrieve.
+   *
+   * [pageSize] - The max number of items to include in the response list.
+   *
    * Completes with a [ListServiceRolloutsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1300,7 +1300,7 @@
    * If the used [http_1.Client] completes with an error when making a REST
    * call, this method will complete with the same error.
    */
-  async.Future<ListServiceRolloutsResponse> list(core.String serviceName, {core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListServiceRolloutsResponse> list(core.String serviceName, {core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1311,15 +1311,15 @@
     if (serviceName == null) {
       throw new core.ArgumentError("Parameter serviceName is required.");
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
 
     _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/rollouts';
 
@@ -2119,6 +2119,8 @@
 
 /** Write a Cloud Audit log */
 class CloudAuditOptions {
+  /** True if the log is for a permission of type DATA_READ or ADMIN_READ. */
+  core.bool isReadPermissionType;
   /**
    * The log_name to populate in the Cloud Audit Record.
    * Possible string values are:
@@ -2131,6 +2133,9 @@
   CloudAuditOptions();
 
   CloudAuditOptions.fromJson(core.Map _json) {
+    if (_json.containsKey("isReadPermissionType")) {
+      isReadPermissionType = _json["isReadPermissionType"];
+    }
     if (_json.containsKey("logName")) {
       logName = _json["logName"];
     }
@@ -2138,6 +2143,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (isReadPermissionType != null) {
+      _json["isReadPermissionType"] = isReadPermissionType;
+    }
     if (logName != null) {
       _json["logName"] = logName;
     }
@@ -6774,8 +6782,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/serviceuser/v1.dart b/generated/googleapis/lib/serviceuser/v1.dart
index b5d00dc..24a1071 100644
--- a/generated/googleapis/lib/serviceuser/v1.dart
+++ b/generated/googleapis/lib/serviceuser/v1.dart
@@ -4187,8 +4187,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/sheets/v4.dart b/generated/googleapis/lib/sheets/v4.dart
index 01acbb6..aba9b49 100644
--- a/generated/googleapis/lib/sheets/v4.dart
+++ b/generated/googleapis/lib/sheets/v4.dart
@@ -317,20 +317,6 @@
    * [range] - The A1 notation of a range to search for a logical table of data.
    * Values will be appended after the last row of the table.
    *
-   * [responseDateTimeRenderOption] - Determines how dates, times, and durations
-   * in the response should be
-   * rendered. This is ignored if response_value_render_option is
-   * FORMATTED_VALUE.
-   * The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
-   * Possible string values are:
-   * - "SERIAL_NUMBER" : A SERIAL_NUMBER.
-   * - "FORMATTED_STRING" : A FORMATTED_STRING.
-   *
-   * [includeValuesInResponse] - Determines if the update response should
-   * include the values
-   * of the cells that were appended. By default, responses
-   * do not include the updated values.
-   *
    * [responseValueRenderOption] - Determines how values in the response should
    * be rendered.
    * The default render option is ValueRenderOption.FORMATTED_VALUE.
@@ -350,6 +336,20 @@
    * - "RAW" : A RAW.
    * - "USER_ENTERED" : A USER_ENTERED.
    *
+   * [responseDateTimeRenderOption] - Determines how dates, times, and durations
+   * in the response should be
+   * rendered. This is ignored if response_value_render_option is
+   * FORMATTED_VALUE.
+   * The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
+   * Possible string values are:
+   * - "SERIAL_NUMBER" : A SERIAL_NUMBER.
+   * - "FORMATTED_STRING" : A FORMATTED_STRING.
+   *
+   * [includeValuesInResponse] - Determines if the update response should
+   * include the values
+   * of the cells that were appended. By default, responses
+   * do not include the updated values.
+   *
    * Completes with a [AppendValuesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -358,7 +358,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<AppendValuesResponse> append(ValueRange request, core.String spreadsheetId, core.String range, {core.String responseDateTimeRenderOption, core.bool includeValuesInResponse, core.String responseValueRenderOption, core.String insertDataOption, core.String valueInputOption}) {
+  async.Future<AppendValuesResponse> append(ValueRange request, core.String spreadsheetId, core.String range, {core.String responseValueRenderOption, core.String insertDataOption, core.String valueInputOption, core.String responseDateTimeRenderOption, core.bool includeValuesInResponse}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -375,12 +375,6 @@
     if (range == null) {
       throw new core.ArgumentError("Parameter range is required.");
     }
-    if (responseDateTimeRenderOption != null) {
-      _queryParams["responseDateTimeRenderOption"] = [responseDateTimeRenderOption];
-    }
-    if (includeValuesInResponse != null) {
-      _queryParams["includeValuesInResponse"] = ["${includeValuesInResponse}"];
-    }
     if (responseValueRenderOption != null) {
       _queryParams["responseValueRenderOption"] = [responseValueRenderOption];
     }
@@ -390,6 +384,12 @@
     if (valueInputOption != null) {
       _queryParams["valueInputOption"] = [valueInputOption];
     }
+    if (responseDateTimeRenderOption != null) {
+      _queryParams["responseDateTimeRenderOption"] = [responseDateTimeRenderOption];
+    }
+    if (includeValuesInResponse != null) {
+      _queryParams["includeValuesInResponse"] = ["${includeValuesInResponse}"];
+    }
 
     _url = 'v4/spreadsheets/' + commons.Escaper.ecapeVariable('$spreadsheetId') + '/values/' + commons.Escaper.ecapeVariable('$range') + ':append';
 
@@ -641,18 +641,6 @@
    *
    * [range] - The A1 notation of the values to retrieve.
    *
-   * [majorDimension] - 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]]`.
-   * Possible string values are:
-   * - "DIMENSION_UNSPECIFIED" : A DIMENSION_UNSPECIFIED.
-   * - "ROWS" : A ROWS.
-   * - "COLUMNS" : A COLUMNS.
-   *
    * [dateTimeRenderOption] - How dates, times, and durations should be
    * represented in the output.
    * This is ignored if value_render_option is
@@ -669,6 +657,18 @@
    * - "UNFORMATTED_VALUE" : A UNFORMATTED_VALUE.
    * - "FORMULA" : A FORMULA.
    *
+   * [majorDimension] - 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]]`.
+   * Possible string values are:
+   * - "DIMENSION_UNSPECIFIED" : A DIMENSION_UNSPECIFIED.
+   * - "ROWS" : A ROWS.
+   * - "COLUMNS" : A COLUMNS.
+   *
    * Completes with a [ValueRange].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -677,7 +677,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ValueRange> get(core.String spreadsheetId, core.String range, {core.String majorDimension, core.String dateTimeRenderOption, core.String valueRenderOption}) {
+  async.Future<ValueRange> get(core.String spreadsheetId, core.String range, {core.String dateTimeRenderOption, core.String valueRenderOption, core.String majorDimension}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -691,15 +691,15 @@
     if (range == null) {
       throw new core.ArgumentError("Parameter range is required.");
     }
-    if (majorDimension != null) {
-      _queryParams["majorDimension"] = [majorDimension];
-    }
     if (dateTimeRenderOption != null) {
       _queryParams["dateTimeRenderOption"] = [dateTimeRenderOption];
     }
     if (valueRenderOption != null) {
       _queryParams["valueRenderOption"] = [valueRenderOption];
     }
+    if (majorDimension != null) {
+      _queryParams["majorDimension"] = [majorDimension];
+    }
 
     _url = 'v4/spreadsheets/' + commons.Escaper.ecapeVariable('$spreadsheetId') + '/values/' + commons.Escaper.ecapeVariable('$range');
 
@@ -726,14 +726,6 @@
    *
    * [range] - The A1 notation of the values to update.
    *
-   * [includeValuesInResponse] - Determines if the update response should
-   * include the values
-   * of the cells that were updated. By default, responses
-   * do not include the updated values.
-   * If the range to write was larger than than the range actually written,
-   * the response will include all values in the requested range (excluding
-   * trailing empty rows and columns).
-   *
    * [responseValueRenderOption] - Determines how values in the response should
    * be rendered.
    * The default render option is ValueRenderOption.FORMATTED_VALUE.
@@ -757,6 +749,14 @@
    * - "SERIAL_NUMBER" : A SERIAL_NUMBER.
    * - "FORMATTED_STRING" : A FORMATTED_STRING.
    *
+   * [includeValuesInResponse] - Determines if the update response should
+   * include the values
+   * of the cells that were updated. By default, responses
+   * do not include the updated values.
+   * If the range to write was larger than than the range actually written,
+   * the response will include all values in the requested range (excluding
+   * trailing empty rows and columns).
+   *
    * Completes with a [UpdateValuesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -765,7 +765,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<UpdateValuesResponse> update(ValueRange request, core.String spreadsheetId, core.String range, {core.bool includeValuesInResponse, core.String responseValueRenderOption, core.String valueInputOption, core.String responseDateTimeRenderOption}) {
+  async.Future<UpdateValuesResponse> update(ValueRange request, core.String spreadsheetId, core.String range, {core.String responseValueRenderOption, core.String valueInputOption, core.String responseDateTimeRenderOption, core.bool includeValuesInResponse}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -782,9 +782,6 @@
     if (range == null) {
       throw new core.ArgumentError("Parameter range is required.");
     }
-    if (includeValuesInResponse != null) {
-      _queryParams["includeValuesInResponse"] = ["${includeValuesInResponse}"];
-    }
     if (responseValueRenderOption != null) {
       _queryParams["responseValueRenderOption"] = [responseValueRenderOption];
     }
@@ -794,6 +791,9 @@
     if (responseDateTimeRenderOption != null) {
       _queryParams["responseDateTimeRenderOption"] = [responseDateTimeRenderOption];
     }
+    if (includeValuesInResponse != null) {
+      _queryParams["includeValuesInResponse"] = ["${includeValuesInResponse}"];
+    }
 
     _url = 'v4/spreadsheets/' + commons.Escaper.ecapeVariable('$spreadsheetId') + '/values/' + commons.Escaper.ecapeVariable('$range');
 
@@ -1549,11 +1549,7 @@
    * this is the data representing the dates.
    */
   ChartData domain;
-  /**
-   * True to reverse the order of the domain values (horizontal axis).
-   * Not applicable to Gauge, Geo, Histogram, Org, Pie, Radar, and Treemap
-   * charts.
-   */
+  /** True to reverse the order of the domain values (horizontal axis). */
   core.bool reversed;
 
   BasicChartDomain();
@@ -2790,6 +2786,8 @@
 class CandlestickDomain {
   /** The data of the CandlestickDomain. */
   ChartData data;
+  /** True to reverse the order of the domain values (horizontal axis). */
+  core.bool reversed;
 
   CandlestickDomain();
 
@@ -2797,6 +2795,9 @@
     if (_json.containsKey("data")) {
       data = new ChartData.fromJson(_json["data"]);
     }
+    if (_json.containsKey("reversed")) {
+      reversed = _json["reversed"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -2804,6 +2805,9 @@
     if (data != null) {
       _json["data"] = (data).toJson();
     }
+    if (reversed != null) {
+      _json["reversed"] = reversed;
+    }
     return _json;
   }
 }
@@ -3215,6 +3219,11 @@
 /** The specifications of a chart. */
 class ChartSpec {
   /**
+   * The alternative text that describes the chart.  This is often used
+   * for accessibility.
+   */
+  core.String altText;
+  /**
    * The background color of the entire chart.
    * Not applicable to Org charts.
    */
@@ -3270,6 +3279,9 @@
   ChartSpec();
 
   ChartSpec.fromJson(core.Map _json) {
+    if (_json.containsKey("altText")) {
+      altText = _json["altText"];
+    }
     if (_json.containsKey("backgroundColor")) {
       backgroundColor = new Color.fromJson(_json["backgroundColor"]);
     }
@@ -3310,6 +3322,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (altText != null) {
+      _json["altText"] = altText;
+    }
     if (backgroundColor != null) {
       _json["backgroundColor"] = (backgroundColor).toJson();
     }
diff --git a/generated/googleapis/lib/slides/v1.dart b/generated/googleapis/lib/slides/v1.dart
index e8238a9..e4bd9e3 100644
--- a/generated/googleapis/lib/slides/v1.dart
+++ b/generated/googleapis/lib/slides/v1.dart
@@ -2926,6 +2926,31 @@
 }
 
 /**
+ * The properties of Page that are only
+ * relevant for pages with page_type MASTER.
+ */
+class MasterProperties {
+  /** The human-readable name of the master. */
+  core.String displayName;
+
+  MasterProperties();
+
+  MasterProperties.fromJson(core.Map _json) {
+    if (_json.containsKey("displayName")) {
+      displayName = _json["displayName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (displayName != null) {
+      _json["displayName"] = displayName;
+    }
+    return _json;
+  }
+}
+
+/**
  * Contains properties describing the look and feel of a list bullet at a given
  * level of nesting.
  */
@@ -3184,6 +3209,8 @@
 class Page {
   /** Layout specific properties. Only set if page_type = LAYOUT. */
   LayoutProperties layoutProperties;
+  /** Master specific properties. Only set if page_type = MASTER. */
+  MasterProperties masterProperties;
   /** Notes specific properties. Only set if page_type = NOTES. */
   NotesProperties notesProperties;
   /**
@@ -3230,6 +3257,9 @@
     if (_json.containsKey("layoutProperties")) {
       layoutProperties = new LayoutProperties.fromJson(_json["layoutProperties"]);
     }
+    if (_json.containsKey("masterProperties")) {
+      masterProperties = new MasterProperties.fromJson(_json["masterProperties"]);
+    }
     if (_json.containsKey("notesProperties")) {
       notesProperties = new NotesProperties.fromJson(_json["notesProperties"]);
     }
@@ -3258,6 +3288,9 @@
     if (layoutProperties != null) {
       _json["layoutProperties"] = (layoutProperties).toJson();
     }
+    if (masterProperties != null) {
+      _json["masterProperties"] = (masterProperties).toJson();
+    }
     if (notesProperties != null) {
       _json["notesProperties"] = (notesProperties).toJson();
     }
diff --git a/generated/googleapis/lib/speech/v1.dart b/generated/googleapis/lib/speech/v1.dart
index e99fcf4..11ecaac 100644
--- a/generated/googleapis/lib/speech/v1.dart
+++ b/generated/googleapis/lib/speech/v1.dart
@@ -581,6 +581,12 @@
  */
 class RecognitionConfig {
   /**
+   * *Optional* If `true`, a list of `words` are returned in the top result,
+   * containing the start and end timestamps for those words. The default value,
+   * 'false' does not return any word-level timing information.
+   */
+  core.bool enableWordTimeOffsets;
+  /**
    * *Required* Encoding of audio data sent in all `RecognitionAudio` messages.
    * Possible string values are:
    * - "ENCODING_UNSPECIFIED" : Not specified. Will return result
@@ -659,6 +665,9 @@
   RecognitionConfig();
 
   RecognitionConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("enableWordTimeOffsets")) {
+      enableWordTimeOffsets = _json["enableWordTimeOffsets"];
+    }
     if (_json.containsKey("encoding")) {
       encoding = _json["encoding"];
     }
@@ -681,6 +690,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (enableWordTimeOffsets != null) {
+      _json["enableWordTimeOffsets"] = enableWordTimeOffsets;
+    }
     if (encoding != null) {
       _json["encoding"] = encoding;
     }
@@ -812,6 +824,10 @@
    * *Output-only* Transcript text representing the words that the user spoke.
    */
   core.String transcript;
+  /**
+   * *Output-only* List of word-specific information for each recognized word.
+   */
+  core.List<WordInfo> words;
 
   SpeechRecognitionAlternative();
 
@@ -822,6 +838,9 @@
     if (_json.containsKey("transcript")) {
       transcript = _json["transcript"];
     }
+    if (_json.containsKey("words")) {
+      words = _json["words"].map((value) => new WordInfo.fromJson(value)).toList();
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -832,6 +851,9 @@
     if (transcript != null) {
       _json["transcript"] = transcript;
     }
+    if (words != null) {
+      _json["words"] = words.map((value) => (value).toJson()).toList();
+    }
     return _json;
   }
 }
@@ -923,8 +945,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
@@ -965,3 +987,58 @@
     return _json;
   }
 }
+
+/**
+ * Word-specific information detected along with speech recognition when certain
+ * request parameters are set.
+ */
+class WordInfo {
+  /**
+   * *Output-only* Time offset relative to the beginning of the audio,
+   * and corresponding to the end of the spoken word.
+   * This field is only set if `enable_word_time_offsets=true` and only
+   * in the top hypothesis.
+   * This is an experimental feature and the accuracy of the time offset can
+   * vary.
+   */
+  core.String endTime;
+  /**
+   * *Output-only* Time offset relative to the beginning of the audio,
+   * and corresponding to the start of the spoken word.
+   * This field is only set if `enable_word_time_offsets=true` and only
+   * in the top hypothesis.
+   * This is an experimental feature and the accuracy of the time offset can
+   * vary.
+   */
+  core.String startTime;
+  /** *Output-only* The word corresponding to this set of information. */
+  core.String word;
+
+  WordInfo();
+
+  WordInfo.fromJson(core.Map _json) {
+    if (_json.containsKey("endTime")) {
+      endTime = _json["endTime"];
+    }
+    if (_json.containsKey("startTime")) {
+      startTime = _json["startTime"];
+    }
+    if (_json.containsKey("word")) {
+      word = _json["word"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (endTime != null) {
+      _json["endTime"] = endTime;
+    }
+    if (startTime != null) {
+      _json["startTime"] = startTime;
+    }
+    if (word != null) {
+      _json["word"] = word;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/storagetransfer/v1.dart b/generated/googleapis/lib/storagetransfer/v1.dart
index 722f6dd..82e3151 100644
--- a/generated/googleapis/lib/storagetransfer/v1.dart
+++ b/generated/googleapis/lib/storagetransfer/v1.dart
@@ -190,6 +190,8 @@
    *
    * Request parameters:
    *
+   * [pageToken] - The list page token.
+   *
    * [pageSize] - The list page size. The max allowed value is 256.
    *
    * [filter] - A list of query parameters specified as JSON text in the form of
@@ -202,8 +204,6 @@
    * and `job_statuses` are optional.  The valid values for `job_statuses` are
    * case-insensitive: `ENABLED`, `DISABLED`, and `DELETED`.
    *
-   * [pageToken] - The list page token.
-   *
    * Completes with a [ListTransferJobsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -212,7 +212,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferJobsResponse> list({core.int pageSize, core.String filter, core.String pageToken}) {
+  async.Future<ListTransferJobsResponse> list({core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -220,15 +220,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
 
     _url = 'v1/transferJobs';
 
@@ -1466,8 +1466,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/streetviewpublish/v1.dart b/generated/googleapis/lib/streetviewpublish/v1.dart
new file mode 100644
index 0000000..ea6b58e
--- /dev/null
+++ b/generated/googleapis/lib/streetviewpublish/v1.dart
@@ -0,0 +1,1409 @@
+// This is a generated file (see the discoveryapis_generator project).
+
+library googleapis.streetviewpublish.v1;
+
+import 'dart:core' as core;
+import 'dart:async' as async;
+import 'dart:convert' as convert;
+
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
+import 'package:http/http.dart' as http;
+
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
+    ApiRequestError, DetailedApiRequestError;
+
+const core.String USER_AGENT = 'dart-api-client streetviewpublish/v1';
+
+/**
+ * Publishes 360 photos to Google Maps, along with position, orientation, and
+ * connectivity metadata. Apps can offer an interface for positioning,
+ * connecting, and uploading user-generated Street View images.
+ */
+class StreetviewpublishApi {
+  /** Publish and manage your 360 photos on Google Street View */
+  static const StreetviewpublishScope = "https://www.googleapis.com/auth/streetviewpublish";
+
+
+  final commons.ApiRequester _requester;
+
+  PhotoResourceApi get photo => new PhotoResourceApi(_requester);
+  PhotosResourceApi get photos => new PhotosResourceApi(_requester);
+
+  StreetviewpublishApi(http.Client client, {core.String rootUrl: "https://streetviewpublish.googleapis.com/", core.String servicePath: ""}) :
+      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
+}
+
+
+class PhotoResourceApi {
+  final commons.ApiRequester _requester;
+
+  PhotoResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * After the client finishes uploading the photo with the returned
+   * UploadRef,
+   * CreatePhoto
+   * publishes the uploaded Photo to
+   * Street View on Google Maps.
+   *
+   * This method returns the following error codes:
+   *
+   * * google.rpc.Code.INVALID_ARGUMENT if the request is malformed.
+   * * google.rpc.Code.NOT_FOUND if the upload reference does not exist.
+   * * google.rpc.Code.RESOURCE_EXHAUSTED if the account has reached the
+   * storage limit.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * Completes with a [Photo].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Photo> create(Photo request) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+
+    _url = 'v1/photo';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Photo.fromJson(data));
+  }
+
+  /**
+   * Deletes a Photo and its metadata.
+   *
+   * This method returns the following error codes:
+   *
+   * * google.rpc.Code.PERMISSION_DENIED if the requesting user did not
+   * create the requested photo.
+   * * google.rpc.Code.NOT_FOUND if the photo ID does not exist.
+   *
+   * Request parameters:
+   *
+   * [photoId] - Required. ID of the Photo.
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String photoId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (photoId == null) {
+      throw new core.ArgumentError("Parameter photoId is required.");
+    }
+
+    _url = 'v1/photo/' + commons.Escaper.ecapeVariable('$photoId');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Gets the metadata of the specified
+   * Photo.
+   *
+   * This method returns the following error codes:
+   *
+   * * google.rpc.Code.PERMISSION_DENIED if the requesting user did not
+   * create the requested Photo.
+   * * google.rpc.Code.NOT_FOUND if the requested
+   * Photo does not exist.
+   *
+   * Request parameters:
+   *
+   * [photoId] - Required. ID of the Photo.
+   *
+   * [view] - Specifies if a download URL for the photo bytes should be returned
+   * in the
+   * Photo response.
+   * Possible string values are:
+   * - "BASIC" : A BASIC.
+   * - "INCLUDE_DOWNLOAD_URL" : A INCLUDE_DOWNLOAD_URL.
+   *
+   * Completes with a [Photo].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Photo> get(core.String photoId, {core.String view}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (photoId == null) {
+      throw new core.ArgumentError("Parameter photoId is required.");
+    }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+
+    _url = 'v1/photo/' + commons.Escaper.ecapeVariable('$photoId');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Photo.fromJson(data));
+  }
+
+  /**
+   * Creates an upload session to start uploading photo bytes. The upload URL of
+   * the returned UploadRef is used to
+   * upload the bytes for the Photo.
+   *
+   * In addition to the photo requirements shown in
+   * https://support.google.com/maps/answer/7012050?hl=en&ref_topic=6275604,
+   * the photo must also meet the following requirements:
+   *
+   * * Photo Sphere XMP metadata must be included in the photo medadata. See
+   * https://developers.google.com/streetview/spherical-metadata for the
+   * required fields.
+   * * The pixel size of the photo must meet the size requirements listed in
+   * https://support.google.com/maps/answer/7012050?hl=en&ref_topic=6275604, and
+   * the photo must be a full 360 horizontally.
+   *
+   * After the upload is complete, the
+   * UploadRef is used with
+   * CreatePhoto
+   * to create the Photo object entry.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * Completes with a [UploadRef].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<UploadRef> startUpload(Empty request) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+
+    _url = 'v1/photo:startUpload';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new UploadRef.fromJson(data));
+  }
+
+  /**
+   * Updates the metadata of a Photo, such
+   * as pose, place association, connections, etc. Changing the pixels of a
+   * photo is not supported.
+   *
+   * This method returns the following error codes:
+   *
+   * * google.rpc.Code.PERMISSION_DENIED if the requesting user did not
+   * create the requested photo.
+   * * google.rpc.Code.INVALID_ARGUMENT if the request is malformed.
+   * * google.rpc.Code.NOT_FOUND if the requested photo does not exist.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [id] - Required. A base64 encoded identifier.
+   *
+   * [updateMask] - Mask that identifies fields on the photo metadata to update.
+   * If not present, the old Photo metadata will be entirely replaced with the
+   * new Photo metadata in this request. The update fails if invalid fields are
+   * specified. Multiple fields can be specified in a comma-delimited list.
+   *
+   * The following fields are valid:
+   *
+   * * `pose.heading`
+   * * `pose.latlngpair`
+   * * `pose.pitch`
+   * * `pose.roll`
+   * * `pose.level`
+   * * `pose.altitude`
+   * * `connections`
+   * * `places`
+   *
+   *
+   * <aside class="note"><b>Note:</b> Repeated fields in
+   * updateMask
+   * mean the entire set of repeated values will be replaced with the new
+   * contents. For example, if
+   * updateMask
+   * contains `connections` and
+   * google.streetview.publish.v1.UpdatePhotoRequest.photo.connections is
+   * empty, all connections will be removed.</aside>
+   *
+   * Completes with a [Photo].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Photo> update(Photo request, core.String id, {core.String updateMask}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (id == null) {
+      throw new core.ArgumentError("Parameter id is required.");
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+
+    _url = 'v1/photo/' + commons.Escaper.ecapeVariable('$id');
+
+    var _response = _requester.request(_url,
+                                       "PUT",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Photo.fromJson(data));
+  }
+
+}
+
+
+class PhotosResourceApi {
+  final commons.ApiRequester _requester;
+
+  PhotosResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Deletes a list of Photos and their metadata.
+   *
+   * Note that if
+   * BatchDeletePhotos
+   * fails, either critical fields are missing or there was an authentication
+   * error. Even if
+   * BatchDeletePhotos
+   * succeeds, there may have been failures for single photos in the batch.
+   * These failures will be specified in each
+   * PhotoResponse.status
+   * in
+   * BatchDeletePhotosResponse.results.
+   * See
+   * DeletePhoto
+   * for specific failures that can occur per photo.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * Completes with a [BatchDeletePhotosResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<BatchDeletePhotosResponse> batchDelete(BatchDeletePhotosRequest request) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+
+    _url = 'v1/photos:batchDelete';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new BatchDeletePhotosResponse.fromJson(data));
+  }
+
+  /**
+   * Gets the metadata of the specified
+   * Photo batch.
+   *
+   * Note that if
+   * BatchGetPhotos
+   * fails, either critical fields are missing or there was an authentication
+   * error. Even if
+   * BatchGetPhotos
+   * succeeds, there may have been failures for single photos in the batch.
+   * These failures will be specified in each
+   * PhotoResponse.status
+   * in
+   * BatchGetPhotosResponse.results.
+   * See
+   * GetPhoto
+   * for specific failures that can occur per photo.
+   *
+   * Request parameters:
+   *
+   * [view] - Specifies if a download URL for the photo bytes should be returned
+   * in the
+   * Photo response.
+   * Possible string values are:
+   * - "BASIC" : A BASIC.
+   * - "INCLUDE_DOWNLOAD_URL" : A INCLUDE_DOWNLOAD_URL.
+   *
+   * [photoIds] - Required. IDs of the Photos. For HTTP
+   * GET requests, the URL query parameter should be
+   * `photoIds=<id1>&photoIds=<id2>&...`.
+   *
+   * Completes with a [BatchGetPhotosResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<BatchGetPhotosResponse> batchGet({core.String view, core.List<core.String> photoIds}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+    if (photoIds != null) {
+      _queryParams["photoIds"] = photoIds;
+    }
+
+    _url = 'v1/photos:batchGet';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new BatchGetPhotosResponse.fromJson(data));
+  }
+
+  /**
+   * Updates the metadata of Photos, such
+   * as pose, place association, connections, etc. Changing the pixels of photos
+   * is not supported.
+   *
+   * Note that if
+   * BatchUpdatePhotos
+   * fails, either critical fields are missing or there was an authentication
+   * error. Even if
+   * BatchUpdatePhotos
+   * succeeds, there may have been failures for single photos in the batch.
+   * These failures will be specified in each
+   * PhotoResponse.status
+   * in
+   * BatchUpdatePhotosResponse.results.
+   * See
+   * UpdatePhoto
+   * for specific failures that can occur per photo.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * Completes with a [BatchUpdatePhotosResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<BatchUpdatePhotosResponse> batchUpdate(BatchUpdatePhotosRequest request) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+
+    _url = 'v1/photos:batchUpdate';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new BatchUpdatePhotosResponse.fromJson(data));
+  }
+
+  /**
+   * Lists all the Photos that belong to the user.
+   *
+   * Request parameters:
+   *
+   * [pageToken] - The
+   * nextPageToken
+   * value returned from a previous
+   * ListPhotos
+   * request, if any.
+   *
+   * [pageSize] - The maximum number of photos to return.
+   * `pageSize` must be non-negative. If `pageSize` is zero or is not provided,
+   * the default page size of 100 will be used.
+   * The number of photos returned in the response may be less than `pageSize`
+   * if the number of photos that belong to the user is less than `pageSize`.
+   *
+   * [view] - Specifies if a download URL for the photos bytes should be
+   * returned in the
+   * Photos response.
+   * Possible string values are:
+   * - "BASIC" : A BASIC.
+   * - "INCLUDE_DOWNLOAD_URL" : A INCLUDE_DOWNLOAD_URL.
+   *
+   * [filter] - The filter expression. For example:
+   * `placeId=ChIJj61dQgK6j4AR4GeTYWZsKWw`.
+   *
+   * Completes with a [ListPhotosResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListPhotosResponse> list({core.String pageToken, core.int pageSize, core.String view, core.String filter}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+
+    _url = 'v1/photos';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListPhotosResponse.fromJson(data));
+  }
+
+}
+
+
+
+/** Request to delete multiple Photos. */
+class BatchDeletePhotosRequest {
+  /**
+   * Required. IDs of the Photos. For HTTP
+   * GET requests, the URL query parameter should be
+   * `photoIds=<id1>&photoIds=<id2>&...`.
+   */
+  core.List<core.String> photoIds;
+
+  BatchDeletePhotosRequest();
+
+  BatchDeletePhotosRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("photoIds")) {
+      photoIds = _json["photoIds"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (photoIds != null) {
+      _json["photoIds"] = photoIds;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Response to batch delete of one or more
+ * Photos.
+ */
+class BatchDeletePhotosResponse {
+  /**
+   * The status for the operation to delete a single
+   * Photo in the batch request.
+   */
+  core.List<Status> status;
+
+  BatchDeletePhotosResponse();
+
+  BatchDeletePhotosResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("status")) {
+      status = _json["status"].map((value) => new Status.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (status != null) {
+      _json["status"] = status.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** Response to batch get of Photos. */
+class BatchGetPhotosResponse {
+  /**
+   * List of results for each individual
+   * Photo requested, in the same order as
+   * the requests in
+   * BatchGetPhotos.
+   */
+  core.List<PhotoResponse> results;
+
+  BatchGetPhotosResponse();
+
+  BatchGetPhotosResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("results")) {
+      results = _json["results"].map((value) => new PhotoResponse.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (results != null) {
+      _json["results"] = results.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/**
+ * Request to update the metadata of photos.
+ * Updating the pixels of photos is not supported.
+ */
+class BatchUpdatePhotosRequest {
+  /**
+   * Required. List of
+   * UpdatePhotoRequests.
+   */
+  core.List<UpdatePhotoRequest> updatePhotoRequests;
+
+  BatchUpdatePhotosRequest();
+
+  BatchUpdatePhotosRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("updatePhotoRequests")) {
+      updatePhotoRequests = _json["updatePhotoRequests"].map((value) => new UpdatePhotoRequest.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (updatePhotoRequests != null) {
+      _json["updatePhotoRequests"] = updatePhotoRequests.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/**
+ * Response to batch update of metadata of one or more
+ * Photos.
+ */
+class BatchUpdatePhotosResponse {
+  /**
+   * List of results for each individual
+   * Photo updated, in the same order as
+   * the request.
+   */
+  core.List<PhotoResponse> results;
+
+  BatchUpdatePhotosResponse();
+
+  BatchUpdatePhotosResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("results")) {
+      results = _json["results"].map((value) => new PhotoResponse.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (results != null) {
+      _json["results"] = results.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** A connection is the link from a source photo to a destination photo. */
+class Connection {
+  /**
+   * Required. The destination of the connection from the containing photo to
+   * another photo.
+   */
+  PhotoId target;
+
+  Connection();
+
+  Connection.fromJson(core.Map _json) {
+    if (_json.containsKey("target")) {
+      target = new PhotoId.fromJson(_json["target"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (target != null) {
+      _json["target"] = (target).toJson();
+    }
+    return _json;
+  }
+}
+
+/**
+ * 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 `{}`.
+ */
+class Empty {
+
+  Empty();
+
+  Empty.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/**
+ * 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
+ * <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)
+ */
+class LatLng {
+  /** The latitude in degrees. It must be in the range [-90.0, +90.0]. */
+  core.double latitude;
+  /** The longitude in degrees. It must be in the range [-180.0, +180.0]. */
+  core.double longitude;
+
+  LatLng();
+
+  LatLng.fromJson(core.Map _json) {
+    if (_json.containsKey("latitude")) {
+      latitude = _json["latitude"];
+    }
+    if (_json.containsKey("longitude")) {
+      longitude = _json["longitude"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (latitude != null) {
+      _json["latitude"] = latitude;
+    }
+    if (longitude != null) {
+      _json["longitude"] = longitude;
+    }
+    return _json;
+  }
+}
+
+/** Level information containing level number and its corresponding name. */
+class Level {
+  /**
+   * Required. A name assigned to this Level, restricted to 3 characters.
+   * Consider how the elevator buttons would be labeled for this level if there
+   * was an elevator.
+   */
+  core.String name;
+  /**
+   * Floor number, used for ordering. 0 indicates the ground level, 1 indicates
+   * the first level above ground level, -1 indicates the first level under
+   * ground level. Non-integer values are OK.
+   */
+  core.double number;
+
+  Level();
+
+  Level.fromJson(core.Map _json) {
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("number")) {
+      number = _json["number"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (number != null) {
+      _json["number"] = number;
+    }
+    return _json;
+  }
+}
+
+/** Response to list all photos that belong to a user. */
+class ListPhotosResponse {
+  /**
+   * Token to retrieve the next page of results, or empty if there are no more
+   * results in the list.
+   */
+  core.String nextPageToken;
+  /**
+   * List of photos. The maximum number of items returned is based on the
+   * pageSize field
+   * in the request.
+   */
+  core.List<Photo> photos;
+
+  ListPhotosResponse();
+
+  ListPhotosResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("photos")) {
+      photos = _json["photos"].map((value) => new Photo.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (photos != null) {
+      _json["photos"] = photos.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** Photo is used to store 360 photos along with photo metadata. */
+class Photo {
+  /**
+   * Absolute time when the photo was captured.
+   * When the photo has no exif timestamp, this is used to set a timestamp in
+   * the photo metadata.
+   */
+  core.String captureTime;
+  /**
+   * Connections to other photos. A connection represents the link from this
+   * photo to another photo.
+   */
+  core.List<Connection> connections;
+  /**
+   * Output only. The download URL for the photo bytes. This field is set only
+   * when
+   * GetPhotoRequest.view
+   * is set to
+   * PhotoView.INCLUDE_DOWNLOAD_URL.
+   */
+  core.String downloadUrl;
+  /**
+   * Required when updating photo. Output only when creating photo.
+   * Identifier for the photo, which is unique among all photos in
+   * Google.
+   */
+  PhotoId photoId;
+  /** Places where this photo belongs. */
+  core.List<Place> places;
+  /** Pose of the photo. */
+  Pose pose;
+  /** Output only. The share link for the photo. */
+  core.String shareLink;
+  /**
+   * Output only. The thumbnail URL for showing a preview of the given photo.
+   */
+  core.String thumbnailUrl;
+  /**
+   * Required when creating photo. Input only. The resource URL where the photo
+   * bytes are uploaded to.
+   */
+  UploadRef uploadReference;
+  /** Output only. View count of the photo. */
+  core.String viewCount;
+
+  Photo();
+
+  Photo.fromJson(core.Map _json) {
+    if (_json.containsKey("captureTime")) {
+      captureTime = _json["captureTime"];
+    }
+    if (_json.containsKey("connections")) {
+      connections = _json["connections"].map((value) => new Connection.fromJson(value)).toList();
+    }
+    if (_json.containsKey("downloadUrl")) {
+      downloadUrl = _json["downloadUrl"];
+    }
+    if (_json.containsKey("photoId")) {
+      photoId = new PhotoId.fromJson(_json["photoId"]);
+    }
+    if (_json.containsKey("places")) {
+      places = _json["places"].map((value) => new Place.fromJson(value)).toList();
+    }
+    if (_json.containsKey("pose")) {
+      pose = new Pose.fromJson(_json["pose"]);
+    }
+    if (_json.containsKey("shareLink")) {
+      shareLink = _json["shareLink"];
+    }
+    if (_json.containsKey("thumbnailUrl")) {
+      thumbnailUrl = _json["thumbnailUrl"];
+    }
+    if (_json.containsKey("uploadReference")) {
+      uploadReference = new UploadRef.fromJson(_json["uploadReference"]);
+    }
+    if (_json.containsKey("viewCount")) {
+      viewCount = _json["viewCount"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (captureTime != null) {
+      _json["captureTime"] = captureTime;
+    }
+    if (connections != null) {
+      _json["connections"] = connections.map((value) => (value).toJson()).toList();
+    }
+    if (downloadUrl != null) {
+      _json["downloadUrl"] = downloadUrl;
+    }
+    if (photoId != null) {
+      _json["photoId"] = (photoId).toJson();
+    }
+    if (places != null) {
+      _json["places"] = places.map((value) => (value).toJson()).toList();
+    }
+    if (pose != null) {
+      _json["pose"] = (pose).toJson();
+    }
+    if (shareLink != null) {
+      _json["shareLink"] = shareLink;
+    }
+    if (thumbnailUrl != null) {
+      _json["thumbnailUrl"] = thumbnailUrl;
+    }
+    if (uploadReference != null) {
+      _json["uploadReference"] = (uploadReference).toJson();
+    }
+    if (viewCount != null) {
+      _json["viewCount"] = viewCount;
+    }
+    return _json;
+  }
+}
+
+/** Identifier for a Photo. */
+class PhotoId {
+  /** Required. A base64 encoded identifier. */
+  core.String id;
+
+  PhotoId();
+
+  PhotoId.fromJson(core.Map _json) {
+    if (_json.containsKey("id")) {
+      id = _json["id"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (id != null) {
+      _json["id"] = id;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Response payload for a single
+ * Photo
+ * in batch operations including
+ * BatchGetPhotos
+ * and
+ * BatchUpdatePhotos.
+ */
+class PhotoResponse {
+  /**
+   * The Photo resource, if the request
+   * was successful.
+   */
+  Photo photo;
+  /**
+   * The status for the operation to get or update a single photo in the batch
+   * request.
+   */
+  Status status;
+
+  PhotoResponse();
+
+  PhotoResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("photo")) {
+      photo = new Photo.fromJson(_json["photo"]);
+    }
+    if (_json.containsKey("status")) {
+      status = new Status.fromJson(_json["status"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (photo != null) {
+      _json["photo"] = (photo).toJson();
+    }
+    if (status != null) {
+      _json["status"] = (status).toJson();
+    }
+    return _json;
+  }
+}
+
+/** Place metadata for an entity. */
+class Place {
+  /**
+   * Required. Place identifier, as described in
+   * https://developers.google.com/places/place-id.
+   */
+  core.String placeId;
+
+  Place();
+
+  Place.fromJson(core.Map _json) {
+    if (_json.containsKey("placeId")) {
+      placeId = _json["placeId"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (placeId != null) {
+      _json["placeId"] = placeId;
+    }
+    return _json;
+  }
+}
+
+/** Raw pose measurement for an entity. */
+class Pose {
+  /**
+   * Altitude of the pose in meters above ground level (as defined by WGS84).
+   * NaN indicates an unmeasured quantity.
+   */
+  core.double altitude;
+  /**
+   * Compass heading, measured at the center of the photo in degrees clockwise
+   * from North. Value must be >=0 and <360.
+   * NaN indicates an unmeasured quantity.
+   */
+  core.double heading;
+  /**
+   * Latitude and longitude pair of the pose, as explained here:
+   * https://cloud.google.com/datastore/docs/reference/rest/Shared.Types/LatLng
+   * When creating a Photo, if the
+   * latitude and longitude pair are not provided here, the geolocation from the
+   * exif header will be used. If the latitude and longitude pair is not
+   * provided and cannot be found in the exif header, the create photo process
+   * will fail.
+   */
+  LatLng latLngPair;
+  /** Level (the floor in a building) used to configure vertical navigation. */
+  Level level;
+  /**
+   * Pitch, measured at the center of the photo in degrees. Value must be >=-90
+   * and <= 90. A value of -90 means looking directly down, and a value of 90
+   * means looking directly up.
+   * NaN indicates an unmeasured quantity.
+   */
+  core.double pitch;
+  /**
+   * Roll, measured in degrees. Value must be >= 0 and <360. A value of 0
+   * means level with the horizon.
+   * NaN indicates an unmeasured quantity.
+   */
+  core.double roll;
+
+  Pose();
+
+  Pose.fromJson(core.Map _json) {
+    if (_json.containsKey("altitude")) {
+      altitude = _json["altitude"];
+    }
+    if (_json.containsKey("heading")) {
+      heading = _json["heading"];
+    }
+    if (_json.containsKey("latLngPair")) {
+      latLngPair = new LatLng.fromJson(_json["latLngPair"]);
+    }
+    if (_json.containsKey("level")) {
+      level = new Level.fromJson(_json["level"]);
+    }
+    if (_json.containsKey("pitch")) {
+      pitch = _json["pitch"];
+    }
+    if (_json.containsKey("roll")) {
+      roll = _json["roll"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (altitude != null) {
+      _json["altitude"] = altitude;
+    }
+    if (heading != null) {
+      _json["heading"] = heading;
+    }
+    if (latLngPair != null) {
+      _json["latLngPair"] = (latLngPair).toJson();
+    }
+    if (level != null) {
+      _json["level"] = (level).toJson();
+    }
+    if (pitch != null) {
+      _json["pitch"] = pitch;
+    }
+    if (roll != null) {
+      _json["roll"] = roll;
+    }
+    return _json;
+  }
+}
+
+/**
+ * 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` that 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.
+ *
+ * - 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.
+ */
+class Status {
+  /** The status code, which should be an enum value of google.rpc.Code. */
+  core.int code;
+  /**
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.List<core.Map<core.String, core.Object>> details;
+  /**
+   * 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.
+   */
+  core.String message;
+
+  Status();
+
+  Status.fromJson(core.Map _json) {
+    if (_json.containsKey("code")) {
+      code = _json["code"];
+    }
+    if (_json.containsKey("details")) {
+      details = _json["details"];
+    }
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (code != null) {
+      _json["code"] = code;
+    }
+    if (details != null) {
+      _json["details"] = details;
+    }
+    if (message != null) {
+      _json["message"] = message;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Request to update the metadata of a
+ * Photo. Updating the pixels of a photo
+ * is not supported.
+ */
+class UpdatePhotoRequest {
+  /**
+   * Required. Photo object containing the
+   * new metadata. Only the fields specified in
+   * updateMask
+   * field are used. If `updateMask` is not present, the update applies to all
+   * fields. <aside class="note"><b>Note:</b> To update
+   * Pose.altitude,
+   * Pose.latLngPair has to be
+   * filled as well. Otherwise, the request will fail.
+   */
+  Photo photo;
+  /**
+   * Mask that identifies fields on the photo metadata to update.
+   * If not present, the old Photo metadata will be entirely replaced with the
+   * new Photo metadata in this request. The update fails if invalid fields are
+   * specified. Multiple fields can be specified in a comma-delimited list.
+   *
+   * The following fields are valid:
+   *
+   * * `pose.heading`
+   * * `pose.latlngpair`
+   * * `pose.pitch`
+   * * `pose.roll`
+   * * `pose.level`
+   * * `pose.altitude`
+   * * `connections`
+   * * `places`
+   *
+   *
+   * <aside class="note"><b>Note:</b> Repeated fields in
+   * updateMask
+   * mean the entire set of repeated values will be replaced with the new
+   * contents. For example, if
+   * updateMask
+   * contains `connections` and
+   * google.streetview.publish.v1.UpdatePhotoRequest.photo.connections is
+   * empty, all connections will be removed.</aside>
+   */
+  core.String updateMask;
+
+  UpdatePhotoRequest();
+
+  UpdatePhotoRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("photo")) {
+      photo = new Photo.fromJson(_json["photo"]);
+    }
+    if (_json.containsKey("updateMask")) {
+      updateMask = _json["updateMask"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (photo != null) {
+      _json["photo"] = (photo).toJson();
+    }
+    if (updateMask != null) {
+      _json["updateMask"] = updateMask;
+    }
+    return _json;
+  }
+}
+
+/** Upload reference for media files. */
+class UploadRef {
+  /**
+   * Required. An upload reference should be unique for each user. It follows
+   * the form:
+   * "https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}"
+   */
+  core.String uploadUrl;
+
+  UploadRef();
+
+  UploadRef.fromJson(core.Map _json) {
+    if (_json.containsKey("uploadUrl")) {
+      uploadUrl = _json["uploadUrl"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (uploadUrl != null) {
+      _json["uploadUrl"] = uploadUrl;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/tracing/v2.dart b/generated/googleapis/lib/tracing/v2.dart
deleted file mode 100644
index 2639486..0000000
--- a/generated/googleapis/lib/tracing/v2.dart
+++ /dev/null
@@ -1,1301 +0,0 @@
-// This is a generated file (see the discoveryapis_generator project).
-
-library googleapis.tracing.v2;
-
-import 'dart:core' as core;
-import 'dart:async' as async;
-import 'dart:convert' as convert;
-
-import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
-import 'package:http/http.dart' as http;
-
-export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
-    ApiRequestError, DetailedApiRequestError;
-
-const core.String USER_AGENT = 'dart-api-client tracing/v2';
-
-/** Send and retrieve trace data from Google Stackdriver Trace. */
-class TracingApi {
-  /** View and manage your data across Google Cloud Platform services */
-  static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
-
-  /** Write Trace data for a project or application */
-  static const TraceAppendScope = "https://www.googleapis.com/auth/trace.append";
-
-  /** Read Trace data for a project or application */
-  static const TraceReadonlyScope = "https://www.googleapis.com/auth/trace.readonly";
-
-
-  final commons.ApiRequester _requester;
-
-  ProjectsResourceApi get projects => new ProjectsResourceApi(_requester);
-
-  TracingApi(http.Client client, {core.String rootUrl: "https://tracing.googleapis.com/", core.String servicePath: ""}) :
-      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
-}
-
-
-class ProjectsResourceApi {
-  final commons.ApiRequester _requester;
-
-  ProjectsTracesResourceApi get traces => new ProjectsTracesResourceApi(_requester);
-
-  ProjectsResourceApi(commons.ApiRequester client) : 
-      _requester = client;
-}
-
-
-class ProjectsTracesResourceApi {
-  final commons.ApiRequester _requester;
-
-  ProjectsTracesSpansResourceApi get spans => new ProjectsTracesSpansResourceApi(_requester);
-
-  ProjectsTracesResourceApi(commons.ApiRequester client) : 
-      _requester = client;
-
-  /**
-   * Sends new spans to Stackdriver Trace or updates existing traces. If the
-   * name of a trace that you send matches that of an existing trace, new spans
-   * are added to the existing trace. Attempt to update existing spans results
-   * undefined behavior. If the name does not match, a new trace is created
-   * with given set of spans.
-   *
-   * [request] - The metadata request object.
-   *
-   * Request parameters:
-   *
-   * [name] - Name of the project where the spans belong to. Format is
-   * `projects/PROJECT_ID`.
-   * Value must have pattern "^projects/[^/]+$".
-   *
-   * Completes with a [Empty].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Empty> batchWrite(BatchWriteSpansRequest request, core.String name) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (request != null) {
-      _body = convert.JSON.encode((request).toJson());
-    }
-    if (name == null) {
-      throw new core.ArgumentError("Parameter name is required.");
-    }
-
-    _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$name') + '/traces:batchWrite';
-
-    var _response = _requester.request(_url,
-                                       "POST",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Empty.fromJson(data));
-  }
-
-  /**
-   * Returns of a list of traces that match the specified filter conditions.
-   *
-   * Request parameters:
-   *
-   * [parent] - ID of the Cloud project where the trace data is stored which is
-   * `projects/PROJECT_ID`.
-   * Value must have pattern "^projects/[^/]+$".
-   *
-   * [orderBy] - Field used to sort the returned traces. Optional.
-   * Can be one of the following:
-   *
-   * *   `trace_id`
-   * *   `name` (`name` field of root span in the trace)
-   * *   `duration` (difference between `end_time` and `start_time` fields of
-   *      the root span)
-   * *   `start` (`start_time` field of the root span)
-   *
-   * Descending order can be specified by appending `desc` to the sort field
-   * (for example, `name desc`).
-   *
-   * Only one sort field is permitted.
-   *
-   * [filter] - An optional filter for the request.
-   * Example:
-   * `version_label_key:a some_label:some_label_key`
-   * returns traces from version `a` and has `some_label` with `some_label_key`.
-   *
-   * [endTime] - End of the time interval (inclusive) during which the trace
-   * data was
-   * collected from the application.
-   *
-   * [pageToken] - Token identifying the page of results to return. If provided,
-   * use the
-   * value of the `next_page_token` field from a previous request. Optional.
-   *
-   * [startTime] - Start of the time interval (inclusive) during which the trace
-   * data was
-   * collected from the application.
-   *
-   * [pageSize] - Maximum number of traces to return. If not specified or <= 0,
-   * the
-   * implementation selects a reasonable value. The implementation may
-   * return fewer traces than the requested page size. Optional.
-   *
-   * Completes with a [ListTracesResponse].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<ListTracesResponse> list(core.String parent, {core.String orderBy, core.String filter, core.String endTime, core.String pageToken, core.String startTime, core.int pageSize}) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (parent == null) {
-      throw new core.ArgumentError("Parameter parent is required.");
-    }
-    if (orderBy != null) {
-      _queryParams["orderBy"] = [orderBy];
-    }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
-    if (endTime != null) {
-      _queryParams["endTime"] = [endTime];
-    }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
-    if (startTime != null) {
-      _queryParams["startTime"] = [startTime];
-    }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
-
-    _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + '/traces';
-
-    var _response = _requester.request(_url,
-                                       "GET",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new ListTracesResponse.fromJson(data));
-  }
-
-  /**
-   * Returns a list of spans within a trace.
-   *
-   * Request parameters:
-   *
-   * [parent] - ID of the trace for which to list child spans. Format is
-   * `projects/PROJECT_ID/traces/TRACE_ID`.
-   * Value must have pattern "^projects/[^/]+/traces/[^/]+$".
-   *
-   * [pageToken] - Token identifying the page of results to return. If provided,
-   * use the
-   * value of the `nextPageToken` field from a previous request. Optional.
-   *
-   * Completes with a [ListSpansResponse].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<ListSpansResponse> listSpans(core.String parent, {core.String pageToken}) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (parent == null) {
-      throw new core.ArgumentError("Parameter parent is required.");
-    }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
-
-    _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + ':listSpans';
-
-    var _response = _requester.request(_url,
-                                       "GET",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new ListSpansResponse.fromJson(data));
-  }
-
-}
-
-
-class ProjectsTracesSpansResourceApi {
-  final commons.ApiRequester _requester;
-
-  ProjectsTracesSpansResourceApi(commons.ApiRequester client) : 
-      _requester = client;
-
-  /**
-   * Creates a new Span.
-   *
-   * [request] - The metadata request object.
-   *
-   * Request parameters:
-   *
-   * [name] - The resource name of Span in the format
-   * `projects/PROJECT_ID/traces/TRACE_ID/spans/SPAN_ID`.
-   * `TRACE_ID` is a unique identifier for a trace within a project and is a
-   * base16-encoded, case-insensitive string and is required to be 32 char long.
-   * `SPAN_ID` is a unique identifier for a span within a trace. It is a
-   * base 16-encoded, case-insensitive string of a 8-bytes array and is required
-   * to be 16 char long.
-   * Value must have pattern "^projects/[^/]+/traces/[^/]+/spans/[^/]+$".
-   *
-   * Completes with a [Span].
-   *
-   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
-   * error.
-   *
-   * If the used [http.Client] completes with an error when making a REST call,
-   * this method will complete with the same error.
-   */
-  async.Future<Span> create(Span request, core.String name) {
-    var _url = null;
-    var _queryParams = new core.Map();
-    var _uploadMedia = null;
-    var _uploadOptions = null;
-    var _downloadOptions = commons.DownloadOptions.Metadata;
-    var _body = null;
-
-    if (request != null) {
-      _body = convert.JSON.encode((request).toJson());
-    }
-    if (name == null) {
-      throw new core.ArgumentError("Parameter name is required.");
-    }
-
-    _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$name');
-
-    var _response = _requester.request(_url,
-                                       "PUT",
-                                       body: _body,
-                                       queryParams: _queryParams,
-                                       uploadOptions: _uploadOptions,
-                                       uploadMedia: _uploadMedia,
-                                       downloadOptions: _downloadOptions);
-    return _response.then((data) => new Span.fromJson(data));
-  }
-
-}
-
-
-
-/**
- * Text annotation with a set of attributes. A maximum of 32 annotations are
- * allowed per Span.
- */
-class Annotation {
-  /**
-   * A set of attributes on the annotation. A maximum of 4 attributes are
-   * allowed per Annotation.
-   */
-  Attributes attributes;
-  /**
-   * A user-supplied message describing the event. The maximum length for
-   * the description is 256 bytes.
-   */
-  TruncatableString description;
-
-  Annotation();
-
-  Annotation.fromJson(core.Map _json) {
-    if (_json.containsKey("attributes")) {
-      attributes = new Attributes.fromJson(_json["attributes"]);
-    }
-    if (_json.containsKey("description")) {
-      description = new TruncatableString.fromJson(_json["description"]);
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (attributes != null) {
-      _json["attributes"] = (attributes).toJson();
-    }
-    if (description != null) {
-      _json["description"] = (description).toJson();
-    }
-    return _json;
-  }
-}
-
-/** The allowed types for the value side of an attribute key:value pair. */
-class AttributeValue {
-  /** A boolean value. */
-  core.bool boolValue;
-  /** An integer value. */
-  core.String intValue;
-  /** A string value (up to 256 bytes). */
-  TruncatableString stringValue;
-
-  AttributeValue();
-
-  AttributeValue.fromJson(core.Map _json) {
-    if (_json.containsKey("boolValue")) {
-      boolValue = _json["boolValue"];
-    }
-    if (_json.containsKey("intValue")) {
-      intValue = _json["intValue"];
-    }
-    if (_json.containsKey("stringValue")) {
-      stringValue = new TruncatableString.fromJson(_json["stringValue"]);
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (boolValue != null) {
-      _json["boolValue"] = boolValue;
-    }
-    if (intValue != null) {
-      _json["intValue"] = intValue;
-    }
-    if (stringValue != null) {
-      _json["stringValue"] = (stringValue).toJson();
-    }
-    return _json;
-  }
-}
-
-/** Attributes of a span with a key:value format. */
-class Attributes {
-  /**
-   * The maximum key length is 128 bytes (attributes are dropped if the
-   * key size is larger than the maximum allowed). The value can be a string
-   * (up to 256 bytes), integer, or boolean (true/false). Some common pair
-   * examples:
-   *
-   *     "/instance_id": "my-instance"
-   *     "/zone": "us-central1-a"
-   *     "/grpc/peer_address": "ip:port" (dns, etc.)
-   *     "/grpc/deadline": "Duration"
-   *     "/http/user_agent"
-   *     "/http/request_bytes": 300
-   *     "/http/response_bytes": 1200
-   *     "/http/url": google.com/apis
-   *     "abc.com/myattribute": true
-   */
-  core.Map<core.String, AttributeValue> attributeMap;
-  /**
-   * The number of dropped attributes after the maximum size was enforced. If
-   * 0 then no attributes were dropped.
-   */
-  core.int droppedAttributesCount;
-
-  Attributes();
-
-  Attributes.fromJson(core.Map _json) {
-    if (_json.containsKey("attributeMap")) {
-      attributeMap = commons.mapMap<core.Map<core.String, core.Object>, AttributeValue>(_json["attributeMap"], (core.Map<core.String, core.Object> item) => new AttributeValue.fromJson(item));
-    }
-    if (_json.containsKey("droppedAttributesCount")) {
-      droppedAttributesCount = _json["droppedAttributesCount"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (attributeMap != null) {
-      _json["attributeMap"] = commons.mapMap<AttributeValue, core.Map<core.String, core.Object>>(attributeMap, (AttributeValue item) => (item).toJson());
-    }
-    if (droppedAttributesCount != null) {
-      _json["droppedAttributesCount"] = droppedAttributesCount;
-    }
-    return _json;
-  }
-}
-
-/** The request message for the `BatchWriteSpans` method. */
-class BatchWriteSpansRequest {
-  /** A collection of spans. */
-  core.List<Span> spans;
-
-  BatchWriteSpansRequest();
-
-  BatchWriteSpansRequest.fromJson(core.Map _json) {
-    if (_json.containsKey("spans")) {
-      spans = _json["spans"].map((value) => new Span.fromJson(value)).toList();
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (spans != null) {
-      _json["spans"] = spans.map((value) => (value).toJson()).toList();
-    }
-    return _json;
-  }
-}
-
-/**
- * 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 `{}`.
- */
-class Empty {
-
-  Empty();
-
-  Empty.fromJson(core.Map _json) {
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    return _json;
-  }
-}
-
-/**
- * A pointer from this span to another span in a different `Trace` within
- * the same service project or within a different service project. Used
- * (for example) in batching operations, where a single batch handler
- * processes multiple requests from different traces or when receives a
- * request from a different service project.
- */
-class Link {
-  /**
-   * `SPAN_ID` is a unique identifier for a span within a trace. It is a
-   * base16-encoded, case-insensitive string of a 8-bytes array and is
-   * required to be 16 char long.
-   */
-  core.String spanId;
-  /**
-   * `TRACE_ID` is a unique identifier for a trace within a project. It is
-   * a base16-encoded, case-insensitive string of a 16-bytes array and is
-   * required to be 32 char long.
-   */
-  core.String traceId;
-  /**
-   * The relationship of the current span relative to the linked span.
-   * Possible string values are:
-   * - "TYPE_UNSPECIFIED" : The relationship of the two spans is unknown.
-   * - "CHILD" : The current span is a child of the linked span.
-   * - "PARENT" : The current span is the parent of the linked span.
-   */
-  core.String type;
-
-  Link();
-
-  Link.fromJson(core.Map _json) {
-    if (_json.containsKey("spanId")) {
-      spanId = _json["spanId"];
-    }
-    if (_json.containsKey("traceId")) {
-      traceId = _json["traceId"];
-    }
-    if (_json.containsKey("type")) {
-      type = _json["type"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (spanId != null) {
-      _json["spanId"] = spanId;
-    }
-    if (traceId != null) {
-      _json["traceId"] = traceId;
-    }
-    if (type != null) {
-      _json["type"] = type;
-    }
-    return _json;
-  }
-}
-
-/**
- * A collection of links, which are references from this span to a span
- * in the same or different trace.
- */
-class Links {
-  /**
-   * The number of dropped links after the maximum size was enforced. If
-   * 0 then no links were dropped.
-   */
-  core.int droppedLinksCount;
-  /** A collection of links. */
-  core.List<Link> link;
-
-  Links();
-
-  Links.fromJson(core.Map _json) {
-    if (_json.containsKey("droppedLinksCount")) {
-      droppedLinksCount = _json["droppedLinksCount"];
-    }
-    if (_json.containsKey("link")) {
-      link = _json["link"].map((value) => new Link.fromJson(value)).toList();
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (droppedLinksCount != null) {
-      _json["droppedLinksCount"] = droppedLinksCount;
-    }
-    if (link != null) {
-      _json["link"] = link.map((value) => (value).toJson()).toList();
-    }
-    return _json;
-  }
-}
-
-/** The response message for the `ListSpans` method. */
-class ListSpansResponse {
-  /**
-   * If defined, indicates that there are more spans that match the request.
-   * Pass this as the value of `pageToken` in a subsequent request to retrieve
-   * additional spans.
-   */
-  core.String nextPageToken;
-  /** The requested spans if there are any in the specified trace. */
-  core.List<Span> spans;
-
-  ListSpansResponse();
-
-  ListSpansResponse.fromJson(core.Map _json) {
-    if (_json.containsKey("nextPageToken")) {
-      nextPageToken = _json["nextPageToken"];
-    }
-    if (_json.containsKey("spans")) {
-      spans = _json["spans"].map((value) => new Span.fromJson(value)).toList();
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (nextPageToken != null) {
-      _json["nextPageToken"] = nextPageToken;
-    }
-    if (spans != null) {
-      _json["spans"] = spans.map((value) => (value).toJson()).toList();
-    }
-    return _json;
-  }
-}
-
-/** The response message for the `ListTraces` method. */
-class ListTracesResponse {
-  /**
-   * If defined, indicates that there are more traces that match the request
-   * and that this value should be passed to the next request to continue
-   * retrieving additional traces.
-   */
-  core.String nextPageToken;
-  /** List of trace records returned. */
-  core.List<Trace> traces;
-
-  ListTracesResponse();
-
-  ListTracesResponse.fromJson(core.Map _json) {
-    if (_json.containsKey("nextPageToken")) {
-      nextPageToken = _json["nextPageToken"];
-    }
-    if (_json.containsKey("traces")) {
-      traces = _json["traces"].map((value) => new Trace.fromJson(value)).toList();
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (nextPageToken != null) {
-      _json["nextPageToken"] = nextPageToken;
-    }
-    if (traces != null) {
-      _json["traces"] = traces.map((value) => (value).toJson()).toList();
-    }
-    return _json;
-  }
-}
-
-/** Binary module. */
-class Module {
-  /**
-   * Build_id is a unique identifier for the module, usually a hash of its
-   * contents (up to 128 characters).
-   */
-  TruncatableString buildId;
-  /**
-   * E.g. main binary, kernel modules, and dynamic libraries
-   * such as libc.so, sharedlib.so (up to 256 characters).
-   */
-  TruncatableString module;
-
-  Module();
-
-  Module.fromJson(core.Map _json) {
-    if (_json.containsKey("buildId")) {
-      buildId = new TruncatableString.fromJson(_json["buildId"]);
-    }
-    if (_json.containsKey("module")) {
-      module = new TruncatableString.fromJson(_json["module"]);
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (buildId != null) {
-      _json["buildId"] = (buildId).toJson();
-    }
-    if (module != null) {
-      _json["module"] = (module).toJson();
-    }
-    return _json;
-  }
-}
-
-/**
- * An event describing an RPC message sent/received on the network. A
- * maximum of 128 network events are allowed per Span.
- */
-class NetworkEvent {
-  /** An identifier for the message, which must be unique in this span. */
-  core.String messageId;
-  /** The number of bytes sent or received. */
-  core.String messageSize;
-  /**
-   * If available, this is the kernel time:
-   *
-   * *  For sent messages, this is the time at which the first bit was sent.
-   * *  For received messages, this is the time at which the last bit was
-   *    received.
-   */
-  core.String time;
-  /**
-   * Type of NetworkEvent. Indicates whether the RPC message was sent or
-   * received.
-   * Possible string values are:
-   * - "TYPE_UNSPECIFIED" : Unknown event type.
-   * - "SENT" : Indicates a sent RPC message.
-   * - "RECV" : Indicates a received RPC message.
-   */
-  core.String type;
-
-  NetworkEvent();
-
-  NetworkEvent.fromJson(core.Map _json) {
-    if (_json.containsKey("messageId")) {
-      messageId = _json["messageId"];
-    }
-    if (_json.containsKey("messageSize")) {
-      messageSize = _json["messageSize"];
-    }
-    if (_json.containsKey("time")) {
-      time = _json["time"];
-    }
-    if (_json.containsKey("type")) {
-      type = _json["type"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (messageId != null) {
-      _json["messageId"] = messageId;
-    }
-    if (messageSize != null) {
-      _json["messageSize"] = messageSize;
-    }
-    if (time != null) {
-      _json["time"] = time;
-    }
-    if (type != null) {
-      _json["type"] = type;
-    }
-    return _json;
-  }
-}
-
-/**
- * A span represents a single operation within a trace. Spans can be nested
- * to form a trace tree. Often, a trace contains a root span that
- * describes the end-to-end latency and, optionally, one or more subspans for
- * its sub-operations. (A trace could alternatively contain multiple root spans,
- * or none at all.) Spans do not need to be contiguous. There may be gaps
- * and/or overlaps between spans in a trace.
- */
-class Span {
-  /**
-   * A set of attributes on the span. A maximum of 32 attributes are allowed per
-   * Span.
-   */
-  Attributes attributes;
-  /**
-   * Description of the operation in the span. It is sanitized and displayed in
-   * the Stackdriver Trace tool in the
-   * {% dynamic print site_values.console_name %}.
-   * The display_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 operation name, which makes it easier to correlate
-   * cross-trace spans.
-   * The maximum length for the display_name is 128 bytes.
-   */
-  TruncatableString displayName;
-  /**
-   * End time of the span.
-   * On the client side, this is the local machine clock time at which the span
-   * execution was ended; on the server
-   * side, this is the time at which the server application handler stopped
-   * running.
-   */
-  core.String endTime;
-  /** A maximum of 128 links are allowed per Span. */
-  Links links;
-  /**
-   * The resource name of Span in the format
-   * `projects/PROJECT_ID/traces/TRACE_ID/spans/SPAN_ID`.
-   * `TRACE_ID` is a unique identifier for a trace within a project and is a
-   * base16-encoded, case-insensitive string and is required to be 32 char long.
-   * `SPAN_ID` is a unique identifier for a span within a trace. It is a
-   * base 16-encoded, case-insensitive string of a 8-bytes array and is required
-   * to be 16 char long.
-   */
-  core.String name;
-  /**
-   * ID of parent span which is a base 16-encoded, case-insensitive string of
-   * a 8-bytes array and is required to be 16 char long. If this is a root span,
-   * the value must be empty.
-   */
-  core.String parentSpanId;
-  /**
-   * Unique identifier for a span within a trace. It is a base 16-encoded,
-   * case-insensitive string of a 8-bytes array and is required.
-   */
-  core.String spanId;
-  /** Stack trace captured at the start of the span. */
-  StackTrace stackTrace;
-  /**
-   * Start time of the span.
-   * On the client side, this is the local machine clock time at which the span
-   * execution was started; on the server
-   * side, this is the time at which the server application handler started
-   * running.
-   */
-  core.String startTime;
-  /** An optional final status for this span. */
-  Status status;
-  /**
-   * A maximum of 32 annotations and 128 network events are allowed per Span.
-   */
-  TimeEvents timeEvents;
-
-  Span();
-
-  Span.fromJson(core.Map _json) {
-    if (_json.containsKey("attributes")) {
-      attributes = new Attributes.fromJson(_json["attributes"]);
-    }
-    if (_json.containsKey("displayName")) {
-      displayName = new TruncatableString.fromJson(_json["displayName"]);
-    }
-    if (_json.containsKey("endTime")) {
-      endTime = _json["endTime"];
-    }
-    if (_json.containsKey("links")) {
-      links = new Links.fromJson(_json["links"]);
-    }
-    if (_json.containsKey("name")) {
-      name = _json["name"];
-    }
-    if (_json.containsKey("parentSpanId")) {
-      parentSpanId = _json["parentSpanId"];
-    }
-    if (_json.containsKey("spanId")) {
-      spanId = _json["spanId"];
-    }
-    if (_json.containsKey("stackTrace")) {
-      stackTrace = new StackTrace.fromJson(_json["stackTrace"]);
-    }
-    if (_json.containsKey("startTime")) {
-      startTime = _json["startTime"];
-    }
-    if (_json.containsKey("status")) {
-      status = new Status.fromJson(_json["status"]);
-    }
-    if (_json.containsKey("timeEvents")) {
-      timeEvents = new TimeEvents.fromJson(_json["timeEvents"]);
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (attributes != null) {
-      _json["attributes"] = (attributes).toJson();
-    }
-    if (displayName != null) {
-      _json["displayName"] = (displayName).toJson();
-    }
-    if (endTime != null) {
-      _json["endTime"] = endTime;
-    }
-    if (links != null) {
-      _json["links"] = (links).toJson();
-    }
-    if (name != null) {
-      _json["name"] = name;
-    }
-    if (parentSpanId != null) {
-      _json["parentSpanId"] = parentSpanId;
-    }
-    if (spanId != null) {
-      _json["spanId"] = spanId;
-    }
-    if (stackTrace != null) {
-      _json["stackTrace"] = (stackTrace).toJson();
-    }
-    if (startTime != null) {
-      _json["startTime"] = startTime;
-    }
-    if (status != null) {
-      _json["status"] = (status).toJson();
-    }
-    if (timeEvents != null) {
-      _json["timeEvents"] = (timeEvents).toJson();
-    }
-    return _json;
-  }
-}
-
-/** Represents a single stack frame in a stack trace. */
-class StackFrame {
-  /**
-   * Column number is important in JavaScript (anonymous functions).
-   * May not be available in some languages.
-   */
-  core.String columnNumber;
-  /** The filename of the file containing this frame (up to 256 characters). */
-  TruncatableString fileName;
-  /**
-   * The fully-qualified name that uniquely identifies this function or
-   * method (up to 1024 characters).
-   */
-  TruncatableString functionName;
-  /** Line number of the frame. */
-  core.String lineNumber;
-  /** Binary module the code is loaded from. */
-  Module loadModule;
-  /**
-   * Used when the function name is
-   * [mangled](http://www.avabodh.com/cxxin/namemangling.html). May be
-   * fully-qualified (up to 1024 characters).
-   */
-  TruncatableString originalFunctionName;
-  /** The version of the deployed source code (up to 128 characters). */
-  TruncatableString sourceVersion;
-
-  StackFrame();
-
-  StackFrame.fromJson(core.Map _json) {
-    if (_json.containsKey("columnNumber")) {
-      columnNumber = _json["columnNumber"];
-    }
-    if (_json.containsKey("fileName")) {
-      fileName = new TruncatableString.fromJson(_json["fileName"]);
-    }
-    if (_json.containsKey("functionName")) {
-      functionName = new TruncatableString.fromJson(_json["functionName"]);
-    }
-    if (_json.containsKey("lineNumber")) {
-      lineNumber = _json["lineNumber"];
-    }
-    if (_json.containsKey("loadModule")) {
-      loadModule = new Module.fromJson(_json["loadModule"]);
-    }
-    if (_json.containsKey("originalFunctionName")) {
-      originalFunctionName = new TruncatableString.fromJson(_json["originalFunctionName"]);
-    }
-    if (_json.containsKey("sourceVersion")) {
-      sourceVersion = new TruncatableString.fromJson(_json["sourceVersion"]);
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (columnNumber != null) {
-      _json["columnNumber"] = columnNumber;
-    }
-    if (fileName != null) {
-      _json["fileName"] = (fileName).toJson();
-    }
-    if (functionName != null) {
-      _json["functionName"] = (functionName).toJson();
-    }
-    if (lineNumber != null) {
-      _json["lineNumber"] = lineNumber;
-    }
-    if (loadModule != null) {
-      _json["loadModule"] = (loadModule).toJson();
-    }
-    if (originalFunctionName != null) {
-      _json["originalFunctionName"] = (originalFunctionName).toJson();
-    }
-    if (sourceVersion != null) {
-      _json["sourceVersion"] = (sourceVersion).toJson();
-    }
-    return _json;
-  }
-}
-
-/** Represents collection of StackFrames that can be truncated. */
-class StackFrames {
-  /**
-   * The number of dropped stack frames after the maximum size was enforced.
-   * If 0 then no frames were dropped.
-   */
-  core.int droppedFramesCount;
-  /** Stack frames in this stack trace. */
-  core.List<StackFrame> frame;
-
-  StackFrames();
-
-  StackFrames.fromJson(core.Map _json) {
-    if (_json.containsKey("droppedFramesCount")) {
-      droppedFramesCount = _json["droppedFramesCount"];
-    }
-    if (_json.containsKey("frame")) {
-      frame = _json["frame"].map((value) => new StackFrame.fromJson(value)).toList();
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (droppedFramesCount != null) {
-      _json["droppedFramesCount"] = droppedFramesCount;
-    }
-    if (frame != null) {
-      _json["frame"] = frame.map((value) => (value).toJson()).toList();
-    }
-    return _json;
-  }
-}
-
-/** StackTrace collected in a trace. */
-class StackTrace {
-  /** Stack frames in this stack trace. A maximum of 128 frames are allowed. */
-  StackFrames stackFrames;
-  /**
-   * The hash ID is used to conserve network bandwidth for duplicate
-   * stack traces within a single trace.
-   *
-   * Often multiple spans will have identical stack traces.
-   * The first occurrence of a stack trace should contain both the
-   * `stackFrame` content and a value in `stackTraceHashId`.
-   *
-   * Subsequent spans within the same request can refer
-   * to that stack trace by only setting `stackTraceHashId`.
-   */
-  core.String stackTraceHashId;
-
-  StackTrace();
-
-  StackTrace.fromJson(core.Map _json) {
-    if (_json.containsKey("stackFrames")) {
-      stackFrames = new StackFrames.fromJson(_json["stackFrames"]);
-    }
-    if (_json.containsKey("stackTraceHashId")) {
-      stackTraceHashId = _json["stackTraceHashId"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (stackFrames != null) {
-      _json["stackFrames"] = (stackFrames).toJson();
-    }
-    if (stackTraceHashId != null) {
-      _json["stackTraceHashId"] = stackTraceHashId;
-    }
-    return _json;
-  }
-}
-
-/**
- * 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` that 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.
- *
- * - 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.
- */
-class Status {
-  /** The status code, which should be an enum value of google.rpc.Code. */
-  core.int code;
-  /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
-   *
-   * The values for Object must be JSON objects. It can consist of `num`,
-   * `String`, `bool` and `null` as well as `Map` and `List` values.
-   */
-  core.List<core.Map<core.String, core.Object>> details;
-  /**
-   * 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.
-   */
-  core.String message;
-
-  Status();
-
-  Status.fromJson(core.Map _json) {
-    if (_json.containsKey("code")) {
-      code = _json["code"];
-    }
-    if (_json.containsKey("details")) {
-      details = _json["details"];
-    }
-    if (_json.containsKey("message")) {
-      message = _json["message"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (code != null) {
-      _json["code"] = code;
-    }
-    if (details != null) {
-      _json["details"] = details;
-    }
-    if (message != null) {
-      _json["message"] = message;
-    }
-    return _json;
-  }
-}
-
-/** A time-stamped annotation in the Span. */
-class TimeEvent {
-  /** One or more key:value pairs. */
-  Annotation annotation;
-  /** An event describing an RPC message sent/received on the network. */
-  NetworkEvent networkEvent;
-  /** The timestamp indicating the time the event occurred. */
-  core.String time;
-
-  TimeEvent();
-
-  TimeEvent.fromJson(core.Map _json) {
-    if (_json.containsKey("annotation")) {
-      annotation = new Annotation.fromJson(_json["annotation"]);
-    }
-    if (_json.containsKey("networkEvent")) {
-      networkEvent = new NetworkEvent.fromJson(_json["networkEvent"]);
-    }
-    if (_json.containsKey("time")) {
-      time = _json["time"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (annotation != null) {
-      _json["annotation"] = (annotation).toJson();
-    }
-    if (networkEvent != null) {
-      _json["networkEvent"] = (networkEvent).toJson();
-    }
-    if (time != null) {
-      _json["time"] = time;
-    }
-    return _json;
-  }
-}
-
-/**
- * A collection of `TimeEvent`s. A `TimeEvent` is a time-stamped annotation
- * on the span, consisting of either user-supplied key:value pairs, or
- * details of an RPC message sent/received on the network.
- */
-class TimeEvents {
-  /**
-   * The number of dropped annotations after the maximum size was enforced. If
-   * 0 then no annotations were dropped.
-   */
-  core.int droppedAnnotationsCount;
-  /**
-   * The number of dropped network events after the maximum size was enforced.
-   * If 0 then no annotations were dropped.
-   */
-  core.int droppedNetworkEventsCount;
-  /** A collection of `TimeEvent`s. */
-  core.List<TimeEvent> timeEvent;
-
-  TimeEvents();
-
-  TimeEvents.fromJson(core.Map _json) {
-    if (_json.containsKey("droppedAnnotationsCount")) {
-      droppedAnnotationsCount = _json["droppedAnnotationsCount"];
-    }
-    if (_json.containsKey("droppedNetworkEventsCount")) {
-      droppedNetworkEventsCount = _json["droppedNetworkEventsCount"];
-    }
-    if (_json.containsKey("timeEvent")) {
-      timeEvent = _json["timeEvent"].map((value) => new TimeEvent.fromJson(value)).toList();
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (droppedAnnotationsCount != null) {
-      _json["droppedAnnotationsCount"] = droppedAnnotationsCount;
-    }
-    if (droppedNetworkEventsCount != null) {
-      _json["droppedNetworkEventsCount"] = droppedNetworkEventsCount;
-    }
-    if (timeEvent != null) {
-      _json["timeEvent"] = timeEvent.map((value) => (value).toJson()).toList();
-    }
-    return _json;
-  }
-}
-
-/**
- * A trace describes how long it takes for an application to perform some
- * operations. It consists of a set of spans, each representing
- * an operation and including time information and operation details.
- */
-class Trace {
-  /**
-   * The resource name of Trace in the format
-   * `projects/PROJECT_ID/traces/TRACE_ID`. `TRACE_ID` is a unique identifier
-   * for a trace within a project and is a base16-encoded, case-insensitive
-   * string and is required to be 32 char long.
-   */
-  core.String name;
-
-  Trace();
-
-  Trace.fromJson(core.Map _json) {
-    if (_json.containsKey("name")) {
-      name = _json["name"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (name != null) {
-      _json["name"] = name;
-    }
-    return _json;
-  }
-}
-
-/** Represents a string value that might be truncated. */
-class TruncatableString {
-  /**
-   * The number of characters truncated from the original string value. If 0 it
-   * means that the string value was not truncated.
-   */
-  core.int truncatedCharacterCount;
-  /**
-   * The truncated string value. E.g. for a string attribute this may have up to
-   * 256 bytes.
-   */
-  core.String value;
-
-  TruncatableString();
-
-  TruncatableString.fromJson(core.Map _json) {
-    if (_json.containsKey("truncatedCharacterCount")) {
-      truncatedCharacterCount = _json["truncatedCharacterCount"];
-    }
-    if (_json.containsKey("value")) {
-      value = _json["value"];
-    }
-  }
-
-  core.Map<core.String, core.Object> toJson() {
-    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
-    if (truncatedCharacterCount != null) {
-      _json["truncatedCharacterCount"] = truncatedCharacterCount;
-    }
-    if (value != null) {
-      _json["value"] = value;
-    }
-    return _json;
-  }
-}
diff --git a/generated/googleapis/lib/translate/v2.dart b/generated/googleapis/lib/translate/v2.dart
index e5cd8a5..35663b5 100644
--- a/generated/googleapis/lib/translate/v2.dart
+++ b/generated/googleapis/lib/translate/v2.dart
@@ -138,12 +138,12 @@
    *
    * Request parameters:
    *
-   * [model] - The model type for which supported languages should be returned.
-   *
    * [target] - The language to use to return localized, human readable names of
    * supported
    * languages.
    *
+   * [model] - The model type for which supported languages should be returned.
+   *
    * Completes with a [LanguagesListResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -152,7 +152,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<LanguagesListResponse> list({core.String model, core.String target}) {
+  async.Future<LanguagesListResponse> list({core.String target, core.String model}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -160,12 +160,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (model != null) {
-      _queryParams["model"] = [model];
-    }
     if (target != null) {
       _queryParams["target"] = [target];
     }
+    if (model != null) {
+      _queryParams["model"] = [model];
+    }
 
     _url = 'v2/languages';
 
@@ -201,9 +201,6 @@
    * one of the
    * language codes listed in Language Support.
    *
-   * [model] - The `model` type requested for this translation. Valid values are
-   * listed in public documentation.
-   *
    * [source] - The language of the source text, set to one of the language
    * codes listed in
    * Language Support. If the source language is not specified, the API will
@@ -219,6 +216,9 @@
    * - "html" : Specifies the input is in HTML
    * - "text" : Specifies the input is in plain textual format
    *
+   * [model] - The `model` type requested for this translation. Valid values are
+   * listed in public documentation.
+   *
    * Completes with a [TranslationsListResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -227,7 +227,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<TranslationsListResponse> list(core.List<core.String> q, core.String target, {core.String model, core.String source, core.List<core.String> cid, core.String format}) {
+  async.Future<TranslationsListResponse> list(core.List<core.String> q, core.String target, {core.String source, core.List<core.String> cid, core.String format, core.String model}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -243,9 +243,6 @@
       throw new core.ArgumentError("Parameter target is required.");
     }
     _queryParams["target"] = [target];
-    if (model != null) {
-      _queryParams["model"] = [model];
-    }
     if (source != null) {
       _queryParams["source"] = [source];
     }
@@ -255,6 +252,9 @@
     if (format != null) {
       _queryParams["format"] = [format];
     }
+    if (model != null) {
+      _queryParams["model"] = [model];
+    }
 
     _url = 'v2';
 
diff --git a/generated/googleapis/lib/vault/v1.dart b/generated/googleapis/lib/vault/v1.dart
new file mode 100644
index 0000000..c3afa4d
--- /dev/null
+++ b/generated/googleapis/lib/vault/v1.dart
@@ -0,0 +1,1574 @@
+// This is a generated file (see the discoveryapis_generator project).
+
+library googleapis.vault.v1;
+
+import 'dart:core' as core;
+import 'dart:async' as async;
+import 'dart:convert' as convert;
+
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
+import 'package:http/http.dart' as http;
+
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
+    ApiRequestError, DetailedApiRequestError;
+
+const core.String USER_AGENT = 'dart-api-client vault/v1';
+
+class VaultApi {
+
+  final commons.ApiRequester _requester;
+
+  MattersResourceApi get matters => new MattersResourceApi(_requester);
+
+  VaultApi(http.Client client, {core.String rootUrl: "https://vault.googleapis.com/", core.String servicePath: ""}) :
+      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
+}
+
+
+class MattersResourceApi {
+  final commons.ApiRequester _requester;
+
+  MattersHoldsResourceApi get holds => new MattersHoldsResourceApi(_requester);
+
+  MattersResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Adds an account as a matter collaborator.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * Completes with a [MatterPermission].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<MatterPermission> addPermissions(AddMatterPermissionsRequest request, core.String matterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + ':addPermissions';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new MatterPermission.fromJson(data));
+  }
+
+  /**
+   * Closes the specified matter. Returns matter with updated state.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * Completes with a [CloseMatterResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<CloseMatterResponse> close(CloseMatterRequest request, core.String matterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + ':close';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new CloseMatterResponse.fromJson(data));
+  }
+
+  /**
+   * Creates a new matter. Returns created matter with default view.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * Completes with a [Matter].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Matter> create(Matter request) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+
+    _url = 'v1/matters';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Matter.fromJson(data));
+  }
+
+  /**
+   * Deletes the specified matter. Returns matter with updated state.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID
+   *
+   * Completes with a [Matter].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Matter> delete(core.String matterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Matter.fromJson(data));
+  }
+
+  /**
+   * Gets the specified matter.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * [view] - Specifies which parts of the Matter to return in the response.
+   * Possible string values are:
+   * - "VIEW_UNSPECIFIED" : A VIEW_UNSPECIFIED.
+   * - "BASIC" : A BASIC.
+   * - "FULL" : A FULL.
+   *
+   * Completes with a [Matter].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Matter> get(core.String matterId, {core.String view}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Matter.fromJson(data));
+  }
+
+  /**
+   * Lists matters the user has access to.
+   *
+   * Request parameters:
+   *
+   * [pageToken] - The pagination token as returned in the response.
+   *
+   * [pageSize] - The number of matters to return in the response.
+   * Default and maximum are 100.
+   *
+   * [view] - Specifies which parts of the matter to return in response.
+   * Possible string values are:
+   * - "VIEW_UNSPECIFIED" : A VIEW_UNSPECIFIED.
+   * - "BASIC" : A BASIC.
+   * - "FULL" : A FULL.
+   *
+   * Completes with a [ListMattersResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListMattersResponse> list({core.String pageToken, core.int pageSize, core.String view}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+
+    _url = 'v1/matters';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListMattersResponse.fromJson(data));
+  }
+
+  /**
+   * Removes an account as a matter collaborator.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> removePermissions(RemoveMatterPermissionsRequest request, core.String matterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + ':removePermissions';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Reopens the specified matter. Returns matter with updated state.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * Completes with a [ReopenMatterResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ReopenMatterResponse> reopen(ReopenMatterRequest request, core.String matterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + ':reopen';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ReopenMatterResponse.fromJson(data));
+  }
+
+  /**
+   * Undeletes the specified matter. Returns matter with updated state.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * Completes with a [Matter].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Matter> undelete(UndeleteMatterRequest request, core.String matterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + ':undelete';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Matter.fromJson(data));
+  }
+
+  /**
+   * Updates the specified matter.
+   * This updates only the name and description of the matter, identified by
+   * matter id. Changes to any other fields are ignored.
+   * Returns the default view of the matter.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * Completes with a [Matter].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Matter> update(Matter request, core.String matterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId');
+
+    var _response = _requester.request(_url,
+                                       "PUT",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Matter.fromJson(data));
+  }
+
+}
+
+
+class MattersHoldsResourceApi {
+  final commons.ApiRequester _requester;
+
+  MattersHoldsAccountsResourceApi get accounts => new MattersHoldsAccountsResourceApi(_requester);
+
+  MattersHoldsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates a hold in the given matter.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * Completes with a [Hold].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Hold> create(Hold request, core.String matterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + '/holds';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Hold.fromJson(data));
+  }
+
+  /**
+   * Removes a hold by ID. This will release any HeldAccounts on this Hold.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * [holdId] - The hold ID.
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String matterId, core.String holdId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+    if (holdId == null) {
+      throw new core.ArgumentError("Parameter holdId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + '/holds/' + commons.Escaper.ecapeVariable('$holdId');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Gets a hold by ID.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * [holdId] - The hold ID.
+   *
+   * Completes with a [Hold].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Hold> get(core.String matterId, core.String holdId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+    if (holdId == null) {
+      throw new core.ArgumentError("Parameter holdId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + '/holds/' + commons.Escaper.ecapeVariable('$holdId');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Hold.fromJson(data));
+  }
+
+  /**
+   * Lists holds within a matter. An empty page token in ListHoldsResponse
+   * denotes no more holds to list.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * [pageToken] - The pagination token as returned in the response.
+   * An empty token means start from the beginning.
+   *
+   * [pageSize] - The number of holds to return in the response, between 0 and
+   * 100 inclusive.
+   * Leaving this empty, or as 0, is the same as page_size = 100.
+   *
+   * Completes with a [ListHoldsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListHoldsResponse> list(core.String matterId, {core.String pageToken, core.int pageSize}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + '/holds';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListHoldsResponse.fromJson(data));
+  }
+
+  /**
+   * Updates the OU and/or query parameters of a hold. You cannot add accounts
+   * to a hold that covers an OU, nor can you add OUs to a hold that covers
+   * individual accounts. Accounts listed in the hold will be ignored.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * [holdId] - The ID of the hold.
+   *
+   * Completes with a [Hold].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Hold> update(Hold request, core.String matterId, core.String holdId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+    if (holdId == null) {
+      throw new core.ArgumentError("Parameter holdId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + '/holds/' + commons.Escaper.ecapeVariable('$holdId');
+
+    var _response = _requester.request(_url,
+                                       "PUT",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Hold.fromJson(data));
+  }
+
+}
+
+
+class MattersHoldsAccountsResourceApi {
+  final commons.ApiRequester _requester;
+
+  MattersHoldsAccountsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Adds a HeldAccount to a hold. Accounts can only be added to a hold that
+   * has no held_org_unit set. Attempting to add an account to an OU-based
+   * hold will result in an error.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * [holdId] - The hold ID.
+   *
+   * Completes with a [HeldAccount].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<HeldAccount> create(HeldAccount request, core.String matterId, core.String holdId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+    if (holdId == null) {
+      throw new core.ArgumentError("Parameter holdId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + '/holds/' + commons.Escaper.ecapeVariable('$holdId') + '/accounts';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new HeldAccount.fromJson(data));
+  }
+
+  /**
+   * Removes a HeldAccount from a hold. If this request leaves the hold with
+   * no held accounts, the hold will not apply to any accounts.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * [holdId] - The hold ID.
+   *
+   * [accountId] - The ID of the account to remove from the hold.
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String matterId, core.String holdId, core.String accountId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+    if (holdId == null) {
+      throw new core.ArgumentError("Parameter holdId is required.");
+    }
+    if (accountId == null) {
+      throw new core.ArgumentError("Parameter accountId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + '/holds/' + commons.Escaper.ecapeVariable('$holdId') + '/accounts/' + commons.Escaper.ecapeVariable('$accountId');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Lists HeldAccounts for a hold. This will only list individually specified
+   * held accounts. If the hold is on an OU, then use the
+   * <ahref="https://developers.google.com/admin-sdk/">Admin SDK</a>
+   * to enumerate its members.
+   *
+   * Request parameters:
+   *
+   * [matterId] - The matter ID.
+   *
+   * [holdId] - The hold ID.
+   *
+   * Completes with a [ListHeldAccountsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListHeldAccountsResponse> list(core.String matterId, core.String holdId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (matterId == null) {
+      throw new core.ArgumentError("Parameter matterId is required.");
+    }
+    if (holdId == null) {
+      throw new core.ArgumentError("Parameter holdId is required.");
+    }
+
+    _url = 'v1/matters/' + commons.Escaper.ecapeVariable('$matterId') + '/holds/' + commons.Escaper.ecapeVariable('$holdId') + '/accounts';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListHeldAccountsResponse.fromJson(data));
+  }
+
+}
+
+
+
+/**
+ * Add an account with the permission specified. The role cannot be owner.
+ * If an account already has a role in the matter, it will be
+ * overwritten.
+ */
+class AddMatterPermissionsRequest {
+  /**
+   * Only relevant if send_emails is true.
+   * True to CC requestor in the email message.
+   * False to not CC requestor.
+   */
+  core.bool ccMe;
+  /** The MatterPermission to add. */
+  MatterPermission matterPermission;
+  /**
+   * True to send notification email to the added account.
+   * False to not send notification email.
+   */
+  core.bool sendEmails;
+
+  AddMatterPermissionsRequest();
+
+  AddMatterPermissionsRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("ccMe")) {
+      ccMe = _json["ccMe"];
+    }
+    if (_json.containsKey("matterPermission")) {
+      matterPermission = new MatterPermission.fromJson(_json["matterPermission"]);
+    }
+    if (_json.containsKey("sendEmails")) {
+      sendEmails = _json["sendEmails"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (ccMe != null) {
+      _json["ccMe"] = ccMe;
+    }
+    if (matterPermission != null) {
+      _json["matterPermission"] = (matterPermission).toJson();
+    }
+    if (sendEmails != null) {
+      _json["sendEmails"] = sendEmails;
+    }
+    return _json;
+  }
+}
+
+/** Close a matter by ID. */
+class CloseMatterRequest {
+
+  CloseMatterRequest();
+
+  CloseMatterRequest.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/** Response to a CloseMatterRequest. */
+class CloseMatterResponse {
+  /** The updated matter, with state CLOSED. */
+  Matter matter;
+
+  CloseMatterResponse();
+
+  CloseMatterResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("matter")) {
+      matter = new Matter.fromJson(_json["matter"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (matter != null) {
+      _json["matter"] = (matter).toJson();
+    }
+    return _json;
+  }
+}
+
+/** Corpus specific queries. */
+class CorpusQuery {
+  /** Details pertaining to Drive holds. If set, corpus must be Drive. */
+  HeldDriveQuery driveQuery;
+  /** Details pertaining to Groups holds. If set, corpus must be Groups. */
+  HeldGroupsQuery groupsQuery;
+  /** Details pertaining to mail holds. If set, corpus must be mail. */
+  HeldMailQuery mailQuery;
+
+  CorpusQuery();
+
+  CorpusQuery.fromJson(core.Map _json) {
+    if (_json.containsKey("driveQuery")) {
+      driveQuery = new HeldDriveQuery.fromJson(_json["driveQuery"]);
+    }
+    if (_json.containsKey("groupsQuery")) {
+      groupsQuery = new HeldGroupsQuery.fromJson(_json["groupsQuery"]);
+    }
+    if (_json.containsKey("mailQuery")) {
+      mailQuery = new HeldMailQuery.fromJson(_json["mailQuery"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (driveQuery != null) {
+      _json["driveQuery"] = (driveQuery).toJson();
+    }
+    if (groupsQuery != null) {
+      _json["groupsQuery"] = (groupsQuery).toJson();
+    }
+    if (mailQuery != null) {
+      _json["mailQuery"] = (mailQuery).toJson();
+    }
+    return _json;
+  }
+}
+
+/**
+ * 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 `{}`.
+ */
+class Empty {
+
+  Empty();
+
+  Empty.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/**
+ * An account being held in a particular hold. This structure is immutable.
+ * This can be either a single user or a google group, depending on the corpus.
+ */
+class HeldAccount {
+  /**
+   * The account's ID as provided by the <a
+   * href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
+   */
+  core.String accountId;
+  /** When the account was put on hold. */
+  core.String holdTime;
+
+  HeldAccount();
+
+  HeldAccount.fromJson(core.Map _json) {
+    if (_json.containsKey("accountId")) {
+      accountId = _json["accountId"];
+    }
+    if (_json.containsKey("holdTime")) {
+      holdTime = _json["holdTime"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (accountId != null) {
+      _json["accountId"] = accountId;
+    }
+    if (holdTime != null) {
+      _json["holdTime"] = holdTime;
+    }
+    return _json;
+  }
+}
+
+/** Query options for drive holds. */
+class HeldDriveQuery {
+  /** If true, include files in Team Drives in the hold. */
+  core.bool includeTeamDriveFiles;
+
+  HeldDriveQuery();
+
+  HeldDriveQuery.fromJson(core.Map _json) {
+    if (_json.containsKey("includeTeamDriveFiles")) {
+      includeTeamDriveFiles = _json["includeTeamDriveFiles"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (includeTeamDriveFiles != null) {
+      _json["includeTeamDriveFiles"] = includeTeamDriveFiles;
+    }
+    return _json;
+  }
+}
+
+/** Query options for group holds. */
+class HeldGroupsQuery {
+  /**
+   * The end date range for the search query. These timestamps are in GMT and
+   * rounded down to the start of the given date.
+   */
+  core.String endTime;
+  /**
+   * The start date range for the search query. These timestamps are in GMT and
+   * rounded down to the start of the given date.
+   */
+  core.String startTime;
+  /** The search terms for the hold. */
+  core.String terms;
+
+  HeldGroupsQuery();
+
+  HeldGroupsQuery.fromJson(core.Map _json) {
+    if (_json.containsKey("endTime")) {
+      endTime = _json["endTime"];
+    }
+    if (_json.containsKey("startTime")) {
+      startTime = _json["startTime"];
+    }
+    if (_json.containsKey("terms")) {
+      terms = _json["terms"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (endTime != null) {
+      _json["endTime"] = endTime;
+    }
+    if (startTime != null) {
+      _json["startTime"] = startTime;
+    }
+    if (terms != null) {
+      _json["terms"] = terms;
+    }
+    return _json;
+  }
+}
+
+/** Query options for mail holds. */
+class HeldMailQuery {
+  /**
+   * The end date range for the search query. These timestamps are in GMT and
+   * rounded down to the start of the given date.
+   */
+  core.String endTime;
+  /**
+   * The start date range for the search query. These timestamps are in GMT and
+   * rounded down to the start of the given date.
+   */
+  core.String startTime;
+  /** The search terms for the hold. */
+  core.String terms;
+
+  HeldMailQuery();
+
+  HeldMailQuery.fromJson(core.Map _json) {
+    if (_json.containsKey("endTime")) {
+      endTime = _json["endTime"];
+    }
+    if (_json.containsKey("startTime")) {
+      startTime = _json["startTime"];
+    }
+    if (_json.containsKey("terms")) {
+      terms = _json["terms"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (endTime != null) {
+      _json["endTime"] = endTime;
+    }
+    if (startTime != null) {
+      _json["startTime"] = startTime;
+    }
+    if (terms != null) {
+      _json["terms"] = terms;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A organizational unit being held in a particular hold.
+ * This structure is immutable.
+ */
+class HeldOrgUnit {
+  /** When the org unit was put on hold. This property is immutable. */
+  core.String holdTime;
+  /** The org unit's immutable ID as provided by the admin SDK. */
+  core.String orgUnitId;
+
+  HeldOrgUnit();
+
+  HeldOrgUnit.fromJson(core.Map _json) {
+    if (_json.containsKey("holdTime")) {
+      holdTime = _json["holdTime"];
+    }
+    if (_json.containsKey("orgUnitId")) {
+      orgUnitId = _json["orgUnitId"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (holdTime != null) {
+      _json["holdTime"] = holdTime;
+    }
+    if (orgUnitId != null) {
+      _json["orgUnitId"] = orgUnitId;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Represents a hold within Vault. A hold restricts purging of
+ * artifacts based on the combination of the query and accounts restrictions.
+ * A hold can be configured to either apply to an explicitly configured set
+ * of accounts, or can be applied to all members of an organizational unit.
+ */
+class Hold {
+  /**
+   * If set, the hold applies to the enumerated accounts and org_unit must be
+   * empty.
+   */
+  core.List<HeldAccount> accounts;
+  /**
+   * The corpus to be searched.
+   * Possible string values are:
+   * - "CORPUS_TYPE_UNSPECIFIED" : No corpus specified.
+   * - "DRIVE" : Drive.
+   * - "MAIL" : Mail.
+   * - "GROUPS" : Groups.
+   */
+  core.String corpus;
+  /** The unique immutable ID of the hold. Assigned during creation. */
+  core.String holdId;
+  /** The name of the hold. */
+  core.String name;
+  /**
+   * If set, the hold applies to all members of the organizational unit and
+   * accounts must be empty. This property is mutable. For groups holds,
+   * set the accounts field.
+   */
+  HeldOrgUnit orgUnit;
+  /**
+   * The corpus-specific query. If set, the corpusQuery must match corpus
+   * type.
+   */
+  CorpusQuery query;
+  /** The last time this hold was modified. */
+  core.String updateTime;
+
+  Hold();
+
+  Hold.fromJson(core.Map _json) {
+    if (_json.containsKey("accounts")) {
+      accounts = _json["accounts"].map((value) => new HeldAccount.fromJson(value)).toList();
+    }
+    if (_json.containsKey("corpus")) {
+      corpus = _json["corpus"];
+    }
+    if (_json.containsKey("holdId")) {
+      holdId = _json["holdId"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("orgUnit")) {
+      orgUnit = new HeldOrgUnit.fromJson(_json["orgUnit"]);
+    }
+    if (_json.containsKey("query")) {
+      query = new CorpusQuery.fromJson(_json["query"]);
+    }
+    if (_json.containsKey("updateTime")) {
+      updateTime = _json["updateTime"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (accounts != null) {
+      _json["accounts"] = accounts.map((value) => (value).toJson()).toList();
+    }
+    if (corpus != null) {
+      _json["corpus"] = corpus;
+    }
+    if (holdId != null) {
+      _json["holdId"] = holdId;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (orgUnit != null) {
+      _json["orgUnit"] = (orgUnit).toJson();
+    }
+    if (query != null) {
+      _json["query"] = (query).toJson();
+    }
+    if (updateTime != null) {
+      _json["updateTime"] = updateTime;
+    }
+    return _json;
+  }
+}
+
+/** Returns a list of held accounts for a hold. */
+class ListHeldAccountsResponse {
+  /** The held accounts on a hold. */
+  core.List<HeldAccount> accounts;
+
+  ListHeldAccountsResponse();
+
+  ListHeldAccountsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("accounts")) {
+      accounts = _json["accounts"].map((value) => new HeldAccount.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (accounts != null) {
+      _json["accounts"] = accounts.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** The holds for a matter. */
+class ListHoldsResponse {
+  /** The list of holds. */
+  core.List<Hold> holds;
+  /**
+   * Page token to retrieve the next page of results in the list.
+   * If this is empty, then there are no more holds to list.
+   */
+  core.String nextPageToken;
+
+  ListHoldsResponse();
+
+  ListHoldsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("holds")) {
+      holds = _json["holds"].map((value) => new Hold.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (holds != null) {
+      _json["holds"] = holds.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** Provides the list of matters. */
+class ListMattersResponse {
+  /** List of matters. */
+  core.List<Matter> matters;
+  /** Page token to retrieve the next page of results in the list. */
+  core.String nextPageToken;
+
+  ListMattersResponse();
+
+  ListMattersResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("matters")) {
+      matters = _json["matters"].map((value) => new Matter.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (matters != null) {
+      _json["matters"] = matters.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** Represents a matter. */
+class Matter {
+  /** The description of the matter. */
+  core.String description;
+  /**
+   * The matter ID which is generated by the server.
+   * Should be blank when creating a new matter.
+   */
+  core.String matterId;
+  /**
+   * List of users and access to the matter. Currently there is no programmer
+   * defined limit on the number of permissions a matter can have.
+   */
+  core.List<MatterPermission> matterPermissions;
+  /** The name of the matter. */
+  core.String name;
+  /**
+   * The state of the matter.
+   * Possible string values are:
+   * - "STATE_UNSPECIFIED" : The matter has no specified state.
+   * - "OPEN" : This matter is open.
+   * - "CLOSED" : This matter is closed.
+   * - "DELETED" : This matter is deleted.
+   */
+  core.String state;
+
+  Matter();
+
+  Matter.fromJson(core.Map _json) {
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("matterId")) {
+      matterId = _json["matterId"];
+    }
+    if (_json.containsKey("matterPermissions")) {
+      matterPermissions = _json["matterPermissions"].map((value) => new MatterPermission.fromJson(value)).toList();
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (matterId != null) {
+      _json["matterId"] = matterId;
+    }
+    if (matterPermissions != null) {
+      _json["matterPermissions"] = matterPermissions.map((value) => (value).toJson()).toList();
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (state != null) {
+      _json["state"] = state;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Currently each matter only has one owner, and all others are collaborators.
+ * When an account is purged, its corresponding MatterPermission resources
+ * cease to exist.
+ */
+class MatterPermission {
+  /**
+   * The account id, as provided by <a
+   * href="https://developers.google.com/admin-sdk/">Admin SDK</a>.
+   */
+  core.String accountId;
+  /**
+   * The user's role in this matter.
+   * Possible string values are:
+   * - "ROLE_UNSPECIFIED" : No role assigned.
+   * - "COLLABORATOR" : A collaborator to the matter.
+   * - "OWNER" : The owner of the matter.
+   */
+  core.String role;
+
+  MatterPermission();
+
+  MatterPermission.fromJson(core.Map _json) {
+    if (_json.containsKey("accountId")) {
+      accountId = _json["accountId"];
+    }
+    if (_json.containsKey("role")) {
+      role = _json["role"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (accountId != null) {
+      _json["accountId"] = accountId;
+    }
+    if (role != null) {
+      _json["role"] = role;
+    }
+    return _json;
+  }
+}
+
+/** Remove an account as a matter collaborator. */
+class RemoveMatterPermissionsRequest {
+  /** The account ID. */
+  core.String accountId;
+
+  RemoveMatterPermissionsRequest();
+
+  RemoveMatterPermissionsRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("accountId")) {
+      accountId = _json["accountId"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (accountId != null) {
+      _json["accountId"] = accountId;
+    }
+    return _json;
+  }
+}
+
+/** Reopen a matter by ID. */
+class ReopenMatterRequest {
+
+  ReopenMatterRequest();
+
+  ReopenMatterRequest.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/** Response to a ReopenMatterRequest. */
+class ReopenMatterResponse {
+  /** The updated matter, with state OPEN. */
+  Matter matter;
+
+  ReopenMatterResponse();
+
+  ReopenMatterResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("matter")) {
+      matter = new Matter.fromJson(_json["matter"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (matter != null) {
+      _json["matter"] = (matter).toJson();
+    }
+    return _json;
+  }
+}
+
+/** Undelete a matter by ID. */
+class UndeleteMatterRequest {
+
+  UndeleteMatterRequest();
+
+  UndeleteMatterRequest.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/vision/v1.dart b/generated/googleapis/lib/vision/v1.dart
index 5c5df61..5dc5b0e 100644
--- a/generated/googleapis/lib/vision/v1.dart
+++ b/generated/googleapis/lib/vision/v1.dart
@@ -1912,8 +1912,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/youtubereporting/v1.dart b/generated/googleapis/lib/youtubereporting/v1.dart
index 0cf211e..4b73fa2 100644
--- a/generated/googleapis/lib/youtubereporting/v1.dart
+++ b/generated/googleapis/lib/youtubereporting/v1.dart
@@ -324,16 +324,16 @@
    * [createdAfter] - If set, only reports created after the specified date/time
    * are returned.
    *
-   * [startTimeAtOrAfter] - If set, only reports whose start time is greater
-   * than or equal the
-   * specified date/time are returned.
-   *
    * [pageToken] - 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.
    *
+   * [startTimeAtOrAfter] - If set, only reports whose start time is greater
+   * than or equal the
+   * specified date/time are returned.
+   *
    * [pageSize] - Requested page size. Server may return fewer report types than
    * requested.
    * If unspecified, server will pick an appropriate default.
@@ -354,7 +354,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListReportsResponse> list(core.String jobId, {core.String createdAfter, core.String startTimeAtOrAfter, core.String pageToken, core.int pageSize, core.String onBehalfOfContentOwner, core.String startTimeBefore}) {
+  async.Future<ListReportsResponse> list(core.String jobId, {core.String createdAfter, core.String pageToken, core.String startTimeAtOrAfter, core.int pageSize, core.String onBehalfOfContentOwner, core.String startTimeBefore}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -368,12 +368,12 @@
     if (createdAfter != null) {
       _queryParams["createdAfter"] = [createdAfter];
     }
-    if (startTimeAtOrAfter != null) {
-      _queryParams["startTimeAtOrAfter"] = [startTimeAtOrAfter];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (startTimeAtOrAfter != null) {
+      _queryParams["startTimeAtOrAfter"] = [startTimeAtOrAfter];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
@@ -476,6 +476,10 @@
    *
    * Request parameters:
    *
+   * [onBehalfOfContentOwner] - 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).
+   *
    * [includeSystemManaged] - 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
@@ -491,10 +495,6 @@
    * requested.
    * If unspecified, server will pick an appropriate default.
    *
-   * [onBehalfOfContentOwner] - 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).
-   *
    * Completes with a [ListReportTypesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -503,7 +503,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListReportTypesResponse> list({core.bool includeSystemManaged, core.String pageToken, core.int pageSize, core.String onBehalfOfContentOwner}) {
+  async.Future<ListReportTypesResponse> list({core.String onBehalfOfContentOwner, core.bool includeSystemManaged, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -511,6 +511,9 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (onBehalfOfContentOwner != null) {
+      _queryParams["onBehalfOfContentOwner"] = [onBehalfOfContentOwner];
+    }
     if (includeSystemManaged != null) {
       _queryParams["includeSystemManaged"] = ["${includeSystemManaged}"];
     }
@@ -520,9 +523,6 @@
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (onBehalfOfContentOwner != null) {
-      _queryParams["onBehalfOfContentOwner"] = [onBehalfOfContentOwner];
-    }
 
     _url = 'v1/reportTypes';