anchor.diff:  		attributes = Attributes} = B | T], Acc, Charged)
   		when Charge > 0, R =< Charge, R > 0,
   		((Expires == undefined) or (Now < Expires)) ->
  -	#{reservations := Reservations} = Attributes,
  +	Reservations = maps:get(reservations, Attributes, #{}),
   	NewReservations = Reservations#{SessionId => #{ts => Now, debit => R,
   			reserve => 0, service_id => ServiceId, charging_key => ChargingKey}},
   	NewAcc = [B#bucket{remain_amount = 0,
  
positive.code: charge_session(Type, Charge, Now, ServiceId, ChargingKey, SessionId,
  		[#bucket{units = Type, remain_amount = Remain,
  		attributes = Attributes} = B | T], Charged, Acc) when Charge > 0 ->
  	#{reservations := Reservations} = Attributes,
  	case maps:take(SessionId, Reservations) of
  		{#{debit := DebitedAmount, reserve := ReservedAmount,
  				service_id := ServiceId, charging_key := ChargingKey},
  
negative.code: 		attributes = Attributes} = B | T], Acc, Charged)
  		when Charge > 0, R >= Charge,
  		((Expires == undefined) or (Now < Expires)) ->
  	Reservations = maps:get(reservations, Attributes, #{}),
  	NewReservations = Reservations#{SessionId => #{ts => Now, debit => Charge,
  			reserve => 0, service_id => ServiceId, charging_key => ChargingKey}},
  	NewBuckets = [B#bucket{remain_amount = R - Charge,
  