surface shiny
param	float	Ka		1
param	float	Kd		0.5
param	float	Ks		1
param	float	Kr		0.5
param	float	roughness		0.05
param	float	blur		0
param	color	specularcolor		1 1 1
param	float	samples		1
local	normal	Nf	0 0 0
local	vector	IN	0 0 0
local	vector	uoffset	0 0 0
local	vector	voffset	0 0 0
local	color	ev	0 0 0
local	vector	R	0 0 0
local	vector	Rdir	0 0 0
local	float	i	0
local	float	j	0
initcode 7
	return
code
	return_area
	pushv	I 
	pushv	N 
	normalize
	faceforward
	popv	Nf 
	pushv	I 
	normalize
	popv	IN 
	pushif	0 
	cset	ev 
	pushif	0.001 
	pushf	Kr 
	gt
	ifz	0
	pushv	Nf 
	pushv	IN 
	reflect
	normalize
	popv	Rdir 
	pushif	0 
	pushf	blur 
	gt
	ifz	2
	pushv	Rdir 
	xcomp
	pushv	Rdir 
	ycomp
	subff
	pushv	Rdir 
	zcomp
	pushv	Rdir 
	xcomp
	subff
	pushv	Rdir 
	ycomp
	pushv	Rdir 
	zcomp
	subff
	normalize
	mulFv	blur 
	popv	uoffset 
	pushv	uoffset 
	pushv	Rdir 
	cross
	popv	voffset 
	pushif	0 
	popf	i 
label 4
	pushf	samples 
	pushf	i 
	lt
	ifz	6
	pushif	0 
	popf	j 
label 7
	pushf	samples 
	pushf	j 
	lt
	ifz	9
	pushv	voffset 
	pushif	0.5 
	pushf	samples 
	random
	addF	j 
	divff
	subff
	mulfv
	pushv	uoffset 
	pushif	0.5 
	pushf	samples 
	random
	addF	i 
	divff
	subff
	mulfv
	addV	Rdir 
	addvv
	popv	R 
	pushv	R 
	normalize
	pushv	P 
	trace
	addC	ev 
	popc	ev 
label 8
	pushif	1 
	addF	j 
	popf	j 
	jump	7
label 9
label 5
	pushif	1 
	addF	i 
	popf	i 
	jump	4
label 6
	pushf	samples 
	mulF	samples 
	divF	Kr 
	pushc	ev 
	mulcf
	popc	ev 
	jump	3
label 2
	pushv	Rdir 
	pushv	P 
	trace
	mulFv	Kr 
	popc	ev 
label 3
label 0
label 1
	cpCC	Os Oi 
	pushf	roughness 
	pushv	IN 
	negv
	pushv	Nf 
	specular
	mulFv	Ks 
	addC	ev 
	mulC	specularcolor 
	pushv	Nf 
	diffuse
	mulFv	Kd 
	ambient
	mulFv	Ka 
	addcc
	mulC	Cs 
	addcc
	mulC	Os 
	popc	Ci 
	return