code: public AuthToken merge(AuthToken other) {
          if (other.equals(NULL_AUTH_TOKEN)) {
              // NULL_AUTH_TOKEN can't merge
              return other;
          }
          AuthToken merged = new AuthToken();
          merged.key = other.key != null ? other.key : this.key;
          merged.tokenName = other.tokenName != null ? other.tokenName : this.tokenName;
          merged.startTime = other.startTime != 0 ? other.startTime : this.startTime;
          merged.expiration = other.expiration != 0 ? other.expiration : this.expiration;
          merged.ip = other.ip != null ? other.ip : this.ip;
          merged.acl = other.acl != null ? other.acl : this.acl;
          merged.duration = other.duration != 0 ? other.duration : this.duration;
          return merged;
      }
docs: Merge this token with another, creating a new token. Other's members who are not <code>null</code> or <code>0</code> will override this object's members.
  
  @param other the token to merge from
  @return a new token