code: def process_subprotocol(
          headers: Headers, available_subprotocols: Optional[Sequence[Subprotocol]]
      ) -> Optional[Subprotocol]:
          
          subprotocol: Optional[Subprotocol] = None
  
          header_values = headers.get_all("Sec-WebSocket-Protocol")
  
          if header_values:
  
              if available_subprotocols is None:
                  raise InvalidHandshake("No subprotocols supported")
  
              parsed_header_values: Sequence[Subprotocol] = sum(
                  [parse_subprotocol(header_value) for header_value in header_values], []
              )
  
              if len(parsed_header_values) > 1:
                  subprotocols = ", ".join(parsed_header_values)
                  raise InvalidHandshake(f"Multiple subprotocols: {subprotocols}")
  
              subprotocol = parsed_header_values[0]
  
              if subprotocol not in available_subprotocols:
                  raise NegotiationError(f"Unsupported subprotocol: {subprotocol}")
  
          return subprotocol
docs: Handle the Sec-WebSocket-Protocol HTTP response header.
  
          Check that it contains exactly one supported subprotocol.
  
          Return the selected subprotocol.