# Dice.itcl 
# 
#       Creates a dice in a whiteboard canvas. 
# 
# 
# $Id: Dice.itcl,v 1.8 2006-04-13 10:45:05 matben Exp $

namespace eval Dice {
    
    variable infoScript [info script]
}

# This file may be sourced more than once; protect for this!
# Is there a better way? Ugly!

if {[itcl::find classes Dice] == ""} {
    
    class Dice {
	
	inherit BaseWBCanvas
	    
	# -----------------------
	# Private static methods.
	# -----------------------

	private {
	    proc Init {}
	    proc MakeImages {}
	    proc InitRand {}
	    proc UnifRand {x}
	    proc Handler {w type cmd args}
	    proc GetThisFromDiceUtag {utag}
	}

	# ------------------
	# Class constructor.
	# ------------------
	
	protected {
	    constructor {w x y args} {$this BaseWBCanvas::constructor $w} {}
	    destructor {}
	}
	
	# --------------
	# Class methods.
	# --------------

	public {
	    method Save {id args}
	    method Delete {id}
	}
	
	# ----------------------
	# Private class methods.
	# ----------------------
	
	protected {
	    method Draw {x y args}
	    method Turn {}
	    method AnimateAndSet {n}
	    method StopAnimation {n}
	    method SetOwnSide {n}
	    method GetValue {name}
	    method MoveInit {x y} {}
	    method MoveMotion {x y} {}
	    method MoveRelease {x y} {}
	    method DeleteCmd {}
	}
    
	# ----------------------------
	# Private static data members.
	# ----------------------------

	private {
	    common cardstackMenu
	    common inited 0
	    common icons
	    common animatemillis 200
	    common animatelength 3000
	    common animatesequence {3 1 5 4 6 2}
	    common animateicons
	}
	
	# ---------------------------
	# Private class data members.
	# ---------------------------
	
	protected {
	    variable iddice
	    variable utagdice
	    variable animateuid
	    variable animatestopuid
	}    
    }

    body Dice::constructor {w x y args} {	
	if {!$inited} {
	    Init
	}
	eval {Draw $x $y} $args
	
	set b1          {%W bind dice <Button-1>}
	set b1Motion    {%W bind dice <B1-Motion>}
	set b1Release   {%W bind dice <ButtonRelease-1>}

	set b1DoubleInst  [list %W bind $iddice <Double-1>]
	
	set classBindList [list \
	  move    [list $b1        [code $this MoveInit %x %y]] \
	  move    [list $b1Motion  [code $this MoveMotion %x %y]] \
	  move    [list $b1Release [code $this MoveRelease %x %y]] \
	  del     [list $b1        [code $this DeleteCmd]] \
	  ]
	set instBindList [list \
	  point   [list $b1DoubleInst   [code $this Turn]] \
	  ]
	
	RegisterCanvasClassBinds Dice $classBindList
	RegisterCanvasInstBinds  Dice:$this $instBindList
	
	bind $tkCanvas <Destroy> +[list delete object $this]
    }
    
    body Dice::destructor {} {	
	if {[info exists animateuid]} {
	    ::Utils::AnimateStop $animateuid
	}
	if {[info exists animatestopuid]} {
	    after cancel $animatestopuid
	}
    }
    
    body Dice::Init {} {
	MakeImages
	InitRand
	set animateicons {}
	foreach i $animatesequence {
	    lappend animateicons $icons(marble-${i})
	}
	::WB::RegisterHandler DICE [code Handler]
	set inited 1
    }
    
    body Dice::Draw {x y args} {
	
	array set argsArr {
	    -number   1
	}
	array set argsArr $args
	if {[info exists argsArr(-tags)]} {
	    set utag $argsArr(-tags)
	} else {
	    set utag [NewUtag]
	}
	set utagdice $utag
	set n $argsArr(-number)
	set im $icons(marble-${n})
	set iddice [$tkCanvas create image $x $y -image $im -anchor nw  \
	  -tags [list image dice n:${n} object:${this} $utag]]
    }
    
    body Dice::Turn {} {
	
	# Do not invoke while still running.
	if {[info exists animateuid]} {
	    return
	}
	set n [expr {[UnifRand 6] + 1}]
	AnimateAndSet  $n
	GenCommand "DICE: turn $utagdice $n" remote
    }
    
    body Dice::AnimateAndSet {n} {
	
	set animateuid [::Utils::AnimateStart $animatemillis $animateicons \
	  [list $tkCanvas itemconfigure $iddice -image %v]]
	set animatestopuid [after $animatelength [code $this StopAnimation $n]]
    }
    
    body Dice::StopAnimation {n} {
	
	::Utils::AnimateStop $animateuid
	unset -nocomplain animateuid animatestopuid
	SetOwnSide $n
    }
    
    body Dice::SetOwnSide {n} {
    
	# First remove old number tag before adding new one.
	set tags [$tkCanvas gettags $iddice]
	regexp {n:([1-6])} $tags match number
	$tkCanvas dtag $iddice n:${number}
	$tkCanvas itemconfigure $iddice -image $icons(marble-${n})
	$tkCanvas addtag n:${n} withtag $iddice
    }
    
    body Dice::Handler {w type cmd args} {
		
	switch -- [lindex $cmd 1] {
	    turn {

		# The remote cardstack has picked this card. Remove from stack!
		set utag [lindex $cmd 2]
		set num  [lindex $cmd 3]
		
		# Need to backtrace from utag to actual object.
		set obj [GetThisFromDiceUtag $utag]
		if {$obj != ""} {
		    $obj AnimateAndSet $num
		}
	    }
	}
    }
    
    # GetThisFromDiceUtag --
    # 
    #   Static method to map from a stacks utag to the actual object.
    #   Needed since utags are the only globally uniqe identifier here.

    body Dice::GetThisFromDiceUtag {utag} {
	
	set ansObj ""
	foreach obj [itcl::find objects -class Dice] {
	    set tmputag [$obj GetValue utagdice]
	    if {[string equal $utag $tmputag]} {
		set ansObj $obj
		break
	    }
	}
	return $ansObj
    }

    body Dice::GetValue {name} {
	return [set $name]
    }

    body Dice::MoveInit {x y} {  
	InitMoveCurrent $x $y
    }
    
    body Dice::MoveMotion {x y} {
	DragMoveCurrent $x $y
    }
    
    body Dice::MoveRelease {x y} {
	FinalMoveCurrent $x $y
    }
    
    body Dice::DeleteCmd {} {
	
	if {[info exists animateuid]} {
	    ::Utils::AnimateStop $animateuid
	}
	
	# This actually calls back to our Delete method.
	DeleteCurrent
    }
    
    # Dice::Save --
    #
    #       Returns a oneline import command. Used from app.
    #       
    # Arguments:
    #       id          item id or tag
    #       args:
    #           -basepath absolutePath    translate image -file to a relative path.
    #           -uritype ( file | http )
    #           -keeputag 0|1
    #       
    # Results:
    #       a single command line.

    body Dice::Save {id args} {
	
	# Seemed to be the only way :-(
	upvar [namespace current]::infoScript infoScript

	set tags [$tkCanvas gettags $id]
	if {[lsearch $tags dice] < 0} {
	    return
	}
	array set argsArr {
	    -uritype file
	}
	array set argsArr $args
	set uriopts [eval {
	    ::CanvasUtils::GetImportOptsURI $argsArr(-uritype) $infoScript
	} $args]

	set impcmd [concat "import" [$tkCanvas coords $id] $uriopts]
	set im [$tkCanvas itemcget $id -image]
	lappend impcmd -mime application/x-itcl
	lappend impcmd -width [image width $im] -height [image height $im]
	regexp {n:([1-6])} $tags match number
	lappend impcmd -number $number
	
	return $impcmd
    }
    
    body Dice::Delete {id} {
	set utag [GetUtag $id]
	return [list [list delete $utag] {}]
    }

    body Dice::InitRand {} {    
	# empty
    }

    body Dice::UnifRand {x} {    
	return [expr {int($x*rand())}]
    }
    
    body Dice::MakeImages {} {
	
	set icons(marble-1) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttPT0/v7+/j4+PLy8uPj49fX197e3vz8/PPz
	883Nzc/Pz8LCwsDAwO/v7/b29unp6dHR0bS0tKampre3t/39/f7+/ufn5/n5
	+e7u7u3t7fHx8ZCQkIyMjPT09PDw8Ojo6OXl5d/f3+zs7Obm5urq6uvr6+Hh
	4dnZ2dTU1NjY2NLS0tbW1rKysnt7e3R0dHh4eK+vr+Tk5OLi4uDg4Nra2tvb
	28rKyru7u4iIiHNzc01NTYGBgdzc3N3d3dDQ0M7OzsnJybi4uIqKin19fTEx
	MVxcXImJiYODgyYmJklJSbGxsZKSkqGhocXFxcfHx4aGhj8/P7m5ucHBwba2
	tr+/v62trZGRkSQkJDw8PNXV1by8vLq6usvLy5eXlx8fHzg4OMPDw7CwsJiY
	mKSkpBsbG66uroKCgh0dHampqaioqDQ0NKysrI+Pj5qamouLi6CgoHp6ehkZ
	GS8vL76+vpmZmXl5eXx8fBgYGCsrK5ycnG5ubmxsbDIyMn9/fzs7OyoqKjY2
	NllZWaurq8jIyDk5OX5+fjU1NSEhIUtLS3d3d8bGxjo6Op+fnz09PTc3N11d
	XbW1tcTExJWVlR4eHjAwMFNTU2JiYoWFhZ2dnWdnZ2tra/f39/X19UBAQJub
	m19fX5aWlqqqqhwcHPr6+jMzM6OjoxoaGqenp8zMzKWlpaKiop6enhUVFSws
	LI6OjoeHhxQUFCgoKHZ2dhISEiUlJYSEhBAQECkpKbOzs29vb0xMTAwMDFJS
	UiAgIAkJCb29vZSUlJOTk1BQUHV1dXFxcYCAgG1tbWZmZkdHRxEREVZWVmlp
	aWpqamVlZWFhYVdXV1VVVVtbW15eXmBgYGNjYy4uLg8PDycnJyMjIyIiIi0t
	LRMTE09PT0VFRUhISFFRUVpaWk5OTkZGRkJCQgAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCBgAICD
	CBMqXMgQwAACBQwcGEgRQcOLGBEmUIBgAYMGDigGeJCxZMMBCSBEkDCBQoWB
	GC2YPHgBAAEAGCAUyKBhA4cIFTp4mBAAQsIBHx6ACCEiwggSJCJoKIEhAgYT
	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
	KBIQADs=
	}]
	 
	set icons(marble-2) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vLy8vDw8PT09Ozs
	7Ovr6+jo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrO7u7unp6efn5+bm5uTk
	5Nra2srKytfX19jY2NHR0dTU1Li4uIiIiKKiovn5+eXl5dzc3N3d3d7e3uHh
	4dPT09bW1oeHh15eXpmZmcvLy8/Pz5ubmy4uLldXV9DQ0M7OzsnJyQwMDCYm
	JsLCwsjIyA0NDczMzKCgoIODg3p6eoaGhrGxsZOTk6GhocHBwcXFxcfHxwQE
	BD09PS0tLTc3N0RERGRkZI+Pj7q6ure3t7a2trKysrm5ub+/vwMDA/f39zQ0
	NCAgIDY2Nl9fX3R0dI6OjpaWliMjI01NTW1tbaamprCwsJiYmKSkpAICAjs7
	O0lJSVlZWY2Nja6urr29vXh4eDU1NWNjY2tra/r6+qmpqZeXl6ioqIGBgZ+f
	n5qamouLi6+vr2dnZ5KSkr6+vqenp56ens3NzYSEhH9/fzAwMDk5OUVFRWho
	aMTExHl5eTo6OomJiSQkJFtbW3Z2dpCQkHx8fGpqapWVlXd3d2lpaXJyckJC
	Qru7u8DAwIKCgqurq2JiYgoKCq2trSEhIaqqqn19fTExMVJSUoCAgJSUlC8v
	L29vbxEREWVlZRAQEAUFBQEBAVRUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DCo0ZGCBwIUFBgpgqMCzQAYNFjJs0KCBQwcPH0CEEDFioEKIFgwAtUCBRIYS
	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
	}]
	 
	set icons(marble-3) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vLy8vDw8PT09Ozs
	7Ovr6+jo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrObm5u7u7ufn5+np6eTk
	5Nra2srKytfX19jY2NHR0dTU1Li4uIiIiKKiovn5+d3d3eHh4dPT09bW1t7e
	3oeHh15eXpmZmcvLy8/Pz5ubmy4uLldXV+Xl5YODg3p6eoaGhszMzNDQ0M7O
	zsnJyQwMDCYmJtzc3D09PS0tLTc3N0VFRWhoaJWVlcLCwsjIyA0NDTY2NiMj
	Izk5OV9fX3R0dImJiZqamq6ursfHx7CwsJKSkqGhocXFxQQEBD8/PyUlJTo6
	OlZWVm5uboyMjKurq7Kysre3t7GxscHBwba2trm5ub+/vwMDA/f39y8vL1RU
	VIuLi7q6un5+fmVlZX9/f83Nzfr6+piYmKSkpAICAkJCQnd3d319fYSEhL29
	vWRkZKmpqZeXl6ioqI+Pj6+vr76+vqCgoKenp8TExI2NjW1tbWBgYHFxcbOz
	s3Z2diwsLDs7O11dXYqKijIyMh8fH1hYWICAgI6OjqqqqlFRUW9vb3x8fFJS
	UmNjY3JycjU1NWtra7u7u3l5eXNzc1lZWYWFhZ2dncDAwHt7ezExMURERGdn
	Z2JiYpSUlJCQkK2trXV1dTMzM5aWloKCgqampgoKCiEhISAgIDAwMJOTkxER
	ETQ0NBAQEAUFBQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DCo0ZGCBwIUFBgpgqMCzQAYNFjJs0KCBQwcPH0CEEDFioEKIFw6QMHChRIYD
	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
	}]
	 
	set icons(marble-4) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vLy8vDw8PT09Ozs
	7Ovr6+jo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrObm5u7u7ufn5+np6eTk
	5Nra2srKytfX19jY2NHR0dTU1Li4uIiIiKKiovn5+d3d3dPT09bW1t7e3oeH
	h15eXpmZmcvLy8/Pz5ubmy4uLldXV+Xl5YODg3p6eoaGhszMzNDQ0M7OzsnJ
	ycTExJ2dnYCAgHV1dX5+fqampgwMDCYmJuHh4dzc3D09PS0tLTc3N0VFRWho
	aJWVlcLCwsjIyDk5OTU1NUBAQGNjYw0NDTY2NiMjI19fX3R0dImJiZqamq6u
	rsfHx7CwsJKSkqGhocXFxbq6unFxcTExMSEhITQ0NFtbW3BwcIGBgY6Ojqqq
	qgQEBD8/PyUlJTo6OlZWVm5uboyMjKurq7Kysre3t7GxscHBwba2trm5uTMz
	M01NTWZmZp+fnwMDA/f39y8vL1RUVIuLiygoKDIyMkdHR5SUlGVlZX9/f83N
	zfr6+r+/v29vb1paWgICAkJCQnd3d319fYSEhK2trb29vWRkZKmpqV1dXYqK
	ipiYmIWFhaWlpa+vr76+vrOzs6enp6CgoHl5eXt7e0RERGdnZyQkJGJiYnNz
	czw8PHh4eJ6enqioqKSkpDs7O5CQkFhYWGtra1JSUru7u8DAwJaWloKCggoK
	CiAgIJeXlzAwMJOTkxERERAQEAUFBQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DCo0ZGCBwIUFBgpgqMCzQAYNFjJs0KCBQwcPH0CEEDFioEKIFw6QMHChRIYD
	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
	YQhftCERFgkIADs=
	}]
	 
	set icons(marble-5) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vLy8vDw8PT09Ozs
	7Ovr6+jo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrObm5u7u7ufn5+np6eTk
	5Nra2srKytfX19jY2NHR0dTU1Li4uIiIiKKiovn5+d3d3dPT09bW1t7e3oeH
	h15eXpmZmcvLy8/Pz5ubmy4uLldXV+Xl5YODg3p6eoaGhszMzNDQ0M7OzsnJ
	ycTExJ2dnYCAgHV1dX5+fqampgwMDCYmJuHh4dzc3D09PS0tLTc3N0VFRWho
	aJWVlcLCwsjIyDk5OTU1NUBAQGNjYw0NDTY2NiMjI19fX3R0dImJiZqamq6u
	rsfHx7CwsJKSkqGhocXFxbq6unFxcTExMSEhITQ0NFtbW3BwcIGBgY6Ojqqq
	qgQEBD8/PyUlJTo6OlZWVm5uboyMjKurq7Kysre3t7GxscHBwba2trm5uTMz
	M01NTWZmZp+fnwMDA/f39y8vL1RUVIuLiygoKDIyMkdHR5SUlGVlZX9/f83N
	zfr6+r+/v29vb1paWgICAkJCQnd3d319fYSEhK2trb29vWRkZKmpqV1dXYqK
	ipiYmIWFhaWlpa+vr76+vrOzs6enp42NjW1tbWBgYHZ2diwsLDs7Ox8fH1hY
	WFFRUXx8fFJSUo+Pj6ioqHJycmtra7u7u3l5eXNzc1lZWaCgoMDAwHt7e0RE
	RGdnZyQkJGJiYjw8PHh4eJ6enqSkpJCQkJaWloKCggoKCiAgIJeXlzAwMJOT
	kxERERAQEAUFBQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DCo0ZGCBwIUFBgpgqMCzQAYNFjJs0KCBQwcPH0CEEDFioEKIFw6QMHChRIYD
	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
	}]
	 
	set icons(marble-6) [image create photo -data {
	R0lGODlhLAAsAPcAMf////IQttvb2/z8/Pv7+/Pz8+/v7+rq6tLS0uLi4v39
	/fj4+P7+/vX19e3t7dnZ2cbGxsPDw7W1tbS0tPHx8fb29vT09Pn5+e7u7uzs
	7Ovr6/Ly8ujo6N/f3+Pj4+Dg4NXV1by8vKOjo5ycnKysrPDw8Obm5uTk5Nra
	2srKytfX19jY2NHR0dTU1Li4uIiIiKKioufn59zc3NbW1tPT08/Pz97e3oeH
	h15eXpmZmenp6eXl5d3d3cvLy5ubmy4uLldXV6ampoCAgHh4eH5+fqSkpM7O
	zsTExHR0dKenp8zMzNDQ0MnJyZ6enoKCgnp6eoaGhqqqqgwMDCYmJj8/Py8v
	Lzc3N0JCQmRkZI+Pjzk5OSoqKjMzMz09PV1dXYqKira2ts3Nza6urnZ2djs7
	Oy0tLWdnZ5SUlMLCwg0NDTY2NiQkJF9fX3d3d7GxscjIyDExMRwcHEZGRnx8
	fIODg52dncfHx729vTAwMCEhIVxcXHBwcIGBgZKSkgQEBCUlJTw8PLCwsB4e
	HkdHR2FhYX19fZWVlbOzs76+vsDAwJaWliAgIE9PT21tbaGhobm5uQMDA0BA
	QFhYWGtra5CQkL+/vygoKDU1NUxMTCcnJ8XFxXJyco6OjuHh4fr6+mNjY0hI
	SFRUVG5ubqWlpQICApqamkNDQ2pqaq2trff398HBwbe3t4uLi1VVVX9/f5iY
	mIWFhXl5ea+vr7Kysp+fn6CgoKioqHt7e3V1dYSEhCwsLCsrKzQ0NI2NjWho
	aCMjI4mJiaurqxoaGjIyMnNzcz4+PltbW0tLS7q6ujg4OFlZWYyMjGJiYlFR
	UWxsbElJSW9vb5eXl6mpqbu7u5OTkwoKClJSUhEREWVlZRAQEAUFBQEBAQAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
	AAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAsACwAAAj/AAMIDCAAgMGD
	CBMqPDjgIIEBBQwcEIBgoMUECwEoSEjAYEeFCxiEXNDAwQMIESRMsBiAwkIC
	DD4CqADAwgUMBSxU2Fkgg4YNGTho0NDBwwcQIUSMIDFQIcQNBjQ0sFACQ9Cg
	CUx4OPHBg4eiKDqkUIFgBQsWK1q4GPECRoCEF4BqOOEhhowYCcA+mNEChQAB
	YT+gQEDjwYoaLWqAWGHjAYsJN3DkQDhAB4cdHwQkQBG2A4gOKBrPQICCx4q/
	PczWUMHChuDBKx6A8PEDCEIdLIIIGUKkiBEUH0w/QHEkBxEkRJIoQbCESY2y
	PZo4eQIlyu8ZDyRImaJxphIhVKpY/7mCJcuRrihWSECiZQuXLl6+gAlzdomY
	MWTKjDdzJgKIB2hwk8ZBFHyhxhpasNEGFGe4sYQNCbwxBhxxTCGHGXPQUUcI
	Edhxxxh45KGGHnvw0YeDLETAjR8HhSHHH4AAMUYfSQQyAQIdPJADGYLAMQgh
	hRhiSA6HIJKIIlYswgUjjXzhCAmPRPCAipAcVAQXkUgyCSViVBLBEhpk8MAc
	llyCCRtC+BDEIZU090gjmXAhBxBOwABGCkt4kIEm3FRpECVkNLIJJ2iAwIEJ
	nVTgyQqbXPLJJIW44UIlYXTAQQl2TFIGKKGIMoodKphQgCeehMANKQeVIocT
	N/jwmSccYP9gUCdOmFIIH5RAYAQNGxhkARNIkHHKKXOgAgEPBQCQiieVnHqQ
	KqdQAsMqGmyEUAIkmMHKCBIIQNRBCrxRRyttEOHKfJcp0EADEjgLAAMJNFHK
	KjQshAIIZ7wixhEmxHDAQRfYEQIssVAChQsRoIFGBQo8IIuzA1SQQApg3IGC
	QhV40EkKs9wBgQk0eZTCHarQ0kQtJChhgwBvHHBCCEk4SwAFCNhAlqwIMXCC
	pZ0YsUQHJZhwAQAE3EGCC2iQ7AIKMVDQgEE2jOyuBTyYkEACLh1UgQYHcHCA
	UUuwIIMADcyQwtl2MJHCGzUA7atYD/CJqkE72ICoDnQdoPfXCRj/5ZgqJJCg
	ytnPIcCC4Q8MN9gDnqEgt0EMfLCDCSckcMJcHHiAglecPVBDBG70UEPhD6SA
	gAoroEBDZqDlhUIY7jZQ9Q4aZGVDDJ14kHlRHSDAnOm+qyD86Zx1sFmOrSdg
	hMwWfGDDDifI0MkJnSSQ+9WqD3b4Cgg8QJrinH3lFQ+bebX83AXQgIIOCXDQ
	QVEJ6NA1Z8wZ7jsKKqQXVlgcoMABD3hZQfsSgAB3EcAvAvBAAmywFboI4AMd
	EEANztaD/KUuf51RoFf6hoIHkEArsJtbBT6QOB54wIQx0AHnBoMANNjhEacD
	gQfy9wATYi8BXEvA17zWAndtgHEJSB1d/xSYlw5wLwV2UJjp8EeaDCpQKEPJ
	nAcOAAKZESA4rtHc/uiHgiUgMQxq811ZiueVDnRFd145FAeqODcDeEAHLbDF
	C27hiiSEwQZdREAN0ECCG+BiE7GghSaYsIIVGOUDLRjFHHMxCx7YYCg0MKAH
	NCGESOBhPJ84wxEKmQI0vKIVutgFLyJBiF7cAQQJ+EACQuAKKuBBC1fwRS1U
	doAZuAsAIKCDFn5Bhk8gARhnkIARVoCGYOghE8IYhiSIYSI3gICBSnjCgRIU
	C2Bs6AExsOXcABAFU2SiGMZoAyVQESUaqEAVQihDHHZxjFPcwBGBQEYKejCD
	EVBhDclQRhuWkf8EMIRABh2owS2/MIxIKKMRipDAG2SwAq4xgRlTgIMcjAGL
	ICBjCSvQgZgKUQYyNOMTrBAcWg6QAYFu8xZkcMYYOMGETlgAIUtwxjCM8YlY
	oKIGPDDAR5ggCi6wwQyuQMUbWGCADADAE0e4JTCeAYwXBMEGWTsIC54QCWIg
	4QuI+IBMACChYkADCXRARg1iMDSDmGpuBJDAJKIhDUQ8LSEPGAUhnEAJaXjg
	rQcxgiH0mQsfMOEDCDlAIG5pg1r4IAT1UojjDJGFIvArIamYRiAKMYTGMgEF
	njgID0YAMQVoIAyV0IQNFBKDDvIRDEzQAUI8AQJVgMEWsKCGY1UQA4P/GCAR
	TljRADAgkU584AN4fRtpVGCEHnAgBgVgAAAoYJYUaCIEthgFItTWgQqgYBo+
	YAY3qlGBDighAf7ywFZL0EEVGGYGLNDBBRzAgAKAIG0sqAETXDsN55hgBi5I
	AhLywI1FREgWj7jL1ToRFh50EH+sMRwTWKCEs6SABc5hARoeEQhbiCAYgUBE
	FAoBB25wwxoBYEItojELEPDgAY0ZDllU8B/ELbhwhxNjCpKAYVugYgK2EAIe
	PAyHgUygD1BQxCxUcYQIIOLIIVBFBO5wB00gQhVO1oSRI1CJKlciEFGgxhmA
	4YRP/MLDVWCJGKBhhWt4+MxoTrOa16xmXrBEICAwwEYZsqENUkCCFHjOs573
	zGc8b2MbkKhGHkJhkYAAADs=
	}]
    }
}

# We must instantiate ourself...

eval {Dice #auto $w $x $y} $args


