anchor.diff:  		_:_ ->
   			throw(invalid_bundle_product)
   	end;
  -authorize2(radius = Protocol, ServiceType, Subscriber,
  -		#product{specification = ProdSpec, price = Prices,
  +authorize2(radius = Protocol, ServiceType, #subscriber{attributes = Attributes} =
  +		Subscriber, #product{specification = ProdSpec, price = Prices,
   		char_value_use = CharValueUse}, Destination, SessionAttributes,
  -		Reserve) when (Reserve > 0) and ((ProdSpec == 9) orelse (ProdSpec == 5)) ->
  +		Reserve) when (Reserve > 0) and ((ProdSpec == "9") orelse (ProdSpec == "5")
  +		orelse (ProdSpec == "4") orelse ((ProdSpec == "8"))) ->
   	case lists:keyfind("destPrefixPriceTable", #char_value_use.name, CharValueUse) of
   		#char_value_use{values = [#char_value{value = PriceTable}]} ->
   			authorize3(Protocol, ServiceType, list_to_existing_atom(PriceTable),
  
positive.code: 					authorize4(Protocol, ServiceType, list_to_existing_atom(TariffTable),
  							Subscriber, Destination, Prices, SessionAttributes, Reserve);
  				false ->
  					case lists:keyfind(usage, #price.type, Prices) of
  						#price{} = Price ->
  							authorize5(Protocol, ServiceType, Subscriber,
  									Price, SessionAttributes, Reserve);
  						false ->
  							throw(price_not_found)
  					end
  			end
  	end.
  
negative.code: 					authorize6(Subscriber#subscriber{buckets = Buckets3},
  							ServiceType, SessionAttributes, NewAttr);
  				{PriceReserved, Buckets3} ->
  					SessionTimeout = UnitsReserved + ((PriceReserved div UnitPrice) * UnitSize),
  					NewAttr = radius_attributes:store(?SessionTimeout, SessionTimeout, Attr),
  					authorize6(Subscriber#subscriber{buckets = Buckets3},
  							ServiceType, SessionAttributes, NewAttr)
  