<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def dataReceived(self, data):
 """ Parses chunks of bytes into responses. Whenever a complete response is received, this method extracts its payload and calls L{responseReceived} to process it. @param data: A chunk of data representing a (possibly partial) response @type data: C{bytes} """

        size = len(self._buffer) + len(data)
        if size > self.MAX_LENGTH:
            self.lengthLimitExceeded(size)
        self._buffer += data

        start = 0
        for match in self._pattern.finditer(self._buffer):
            # The start of the sentinel marks the end of the response.
            end = match.start()
            tag = int(match.group(1))
            self.responseReceived(self._buffer[start:end], tag)

            # Advance start position to the beginning of the next line
            start = match.end() + 1

        if start:
            self._buffer = self._buffer[start:]