docs: public static HTTPAnnounceResponseMessage craft(int interval,
                                                    int complete, int incomplete,
                                                    List<Peer> peers, String hexInfoHash) throws IOException, UnsupportedEncodingException {
      Map<String, BEValue> response = new HashMap<String, BEValue>();
      response.put("interval", new BEValue(interval));
      response.put("complete", new BEValue(complete));
      response.put("incomplete", new BEValue(incomplete));
      if (hexInfoHash != null) {
        response.put("torrentIdentifier", new BEValue(hexInfoHash));
      }
  
      ByteBuffer data = ByteBuffer.allocate(peers.size() * 6);
      for (Peer peer : peers) {
        byte[] ip = peer.getRawIp();
        if (ip == null || ip.length != 4) {
          continue;
        }
        data.put(ip);
        data.putShort((short) peer.getPort());
      }
      response.put("peers", new BEValue(Arrays.copyOf(data.array(), data.position())));
  
      return new HTTPAnnounceResponseMessage(
              BEncoder.bencode(response),
              interval, complete, incomplete, peers, hexInfoHash);
    }