anchor.diff:        D/binary,
         P/binary
       >>;
  -auth_to_binary(#protocol{maxlength=M,seed=S,caps=C,plugin=P},
  -               User, Password, Database) ->
  +auth_to_binary(User, Password, Database,
  +               #protocol{maxlength=M,seed=S,caps=C,plugin=P}) ->
       A = (C bor ?CLIENT_LONG_PASSWORD) band 16#ffff, % FORCE
       X = myer_auth:scramble(Password, S, P),
       B = if ?ISSET(C,?CLIENT_SECURE_CONNECTION) -> N = size(X), <<N,X/binary>>;
  
positive.code:         <<L>> -> {L, Start+1, Length-1}
      end.
  
  recv_packed_integer(Protocol, undefined) ->
      case recv(Protocol, 1) of
          {ok, Byte, #protocol{}=P} ->
              recv_packed_integer(P, Byte);
          {error, Reason, P} ->
              {error, Reason, P}
      end;
  recv_packed_integer(Protocol, <<254>>) -> recv_unsigned(Protocol, 8);
  recv_packed_integer(Protocol, <<253>>) -> recv_unsigned(Protocol, 3);
  recv_packed_integer(Protocol, <<252>>) -> recv_unsigned(Protocol, 2);
  recv_packed_integer(Protocol, <<251>>) -> {ok, null, Protocol};
  recv_packed_integer(Protocol, <<Int>>) -> {ok, Int, Protocol}.
  
  %% -----------------------------------------------------------------------------
  %% << sql-common/client.c : send_client_reply_packet/3
  %% -----------------------------------------------------------------------------
  auth_to_binary(#protocol{maxlength=M,seed=S,caps=C,charset=E,plugin=P},
                 User, Password, Database)
    when ?ISSET(C,?CLIENT_PROTOCOL_41) ->
      X = myer_auth:scramble(Password, S, P),
      B = if ?ISSET(C,?CLIENT_SECURE_CONNECTION) -> N = size(X), <<N,X/binary>>;
  
negative.code:     {ok, Term, Protocol};
  loop(#protocol{}=P, Term, [H|T])
    when is_list(Term) ->
      case apply(H, Term ++ [P]) of % bin_opt_info(SUGGEST)
          {ok, List, Protocol} ->
              loop(Protocol, List, T);
          {error, Reason, Protocol} ->
  