mailslurp_client 15.17.41 → 15.18.1

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 (25) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mailslurp_client/api/email_controller_api.rb +62 -0
  3. data/lib/mailslurp_client/api/tools_controller_api.rb +175 -0
  4. data/lib/mailslurp_client/models/alias_projection.rb +19 -19
  5. data/lib/mailslurp_client/models/bounce_recipient_projection.rb +11 -11
  6. data/lib/mailslurp_client/models/check_email_body_results.rb +259 -0
  7. data/lib/mailslurp_client/models/connector_projection.rb +15 -15
  8. data/lib/mailslurp_client/models/email_projection.rb +10 -10
  9. data/lib/mailslurp_client/models/expired_inbox_record_projection.rb +15 -15
  10. data/lib/mailslurp_client/models/fake_email_dto.rb +305 -0
  11. data/lib/mailslurp_client/models/fake_email_preview.rb +291 -0
  12. data/lib/mailslurp_client/models/fake_email_result.rb +206 -0
  13. data/lib/mailslurp_client/models/image_issue.rb +282 -0
  14. data/lib/mailslurp_client/models/imap_smtp_access_details.rb +15 -4
  15. data/lib/mailslurp_client/models/inbox_forwarder_event_projection.rb +11 -11
  16. data/lib/mailslurp_client/models/inbox_replier_event_projection.rb +21 -21
  17. data/lib/mailslurp_client/models/link_issue.rb +282 -0
  18. data/lib/mailslurp_client/models/new_fake_email_address_result.rb +211 -0
  19. data/lib/mailslurp_client/models/sent_email_projection.rb +38 -38
  20. data/lib/mailslurp_client/models/spelling_issue.rb +287 -0
  21. data/lib/mailslurp_client/models/thread_projection.rb +16 -16
  22. data/lib/mailslurp_client/models/tracking_pixel_projection.rb +13 -13
  23. data/lib/mailslurp_client/version.rb +1 -1
  24. data/lib/mailslurp_client.rb +8 -0
  25. metadata +10 -2
@@ -17,17 +17,17 @@ module MailSlurpClient
17
17
  class InboxReplierEventProjection
18
18
  attr_accessor :created_at
19
19
 
20
- attr_accessor :recipients
20
+ attr_accessor :replier_id
21
21
 
22
- attr_accessor :user_id
22
+ attr_accessor :recipients
23
23
 
24
24
  attr_accessor :email_id
25
25
 
26
26
  attr_accessor :inbox_id
27
27
 
28
- attr_accessor :sent_id
28
+ attr_accessor :user_id
29
29
 
30
- attr_accessor :replier_id
30
+ attr_accessor :sent_id
31
31
 
32
32
  attr_accessor :message
33
33
 
@@ -61,12 +61,12 @@ module MailSlurpClient
61
61
  def self.attribute_map
62
62
  {
63
63
  :'created_at' => :'createdAt',
64
+ :'replier_id' => :'replierId',
64
65
  :'recipients' => :'recipients',
65
- :'user_id' => :'userId',
66
66
  :'email_id' => :'emailId',
67
67
  :'inbox_id' => :'inboxId',
68
+ :'user_id' => :'userId',
68
69
  :'sent_id' => :'sentId',
69
- :'replier_id' => :'replierId',
70
70
  :'message' => :'message',
71
71
  :'id' => :'id',
72
72
  :'status' => :'status'
@@ -77,12 +77,12 @@ module MailSlurpClient
77
77
  def self.openapi_types
78
78
  {
79
79
  :'created_at' => :'DateTime',
80
+ :'replier_id' => :'String',
80
81
  :'recipients' => :'Array<String>',
81
- :'user_id' => :'String',
82
82
  :'email_id' => :'String',
83
83
  :'inbox_id' => :'String',
84
+ :'user_id' => :'String',
84
85
  :'sent_id' => :'String',
85
- :'replier_id' => :'String',
86
86
  :'message' => :'String',
87
87
  :'id' => :'String',
88
88
  :'status' => :'String'
@@ -92,12 +92,12 @@ module MailSlurpClient
92
92
  # List of attributes with nullable: true
93
93
  def self.openapi_nullable
94
94
  Set.new([
95
+ :'replier_id',
95
96
  :'recipients',
96
- :'user_id',
97
97
  :'email_id',
98
98
  :'inbox_id',
99
+ :'user_id',
99
100
  :'sent_id',
100
- :'replier_id',
101
101
  :'message',
102
102
  :'id',
103
103
  :'status'
@@ -123,16 +123,16 @@ module MailSlurpClient
123
123
  self.created_at = attributes[:'created_at']
124
124
  end
125
125
 
126
+ if attributes.key?(:'replier_id')
127
+ self.replier_id = attributes[:'replier_id']
128
+ end
129
+
126
130
  if attributes.key?(:'recipients')
127
131
  if (value = attributes[:'recipients']).is_a?(Array)
128
132
  self.recipients = value
129
133
  end
130
134
  end
131
135
 
132
- if attributes.key?(:'user_id')
133
- self.user_id = attributes[:'user_id']
134
- end
135
-
136
136
  if attributes.key?(:'email_id')
137
137
  self.email_id = attributes[:'email_id']
138
138
  end
@@ -141,12 +141,12 @@ module MailSlurpClient
141
141
  self.inbox_id = attributes[:'inbox_id']
142
142
  end
143
143
 
144
- if attributes.key?(:'sent_id')
145
- self.sent_id = attributes[:'sent_id']
144
+ if attributes.key?(:'user_id')
145
+ self.user_id = attributes[:'user_id']
146
146
  end
147
147
 
148
- if attributes.key?(:'replier_id')
149
- self.replier_id = attributes[:'replier_id']
148
+ if attributes.key?(:'sent_id')
149
+ self.sent_id = attributes[:'sent_id']
150
150
  end
151
151
 
152
152
  if attributes.key?(:'message')
@@ -198,12 +198,12 @@ module MailSlurpClient
198
198
  return true if self.equal?(o)
199
199
  self.class == o.class &&
200
200
  created_at == o.created_at &&
201
+ replier_id == o.replier_id &&
201
202
  recipients == o.recipients &&
202
- user_id == o.user_id &&
203
203
  email_id == o.email_id &&
204
204
  inbox_id == o.inbox_id &&
205
+ user_id == o.user_id &&
205
206
  sent_id == o.sent_id &&
206
- replier_id == o.replier_id &&
207
207
  message == o.message &&
208
208
  id == o.id &&
209
209
  status == o.status
@@ -218,7 +218,7 @@ module MailSlurpClient
218
218
  # Calculates hash code according to all attributes.
219
219
  # @return [Integer] Hash code
220
220
  def hash
221
- [created_at, recipients, user_id, email_id, inbox_id, sent_id, replier_id, message, id, status].hash
221
+ [created_at, replier_id, recipients, email_id, inbox_id, user_id, sent_id, message, id, status].hash
222
222
  end
223
223
 
224
224
  # Builds the object from hash
@@ -0,0 +1,282 @@
1
+ =begin
2
+ #MailSlurp API
3
+
4
+ #MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more. ## Resources - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
5
+
6
+ The version of the OpenAPI document: 6.5.2
7
+ Contact: contact@mailslurp.dev
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.3.1
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module MailSlurpClient
16
+ class LinkIssue
17
+ attr_accessor :url
18
+
19
+ attr_accessor :response_status
20
+
21
+ attr_accessor :severity
22
+
23
+ attr_accessor :message
24
+
25
+ class EnumAttributeValidator
26
+ attr_reader :datatype
27
+ attr_reader :allowable_values
28
+
29
+ def initialize(datatype, allowable_values)
30
+ @allowable_values = allowable_values.map do |value|
31
+ case datatype.to_s
32
+ when /Integer/i
33
+ value.to_i
34
+ when /Float/i
35
+ value.to_f
36
+ else
37
+ value
38
+ end
39
+ end
40
+ end
41
+
42
+ def valid?(value)
43
+ !value || allowable_values.include?(value)
44
+ end
45
+ end
46
+
47
+ # Attribute mapping from ruby-style variable name to JSON key.
48
+ def self.attribute_map
49
+ {
50
+ :'url' => :'url',
51
+ :'response_status' => :'responseStatus',
52
+ :'severity' => :'severity',
53
+ :'message' => :'message'
54
+ }
55
+ end
56
+
57
+ # Attribute type mapping.
58
+ def self.openapi_types
59
+ {
60
+ :'url' => :'String',
61
+ :'response_status' => :'Integer',
62
+ :'severity' => :'String',
63
+ :'message' => :'String'
64
+ }
65
+ end
66
+
67
+ # List of attributes with nullable: true
68
+ def self.openapi_nullable
69
+ Set.new([
70
+ ])
71
+ end
72
+
73
+ # Initializes the object
74
+ # @param [Hash] attributes Model attributes in the form of hash
75
+ def initialize(attributes = {})
76
+ if (!attributes.is_a?(Hash))
77
+ fail ArgumentError, "The input argument (attributes) must be a hash in `MailSlurpClient::LinkIssue` initialize method"
78
+ end
79
+
80
+ # check to see if the attribute exists and convert string to symbol for hash key
81
+ attributes = attributes.each_with_object({}) { |(k, v), h|
82
+ if (!self.class.attribute_map.key?(k.to_sym))
83
+ fail ArgumentError, "`#{k}` is not a valid attribute in `MailSlurpClient::LinkIssue`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
84
+ end
85
+ h[k.to_sym] = v
86
+ }
87
+
88
+ if attributes.key?(:'url')
89
+ self.url = attributes[:'url']
90
+ end
91
+
92
+ if attributes.key?(:'response_status')
93
+ self.response_status = attributes[:'response_status']
94
+ end
95
+
96
+ if attributes.key?(:'severity')
97
+ self.severity = attributes[:'severity']
98
+ end
99
+
100
+ if attributes.key?(:'message')
101
+ self.message = attributes[:'message']
102
+ end
103
+ end
104
+
105
+ # Show invalid properties with the reasons. Usually used together with valid?
106
+ # @return Array for valid properties with the reasons
107
+ def list_invalid_properties
108
+ invalid_properties = Array.new
109
+ if @url.nil?
110
+ invalid_properties.push('invalid value for "url", url cannot be nil.')
111
+ end
112
+
113
+ if @severity.nil?
114
+ invalid_properties.push('invalid value for "severity", severity cannot be nil.')
115
+ end
116
+
117
+ if @message.nil?
118
+ invalid_properties.push('invalid value for "message", message cannot be nil.')
119
+ end
120
+
121
+ invalid_properties
122
+ end
123
+
124
+ # Check to see if the all the properties in the model are valid
125
+ # @return true if the model is valid
126
+ def valid?
127
+ return false if @url.nil?
128
+ return false if @severity.nil?
129
+ severity_validator = EnumAttributeValidator.new('String', ["Warning", "Error"])
130
+ return false unless severity_validator.valid?(@severity)
131
+ return false if @message.nil?
132
+ true
133
+ end
134
+
135
+ # Custom attribute writer method checking allowed values (enum).
136
+ # @param [Object] severity Object to be assigned
137
+ def severity=(severity)
138
+ validator = EnumAttributeValidator.new('String', ["Warning", "Error"])
139
+ unless validator.valid?(severity)
140
+ fail ArgumentError, "invalid value for \"severity\", must be one of #{validator.allowable_values}."
141
+ end
142
+ @severity = severity
143
+ end
144
+
145
+ # Checks equality by comparing each attribute.
146
+ # @param [Object] Object to be compared
147
+ def ==(o)
148
+ return true if self.equal?(o)
149
+ self.class == o.class &&
150
+ url == o.url &&
151
+ response_status == o.response_status &&
152
+ severity == o.severity &&
153
+ message == o.message
154
+ end
155
+
156
+ # @see the `==` method
157
+ # @param [Object] Object to be compared
158
+ def eql?(o)
159
+ self == o
160
+ end
161
+
162
+ # Calculates hash code according to all attributes.
163
+ # @return [Integer] Hash code
164
+ def hash
165
+ [url, response_status, severity, message].hash
166
+ end
167
+
168
+ # Builds the object from hash
169
+ # @param [Hash] attributes Model attributes in the form of hash
170
+ # @return [Object] Returns the model itself
171
+ def self.build_from_hash(attributes)
172
+ new.build_from_hash(attributes)
173
+ end
174
+
175
+ # Builds the object from hash
176
+ # @param [Hash] attributes Model attributes in the form of hash
177
+ # @return [Object] Returns the model itself
178
+ def build_from_hash(attributes)
179
+ return nil unless attributes.is_a?(Hash)
180
+ self.class.openapi_types.each_pair do |key, type|
181
+ if type =~ /\AArray<(.*)>/i
182
+ # check to ensure the input is an array given that the attribute
183
+ # is documented as an array but the input is not
184
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
185
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
186
+ end
187
+ elsif !attributes[self.class.attribute_map[key]].nil?
188
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
189
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
190
+ end
191
+
192
+ self
193
+ end
194
+
195
+ # Deserializes the data based on type
196
+ # @param string type Data type
197
+ # @param string value Value to be deserialized
198
+ # @return [Object] Deserialized data
199
+ def _deserialize(type, value)
200
+ case type.to_sym
201
+ when :DateTime
202
+ DateTime.parse(value)
203
+ when :Date
204
+ Date.parse(value)
205
+ when :String
206
+ value.to_s
207
+ when :Integer
208
+ value.to_i
209
+ when :Float
210
+ value.to_f
211
+ when :Boolean
212
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
213
+ true
214
+ else
215
+ false
216
+ end
217
+ when :Object
218
+ # generic object (usually a Hash), return directly
219
+ value
220
+ when /\AArray<(?<inner_type>.+)>\z/
221
+ inner_type = Regexp.last_match[:inner_type]
222
+ value.map { |v| _deserialize(inner_type, v) }
223
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
224
+ k_type = Regexp.last_match[:k_type]
225
+ v_type = Regexp.last_match[:v_type]
226
+ {}.tap do |hash|
227
+ value.each do |k, v|
228
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
229
+ end
230
+ end
231
+ else # model
232
+ MailSlurpClient.const_get(type).build_from_hash(value)
233
+ end
234
+ end
235
+
236
+ # Returns the string representation of the object
237
+ # @return [String] String presentation of the object
238
+ def to_s
239
+ to_hash.to_s
240
+ end
241
+
242
+ # to_body is an alias to to_hash (backward compatibility)
243
+ # @return [Hash] Returns the object in the form of hash
244
+ def to_body
245
+ to_hash
246
+ end
247
+
248
+ # Returns the object in the form of hash
249
+ # @return [Hash] Returns the object in the form of hash
250
+ def to_hash
251
+ hash = {}
252
+ self.class.attribute_map.each_pair do |attr, param|
253
+ value = self.send(attr)
254
+ if value.nil?
255
+ is_nullable = self.class.openapi_nullable.include?(attr)
256
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
257
+ end
258
+
259
+ hash[param] = _to_hash(value)
260
+ end
261
+ hash
262
+ end
263
+
264
+ # Outputs non-array value in the form of hash
265
+ # For object, use to_hash. Otherwise, just return the value
266
+ # @param [Object] value Any valid value
267
+ # @return [Hash] Returns the value in the form of hash
268
+ def _to_hash(value)
269
+ if value.is_a?(Array)
270
+ value.compact.map { |v| _to_hash(v) }
271
+ elsif value.is_a?(Hash)
272
+ {}.tap do |hash|
273
+ value.each { |k, v| hash[k] = _to_hash(v) }
274
+ end
275
+ elsif value.respond_to? :to_hash
276
+ value.to_hash
277
+ else
278
+ value
279
+ end
280
+ end
281
+ end
282
+ end
@@ -0,0 +1,211 @@
1
+ =begin
2
+ #MailSlurp API
3
+
4
+ #MailSlurp is an API for sending and receiving emails from dynamically allocated email addresses. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more. ## Resources - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository
5
+
6
+ The version of the OpenAPI document: 6.5.2
7
+ Contact: contact@mailslurp.dev
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.3.1
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module MailSlurpClient
16
+ class NewFakeEmailAddressResult
17
+ attr_accessor :email_address
18
+
19
+ # Attribute mapping from ruby-style variable name to JSON key.
20
+ def self.attribute_map
21
+ {
22
+ :'email_address' => :'emailAddress'
23
+ }
24
+ end
25
+
26
+ # Attribute type mapping.
27
+ def self.openapi_types
28
+ {
29
+ :'email_address' => :'String'
30
+ }
31
+ end
32
+
33
+ # List of attributes with nullable: true
34
+ def self.openapi_nullable
35
+ Set.new([
36
+ ])
37
+ end
38
+
39
+ # Initializes the object
40
+ # @param [Hash] attributes Model attributes in the form of hash
41
+ def initialize(attributes = {})
42
+ if (!attributes.is_a?(Hash))
43
+ fail ArgumentError, "The input argument (attributes) must be a hash in `MailSlurpClient::NewFakeEmailAddressResult` initialize method"
44
+ end
45
+
46
+ # check to see if the attribute exists and convert string to symbol for hash key
47
+ attributes = attributes.each_with_object({}) { |(k, v), h|
48
+ if (!self.class.attribute_map.key?(k.to_sym))
49
+ fail ArgumentError, "`#{k}` is not a valid attribute in `MailSlurpClient::NewFakeEmailAddressResult`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
50
+ end
51
+ h[k.to_sym] = v
52
+ }
53
+
54
+ if attributes.key?(:'email_address')
55
+ self.email_address = attributes[:'email_address']
56
+ end
57
+ end
58
+
59
+ # Show invalid properties with the reasons. Usually used together with valid?
60
+ # @return Array for valid properties with the reasons
61
+ def list_invalid_properties
62
+ invalid_properties = Array.new
63
+ if @email_address.nil?
64
+ invalid_properties.push('invalid value for "email_address", email_address cannot be nil.')
65
+ end
66
+
67
+ invalid_properties
68
+ end
69
+
70
+ # Check to see if the all the properties in the model are valid
71
+ # @return true if the model is valid
72
+ def valid?
73
+ return false if @email_address.nil?
74
+ true
75
+ end
76
+
77
+ # Checks equality by comparing each attribute.
78
+ # @param [Object] Object to be compared
79
+ def ==(o)
80
+ return true if self.equal?(o)
81
+ self.class == o.class &&
82
+ email_address == o.email_address
83
+ end
84
+
85
+ # @see the `==` method
86
+ # @param [Object] Object to be compared
87
+ def eql?(o)
88
+ self == o
89
+ end
90
+
91
+ # Calculates hash code according to all attributes.
92
+ # @return [Integer] Hash code
93
+ def hash
94
+ [email_address].hash
95
+ end
96
+
97
+ # Builds the object from hash
98
+ # @param [Hash] attributes Model attributes in the form of hash
99
+ # @return [Object] Returns the model itself
100
+ def self.build_from_hash(attributes)
101
+ new.build_from_hash(attributes)
102
+ end
103
+
104
+ # Builds the object from hash
105
+ # @param [Hash] attributes Model attributes in the form of hash
106
+ # @return [Object] Returns the model itself
107
+ def build_from_hash(attributes)
108
+ return nil unless attributes.is_a?(Hash)
109
+ self.class.openapi_types.each_pair do |key, type|
110
+ if type =~ /\AArray<(.*)>/i
111
+ # check to ensure the input is an array given that the attribute
112
+ # is documented as an array but the input is not
113
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
114
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
115
+ end
116
+ elsif !attributes[self.class.attribute_map[key]].nil?
117
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
118
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
119
+ end
120
+
121
+ self
122
+ end
123
+
124
+ # Deserializes the data based on type
125
+ # @param string type Data type
126
+ # @param string value Value to be deserialized
127
+ # @return [Object] Deserialized data
128
+ def _deserialize(type, value)
129
+ case type.to_sym
130
+ when :DateTime
131
+ DateTime.parse(value)
132
+ when :Date
133
+ Date.parse(value)
134
+ when :String
135
+ value.to_s
136
+ when :Integer
137
+ value.to_i
138
+ when :Float
139
+ value.to_f
140
+ when :Boolean
141
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
142
+ true
143
+ else
144
+ false
145
+ end
146
+ when :Object
147
+ # generic object (usually a Hash), return directly
148
+ value
149
+ when /\AArray<(?<inner_type>.+)>\z/
150
+ inner_type = Regexp.last_match[:inner_type]
151
+ value.map { |v| _deserialize(inner_type, v) }
152
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
153
+ k_type = Regexp.last_match[:k_type]
154
+ v_type = Regexp.last_match[:v_type]
155
+ {}.tap do |hash|
156
+ value.each do |k, v|
157
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
158
+ end
159
+ end
160
+ else # model
161
+ MailSlurpClient.const_get(type).build_from_hash(value)
162
+ end
163
+ end
164
+
165
+ # Returns the string representation of the object
166
+ # @return [String] String presentation of the object
167
+ def to_s
168
+ to_hash.to_s
169
+ end
170
+
171
+ # to_body is an alias to to_hash (backward compatibility)
172
+ # @return [Hash] Returns the object in the form of hash
173
+ def to_body
174
+ to_hash
175
+ end
176
+
177
+ # Returns the object in the form of hash
178
+ # @return [Hash] Returns the object in the form of hash
179
+ def to_hash
180
+ hash = {}
181
+ self.class.attribute_map.each_pair do |attr, param|
182
+ value = self.send(attr)
183
+ if value.nil?
184
+ is_nullable = self.class.openapi_nullable.include?(attr)
185
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
186
+ end
187
+
188
+ hash[param] = _to_hash(value)
189
+ end
190
+ hash
191
+ end
192
+
193
+ # Outputs non-array value in the form of hash
194
+ # For object, use to_hash. Otherwise, just return the value
195
+ # @param [Object] value Any valid value
196
+ # @return [Hash] Returns the value in the form of hash
197
+ def _to_hash(value)
198
+ if value.is_a?(Array)
199
+ value.compact.map { |v| _to_hash(v) }
200
+ elsif value.is_a?(Hash)
201
+ {}.tap do |hash|
202
+ value.each { |k, v| hash[k] = _to_hash(v) }
203
+ end
204
+ elsif value.respond_to? :to_hash
205
+ value.to_hash
206
+ else
207
+ value
208
+ end
209
+ end
210
+ end
211
+ end