code: func NewCryptoSetupClient(
  	initialStream io.Writer,
  	handshakeStream io.Writer,
  	oneRTTStream io.Writer,
  	connID protocol.ConnectionID,
  	remoteAddr net.Addr,
  	tp *TransportParameters,
  	handleParams func([]byte),
  	tlsConf *tls.Config,
  	logger utils.Logger,
  ) (CryptoSetup, <-chan struct{} /* ClientHello written */, error) {
  	cs, clientHelloWritten, err := newCryptoSetup(
  		initialStream,
  		handshakeStream,
  		oneRTTStream,
  		connID,
  		tp,
  		handleParams,
  		tlsConf,
  		logger,
  		protocol.PerspectiveClient,
  	)
  	if err != nil {
  		return nil, nil, err
  	}
  	cs.conn = qtls.Client(newConn(remoteAddr), cs.tlsConf)
  	return cs, clientHelloWritten, nil
  }
docs: // NewCryptoSetupClient creates a new crypto setup for the client