anchor.diff:  %% @doc Parse the Max-Forwards header.
   
   -spec parse_max_forwards(binary()) -> non_neg_integer().
  -parse_max_forwards(<< $0, R/bits >>) -> number(R, 0);
  -parse_max_forwards(<< $1, R/bits >>) -> number(R, 1);
  -parse_max_forwards(<< $2, R/bits >>) -> number(R, 2);
  -parse_max_forwards(<< $3, R/bits >>) -> number(R, 3);
  -parse_max_forwards(<< $4, R/bits >>) -> number(R, 4);
  -parse_max_forwards(<< $5, R/bits >>) -> number(R, 5);
  -parse_max_forwards(<< $6, R/bits >>) -> number(R, 6);
  -parse_max_forwards(<< $7, R/bits >>) -> number(R, 7);
  -parse_max_forwards(<< $8, R/bits >>) -> number(R, 8);
  -parse_max_forwards(<< $9, R/bits >>) -> number(R, 9).
  +parse_max_forwards(MaxForwards) ->
  +	I = binary_to_integer(MaxForwards),
  +	true = I >= 0,
  +	I.
   
   -ifdef(TEST).
   prop_parse_max_forwards() ->
  
positive.code: %% The value has at least one digit, and may be followed by whitespace.
  
  -spec parse_content_length(binary()) -> non_neg_integer().
  parse_content_length(<< $0 >>) -> 0;
  parse_content_length(<< $0, R/bits >>) -> number(R, 0);
  parse_content_length(<< $1, R/bits >>) -> number(R, 1);
  parse_content_length(<< $2, R/bits >>) -> number(R, 2);
  parse_content_length(<< $3, R/bits >>) -> number(R, 3);
  parse_content_length(<< $4, R/bits >>) -> number(R, 4);
  parse_content_length(<< $5, R/bits >>) -> number(R, 5);
  parse_content_length(<< $6, R/bits >>) -> number(R, 6);
  parse_content_length(<< $7, R/bits >>) -> number(R, 7);
  parse_content_length(<< $8, R/bits >>) -> number(R, 8);
  parse_content_length(<< $9, R/bits >>) -> number(R, 9).
  
  -ifdef(TEST).
  prop_parse_content_length() ->
  
negative.code: %% Only return if the list is not empty.
  nonempty(L) when L =/= [] -> L.
  
  %% Parse a list of case insensitive tokens.
  token_ci_list(<<>>, Acc) -> lists:reverse(Acc);
  token_ci_list(<< $\s, R/bits >>, Acc) -> token_ci_list(R, Acc);
  