class LeaderElectionRecord {

  private final String holderIdentity;
  private final Duration leaseDuration;
  @JsonFormat(timezone = "UTC", pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'")
  private final ZonedDateTime acquireTime;
  @JsonFormat(timezone = "UTC", pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'")
  private final ZonedDateTime renewTime;
  private final int leaderTransitions;

  @JsonCreator
  public LeaderElectionRecord(
      @JsonProperty("holderIdentity") String holderIdentity, @JsonProperty("leaseDuration") Duration leaseDuration,
      @JsonProperty("acquireTime") ZonedDateTime acquireTime, @JsonProperty("renewTime") ZonedDateTime renewTime,
      @JsonProperty("leaderTransitions") int leaderTransitions) {

    this.holderIdentity = holderIdentity;
    this.leaseDuration = Objects.requireNonNull(leaseDuration, "leaseDuration is required");
    this.acquireTime = Objects.requireNonNull(acquireTime, "acquireTime is required");
    this.renewTime = Objects.requireNonNull(renewTime, "renewTime is required");
    this.leaderTransitions = leaderTransitions;
  }

  public String getHolderIdentity() {
    return holderIdentity;
  }

  public Duration getLeaseDuration() {
    return leaseDuration;
  }

  public ZonedDateTime getAcquireTime() {
    return acquireTime;
  }

  public ZonedDateTime getRenewTime() {
    return renewTime;
  }

  public int getLeaderTransitions() {
    return leaderTransitions;
  }

  @Override
  public boolean equals(Object o) {<FILL_FUNCTION_BODY>}

  @Override
  public int hashCode() {
    return Objects.hash(holderIdentity, leaseDuration, acquireTime, renewTime, leaderTransitions);
  }

}

    if (this == o)
      return true;
    if (o == null || getClass() != o.getClass())
      return false;
    LeaderElectionRecord that = (LeaderElectionRecord) o;
    return leaderTransitions == that.leaderTransitions &&
        Objects.equals(holderIdentity, that.holderIdentity) &&
        Objects.equals(leaseDuration, that.leaseDuration) &&
        Objects.equals(acquireTime, that.acquireTime) &&
        Objects.equals(renewTime, that.renewTime);
  
<no_super_class>