anchor.diff:              CtxAllow = cowmachine_req:set_resp_header(<<"allow">>, [z_convert:to_binary(M) || M <- Methods], C1),
               respond(405, S1, CtxAllow)
       end;
  +
  +%% "Content-MD5 present?"
  +decision(v3b9, State, Context) ->
  +    ContentMD5 = cowmachine_req:get_req_header(<<"content-md5">>, Context),
  +    decision_test(ContentMD5, undefined, v3b9b, v3b9a, State, Context);
  +
  +%% "Content-MD5 valid?"
  +decision(v3b9a, State, Context) ->
  +    {Md5Valid, S1, C1} = controller_call(validate_content_checksum, State, Context),
  +    case Md5Valid of
  +        {error, Reason} ->
  +            error_response(Reason, S1, C1);
  +        {halt, Code} ->
  +            respond(Code, S1, C1);
  +        not_validated ->
  +            Checksum = base64:decode(cowmachine_req:get_req_header(<<"content-md5">>, C1)),
  +            {Body, C2} = cowmachine_req:req_body(C1),
  +            BodyHash = crypto:hash(md5, Body),
  +            case BodyHash =:= Checksum of
  +                true -> d(v3b9b, S1, C2);
  +                _ ->
  +                    respond(400, S1, C2)
  +            end;
  +        false ->
  +            respond(400, S1, C1);
  +        _ ->
  +            d(v3b9b, S1, C1)
  +    end;
  +
   %% "Malformed?"
  -decision(v3b9, State, Context) ->
  +decision(v3b9b, State, Context) ->
       decision_test(controller_call(malformed_request, State, Context), true, 400, v3b8);
  +
   %% "Authorized?"
  -decision(v3b8, #cmstate{options=Options} = State, Context) ->
  +decision(v3b8, #cmstate{ options = Options } = State, Context) ->
       Context1 = case maps:get(on_welformed, Options, undefined) of
                       undefined -> Context;
                       Fun when is_function(Fun) -> Fun(Context)
  
positive.code: 
  decision(v3o18b, State, Context) ->
      decision_test(controller_call(multiple_choices, State, Context), true, 300, 200);
  %% Response includes an entity?
  decision(v3o20, State, Context) ->
      decision_test(cowmachine_req:has_resp_body(Context), true, v3o18, 204, State, Context);
  %% Conflict?
  decision(v3p3, State, Context) ->
      {IsConflict, Rs1, Rd1} = controller_call(is_conflict, State, Context),
  
negative.code:         _ -> 
              {nop, SStage1, CtxStage1}
      end;
  
  %% "POST?"
  decision(v3n16, State, Context) ->
      decision_test(cowmachine_req:method(Context), <<"POST">>, v3n11, v3o16, State, Context);
  
  %% Conflict?
  decision(v3o14, State, Context) ->
      {IsConflict, Rs1, Rd1} = controller_call(is_conflict, State, Context),
  