docs: private CookieData matchAndParse(byte[] data, HeaderKeys hdr) {
  
          int pos = this.bytePosition;
          int start = -1;
          int stop = -1;
  
          for (; pos < data.length; pos++) {
              byte b = data[pos];
  
              // found the delimiter for the name */
              if ('=' == b) {
                  break;
              }
  
              // In case of headers like MyNullCookie;
              // Set-Cookie is comma separated
              if (';' == b || ',' == b) {
                  if (-1 == start) {
                      // just ignore this empty bit (ie. ";;version=1")
                      continue;
                  }
                  // decrement the position so that the parse cookie value code
                  // will notice the missing value (by seeing semi-colon first)
                  pos--;
                  break;
              }
  
              // ignore white space
              if (' ' != b && '\t' != b) {
                  if (-1 == start) {
                      start = pos;
                  }
                  stop = pos;
              }
          }
  
          // save our stopping point (past the delimiter)
          this.bytePosition = pos + 1;
  
          if (-1 == start) {
              // nothing was found
              return null;
          }
          if (-1 == stop) {
              // shouldn't be possible
              stop = pos;
          } else if (data.length == stop) {
              stop--;
          }
  
          boolean foundDollar = ('$' == data[start]);
          if (foundDollar) {
              // skip past the leading $ symbol
              start++;
          } else if ('"' == data[start] && '"' == data[stop]) {
              // quotes around the values, strip them off
              start++;
              stop--;
          }
          int len = stop - start + 1;
          if (0 >= len) {
              // invalid data
              return null;
          }
          CookieData token = CookieData.match(data, start, len);
          if (null != token && null != hdr) {
              // test whether what we believe to be a token is a valid attribute
              // for this header instance. If not, then treat it as a new cookie
              // name
              if (!token.validForHeader(hdr, foundDollar)) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Token not valid for header, " + hdr + " " + token);
                  }
                  token = null;
              }
          }
          if (null == token) {
              // New cookie name found
              this.name = new byte[len];
              System.arraycopy(data, start, this.name, 0, len);
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "name: " + GenericUtils.getEnglishString(this.name));
              }
          }
  
          return token;
      }