A round dial with an offcenter depression for turning/tuning. Either press B1 on the depression, move it in circles. Or press B1 anywhere on the dial and "flip" it left or right by leaving the dial and then releasing B1. The dial will keep turning and lose momentum over time. Moving the mouse pointer towards the dial center will increase dampening. On either upper or lower limit the dial will rebound.
With the tcl Shape extension installed this dial can be used as a free floating shaped widget.
# file dial.tcl source dial_utils.tcl source elabel.tcl source dial_bindings.conf interp alias {} run {} if 1 package require BLT namespace import ::blt::* proc setmm {var val min max} { if { $val < $min } { uplevel set $var $min return -1 } elseif { $val > $max } { uplevel set $var $max return +1 } uplevel set $var $val return 0 } proc setmmf {var val min max} { if { $val < $min } { set val $min ] } elseif { $var > $max } { set val $max ] } return [ uplevel fixval $var $val ] } proc turndial {tok val} { if {$tok == $::dial(flag)} { if {[ setmm ::phi [ format %4.2f [ expr $::phi + $val ] ] $::min $::max ]} { puts end?$val if {abs($val) > $::rebound } { set val [ expr $val * -0.5 ] puts rebound:$val } else { set ::dial(flag) -2 puts stop@end return } } if { abs($val) < 0.005 } { set ::dial(flag) -2 puts stop return } set val [ expr $val * $::decay ] after 100 turndial [ incr ::dial(flag) ] $val update idletasks } else { puts OFF } } proc xy2pol {x y} { set hyp [ expr { sqrt(pow($x,2) + pow($y,2))}] if { $y > 0 } { set phi [ expr { +acos($x/$hyp) }] } else { set phi [ expr { -acos($x/$hyp) }] } return [ list $phi $hyp ] } proc pol2xy {phi hyp} { set x [ expr cos($phi) + $hyp ] set y [ expr sin($phi) + $hyp ] return [ list $x $y] } canvas .c -width 120 -height 120 -takefocus 1 ;# -relief groove -bd 2 pack .c set ::color [ .c cget -bg ] set ::clighter [ brightness $color 1.5 ] set ::cdarker [ brightness $color 0.5 ] puts "$color $clighter $cdarker" # .c create line 60 60 60 60 -width 180 -capstyle round -fill black -tag knob .c create line 57 57 57 57 -width 101 -capstyle round -fill $clighter .c create line 63 63 63 63 -width 101 -capstyle round -fill $cdarker # .c create line 60 60 60 60 -width 100 -capstyle round -fill black .c create line 60 60 60 60 -width 100 -capstyle round -fill $color -tag dial # .c create line 60 60 60 60 -width 80 -capstyle round -fill $color .c bind dial <Enter> { puts decay:on set ::decay 0.90 } .c bind dial <Leave> { puts decay:off set ::decay 1.00 } .c bind dial <ButtonPress-1> { set ::dial(flag) 0 set ::dial(x1) [ expr %x - 60 ] set ::dial(y1) [ expr %y - 60 ] } bind .c <3> { set ::dial(flag) 0 } .c bind dial <ButtonRelease-1> { set ::dial(flag) 0 set ::dial(x2) [ expr %x - 60 ] set ::dial(y2) [ expr %y - 60 ] set phi1 [ lindex [ xy2pol $::dial(x1) $::dial(y1) ] 0 ] set phi2 [ lindex [ xy2pol $::dial(x2) $::dial(y2) ] 0 ] set incr [ expr {($phi2 - $phi1)}] while {$incr > (sin(1) * 2) } { set incr [ expr {$incr -(sin(1) * 4)}] } while {$incr < -(sin(1) * 2) } { set incr [ expr {$incr +(sin(1) * 4)}] } set incr [ expr $incr / 4 ] puts delta:$incr if { abs($incr) > 0.02 } { turndial [ incr ::dial(flag) ] $incr } } set ::min -0.0 set ::max +20e6 set ::decay 0.98 set ::rebound 0.25 set phi 0.0 set X [ expr 60 + ( 35 * sin($phi) ) ] set Y [ expr 60 + ( 35 * cos($phi) ) ] set x [ expr $X -2 ] set y [ expr $Y -2 ] .c create line $x $y $x $y \ -width 20 -capstyle round -fill $::cdarker -tag {pos pos_dark} set x [ expr $X +2 ] set y [ expr $Y +2 ] .c create line $x $y $x $y \ -width 20 -capstyle round -fill $::clighter -tag {pos pos_light} set x [ expr $X -0 ] set y [ expr $Y -0 ] .c create line $x $y $x $y \ -width 19 -capstyle round -fill $::color -tag {pos pos_bottom} .c bind pos <1> { puts "B1 %x %y" ; set ::dial(flag) -2 } .c bind pos <B1-Motion> {dialmotion %W %x %y} elabel .c.el -validate %f -textvariable ::phi -width 5 -align center -fg [ brightness $color 0.3 ] .c create window 60 60 -window .c.el -anchor center bind .c.el.l <Key-Right> { set ::phi [ expr $::phi + 0.1 ] } bind .c.el.l <Key-Left> { set ::phi [ expr $::phi - 0.1 ] } bind .c.el.l <Key-Up> { set ::phi [ expr $::phi + 0.5 ] } bind .c.el.l <Key-Down> { set ::phi [ expr $::phi - 0.5 ] } proc dialmotion {W x y} { set pi [ expr {asin(1) * 2 }] puts $pi set rx [ expr { $x - 60}] set ry [ expr { $y - 60}] set hyp [ expr { sqrt(pow($rx,2) + pow($ry,2))}] set cnt [ expr {round( $::phi / (2 * $pi ))}] set remain [ expr {$::phi - ($cnt * 2 * $pi)}] set phi 0 if { $ry > 0 } { set phi [ expr { +acos($rx/$hyp) }] puts pos } else { set phi [ expr { -acos($rx/$hyp) }] puts neg } if { ($remain * $phi ) < -(($pi*$pi)/4) } { puts crossover puts diff:[ format "% 6.4f % 6.4f" $remain $phi ] if { $phi < 0.0 } { puts forw incr cnt } elseif { $phi > 0.0 } { puts rev incr cnt -1 } } set ::phi [ format %4.2f [ expr ( $cnt * (2 * $pi ) ) + $phi ] ] } proc turn {_a e op } { if {"$e" == "" } { upvar $_a a set phi $a } else { upvar $_a a set phi $a($e) } set X [ expr 60 + ( 35 * cos($phi) ) ] set Y [ expr 60 + ( 35 * sin($phi) ) ] set x [ expr $X -2 ] set y [ expr $Y -2 ] .c coords pos_dark $x $y $x $y set x [ expr $X +2 ] set y [ expr $Y +2 ] .c coords pos_light $x $y $x $y set x [ expr $X -0 ] set y [ expr $Y -0 ] .c coords pos_bottom $x $y $x $y } set phi 0.0 turn phi "" w # trace variable ::phi w+ turn trace variable ::phi w turn toplevel .s scale .s.c -from 0.0 -to 20e5 -orient horizontal -resolution 0.01 -variable ::phi pack .s.c -expand 1 -fill x
# file: dial_utils.tcl proc brightness {color relbright} { set len [ string length $color ] set w [ expr ( $len - 1 ) / 3 ] scan $color "#%${w}x%${w}x%${w}x" r g b set min 0 set max [ expr ( 1<<($w * 4 ) ) -1 ] puts max:$max set cmax $r puts foreach foreach col "$g $b" { set cmax [ expr $cmax > $col ? $cmax : $col ] } puts foreachdone set cmax [expr {$cmax * 1.0}] set maxbright [expr {$max / $cmax}] puts maxbright:$maxbright set relbright [ expr {$relbright <= $maxbright ? $relbright : $maxbright }] foreach col "r g b" { set $col [ expr round($relbright * \$$col) ] puts col:$col } return [ format "#%${w}x%${w}x%${w}x" $r $g $b ] }
# file: dial_bindings.conf # what: abstract bindings # or provide a proc lvarpop: package require Tclx proc aevent args { set aevent [ lvarpop args ] lappend ::aevent(aevents) $aevent set ::aevent(aevents) [ lsort -unique $::aevent(aevents) ] foreach arg $args { event add $aevent $arg lappend ::aevent($aevent) $arg } } aevent <<Edit>> <Shift-Button-1> <Key-F3> aevent <<Reset>> <Shift-Key-Escape> aevent <<Abort>> <Key-Escape> <Button-3> aevent <<Submit>> <Return>
# file: elabel.tcl # an editable label with some twists package require BLT namespace eval ::editablelabel { variable defaults { fargs {} largs {-takefocus 1 -bd 2} eargs {-takefocus 0 -bg white -relief sunken -bd 2} validate valfloat chainargs {} } variable enum {} proc elabel {w args} { variable defaults foreach {arg val} $defaults { # puts "set $arg $val" set $arg $val } # puts "elabel:$w $args" foreach {arg val} $args { switch -- [ string trimleft $arg - ] \ validate { switch -glob -- $val\ *%* { set validate [ list valfmt $val] # puts validate:$validate } bool { set validate {valbool} } default { set validate $val } } -bd - -relief { lappend fargs $arg $val } align - justify - anchor { switch -- $val \ e - right { lappend largs -anchor e lappend eargs -justify right } w - left { lappend largs -anchor w lappend eargs -justify left } } textvariable { lappend largs $arg $val } default { lappend chainargs $arg $val } } # puts chainargs:$chainargs set largs [ concat $largs $chainargs ] set eargs [ concat $eargs $chainargs ] set targs {-fill both} set l $w.l set e $w.e # puts $fargs # puts $largs # puts $eargs run [ concat frame $w $fargs ] run [ concat entry $e $eargs ] run [ concat table $w $e 0,0 $targs ] run [ concat label $l $largs ] run [ concat table $w $l 0,0 $targs ] $e configure -font [ $l cget -font ] bind $l <FocusIn> [ list %W configure -state active] bind $l <FocusOut> [ list %W configure -state normal] bind $l <<Edit>> [ list ::editablelabel::edit %W ] set validate [ string map {% %%} $validate ] bind $e <<Submit>> [ concat ::editablelabel::submit %W $validate ] bind $e <<Reset>> [ list ::editablelabel::reset %W ] bind $e <<Abort>> [ list ::editablelabel::abort %W ] lappend enum $w return $w } proc edit win { set ewin [ string replace $win end end e] set lwin [ string replace $win end end l] set cont [ set [ $lwin cget -textvariable ] ] $lwin configure -state disabled -takefocus 0 set [ $ewin cget -textvariable ] $cont $ewin configure -state normal -takefocus 1 $ewin delete 0 100 $ewin insert 0 $cont raise $ewin focus $ewin } proc submit {win args} { set ewin [ string replace $win end end e] set lwin [ string replace $win end end l] lappend args [$ewin get] if {[catch $args nice ]} { $ewin insert end $nice # puts $win.submiterr:$args,$nice after 1000 [namespace current]::edit $win } else { set var [ $lwin cget -textvariable ] catch {set $var $nice} cerr unedit $win } } proc reset win { edit $win } proc abort win { unedit $win } proc unedit win { set ewin [ string replace $win end end e] set lwin [ string replace $win end end l] $ewin configure -state disabled -takefocus 0 $lwin configure -state normal -takefocus 1 raise $lwin focus $lwin } proc valfloat arg { set fmt %f if {[scan $arg $fmt num] != 1} { return -code error " != $fmt" } return [ format %4.2f $num ] } proc valfloat arg { set fmt %4.2f return [ valfmt $fmt $arg ] } proc valfmt {fmt args} { set arg [ lindex $args 0 ] set scan [ string index $fmt 0][string index $fmt end] if {[scan $arg $scan val] != 1} { return -code error " != $fmt" } return [ format $fmt $val ] } } # puts alias:[ interp alias {} elabel {} ::editablelabel::elabel # ] return set ::test hallo set ::blub 1234 elabel .test -textvariable ::test -align e elabel .blub -textvariable ::blub -validate %d -align e pack .test .blub label .la -textvariable ::test label .lb -textvariable ::blub pack .la .lb bind . <Key-A> { puts [focus] }
file: dial_shape.tcl #!/bin/sh # This little demo (in the splendid tradition of xteddy and xbomb :^) # is due to John LoVerso <[email protected]> and I have adapted it # a little in order to increase its effectiveness. # Now we make cunning use of the backslash/shell trick \ [ -x `dirname $0`/../shapewish ] && exec `dirname $0`/../shapewish $0 ${1+"$@"} || exec wish $0 ${1+"$@"} || { echo "`basename $0`: couldn't start wish" >&2 ; exit 1; } package require Shape . config -bg tan -width 120 -height 120 # wm overrideredirect . 1 wm title . "noframe" wm withdraw . update idle shape set . -bound bitmap @[file join . dial.xbm] wm deiconify . bind . <2> { regexp {\+(-?[0-9]+)\+(-?[0-9]+)} [winfo geometry .] dummy x y set x [expr $x-%X] set y [expr $y-%Y] } bind . <B2-Motion> { wm geometry . +[expr %X+$x]+[expr %Y+$y] } source dial.tcl
#file: dial.xbm #define dial_width 120 #define dial_height 120 static char dial_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00, 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00, 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00, 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00, 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00, 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00, 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00, 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01, 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00, 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00, 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00, 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00, 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00, 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00, 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00, 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00, 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00, 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00, 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };