/* package */TrackerResponse (
        boolean failed, String failureReason, String warning, long interval, long minInterval, byte[] trackerId,
        long complete, long incomplete, List<PeerInfo> peers)
    {
        this.failed = failed;

        if (failed) {
            if (failureReason == null) {
                throw new NullPointerException();
            }
            this.failureReason = failureReason;
            this.warning = (warning == null) ? "" : warning;
            this.interval = 0;
            this.minInterval = 0;
            this.trackerId = null;
            this.complete = 0;
            this.incomplete = 0;
            this.peers = Collections.emptyList();
        } else {
            if (peers == null) {
                throw new NullPointerException();
            }
            this.failureReason = "";
            this.warning = (warning == null) ? "" : warning;
            this.interval = interval;
            this.minInterval = minInterval;
            this.trackerId = trackerId == null ? null : Arrays.copyOf(trackerId, trackerId.length);
            this.complete = complete;
            this.incomplete = incomplete;
            this.peers = Collections.unmodifiableList(new ArrayList<PeerInfo>(peers));
        }
    }