docs: private void performSetupExchange() throws IOException {
          Message setupRequest = new Message(0xfffffffeL, Message.KnownType.SETUP_REQ, new NumberField(posingAsPlayer, 4));
          sendMessage(setupRequest);
          Message response = Message.read(is);
          if (response.knownType != Message.KnownType.MENU_AVAILABLE) {
              throw new IOException("Did not receive message type 0x4000 in response to setup message, got: " + response);
          }
          if (response.arguments.size() != 2) {
              throw new IOException("Did not receive two arguments in response to setup message, got: " + response);
          }
          final Field player = response.arguments.get(1);
          if (!(player instanceof NumberField)) {
              throw new IOException("Second argument in response to setup message was not a number: " + response);
          }
          if (((NumberField)player).getValue() != targetPlayer) {
              throw new IOException("Expected to connect to player " + targetPlayer +
                      ", but welcome response identified itself as player " + ((NumberField)player).getValue());
          }
      }