google-maps-fleet_engine-delivery-v1 0.a → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +12 -0
  3. data/AUTHENTICATION.md +122 -0
  4. data/README.md +144 -8
  5. data/lib/google/maps/fleet_engine/delivery/v1/delivery_service/client.rb +1621 -0
  6. data/lib/google/maps/fleet_engine/delivery/v1/delivery_service/credentials.rb +49 -0
  7. data/lib/google/maps/fleet_engine/delivery/v1/delivery_service/paths.rb +100 -0
  8. data/lib/google/maps/fleet_engine/delivery/v1/delivery_service/rest/client.rb +1505 -0
  9. data/lib/google/maps/fleet_engine/delivery/v1/delivery_service/rest/service_stub.rb +725 -0
  10. data/lib/google/maps/fleet_engine/delivery/v1/delivery_service/rest.rb +54 -0
  11. data/lib/google/maps/fleet_engine/delivery/v1/delivery_service.rb +57 -0
  12. data/lib/google/maps/fleet_engine/delivery/v1/rest.rb +39 -0
  13. data/lib/google/maps/fleet_engine/delivery/v1/version.rb +8 -3
  14. data/lib/google/maps/fleet_engine/delivery/v1.rb +47 -0
  15. data/lib/google/maps/fleetengine/delivery/v1/common_pb.rb +57 -0
  16. data/lib/google/maps/fleetengine/delivery/v1/delivery_api_pb.rb +75 -0
  17. data/lib/google/maps/fleetengine/delivery/v1/delivery_api_services_pb.rb +73 -0
  18. data/lib/google/maps/fleetengine/delivery/v1/delivery_vehicles_pb.rb +61 -0
  19. data/lib/google/maps/fleetengine/delivery/v1/header_pb.rb +48 -0
  20. data/lib/google/maps/fleetengine/delivery/v1/task_tracking_info_pb.rb +58 -0
  21. data/lib/google/maps/fleetengine/delivery/v1/tasks_pb.rb +62 -0
  22. data/lib/google-maps-fleet_engine-delivery-v1.rb +21 -0
  23. data/proto_docs/README.md +4 -0
  24. data/proto_docs/google/api/client.rb +399 -0
  25. data/proto_docs/google/api/field_behavior.rb +85 -0
  26. data/proto_docs/google/api/launch_stage.rb +71 -0
  27. data/proto_docs/google/api/resource.rb +222 -0
  28. data/proto_docs/google/api/routing.rb +459 -0
  29. data/proto_docs/google/geo/type/viewport.rb +70 -0
  30. data/proto_docs/google/maps/fleetengine/delivery/v1/common.rb +251 -0
  31. data/proto_docs/google/maps/fleetengine/delivery/v1/delivery_api.rb +416 -0
  32. data/proto_docs/google/maps/fleetengine/delivery/v1/delivery_vehicles.rb +271 -0
  33. data/proto_docs/google/maps/fleetengine/delivery/v1/header.rb +113 -0
  34. data/proto_docs/google/maps/fleetengine/delivery/v1/task_tracking_info.rb +91 -0
  35. data/proto_docs/google/maps/fleetengine/delivery/v1/tasks.rb +281 -0
  36. data/proto_docs/google/protobuf/duration.rb +98 -0
  37. data/proto_docs/google/protobuf/field_mask.rb +229 -0
  38. data/proto_docs/google/protobuf/timestamp.rb +127 -0
  39. data/proto_docs/google/protobuf/wrappers.rb +121 -0
  40. data/proto_docs/google/type/latlng.rb +38 -0
  41. metadata +109 -13
@@ -0,0 +1,416 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2024 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Maps
22
+ module FleetEngine
23
+ module Delivery
24
+ module V1
25
+ # The `CreateDeliveryVehicle` request message.
26
+ # @!attribute [rw] header
27
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
28
+ # Optional. The standard Delivery API request header.
29
+ # @!attribute [rw] parent
30
+ # @return [::String]
31
+ # Required. Must be in the format `providers/{provider}`. The provider must
32
+ # be the Google Cloud Project ID. For example, `sample-cloud-project`.
33
+ # @!attribute [rw] delivery_vehicle_id
34
+ # @return [::String]
35
+ # Required. The Delivery Vehicle ID must be unique and subject to the
36
+ # following restrictions:
37
+ #
38
+ # * Must be a valid Unicode string.
39
+ # * Limited to a maximum length of 64 characters.
40
+ # * Normalized according to [Unicode Normalization Form C]
41
+ # (http://www.unicode.org/reports/tr15/).
42
+ # * May not contain any of the following ASCII characters: '/', ':', '?',
43
+ # ',', or '#'.
44
+ # @!attribute [rw] delivery_vehicle
45
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryVehicle]
46
+ # Required. The `DeliveryVehicle` entity to create. When creating a new
47
+ # delivery vehicle, you may set the following optional fields:
48
+ #
49
+ # * last_location
50
+ # * attributes
51
+ #
52
+ # Note: The DeliveryVehicle's `name` field is ignored. All other
53
+ # DeliveryVehicle fields must not be set; otherwise, an error is returned.
54
+ class CreateDeliveryVehicleRequest
55
+ include ::Google::Protobuf::MessageExts
56
+ extend ::Google::Protobuf::MessageExts::ClassMethods
57
+ end
58
+
59
+ # The `GetDeliveryVehicle` request message.
60
+ # @!attribute [rw] header
61
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
62
+ # Optional. The standard Delivery API request header.
63
+ # @!attribute [rw] name
64
+ # @return [::String]
65
+ # Required. Must be in the format
66
+ # `providers/{provider}/deliveryVehicles/{delivery_vehicle}`.
67
+ # The `provider` must be the Google Cloud Project ID. For example,
68
+ # `sample-cloud-project`.
69
+ class GetDeliveryVehicleRequest
70
+ include ::Google::Protobuf::MessageExts
71
+ extend ::Google::Protobuf::MessageExts::ClassMethods
72
+ end
73
+
74
+ # The `ListDeliveryVehicles` request message.
75
+ # @!attribute [rw] header
76
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
77
+ # Optional. The standard Delivery API request header.
78
+ # @!attribute [rw] parent
79
+ # @return [::String]
80
+ # Required. Must be in the format `providers/{provider}`.
81
+ # The `provider` must be the Google Cloud Project ID.
82
+ # For example, `sample-cloud-project`.
83
+ # @!attribute [rw] page_size
84
+ # @return [::Integer]
85
+ # Optional. The maximum number of vehicles to return. The service may return
86
+ # fewer than this number. If you don't specify this number, then the server
87
+ # determines the number of results to return.
88
+ # @!attribute [rw] page_token
89
+ # @return [::String]
90
+ # Optional. A page token, received from a previous `ListDeliveryVehicles`
91
+ # call. You must provide this in order to retrieve the subsequent page.
92
+ #
93
+ # When paginating, all other parameters provided to `ListDeliveryVehicles`
94
+ # must match the call that provided the page token.
95
+ # @!attribute [rw] filter
96
+ # @return [::String]
97
+ # Optional. A filter query to apply when listing delivery vehicles. See
98
+ # http://aip.dev/160 for examples of the filter syntax. If you don't specify
99
+ # a value, or if you specify an empty string for the filter, then all
100
+ # delivery vehicles are returned.
101
+ #
102
+ # Note that the only queries supported for `ListDeliveryVehicles` are
103
+ # on vehicle attributes (for example, `attributes.<key> = <value>` or
104
+ # `attributes.<key1> = <value1> AND attributes.<key2> = <value2>`). Also, all
105
+ # attributes are stored as strings, so the only supported comparisons against
106
+ # attributes are string comparisons. In order to compare against number or
107
+ # boolean values, the values must be explicitly quoted to be treated as
108
+ # strings (for example, `attributes.<key> = "10"` or
109
+ # `attributes.<key> = "true"`).
110
+ #
111
+ # The maximum number of restrictions allowed in a filter query is 50. A
112
+ # restriction is a part of the query of the form
113
+ # `attribute.<KEY> <COMPARATOR> <VALUE>`, for example `attributes.foo = bar`
114
+ # is 1 restriction.
115
+ # @!attribute [rw] viewport
116
+ # @return [::Google::Geo::Type::Viewport]
117
+ # Optional. A filter that limits the vehicles returned to those whose last
118
+ # known location was in the rectangular area defined by the viewport.
119
+ class ListDeliveryVehiclesRequest
120
+ include ::Google::Protobuf::MessageExts
121
+ extend ::Google::Protobuf::MessageExts::ClassMethods
122
+ end
123
+
124
+ # The `ListDeliveryVehicles` response message.
125
+ # @!attribute [rw] delivery_vehicles
126
+ # @return [::Array<::Google::Maps::FleetEngine::Delivery::V1::DeliveryVehicle>]
127
+ # The set of delivery vehicles that meet the requested filtering criteria.
128
+ # When no filter is specified, the request returns all delivery vehicles. A
129
+ # successful response can also be empty. An empty response indicates that no
130
+ # delivery vehicles were found meeting the requested filter criteria.
131
+ # @!attribute [rw] next_page_token
132
+ # @return [::String]
133
+ # You can pass this token in the `ListDeliveryVehiclesRequest` to continue to
134
+ # list results. When all of the results are returned, this field won't be in
135
+ # the response, or it will be an empty string.
136
+ # @!attribute [rw] total_size
137
+ # @return [::Integer]
138
+ # The total number of delivery vehicles that match the request criteria,
139
+ # across all pages.
140
+ class ListDeliveryVehiclesResponse
141
+ include ::Google::Protobuf::MessageExts
142
+ extend ::Google::Protobuf::MessageExts::ClassMethods
143
+ end
144
+
145
+ # The `UpdateDeliveryVehicle` request message.
146
+ # @!attribute [rw] header
147
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
148
+ # Optional. The standard Delivery API request header.
149
+ # @!attribute [rw] delivery_vehicle
150
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryVehicle]
151
+ # Required. The `DeliveryVehicle` entity update to apply.
152
+ # Note: You cannot update the name of the `DeliveryVehicle`.
153
+ # @!attribute [rw] update_mask
154
+ # @return [::Google::Protobuf::FieldMask]
155
+ # Required. A field mask that indicates which `DeliveryVehicle` fields to
156
+ # update. Note that the update_mask must contain at least one field.
157
+ #
158
+ # This is a comma-separated list of fully qualified names of fields. Example:
159
+ # `"remaining_vehicle_journey_segments"`.
160
+ class UpdateDeliveryVehicleRequest
161
+ include ::Google::Protobuf::MessageExts
162
+ extend ::Google::Protobuf::MessageExts::ClassMethods
163
+ end
164
+
165
+ # The `BatchCreateTask` request message.
166
+ # @!attribute [rw] header
167
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
168
+ # Optional. The standard Delivery API request header.
169
+ # Note: If you set this field, then the header field in the
170
+ # `CreateTaskRequest` messages must either be empty, or it must match this
171
+ # field.
172
+ # @!attribute [rw] parent
173
+ # @return [::String]
174
+ # Required. The parent resource shared by all tasks. This value must be in
175
+ # the format `providers/{provider}`. The `provider` must be the Google Cloud
176
+ # Project ID. For example, `sample-cloud-project`. The parent field in the
177
+ # `CreateTaskRequest` messages must either be empty, or it must match this
178
+ # field.
179
+ # @!attribute [rw] requests
180
+ # @return [::Array<::Google::Maps::FleetEngine::Delivery::V1::CreateTaskRequest>]
181
+ # Required. The request message that specifies the resources to create.
182
+ # Note: You can create a maximum of 500 tasks in a batch.
183
+ class BatchCreateTasksRequest
184
+ include ::Google::Protobuf::MessageExts
185
+ extend ::Google::Protobuf::MessageExts::ClassMethods
186
+ end
187
+
188
+ # The `BatchCreateTask` response message.
189
+ # @!attribute [rw] tasks
190
+ # @return [::Array<::Google::Maps::FleetEngine::Delivery::V1::Task>]
191
+ # The created Tasks.
192
+ class BatchCreateTasksResponse
193
+ include ::Google::Protobuf::MessageExts
194
+ extend ::Google::Protobuf::MessageExts::ClassMethods
195
+ end
196
+
197
+ # The `CreateTask` request message.
198
+ # @!attribute [rw] header
199
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
200
+ # Optional. The standard Delivery API request header.
201
+ # @!attribute [rw] parent
202
+ # @return [::String]
203
+ # Required. Must be in the format `providers/{provider}`. The `provider` must
204
+ # be the Google Cloud Project ID. For example, `sample-cloud-project`.
205
+ # @!attribute [rw] task_id
206
+ # @return [::String]
207
+ # Required. The Task ID must be unique, but it should be not a shipment
208
+ # tracking ID. To store a shipment tracking ID, use the `tracking_id` field.
209
+ # Note that multiple tasks can have the same `tracking_id`. Task IDs are
210
+ # subject to the following restrictions:
211
+ #
212
+ # * Must be a valid Unicode string.
213
+ # * Limited to a maximum length of 64 characters.
214
+ # * Normalized according to [Unicode Normalization Form C]
215
+ # (http://www.unicode.org/reports/tr15/).
216
+ # * May not contain any of the following ASCII characters: '/', ':', '?',
217
+ # ',', or '#'.
218
+ # @!attribute [rw] task
219
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::Task]
220
+ # Required. The Task entity to create.
221
+ # When creating a Task, the following fields are required:
222
+ #
223
+ # * `type`
224
+ # * `state` (must be set to `OPEN`)
225
+ # * `tracking_id` (must not be set for `UNAVAILABLE` or `SCHEDULED_STOP`
226
+ # tasks, but required for all other task types)
227
+ # * `planned_location` (optional for `UNAVAILABLE` tasks)
228
+ # * `task_duration`
229
+ #
230
+ # Note: The Task's `name` field is ignored. All other Task fields must not be
231
+ # set; otherwise, an error is returned.
232
+ class CreateTaskRequest
233
+ include ::Google::Protobuf::MessageExts
234
+ extend ::Google::Protobuf::MessageExts::ClassMethods
235
+ end
236
+
237
+ # The `GetTask` request message.
238
+ # @!attribute [rw] header
239
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
240
+ # Optional. The standard Delivery API request header.
241
+ # @!attribute [rw] name
242
+ # @return [::String]
243
+ # Required. Must be in the format `providers/{provider}/tasks/{task}`. The
244
+ # `provider` must be the Google Cloud Project ID. For example,
245
+ # `sample-cloud-project`.
246
+ class GetTaskRequest
247
+ include ::Google::Protobuf::MessageExts
248
+ extend ::Google::Protobuf::MessageExts::ClassMethods
249
+ end
250
+
251
+ # Deprecated: Issue `GetTaskTrackingInfoRequest`s to `GetTaskTrackingInfo`
252
+ # instead.
253
+ # @deprecated This message is deprecated and may be removed in the next major version update.
254
+ # @!attribute [rw] header
255
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
256
+ # Optional. The standard Delivery API request header.
257
+ # @!attribute [rw] parent
258
+ # @return [::String]
259
+ # Required. Must be in the format `providers/{provider}`.
260
+ # The provider must be the Google Cloud Project ID. For example,
261
+ # `sample-cloud-project`.
262
+ # @!attribute [rw] tracking_id
263
+ # @return [::String]
264
+ # Required. The identifier of the set of related Tasks being requested.
265
+ # Tracking IDs are subject to the following restrictions:
266
+ #
267
+ # * Must be a valid Unicode string.
268
+ # * Limited to a maximum length of 64 characters.
269
+ # * Normalized according to [Unicode Normalization Form C]
270
+ # (http://www.unicode.org/reports/tr15/).
271
+ # * May not contain any of the following ASCII characters: '/', ':', '?',
272
+ # ',', or '#'.
273
+ # @!attribute [rw] page_size
274
+ # @return [::Integer]
275
+ # Optional. The maximum number of Tasks to return. The service may return
276
+ # fewer than this value. If you don't specify this value, then the server
277
+ # determines the number of results to return.
278
+ # @!attribute [rw] page_token
279
+ # @return [::String]
280
+ # Optional. A page token, received from a previous `SearchTasks` call. You
281
+ # must provide this value to retrieve the subsequent page.
282
+ #
283
+ # When paginating, all other parameters provided to `SearchTasks` must match
284
+ # the call that provided the page token.
285
+ class SearchTasksRequest
286
+ include ::Google::Protobuf::MessageExts
287
+ extend ::Google::Protobuf::MessageExts::ClassMethods
288
+ end
289
+
290
+ # The `SearchTasks` response. It contains the set of Tasks that meet the search
291
+ # criteria in the `SearchTasksRequest`.
292
+ # @deprecated This message is deprecated and may be removed in the next major version update.
293
+ # @!attribute [rw] tasks
294
+ # @return [::Array<::Google::Maps::FleetEngine::Delivery::V1::Task>]
295
+ # The set of Tasks for the requested `tracking_id`. A successful response can
296
+ # also be empty. An empty response indicates that no Tasks are associated
297
+ # with the supplied `tracking_id`.
298
+ # @!attribute [rw] next_page_token
299
+ # @return [::String]
300
+ # Pass this token in the `SearchTasksRequest` to continue to
301
+ # list results. If all results have been returned, then this field is either
302
+ # an empty string, or it doesn't appear in the response.
303
+ class SearchTasksResponse
304
+ include ::Google::Protobuf::MessageExts
305
+ extend ::Google::Protobuf::MessageExts::ClassMethods
306
+ end
307
+
308
+ # The `UpdateTask` request message.
309
+ # @!attribute [rw] header
310
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
311
+ # Optional. The standard Delivery API request header.
312
+ # @!attribute [rw] task
313
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::Task]
314
+ # Required. The Task associated with the update.
315
+ # The following fields are maintained by Fleet Engine. Do not update
316
+ # them using `Task.update`.
317
+ #
318
+ # * `last_location`.
319
+ # * `last_location_snappable`.
320
+ # * `name`.
321
+ # * `remaining_vehicle_journey_segments`.
322
+ # * `task_outcome_location_source`.
323
+ #
324
+ # Note: You cannot change the value of `task_outcome` once you set it.
325
+ #
326
+ # If the Task has been assigned to a delivery vehicle, then don't set the
327
+ # Task state to CLOSED using `Task.update`. Instead, remove the `VehicleStop`
328
+ # that contains the Task from the delivery vehicle, which automatically sets
329
+ # the Task state to CLOSED.
330
+ # @!attribute [rw] update_mask
331
+ # @return [::Google::Protobuf::FieldMask]
332
+ # Required. The field mask that indicates which Task fields to update.
333
+ # Note: The `update_mask` must contain at least one field.
334
+ #
335
+ # This is a comma-separated list of fully qualified names of fields. Example:
336
+ # `"task_outcome,task_outcome_time,task_outcome_location"`.
337
+ class UpdateTaskRequest
338
+ include ::Google::Protobuf::MessageExts
339
+ extend ::Google::Protobuf::MessageExts::ClassMethods
340
+ end
341
+
342
+ # The `ListTasks` request message.
343
+ # @!attribute [rw] header
344
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
345
+ # Optional. The standard Delivery API request header.
346
+ # @!attribute [rw] parent
347
+ # @return [::String]
348
+ # Required. Must be in the format `providers/{provider}`.
349
+ # The `provider` must be the Google Cloud Project ID. For example,
350
+ # `sample-cloud-project`.
351
+ # @!attribute [rw] page_size
352
+ # @return [::Integer]
353
+ # Optional. The maximum number of Tasks to return. The service may return
354
+ # fewer than this value. If you don't specify this value, then the server
355
+ # determines the number of results to return.
356
+ # @!attribute [rw] page_token
357
+ # @return [::String]
358
+ # Optional. A page token received from a previous `ListTasks` call.
359
+ # You can provide this to retrieve the subsequent page.
360
+ #
361
+ # When paginating, all other parameters provided to `ListTasks` must match
362
+ # the call that provided the page token.
363
+ # @!attribute [rw] filter
364
+ # @return [::String]
365
+ # Optional. A filter query to apply when listing Tasks. See
366
+ # http://aip.dev/160 for examples of filter syntax. If you don't specify a
367
+ # value, or if you filter on an empty string, then all Tasks are returned.
368
+ # For information about the Task properties that you can filter on, see [List
369
+ # tasks](https://developers.google.com/maps/documentation/transportation-logistics/last-mile-fleet-solution/fleet-performance/fleet-engine/deliveries_api#list-tasks).
370
+ class ListTasksRequest
371
+ include ::Google::Protobuf::MessageExts
372
+ extend ::Google::Protobuf::MessageExts::ClassMethods
373
+ end
374
+
375
+ # The `ListTasks` response that contains the set of Tasks that meet the filter
376
+ # criteria in the `ListTasksRequest`.
377
+ # @!attribute [rw] tasks
378
+ # @return [::Array<::Google::Maps::FleetEngine::Delivery::V1::Task>]
379
+ # The set of Tasks that meet the requested filtering criteria. When no filter
380
+ # is specified, the request returns all tasks. A successful response can also
381
+ # be empty. An empty response indicates that no Tasks were found meeting the
382
+ # requested filter criteria.
383
+ # @!attribute [rw] next_page_token
384
+ # @return [::String]
385
+ # Pass this token in the `ListTasksRequest` to continue to list results.
386
+ # If all results have been returned, then this field is either an empty
387
+ # string, or it doesn't appear in the response.
388
+ # @!attribute [rw] total_size
389
+ # @return [::Integer]
390
+ # The total number of Tasks that match the request criteria, across all
391
+ # pages.
392
+ class ListTasksResponse
393
+ include ::Google::Protobuf::MessageExts
394
+ extend ::Google::Protobuf::MessageExts::ClassMethods
395
+ end
396
+
397
+ # The `GetTaskTrackingInfoRequest` request message.
398
+ # @!attribute [rw] header
399
+ # @return [::Google::Maps::FleetEngine::Delivery::V1::DeliveryRequestHeader]
400
+ # Optional. The standard Delivery API request header.
401
+ # @!attribute [rw] name
402
+ # @return [::String]
403
+ # Required. Must be in the format
404
+ # `providers/{provider}/taskTrackingInfo/{tracking_id}`. The `provider`
405
+ # must be the Google Cloud Project ID, and the `tracking_id` must be the
406
+ # tracking ID associated with the task. An example name can be
407
+ # `providers/sample-cloud-project/taskTrackingInfo/sample-tracking-id`.
408
+ class GetTaskTrackingInfoRequest
409
+ include ::Google::Protobuf::MessageExts
410
+ extend ::Google::Protobuf::MessageExts::ClassMethods
411
+ end
412
+ end
413
+ end
414
+ end
415
+ end
416
+ end