anchor.diff:  -define(BLOCK_BUCKET_PREFIX, <<"0b:">>).        % Version # = 0
   
   -type bucket_op() :: create | update_acl | delete | update_policy | delete_policy.
  --type bucket_op_opts() :: [bucket_op_opt()].
  --type bucket_op_opt() :: {acl, acl()} | {policy, binary()} | delete_policy.
  +-type bucket_op_options() :: [bucket_op_option()].
  +-type bucket_op_option() :: {acl, acl()} | {policy, binary()} | delete_policy | {bag, binary()}.
   
   %% ===================================================================
   %% Public API
  
positive.code:     UpdBucketObj = riakc_obj:update_metadata(UpdBucketObj0, MetaData),
      riakc_pb_socket:put(RiakPid, UpdBucketObj, PutOptions).
  
  make_new_metadata(MD, Opts) ->
      MetaVals = dict:fetch(?MD_USERMETA, MD),
      UserMetaData = make_new_user_metadata(MetaVals, Opts),
      dict:store(?MD_USERMETA, UserMetaData, dict:erase(?MD_USERMETA, MD)).
  
  make_new_user_metadata(MetaVals, [])->
      MetaVals;
  make_new_user_metadata(MetaVals, [{acl, Acl} | Opts])->
  
negative.code: %% proplists of {?MD_ACL, ACL::binary()}|{?MD_POLICY, PolicyBin::binary()}|
  %%  {?MD_BAG, BagId::binary()}.
  %% should preserve other metadata. ACL and Policy can be overwritten.
  -spec put_bucket(term(), binary(), bucket_op_options(), pid()) ->
                          ok | {error, term()}.
  put_bucket(BucketObj, OwnerId, Opts, RiakPid) ->
      PutOptions = [{w, all}, {pw, all}],
  