import java.lang.annotation.*;
@lombok.EqualsAndHashCode class EqualsAndHashCodeAnnotated {
  @Target(ElementType.TYPE_USE) @Retention(RetentionPolicy.SOURCE) @interface Annotated {
  }
  @Annotated int primitive;
  @Annotated Object object;
  int @Annotated [] primitiveValues;
  int @Annotated [] @Annotated [] morePrimitiveValues;
  Integer @Annotated [] objectValues;
  Integer @Annotated [] @Annotated [] moreObjectValues;
  EqualsAndHashCodeAnnotated() {
    super();
  }
  public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) {
    if ((o == this))
        return true;
    if ((! (o instanceof EqualsAndHashCodeAnnotated)))
        return false;
    final EqualsAndHashCodeAnnotated other = (EqualsAndHashCodeAnnotated) o;
    if ((! other.canEqual((java.lang.Object) this)))
        return false;
    if ((this.primitive != other.primitive))
        return false;
    final java.lang.Object this$object = this.object;
    final java.lang.Object other$object = other.object;
    if (((this$object == null) ? (other$object != null) : (! this$object.equals(other$object))))
        return false;
    if ((! java.util.Arrays.equals(this.primitiveValues, other.primitiveValues)))
        return false;
    if ((! java.util.Arrays.deepEquals(this.morePrimitiveValues, other.morePrimitiveValues)))
        return false;
    if ((! java.util.Arrays.deepEquals(this.objectValues, other.objectValues)))
        return false;
    if ((! java.util.Arrays.deepEquals(this.moreObjectValues, other.moreObjectValues)))
        return false;
    return true;
  }
  protected @java.lang.SuppressWarnings("all") boolean canEqual(final java.lang.Object other) {
    return (other instanceof EqualsAndHashCodeAnnotated);
  }
  public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
    final int PRIME = 59;
    int result = 1;
    result = ((result * PRIME) + this.primitive);
    final java.lang.Object $object = this.object;
    result = ((result * PRIME) + (($object == null) ? 43 : $object.hashCode()));
    result = ((result * PRIME) + java.util.Arrays.hashCode(this.primitiveValues));
    result = ((result * PRIME) + java.util.Arrays.deepHashCode(this.morePrimitiveValues));
    result = ((result * PRIME) + java.util.Arrays.deepHashCode(this.objectValues));
    result = ((result * PRIME) + java.util.Arrays.deepHashCode(this.moreObjectValues));
    return result;
  }
}