1 /* 2 * Copyright 2020 Google LLC 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 // Generated by the protocol buffer compiler. DO NOT EDIT! 17 // source: google/cloud/language/v1/language_service.proto 18 19 package com.google.cloud.language.v1; 20 21 /** 22 * 23 * 24 * <pre> 25 * Represents the feeling associated with the entire text or entities in 26 * the text. 27 * </pre> 28 * 29 * Protobuf type {@code google.cloud.language.v1.Sentiment} 30 */ 31 public final class Sentiment extends com.google.protobuf.GeneratedMessageV3 32 implements 33 // @@protoc_insertion_point(message_implements:google.cloud.language.v1.Sentiment) 34 SentimentOrBuilder { 35 private static final long serialVersionUID = 0L; 36 // Use Sentiment.newBuilder() to construct. Sentiment(com.google.protobuf.GeneratedMessageV3.Builder<?> builder)37 private Sentiment(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { 38 super(builder); 39 } 40 Sentiment()41 private Sentiment() {} 42 43 @java.lang.Override 44 @SuppressWarnings({"unused"}) newInstance(UnusedPrivateParameter unused)45 protected java.lang.Object newInstance(UnusedPrivateParameter unused) { 46 return new Sentiment(); 47 } 48 49 @java.lang.Override getUnknownFields()50 public final com.google.protobuf.UnknownFieldSet getUnknownFields() { 51 return this.unknownFields; 52 } 53 getDescriptor()54 public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { 55 return com.google.cloud.language.v1.LanguageServiceProto 56 .internal_static_google_cloud_language_v1_Sentiment_descriptor; 57 } 58 59 @java.lang.Override 60 protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable()61 internalGetFieldAccessorTable() { 62 return com.google.cloud.language.v1.LanguageServiceProto 63 .internal_static_google_cloud_language_v1_Sentiment_fieldAccessorTable 64 .ensureFieldAccessorsInitialized( 65 com.google.cloud.language.v1.Sentiment.class, 66 com.google.cloud.language.v1.Sentiment.Builder.class); 67 } 68 69 public static final int MAGNITUDE_FIELD_NUMBER = 2; 70 private float magnitude_ = 0F; 71 /** 72 * 73 * 74 * <pre> 75 * A non-negative number in the [0, +inf) range, which represents 76 * the absolute magnitude of sentiment regardless of score (positive or 77 * negative). 78 * </pre> 79 * 80 * <code>float magnitude = 2;</code> 81 * 82 * @return The magnitude. 83 */ 84 @java.lang.Override getMagnitude()85 public float getMagnitude() { 86 return magnitude_; 87 } 88 89 public static final int SCORE_FIELD_NUMBER = 3; 90 private float score_ = 0F; 91 /** 92 * 93 * 94 * <pre> 95 * Sentiment score between -1.0 (negative sentiment) and 1.0 96 * (positive sentiment). 97 * </pre> 98 * 99 * <code>float score = 3;</code> 100 * 101 * @return The score. 102 */ 103 @java.lang.Override getScore()104 public float getScore() { 105 return score_; 106 } 107 108 private byte memoizedIsInitialized = -1; 109 110 @java.lang.Override isInitialized()111 public final boolean isInitialized() { 112 byte isInitialized = memoizedIsInitialized; 113 if (isInitialized == 1) return true; 114 if (isInitialized == 0) return false; 115 116 memoizedIsInitialized = 1; 117 return true; 118 } 119 120 @java.lang.Override writeTo(com.google.protobuf.CodedOutputStream output)121 public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { 122 if (java.lang.Float.floatToRawIntBits(magnitude_) != 0) { 123 output.writeFloat(2, magnitude_); 124 } 125 if (java.lang.Float.floatToRawIntBits(score_) != 0) { 126 output.writeFloat(3, score_); 127 } 128 getUnknownFields().writeTo(output); 129 } 130 131 @java.lang.Override getSerializedSize()132 public int getSerializedSize() { 133 int size = memoizedSize; 134 if (size != -1) return size; 135 136 size = 0; 137 if (java.lang.Float.floatToRawIntBits(magnitude_) != 0) { 138 size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, magnitude_); 139 } 140 if (java.lang.Float.floatToRawIntBits(score_) != 0) { 141 size += com.google.protobuf.CodedOutputStream.computeFloatSize(3, score_); 142 } 143 size += getUnknownFields().getSerializedSize(); 144 memoizedSize = size; 145 return size; 146 } 147 148 @java.lang.Override equals(final java.lang.Object obj)149 public boolean equals(final java.lang.Object obj) { 150 if (obj == this) { 151 return true; 152 } 153 if (!(obj instanceof com.google.cloud.language.v1.Sentiment)) { 154 return super.equals(obj); 155 } 156 com.google.cloud.language.v1.Sentiment other = (com.google.cloud.language.v1.Sentiment) obj; 157 158 if (java.lang.Float.floatToIntBits(getMagnitude()) 159 != java.lang.Float.floatToIntBits(other.getMagnitude())) return false; 160 if (java.lang.Float.floatToIntBits(getScore()) 161 != java.lang.Float.floatToIntBits(other.getScore())) return false; 162 if (!getUnknownFields().equals(other.getUnknownFields())) return false; 163 return true; 164 } 165 166 @java.lang.Override hashCode()167 public int hashCode() { 168 if (memoizedHashCode != 0) { 169 return memoizedHashCode; 170 } 171 int hash = 41; 172 hash = (19 * hash) + getDescriptor().hashCode(); 173 hash = (37 * hash) + MAGNITUDE_FIELD_NUMBER; 174 hash = (53 * hash) + java.lang.Float.floatToIntBits(getMagnitude()); 175 hash = (37 * hash) + SCORE_FIELD_NUMBER; 176 hash = (53 * hash) + java.lang.Float.floatToIntBits(getScore()); 177 hash = (29 * hash) + getUnknownFields().hashCode(); 178 memoizedHashCode = hash; 179 return hash; 180 } 181 parseFrom(java.nio.ByteBuffer data)182 public static com.google.cloud.language.v1.Sentiment parseFrom(java.nio.ByteBuffer data) 183 throws com.google.protobuf.InvalidProtocolBufferException { 184 return PARSER.parseFrom(data); 185 } 186 parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)187 public static com.google.cloud.language.v1.Sentiment parseFrom( 188 java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) 189 throws com.google.protobuf.InvalidProtocolBufferException { 190 return PARSER.parseFrom(data, extensionRegistry); 191 } 192 parseFrom( com.google.protobuf.ByteString data)193 public static com.google.cloud.language.v1.Sentiment parseFrom( 194 com.google.protobuf.ByteString data) 195 throws com.google.protobuf.InvalidProtocolBufferException { 196 return PARSER.parseFrom(data); 197 } 198 parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)199 public static com.google.cloud.language.v1.Sentiment parseFrom( 200 com.google.protobuf.ByteString data, 201 com.google.protobuf.ExtensionRegistryLite extensionRegistry) 202 throws com.google.protobuf.InvalidProtocolBufferException { 203 return PARSER.parseFrom(data, extensionRegistry); 204 } 205 parseFrom(byte[] data)206 public static com.google.cloud.language.v1.Sentiment parseFrom(byte[] data) 207 throws com.google.protobuf.InvalidProtocolBufferException { 208 return PARSER.parseFrom(data); 209 } 210 parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)211 public static com.google.cloud.language.v1.Sentiment parseFrom( 212 byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) 213 throws com.google.protobuf.InvalidProtocolBufferException { 214 return PARSER.parseFrom(data, extensionRegistry); 215 } 216 parseFrom(java.io.InputStream input)217 public static com.google.cloud.language.v1.Sentiment parseFrom(java.io.InputStream input) 218 throws java.io.IOException { 219 return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); 220 } 221 parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)222 public static com.google.cloud.language.v1.Sentiment parseFrom( 223 java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) 224 throws java.io.IOException { 225 return com.google.protobuf.GeneratedMessageV3.parseWithIOException( 226 PARSER, input, extensionRegistry); 227 } 228 parseDelimitedFrom(java.io.InputStream input)229 public static com.google.cloud.language.v1.Sentiment parseDelimitedFrom(java.io.InputStream input) 230 throws java.io.IOException { 231 return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); 232 } 233 parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)234 public static com.google.cloud.language.v1.Sentiment parseDelimitedFrom( 235 java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) 236 throws java.io.IOException { 237 return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( 238 PARSER, input, extensionRegistry); 239 } 240 parseFrom( com.google.protobuf.CodedInputStream input)241 public static com.google.cloud.language.v1.Sentiment parseFrom( 242 com.google.protobuf.CodedInputStream input) throws java.io.IOException { 243 return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); 244 } 245 parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)246 public static com.google.cloud.language.v1.Sentiment parseFrom( 247 com.google.protobuf.CodedInputStream input, 248 com.google.protobuf.ExtensionRegistryLite extensionRegistry) 249 throws java.io.IOException { 250 return com.google.protobuf.GeneratedMessageV3.parseWithIOException( 251 PARSER, input, extensionRegistry); 252 } 253 254 @java.lang.Override newBuilderForType()255 public Builder newBuilderForType() { 256 return newBuilder(); 257 } 258 newBuilder()259 public static Builder newBuilder() { 260 return DEFAULT_INSTANCE.toBuilder(); 261 } 262 newBuilder(com.google.cloud.language.v1.Sentiment prototype)263 public static Builder newBuilder(com.google.cloud.language.v1.Sentiment prototype) { 264 return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); 265 } 266 267 @java.lang.Override toBuilder()268 public Builder toBuilder() { 269 return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); 270 } 271 272 @java.lang.Override newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent)273 protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { 274 Builder builder = new Builder(parent); 275 return builder; 276 } 277 /** 278 * 279 * 280 * <pre> 281 * Represents the feeling associated with the entire text or entities in 282 * the text. 283 * </pre> 284 * 285 * Protobuf type {@code google.cloud.language.v1.Sentiment} 286 */ 287 public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> 288 implements 289 // @@protoc_insertion_point(builder_implements:google.cloud.language.v1.Sentiment) 290 com.google.cloud.language.v1.SentimentOrBuilder { getDescriptor()291 public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { 292 return com.google.cloud.language.v1.LanguageServiceProto 293 .internal_static_google_cloud_language_v1_Sentiment_descriptor; 294 } 295 296 @java.lang.Override 297 protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable()298 internalGetFieldAccessorTable() { 299 return com.google.cloud.language.v1.LanguageServiceProto 300 .internal_static_google_cloud_language_v1_Sentiment_fieldAccessorTable 301 .ensureFieldAccessorsInitialized( 302 com.google.cloud.language.v1.Sentiment.class, 303 com.google.cloud.language.v1.Sentiment.Builder.class); 304 } 305 306 // Construct using com.google.cloud.language.v1.Sentiment.newBuilder() Builder()307 private Builder() {} 308 Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent)309 private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { 310 super(parent); 311 } 312 313 @java.lang.Override clear()314 public Builder clear() { 315 super.clear(); 316 bitField0_ = 0; 317 magnitude_ = 0F; 318 score_ = 0F; 319 return this; 320 } 321 322 @java.lang.Override getDescriptorForType()323 public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { 324 return com.google.cloud.language.v1.LanguageServiceProto 325 .internal_static_google_cloud_language_v1_Sentiment_descriptor; 326 } 327 328 @java.lang.Override getDefaultInstanceForType()329 public com.google.cloud.language.v1.Sentiment getDefaultInstanceForType() { 330 return com.google.cloud.language.v1.Sentiment.getDefaultInstance(); 331 } 332 333 @java.lang.Override build()334 public com.google.cloud.language.v1.Sentiment build() { 335 com.google.cloud.language.v1.Sentiment result = buildPartial(); 336 if (!result.isInitialized()) { 337 throw newUninitializedMessageException(result); 338 } 339 return result; 340 } 341 342 @java.lang.Override buildPartial()343 public com.google.cloud.language.v1.Sentiment buildPartial() { 344 com.google.cloud.language.v1.Sentiment result = 345 new com.google.cloud.language.v1.Sentiment(this); 346 if (bitField0_ != 0) { 347 buildPartial0(result); 348 } 349 onBuilt(); 350 return result; 351 } 352 buildPartial0(com.google.cloud.language.v1.Sentiment result)353 private void buildPartial0(com.google.cloud.language.v1.Sentiment result) { 354 int from_bitField0_ = bitField0_; 355 if (((from_bitField0_ & 0x00000001) != 0)) { 356 result.magnitude_ = magnitude_; 357 } 358 if (((from_bitField0_ & 0x00000002) != 0)) { 359 result.score_ = score_; 360 } 361 } 362 363 @java.lang.Override clone()364 public Builder clone() { 365 return super.clone(); 366 } 367 368 @java.lang.Override setField( com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value)369 public Builder setField( 370 com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { 371 return super.setField(field, value); 372 } 373 374 @java.lang.Override clearField(com.google.protobuf.Descriptors.FieldDescriptor field)375 public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { 376 return super.clearField(field); 377 } 378 379 @java.lang.Override clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof)380 public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { 381 return super.clearOneof(oneof); 382 } 383 384 @java.lang.Override setRepeatedField( com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value)385 public Builder setRepeatedField( 386 com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { 387 return super.setRepeatedField(field, index, value); 388 } 389 390 @java.lang.Override addRepeatedField( com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value)391 public Builder addRepeatedField( 392 com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { 393 return super.addRepeatedField(field, value); 394 } 395 396 @java.lang.Override mergeFrom(com.google.protobuf.Message other)397 public Builder mergeFrom(com.google.protobuf.Message other) { 398 if (other instanceof com.google.cloud.language.v1.Sentiment) { 399 return mergeFrom((com.google.cloud.language.v1.Sentiment) other); 400 } else { 401 super.mergeFrom(other); 402 return this; 403 } 404 } 405 mergeFrom(com.google.cloud.language.v1.Sentiment other)406 public Builder mergeFrom(com.google.cloud.language.v1.Sentiment other) { 407 if (other == com.google.cloud.language.v1.Sentiment.getDefaultInstance()) return this; 408 if (other.getMagnitude() != 0F) { 409 setMagnitude(other.getMagnitude()); 410 } 411 if (other.getScore() != 0F) { 412 setScore(other.getScore()); 413 } 414 this.mergeUnknownFields(other.getUnknownFields()); 415 onChanged(); 416 return this; 417 } 418 419 @java.lang.Override isInitialized()420 public final boolean isInitialized() { 421 return true; 422 } 423 424 @java.lang.Override mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)425 public Builder mergeFrom( 426 com.google.protobuf.CodedInputStream input, 427 com.google.protobuf.ExtensionRegistryLite extensionRegistry) 428 throws java.io.IOException { 429 if (extensionRegistry == null) { 430 throw new java.lang.NullPointerException(); 431 } 432 try { 433 boolean done = false; 434 while (!done) { 435 int tag = input.readTag(); 436 switch (tag) { 437 case 0: 438 done = true; 439 break; 440 case 21: 441 { 442 magnitude_ = input.readFloat(); 443 bitField0_ |= 0x00000001; 444 break; 445 } // case 21 446 case 29: 447 { 448 score_ = input.readFloat(); 449 bitField0_ |= 0x00000002; 450 break; 451 } // case 29 452 default: 453 { 454 if (!super.parseUnknownField(input, extensionRegistry, tag)) { 455 done = true; // was an endgroup tag 456 } 457 break; 458 } // default: 459 } // switch (tag) 460 } // while (!done) 461 } catch (com.google.protobuf.InvalidProtocolBufferException e) { 462 throw e.unwrapIOException(); 463 } finally { 464 onChanged(); 465 } // finally 466 return this; 467 } 468 469 private int bitField0_; 470 471 private float magnitude_; 472 /** 473 * 474 * 475 * <pre> 476 * A non-negative number in the [0, +inf) range, which represents 477 * the absolute magnitude of sentiment regardless of score (positive or 478 * negative). 479 * </pre> 480 * 481 * <code>float magnitude = 2;</code> 482 * 483 * @return The magnitude. 484 */ 485 @java.lang.Override getMagnitude()486 public float getMagnitude() { 487 return magnitude_; 488 } 489 /** 490 * 491 * 492 * <pre> 493 * A non-negative number in the [0, +inf) range, which represents 494 * the absolute magnitude of sentiment regardless of score (positive or 495 * negative). 496 * </pre> 497 * 498 * <code>float magnitude = 2;</code> 499 * 500 * @param value The magnitude to set. 501 * @return This builder for chaining. 502 */ setMagnitude(float value)503 public Builder setMagnitude(float value) { 504 505 magnitude_ = value; 506 bitField0_ |= 0x00000001; 507 onChanged(); 508 return this; 509 } 510 /** 511 * 512 * 513 * <pre> 514 * A non-negative number in the [0, +inf) range, which represents 515 * the absolute magnitude of sentiment regardless of score (positive or 516 * negative). 517 * </pre> 518 * 519 * <code>float magnitude = 2;</code> 520 * 521 * @return This builder for chaining. 522 */ clearMagnitude()523 public Builder clearMagnitude() { 524 bitField0_ = (bitField0_ & ~0x00000001); 525 magnitude_ = 0F; 526 onChanged(); 527 return this; 528 } 529 530 private float score_; 531 /** 532 * 533 * 534 * <pre> 535 * Sentiment score between -1.0 (negative sentiment) and 1.0 536 * (positive sentiment). 537 * </pre> 538 * 539 * <code>float score = 3;</code> 540 * 541 * @return The score. 542 */ 543 @java.lang.Override getScore()544 public float getScore() { 545 return score_; 546 } 547 /** 548 * 549 * 550 * <pre> 551 * Sentiment score between -1.0 (negative sentiment) and 1.0 552 * (positive sentiment). 553 * </pre> 554 * 555 * <code>float score = 3;</code> 556 * 557 * @param value The score to set. 558 * @return This builder for chaining. 559 */ setScore(float value)560 public Builder setScore(float value) { 561 562 score_ = value; 563 bitField0_ |= 0x00000002; 564 onChanged(); 565 return this; 566 } 567 /** 568 * 569 * 570 * <pre> 571 * Sentiment score between -1.0 (negative sentiment) and 1.0 572 * (positive sentiment). 573 * </pre> 574 * 575 * <code>float score = 3;</code> 576 * 577 * @return This builder for chaining. 578 */ clearScore()579 public Builder clearScore() { 580 bitField0_ = (bitField0_ & ~0x00000002); 581 score_ = 0F; 582 onChanged(); 583 return this; 584 } 585 586 @java.lang.Override setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields)587 public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { 588 return super.setUnknownFields(unknownFields); 589 } 590 591 @java.lang.Override mergeUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields)592 public final Builder mergeUnknownFields( 593 final com.google.protobuf.UnknownFieldSet unknownFields) { 594 return super.mergeUnknownFields(unknownFields); 595 } 596 597 // @@protoc_insertion_point(builder_scope:google.cloud.language.v1.Sentiment) 598 } 599 600 // @@protoc_insertion_point(class_scope:google.cloud.language.v1.Sentiment) 601 private static final com.google.cloud.language.v1.Sentiment DEFAULT_INSTANCE; 602 603 static { 604 DEFAULT_INSTANCE = new com.google.cloud.language.v1.Sentiment(); 605 } 606 getDefaultInstance()607 public static com.google.cloud.language.v1.Sentiment getDefaultInstance() { 608 return DEFAULT_INSTANCE; 609 } 610 611 private static final com.google.protobuf.Parser<Sentiment> PARSER = 612 new com.google.protobuf.AbstractParser<Sentiment>() { 613 @java.lang.Override 614 public Sentiment parsePartialFrom( 615 com.google.protobuf.CodedInputStream input, 616 com.google.protobuf.ExtensionRegistryLite extensionRegistry) 617 throws com.google.protobuf.InvalidProtocolBufferException { 618 Builder builder = newBuilder(); 619 try { 620 builder.mergeFrom(input, extensionRegistry); 621 } catch (com.google.protobuf.InvalidProtocolBufferException e) { 622 throw e.setUnfinishedMessage(builder.buildPartial()); 623 } catch (com.google.protobuf.UninitializedMessageException e) { 624 throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); 625 } catch (java.io.IOException e) { 626 throw new com.google.protobuf.InvalidProtocolBufferException(e) 627 .setUnfinishedMessage(builder.buildPartial()); 628 } 629 return builder.buildPartial(); 630 } 631 }; 632 parser()633 public static com.google.protobuf.Parser<Sentiment> parser() { 634 return PARSER; 635 } 636 637 @java.lang.Override getParserForType()638 public com.google.protobuf.Parser<Sentiment> getParserForType() { 639 return PARSER; 640 } 641 642 @java.lang.Override getDefaultInstanceForType()643 public com.google.cloud.language.v1.Sentiment getDefaultInstanceForType() { 644 return DEFAULT_INSTANCE; 645 } 646 } 647