anchor.diff:  %%% Internal functions
   %%%===================================================================
   
  +
  +random_worker() ->
  +    Workers = workers(),
  +    R = random(size(Workers)),
  +    element(R, workers()).
  +
  +
  +encoded_val(RObj) ->
  +    RObj2 = riak_object:set_vclock(RObj, vclock:fresh(<<0:8>>, 1)),
  +    RObj3 = riak_object:update_last_modified(RObj2),
  +    RObj4 = riak_object:apply_updates(RObj3),
  +    riak_object:to_binary(v1, RObj4).
  +
  +
   validate_options(NVal, Preflist, Options, BucketProps) ->
       PW = get_rw_value(pw, BucketProps, NVal, Options),
       W = case get_rw_value(dw, BucketProps, NVal, Options) of
  
positive.code: put(RObj, Options) ->
      StartTS = os:timestamp(),
      Bucket = riak_object:bucket(RObj),
      BKey = {Bucket, riak_object:key(RObj)},
      BucketProps = riak_core_bucket:get_bucket(riak_object:bucket(RObj)),
      DocIdx = riak_core_util:chash_key(BKey, BucketProps),
      NVal = proplists:get_value(n_val, BucketProps),
      Preflist =
          case proplists:get_value(sloppy_quorum, Options, true) of
  
negative.code:         end,
      case validate_options(NVal, Preflist, Options, BucketProps) of
          {ok, W, PW} ->
              Worker = random_worker(),
              EncodedVal = encoded_val(RObj),
              ReqId = erlang:monitor(process, Worker),
              Timeout = case proplists:get_value(timeout, Options, ?DEFAULT_TIMEOUT) of
                  N when is_integer(N) andalso N > 0 ->
                      N;
                  _ ->
                      ?DEFAULT_TIMEOUT
              end,
              gen_server:cast(
                  Worker,
                  {put, Bucket, Key, EncodedVal, ReqId, Preflist,
                   #rec{w=W, pw=PW, n_val=NVal, from=self(),
                        start_ts=StartTS,
                        size=size(EncodedVal)}}),
              receive
                  {'DOWN', ReqId, process, _Pid, _Reason} ->
                      {error, riak_kv_w1c_server_crashed};
  