class HashUID extends UID {

    @Override
    public boolean equals(Object other) {
        if (!(other instanceof HashUID)) {
            return false;
        }
        
        if (other == this) {
            return true;
        }
        
        HashUID o = (HashUID) other;
        EqualsBuilder equals = new EqualsBuilder();
        equals.append(this.optionalPrefix, o.optionalPrefix);
        equals.append(this.h1, o.h1);
        equals.append(this.h2, o.h2);
        equals.append(this.time, o.time);
        equals.append(this.extra, o.extra);
        
        return equals.isEquals();
    }

    protected  HashUID();
    protected  HashUID(final byte[] data, final Date time);
    protected  HashUID(final byte[] data, final Date time, final String... extras);
    protected  HashUID(final HashUID template, final String... extras);
    private  HashUID(final String optionalPrefix, int h1, int h2, int time, final String... extras);
    private  HashUID(final String optionalPrefix, int h1, int h2, int time);

}