#!/bin/sh
# the next line restarts using tclsh \
exec wish "$0" "$0 $@"

# TkHearts by Steven A, released under the GPL.
#
# version 0.80 has introduced a nice weighted AI feature to select myHigh,
# myLow, (this leaves quite a lot of room for tweaking!) and has looked at stopping
# the player from collecting all tricks (shooting).
#
# Todo:
# Hmmm - tried making the widget bigger, but it looks ugly as the card spots
#   become visible and break up the clean hand appearance
# Add option for alternative rules.
# See also "Ai todo".
#
# Hearts, based on the card game shipped with MS Windows
# version 0.24 copyright Mike Griffiths, Feb 17th 2005

# some common procs for spider, hearts and tktk

package require Tk

proc lreverse {list} {
  set result {}
  foreach i $list {
    set result [linsert $result 0 $i]
  }
  return $result
}

proc initSubWindow {w title transient} {

  # Initilaises a toplevel window offscreen and withdrawn
  # (to allow the user to pack it before centering and being drawn)

  # I tried to use bind <FocusIn|Enter> to raise the window,
  # but using "grab" stops this command taking effect.
  # Additionally, using grab is the only way I know of to disable menus

  catch {destroy $w}
  toplevel $w
  wm title $w $title
  wm withdraw $w
  wm geometry $w +2000+2000

  if {$transient} {
    wm transient $w .

    bind . <FocusIn> "raise $w ; focus -force $w"
  }
}

proc grabSubWindow {w} {

  # There is an obscure bug in the grab code that means grab shouldn't be used till window
  # is drawn, so put grab here

  global data

  if { $data(platform) == "unix"} {
    grab set $w
  }
}

proc closeSubWindow {w} {
  bind . <FocusIn> ""
  grab release $w
  destroy $w
}

proc closeDialog {w {cmd ""}} {

  closeSubWindow $w
  .c configure -state normal
  if { $cmd != "" } {
       uplevel #0 $cmd
     }
}

proc center {win} {
  # Center window $win on the screen

  set w [winfo reqwidth $win]
  set h [winfo reqheight $win]
  set parent [winfo parent $win]

  if {"$parent" == "" } {
    set sh [winfo screenheight $win]
    set sw [winfo screenwidth $win]
    set reqX [expr {($sw-$w)/2}]
    set reqY [expr {($sh-$h)/2}]
  } else {
    scan [wm geometry $parent] "%dx%d+%d+%d" a b c d
    set reqX [expr $c + ($a-$w)/2]
    set reqY [expr $d + ($b-$h)/2]
  }
  if {$reqX < 0} {set reqX 0}
  if {$reqY < 0} {set reqY 0}

  wm geometry $win +$reqX+$reqY
  update idletasks
  return;
}

proc exitGame {{quick yes}} {

  global p

  if {$quick == 0} {
    set ans [tk_messageBox -type yesno -icon question \
	  -title "$p(name) - Confirm Exit" \
	  -message "Confirm quit Game"]
    if { $ans == "no" } return
  }

  saveOptions
  exit
}

proc showCardBack {} {

  global cardback data p

  set thisCmd [lindex [info level 0] 0]
  if { [info exists dialog(cmd)] && !($dialog(cmd) == "" || $dialog(cmd) == $thisCmd) } {
       return; # already got another dialog up
  }
  set dialog(cmd) $thisCmd
  set dialog(win) .cardbacks
  set w $dialog(win)

  initSubWindow $w "$p(name) - Playing Cards" 1

  wm protocol $w WM_DELETE_WINDOW "closeDialog $w"
  # set .c disabled, to stop cards reacting
  .c configure -state disabled

  set i 3
  set list [list 1 2 3 0]
  set frame -1
  loadCardbacks
  foreach x [lsort [array names cardback]] {
    set i [lindex $list $i]
    if { $i == "0" } {
      incr frame
      pack [frame $w.fr$frame] -side top -fill both
    }
    lappend data(cardbackIMG) \
      [set this [image create photo -data $cardback($x)]]
    radiobutton $w.fr$frame.$i -text $x -image $this -compound top \
      -variable data(cardback) -value $x -indicatoron false -selectcolor LightSteelBlue \
      -command {::img::back configure -data $cardback($data(cardback));update} \
      -offrelief flat -borderwidth 3
    pack $w.fr$frame.$i -side left -padx 4 -pady 6
  }

  pack [frame $w.frBtn] -side bottom -expand 1 -fill x
  pack [button $w.frBtn.ok -command "closeDialog $w" -text "OK" -width 8] \
    -side left -anchor center -padx 5 -pady 8 -fill none -expand 1

  update
  center $w

  wm deiconify $w
  wm resizable $w 0 0
  update
  grabSubWindow $w
  
  return;
}

proc saveOptions {} {

    global data p

    catch {file attributes $p(config) -hidden 0} ;# unable to open hidden files for writing!
    
    set hFile [open $p(config) w]

    puts $hFile "# Automatically created - do not edit"
    
    set list {speed scores name,0 name,1 name,2 name,3 diff,1 diff,2 diff,3 canvas_bg cardback pause autoraise}

    foreach i $list {
	puts $hFile "set data($i) \"$data($i)\""
    }
    
    close $hFile
    catch {file attributes $p(config) -hidden 1}
    
}

proc shuffleList {list} {

  # l is a list of pairs e.g. {{card1 random1} {card2 random2}...}
  # which gets sorted by the random numbers (index 1)
  # doing it twice^H^H^H^H^H more  works better

  foreach j {1 2 3 4} {
    set l {}
    foreach i $list {
      lappend l "$i [expr rand()*rand()]"
    }

    set list {}
    foreach i [lsort -real -index 1 $l] {
      lappend list [lindex $i 0]
    }

  }
  return $list
}

### &&& is this best S.A. ?

proc setinter {arg1 arg2} {
# setinter [set cards$suit] {t j q k a}
  set list ""
  foreach x $arg1 {
    if { [lsearch -exact $arg2 $x] != "-1" } {
      lappend list $x
    }
  }
  # S.A.  return [lsort -unique $list];
  return $list
}

proc setinterN {arg1 arg2} {
  set N 0
  foreach x $arg1 {
    if { [lsearch -exact $arg2 $x] != "-1" } {
      incr N
    }
  }
  return $N
}

proc setdiff {arg1 arg2} {
  set list ""
  foreach x $arg1 {
	if { [lsearch -exact $arg2 $x] == "-1" } {
	  lappend list $x
	}
  }
  return [lsort -unique $list];
}

proc showColor {} {
  global data p

  set choice [tk_chooseColor -parent . \
    -title "$p(name) - Background Colour" -initialcolor $data(canvas_bg)]
  if {"$choice"!=""} {
    .c configure -background "$choice"
    set data(canvas_bg) "$choice"
  }
}

proc showColor2 {} {
  global data p

  set choice [tk_chooseColor -parent . \
    -title "$p(name) - Panel Colour" -initialcolor $data(canvas_bg2)]
  if {"$choice"!=""} {
    .c.f configure -background "$choice"
    .c.f.l configure -background "$choice"
    ::img::marker put $choice -to 0 0 70 95
    set data(canvas_bg2) "$choice"
  }
}

proc initIcons {} {

  # unfortunately we have to write these bitmaps to a file to use them

  if {[catch {set fid [open "/tmp/icon_bitmap" w]}]} {
    # f***ing windows is f***d
    return
  }

  puts $fid {
  #define icon_bitmap_width 48
  #define icon_bitmap_height 48
  static unsigned char icon_bitmap_bits[] = {
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
     0x00, 0x00, 0x80, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x80, 0x70, 0x00, 0x00,
     0x00, 0x00, 0x40, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x60, 0x80, 0x07, 0x00,
     0xff, 0xff, 0xff, 0x1f, 0x0e, 0x00, 0x01, 0x00, 0x00, 0x10, 0x3c, 0x00,
     0x09, 0x00, 0x00, 0x10, 0x70, 0x00, 0x0d, 0x00, 0x00, 0x10, 0xc0, 0x01,
     0x1d, 0x00, 0x00, 0x10, 0x80, 0x03, 0x15, 0x00, 0x00, 0x10, 0x00, 0x0e,
     0x09, 0x00, 0x00, 0x10, 0x00, 0x3c, 0x1d, 0x00, 0x00, 0x10, 0x00, 0x70,
     0x3f, 0x00, 0x00, 0x10, 0x00, 0xc0, 0x3f, 0xf0, 0x01, 0xd0, 0x01, 0xc0,
     0x1d, 0xf8, 0x03, 0xd0, 0x01, 0xc0, 0x1d, 0xfc, 0x07, 0xd0, 0x01, 0x60,
     0x01, 0xfc, 0x07, 0xd0, 0x01, 0x70, 0x01, 0xfc, 0x07, 0xd0, 0x01, 0x30,
     0x01, 0xf8, 0x03, 0xd0, 0x01, 0x18, 0x01, 0xfb, 0x1b, 0xd0, 0x03, 0x18,
     0x81, 0xff, 0x3f, 0xd0, 0x03, 0x0c, 0x81, 0xff, 0x7f, 0xd0, 0x03, 0x0c,
     0xc1, 0xff, 0x7f, 0xd0, 0x03, 0x06, 0xc1, 0xff, 0x7f, 0xd0, 0x01, 0x06,
     0xc1, 0xff, 0x7f, 0x50, 0x00, 0x03, 0x81, 0xff, 0x7f, 0x10, 0x80, 0x01,
     0x81, 0xff, 0x3f, 0x10, 0x80, 0x01, 0x01, 0xe7, 0x1d, 0x10, 0xc0, 0x00,
     0x01, 0xf0, 0x03, 0x10, 0xc0, 0x00, 0x01, 0xf8, 0x07, 0x12, 0x60, 0x00,
     0x01, 0xf8, 0x07, 0x13, 0x62, 0x00, 0x01, 0xf8, 0x07, 0x97, 0x32, 0x00,
     0x01, 0x00, 0x80, 0x54, 0x11, 0x00, 0x01, 0x00, 0x00, 0x52, 0x19, 0x00,
     0x01, 0x00, 0x00, 0xd3, 0x0c, 0x00, 0x01, 0x00, 0x80, 0xd7, 0x0c, 0x00,
     0x01, 0x00, 0xc0, 0xdf, 0x06, 0x00, 0x01, 0x00, 0x80, 0x97, 0x06, 0x00,
     0x01, 0x00, 0x00, 0x13, 0x03, 0x00, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00,
     0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  }
  close $fid
  set fid [open "/tmp/icon_mask" w]
  puts $fid {
  #define cards_section_mask_width 48
  #define cards_section_mask_height 48
  static unsigned char cards_section_mask_bits[] = {
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
     0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00,
     0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00,
     0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
     0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
     0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
     0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
     0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00,
     0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00,
     0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
     0xfe, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
  }
  close $fid

  wm iconbitmap . @/tmp/icon_bitmap
  wm iconmask   . @/tmp/icon_mask
}

namespace eval ::img {}
 
image create photo ::img::blank ;# used for compound [label]s, to get sizes right

### these are base64 encoded gif files
### use these commands to encode new gifs
# package require base64
# set f [open picture.gif r]
# fconfigure $f  -translation binary
# set data [read $f]
# set data64 [base64::encode "$data"]
# set out [open picture.64 w]
# puts -nonewline  $out "$data64"
# close $out

proc loadCardbacks {} {

  global cardback

  set cardback(_Spider) {
  R0lGODlhRwBgAOf/AAADAAcKBgwHChAPEw8RDRQPDRgQFRgUExYVGRUXFBQY
  GxgcHiQZGhscJBseGx4dICIbICIeHSIiICIiJR4lIRomJxgoIigkHisiJCYn
  JScnKzIkISYrIysvLTksLTouKkYpJkgnLD8uJEYrL0QtLTczMjsxOTE4Nkkw
  Kyw+M1QvKTc9N1E0NTs9QU83NVc2KVY2LkU9RUY/Okw9OU09PzdJQ0ZCQVs9
  PFVDP0pIRlZCSkVMRXA8NklMUEdSU1pLR0xRU1ZPSZA2PEpVVk9TVlFTUWlK
  SWtIUFBVV2JPR4dAO1JWWFxSVVVWVHhGS1BZVIZBQ1NXWk9aW1pWVVdYVlVZ
  W1lXW5Y+O6k2NZBBR2pTUldbXVlbWaM9N19aWaA8SV1bX1tdWrY1PG1YUGVc
  Ub00OV1fXGJdXHJXUXVTYJ1DSaw9QYhOU9gpQF9hXsswP2RfXoZRTsY0PHlX
  U5ZLRqlCRGleX2ZhYJVNTtEzPINXUZBSS2djYe8mNoFYVuwnO51MT21hYn9b
  Up5ORWJmaPUjP3peU2tkXopYTsM+ROExOG9jZOYtROguOnJkYHBlZegvQPAs
  PuIzP6tNTPErRG9oYXRmYnhkYrtJR5JbV3doXrZMSXZoY7NMWMJIR+Y3QXdp
  ZG9san1nX7NQSYJlX+U3SLdOT3xoZd47TOE9QKpWUMlISYBpYYhlYZJhXOI9
  Rn5qZ4RoYo9kXbRUUaJcWLFVVoZpY5JlWd5CRt1CS4xoXs1JU51iVYdrZdpH
  RYxpZZBnZdpHS6FhXItsYXN0eJ1kXNlIUo1tXMRSV5BrYtdMS3h1c9ZMUYtu
  aJZqY8tSVJ5mZNNQS5BtaZJtZJxpX89TSptpZNZRR55qWrldV9NRUZVuX5ls
  X5hsZc9UUX14d5VvZp9rYaNpYaVpXMdaUMtYUcRaWspYVphubKhoYqpoXaxo
  WMdbVsReULdiX8NeVqVrY69nXrNlX7VlWrljWrhmU71kUb9hXLJoWsNfXLxk
  VsBiVrxlXJiam+no6f///yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQB
  CgD/ACwAAAAARwBgAAAI/gD//VsCZIhBHwgPAlnIsKHDhxAjSnSIkKEVgQN9
  PGmysUmRjx+JiBxJsqTJkUiQACGyhODJlyQ/qiSy8J+bIkB8EEGypIqVJUis
  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}

  set cardback(Statue) {
  R0lGODlhRwBgAKUAAAAAAK2hk8yZZsxmZsxmM8wzAMyZAMxmAP/MAP+ZAP//
  AP+ZZv/MzP///8z//5mZzGaZzMzMzAAzmTMzmWZmzGYzZv//zDNmzDMzZpkz
  AJnMzGYzM5kzM//Mmf+ZmTNmmcwzM8yZmZmZmZlmZplmmZkzZszM/2ZmmZlm
  M8yZzNvJydvJydvJydvJydvJydvJydvJydvJydvJydvJydvJydvJydvJydvJ
  ydvJydvJydvJydvJydvJydvJydvJydvJySH5BAEAAD8ALAAAAABHAGAAAAb+
  wN8vQiwaj8ikcslsRoRDp3RKnUZF2Kx2y+16v+CwyCgum89lMnrNPqvb8Pj2
  La+36fa8Ga/vf/l+gVqAgoKEhX6HiHqKYgEBWAFEj49HkH2NZpIRIyNEDaCh
  lpdwmXsRIp5VEaRuRXqQFaqfDVOPrkSlqFoVFUe1TZvCaa9sEcBYrJCXVZRG
  rV2mXEljrZucStWS16xg0lqUyUdeI9vPIttj3bd/xWi76sdFl52yvWMj6qTd
  +uDoc+7Q3BsDSs0Ie7JQyfqXSlUqdNCiBdQkAgMGScAMduokotfGVL265bu1
  MR9DcbnQSMKiClhGkVkqWGw4wqIvkCMbyirHLh7+PJXc0CW5JBNDvl5Fj3o0
  ibDCtIARt7Ab5TMeSHsWMQAAcLCo0U4YetkEmJKS2bNnffKLBIlMV6Raw2a1
  Kcvm2HB00Op1do6l33kdxcadu5UwgLkmUcLby5jVJIUlOy2jV/Sw4cJaLY/N
  8oyx527KUtEdeLLrXItbU6c+Hcmn58bLsgQ4qBkpy8QdT6verTlx59dolU1G
  RRvz4YNfVdVEzXv3ZtfAg4+aXROz1rr2AtSqmLm56rCc5wGXmhIiurcYcgMQ
  i91Ide/fw0+Kflbh5tkeqcddOOKw4yIVwLeafMLRV8l7RsXE1EEmEZHZP5Vw
  IuBhBE6mVzQByGTZQg3+iRbPI/0VdltMAqanmIERLhfWUljIJMs1twUYlkmm
  dcebidC9JhsrSPGH30EVOdWiYTTCxdyNQubITk87EsdgOcQVtVM9WQ04JXJV
  3uibeDpuQpNJJPUI0pFb+RLBUpVluRqOVXkWSS4fmXXViqjZSCFxmVWpW2G4
  5XVJOBBFVpVX9WiYJT6pfBegZswleWJ981GCVD75PPNRi/doyNUu761XF6NZ
  PVWeUNNVdJhMrkEEST3/9HeTaIONIcJhxoFH1mJ//sZdWEqs6lQu97CCpX8A
  WvYdm48yyY1juSLB0q9EHJTLach2SuuKt2pR0oeALRuaZOPgGR9LatJqWZ/+
  AU0KZmukzgcQjIEtutpGlX1n3Zaj9ohbMkB64aW2udlolJd2OkehYrzQta2s
  Tz7EUS1v9ajmh+rBl5WQdLg4mj1dUfqWOiqu6JVNlIRM5rFxIZxFTYJhOSNH
  b21TnU01DubyhNZxpfKzgsk1E00gveKVU7PpudtRBTsX6s48j2wRnC16uZxM
  6SQNAEHbdWfnfgRuQS+1PyVzC6HA2ruVOrDiTHNV2lJ5mseVclqnUahYjVC5
  3s1l5qhfOi1yBaQgV2uWAu85YZZ41OM2tYDrlPTczVmdd5V8TOp3go4XTC3O
  nFM+UbwSO8VglJquuTnnJa7GR8c9hjTJkJpTezL+6oWtCQiaCRXEj9sonz77
  4d/9Bqjix4TSAGXDWic77WYHzyWgDxUvzzle9X4Z85FjIPxJxYtSyzDJm/77
  kZLfqP3zK2Fk/DOvhG+4+Zoxf36klWD9EhK+/o56+ZH/xsQyr1tJ+LBnLtrN
  LxjvqsSq8GZA/h3rf/AoiXb2QS79EfBwB8TfqrYlD7bkjzkOvCBmltA2jgDG
  PM+qUulEaLEMBkRQ7rLQmOo0QBY6Jxsr4wipehKbOW2FXvKyoXXYtxa/iA1Q
  4aAMaoAoRPG5pzz7kk1E2GGa43SFgFtjFDVWxgVlnXBx9MJeL8yXlS2uAXrD
  CiPtwKK80+DvDmkRHEL1aLeT1TgqFm8844VUZI/9MYVkUoiKDgHGFlSkQzRf
  U1uHbkEFLiyMkJwJB1hEZq3IUaqQvcrjbS4FyQgFbmiV5M22IpRJS+SQRV4D
  kzygFKYZBVFLcfIWYPJYKI+kklKvGMeYBJe3jsVtKIqBomkclUpZaRBTobSj
  bWT5OrV8q2dRvCRfdImpV+6mKO0C5izEk8Ln5BBM5tBgFSeXzVJtU5e8dKQO
  p/nGK8KHJ7TI497aqSlijpKZzGqI1aDUvWNKq1dDElExpfi/FjUHWuvrTEyW
  kL/UOPIhqnJCLK5JKuO9pCeqiMIqNspRKUChoyANqRGEEAQAOw==}

  set cardback(Flower) {
  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
  ADs=}

  set cardback(Traditional) {
  R0lGODlhRwBgAKEAAAAAAP///wAAgNvJySH5BAEAAAMALAAAAABHAGAAAAL+
  3ICpy+0PIzAn2Iuz3rz7H0wASJamiZzquqaXAMfyTNf2jdOYG+T+D/xdeDCW
  0Vi0EAW9oPNpaw5HlmKsypRqk9xsFwveepnkbIgqharX2vOLHP6K42O6fZ50
  g9d8Z3vZVDc3KFco+FU29RbY13jzh2Z1Zzh5aGmXB+i4GZUZWXZJGEop2gO5
  yJkqc7pX6VoKi2imqarKmkaaO7rb6olam3orGctL7Oq7B8wpDPqq63yZqPTJ
  qNzHbGqs/Yw3S229iX21XcwtiYwLfo0+bF7+nqyYrM4n7g6Nn2ZPz8YOR57v
  nr9q/PwMHHcPYClpetIVfCIuIDyABx9C2Scx48LdfRaDRFSY8FnFjh5HagwZ
  jSNJHx9Rnozm7ddKISZBTqTEkNZMlgdf+uwmz+HORzVd2uwVc95Qokn1HX0q
  K6iVpTgwQr1ZJ+c3qkyl/jMKNmvTqVxrWA3rU6vMsjNaYv0ZddpatleKvr1q
  aiTdumO/3kWLyytBumf/Gs7bdzBbt3AP692rdl7jtCr3MsZ79LFlu5MpVibc
  EzNazaATIzyc+fPi0IBHm4bMV/DpzgJVl73c+i3p1a9hR25zJDgJf751yH1T
  fNxx4cyN8GgOHUWF6NQ/TDAgIbv27dkNFAAAOw==
  }

  set cardback(Bubble) {
  R0lGODlhRwBgAPcAANnZ2QAAAIKVs3uNqXSFoHCAmWx8lWp5kWh2jqi2xJmt
  wYibuoGVsn2PrHqLp3eJpHWGoXOEnnGBnG9/mGJwhl1rgGFvhH2QrH6QrYCS
  r4SXtoeauYebuoaZuIWYtoSXtYGUsX+Sr3yOqneIo3KDnW59lmp6kmd2jWRz
  iWFvhllnfFhleVlme1tofVxqf25+l3iKpXGCm3GBm2t7k56qt5Knx4qdvYCT
  sHaHonSFn3GCnG+AmWZ1jF5sgXqMqH+RroSYtXuOqXmLpnODnmh3jmV0i19t
  hFhlemBthGl5kmh4kGVzinmKo5+0yJSqy5ClxoqevWh4j3iJpGx7lGNxh2Ny
  iJOoypGmx4+jxIufvnCAmm19loOWs15rgFtpfmd3jo6jw4OWtIWauI+kxY2i
  woicu4aZt3mMp3qMp19tglxpfpit0JClxYugwI2iwXKCnHaHoXuNqmNxiGZ1
  i2l5kKC325mv0pKnyIyhwYmdvHB/mY6hwHWGoqG53pmw04ecu3yNqn6Rq6zF
  7aO64Jyy1pasz46arNHs/rHL9KW945202Jet0JKoydzg5tnz/7XP+KjA55+2
  22p6kfP//8nl/7DK8piu0WV1jGBug42hwqKwxKrC6Zuy1XyNqWFwhp+20qS8
  4WFwhVpnfJ612ZarzVZidVdjeKfA5parzlJecVRfdFVidldkeFRhdFRfc1Nf
  cp+12lpne1VidVVhdkxXaE5Za09bblBcb1FdcFJdcE9abVNgc0VQYEdRYklU
  ZUpVZ0xYaU1YakJLWkBJWENNXEROXkhSYztEUjU9SVRgc67I8KvE61FecVBb
  bqa+5a3G7r3Y/bjT/JWrzMPf/P///6vD3+b7/11sgV9ug52011Zjd4mevU5a
  bFxofXOEnUlTZFdkd21+lpKnxGp5kml6kYWZuGt7lFxqfGBremRvfmRwgE1a
  a2x1gXN6h2t6jHiAjXuDkI2gtFNgdJWqxqq60GJvhWJwhXuOqoaQoZmquv//
  /////////////////////yH5BAEAAAAALAAAAABHAGAAAAj/AAEAABhA4ECC
  BQ0eRJhQ4cIAAAAACCBgAIECBg4gSKBgAYMGDh5AiCBhggEKFSpYuNCgQQMM
  GTRs4LChg4cPAkCEuCDCwQgCJAqUMHECRYoKKlawaOGiQoUXGAbAgBDjAIIA
  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
  gIAAOw==
  }

  set cardback(Purple) {
  R0lGODlhRwBgAPcAANnZ2QAAAIJDu4NEu4RFu4RHu4VIu4VIvIZKvIhMvYpP
  vopRvoxTvo5Vv45Wv49Yv5BZwJFawYtUvolQvIlPvIZLu4NIvYNGuoFDu39A
  u31Aun0+uXw9uXs8uXs6t3k4t3g2t3c2uHc0t3Yzt3c0uHYzuXc0unk1unk2
  uno3uns4unw6un0+u4A/u4BBu4NGvJFavpJbwI1VvopRvIdMu4JFvH9Cu34/
  uX9At3w7t3g1uX49u38/uoBAuYBCvIFEvIRHvIZJvIdMvYhNvpJbv5Jdvo1W
  vY1UvItSvIVKu39AuX09t3o5uXk3uH47un9AvIJDvYRFvYVJvpJcvY5XvIpR
  u4dOuoVKuYFEuoBCuYJDuXo3uXw8u349vIA/vYFCvolOv4xRvY5VvY1Wu4xT
  u4hNu4VJuYFEuX9CuX07vHw5u4pPvZBZvI9YvI5Wuo1Uu4tSu4NGuX4+vYBB
  vINIu3k4uXw5uYxTvHs7uno1uoZHuolOu49Yu4ZJu3s6uYdOvIVLvX0+vH09
  vHo4t4pPu4lQu3s6vIJFvn48uHw7uYBBvoA/t38+vn9CvIZGvIxUuotSv4pR
  uYJDv4RFv4RGwIVHv4ZIv4hLvodMv4ZLuIZHv4VIwIdJwIhKwIdLwIdMwIhN
  wItSwY5VuYNHvohLuYdLv4lOwIlNwopPwIFEvolPuYhMuYpQwYpQwotSwoxT
  wo1WwIRHuI1Uwo5VwZBXwI1Wvn9Avo5Vw41Wwo9YwZBZvoVJt4dMuY5Ww45W
  xI9YwpJbvJFavIJEuIVKv4dOv5BZwpJcwZRfwZRgwZZivZNevZFbwpNewpVg
  wpdjwJlmvoVKwJZhwZlmwZtpwJ1swJNewYlQwI9YxJViwolRwpJcwpRfwpdj
  woxTwJJbwo1VwIlQv3k4uotUwpZhwoxTuY9XuZBZupJbupJcu4xUuYtSuI5X
  wIdOuYxTt4lPt4FEt41WuZFcwnUzuHUztpFcwXc2t3s8uodOwHg1t///////
  /////////////////////yH5BAEAAAAALAAAAABHAGAAAAj/AAEAABhA4ECC
  BQ0eRJhQ4cIAAAAACCBgAIECBg4gQJAggQIFCxg0cPAAQoQIEB44aCCBwQQK
  FSxcwJAhgwYNGzZw4MChg4cPIEKIGEFixIgRJUqQMHECRQoVK1i0cCFgAIEA
  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
  gQQLGjyIMKHChQEAAAgIADs=
  }

  set cardback(Nostalgy) {
  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
  X2AgXHC92Ju92OsFUOAE3vu94Ou9QhAEADs=
  }

  set cardback(Tcl) {
  R0lGODlhRwBgAKUAAAAAAK2hk8yZZsxmZsxmM8wzAMyZAMxmAP/MAP+ZAP//
  AP+ZZv/MzP///8z//5mZzGaZzMzMzAAzmTMzmWZmzGYzZv//zDNmzDMzZpkz
  AJnMzGYzM5kzM//Mmf+ZmTNmmcwzM8yZmZmZmZlmZplmmZkzZszM/2ZmmZlm
  M8yZzK2hk62hk62hk62hk62hk62hk62hk62hk62hk62hk62hk62hk62hk62h
  k62hk62hk62hk62hk62hk62hk62hk62hkyH5BAEAAD8ALAAAAABHAGAAAAb+
  wN8PQCwaj8ikcslsAoTDgHRKrVqv2Kx2G3gCuOCwWEwcm8/nMnrNxqrb8PY7
  TjfP63juPc+/7vuAUn91AgIDBIh9g1eFh4gEBZGSk5STAniLVQKVkgYHnQif
  nJIEho+QkwNgmVSbnAkIkgcKCAajt5WXel9gC6MKogUKCbjFkwurvGC/krDG
  zwVhrFSjsZHAt6jQ0spco8QFBuCVBAwNDQPbyWKjoqGcAw0ODxAR6rvsnO7w
  DQ8S/xPSGeOWb5Q4cg0o/FtY4RnBMLgSBJNk4cLCfxjubZk2BZe1SQwgXPyX
  4VYwAg+X3foYiYCGkRI2UIIlylkBlOsgtmNZgAH+zIyUZtm6FonDPwgbu20x
  Oe6myJElg2KLZG3DP3w69Q2N1AGmzAIDPMhSIEuUVQlYVeqb+HIkhwoQNDRA
  ZYBnpApXkxasdOCkQpgLI7h6Vwnvh7RcQDwT8AEwRgaDR2GQQAHxFm24Qjj+
  V2FugQNNJ03OCQbzLRGbJYxoECn0pAloLWsxPYpEagEMIm2tlFdvGNqcRmzG
  wADSRN6xfZd+VuIibIa5i2WQcFh2FoHFjGJsvDAEcEpGkVrH4ir7QuEXy+My
  mpKLeniRMKJmCI09aS6+cHlgoH2DP4zQFGBVe1u8V4kHJjzFwX8ScBBgBRMQ
  qIWBlHjA4IIMRSCWMRX+XCDhdcV48JQEBDAowQPY4YKBeONdkSInC/wV0IgS
  RPAdJRWQoZQWIxQjwAkYCUCjBdDk+CEWKBQzgG0SYBDCXxJMEB2HOoqRJC4E
  zFfBkwsRB80IVYbhYDGaSVBBBxZxNqWSYYIxZmb/bBBBmjF1AI0qR17x5i0C
  xDnnQhxsaAxO922x5ygCTCYnnSBQyAmhLVpx6KOTVfDnP44+2iYXURUDpKVp
  VnAjOZtqAUGnuAhXQQp/cYBbgKVmQUF9TXKZEQlrFhMrFh9AM52TNNqpkXJb
  SDAoAwNEGcKIEwg6UJ5VGGsMA38NwOAJL+Ky6xXSKpnmCAyKEGA00FIxATT+
  ZXIQQXfjbmvFudCgJuc/J4xaibtUQAAvNCdU4BOJ45JbKBYXABXgBh5MYDCs
  5UqhcMAFGAKxwJFO0eQzYZGSqbYNB3BxJCB8R4CgIDgbIDIDc2uwAMIWEDIp
  zpoMjS4VS2EmzC2JJezIk8i8WMMiNZRzJIVMwrMkAtgLT8MKfXXThjyjcnRL
  G48CqRbTNOZ0AQug4gjVFUJ8dRbTxDkxWGI3bPbZaaccbUyjcCD3BhVgYLfd
  FeS9wd5y9933KGqbSbfdz6VmuGMsBn744ocn7vYUNDIuOUyOV0wnZQtNMGJj
  H3CH+T8UcPcBlKFflMaOVXh+gQZPPfDBfxDE9d+LBQxGAPuID7TVG74eL0T7
  Qhp8oPs8T10wogNPxb5Q7qbbgToVznn+gb4Lhf6c5r7/Nf1CEHieHO+Thw/Y
  6XVAULr4C5EfSAAQXOB9auqvb4X5FxSevvPyi2F+/PkDwlH/a/gfAPk3QEw8
  r4ByOCACA6jABRLQgQmEYB28IEE4PEEITsigBjeYQSEEAQA7}
}

image create photo ::img::logo -data {
  R0lGODlhOABCAOcAAP////z8/Lu7u4iIiGRkZK6ursHBwYODg8vLy4CAgMLC
  wu7u7pmZmf7+/uvr683NzZqamv39/tPT019fX97e3r29vfLy8rOzs/n5+c/P
  z4aGht3d3fr6+sXFxYqKiuDg4KysrHJycqenp/Dw8ZCQkMjIyPb29ltbW9DQ
  0KmoqDAwMCYmJnx8fJycnJaYmC4uLgAAAEVFReXl5bW1tY+Pj0tLS7CxsXR0
  dJ6enlhYWHFxcB8fH+Pj411dXTIyMm5ublZWVr29vzk5OT09PczMyz4+PgcH
  B2trayQkJNjZ2Ts7O+jp6Xl5edbX135+fkxMTIyMjP7//7m6w+bn57+/vyIi
  IuTj45OTkFhDAqqnoGZmZpWVlff4+aOjo008AtLU3Hp6eqmqqlhYW398ctXU
  1Onr9VRHF417Me/x+ZaVkjQpA5OTkz0xBYaAZ2xsbGNeTpuDKPLz96qqqrmr
  nZaWlsfHx6GhoV5cWSUZABANAWRlZ5CQkvX19bi4uPn//42WlpyUlOr8/JaE
  hIsAAMkAAIQoKJKRkRobG9vm5pEaGv8AAPkAAH88PM/Z2YF3d8DMzGFhYVFR
  UbO/v7IAAGscHKICAnMXF8jS0qSkpPAAANwAAFg4OP3//ywsLJN3dxkYGOzs
  7F8aGmI3N1hFRf0AAGUAAHwBAcRZWfL4+JmennF6ernOzikpKXV1c6Odg+Dh
  5fDy+T89NqaQNePn+MfFuY+Jb2hoaB0dHeXl5uPm8pOOfbi5uujp5m5YBdey
  CPvGAK+JAmprcfP1/aGhpqukfMiYAI93GYxvBZaJU4WDeKSkpp6iozU1NW1s
  aPX17uXn7nd3dwsKBGBYOkU8GMjIw+jr+Tc4OH6EhJyfnzk9PZqZkq2xwfn6
  /+Pq6nZVVcO9vbOoqLaHh2clJXZgYFVVVfDy/J+emkYPD/D09D9FRQ8FBXB0
  dOjs7O/09DonJ2VsbNrc6aSii9a7N/b6+nUlJaKnp3dzY+jn5+7t7VJSUmJi
  YkdHR05OTgkJCYWFhf///yH5BAEKAP8ALAAAAAA4AEIAAAj+AP8JHEiwoMF/
  BgQMeFDgoMOHECMSNHAAQQIFDxggkMix48EHDyAYAEASgIQJHlNypFABQcmX
  AC5UUEnzYAYNG2DCFFCz578OHj7o1AkihE+VDEQMXUpCwtGOJR4sFbD0BIqn
  Eg2kWKpixYAEYFm0APBgAFaJLkbqfAGjrVsYMQA0PBsRggyYM97q7QCABt2I
  NRy8tKH3LdUbOP4+zMHipY7CbXfwAPABpWKHPTSU9AFZcskKPy47BBKEpJDO
  k0sOESH6YJGcBdwaOYIkcpLPBFofVLIEABEmLJoAcOL2yUsoBuhKmQKRhk4e
  VWAguV3SigqnT69gyQJRS2OYErb+DB3QBasUL1i+QDyhZalOMGHOisEyJmKC
  9u5JzthCt4yZMxJpgR9JG3hAw4Fb3FAEAjJ8cFYaanA0IAA3bEDBhRsssYUT
  CWpBQwYZHMVGGxK5gd8FOuTHwwcfxOcEETW9AQdHR8gBAAnU5VdSAS3UdN4c
  HB1AAB06wlSHHT3dgUdHTJBR5HEh1kREHnpIhIJ4T5LUwRpH7YGERD70QdIf
  gASi4xEzHbVDRAUoQZIggxBSiJNLGbLmU4f0AJEOFwCASCKKKLIII4E04sgj
  MEEyA1ZQRPIQCjmQJMkkgSpCCSOVEGLJJSV50ONZA8jgECY2SEppoJNkEqgm
  mxDoxF/+JThoEAInlDRppbgqUghJPuhWUCdO2Hpqrpp4AoAAkPg6UBifgFIS
  IqHkqogmolD2qbL/eCDcS6NoUikplYgSiBVAYDtQnzBJUkomg5hyCqcA0GGu
  QDPUMVQqnqiySkkGsDLvP+gWuUSvNLXiygBmeRSwjgkkS1MsWHghyxh6yIEw
  RBc496RRPQ1ASy062PLJLVU4ccEFDkExwBa45IdJRwjrsgtECA9QARQnJ1zQ
  Gra4wcBdeJUnUQK9+PILMGoEs5FEOh/EAx22HJGBFSQ9kNhDwxAjCzDFAGPM
  Mcgko8xlIhwRQghMOLTMGLKw0YsXb+gSxCy5KMtiQVYwwMz+J4c048o/uTzz
  70EO0KBDmoMnrrjiA+hQwuISQYPEDYhD7hAEnURDy18sds6ihReGzmLoGRY0
  gC7STFPLWUuwmIo1n4BBhwvLtLAGCYb8cQ02B2KSTTYFgFKQNm4bk8w2Pp3Q
  jSPefNMbAEkIAk5J4YgzPQDgbDLOBOT8XJA5vQADdk0ISHIOIaaMQlI6g1Si
  zjoAPJIpJewA4I4ppbxjEhR1mB6PPMdQCQSEcglGiAIRJUkBPQSRI3BcjyT1
  oBNJnFCExxFkAPZIg0dYoIApbOAeiGjEFD5AgQ8koREkgYIbbpCAa9zAA1vA
  gQ3CEIZ8rOAFLyjCE47iAn2koAX5QMSBHYAIRDvQATiQyAEQavCEfeCgBCGo
  QST4oYMDJEAD5OiH0GpCgxrIwQ5gtAMICkDGAszAAz5QwhCEYIALkFEELbBF
  DyaQAzmQIQMdIIIykNQTCGDCABUIZAUmsI8n8GOKkLCiAQzggS5gogAX2MIQ
  ikBJZqiAFUy4QAwY4BMoDMEGylBGF+zgjwQcABo5qMENSrDIVtpBivnQAljA
  4g8N4AAE+bhaTQyxAg+ApQWOVAYIGiaAAoQRjF0QSQ8W2YFF1mGRCchBP67i
  EyHUgIkgAGQFFACBCTgBDDEkYgtaSU5yggUrLQjjFtbAzi3U7J3wjKc8ORIQ
  ADs=}

# these card images are 2d=two diamonds , ....

image create photo ::img::2d -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXAMPsTLtCjNP6acuWvwt6bBmg8JghvozIpvLGbCKVseNAmhwtr8Iq
  1tLzRU84Lja8pJXHwXB5tvY6tdA3K87WPXd4+XGv1ufXRvfDJyhFNLjSd0ZnB4fn+LOmE/flcm
  mZg6mluWk2SbkI93WhmGdaU3ijKuqqCgj7xzo7Z2sqi6tXu0vom9gLvDo8JVzccozMo7xcoutM
  Ah39MU3dYX29ka2d1Z38rcIdHtJMjjEenv693t2u/X4dTz0fXe98v5yPvF/cP/wPWEBfA3cVxH
  XQVsJZC2E1dPUwlrluocqd2+BnYcVAbnISklKh6SCkSHYKfrpTyaKURhyBDGTJEd1EMogseUMi
  6OOMgDmDYYEJMqXKJkBpQjIplJEZlzOV6iQhhqmqp0ZlutpI8ubFURoigtrWFBkbr4HSgAlb7B
  PZlqHW+txarQJcDhMMSLiLN+9dAwUAADs=}
image create photo ::img::2h -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXAMPsTLtCjNP6acuWvwt6bBmg8JghvozIpvLGbCKVMV3uV52OlgMr
  rvvtHnu+KCgMDo+30OUKDV9zryc4Wo79vu164dPLlxX0B8inJRVoNkOWJrZn57SVQ6cCGZmnNn
  Mn5WKpSXkItUkjyMk2aiWFQdSneolR6ooHK6tKWPuKW3ur68fWa/sLnDtMXDx7jJw8KLysw+vM
  0xzNAk1NYn39ka3dwd298Q2eND0OIm5ugZ6+bt4+/g4e3z2vXX99T50fve/cv/wvWcBjA4sVHH
  YQWMJeC3U1xPVwV7l03iZSdHQhYpBYfhoLYWyIkcWohbHqxAlhcUerSicPojJhqaAnmFWuDAz0
  SFTGlI8MKduYKNSRRCUX8TRJFCmdf0QVcRh5lGZSmm7URS1x5+WHMkACqsmUc6cqOqCkkqO4oW
  THTyGtoi3S1u3bqm3kzhW19Cq1lWtN3T1X4S+HCQYkGD6M2LCBAgA7}
image create photo ::img::2c -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXwsayGzLyfdL6iPcfnQH6hhihJUFMFnlLpjIpRPakz1rTB6vueEaU
  7bl7OVUNLbMcQyu3ilsWPJ6mkNRhdyaBxuslCd899tbnF4cX1JZDSBSFmEhX8wcoBmnleHR0Zw
  jpkJYph/nAIqgHyln1CRpCeYp6xWq35/maOPsqWyuJa6a7y7tW6JsbDDu8CFzccoxMu4xz2/yj
  DA3yPM1Rba2Bnb3EnexNJg1+OO5VPnhOsg2+7t3O/Z4dbz0/XQ9935y/vI/cX/xvWMBgA30V5H
  VQV0I9sdKJaXjuEZWFziBgOjVqUKhKambEXbPIERaXVLTonPHoRWKjlIyM+QnH5x8hlA9biswD
  UxtNdTiJMaQUSdivoBobHVST7M3RL6JOToKT0dyqkAz31VlI1FI3h1OfpotEEQuwsK3COFRDVs
  7VnezYuqvAdcMEAzPr2r07twAAOw==}
image create photo ::img::2s -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXwsayGzLyfdL6iPcfnQH6hhihJUFMFnlLpjIpRPqcT6C0d60ypcac
  4nncimc27avccpjDsPRD2SVHoFScpH6Ls+76tAZPwge4R5WFwkdk9aViM4KGJdbm5cKzOESpJg
  cWxvbIaAlXmbkJeRZSQ3pZ2Jf6GcTaehhLCjsbU2vrlxu6y9ubOPirK1xKXGycF4wcqLz80+zc
  gRv9B01dfT2cXTK9jerNbQ3evU2ebX6NTq0eze7svgyPLG9MT2wvjP+r38u/658LoC2BswjGMg
  hsFbhqChdycjTG4ZtvWgxNKkPQ4sU2YPoWiTLXwJSqLxBBhcuCTxChhlMQ7cE2UgIwOnNmJoRA
  J9TET5L87eRpCWDIWxEp6nSHqWjFkUtSiXvGUqIRhJDwULUD6GoykUbHodGaDOXTcmPPVXAojY
  KgtWzbTgBQAAA7}
image create photo ::img::3d -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbWAMcDS9OuIMf1ft7wO+MJQbfLb4jsFHHBpDNTzD2noZFRymtSl9fs
  cWvVfFnYqa85VuXSyHNZvWYLo7JaXM7jeu/aod7Op5O01LcSWJgXxoR4wmcW9mZ49wgUCWfpZx
  W3hzenuSYkCHYlmkV1Qcd4ukO4Sunq+gfbpjj7JGubmDu6e1vb6wnshCusQlyM8ovMcrxMpOzc
  Ax1d0mwXOx3aGUyFmdkN+urk6DtFPpxNFliedLjdki55Tms+yT5ujw7urbv/XmNNnSpupwYSpA
  YPoY14CjcEbIiKIUQMDydWhHixYUaFhxsRdqT2MVpIZyN39SlpqxRKDgZNlFkp5h+ITVUK1tlB
  EyapmzRySmyUT+AXnYvCAdKi85Apij9JuGsp7YlSfVKDXhpDdB7Ql01dGpXUxQLRSjI74BlbyQ
  sHtC+08aw5MabKrsvSsMWn4S6SI0PpAqMJN+5OUXqxCa5W4bCHCQYkOH4M2bGBAgA7}
image create photo ::img::3h -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbWAMcDS9OuIMf1ft7wO+MJQbfLb4jsFHHBpDNTzD2noZFRypJdj8jl
  NSvNNYVe4Eo8Q3etzK8KDV9vtW+4WD4fm+z3YbnGh0XGhhTINfhkqLfj86MDZufkokV3FidpFU
  mj9jR5uVmJCcQJeCg6GgpIZRGVusqz9PiKh7E4y0h4O/Wn65fbm8QLjDu8+1sMe4xcI7ys0uyM
  ohz9PE0tfZ2cTZwo68qddNfn66RGqh2uaMsCfaK+3mJtqUg79F5vbxgsP8+3PxXoVLdz5KgQLG
  jwG6JXsjrx4wFv4TZ2DyduaGdRA8aMmRg2cmRV8SNIkdhIkvD4ESVHlRlZWnS5bBHMYg2rmKwV
  aiaJiDvH6fxQ092lnx0E1eFEdMPBnkhDCl0KVAedpDg1PWXShCoqqxIL6cMHUR3YHfeeHtJatg
  QptGL3NOHCNsy4nhy0YpVqlO5Fp2q9BQUx127ChoJXmSoMUCZfZ0fgLka29jFNn5InIu4l4qaH
  CQYkeP4M2rOBAgA7}
image create photo ::img::3c -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqZWw8axGzLyfdIujfce/xr5hh0gkIgMYhbJZm3JvCWcys0xp6BenzNb
  UyfksmDfMHnsTfKiMrY6PJzKt214T2LHHacqPL1l50bil1eXIQhCSGSU1Zc1gihlBpnyZ7UTVC
  iZ6dCl6bMDgcZXxnlGZZgZUvOJipJH6qoHaylbUmubmlu6y9uLhPuLJQzcSux4HGecfLvMnOj8
  /BMtzRE8inrtGFvsdLpIjRV5F/46PqvV6KtM2f5WHNHNLgEOjlc/H68MX8mqDf1GiMB/ANOVG+
  ZN3btqXRg2dAgIYkSJCCk2s/gK40WNhQU5TvP4gSAxbmI4khS5Sw6rCyht6WsZUqG5TiUDeqIJ
  85JAVcPmsDw4TeW5IjJzQrknjpE9ekkDAbXmBxAtfg/k2VtJEl3CrE2hbJXZFMxXroMm/Rzbco
  tRqGTLQs2WM01NjG7W5lIKcq5dV6HOejyz16C6wMII/xKR1woFQowbO54AoAAAOw==}
image create photo ::img::3s -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqZWw8axGzLyfdIujfce/xr5hh0gkIgMYhbJZm3JxAmdz81RlaBWNVeU
  gqqbdkmwZjjacpintSwrkhy/JUh5Gk605yR6L3fGxyYl6IYVmMeG5vU1YjN09mW4E9Tn1+YIKF
  gn9CCjuEmJqXUTFrI1SkpYiQpitMr6own7KDvb82pbgpvbWssL+IsYTDvss1vM5Yusq7zc6+zZ
  LDV6zCwdDRa55lQWdy0pSrzZCYqIJ057bvxNdoh+675uTvc+yHhZbcXePnlZzp3vGcBC3qABM5
  gGYUKFexg2dMgMYkSJAinGsvgh4DKNfLMInqLokSOqFI3E7PtFTqQ+j3vKqFyZyuXJjG44seyF
  5qWNktoW8dAZr2UGoHxmJJunbtA4CP/WJVW6tBu4RDNxhvNZ6CWUTw+3aN0asMvXrVCPaqk6VN
  HYNQTXAkyLUQlcjDtM0sXkFmmpuBzyshLBlwuFQIQLG15goAAAOw==}
image create photo ::img::4d -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbaMLDy7GJwPOdnbd24DvzwfL+gUVO7CWDHZsalXBadRygxypnKtKiR
  9MrtMXNYFe8yzvpmRNZZ3AGz5GavrYwGh+P6+gsvRmeit8fx5kGYBpJYiGS3yNgYmNiVUcg4SF
  mZd9l3Qug3uQf66bkp+Ne2glpipaoGmBkL4rqGqDiHu/mluyFJ8mv4OEsFdBZc3PKYzHzI7OT8
  XLUsDU1dPY2dHK2dw90t8w2uPN4kXr6LrnOuTnvdHgpP8y7fSl/vjh9+r9/B3o/hH0ALAgcWBH
  iwX0J9C/E1rPdQXkR4E9tVVHcRXcZyphvHdQT3sVtIbSOxlax2UlrKZyub8QM4pWWQMg2RIQJm
  K8RLWDqIiRqT8NWqnL6uENxpyehQoUlVFSQlS2lRLE9NlYA6NSDSn0xvYX3xZGukX2PTQfrq1W
  q+UqzOSr2jq2rbD2h5OVpKNCqxXkHzsu2VZ8NCnzhHeao5M63Tre3GRJFJJgZVxuqEQmaD5/KW
  uJTR8e2sEDTDCgNJTDAgIbXq1akNFAAAOw==}
image create photo ::img::4h -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbaMLDy7GJwPOdnbd24DvzwfL+gUVO7CWDHZsalXBadRygxevFlsSBt
  jwuyXotXqfdTLpd428zYfOa83yT21z2md/J64QjPtMUXtzFItPZnw2VI+MIYGJaI9jjl+Ihoct
  nFiCI5aUiiWZeoBAbX95m386fVyKfyuvqFOtsYqiZ7ans6c9jCqioHKWOKWVtsE1TZqYhMlcPm
  /EzjuTRNZXeNXa3tlN1dxQ1u9D0OVG4OLZ6uzu697s6CHq8yT898fw6fb8xP7d8OoAx7AjkQLI
  hkH8INBxdeaOgwhMKIDydSlHhxVMZIvRv9dPQA0WHIhSMRlix4UmBKgCv9teT3Ml/MezPp1Yx3
  013Oa5V2PgPj04kvCymXrTAq6MxJabeQxio59Oiupxab7UpVjCqsYJm4JoVDtKquqFhxCTJTsS
  uoTWs1lhDlAa7HppziUupXNtaeu1+fWKSE9Nggqwnf8t0rd1hauqXMFkrjWHFYtY2vWmViVivl
  vnQ5C44StEkg0GLvYYYU+kjU1EYIsVYm+TUQyRg/GixNsoLtJxQk+P4N3LeBAgA7}
image create photo ::img::4c -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqaay8YsfCXyrdKhjfcgvfAJOzCbboh08Y5IodLh4cWkudGuQVRMtS1r
  hlljdIPVDdiCrZJPR65ZrHajvOHz1R6Vz9XXPsmYQvVDNxhRCLH31SZhx4gXpijoSBgpUaKzhu
  aYx3hJmKlpdEf5ojUCmgcJGIkW6mkF+4jx9MAhyDcTW1t6+ypbGgrV5OQl2ju8xYvctEi6LPP7
  fBMtnVz9TH1dpo2cze35Pewd/jFOnnU+ZJ4OzN6z7g4ZP+08D25vjd+ln8u/78+mHsA3AxMVHH
  Twj8CEmhiWW8gQ3jyJ8Si6s8gOYzqNpuc4kvMYDuQ3kdxIajOpbpFDP7MgXgzEEiW9XeZQ+aJk
  aAc0eL1yZlviSiGsoA1XNZxjTM+bpJL0RJvEyVIdTC6D5bS1aeqnqqMQZenUEifXrmmi7lLIB1
  BVtSzR5jp2qJ7ScWWRKg3WLg7cr3ePKnrb1+wZJjUDPzxGcyyrnXKFyfRBy2/CQEUUb5Tz+F3T
  lbcy4yBsmZ/nbhVWvqAwKbXq1RMAFAAAOw==}
image create photo ::img::4s -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqaay8YsfCXyrdKhjfcgvfAJOzCbboh08Y5IodLhGfWkM+mDyDzxWlRM
  1hKMhXPdWtnLqI5RZ8XmqoXGX1sznBSZlyTnt4TNlvfzt9fnx/fB95Vx1KdoaEc4yNiomGiJ17
  W24zaSFhXkuYkVWcdpBWbK4RaSukjp+nmIo1oYO3orgzt5utukS5Ui+tukU0tMW3aMDMzsnPrs
  /Bp9M00tBnldna2N3V3M/U0mPmRNnnnuY54Oyp7svg3fLF9FX28/jq+nb8vf788L4CWBAQmuCi
  dwHT+F+hjic2gPIj2J8ijCs+gOIzuNn+k4nvNIDqQ0YwgvkjQobIcZgnAg+hp0rGVJOjMPQpIZ
  CNWpTEpiURpjLo0oVlg69VJGVCVPSTaZuoK1VFBRp2DoFEIECmvBS1KzQgB09StMsehyNjArK5
  LVOGfZplUL1e0yr8uYuExKZq7dmmj40pwahqLfN3RZiUT2xMrgb8KKLO625jAxvJJ/qaoMzo/B
  dptXVejMiMKj0aRLTwBQAAA7}
image create photo ::img::5d -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbCAMcDS9euHNe6es/7zxu9fMAiqCczKjXI5PLpysBARF01uJl6clZt
  S+j1Zp0sHKt3EUtx1xK7fQSzOW81tY61mOn4Ux3uEUXyZ9dBCMgh+HFYqMGIyCSUtkVocngiyM
  X3pvKXN6Tp2Gc5WtIUurbXOZfHaUi2ooopJzsGOdgYlwZrCHQbKAn6NBwS/EI8rIicbLwM1eys
  pBxtNE0NZH29k61tA92tww3+NV79XU6O/iOuTsJutfxOgyp9vlNrPuy6JO9XWtSP1L58Si7VK8
  joIEJPCheyamiEIcSIDydSpAfQ3r1ctOs03ovnsd2HgCIjlfR2kgbJlBZWsnSZEuZJmSVpirTZ
  Dqc6neh4lvMZ7QrQZaFk/hqESxNMjP5uuXKJTyDHpyFT8XJT0SoXkhKxDtR6geu/O19TYQhoMO
  lYDEKrgqpEFq47t2/Lvuqqq2nWuFHrnqVb9+qitftW2uXbKAwRqIK95lIcFvCuo5QgNTLqa3Ai
  yeAKc+6saqgzL6KJLv6szTPLTWRKX3NNTcRqFBQk2L6N27aBAgA7}
image create photo ::img::5h -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbWAMcDS9OuIMf1ft4wD1T5ZsEiaCgzKjPI5HJ5y/ykuleV5MRdSVHM
  9JKbhbE5bfY4soKJ1nKYzXmbz57h2vuWe/J69Lr8x7e1IQjoFwg3V/hRSNfR1dE4qCH59QEZ2U
  i2WIIZpwkiiZJmVkrFZ8LZmZbkiHryOto2Rkmr0ier6DibCLt7GFvbe2vZQ4pLGDS8ijf5BNTl
  /MwDuTy943mtlK1dxN0NTQr+9D1eU27Ogp4uJM4etP7OLO/tTn9uf6+er9++lPULn5IxtuDxYy
  EHGbaDKypZa8GQmKh6RhwaiReq0sWIzxIFbePoS5XBfx4/PglG8WTBjdMMQQFJQ9rIaw/D9aMG
  8yYHjDqZ5OzpE+g+oRCJ+jOaCymXn0Z5EnUqFCq9XlLfDaqazmXVmiVq9pEqs2uxZrSguuy47J
  VThZt2qWWKMqPCVlUwimRUspmpEDkn4r1bpy+ov3kPyR38ye8lmBb3aCQLZ13jTIq/Mn5MGfGX
  L5IJrhRG1+VmNvE8B4Qs5uxYC3avnD7FxtUyrOMsK4XNmenN3Lc/XaANznZvXaR1RzUOVMTwRx
  QkOH8O3bmBAgA7}
image create photo ::img::5c -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqZWw8axGzLyfdI0zpf62AuCfgqhMUMsHo87TFOTuEVZzxeQs5gpVb9L
  1Zrl2sTe67cWzo3V5TR0jYL7rugz2O5xx8Wj6HSY4oeHRAcYYQixR1hYd9gh8ffRpAdpV8mIVU
  hZmcdJMrnVFtiI2Ec6V4ZWs/gCNgcEO+gU+5CJGXcLeAfzFqnmi9ootyRDFKJK3PMEnCzFyNys
  FT0tO12ca81Tnd2CzX39vbQdHkweNG4u6Z2uyI6D7r4B/5s8/2qvXj+sva6lp9yPyr53AQVCIy
  gukMKCnxg2dATQyKVzDtVBoijREz8mukX6hELIEZYrIfge6mv2L2I8ZytZtpT2UmBMmTPJ1GRz
  s11OXTsb9vT5c+SsoEJT9fSDbNVOR/ZSPlyWSKlBZ5iYOpxC61WrpKsEGb1nyukspJt8bZv4SO
  Opr6Wi2pIwFhQuuGkvjn3zy21dvfnoCQr4lyvPbgctWgo1j1deaIoTD+zktIsVgx+fMjaD2V/T
  ymyH+qPaKRPRxhXNrSlpOjNRz1KPni4djvTqtLOxVKjthMKl3bx7TwBQAAA7}
image create photo ::img::5s -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqYhw8ay28i2So/3jusuDwTlFMGiZkg0Kn8YJkd3g7akF+fR2qOifFBs
  NclahLnfTm0q7lnOV3bpoV6DM5EtfGuHkCRac/8psRf49tc26MdHeLTB5/WVKEhn1VgoBykklf
  aYEPIyxyg2AhNp+ZnE5djE2elZKVmq2RaV6oEUq7o6lnti+6k0Wybq+hv3SGzktHu8Q7vMPOxs
  0xw9A009dv07nV3MDbTtrRj+bT2OuVyOTaxcBJ7lzpuex84DL+hGjqzXLv9xWd+v1iGAQSgVDA
  joHzByCqUhBEVEmK9q/GiU4neMXj5ttBMJmnv2EWRIhyNJloxh76QclepYxnPZDeY5meJozrTp
  7yE3ZSnD8dRJLYWwMjjvpLwVT6NRhBrtIBoF7tRFTBZbSdK0DYbEprBEtUo2J2ujnA1/Emp4dW
  CVK2fVGqpD6t4+snNvUq379E5cufgE6sXFBN5fvhPZ2OtL+M+PxQGRzvND9AXKnsYgg5pRLycg
  nF27AA2K9fNOz5zZruRsWDS6UZJLW3bNqAJsOhQo2b6NewKAAgA7}
image create photo ::img::6d -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbYAA/sTLtWDNO6asf7f+rJgESQEFdMZo5IpVJ4yXWGQCpvdKNKN75f
  9xrVWl9NGm5Mgma5Z7Sp7fYwv2E4C75NY7P0evuOF7QHgtdHWBi3YfOBmHfYWLIokAh5UqlHRh
  m4UijoF9fJuRmJZcd2ZvbnOal66ihqaFTaelr1isl3m5HIObMY6wQkyRusI1lcfIzspLyc1OxM
  BB39M01tPHhdZK3Nwt0NBr6dLY5dLk1+7p2uHt5LRNzxrQGsUi/H7oGqs7/6RmsPoCxLowiaIm
  VQIIlQCEtccogIRb5dDx9FxLXw4j+GzwM3KrTYD2PGgwlDdvR4j9FHeRM5mISlCx+geCPXzaDp
  0FfLdid52vSpE2hQoS12EtUw7+iFpEpDGG1qgalSqUepErUqFGu5MVrB0cGKcyHIpU8phtUXk9
  U+qi8D1jMllaTbMmabMOWIkm6mLXcL5n2bJ2lFkCu5Pm10FjFOwRoh4pX5N+0Uv7ms9JXrWODB
  uCsJu9nCt+ynHW1ZhSE705am01FFvyjCCzSVrtQ2u97aj7bX2bfVfdEdLSRwZ3qHlzMuTgRUIx
  QkOH8O3bmBAgA7}
image create photo ::img::6h -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbYAA/sTLtWDNO6asf7f+rJgESQEFdMZo5IpVJ4yWWaAiqIajWObsNq
  l4vEST9iWRm19Ua/ZfPZ0/aKS1Duqx2H49/a9dy/56MXKNgH+CVHiKihWPhhQ9a4OCVJl3alSN
  KIZrKJScgJJscY2FkaGuYIxleyx7PlSvqnkhcEi8cxu6KLips7NqMamig8BTRpeVfstAM5yvx0
  eQPt5EzNbH0drX2dzU3k/f0TLq5DXj5zjt4ivd7c7l4DH8+iTk9if/84/zuWNdjln4d8xNwIlO
  WD1b5WZ2r1S8WrQz5JyA6dMvQpE0BQ6fj4UfLUgWIyTZU2XlzIkGMklRgzxlp5EmVKXyRfdqRF
  c2ZEmaZ2ugQ2EueymkCDCt0xlCetY/L0vXNqziNUpVOHVbV1lV3WV1uxdjX6daDUsBYIdjWrbx
  FaeqrWutPldtqPiqsKxU1aM6Qvtz6JIou11mFPgYDHflT4UxjEIWZZwhQ8yq7hujn1OhY72Kbl
  mJj9cj58mcPEkpsdw50s0qTNWqNBPmTpr0vrxXjjOIx9gWDDvsoS8sJddvIqQIOJU1qTWzhbPn
  HRMVcOdUzzt9KhxztN1njy7FS5YxDhfcMEAxLKmz9f3kABADs=}
image create photo ::img::6c -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqaYwsayay3yrdIJzp/62AuCfjCh8QUMMY7M34XG2c2gvqSzY2Nlc9Yu
  dsndory1pKbRAlef6nO7hOYipV96mAo3k3Z8fDTVp/fhVwcxJDHmJihhp4i4pyemxOjBSOiWIW
  kpOPd4mFnUOTIaWjg6eYlZNqkECvSaOldTxvlF6/BXm6c7CPuwITnWmHcbx8RDFMJ63IM3zHzj
  HAu9Rk09bR3Nm42Dza21/R3jLV5dLkR+DqmOHs5O/I7sHt87NZ87fu+aLgoOHnwIYL00Aiu9WU
  ew1C6FCBPq65cmDKtnwABZ1JeOUq8I14kWcjRlqGFATxU1fvIYMhdJg1X4oApngxTFihKVLQs4
  66bImvkesunJj81MlvS0FTV6NF9SpUsjNpXz1FzUnVOJVj15dWBWnau2cm111SWdoN8+kn0JdF
  HIs19blsQFVljOobJs2rkYNyMMmdNiooX4E+UvkIOLgRK2ct9Hw0gQL377+KveyJDhUt040Vug
  trb+nS34t+sdupVrGSNrzDGhK3FbMhxJkfXn15BmyvYpVBuv215P4z6nhi071l5vCi9b6jg3hc
  rjNX8nojgwCpuqW78+AUABADs=}
image create photo ::img::6s -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqaYwsayay3yrdIJzp/62AuCfjCh8QUMMY7M34XGSd6kuaSzs5tCfdYu
  tsiytbw16nM5FnPPamSj+l6zt+UHCiInScyb/f0eoSfxJ+jnsUcXZcaHyOc2KJiR9Rh4iFgC1a
  YEM4L2xbk5+UEEVgd0Kvp5akpop+gIGOPiqqHJlYqJGscU5NQJyxtGhRuMs0VcPAOc3JPILOT8
  3LwsrVzNG31trW2UzT32DU0dnjvTvJ1m7P0ljFy43jcu6XlbWl5vO+pQhU+vTxspV6V/eO69A6
  gKoSWBkBIWHCKvEcGB+hhSjGcIosVOyqG8Lflljx3DGqwgzioZMJ0WebVYUlLmbiE5HvBmVrSp
  BWdOnbJc8kTyU1hQcEPzFE15VGNSpEtFNq0z7ymbqE9T/DpTdZ+SdjUxOnPVdZ7PlrDAsiyiax
  xalKYm1fzYcRlcf23eXrKUcSrQgw9fNXzRcqNCsX9l8t2Ft+/Nw/78DlbUL5/jxoYFh42LrO5Y
  xIBCtr0C5/JLyGWwtlMHDLToJ+cMg16qeiy3Xatnq6lN7rVUt7Jti8J9zR5wnCKkRqHQKLny5R
  MAFAAAOw==}
image create photo ::img::7d -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbWAMcDS9OuIMf1ft7w9eMJPzdMcIjcFIGzpBOzxDWf1OixMxVme6PM
  daPTfkvLsVfGy7W6TE/OXHpvQeU5U86Swzl1rD7/h8IGohdmUrinEcWBmKjR6HhR5leo0ihotF
  e5sknGpgYWaClK4oIXCgqY6vnyRhn5scoqJXtmxwmr+IkWm3RLN2hI9TTpOyw5+CRMnOzLW9U8
  dMpM1Zm0mEaKhF1z6cStivgdveN9TV6uPQROY72Nnl67Dh+fu3ZMi8+ehh9Cj2WMxT5U0uxB+f
  foWTuFsw65WijPw8A7D0dNK4WQYsRY3eokZqTV0Y24hhxHxoFEsmTIVxeJfAS5UWRLlyfcnZzp
  0SLDmhVTkoj5cycwVQV/5cwT8F6/fhOX2njpVEXTqFKhUvV5VcjUrBi5jvN6Duw7sfPIarVqNs
  NWs1vWihXmFkdSlsiIijF6ai1QQkJbgdqK82bfvC9tBg2caqphvoHz1RXcmJHJR2ozonRojibk
  nodX6uIZmWXfVgdBc9687Exp06kxjyb9mHW21qpjgy7Kt3K7uX50pz3p+zfHz8KHBy8eqo0/5K
  KbxM1KmHlV6T0qUKdDQYL27dy1GygAADs=}
image create photo ::img::7h -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbWAMcDS9OuIMf1ft7w9eMJPzdMcIjcFIGzpBOzxDWf1OgxI2NeP9mX
  DjXCTo05aZdbzo2JYeZGPYOj0+rScuuF1z16Oem+ltf31TFY9tfm9WZIyMHY6BHl+Bgo9miXOD
  dIcolp0qnZB6ZlpmH4uTlqFge5eojqpypquqcSK6s32QqLhyj4Slt5suv722s0JFz8S3N2hgSo
  HMr6LGTVXHfLI4kNap25Qymtws0inlS+cg4NHs7olK7+jt7uPktPdY+fXwtfLwTMHxVSA0P8S1
  bQQryEQxaSOVKND6GIkQ5a0tGvEB2K/xwcuvqhLViWkB0tapmn0VvFEutSomTDktI0fSs5yZSo
  soPHjyRF0qxp8xSInDpNPswV8yfQpBmHIlU1rGlQjkt5jcN5DKa5rEltGHWE0CvDsTvHsihrlt
  zXtC3Wsu3h9q0nuQLp7rPbMC7eonvz9v32d5gGtHshEbYL7PCLsC4JKSYGq3GXwwGjEptFuOfM
  RX7QKsVaeeSXskKnhsR4ZCdRn09BqH4pWfPgry11weZrOlXs1m6g0L65m+QWj7U535aSgXg2qU
  dRV0bu2yo1yM2n98JDeiL1iycnzQ4c8zt4NEr0Iq6k+C3EKenZxmqf9r358Qbpn61gHwUFCfz7
  +wTnb0ABADs=}
image create photo ::img::7c -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqZWw8axGzLyfdL6iPcfjQH6hhnhi0dMXoxG5ZCJ9CRuUxYUtJgprNEa
  1qaChbvNIjh3RpG7GzE6OzaT4K1tfTyaVr/51H7OJiXBB6Gm8XckEbikuHi4htjoWKNYIkSXON
  ghaQkJpUdZFrTVhyjISOk1ysMqasaaiJbp9krlehpKy2jayfs1m+ZkuxuSKuzziXwrk4yDSbSs
  9ax8rEstbN0TLb0dp6Tn1w34rXn91HiexGmuXMne7pcLPSn9Ejt/fO8kXssxre+tji9C9PwVbB
  MM0L8fBx8tFPRwU8NXdt5UNMRlIEON6BLxpOJIDNxEVb0KbTQ5rmQEiOUYqnFnEKZLlSgRysSl
  sljEWTovznxpzxifoCBHMePX705GpDyV5nvK9KksqfmiUk15dd/IrBi5qtvq9VdYfGPTlX13du
  OjtEDlsIXYE4lVqStJ4ok6ra7VohID6d1apVXDwADD9UH1Mt5OeaUu+ey2LmbLZ5DR9Z38eGJk
  my2FIqaZjeKDrr0+bhPpWaxAvD4Rur3Ld1Xr10eWxt4126hu2EhDf65tmxu9K/WOFiT+VvXv5A
  ZdM8e5+/la4Haly94z96qb7Gy5pxVhHQUFSeTLm58AoAAAOw==}
image create photo ::img::7s -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqZWw8axGzLyfdL6iPcfjQH6hhnhi0dMXoxG5ZCJ9ERl01y1WcSitL8p
  95igKljCL6xlU5WrQYfabc12IttHvCRha/LbOoTEh6e3lzcIJiG4t1FoWBMIsnZV2PXY1RZ2GT
  aSNrcQ4ogJiXS2hMkzJupyGip66MnBSvbV6YpKGGuFC7hK6uSz8znre1faiDJ8lGW8uzzTjKb7
  +5xrmyT81vs0zQxHdC1I571N+ScuXonznYqofc4u7Z6y+Qrv/nJoPV6HrF4kVa3ImTN9lwRC65
  dJH8Js4ADuwsapIb1Efhh2stNHYrd/4OEearR4q5zHdR1hTRpJruSik624qQz50qTGYBNXjpnn
  UGbDe6C48cypE1o6hMkOEgSl8CiyjEv5KW3aEqovolJRVjV3VQnVrLS4YvVaD2yPrVljkb1q9i
  lUeTVKif2oKmk0lybPUJ0L7mKab6h4LeuLLyEwl5uQNrKBMy2ra4xSiiwmhzBGvTElwQVZ7J2l
  y0CVPd4sOSLljaBD4/UMEgrEmiQ7q15NFHPbyKvFnH4t9MZtNlvVfirt9i1F2sL/BS3elRBy40
  WbL4cJ5GzTXtLfVhcr4rkaCoy6e/8+AUABADs=}
image create photo ::img::8d -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXAMPsTLtCjNP6acuWvwt6eoNXUYjcEI3JJsZ2yzmnRNyRcw1meaPf
  FaiJCcWtbpS5se7UqqU3bd2e4vJPVYqhg036egfKltHHMohiBtK3h5hoWJJIRvKoyAF10/Gogl
  kCOOlFR6jHZQQpGLpSuNn1CRd4Gtem+oqFN9Oa6kkb1pm5O2Rmm5bkB8I5PLVTaXx6fFHZROrk
  jASMJK0lG304bdpkrYOa5F3L2K29JlnupBlufr2ars7NfvwOP0UtJH6urKN/GQmQhT9WY3r9af
  cBH59cJAbmweZKISWEs+ottGiHIiuI/xc5ZuyIMSG5hhofrot00pejlCJZTgTpsaW8jzChrQx5
  cM7MmzFz6pQo0ybNnwYXCR36syA/JSX/IQpYhlmUpTMcRixatSkooFnv7QxitSZWWPHA5dMqlq
  uoZyOroSWqlmzZnv3ewh0r1+tRsHZ5URXYN9OzDGGlosxS+IUwo0AST1XqYVXiuJcYjpJSGOdh
  y1Mx2zXLE1+gsKA3KyRl1WXktoIIo5X0F/at0HQrfn2ZdmvMVqRvB2X4LnPt33WANA5M2bYf41
  cc7006C02IwD8WVx5N3fBGxNm1P5Tu2Pv3NxbCiyd/pnz388HXs6dl/rxK+dEq0K9GQYL+/fz1
  GwIoAAA7}
image create photo ::img::8h -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXAMPsTLtCjNP6acuWvwt6eoNXUYjcEI3JJsZ2yzmnRNwRI40CQdks
  afm7hnNWcaesjaFGYabRmlZ7ykV6CRzF0u3zPfrLFrfl93dG6DUUGJdxiKjRKAcC1Qf5AbmVaF
  LJ1bim2cl56Dmm9Uj46cfDRhb5VliSqjr26tqK6ii5uscBN9Or4hK7YbtCfBfIdyZkJls7RaVY
  +uw0eTMNfZ1tUa3dxN2N9M0biTsOVM4hbsqKrsdunB5tCJds/g6voe4OOs//oV/rFCV/mUhcYs
  bo0jFYCgeKAnRLmMNdCxk+tESwoEWK/wYFVozYbhjHjyARhgqpRF5HfCdN/lO5cgdLjcWW1YAJ
  LgjAnCx28gSG8+cMn8NsDg1KSSamUSp+FUOZ8qnTki2QrqPVEuoTq/vqYZSYqyRWkRfDbgRrD2
  0Hnwe/Zox31mNauTQnqu1Kdy1XQXcD9s3AFo3Xq2oGw40raGXhqXXdurr1mKlQIUQnm7Wscy9m
  LPk0b5Z2oTJmp6I5B3E5K1JpUjrwxVrNOOJcOaUNZ0X42jPfpW4Zv9vmuWxvrIuvEN003HbUuM
  rxNge8t63dkY1nUydMl3T0hv3KJguM3Hq9c8a30xvrnK8eNyE0C46NPfH6NsBPdJm5L3L6+p8V
  iylZ/RN5oek2mYD89dcHewDy9B2BBXqxIIIR9icCgj1RIEGGGm6YoQEFAAA7}
image create photo ::img::8c -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXwsayGzLyfdL6iPff/uL5hhqghUZM1jAwpXPX5CRwU5ZxKVXMtC3h
  NdOw2lRXJHNMRqO86nM01yYh30WuuJqGj6Z4ED/V5yckGCEnsVY3WCOhmHhoCGa3+NjBaFap+G
  bZGMlYYkYHsyeJyTfJmRW0iHXkwhPoUfV6GTv7sAGbhirYettJ+0ka3OvgNAQVsmrsc5m7vJX4
  TAQsPb1bzXxdq00YQ739/SMMqTtOaF7bRRe8zlvuLN4ufhcOzo17HzS6v8YPj98PgqFCwwZSyu
  KJ3DmCpQ6mM8gQoUNMAfecgphMHsB+/0d6cUymrKA6KvVSqSspMV8kbM9Qsuzy0pjLmIhOqnR0
  U9Udkjl1susYshvIf3UqZkTnBtBFkfEm/or4cKFAe1PdSfXVECpFdlWphmHa7Y9KsUGt6pn5VI
  xNtMSIbjzrFp/GrXDZnmJrd27Tnqx08fTGl2ZUwdkIj1xpWE/RxGFD2mVJMC/SvTjHPI67TW6x
  vkJtffSs6o/PhUfjilqqD1S+TXu7hlptqTVW1K24an3atSxnr3E0z57HkexP4WBtb/mnqefXd8
  CW4+191SSr53pTNmcz2ihgeGUCYy7lNTtje2fGK/xiXjr69IunB47p/D18SY/Z108vgn0LCpv6
  +wb/PwEABQAAOw==}
image create photo ::img::8s -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXwsayGzLyfdL6iPff/uL5hhqghUZM1jAwpXPX7AhvU5VxKUWyErGr
  lqmYhVvCa6axtVnL6rNjjc5No+AHCiK/R0iSquebtQfSd1fSB1gnYejnV0P4d7joxhgJ+Tg4Nx
  YUNtLGYdNJB7mpecQVYoo4ycN6ytcat+HapfoD65nYuDhb6IjrhAMUCpykxUvcY1yLTMbsvOwc
  rMvnM41Ja/2anZV2rActu130q10qKRe7Sz76nW5r11sO/453Lv+GKfiqrv9ZeX1vnr9LtvjVC6
  Ro3z1U60ilCGWOm7ojqcSNuRUPjjRx/OG6gRv40U00ZCFHrjEJrCRKe+hU5kqDbSOtbxR9lasZ
  UWI+LhC95erk66PQfyD7sdtpdBzBo/SSrnLa0aC7ovgUBmz4c6rOqz7DCQTYLqclrFFbdh171p
  9Hjl5dYiHDduDMLtXErFTi9u5WvXpE8tUI5m+hYaYEcy0MN29Qqqfyps2HsEnIixVvorKZNYhB
  hqKU8gxahc7QpZ6T8hqdMPJBJuOkVmX8mmnT2LA770VLu+1X2bNt1wYkOi7ox09zxnKpFSkiL8
  IrNneo0ww6mdHZzKiL27pheYG3F0T81rta8IpNMhefXTP6yN3X53GfowJ8PhQO2b+Pf4GBAgA7}
image create photo ::img::9d -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXAMPsTLtCjNP6acuWvwt6eoNXUYjcEI3JJmb5OzqbRJx0c91lUSNj
  jhMThltdDTBj1X55ZcwYbd2a4vJhO22m1z/6vfL+BkfH0sc21+eHhchVghjI55h4YfPT4ahyWU
  L56KZH6MkYxSka9zkYepqHZ7qm2ZWqesYqqeECqyom6+qla5ZE+9cJPEWGRnxMeaycrEzM3Oz0
  TDIMQv3UdmgN1gsi7bE6A757ckteaph9jgk63shuXm6XHv+92A6ZOR15j/+uX8ivnzh39Dh4U1
  RwD8CAArndcFjQILZ/EFsJctjhoKWK/wO9sNBoaWPCGSBXLExSEp6/ICkJ2kPS0mXEjxODnIRZ
  U81MmuHqdXxBMic+nxhHdRMqsqhSo/JUMr1B9GmweRZlVm1qVeq2ndeo/kzK1ULKSMPIMty6su
  HXWkhjrQV7NWPbi2/R1u3qFKNaFTFJaaNbzKRegjwJ/QoKrVnfxOgYT1nsGEsGyJGF4TV5WOCk
  uQhz+Tm1+G5UuEf6hkUYFzRnXqLppl4T82ZWjpervZzNNMvYfbjjsvXq2666o3m1ov7ZKnZa2/
  HAmR6+ruOo0MEp1uEG2ThzuLXJZRYuhXJkIEDEOyYffnVlOEzEql/f/uFm+NFhv6f/MJB5/PP5
  7w4Q4V8NFEhAYIEGEmhAAQA7}
image create photo ::img::9h -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXAMPsTLtCjNP6acuWvwt6eoNXUYjcEI3JJmb5OzqbRJzUCMyVtLcY
  b4T1YqxFMslsLtkywK7VzeWQy2nQGjuezz/6PWn9ltcXtzEYaAcW1aZoeFXYuNhx1wEZyVaplg
  gCedaIosnnuSn6l+glJqhnYvjFCKfRpxLbCneYinriRzsLS5jrW8poe+m4gktbazkmVPx5OzV1
  dwwtNNlMvTOJHQ26ze29rU2JCixHPj3UPZ5T54E2nL71Dk/M3h7fyemOGZxPaq4PkbyAAP/hG0
  XwUUJJ6gry2scq0yqDDlVJnPgwVMYP/+LW3UP4kWNDiOU0lmTIYhgXQvQEplw07xi6finrnbp3
  jWaQSjlbjDTGr9pPWUGDdAS6sMZQd70iLptxFKJNi3hYRHU4VeVJlES16hKm7OBAnGS/6gRp1i
  vVsyQzyqTI1d/GYkk5XAW7MetasW0HmXQqcixghXCVLMW7t2lhDXeT0WkZ5ibkDI2TWUb7eKbh
  X1k0Kw6DDNw30dAqkw59uiblw6kBrm79EpdpNsz+ApldlYbmWbhr6S7Hm/WtsH2bBe8asngkez
  5MD1Y+TfKFynX1Tn4tODHhvHZZ87TNnbH3otv91nsyvjritHEaf4feDp37mJ4d22eyOftl2/vB
  ojnnLMVWqYCW1XTCwRYFfiEciGBnBiL4i4K9peagBROepsuFGLbHIITdeWhUBSBCRYEEJp6Ioo
  kGFAAAOw==}
image create photo ::img::9c -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXwsayGzLyfdL6iPff/uL5hhqghUZM1oJMpXIH6yRwUxbSxolaFdus
  MNPYalHfYNnMbWFz3zF4zXaTrlVpWowkx2ujOmgKmPdzZhcxJ6H3Vibht8Eo6KVIxzhIeSjZ9l
  iJeInhBtN35wHKBxl5FBrq6cLTOMqKSmgX6+BoSib71wpRJKoi12no5AMVwjc8JOiKfKN8y6wG
  Lf0s3UNdSHV9+usbp92rBqwr/hrefUg+y51eeD6Ilzv+/bYXGK94vKyOziv/kOivX6xVlnSVeC
  REC8KD99AIC1NKmEGGgCI6hJIi1bx5/8eMdaTlp8quhqti6LPohaQtePjsYepCpCAxlfwkWqMZ
  8F8ynJtsZmPp0NgYdtvW9Wo1EB9MikeSEjza9GOnmkJFDeWikea3ha9klqspMCWniTlrdR37jm
  LYdjqnosu3MaNcnByDmnSX1tvJs3uLqu0rFjC4dXj51l1ijifBw4jDZVOMqhozxpLdVnZM7/Ld
  M5QlV6zTeVo/xkTZHjVLWXBXWzo5inQ6LmrIVI3jfi4cNOvLkmDbBg77SSVXtsB9bdVk2LfUyH
  /N9nRO9q1LptMZAr0ulrde0nB2M98OGSLUweDhmTofHjdf4tqNNnsmPrTnhPQ1LzVin02Txvmt
  fxuXX018kNl3VX87GUhMBQjOQAFCDj4I4QQAFAAAOw==}
image create photo ::img::9s -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbXwsayGzLyfdL6iPff/uL5hhqghUZM1oJMpXIH8whvUxXS1kngtCwk
  xvtVzMSt6hF8jlqxuak681g31mF0LV6KtFESksScBcjx59eXJ1j0h5hmCAIGqLh41/hTxVVHuR
  F5iGkJM8I2+Dlplxj0NnnEWOjCQ1bIiFq3VVoZ+wqHK1cbeHvp5AMEKglMN1uc5PWL3MPL3Eyc
  FTwWs1wWrYmda83H7ah9qnso+71LLuVgPJ6+PsfXDcEaz9nOXqlH/02Ivl8uj/9iW6Ze/+al6W
  TQVsEQpISosTFMnCh4qlL5CldR4sQu/2jwbKsGLpwnj7E4JhtIJeS9hNCIbBriDB7AljAVuVQZ
  SExEbyZvtlp1kyPPoRoVXstZiqdRfa6ArsyoNFc9hqGy6WyYb+VMqyiz1SPJdStBpmIFlvX6ta
  qos2gLutNqz1/aqAjPbZRZdK3apV+F5r3bhi5SnDGt0sK5pNo0kM9qemocTBliyGeoOpwMGU9h
  s2O8aUYsmN9gMptJO+XX1KJII2RBYUWdYqfkX4VfjgZ7R6rbuGFZVgwzd29d3mNbv4VNvDjc47
  eFt90duuE5XJt9VZdu58116X49dyT8F7byJkdTLgq1PWCz5eQplyGf3n3i+fHds65P+T7mzGzw
  5xanvp98pgjoUgUENkNBJAouyOAEABQAADs=}
image create photo ::img::ad -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbZwMay5WLwjJ+1NfT5D9oJejegUbPz+Y5M2uiiLDaNteVQOs1VicQs
  9ckNe38uKw87ZqW40G5atnZfzW+VsP7FT+9ovf3Z1udXksQ22AIYRncYlKjIqOMoBkkIOLdI2S
  Ekl9moIdi5cReKYkkaeapmmkoyyurh+soRK4u0Wjt7i2u769kLq/vrJKwZDASqZZzDeUSLM8nk
  LKOIHCPNQo05c72SXY3Y5K1trdwtPg7OdN5cjp0d3W5ODZ81T19veI//TZ7G309MVLxa3AgOlF
  UQ4cFXCRkuZNUQ4sNUESlOPFUR40VSZRkPoenohxlIPNBCbCT5aFgveyZ/sRxZpyTMmHRmxuQV
  EGdODDbDyTHUU91PN0GFvihS9Ii3C0mVplSJy4qZpk6vZKBqJMrVkyg/cqXplVgfrEoF7tx6lm
  eFtBMMSHgLN+5bAwUAADs=}
image create photo ::img::ah -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbawMZyOL7zfbrYwOP+p7vwYL+iJijo9YxMWkZJbBaDy2RUiqMOh9if
  bgvuZmvW51XMcm2FXHRM3bZW3SokfUq+G+36MRsW15dTs7YmOGgBZnhYAqd4xujhqBjZSPZYab
  mzmAmUJ9ep+RQqStryaVqaioK66umKCKsqK9lKe2R7i8Gnu5vb6wTMwStMLLPI6WdESen1u4KJ
  6WMM/Sit/GN9fUOtot2M7fMdNv1cPY7HND7HbX5uvef+Tp4ute3cRR8vFrjP39XtVkBaA2UVhH
  XQVcJVC1M1NPWQVMRQEztVzHTxDqSMYm76ceTH6SOWayKbaLNQUh28YLROspRVqE1KlYCqzLxz
  k05ONztnIJMp79DPJT19nrEZVOjKl7C2FTXKxlcvKBmeQmVn1ejGpJH6MW25IavPsFwZlnVYQV
  hVChLaun3b1kABADs=}
image create photo ::img::ac -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbayMaym8HyfdJXgvekbuH5hhxgCkgkGkfIpE9HazpvUMY0GXVch9ma
  bUuFKXZC8ExcHpvPa7O0/fwG3/DSslxvyRf52J3e19HFAxjoNfdgaIeWqAjiEuH4aEMYUiiJhC
  f5kXm5afkZFso2yuJZeoiqcqo615oj9+rB2kqraouKW6q7GMvl+6v5u9Uwxctp5XQ8m4wFHCcc
  Z3xE/WxqfR05rCSxTObcvR0sIT7OZBnth50dhOjs5l20fpaOE+94r5hvuB/Y3/cvT8A6A+EUbH
  NwTUJ4srzEWthDGER159LM0wfBlSxtVxP1NOqoBx0ojQ3RLSmJ6CRKPhhAUnxxcWPMVy5RWIQ0
  E+BNNCVVjpRZjCRQNUJpUvpScxWTPTn5LU21shNKd1BXbkja4mrTXFt3VZh6lUK3sWTLPjBQAA
  A7}
image create photo ::img::as -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbZyMZyCGP1jJfuleQ+uLP0fsRNMBUsFo+jpPK3i96ePumCuoQ9sFDt
  1MllIYc0cPg0tk7PKjO7un535VRnnI7+uvHA25XfUtMA2OY1SKhjyICYKOSQcwfH00QDuTeTRI
  apUKcXibKodBnDyZn1VFr2GSja46qJM5qXRjvXRfsq23fblNur6wEc7BuiarxpWUtsSrrap9xr
  zMwqU/paDC1s49xhPVZW6c2toT2ZDb4MS1Iu7Ut5JV4YiPuLq1oLOn+fi02fllfoHzx099Cp6z
  bOXMFvDKPBA6bNnTSC4n7lA1XPkUCD3y68NcLI0d5DfgeNJOTYLkJKcOtOkhQJ02JJci7xLcRW
  UKPFlrP2jQw5aOaLmvUWbYHAchfGou6MBhW6LaBORSGnary41FPHrbD+8AyI9OrUR1hnkc3pc9
  pXMaHMZWoLsJNXIuxazrXV6hDdk4m27GVkCXAsvoKHFrZr+DAQmooR9pvU2OShunL8Un5jmTAf
  vZcrT+vsWU/kYIxHlzX9ATQj1XIFDWGNiowp2LETV0Kd1jXusX4005ESdXc40cK/BS9uxzcedb
  S5xGmO5bnywtB/VxDOYYIBCdy7e+duoAAAOw==}
image create photo ::img::jd -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP////8AAP8A////AP///////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vyw30AN+4vNU27q+6Xe9HJAU1tKJSdBQkl9BO
  8xmtTodV6HVj6XolI9mTegIFbDUneq12Ns3h8nhYNrOTeLS7Pvvw/XI8dGFDVG17H2lScUKGbx
  xngpI0f0g8i0yVUo8aX5UEggSQjJkFmp0OpmZ8oJKinaQ7m6qrAaa0HkGtoVyxalgMuLm3ticN
  JQ20k5clsbuvyMJ8xcTGLckny4LNmRq7NK/BdUHUxaOdyto9p1yB29HW0sTSXLjfNdDsqN68yM
  nCJeZNq1fnHrhe3fgd7DSggMNjkAS2K2Nuwz1o3EIEUYTK/xTEiOXMeKzzDqHGP1hKNGwSTCIq
  YwJu4eJoclUcgAEFesxli1ifXL78rBwmrpiNgQN64twUlCdOpT0jUWrA44HGpE2lDN0EQV1SYy
  OJ6kN2c9qZYw8mQVD1MSDWhFdpYft6zQK8ljKKjeXUMYIpunUj+DMXlW6BtycJjXzwF0IzmFSL
  iquhNyskvWdTZa6Q9OvDnAySHt5Lui5go6HPdlZ9NmCqh5XhwnncWPPXhrgP6x4a1d/D0ZYnxt
  s8OfXq4/F2aiYd5iWx07VZI/cNGyxim5lCi8Zm27h0a9Gq75Tth+z2h9Az584NPvmt64DKUh65
  svt3rHUXx05cSk453P+MbTZdYKgBR14uK81HlW75qccaWVGxNR5/Jynz32hp1cYeWpOJBh9Pik
  mFWX2+0aAhcRGe4Rpz/SHxX1e2mOigNXNRYiCFdvxlo1VpxZggjM+hwxdZLZ4H420+hhWMYSLe
  iF1ckWA22G6pYegAgEGuGFxfrn12DXJnKRejlTp6yCKU23GoEmtVZmjkOhM+uYp+Yq4JZprJMK
  ngmTlCBZl1u2GIZ5VBXrPlXX5CiNxqYQbYoQOHnsFWS0ouKiBmbYaVkZyALBbel/c5qF+ag0W6
  UnWguRXoem1eSRgsB85CqWZ2horkqASaWpuXsDHKGaabxRlff3sWRddjj/WoX57/fApFX2+YDs
  ajq8vux6lTFEVVlLRgUAtRjM0iKM01y6oFaWTTCAtii1xN6hUYUjg57FXspEUZVfPJ9JS6TMUa
  EXqbZqOXR/t+2K9GiYAEG7bz7Dvkwx5wFGGy4zTMErgdpATxDMz4dko5T3HHMTB7cXARSC8R5N
  NlSiH2TDvNKdSPazWB/Ie2EJ1MJMIy85APLumGRBBYYkiyDxOWaCNkzS4draUAOkPsVRJScth0
  wBO+7PRsXgnJIdEr+xEnTRtDPQlGj5TDibVOHDyb2a5cJpJVc4eLSc8DYPRSF9lFmnHHkExNiS
  8dl90IID0YQoXB5/yiiOGy8KRHHm3goQ9JTYmvUzIKoVV+xxpo1CuEJVsD4snpdpHudhZKGFI6
  60S4vjPsRcg+JO0r2D4W7iroznvsNM3+OwyACz+8ErcfH0MGyiOPAerQR0+BAgkAADs=}
image create photo ::img::jh -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP////8AAP8A////AAAA/////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vyw30AN+4vNU27q+6Xe9HJAU1tKJSdBQkl9BO
  8xmtTodV6HVj6XolI9mTegIFkjWn08ZGl1Fvc3k8lDU457YavXbOaQQbBGkacR9iPHUDZQEFcX
  k7MzstiYGDPIVhb5hci4UFjp2JozSUo2uJJZphniWgb1+mpKeGHk1SDq6hn429u1xIs7Sra5ZP
  J2y8XI7MvYUnf8KYtbiobUnIas+8zaEt0BqX0gOB1HjIs6rgrozdzh0GguOBqkzopCW5jbu+/Y
  fh8zLZEyCOR7lW+2C5+yUl2Cx69UIgSlUC4atl/X61MKBD/xgeYtYUtXu0EJodD/g+DhSC5YxJ
  WAxK2vpAUaVEQ1gq1trnKOOjW6iACbzJylBCd+9sony2aB1RJq0wvnJH6FkuWzWcyikq5dVRBo
  kaTL2IlRFIM1GXgWqWh1TCpPnAml0pMa1VB17d8tTYae7Tuj/Z7F0LgbDXoVYjboXK6IGNmGsj
  Sz7ctLE6xYfM9UXk4DHkyT3vXX2A2ZbmQouorOnsR8K1zggznc6nqYHqUrb36M5quw7p2UDVhr
  5d2SWE4rfv+F0scWxP4rZhVYZuuXQ1JszGgsWC25Nx6t5oAx8fcx9y7nKbcm9K+Nz4MGrZ5x2i
  HuyMzxdfvqdrfDIkJP+5BTMYWYnRZYZs5bk2CX0ThHfVX8zpQs1/d6x2CEMVQpgZOAnF9U0e0j
  XlITQOZhjhhnh449WHcYknloo/7XfTN+xIaFlbJj2TX4nBbWMPjc68tQ2OtOWzI4cunYUiRjay
  qJx+RzLFUGa1ceiNPiCK8qFyKw5A4ImmkTThMZxd+NxhBm5o5QQMMijBmaEpGWaK/lExnRADgr
  WijHIAKZl9k3yHJ096htZjkTPS+Rx6Lqk3A3IrfkklE+Kx85+ASX63HmQvTmkafEVu92h0m126
  GqeSfkqpOoBiKtdxsI0q1qG0jrjJecnk2pqog5o4qUT1MILbdoIpeN6odqkKLGn/HqbRqX+UxB
  pXstcty6pVnoGmbbTMJpnmTL425tWe+BFWLB7UngOqtxENRixv5DbBLpgN6WRiL4T2Bu9eO6XL
  BXCoTWhYYOy9Jem8vx5I5Jzy+jSVUf76uKxxSABrS0kHR4zogUNVhYshSLUnhV051dpBTUpx04
  8OyqXlsckscaISlz6lKOytVcEcksxPSuXPJ/y0khLMBZ1iHTvuqHUzQaSUAzDT0tAjcM0Sjriz
  s08XPQpEO8lU42X30AKw1k3LJp7XHakRtjUb/zMOJzki/fPXyfxhTA+1vk2IUV5XzayGM+mNTS
  xKByxnQ/jg8640CgUdB89PVwI11vRJIqDNXoY7tPfTqEAkDmp96CF6WhV21AOZoMJxzR65ouHv
  rcFI3GcstFcghLJZLKGa7LkXsXvbvf/w+6HBrzD8bMWrcHzyRMjMO/MvOA889EUQT30MGVyvxA
  UK1O799xQokAAAOw==}
image create photo ::img::jc -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP////8AAAD/AP//AAD//////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vyzlwbcsbbe8rnp+8IMqnIQqPHaMRyVQCmdDi
  8xetOn+WrBYyknmf01lgMBiTx2Y0uVxmdYFf6odxrqfZ7HBpqU/CHzltHg1ndA5lhoM6M29YU2
  lJBARma5WWRBFJjSKUj5NbepmMnH1ii5JLJQUBq6uKgKMhPg0zBbZgqKWsu66vSpt7tFK3WKu0
  x627psHMRcCwqsS1xy0Myb3BFM6kzsfD2EXYj9d/WSWNE9Hg1mDTyVLmpVTp1uLv2+G85Rbn3P
  S29pQ1U6Vv34mDOuRJWYgQnjh2IApKE1YuBzABBgIYqDXx/1aBc8II1nPSR+GeZcXgtDKmaCUX
  eL+4cQKo8haaGWWMGTvYr8vFOTTL4Tl0JuhJRDJlmYS4Jw8lRGsiuIpaEtycpT2bqrGFCM0fgg
  LIFBhwMoc0pW9oqKETtVk1YgMAkn1A8+eghVrZcIXDsC5XW9lYnY24lOnapzje7gwrN3DdpBHB
  5h2zt9qJnHXFknE8+OqbiU4rIbwsmIYlzlYV+VR2mPLYansAZo67mW5n1aRsGiIUtQ2aZLTick
  VduEtQCMJzrpXtdyxg26n9GLfJDPEu5TuDy+UtOLqY6eKKJO/enflU2ng83pY+kxgY6yOzU2Mr
  +jHa9ix5usZsnrkXsf9jFbXed/jp1xRVr+20SlxgWNKVfYSBB9tle9EkSAlIBcIVUuTZlURd+o
  nWoTc4iQYShJ4VqN9+u1TT1nvjgdQhZEDpRkhlfHUS24I4OoAibrKAiKGJ8yhmjIn6/chekO6Z
  sZcYF/52S3Ig7eidHEzu5CAYCTbAI30cnjgglhFZCOAZZvXnX4wrKklglk8VQoFLvBVi0Yz3wb
  mhk7WpuRKPr+GDZ4QFyincWIHpoxxi1Q2aIpw0/PVReRb+xqJUY+IFqXbD+XjdQXjI6dVIxakY
  HHrqGIXQeIb45kqpm7Zwmo8LVidiHuGwROMgx8mKanljnHTja07lk9WjZdpIYaf/I5V1YCG4ig
  RrsvIJIKk6DfXDYrFlTVtjtYfO1SQ8Q0J700t5JvsIhX0mNOp43Hbj4TRXrSEtUVBRxW2L85Kp
  yFwImdnVHRQ5CmRkJKzY4oKPIPKYwUsibEpitvHrh0cqhTSQsxKjJIZuD/HkUq5WhZGKReRq64
  VN9/AaUotfZXvyNoCM9gU5WORjT5OZzCyjOQS13JM+aVrWM1Zb6CyQoLqSbHPNSGuh9DpmmUzd
  zyr7lKgoQfM7X8n2QePze6NtrM+rRsNcNNkUaz1xVURfhUqa68yC1dtK4Cw3AY6MfXffJGkxSY
  kXEiqLH9BI4eDiZcxd4rptc+JLKF0NXHlXVXNECcvYV1FOsB11ZAhkHBzPwUKoauTRm+ia4EW6
  UqDEzo+m/lYhxBW2NxGKSbm7gHvvt+8O/BG/D3+DxqUbHwPyPitfQ/POx5BB9MRjIPv12FOgQA
  IAOw==}
image create photo ::img::js -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP////8AAP//AAAA/wD//////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vyzlwbcsbbe8rnp+8IMqnIQqPHaMRyVQCmdDi
  8xetOn+WrBYyknmfYPAgMCiTyeO02dzrAr+5IoEgRp/XdvZnOnNLdSUldAN0OWMMh4gNeh4Ne3
  5/UycBg4WGZZiZmXyRnJxJn32UZJadFY1cfSJLqpSlRUl0sqOoEaohRHxhjSVvs7OgE3Grkj6+
  r4GTk7+0praBxFg4y6RTBY3MpVmw0b0P3K6Se9lvWtC4yra7w9ijwN4W5yAtwsfrLdfu+s4S8n
  vpXKgREtcrHzlTyb6FotIrIaxRA2/lyEYHIDhH/lBxMBDA/4CoSsXAzNE3Z2SwR93+tDIpUZAs
  imEwttS4Cl6xDodgIsMFiecuB9cEbKo4K1yKhVK6JLW5aFO4lxWP9pwHjcYWYUpTUk2X8Co9bz
  W1PnJklZxZrjKTTP2XKBnTbZN6HeIlttGhMfBKaNqrCS0mjGn/uTnzVRmhMgQQKz4cd1IiM6OQ
  NiSW0yKagYkzU/oLtimDkqwY4qpcqHG1zHMws2kMeSSgeZIbFLVZCfHmw6vpyS5ZMbZvZsp6k9
  WtzO3uBztBdQEu+3Nj48aR8ybq203RyuHQEjf91EHUurFcC43s3Ovn6dSrr+pthijoGCOFD1KP
  rsWY9BD56r+P/jMj2P+DtXceaObp450da6GSGHmR9RbVT8H1lxhn4M0wIWb9FTdNLw6W5xxkCS
  aBGXIMXjXdh21VOFGD/e2nH3nUDcAhffPcdyBLPfCGYnkhzsDiiQXKR8aMyflo3Y29daVdhOWR
  FtpSuLino0LQPdcgie+gs5x0ZDk0HEA8Ojebin8ASZxei8miWIlEBkZTfechghdrqpWkWmGCRI
  YXmRy6BplftmWmWm70VDQXn00+ZiVuEza6ppWKPDlZfX9wRpaLe1l2F40o+TgXd1dFR1iP7JxE
  1lkHWfUVosSAGipaGSkXVqsFbvcQqdyQMKA7hjqVihe4xjoOdTFiokEBqsbBKV3/ur5EEiKydi
  KsaFQFM018vBrVkrYhGTmrj7ro+Is2xixY2kYdectTXlUNh22WpW5GSzkOTboVlb8ehOwbFtqo
  pEKxvdVPnswIkA+9clgCZrI1bSHHs9VCufBwSjlM8D7MusTvW1BWu83DBXcQlBz+xjRNwAJ/A/
  I+eFqoMLjqRnyKhRA35AkYasXcacrthFyqxrkC+C3H1sYzUcnB3uwmmpjuSfK84K6z7kl7/JkI
  YWccDTVC9u48UxFrpJHH2BO9vBQcQ3cRtth4/OX0hmcjDGetdJ/8ZhVIXIF3EzfvzffdfvOgd+
  BBDE74DYFJeriuiUu2eA2KPx5DBpIfcYECB3VnXrcCCQAAOw==}
image create photo ::img::qd -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP////8AAP//AP8A/////////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vqw00Dd94eQp1n/+snW02ABpHsiGveGx6ksyl
  c7qBbpTUppWYnW6lOot4DEEKo8NTgMButwO0nVpH2MXM3LzcXV/DB3OBbHYgURyEH1A9THt8g3
  FVagx1IjVPeESWGnZrb36QJZthlB+LHYhPqJqcjgyAOocOpBwFiwWHmB1pVZ51caglgH4dtYsD
  t6IiMlenvG6uci0OwsMbxbZVuUuGrH2+r5Lhv7PGpqHKdtfI5yXPcMvJwdSU5cbsIDLXNMiNk3
  9z2TbV8JepXjx8Z8w1GvQuFKcqA6sJ0FdjHbBYGijya1en/w+kZQ0EjktXzmIudQE7uXp171QP
  ghmxBQwBT1O8BqAabpL2TdisbVhaptLVDCJLHUf3rIR5JajQUxdn/nMWkmowpswuoUMi8gHHPr
  IoyYpalCZZh7/ChOvEcK3ESIjOwkv0L1DVnSClvZ3UB9dWZR/d3oU7Cp4flQ61JQIkNqReCQ6Z
  sh2EV3Eqgl7Xqg3XjhPMw5ah+mksLbFdxwyhcpw7FB1YUo4db1bTNi5ouXI9+hP8WMZovXB9h4
  71bvTrCTu9afYM0KwZn8Vr021L2ndp3Eigu6JTOyzOYWNFlf5r9rCwImFbmb+tUk5i8giVn+dx
  GIIn9K/BBnqKUdnxhv/o1cfXbvh1JBYs7sGXSGS+wMFDZ/RN5hF9npRxEF1mjPVKgPTstt47YJ
  mWoHPKmDYhfif45M4/ykGGHToP+PKghxHUQABjIF4XxnDZ2CUjivUM0AaOKQrolYKX2eegP0Ky
  EeQwRRBpGo+V+ZijkBFJ0FeURrKmWokTyDePOyg+CN2USBalYwMNRsfmdqChR6QDVLKj5SMR8g
  EnPfRJ2RxCXEXm0CCUadfdllfV9xOGYEY2IIF86adhhET2lSYuAD1Kh5sSVlgkpy/ShOAm+nU2
  5p1bvqkTiaJytllnmibJEJHC1Omqo7TthpeSA+rmZX+ivrrTprDR6eKHi7bWKmj/xCFWxnK+/W
  ers7ZRltmUy3U0GKNmwRYiqZxlJltmpV5K2FeUgXsdcr2ZGio+gyoXS4jbzgbcVOYeFKu6O+7a
  bGRp5dtSvUaO4qlaSIFjawoCrhajtdOw9O6CHhiiLjjp4pUxvvxFEigHNl18pp21duVXVh6XCL
  IPvKyEY79XdQXSytzIRYtMsL4UbF3pkrRPysFOVFLLf0iclzz+WBtTD/zYvDTO5oFiJ1qRwlbQ
  Kk4HmYZHUhOiRhzeWC0008OWqLUl9XUNlYobW1MR0PACVQ7Rv4SLdNgPNVXzxxT9THRxjwlU9S
  yIWPzrTH0fc4pudIEdad5OwaLy034fIilGeNHpGVDIZQd9NT70JsNi1XnLDTfFNPsXm1Gd9nx1
  Gk4T5d+BgTguYYJKwP6xC7edw6IjSoMBxuG7kmG8BXkMf1YXLuTOyPLMq+B859H/ML3k1VuPxv
  PZA3E98d2jMDf24d9gDvnlHwF++jFkwL4RFyhw/Pz0i6FAAgA7}
image create photo ::img::qh -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP////8AAP//AP8A/////////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vqw00Dd94eQp1n/+snW02ABpHsiGveGx6ksyl
  c7qBbpTUppWYnW6lOot4DEEKo8NdqHXaNQaEeFyNon++aRG7xH8TAnNXNAUbBTVVZkQ9THYcDj
  pVDHByZzWEhj58emqLiCCAbRpqkn9/ij6LNo0dMhyHmk+gdGwBNIFLqbmwn6t5dwQDqw6Tlbmd
  q47InqyAwQ1hYbamxrrKomeXvqzAzm20b3AnmNSDu3cnqIeNDNyjjtFq48aE5rG4qfXN4ct9z4
  XkA+hZg0QtHzdTot6FoUOOXj1mAuRZMmjLTat+/k514ndO/6M2UQcR3rmW8d4rjvY0ctT351sV
  hA9cZVK4hiEWO/rYuXkpsoyikZs6REnoCJgskSXmtIow41MiPdtOtJTFbmrPmFCDZo1EIGkDOV
  NBwXoUCRLRmkiSlSoS9gEwAVP5ASoF8+kannO6znVACa6EojXcab0bpuXapH2JldzV7NbAiyPn
  gs0bp0gtSt4SZuZrKtRgXl+/hgXLd08VGpJDe0arZzJpi6plJUPdV0dnu6CpivVWumU/1FgRr+
  aFxLXShddKyahFO5DbnZ/PKddJS7PsNrQDlwhm9mGy4sZD1Voue3uwg84gLcV9DpThZzlBis8O
  XDzRx4+N+66KGpp5lv/pmQYdazWNRgtd3SxHX3/+NMjeE+F5Y5gzSklyHhwMjsUdfmYYFhc75x
  lVVUsXdgONhelFByFpJjaT02htARfNIhxuolOGRxlFl4fM7YMdjTWuQUlgEs51nj7hWIjZj8Ah
  1VFrKG44Yn3chPMHMfv1mNqDzKQiXpV7pXalUrcxpxuXjnhJS31VlVaRj5JIdguBvBB5opLjpU
  bKmN+QCVlKd42HyI/AXJmgUklmGR6anjTIRg+Gwrbndbr5piIr96l32ZvcnSjNgYteqtBOvNUQ
  aR8wVVSYTnGJukx1pHBqkaVxohoqnUCpt6GpZvaz3zWrsvonRFnp1saQ/dlW3iP/I04WpFN7RT
  JMgMq29WVpiwEKLa3IXkSdscnp92xkVHX7zrdychbbsN9BdWxY6mkCqlE8UCKud2UVWxlSOIlm
  GWn1HuWgq2f1yG8Eei0Z7Y49MXofZbNI21WSCAds6VnEbVWdtO5UuqQpF2P8JGE1keVVm7EljJ
  PD3jHiU2H8vrcPTU21S7JMUbwc7cN4YirIUOyitBFJy13F20ErqwTsVh4BTZYyRs7siS7dOfUz
  PhwP1yDST0SUCyFBnyXR0Mgx9pKqmBYUtiZjL+IQchGDhPY7aj+mQds9OJSn1qcl2XU6qtiNt9
  tJscnbjE4SVQ4mS98FkA9Rw/fNZcOO+/fji2lUZnKaiSs+VL6OY85IZQHOUl7XuGg7ki5Uu2ei
  vF6RPPTaxQTkdSZyvq5p0LWnYbciDo3Dk4t7iGfNGYI0bnUKcopIatVAKeG7GWRUPwYX2K/dhQ
  vSu7x9E90r/30O4UM//g3la38+CekPtD77WKv/vgizuz9/DPbfv4IJ+h9xgQLWC6AAxaCABAAA
  Ow==}
image create photo ::img::qc -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP//////AP8AAAD//////////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vqz1wbZcnTt98Ksu4nnD0ywWHSE9xA0w6lzOj
  Mwk9Tqk5YNHC7UKIWeNvQC6bCQxCad2SxsBRZthMRwfUbR2p8XErwzsnAXQMA3Z4cU19DkpwUX
  wzM2aDBIdskX4cER2Zmn6QWXWHeFKQiztMjpxZTGeWa6shm5qqeqmShXZ3jzp3nb2fqqhiA5Sj
  bIBof4JtWsKMkSVllQ1qsNdppRbRsqx8rNJk1HeItzjKj9u/iRJsxeRp1qVyvukV1yDNm4XF47
  v4oNBQA0YB3yKC387pqsRNCbWBNJiBcpTnBz1yM9DpqRZP/2I0U+usCCgQoAAtetbOiUk3Slum
  kE1MYYsX5V0pm77g2WskQhHPaqQIGCqGs584ePWI1Oqjg2EWoZWIGjtaYpxGnzCzZosg1FClqE
  cdPHxq52Q3MHfKREwrSpA0X8pyDmx4sOcgomTAcdxac1A9cl/n2SUySSoyQYF7qdWSbeNSh1/R
  LK4I1a1fm8U4hXv3mFNkank5I4Z4t18hfeHyDO75edwksQ6kum4w2eJqWVL7zX5dGrOdd2qxGf
  wDJrdff3RqGzsNjVFWwn65CqUA3N9Yt5du54ue/F3U2My9PtSgK2JnTXhxlkZKm3vgfgLGpnpu
  N+9pzEYf+JbsPXDz8/9M6GIccKa1V51kd/0j0Era9TGbfrIBZyB/D6jhD13EsRZfPP7x44t6lF
  ymG2ALDheLhhumBJpUEOonVkbkQXOWXZExs2F7gdUYWoKI7CJfgw5hFNeGO6pVI2gvtlEjfd2k
  EWOM7bUIXl4MxWiNRtspBVeOFOYHIoVA+Wchk/k8wlB5PEp4H4L2gacTkJplpGCCumEW3YcSGt
  cYnCdV6B+V00WZS4L30cYZn/MFKORx3xUK1Hqx7QggJlxZ+ZWdhHrFDyHRTZodMwItFOidEGga
  gWGIUroFc40amtyjA/p0oizCQeodfm0WxuFlfnkKyKZRrogTmq+1hmVdtHq4UXT//ImWGDN4kT
  jXjN0E58adhiFmiGWuSksmU9/oQk9tVZFmWW7BpQrQZ4jxGsZCE21GqK8BHtIugmyAdYY+m4qr
  rjZzbVnhNJGFBUF59M4qV1xdfUdUVOiccOG3PLHWUcOkPrytxP5SHKcnAdnbHsiHXtiQTLKaBb
  ImVv0npxH+NkSSSXIoxQss4YrskZzkIfwRt3H0tJNESob6Sw7WlUX0Wlp2UW5SKEMJj30INdM0
  Fy8zGI1Vv3G7D0xVz1KVM6lwna43qqV8C9aKao00UGdfJAbYvHyDVcdumd0rN8PQDbLaOaF2Y1
  qnmWNL0LT+LdOst4wyydov+W0P4DFxHA8hcD9/IjlCQntzo8Nx74R4massTpxFhxBo7eRh2Fz6
  HhVJnEZ3VFtRBek12Jj37LRnZnvrdnkhvNO/j36FEIwZfzwPyYu0PPNzK/987tE7Pz31NVt/fQ
  xfaL+9C31/f4Xa4ttgQvlIXKDA8Oy3z4UCCQAAOw==}
image create photo ::img::qs -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP////8AAP//AAD//////////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vqz1wbZcnTt98Ksu4nnD0ywWHSE9xA0w6lzOj
  Mwk9Tqk5YNHC7UKIWeNP1CqXBIMAgUFor1ngKDM7UzrOrXRbvf9IOX92UTt0HWZjem59hk1McY
  NadYwnhQF6bG+TjWdkgQ11an+UUpSJfKJfgI+MoJlynpaJbmISqp2GuKGAAzqjDAOXp5ARjrdz
  pCWuJbyfzcCXmVySIVp3UbNMzMVnwMLDtZzUYYShrpbhpM+6vRXhIGW1mNHA6Krq4xbufr5flO
  bM43Z1w9cuEKsJeP5ZUYKm2zc8NAwCCgPxIUR4YtI01NhL/5I1iXM4FAhQYCK2cx+z5RloxyBI
  OcdUfVqmQ1mDNSfuTZxpSxyYk8xw4mRT7o1OFC8X7jt5U2g5TDyVaqC37V1SX5AUPZgVIY2UgV
  SvXl2GlaiiPUOjPNMz1RQ9sUSSER2FtuiWZ3JzgAW46p3cAXscnA2sY21enG1ncPTZKRQwxGZP
  +cKbl8+bLAQWWwXjGDAEraMM/20KmWjffZ0Jy4NnuNvQrbBPtzTqGePlWLw2dvYadR1jcaFiBY
  aKA++94KmYKNvH+fLjm89xN9y6Zq2n5YIaI34s9LnxmTcJXdPMXHtowGsye6bHe2d1jV3hmi/F
  /dTbXzDDCyZmDPjlZf/14QfeR0SZMhR2rMyHx1rWbTJJemhxJduDlFzkBQVnmdafVcEtyOCHII
  b4GWIbovZfMxjpoCKKvoDm4EScWZYWiyumyOJ+L4bUyXANhOjjjxXOJR81Qrl4IUJBplWiHVrN
  oiRwIkL05GZkHGgfcsMMgkZT6iQUVXnA4agfRVuudEobXQo54S7ExILlMby49hyaXlW2ZjYkEq
  Rkj7qpV+R9U4L5Dna4meIAewP5CR18gWZHJCqf9YioVxAKpp6aSxpi06GuSafbmIK91WiCj4oJ
  26R1rmZppznCVKqlQ13SFkvyvMYGq0O+U1tCw2VyHA512XrpqDCSUWdYwdE2EF3/g1Ena66o7X
  VNTsvWlJ5dOP6X6USuvafBe7SG16ytpVS4bTHSzsEbdcJytYU+jvq1AVUHURdZkXdY1qpUuCCF
  G1TX6meUP4SdO80xTfwCaG9pcdTMTsVSg5odeP0iBiRbJlOwBiOVpKPEHXHykXWL3SgyORXxK1
  NE7GRRsU8lnxjPWF6o5VBMQcQc5Mxx1VzcWz1Ri5lqPJPRMkJ/3TxNTmIE/A2ZIEsDrLcX1xHz
  xjuoXIw0kaWZoma6kJLwWE9/FNh7+X4CtrZVaX0w0hrPwpIhdSpnroP7QmqNcpXCx60o2n7pNr
  xZ811gJSr2SwtPeU+saYbaBDEKQyejbLQfU0xGiNLOgldCi6vyklBrgXhI/hLUVXB45OpIVwP6
  FUK4PjjsLsi+L+0r2J4U7ix8Pjvv/up4O/CipzI88TH6jvwTuy8fQwbOD3GBAqxXb30ECiQAAD
  s=}
image create photo ::img::kd -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP////8AAP//AP8A/wAA/////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vO8yDQNdwDsu03etA1smnmQWPqRbRiGyKlDen
  FARlTq+bqhU7rRKzlrA4MvJ+S6gAYU1Qr93seHzooVOHVqZ9g+O4G20Mb3JsdA0aSiE8RlF7Pn
  1ZNzeBf4VZbYgDjh2LNY0dkpwSk4BKf5mbfqlZHAWSBaIUkoZvqGWriBuukgOwrKIlZCW1D7eg
  nLq8vX7BrCfCang2aE92P7mPyn2HQ89o3t10ntSKdLvLudqhAgZ13+/dmPDGAuczvnjqOJvg88
  OYxaoV4YWtnjJ8VOZ5Q1SrhCZ69tCZO4goQDt3/Raecoir/5mGc77IGbwRsmKLbgrJRbMlkM+W
  PeuYBTOU0tDJhy35IAO1RdWHjO844SxX5gMkmapQAhXaMVHCmfQKAl3oZ+idouCcNtvzTKm/qk
  2bbg36zVGiqT+t/gyLVmSdMWCjXqVaUR4YCA3/hQtI9AnZmYIqBCMmSN6psEWpPZgRmAFjbs/e
  nCQsWe5PMJqiPdYcYPOYyW7fYu18I1rXNowzE1pNCYLlt7OiBdr8uKbi1g5eC6VReBBp0x39oM
  5cUXdV1YVKBb4rgaFm4lpFP9E05wFAgHBWR3Y8PHfOO8khUwokGe/2NwO6Rwf2JLxN4PBLGyaP
  Wr3xS+ptjm/AayV83P+HfPcTar+ZAhyApTjnQHqdEXhfXQRostlM5JE2y3UO1NdgZ4hVk16EBZ
  7WmHkKzkCgawLWkdoamU1gl4ITfCihWtIpwluLEaoWD1f7LSghixw+CBh/ajw2XwQ9zrQiiB3a
  WOSTrWGnjWmUKPljIEJyCCKTCQ5pXmMmpbZSirFYl+F2/Y2IZZjUvbjWLYxtWaFzpSk3InOWkJ
  lUnG36h+AfB56UYWV6MsfnctkRcuaIgBRCI3tEOUbdmILBGGVyjGUZTpzB3dVdG9WVpimJtnVF
  m46z1TkqXqzJ4dhvWAYWW2iQJoTdZ5Jqyd+kHNJUKIST3UoYYJulWowpWerFUJX/gHpppncm0e
  pTNQFtpJcwl2iVVZZWfeZXTetN6+RlS3nkE03bNkkFjW2dhIy27tL15nRm2VaQuXeg9CtHGPkT
  IFLHuLNvkO+mVCNPR7l1VLiRdIWuwVCFFtO91+Cb1o7OGOzwHhGVNNE9YJSB00ZobWKAEhGBjE
  3HxdG77MPl7pQyOtQo03I53DRU8mXZ2EwNyxb3i3GpHlykTw8f08xwOtO0vHNZ4uhD8UtijTPM
  XrlR5W4yvIQEU61r5WwYGdHZMbPX3MZjl4WeNdfKKwDPO66ygwFSJ7YDVYxGFI00NfLahZSXY3
  8e6L13D33T82+igfdorU4C57GPWAO22jioRnkm9oUebOHq+QQcMDI5F1hEETTpSPywNOowmL46
  6yuIfjPsQDDBOe21I450p7iDwPfuvV/xevAumEB8Exco8PnyzEegQAIAOw==}
image create photo ::img::kh -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP////8AAP//AP8A/////////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5vO8yDQNdwDsu03etA1smnmQWPqRbRiGyKlDen
  FARlTq+bqhU7rRKzlrA4MvJ+SyxCgMBet9lqOHzooVOHViadVtgUfg1qDIJrgYN2HYh1J1FReD
  d9f1ElcpVzbUNKHIqJjD2OPjc1onqkNJWZbYllnJuhpqIaFKKphFmsZa+wgHcSarKZuD6Rerq7
  OK0nymiUqctPnkagkscDfQ8lDmjKg4SFzCE8pszUsNfZ3Nzb6Jiy7tDGPUPlpud0dsv5qu+tYA
  L0M85pADjpGbh1z8gc/KClIIddt+65SijrRjB4RSYtHOfu/54mhNvI9AP2cIuiWBGfdMw2IEDL
  lx8ZIsJxy8OPTfli5ithqoGwcCBoYlsIMpNLi+/CjSSK06USgzslomvpY2nMOjIftHyKUFMLj0
  evdsrVlCpLqlyD+cS5VRtGoCR5epzxVJ2bi05bevtJBd02tMDoHuI2h5lLNW0F8ZXJBrBTw4Lj
  dNtXEfGDX2+pEKDx1GzgrYJQ3dvs1JtVq4LXPs7EeXJhWaS3DsB0ukxbBmjphoyMquPL2+0yM2
  7Amafno3rlfP3sYAblO2U2zyaeWzduN3OOh6XuvPYT542x4d6aTTTz5rP1eg83u017t2O2oz+F
  WWl094bcbqgWwXlysf843YeYcvXZEAY649GnmHB1ZGdIgYkgBcZ4pM0BoD9PZEcgJz4Vl85hCu
  oHHTQamgYBgk59SBx2Ky62CHYmrlWeckaNB+OK61EB2mXKgWEZZspYQltYLkYInJAJ/eiVaPl5
  NqJSiWV3GzDmARMBjTkyFKVlJ16nTQXhWVhkU9idcttX8ohViBzJQbgIKyymd2YWEjIk2XWv2U
  diYxbFh9smccDRZpaLuCddf8d0kl9pz8l0Hy1anVmBlW606aSjGYJ4pmBU0njWV80JeumbGfZp
  4z1t4qeMh6lJ5+ZYGR5KXVowIqZbRdUldmFcSg1JF2CUiMbpqrlpRaii4eVVX63/hBT3V402jj
  nhIS8tW+tgnNJp1CnHAmosaYBaeOetq+bzXrc+rgjuNmIOtp1vORn0ZC+FwMSPKqCepy2v6FLq
  paKGGUZsZzImNa9MqUUEFkhTKbQKg0bK5ZNEO63EUsFYQeyKca2tJC8/+tH0sJ5KIYdUxROGZN
  MWNe0HK5R5pbgOUyntp1HLoQSokgRFNVVzPCOjlA1ZJuM1c1IGQVQTR7sKPFRUG898TB/uEHSN
  VUjjyzDSaBAEiTsQNY3XXcvZBeoyXvMBNixD7+wNbV1NrE3aX0czSpq5fNOMxzQ/Uo0RjxCDDN
  ZtFzJBX/Gw3S84gQAJKc+Jj7M4InfBxiYscn43QgoamgNOuM7dMGtJ5tb8g5Ldr7QNl53uEuL6
  WmoPdNMjNvOKeIOoXPLGG0tFzYQep/kpPAUlfdE0FzkU1DvyMACyPPMrKA+9E9IMPj0Sv1t/vQ
  6d13D89iF0rzr4TnxP/gomnN/EBQoM7/77ESiQAAA7}
image create photo ::img::kc -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP//////AP8AAAD//////////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5v65QNbNtyPd88e9KaVm+IEuaIyJGxlmx+lj+n
  dAONTp1LINXC7UaUv2xwFRiYy2fzAK1WW6ngYNT4FHbKjTVDj2a/4SI5gid/D08EiImKiHl/gC
  GDNDJ3EHUUiY4lmoGZj3KGHl6OO5CdYxxflCCEpHABBKZan6ihrWOZhJKhJbBxn3Zzgrq3OjO5
  hbyxwKRhFr+srJq5d8m+0JvQztObt9K7r8rZhuIU3qfd2669nJKV5BPm3N7pt+ul7ePP0jvTTP
  Py9cLJ2XeOSbMwswYeGxbQl4YCAQrQqlXIILB/3AjZW2XF/x9AfN9WYSMobWMdJT4WEtvHCpYM
  k7VQFkH3b5JGTNXYBUrRr+Y2BgQG4ATnUCSnixr7uXwVVCijnPd2WpoAC5NLRUwT6YHKUeYWpn
  1Y6Vm0CKjTp0mLPkFFNmwjoGXNOl3TUCckOQQE5N1b4gyhNXwY7cn6FAhRuyIbkMXkdzCfRoro
  6jocFdJSvZj5wmoM+PGZoEN1wFQVaOliTGWW6lktt7Cx0aiUmc5MO4/Lzm0I0wX6UmBpxVgV8+
  YTGHho0b5L+d3b8QHrNmtAS+adFvGT3K6bMWJNvSnacbC3gGncCyw+PHjcRH5HuetRd98ZDwZH
  uDwdWe5LCbb4zLEfRP9C7dacHflxJEFsXXhnnywEnqTTQQ4UFgRqEQIYjT7WUbRMXxQa19F+/A
  yUIWmG3WTGUlwgmEplBjbHoVN+AJZKFWAl595BvAR322Co5ciejYccmBpjacz3WnmqbTUiW+Tk
  eCJ16EXnkohg5aZWKPZN+eJmuXHXyit67aEki0GCVJ9wRkYH5Zm8XXlHljKcxWWXZtWgWWbCuc
  lkOxN6N5+XQcF1Wp5LUmHfSwBy6UCRYoJ5Z16EkonlNRzK5xx6jZ52GZCTanFmYKrhQcMZtDGH
  UKET9jOXUMZR+FgfbU0k6ZvHRHaVpvONKqVHH5G4in1yVoWasFU5sxaq1WR1omn/CBH1E6+7IO
  usVloStFCzPOlp6E1oWVvTSDNJe+iUOhjmCkMkcEorNirRcy4l0A4YmxLlAXLtV79QdKwn+JUp
  77XBnGpQQuyS1GCnyKg0TD/GgMSSO7K5e+8jx3Tx8DgRfzRxQReX82O/CIeUzhwdw9PsJCCvm7
  C1g0AIT0bMZLyyOHwGPNlFGKa8Z0UKU8PzwfKK95vGDTuoIq/qqjiVsfDakvS7WIJ4oIZI11yM
  V6GAqulooNBizNVSZZ0GcW+Jqm+0G+rMbxDQueH22JJlS2UzYIhiN9MlingFFvztLUXffifBTy
  yBk3HhwYXDIAbiiaeUjdqNp1vMEZHzXTkWDhlcTsQFCtzt+ecUKJAAADs=}
image create photo ::img::ks -format gif -data {
  R0lGODlhRwBgAMIAAH//1AAAAP//////AP8AAAD//////////yH5BAEAAAAALAAAAABHAGAAAA
  P/CBDc/jDKSWtQS+jNu/9gKI7CFZBoqqrM6r5v65QNbNtyPd88e9KaVm+IEuaIyJGxlmx+lj+n
  dAONTp1LINXC7UaUv2yQNSibz2i0lbP2iLXtsTs9CNTv9nxcHsr5T3FMHQx4dQQBh4mIe3wgfz
  QybjsciokEl5iYjFp9myWDEG6ZhxOdnkJ9bBKgD46BdadrslulVJ+Ajp+DsGCqVmEWtritM216
  vUGTwBXCt4CPc6iuya3OXGPDbM270k/PX9/Bt+O22NGxkKHhzOO45eRsvCJ/xOmRoe26kObc6E
  DPcnYsi5INoDlj8jpxKBCggDZJxu61yyLt2LxfFSFmzLfH/x3BhNPmpShIjmBJKiC9KSGhI4wz
  jsl4WVQo0lRClzihyJwZMpU3Q7Ba6hpmiJCMQyklrWSlR0/QekajpksKamlMp0ZJFYJQVKYmqq
  qWMrj0oCsiUg7wNPXaAOyWlYjKRF17lsCZsou8fu2m9OIAsmmjGroUtAzZwkcD++tj96/RrUjP
  pjkstS7lxY4I4537NIJZQGir0ezzV2seM1hNXq2MFDXfqvMMB0ach08YWGwLy0XGWO5pO3LN5i
  uBO/Fu4JifaG5L1+i7PJEbAPbD21Hpx8CDOzdJN+ioST0zO2b+tLgE87X0hVduV3B2rHR8dxYE
  XuXFRbOZN+X6mLa+5P9uYAMfHu2NNR16vlVRnTdVJIieJoREpt0xLl1k1TO6peYZZ/vhByBTtO
  DVXnzFoWbedQsGSI1+7p0XHXbSOZYiU9/BWBt3JZqoh2Yz+pLOdNDVZhttv7VFVo8o1UFcUTQU
  dxBxeb2nlmxIBuFakE0695+VHD7V2Ie+3HVIllLZNuBWkoEZogNjZtUhfxymdaSFflnWJlaEoU
  GZhEU2NiadnXiJIXN5GnkZega6lQwYgx3pZmdn7BUnlWqutgiZ8EGwZ4eANWJfoHUN+iJ5O6am
  1kOjufIUpjudFydflWZ5JyyRTfSPnDyhup4kOwVFzVDAWlpTqj8NipOtHn3DUpX3WZaTTUAwef
  LOrqAoCW1Hw2EkyLTbvqaKtYtCES2sr1nBkENv1RmgO/8Ml05ATADzEieqGjMUKiTZMwxUq3i7
  BbjbqJevF9aoEwvA/AicbRcFE3Owvao9ORAzE79RL4PKSkSQOBvT9/C6LekAzzUCV/TxIApL7M
  sqnspyMmwabatvt8zKvLKmmUQkmqd9ETvIKN9VEjPIj/jLMxuVLMInVTYX/K7R6lX7WyFpBJIL
  JxY/YR2JXEv7nLz0YuzF2OKEC/YVWMTrNdoxZM32EAKt/XYRBkE990hg2333feGEvfcKxQj1d9
  qDY5FB4URcoADZjDfOhQIJAAA7}
image create photo ::img::td -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbCMFgwzNa1S8+zzaPjG6MBe8QPLhgbFpeao1LIjIZ+uSRUunQKr5lk
  0avSWsGYHdEcpiJlZDa6pmuDxGxNnHu6yz1iXVe/9wEYuOEEhDfIkuhjMogn6MhI4vgGSVnich
  F4mReJ+ePWsagySpIZx1HaCHhyhLqh50EY26r2Cusn+qiZW+vWizsLbLdrBHorKnsnewN62KNa
  lClzxio1/eXJhA1NSdjinB3dw12yaQ3brLg7/gy+gly2HFzcUa4cz1upPzwXbjmP2J52HO6lQm
  dHF61PqwgedJjB4B9Ok7wxNKcNI0QM/xIFBuy00NQ/fB8bljRG6qTJfShTsgRZr+BIEC9dsuiY
  bMk3ezOx+MTpM0vPoFGAEiU39Ki0pEqRwmGyU+a6qDRjSnVpFSBVjkwn9luZlSvMfBVD+hv7ta
  rZlmURtl3LU2NGrW7jyoVLEm+hrvzIUnuo0u7dtC83ikU7kHBgwSsBF07Lh+9Ex4q3HoancLHl
  yzrnEjE6WO9NyaEhq5NiWFBE0qU3C+ScJ2+9nbdAyxNW0x3lJLZ/4c6b2Uxv0bgr57Kd2qvf2q
  ST39Z8BTTF1sXIGPW2FfvFt4t3m16NOKzyfrmEIK/LvdIy86xF022zZc0UeN/VPoqvpHeoaonr
  sDl/qpMu/vHGWlN/DGiBfgbyguB8C67ToIIP4vffg/T5UaGFWNXhoIZCebhNBSCSQ4EEJp6Ioo
  kGFAAAOw==}
image create photo ::img::th -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP////8AACH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbCMFgwzNa1S8+zzaPjG6MBe8QPLhgbFpeao1LIjIZ+uSRUunQKr0Co
  zvSV7XziZ1L81XE5amSYpLWe2+43u921e+JlNF398UdXEvcmiOdxCAhHJXelqKcBOQbiAjK5lo
  F5ZvRDMvkJSVYCeilK6LlDeaEIdnhyVLUmyEpp+KcSi6i5i9e7O0q7sZin+rsajHvHuYmBPFqc
  6cxbympjWbzSnOWJxrJdhC1jUx3eTVROJI7+GrXOPij13nH7CFzPWXmeCHhv50tMHymAAVcNii
  cwVLp84DoNTCcJE6qHp+hJZESxFT+I/xzmDau4sR3GjMoCgXToSpjCkiNTAlsZsKXLZzCl7dkH
  k1wkmSdo9rSJ8luRfLBwYjk6BalSDB6XcnO6tGmgodeMmiKqwmfCrDszspD6MSZJrEHHAg37cm
  tNsRZV8gzptq1ItSY11p1bFi7eiBw3gPVjd9nJDn+jxeU7uKNVaicZXqQr11hBe/3SKp5Zh7Jm
  WVqbLEZca7Pm0GQvSzms7rO2vT0Km2VbNUrfT56ZNEyZwfXVxHc56dbEOPCL3lB+h3b2uEvkMM
  azAeZsq6sw4wgJRmc7XXVwfKRJi00zRrdwvd9lXXA9G/l4wtqfIyRv2fTu9ep5117LEm3gMEIK
  32FGbBdAFviXnH4ibYHEgO0dFJ930HkhhxLoVdbVdtEgV0Z/7fnRHUUd1pJhEs1BBeIQGpKoU4
  gKolgDghJuyCKGJooIY4zPvWjjai4mleNTPYZTwY88TGCABEYeiaSRBhQAADs=}
image create photo ::img::tc -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbh+Lrs3MIpQ+eoPbqyDuT4erygcTN8WX7HYzLZjD6LQmYNVlsStdUE
  bcGacjWNME4lVpLPaPaO676Ur4qsut617rz2kvev1xUz+OYnQSKBBWLFJ5eoiPRomAHmmPjxCN
  nBVKl16ZE5idHpeRPDifp3qrmJdfM66uNJiWe5NFsYEcm6GtjYVjoX+2tZOxyIyfNAR2wko9ps
  GB3EiJxMhC2lOX0N0WTd9knNayYOBN6qGGprVv4Dhv1uXHgiTKh8zN3K7NtPKlovTrBd8xCRA1
  VwD7pIAbPpo+VwoSOFyxYdAthNF0Jz/wilXUz3MZlHjSBJihwZYpVBaAmrNLxFaCXMh7Rm0Lxm
  82DJLy1PRvnpEqjQmkOLqjEqVCJEpWtursmp02LUoNJmKuWDj55UU//y9FCJcWNIgiY7rhzbFC
  3VjN7Elt030sHZigZfApo6625Ad3jJtguXsGuvvhMBTzss0CI/dbJiDu7TUB7LX4IVl8vXFhdk
  HevGOZHkjPBWui+Jfo4oml2spD1xZhujrbLbM0yLsbJnO+2c2qqXIr7dlilWzQOHWWU86FlfeG
  B7q4wH6Z/Ezl4zN4fNljRZ69LxUt+uvdlVtbrlhnX9anl6x5YN8+SGB0pkp7714JBPkffjp0rw
  x0NNvR9RsBw133v9wEHFFZwhk4Z+SBU2oIMP3rEFgRPu1V+CF2IYIYAX3qfhhgqNIaGIDJnoTA
  UockZBJi6+COMEABQAADs=}
image create photo ::img::ts -format gif -data {
  R0lGODlhRwBgAKEAAH//1AAAAP///////yH5BAEAAAAALAAAAABHAGAAAAL/BIKpy+0PYzBH2I
  uz3rz7L0wBSJamiZzquqbh+Lrs3MIpQ+eoPbqyDuT4erygcTN8WX7HYzLZjD6LHZjOWlsStVVm
  DXuacpEK2oIlVmoaaJxqWs483g76OI6J7Oa7PYQkAebh1aUHEtgHGCgot1jixbjImOeo2CgoKX
  cp8Yh1RllGhBcDmhASY2qp9XkRx/PDirq0OklGG3sp5LZGqMrHm1qKi1o7+Lrrx9Ykc6MWxukE
  FkxnaMQ0nfxnXUwNHdTbhrhtttmMfDoD/oHtSpvbFg6OLQzfPU9MNnzIDXy+r5yo069/dQISHF
  hImypF1Yw1XMfvlkJd4vYJ9EYRo7GL/w/7ddTFsQcxbjhE3bN1cZYsgipHQUynjiHMeBEz1mwU
  JedGnTxx9vzpDKjOmDbNuOwE8ybFmSnRHc1nwx1ShqZMxiw5curBiVA/otyK0CPXLiHDlhsLsq
  y/rgUXgl0rFqDFbPpswk1Ll+jZk2TtEdInV+szvoSfzv2yqSU7vV9bnD11TqnPb5UoR6sIhDFV
  rxClSe6MVialZRotbRlzuW1eKvbiQjLMR/O7uEvtptLcbuWtUoqv7WKMFdm04LhiAa+sshXyVZ
  NBc5ZoFlPNTA5L431bd+9dXqsNa8/OvfvNjq5Yq5UctqT5sjT/FoHSOmmvNLJBXZH3fn2Ybztv
  6DEX+gwX8AGYhRIDEhiggf8hOJd/qDGYjRr1QbjSgRTmMOGFQlSgIYYUSAJiiCJOAEABADs=}

image create photo ::img::heart -data {
  R0lGODlhIQAfAKEBAP8AAPllaPllaPllaCH+FUNyZWF0ZWQgd2l0aCBUaGUg
  R0lNUAAh+QQBCgACACwAAAAAIQAfAAACXpQvoIu33OKbbb7o7DV61xeElBUG
  HqeVTCdCKGt2SwtkMhDfeP7qPr76CXPCovGITCqXzOav54REKbYpYqqQRDGJ
  Jhd6/FaN4mu4bBaitb41pu1+y+LfDl1suaNd6AIAOw==
}

proc initHearts {} {
  global p data

  wm withdraw .
  set data(title_const) "$p(name) $p(version)"

  . configure -menu [menu .m -tearoff 0]
  .m add cascade -label "Game" -underline 0 -menu [menu .m.g -tearoff 0]
    .m.g add command -label "New Game" -underline 0 -command {newGameHearts} 
    .m.g add command -label "Score" -underline 0 -command showScores 
    .m.g add command -label "Quit" -underline 1 -command {exitGame} 
    wm protocol . WM_DELETE_WINDOW {exitGame}

  .m add cascade -label "Options" -underline 0 -menu [menu .m.o -tearoff 0]
    .m.o add command -label "Game Options" -underline 0 -command showOptions 
    .m.o add command -label "Playing Cards" -underline 0 -command showCardBack 
    .m.o add command -label "Background Colour" -underline 0 -command showColor 

  .m add cascade -label "Help" -underline 0 -menu [menu .m.help -tearoff 0]
    .m.help add command -label "Help Topics" -underline 0 -command showHelp
    .m.help add command -label "Changes" -underline 0 -command {showHelp 3}
    .m.help add command -label "About" -underline 0 -command {showHelp 4}

    if { $data(platform) != "unix" } {
      .m.help add separator
      .m.help add command -label "Show Console"  -command {console show} -underline 0
    }


  canvas .c -width $data(tw) -height $data(th) \
    -background $data(canvas_bg) -highlightthickness 0
  .c bind player0 <ButtonPress-3> {set ::data(belowCard) [.c find above \
      [set ::data(raiseCard) [.c find withtag current]]] ; .c raise $::data(raiseCard)}
  .c bind player0 <ButtonRelease-3> {.c lower $::data(raiseCard) $::data(belowCard)}

  pack .c -side top -anchor nw -pady 2
  label .status -relief groove -borderwidth 1 -anchor w \
                -text "Welcome to Hearts" -font $data(font_default)
  pack .status -ipadx 5 -fill x
  
  update
  center .
  wm deiconify .
  update
  wm resizable . 0 0
  raise .
  focus -force .
  
  bind . <F1> showHelp
  bind . <KeyPress-q> {exitGame}
  bind . <KeyPress-n> {newGameHearts quick}
  bind . <Control-d> {toggledebug}
}

proc newGameHearts {{force 0}} {
  global data p

  if { $data(playing) && $force == 0} {
    set ans [tk_messageBox -message "Start a new game?" -title $p(name) \
			 -type yesno -icon question]
    if { $ans == "no" } { return }
  }

  set data(doing) none

  .c delete all

  set data(playing) 1
  set data(round) 0
  set data(score,0) 0
  set data(score,1) 0
  set data(score,2) 0
  set data(score,3) 0
  chkTitle

  deal
  
  # get the color for names, and pick a font
  # set nameCol [revCol [.c cget -background]]
  # or, on second thoughts....
  set nameCol "white"
  set nameFont [font actual Helvetica -displayof .]
  set fontH [font metrics $nameFont -displayof . -linespace]

  set cardW [image width ::img::back]
  set cardH [image height ::img::back]

# &&&
  set pos(x,0) [expr $data(tb_base) - 8]
  set pos(y,0) [expr $data(t1) + $cardH]
  set pos(a,0) se

  set pos(x,1) [expr $data(t2) + 3]
  set pos(y,1) [expr $data(tr_base) - 3]
  set pos(a,1) sw

  set pos(x,2) [expr $data(t3) - 3 + $cardW]
  set pos(y,2) [expr $data(tr_base) + 5 + ($data(ts)*$data(lr_diff)) + $cardH]
  set pos(a,2) ne

  set pos(x,3) [expr $data(tb_base) + 5 + ($data(ts)*$data(tb_diff)) + $cardW]
  set pos(y,3) 15
  set pos(a,3) nw

  foreach {who} [list 0 1 2 3] {
    .c create text $pos(x,$who) $pos(y,$who) -tags [list name name$who] \
       -text $data(name,$who) -fill $nameCol -anchor $pos(a,$who)
  }
}

proc revCol {n} {
  # return the inverse of color $n

  set list [winfo rgb . $n]

  set red [lindex $list 0]
  set green [lindex $list 1]
  set blue [lindex $list 2]
  set first [format "#%04x%04x%04x" $red $green $blue];  

  # invert it
  set first [string tolower $first]
  set inverse [string map "0 f 1 e 2 d 3 c 4 b 5 a 6 9 7 8 8 7 9 6 a 5 b 4 c 3 d 2 e 1 f 0" $first]
  return $inverse;

}

proc suitValue {card} {
  return [string range $card 1 1]
}

proc numValue {card} {

  # returns a numerical value for the rank

  set card [string range $card 0 0]

  # return value
  return [lsearch [list FAKE FAKE 2 3 4 5 6 7 8 9 t j q k a] $card];

}

proc sortPlayerCards {{which "0 1 2 3"}} {
  global data

  # now we need to sort them, by suit and then by face value
  foreach x $which {
    set data(cards,$x) [lsort -command sortByCard $data(cards,$x)]
  }
}

proc sortByRank {a b} {

  set a [numValue [string range $a 0 0]]
  set b [numValue [string range $b 0 0]]
  if { $a < $b } {
    return -1;
  } elseif { $a > $b } {
    return 1;
  } else {
    return 0;
  }

}

proc sortByCard {a0 b0} {

  # split into face value and suit value
  set a(face) [numValue $a0]
  set b(face) [numValue $b0]

  set a(suit) [lsearch {c d s h} [string range $a0 end end]]
  set b(suit) [lsearch {c d s h} [string range $b0 end end]]

  if { [set ans [sortByCardSub $a(suit) $b(suit)]] == "0" } {
    return [sortByCardSub $a(face) $b(face)];
  } else {
    return $ans;
  }

}

proc sortByCardSub {a b} {

  if { $a < $b } {
    return -1;
  } elseif { $a > $b } {
    return 1;
  } else {
    return 0;
  }
}

proc deal {} {
  global data

  set cards [shuffleList $data(allcards)]
  set data(lastCards) $cards
  set data(cards,0) [lrange $cards 0 12]
  set data(cards,1) [lrange $cards 13 25]
  set data(cards,2) [lrange $cards 26 38]
  set data(cards,3) [lrange $cards 39 51]
  # now sort them, by suit then by face
  sortPlayerCards

  set data(points,0) {}
  set data(points,1) {}
  set data(points,2) {}
  set data(points,3) {}
  set data(lastwinners) {}

  set data(hearts) 0

  # FIGURES FOR TOP/BOTTOM PLAYERS
  set base $data(tb_base)
  set diff $data(tb_diff)

  # draw the player (0)'s cards
  set lc $data(cards,0)
  for {set i 0} {$i < 13} {incr i} {
    .c create image [expr {$base+($i*$diff)}] $data(t1) \
       -image ::img::[lindex $lc $i] -anchor nw \
       -tags [list card player0 cardNum[lindex $lc $i] down]
  }

  # draw the top AI (3)'s cards
  set lc $data(cards,3)
  for {set i 0} {$i < 13} {incr i} {
    .c create image [expr {$base+($i*$diff)}] $data(t2) \
       -image [getImage [lindex $lc $i]] -anchor nw \
       -tags [list card player3 cardNum[lindex $lc $i] down]
  }

  # FIGURES FOR LEFT/RIGHT PLAYERS
  set base $data(tr_base)
  set diff $data(lr_diff)

  # draw the left AI (1)'s cards
  set lc $data(cards,1)
  for {set i 0} {$i < 13} {incr i} {
    .c create image $data(t2) [expr {$base+($i*$diff)}] \
       -image [getImage [lindex $lc $i]] -anchor nw \
       -tags [list card player1 cardNum[lindex $lc $i] down]
  }

  # draw the right AI (2)'s cards
  set lc $data(cards,2)
  for {set i 0} {$i < 13} {incr i} {
    .c create image $data(t3) [expr {$base+($i*$diff)}] \
       -image [getImage [lindex $lc $i]] -anchor nw \
       -tags [list card player2 cardNum[lindex $lc $i] down]
  }

  # set up binding, etc
  set data(round) [lindex "1 2 3 4 1" $data(round)] ;# set internal record to this round
  if { [lsearch [list 1 2 3] $data(round)] != "-1" } {
	set data(doing) pass1
	.c bind player0 <Button-1> doCardUpDown
	.c bind player0 <Enter>    doCardUp
	.c bind player0 <Leave>    doCardDown
	set dir [lindex "XXX Left Right Across" $data(round)]
	set dirL [string tolower $dir]
	setStatus "Select three cards to pass $dirL to $data(name,$data(round))"
	# create a button to allow them to pass the cards
	makeButton "Pass $dir" doPassCards disabled
	# We also need the 'AI' to choose cards for each of the other players
	foreach x [list 1 2 3] {
	  # chooseAICardsUp-$data(diff,$x) $x
	  AIchooseCardsUp $x
	}
  } else {
	# we're on round 4
	startPlay
  }
}


proc getImage {card} {
  # if in debug mode, return the cards front, instead of back
  global data

  if {$data(debug)} {
    set return ::img::$card
  } else {
    set return ::img::back
  }
}

proc toggledebug {} {
  global data

  set data(debug) [expr !$data(debug)]
  foreach x "$data(cards,1) $data(cards,2) $data(cards,3)" {
    .c itemconfig [.c find withtag cardNum$x] -image [getImage $x]
  }
  update
}

proc makeButton {text {cmd {}} {state normal}} {
  global data

  # make a button .c.btn for the canvas
  set w .c.btn
  catch {destroy $w}
  button $w -text $text -command $cmd -state $state \
    -padx 5 -pady 2 -font $::data(font_button)
# &&&
  set btnX [expr {$data(tw)/2-([winfo reqwidth .c.btn]/2)}]
  set btnY [expr {$data(th)/2-([winfo reqheight .c.btn]/2)}]
  .c create window $btnX $btnY -window .c.btn -anchor nw -tags "passBtn"

}

#############
# Ai todo:
#
# if have Qspades, we can take some liberties and possibly short suit self
# eg (player leads small spade - we have 4s qs ks, should play ks ?
# if we are the third player, and have no choice but to win it, (and qs gone), play high
# separate myLow into myLowPlay myLowLead
# if QS gone and hearts unbroken can lead high if want
# get rid of other suits before playing hearts (kind of done)
# if lead a card and noone had the suit, try diff suit!
# ...more

# these rules are parsed by proc AIgetBestCard - in this order - to make decisions

set ai(rules) {

  { {$first} play HIGH }
  { {$down==0} play LOW }
  { {$shooting && $hasSuit && $data(suit) != "s" && ($down == 1 || [llength $pot_scoring] > 0) && [numValue $myHigh] > [numValue $data(lead)]} play HIGHSHOT }
  { {[lsearch -regexp $pot {[ka]s}] > -1 && $have_qs } play qs}
  { {$shooting && !$have_qs} play LOW }
  { {$hasSuit && $down == 3 && [llength $pot_scoring] == 0 && $lowestcard < 7} play HIGH }
  { {$hasSuit && $myHighSafe != "" && $down != "0"} play HIGHSAFE }
  { {$hasSuit && $down == 2 && $myHighSafe == "" && $lowestcard > 7  } play HIGH }
  { {$hasSuit && $down < 3} play LOW }
  { {$hasSuit} play HIGH }
  { {!$hasSuit && $have_qs} play qs }
  { 1 play HIGH } }


# Note ai(high|low) patterns must have the card to play matching in the FIRST group
# ie {h  10 {{{a k q j} 0} {{t 9 8 7} 1 } {{6 5 4 3 2} 0}}} is no good, instead
#    {h  10 {{{t 9 8 7} 1 } {{a k q j} 0} {{6 5 4 3 2} 0}}}

set ai(high) {

  {s 100 {{{a k} 1+} {{j t 9 8 7 6 5 4 3 2} 0 }} }
  {s  80 {{{a k} 1+} {{j t 9 8 7 6 5 4 3 2} 1 }} }
  {s  60 {{{a k} 1+} {{j t 9 8 7 6 5 4 3 2} 2 }} }
  {s  20 {{{a k} 1+} {{j t 9 8 7 6 5 4 3 2} 3 }} }
  {s  10 {{{a k} 1+} {{j t 9 8 7 6 5 4 3 2} 4+}} }

  {{c d}  30 {{{a k q j} 1} {{t 9 8 7 6 5 4 3 2} 0 }}}
  {{c d}  25 {{{a k q j} 1} {{t 9 8 7 6 5 4 3 2} 1 }}}
  {{c d}  15 {{{a k q j} 1} {{t 9 8 7 6 5 4 3 2} 2 }}}
  {{c d}   8 {{{a k q j} 1} {{t 9 8 7 6 5 4 3 2} 3+}}}

  {{c d}  30 {{{a k q j} 2+} {{t 9 8 7 6 5 4 3 2} 0 }}}
  {{c d}  28 {{{a k q j} 2+} {{t 9 8 7 6 5 4 3 2} 1 }}}
  {{c d}  10 {{{a k q j} 2+} {{t 9 8 7 6 5 4 3 2} 2 }}}
  {{c d}   7 {{{a k q j} 2+} {{t 9 8 7 6 5 4 3 2} 3+}}}

  {h  15 {{{t 9 8 7} 2+} {{a k q j} 0} {{6 5 4 3 2} 0}}}
  {h  10 {{{t 9 8 7} 1 } {{a k q j} 0} {{6 5 4 3 2} 0}}}
  {h   6 {{{6 5 4 3 2} 1} {{a k q j} 0} {{t 9 8 7} 0 }}}

  {h  50 {{{a k q j} 1} {{t 9 8 7 6 5 4 3 2} 0 }}}
  {h  30 {{{a k q j} 1} {{t 9 8 7 6 5 4 3 2} 1 }}}
  {h  15 {{{a k q j} 1} {{t 9 8 7 6 5 4 3 2} 2 }}}
  {h  10 {{{a k q j} 1} {{t 9 8 7 6 5 4 3 2} 3+}}}

  {h  70 {{{a k q j} 2} {{t 9 8 7 6 5 4 3 2} 0 }}}
  {h  50 {{{a k q j} 2} {{t 9 8 7 6 5 4 3 2} 1 }}}
  {h  40 {{{a k q j} 2} {{t 9 8 7 6 5 4 3 2} 2 }}}
  {h  15 {{{a k q j} 2} {{t 9 8 7 6 5 4 3 2} 3+}}}

  {h  90 {{{a k q j} 3+} {{t 9 8 7 6 5 4 3 2} 0 }}}
  {h  80 {{{a k q j} 3+} {{t 9 8 7 6 5 4 3 2} 1 }}}
  {h  50 {{{a k q j} 3+} {{t 9 8 7 6 5 4 3 2} 2 }}}
  {h  15 {{{a k q j} 3+} {{t 9 8 7 6 5 4 3 2} 3+}}}

}

# if adding more spades test here, make sure to look at changing the ai(low) proc below

set ai(low) {
  {s -10 {{{2 3 4 5 6 7 8 9 t j} 1 } {{k a} 2}}}
  {s  -5 {{{2 3 4 5 6 7 8 9 t j} 2 } {{k a} 2}}}
  {s  30 {{{2 3 4 5 6 7 8 9 t j} 3 } {{k a} 2}}}
  {s  50 {{{2 3 4 5 6 7 8 9 t j} 4+} {{k a} 2}}}
  {s  -5 {{{2 3 4 5 6 7 8 9 t j} 1 } {{k a} 1}}}
  {s   0 {{{2 3 4 5 6 7 8 9 t j} 2 } {{k a} 1}}}
  {s  20 {{{2 3 4 5 6 7 8 9 t j} 3 } {{k a} 1}}}
  {s  50 {{{2 3 4 5 6 7 8 9 t j} 4+} {{k a} 1}}}
  {s  50 {{{2 3 4 5 6 7 8 9 t j} 1+} {{k a} 0}}}

  {{c d h} 25 {{{2 3 4 5} 1+} {{6 7 8 9} 0 } {{t j q k a} 0}}}
  {{c d h}  5 {{{2 3 4 5} 1 } {{6 7 8 9} 1 } {{t j q k a} 0}}}
  {{c d h} 17 {{{2 3 4 5} 2 } {{6 7 8 9} 1 } {{t j q k a} 0}}}
  {{c d h} 20 {{{2 3 4 5} 3+} {{6 7 8 9} 1 } {{t j q k a} 0}}}
  {{c d h}  3 {{{2 3 4 5} 1 } {{6 7 8 9} 2 } {{t j q k a} 0}}}
  {{c d h}  7 {{{2 3 4 5} 2 } {{6 7 8 9} 2 } {{t j q k a} 0}}}
  {{c d h} 20 {{{2 3 4 5} 3+} {{6 7 8 9} 2+} {{t j q k a} 0}}}

  {{c d h}  5 {{{2 3 4 5 6} 1} {{t j q k a} 1}}}
  {{c d h}  7 {{{2 3 4 5 6} 2} {{t j q k a} 1}}}
  {{c d h} 10 {{{2 3 4 5 6} 3} {{t j q k a} 1}}}
  {{c d h}  0 {{{2 3 4 5 6} 1} {{t j q k a} 2}}}
  {{c d h}  1 {{{2 3 4 5 6} 2} {{t j q k a} 2}}}
  {{c d h}  6 {{{2 3 4 5 6} 3} {{t j q k a} 2}}}
  {{c d h}  0 {{{2 3 4 5 6} 1} {{8 9 t j q k a} 3+}}}
  {{c d h}  1 {{{2 3 4 5 6} 2} {{8 9 t j q k a} 3+}}}
  {{c d h}  6 {{{2 3 4 5 6} 3} {{8 9 t j q k a} 3+}}}
}

set ai(text,0) Easy
set ai(discard,0) {1 2 6}
set ai(play,0) {
  { {$first} play HIGH }
  { {[lsearch -regexp $pot {[ka]s}] > -1 && [lsearch $cards qs] > -1} play qs}
  { {$hasSuit && $down == 3 && [llength $pot_scoring] == 0} play HIGH }
  { {$hasSuit && $myHighSafe != ""} play HIGHSAFE }
  { {$hasSuit && $down < 3} play LOW }
  { {$hasSuit} play HIGH }
  { {$down==0} play LOW }
  { {!$hasSuit && [lsearch $cards qs] > -1} play qs }
  { 1 play HIGH } }
  # these rules are from tkhearts-0.60

set ai(text,1) Average
set ai(discard,1) {1 3 4 6}
set ai(play,1) $ai(rules)

set ai(text,2) Hard
set ai(discard,2) {3 4 5 6}
set ai(play,2) $ai(rules)

proc AIgetBestCard {who} {

  # first   : boolean (is this the first (with 2c) round?)
  # hasSuit : boolean (do we have the suit lead ?)
  # smart   : boolean (difficultly == 2)
  # qs_down : boolean (queen spades has been played)
  # have_qs : boolean (do we have qs (and we can play it))
  # hearts_played: boolean (have hearts been played)
  # down    : how many cards are already down (0 - 3)
  # pot     : 4 element enumerated list for cards down eg: {} 2s 5s {} 
  # cards   : list of your cards which are candidates to be played (low to high)
  # high    : the highest card in play which follows suit
  # lowestcard: numerical value of lowest card
  # scoringcards: scoring cards in players hand (low to high)
  # shooting: player is going for all tricks
  # myLow   : card used for 'LOW'
  # myHigh  : card used for 'HIGH'
  # myHighSafe  : card used for 'HIGHSAFE'
  # pot_scoring : list of scoring cards in pot
  # cards_left  : all players unplayed cards
  # cards[h|c|d|s] : list of cards value in each suit eg: cardsh is {2 3 7 a}

  global data ai

  set cards $data(cards,$who)

  # lead two-clubs if have to
  if { [lsearch $cards 2c] != "-1" } { return "2c" }

  set smart [expr $data(diff,$who) == 2]
  set first [expr {$data(doing)=="play1"}]
  set pot $data(pot)
  set down [expr {4-[llength [lsearch -all $pot {}]]}]
  set pot_scoring [setinter $pot {2h 3h 4h 5h 6h 7h 8h 9h th jh qh kh ah qs}]
  set lowestcard [numValue [lindex [lsort -command sortByRank $cards] 0]]

  # now reduce "$cards" to those we are ~allowed~ to play

  if { (([lsearch -regexp $cards {^.[^h]$}] != "-1" && (!$data(hearts)) && !$down) || $first ) } {
    set hearts_played 0
    set cards [setdiff $cards {2h 3h 4h 5h 6h 7h 8h 9h th jh qh kh ah}]
  } else {
    set hearts_played 1
  }

  if { $first } {
    set cards [setdiff $cards qs]
  }

  set hasSuit 0
  if { $down != "0" } {
    set tmp [lsearch -inline -all -regexp $cards "^.$data(suit)$"]
    if { [llength $tmp] > 0 } {
	  set hasSuit 1
	  set cards $tmp
    }
    unset tmp
  }

  set have_qs "[expr [lsearch $cards "qs"] != -1]"

  set scoringcards [lsort -command sortByRank \
	[setinter {2h 3h 4h 5h 6h 7h 8h 9h th jh qh kh ah} $cards]]

  if {$have_qs} {
    lappend scoringcards "qs"
  }

  set cards_left "$data(cards,0) $data(cards,1) $data(cards,2) $data(cards,3)"

  set qs_down "[expr [lsearch $cards_left "qs"] == -1]"

  set high {}
  foreach x $pot {
    if { $x != "" && [string match *$data(suit) $x] } {
      lappend high $x
    }
  }
  set high [lindex [lsort -command sortByRank $high] end]

  # we can play any spades less than queen safely (if no hearts played)
  if {$smart && $data(suit) == "s" && !$qs_down && [llength $pot_scoring] == "0"} {
    set high qs
  }

  set cards [lsort -command sortByRank $cards]

  ### determine if player is going for all tricks
  #.. should really nail this down sometime

  if {"$data(points,1)$data(points,2)$data(points,3)" == ""} {
    set e_won_2 [expr {[lrange "$data(lastwinners)" 0 1] == [list 0 0] }]
    set e_won_3 [expr {"$data(lastwinners)" == "0 0 0" }]
    set e_highlead [expr {[numValue $data(lead)] > 11 }]
    set e_nospade [expr {[suitValue $data(lead)] != "s"}]
    # set expr5 [expr {[llength "$data(points,0)"] > 0 }]
    set shooting [expr {($e_won_2 && $e_highlead) || ($e_won_3 && $e_nospade)}]
  } else {
    set shooting 0
  }

  if {$shooting} {
#puts "SHOOTING"
  }

  # sort out cardsh, cardsd, cardsc, cardss
  foreach s {c d s h} { set cards$s {} }
  foreach card $cards {
    scan $card "%1s%1s" v s
    lappend cards$s $v
  }

  set myLow [lindex $cards 0]
  set myHigh [lindex $cards end]

  # myHighSafe is largest card (following suit) which is lower than "$high" (if any)
  set myHighSafe ""
  if { $hasSuit } {

    foreach y [lsort -decreasing -command sortByRank $cards] {
      if { [numValue $y] < [numValue $high] } {
        set myHighSafe $y
        break;
      }
    }

    # we don't want to set "qs" as myHigh unless have to
    if {$myHigh == "qs" && [llength $cards] > 1} {
      set myHigh [lindex [lreplace $cards end end] end]
    }
    if {$myLow == "qs" && [llength $cards] > 1} {
      set myLow [lindex $cards 1]
    }

  } else {
    # don't have suit
    if {$smart} {

      # structure of ai(low) is: SUIT WEIGHT {list of {SET, NUMBER} pairs to match}
      # if "cards" match all the PAIRs in the appropiate NUMBERs, then , according to
      # WEIGHT, we reassign myLow. Same for myHigh later.

      set n 0 ; # currently unused
      set highest 0
      set highest_set {}

      # reselect myLow

      foreach i $ai(low) {
	foreach {suit weight tests} $i {
	  incr n

	  # don't use the normal spades tests if Qs down or we have it
	  if {$suit == "s" && ($qs_down || $have_qs)} {continue}

	  foreach s $suit {
	    set match 1
	    foreach test $tests {
	      set set [lindex $test 0]
	      set num [lindex $test 1]
	      if {[string range $num 1 1] == "+"} {
		if {[setinterN [set cards$s] $set] < [string range $num 0 0] } {set match 0}
	      } else {
		if {[setinterN [set cards$s] $set] != $num } {set match 0}
	      }
	    }  
	    if {$match} {
#puts "lll suit $s, weight $weight, pattern $tests matches: [set cards$s]"
	      if {$weight > $highest} {
		set highest $weight
		set highest_set [lsort -command sortByRank [setinter [lindex [lindex $tests 0] 0] [set cards$s]]]
                # if spades, no hearts down, safe to play high spade (< Queen), else play a low one
                if {$s == "s" && !$hearts_played && !$qs_down} {
#puts "lll suit SPADE setting myLow to end of $highest_set"
                  set myLow [lindex $highest_set end]$s
                } else {
#puts "lll suit $s, setting myLow to start of $highest_set"
                  set myLow [lindex $highest_set 0]$s
                }
	      }
	    }
	  }
	}
      }

      # reselect myHigh

      set highest 0
      set highest_set {}

      if {$down > 0} {
	foreach i $ai(high) {
	  foreach {suit weight tests} $i {
	    incr n

	    # don't worry about the spades tests if qs gone
	    if {$suit == "s" && $qs_down} {continue}

            foreach s $suit {
	      set match 1
	      foreach test $tests {
		set set [lindex $test 0]
		set num [lindex $test 1]
		if {[string range $num 1 1] == "+"} {
		  if {[setinterN [set cards$s] $set] < [string range $num 0 0] } {set match 0}
		} else {
		  if {[setinterN [set cards$s] $set] != $num } {set match 0}
		}
	      }  
	      if {$match} {
#  puts "hhh suit $s, weight $weight, pattern $tests matches: [set cards$s]"
		if {$weight > $highest} {
		  set highest $weight
		  set highest_set [lsort -command sortByRank [setinter [lindex [lindex $tests 0] 0] [set cards$s]]]
#  puts "hhh suit $s, setting myHigh to end of $highest_set"
		  set myHigh "[lindex $highest_set end]$s"
		}
	      }
            }
	  }
	}
      }
      # special rules go here
      # ... if we have qs, we can take some liberties with myLow (undone)

      # eg 2,5,7 clubs, 6 hearts -> play 6 hearts
      if {[numValue $myHigh] < 10 && \
          "$scoringcards" != "" && \
          [llength [set cards[suitValue $myHigh]]] > 2 } {
        set myHigh [lindex $scoringcards end]
#puts "special 1"
      }

      # if shooting, dont play a heart stimpy!
      if {$shooting && [suitValue $myLow] == "h" } {
        set tmp {}
        foreach i $cards {
          if {[suitValue $i] != "h"} {
            lappend tmp $i
          }
        }
        if {"$tmp" != "" } {set myLow [lindex $tmp 0] }
      } 
    }
  }

  foreach x $ai(play,$data(diff,$who)) {

    foreach {expr cmd play} $x {break;}

    switch $play {
	  LOW { set card $myLow }
	 HIGH { set card $myHigh }
     HIGHSHOT { set card $myHigh }
     HIGHSAFE { set card $myHighSafe }
      default { set card $play }
    }

    if $expr {
#      puts "    rule is: $expr, play $play"
      if {$play == "HIGHSHOT"} {
#	puts "SHOT"
	set data(lastwinners) 1
      }
      return $card;
    }
  }

   # [Mike is a girl programmer, and reckons] just in case...
   return [lindex $cards 0];
}

proc AIchooseCardsUp {who} {

  # choose 3 cards to discard

  global data ai

  # ai(discard,diff) is a list of rule to apply.
  # Currently have rules 1 2 3 4 5 (5 should be the safety)

  # variables here:
  #	discard:	cards 3 cards to discard
  #	cards:		players cards
  #	cards{c|d|s|h}	value of players cards in that suit ordered small to high

  set cards $data(cards,$who)
  set discard {}
  foreach suit {c d s h} {
    set cards$suit {}
  }
  foreach card $cards {
    scan $card "%1s%1s" v s
    lappend cards$s $v
  }
  foreach rule $ai(discard,$data(diff,$who)) {
     if {[llength $discard] > 2 } {break}

     switch -- $rule {
     1  { # discard queen spades

        set whereQ [lsearch $cardss q]
        if {$whereQ > -1} {
          lappend discard qs
          set cardss [setdiff $cardss q]
          set cards  [setdiff $cards qs]
	}  

        }
      2 { # get rid of high hearts, spades

        set suit s
	    foreach c [lreverse [setinter [set cards$suit] {k a}]] {
	      if {[llength $discard] > 2} { break } 
	      lappend discard $c$suit
	      set cards$suit [setdiff [set cards$suit] $c]
	      set cards  [setdiff $cards $c$suit]
            }
        set suit h
	    foreach c [lreverse [setinter [set cards$suit] {t j q k a}]] {
	      if {[llength $discard] > 2} { break } 
	      lappend discard $c$suit
	      set cards$suit [setdiff [set cards$suit] $c]
	      set cards  [setdiff $cards $c$suit]
            }
        }
     3  { # remove high spades, hearts if no low
        set suit s
          ### if we have 2s 3s 4s Qs As, do we want to chuck Qs, As
          # set lowspades [setinter [set cards$suit] {2 3 4 5 6 7 8 9 t j}]
          # set highspades [setinter [set cards$suit] {k a q}]
	  if {[llength [setinter [set cards$suit] {2 3 4 5 6 7 8 9 t j}]] < 4} {
	    foreach c [lreverse [setinter [set cards$suit] {k a q}]] {
	      if {[llength $discard] > 2} { break } 
	      lappend discard $c$suit
	      set cards$suit [setdiff [set cards$suit] $c]
	      set cards  [setdiff $cards $c$suit]
            }
	  } 
        set suit h
	  if {[llength [setinter [set cards$suit] {2 3 4 5 6 7}]] < 3} {
	    foreach c [lreverse [setinter [set cards$suit] {t j q k a}]] {
	      if {[llength $discard] > 2} { break } 
	      lappend discard $c$suit
	      set cards$suit [setdiff [set cards$suit] $c]
	      set cards  [setdiff $cards $c$suit]
            }
	  } 
        }
     4  { # try to short suit self in diamonds, clubs
	foreach suit {c d} {
	  set num_discards_left [expr 3 - [llength $discard]]
	  set num_cards_in_suit [llength [set cards$suit]]
	  if {$num_cards_in_suit <= [expr 1 + $num_discards_left] \
	      && $num_cards_in_suit > 0} {
	    while {[llength $discard] < 3 && [llength [set cards$suit]] > 0} {
	      set c  [lindex [set cards$suit] end]
	      lappend discard $c$suit
	      set cards$suit [setdiff [set cards$suit] $c]
	      set cards  [setdiff $cards $c$suit]
            }
	  } 
	}

        }
     5  { # get rid of large cards
	  # sort list <<c N> <d M> <s O> <h P>> so we know wich suit is least represented
	  set l {}
	  foreach suit {c d s h} {
	    lappend l [list $suit [llength [set cards$suit]]]
	  }

	  foreach pair [lsort -integer -index 1 $l] {
	    set suit [lindex $pair 0]
            if {$suit == "s"} {
              set highcards {q k a} 
            } else {
              set highcards {t j q k a} 
            }
	    foreach c [lreverse [setinter [set cards$suit] $highcards]] {
	      if {[llength $discard] > 2 || [llength [set cards$suit]] == 0 } { break } 
	      lappend discard $c$suit

	      set cards$suit [setdiff [set cards$suit] $c]
	      set cards  [setdiff $cards $c$suit]
	    }
	  }
	

        }
     6 { # get rid of large cards
	 # same as (5), but shred all cards
	  set l {}
	  foreach suit {c d s h} {
	    lappend l [list $suit [llength [set cards$suit]]]
	  }

	  foreach pair [lsort -integer -index 1 $l] {
	    set suit [lindex $pair 0]
	    foreach c [lreverse [setinter [set cards$suit] {2 3 4 5 6 7 8 9 t j q k a}]] {
	      if {[llength $discard] > 2 || [llength [set cards$suit]] == 0 } { break } 
	      lappend discard $c$suit
	      set cards$suit [setdiff [set cards$suit] $c]
	      set cards  [setdiff $cards $c$suit]
	    }
	  }
        }
     }
  }

  set move [lindex [list {} "15 0" "-15 0" "0 15"] $who]
  foreach x $discard {
    .c dtag cardNum$x down
    .c addtag up withtag cardNum$x
    eval .c move cardNum$x $move
  }

}

#############

proc doPassCards {} {
  global data

  # turn off binding
  .c bind player0 <Button-1> {}

  switch -- $data(round) {
    "1"  {set dirs "1 3 0 2"}
    "2"  {set dirs "2 0 3 1"}
    "3"  {set dirs "3 2 0 1"}
  }

  foreach x [list 0 1 2 3] {
    set up($x,ids) [.c find withtag "player$x&&up"] ;# ids
    set up($x,faces) {} ;# face values
    foreach y $up($x,ids) {
      lappend up($x,faces) [set val [fullValue $y]]
      .c dtag $y player$x
      set pos [lsearch $data(cards,$x) $val]
      set data(cards,$x) [lreplace $data(cards,$x) $pos $pos]
    }
  }

  foreach x [list 0 1 2 3] {
    set recip [lindex $dirs $x]
    foreach y $up($x,faces) {
      lappend data(cards,$recip) $y
      .c addtag player$recip withtag cardNum$y
    }
  }
  sortPlayerCards

  # here we reimage the cards as some have been 
  # swapped to player and are now face up and vice-versa
  foreach x $data(cards,0) {
    .c itemconfig [.c find withtag cardNum$x] -image ::img::$x
  }
  foreach x "$data(cards,1) $data(cards,2) $data(cards,3)" {
    .c itemconfig [.c find withtag cardNum$x] -image [getImage $x]
  }

# &&&
  set base1 $data(tb_base)
  set diff1 $data(tb_diff)
  set base2 $data(tr_base)
  set diff2 $data(lr_diff)
  for {set i 0} {$i < 13} {incr i} {
    .c coords [set c cardNum[lindex $data(cards,0) $i]] [expr {$base1+($i*$diff1)}] $data(t1)
    .c raise $c
    .c coords [set c cardNum[lindex $data(cards,3) $i]] [expr {$base1+($i*$diff1)}] $data(t2)
    .c raise $c
    .c coords [set c cardNum[lindex $data(cards,1) $i]] $data(t2)  [expr {$base2+($i*$diff2)}] 
    .c raise $c
    .c coords [set c cardNum[lindex $data(cards,2) $i]] $data(t3) [expr {$base2+($i*$diff2)}]
    .c raise $c
  }

  set moves [list "0 -15" "15 0" "-15 0" "0 15"]
  foreach x [list 0 1 2 3] {
    foreach y [.c find withtag "player$x && up"] {
      eval .c move $y [lindex $moves $x]
    }
  }

  set data(doing) "accept"
  makeButton "Accept Cards" doAcceptCards
  setStatus "Click \"Accept Cards\" to continue"
}

proc doAcceptCards {} {
  global data

  # here, we need to:
  #   a) set all cards "down" not "up", and move 'em to the right spot
  #   b) set up the bindings for the first round
  #   c) fire off the AI to move, if the player doesn't have the 2 of clubs

  foreach x [.c find withtag "player0 && up"] {
    .c dtag $x up
    .c addtag down withtag $x
    .c move $x 0 15
  }
  foreach x [.c find withtag "player1 && up"] {
    .c dtag $x up
    .c addtag down withtag $x
    .c move $x -15 0
  }
  foreach x [.c find withtag "player2 && up"] {
    .c dtag $x up
    .c addtag down withtag $x
    .c move $x 15 0
  }
  foreach x [.c find withtag "player3 && up"] {
    .c dtag $x up
    .c addtag down withtag $x
    .c move $x 0 -15
  }

  destroy .c.btn ;# remove the "accept" button
  update
  after [getDelay 300 200]
  startPlay

}

proc startPlay {{where ""}} {
  global data

  set data(doing) play2
  set data(pot) [list {} {} {} {}]
  set data(suit) {}

  if {$where == ""} {
    # find who has two clubs
    foreach x [list 0 1 2 3] {
      if { [lindex $data(cards,$x) 0] == "2c" } {
	set where $x;
	set data(doing) play1
      }
    }
  }
  if { $where == "0" } {
    doPlayersTurn
  } else {
    runAI $where
  }

}

proc runAI {who} {
  global data

  # Start running the AI (ie, computer players start throwing out cards for this round)
  # from player $who (1, 2 or 3). When we get to player 3, we stop for the human
  # player to take his turn, then carry on at player 1. Stop when everyone's had a go.

  ### setStatus "Waiting for $data(name,$who) to move..."
  ### set time [lindex [shuffleList [list 200 220 250 300 320 350 500]] 0]
  ### after $time
  update

  # for all the cards $who, see what an AI of his intelligence would play
  set card [AIgetBestCard $who]
  set len [llength $data(cards,$who)]
  # and actually play it
  doPlayCard $card $who
  doNextPlayer $who

}

proc doNextPlayer {last} {
  global data

  if { [lsearch $data(pot) {}] == "-1" } {
    doEndRound
  } else {
    after [getDelay 50 200]
    if { $last == "2" } {
      doPlayersTurn
    } else {
      runAI [lindex [list 1 3 XXX 2] $last]
    }  
  }
}

proc doPlayCard {value who} {
  global data

#puts "*** $data(name,$who) plays $value"

  if { $who != 0 } {
    scan $value "%1s%1s" v1 v2
    set text "$data(name,$who) plays the [spellValue $v1] of [spellSuit $v2]s"
    setStatus $text
  }
  .c raise cardNum$value
  .c addtag inPlay withtag cardNum$value
  .c itemconfigure cardNum$value -image ::img::$value ;# show AI cards
  doMoveCard .c cardNum$value $who
  set pos [lsearch $data(cards,$who) $value]
  if { [string range $value end end] == "h" } {
    set data(hearts) 1
  }
  set data(cards,$who) [lreplace $data(cards,$who) $pos $pos]
  set data(pot) [lreplace $data(pot) $who $who $value]
  if { $data(suit) == "" } {
    set data(suit) [string range $value end end]
    set data(lead) $value
  }
}

proc doPlayersTurn {} {
  global data

  .c bind player0 <Button-1> doPlayersTurnSub

  if {$data(doing) == "play1" && $data(pot) == {{} {} {} {}} } {
    setStatus "Click the Two of Clubs to begin the round"
  } else {
    setStatus "Select a card to play"
  }
}

proc doPlayersTurnSub {} {
  global data

  # Use 'current' tag to tell which card was clicked (thanks RS!)

  set card [.c find withtag current]
  set v(full) [fullValue $card]
  scan $v(full) "%1s%1s" v(face) v(suit)

  set played [expr {4-[llength [lsearch -all $data(pot) {}]]}]
  set hasNonHearts [expr {[llength [lsearch -all -glob $data(cards,0) "?h"]] != [llength $data(cards,0)]}]

  if { $played == "0" && $data(doing) == "play1" && $v(full) != "2c" } {
    set valid 0
    set msg "You must lead with the Two of Clubs"
  } elseif { $played == "0" && $v(suit) == "h" && !$data(hearts) && $hasNonHearts} {
    set valid 0
    set msg "Hearts has not been broken. Choose another suit"
  } else {
    set hasSuit [expr {[lsearch -glob $data(cards,0) "?$data(suit)"]!="-1"}]
    if { $hasSuit && $v(suit) != $data(suit) } {
      set valid 0
      set msg "You must follow suit; play a [spellSuit $data(suit)]."
    } elseif { $data(doing) == "play1" && ($v(suit) == "h" || \
        $v(full) == "qs") } {
      set valid 0
      set msg "You cannot play a Point Card in the first round."
    } else {
      set valid 1
    }
  }

  if { $valid } {
    # play the card
    .c bind player0 <Button-1> {}
    .c dtag $card player0
    setStatus "$data(name,0) plays the [spellValue $v(face)] of [spellSuit $v(suit)]s"
    doPlayCard $v(full) 0
    doNextPlayer 0
  } else {
    doErrorClick $card $msg
  }

}

proc doEndRound {} {
  global data

  ### wait for a button click before proceeding if data(pause) set
  if {$data(pause)} {
    set currently $data(doing)
    set data(doing) paused
    setStatus "Press button 1 to continue"
    bind .c <Button-1> "set data(doing) $currently"
    update
    # this is a little unresponsive !
    tkwait variable data(doing)
    bind .c <Button-1> ""
  }

  # everyone player has played a card; sort scores, check if all cards
  # dealt have been played (and show scores if they have).

  # find who scored highest
  set pot $data(pot)
  foreach x [lsort -decr [setdiff "0 1 2 3" [lsearch -all -glob $pot "?$data(suit)"]]] {
           set pot [lreplace $pot $x $x]
  }
  set pot [lsort -command sortByRank $pot]
  set high [lindex $pot end]
  set player [lsearch $data(pot) $high] ;# $player (0-3) played the highest card
  set data(lastwinners) [lrange "$player $data(lastwinners)" 0 2]

#puts ""
#puts "*** hand won by $data(name,$player). pot is $data(pot) **"
#puts ""

  setStatus ""

  # tally up points
  foreach x $data(pot) {
           if { $x == "qs" || [string range $x end end] == "h" } {
                lappend data(points,$player) $x
              }
          }

  # move pot off the table
  switch -- $player {
    0 {set x   0 ; set y  15}
    1 {set x -15 ; set y   0}
    2 {set x  15 ; set y   0}
    3 {set x   0 ; set y -15}
  }

  .c lower inPlay

  after [getDelay 400 200]

  for {set i 0} {$i < 33} {incr i} {
    .c move inPlay $x $y
    update
    after [getDelay 1 2]
  }

  .c delete inPlay

  set cardsLeft [llength $data(cards,0)]

  after [getDelay 100 100]

  if { $cardsLeft > 0 } {
    startPlay $player
    return;
  }

  ### this round is over

  # show scoring cards &&&
  # Algorithm is the same as dealing cards in "proc deal"
  # but include an offset to center allign the cards

  set diff $data(tb_diff)

  # player's cards 

  set lc [lsort -command sortByCard $data(points,0)]
  set lc_len [llength $lc]
  if {$lc_len < 14} {set tmp 13.0} else {set tmp 14.0}
  # ^^^ funky code to allow for having 14 cards next to name instead of 13

  set base [expr $data(tb_base) + ($tmp-$lc_len)/2 * $diff]

  for {set i 0} {$i < $lc_len} {incr i} {
    .c create image [expr {$base+($i*$diff)}] $data(t1) \
	      -image ::img::[lindex $lc $i] -anchor nw -tags showscore
   }

  # top AI's cards

  set lc [lsort -command sortByCard $data(points,3)]
  set lc_len [llength $lc]
  if {$lc_len < 14} {set tmp 13.0} else {set tmp 12.0}
  set base [expr $data(tb_base) + ($tmp-$lc_len)/2 * $diff]

  for {set i 0} {$i < $lc_len} {incr i} {
    .c create image [expr {$base+($i*$diff)}] $data(t2) \
	      -image ::img::[lindex $lc $i] -anchor nw -tags showscore
  }

  set diff $data(lr_diff)

  # left AI's cards

  set lc [lsort -command sortByCard $data(points,1)]
  set lc_len [llength $lc]
  if {$lc_len < 14} {set tmp 13.0} else {set tmp 14.0}
  set base [expr $data(tr_base) + ($tmp-$lc_len)/2 * $diff]

  for {set i 0} {$i < $lc_len} {incr i} {
       .c create image 15 [expr {$base+($i*$diff)}] \
                 -image ::img::[lindex $lc $i] -anchor nw -tags showscore
      }

  # right AI's cards

  set lc [lsort -command sortByCard $data(points,2)]
  set lc_len [llength $lc]
  if {$lc_len < 14} {set tmp 13.0} else {set tmp 12.0}
  set base [expr $data(tr_base) + ($tmp-$lc_len)/2 * $diff]

  for {set i 0} {$i < $lc_len} {incr i} {
    .c create image $data(t3) [expr {$base+($i*$diff)}] \
	      -image ::img::[lindex $lc $i] -anchor nw -tags showscore
  }

  ### end show scoring cards
       
  foreach x [list 0 1 2 3] {
    if { [llength $data(points,$x)] == "14" } {
      set not $x
      break;
    }
  }

  if { [info exists not] } {
    foreach x [setdiff "0 1 2 3" $not] {
      set last [lindex $data(score,$x) end]
      incr last 26
      lappend data(score,$x) $last
    }
    set last [lindex $data(score,$not) end]
    lappend data(score,$not) $last
  } else {
    foreach x [list 0 1 2 3] {
      set last [lindex $data(score,$x) end]
      set points [llength $data(points,$x)]
      if { [lsearch $data(points,$x) "qs"] != "-1" } {
	incr points 12
      }
      incr last $points
      lappend data(score,$x) $last
    }
  }

  foreach x [list 0 1 2 3] {
    set data(cards,$x) $data(points,$x)
  }
  sortPlayerCards
  # display player cards. Problem here is they won't necessarily have
  # 13 cards, but we do want them centered on the screen.
  # And the current code for showing a player's hand uses hard-coded values,
  # based on the fact there're always 13 cards to start with...


  foreach x [list 0 1 2 3] {
    if { [lindex $data(score,$x) end] >= $data(winAt) } {
      set data(playing) 0
      showScores
      return;
    }
  }

  showScores {.c delete showscore ; deal}

}

proc getDelay {min multiplier} {

  return [expr int((2 - $::data(speed)) * $multiplier) + $min]

}

proc doErrorClick {card msg} {
  global data

  set binding [.c bind player0 <Button-1>]
  .c bind player0 <Button-1> {}
  set picture [.c itemcget $card -image]
  .c itemconfigure $card -image ::img::back
  set text [.status cget -text]
  setStatus $msg
  update
  after 300 ".c itemconfigure $card -image $picture ; .c bind player0 <Button-1> $binding"
  set data(statusAfter) [after [getDelay 500 300] [list setStatus $text]]

}

proc setStatus {text} {
  global data

  if { [info exists data(statusAfter)] && $data(statusAfter) != "" } {
    set this $data(statusAfter) ; set data(statusAfter) ""
    foreach x $this {
      after cancel $this
    }
  }
  .status configure -text $text
}

proc spellSuit {short} {

  set which [lsearch "c d h s" $short]
  incr which
  return [lindex "$short Club Diamond Heart Spade" $which];
}

proc spellValue {val} {

  switch -- $val {
           a {set ret Ace}
           2 {set ret Two}
           3 {set ret Three}
           4 {set ret Four}
           5 {set ret Five}
           6 {set ret Six}
           7 {set ret Seven}
           8 {set ret Eight}
           9 {set ret Nine}
           t {set ret Ten}
           j {set ret Jack}
           q {set ret Queen}
           k {set ret King}
     default {set ret $val}
  }
  return $ret;


}

proc doMoveCard {c item who} {

  set steps 15

  # base measurements, for the center of the screen
  set tox 230
  set toy 162
  # adjust depending on which side the card comes from
  switch $who {
      0 {incr toy 22; #incr tox -5}
      1 {incr tox -22; #incr toy 5}
      2 {incr tox 22; #incr toy -5}
      3 {incr toy -22; #incr tox 5}
  }

  set time [getDelay 1 5]

  scan [$c coords $item] "%s %s" origx origy

  if { ![info exists origx] } {
#    puts "Error! \[[info level 0]\] / [$c coords $item]"
    parray ::data *,$who
  }

  ### move card
  set dx [expr ($tox - $origx)/($steps)]
  set dy [expr ($toy - $origy)/($steps)]

  # do (steps - 1) moves in loop, then the final move alone (to end up exactly on spot)
  for {set i 1} {$i < $steps} {incr i} {
    $c move $item $dx $dy
    update idletasks
    after $time
  }
  scan [$c coords $item] "%s %s" nowx nowy
  $c move $item [expr $tox - $nowx] [expr $toy - $nowy]
  update idletasks
  after $time

}


proc fullValue {id} {

  set tags [.c gettags $id]
  set tag [lindex $tags [lsearch -glob $tags cardNum*]]
  return [string range $tag end-1 end];

}

# these three procs are a mess ! and the "update"s are important...

proc doCardUpDown {} {
  global data

  # get the card's id
  set card [.c find withtag current]
  if { $card == "" } {
    error "Error finding card in 'doCardUpDown'!"
  }

  if { [lsearch [.c gettags $card] up] != "-1" } {
    .c dtag $card "up"
    .c addtag "down" withtag $card
    .c move $card 0 20
    set data(currentHigh) {}
    update
  } elseif { [llength [.c find withtag "player0 && up"]] == "3" } {
    bell -displayof .
  } else {
    .c dtag $card down
    .c addtag up withtag $card
    if { $card == $data(currentHigh) } {
      .c move $card 0 -15
    } else {
      .c move $card 0 -20
    }
    update
  }

  if { [llength [.c find withtag "player0 && up"]] == "3" } {
    .c.btn configure -state normal
  } else {
    .c.btn configure -state disabled
  }

}

proc doCardUp {} {
  # raise card a little to acknowledge focus
  global data

  if { ! $data(autoraise) } return

  set card [.c find withtag current]
  set data(currentHigh) $card
  if { [lsearch [.c gettags $card] up] != "-1" || $card == {} } {return}
  .c move $card 0 -5
  update
}

proc doCardDown {} {
  global data

  if { ! $data(autoraise) } return

  set card [.c find withtag current]
  if { [lsearch [.c gettags $card] up] != "-1" \
       || $card != $data(currentHigh) } {return}
  .c move $card 0 5
  set data(currentHigh) {}
  update
}

proc showOptions {} {
  global p data speed tmpOpt ai

  set thisCmd [lindex [info level 0] 0]
  if { [info exists dialog(cmd)] && !($dialog(cmd) == "" || $dialog(cmd) == $thisCmd) } {
    return; # already got another dialog up
  }
  set dialog(cmd) $thisCmd
  set dialog(win) .options
  set w .options

  initSubWindow $w "$p(name) - Options" 1

  set destroyCmd [list closeDialog $w [list setNewOptions 1]]
  set cancelCmd [list closeDialog $w [list setNewOptions 0]]
  wm protocol $w WM_DELETE_WINDOW $cancelCmd
  .c configure -state disabled
  bind $w <Return> $destroyCmd

  foreach x [list name,0 name,1 name,2 name,3 speed scores pause autoraise] {
        set tmpOpt($x) $data($x)
  }

  pack [frame $w.top] -side top
  pack [frame $w.btm] -pady 10

  set tmpOpt(aiVals) {}
  foreach x [lsort -int [string map [list text, {}] [array names ai text,*]]] {
    lappend tmpOpt(aiVals) $ai(text,$x)
  }

  pack [frame $w.top.title] -side top

  pack [label $w.top.title.image1 -image ::img::heart ] -side left -padx 30
  # pack [label $w.top.title.image2 -image ::img::heart ] -side right -padx 30
  # pack [label $w.top.title.text -text TkHearts -font $data(font_large) ] -side right

  # set aai [labelframe $w.top.ai -borderwidth 0 -labelanchor n ]  
  set aai [labelframe $w.top.ai -borderwidth 0 -labelanchor n ]  

  # Player's name widget
  pack [frame $aai.0] -side top -padx 2 -pady 12 -anchor nw

  pack [label $aai.0.lName -width 11 -anchor w -text "Player "] -side left
  pack [entry $aai.0.eName -textvariable tmpOpt(name,0) \
    -validatecommand {expr {[string length %P] <= 11}} \
    -invalidcommand {bell -displayof %W} -validate key -width 12] -side left


  set i 0
  foreach x [list 1 3 2] {
    incr i
    pack [frame $aai.$x] -side top -padx 2 -pady 3
    pack [label $aai.$x.lName -width 11 -anchor w -text "Computer $i"] \
      -side left
    pack [entry $aai.$x.eName -textvariable tmpOpt(name,$x) \
      -validatecommand {expr {[string length %P] <= 11}} \
      -invalidcommand {bell -displayof %W} \
      -validate key -width 12] -side left
    pack [label $aai.$x.lDiff -text "Skill"] -side left -padx 10
    pack [spinbox $aai.$x.sDiff -values $tmpOpt(aiVals) \
      -state normal -width 11 \
      -textvariable tmpOpt(aiDiff,$x)] -side left
    $aai.$x.sDiff set $ai(text,$data(diff,$x))
  }

  pack $aai -side top -pady 5 -padx 10

  # ok steve - new radio button widgets all round

  # these frames just align the radio widgets nicely (I hope)
  frame $w.btm.left -width 100
  frame $w.btm.right -width 100

  foreach \
  i {{Card Speed} {Pause Each Hand} {Scores in Title} {Autoraise}} \
  j {{2 1 0} {1 0} {1 0} {1 0}} \
  k {speed pause scores autoraise} \
  l {{Fast Med Slow} {Yes No} {Yes No} {Yes No}} {
    pack [label $w.btm.left.$k -text "${i}" -width 15 -anchor w] -side top -pady 4 -fill x -anchor w

    # frame the radiobuttons
    pack [frame $w.btm.right.$k] -side top -pady 4 -anchor w

    foreach x $j y $l {
      radiobutton $w.btm.right.$k.$x -width 4 -variable tmpOpt($k) -value $x -text $y
      pack $w.btm.right.$k.$x -side left -fill x
    }
  }
  # tweak the spacing a little
  $w.btm.right.speed.1 configure  -width 5

  pack $w.btm.left -side left -fill x -anchor w -ipadx 5 -padx 10
  pack $w.btm.right -side right -fill x -anchor e -ipadx 5

  pack [frame $w.btn] -side bottom
  pack [button $w.btn.ok -command $destroyCmd -text "OK" \
    -width 8 -default active] -side left -pady 8 -padx 30
  pack [button $w.btn.cancel -command $cancelCmd -text "Cancel" \
    -width 8] -side right -pady 8 -padx 30

  update
  center $w
  wm deiconify $w
  update
  grabSubWindow $w
  wm resizable $w 0 0
  raise $w
  focus -force $w
  
  return;

}

proc setNewOptions {set} {
  global tmpOpt data

  if { $set } {
    # update options
    foreach x [list name,0 name,1 name,2 name,3 speed scores pause autoraise] {
      set data($x) $tmpOpt($x)
    }

    chkTitle
	    
    foreach x {0 1 2 3} {
      .c itemconfig name$x -text $data(name,$x)
    }
	      
    foreach x [list 1 2 3] {
      set data(diff,$x) [lsearch $tmpOpt(aiVals) $tmpOpt(aiDiff,$x)]
    }
  }

# now remove temporary changes
unset tmpOpt


}

proc chkTitle {} {

  global data p

  if {$data(scores)} {
    set data(title) "$p(name)  -  [lindex $data(score,0) end]    [lindex $data(score,1) end]    [lindex $data(score,3) end]    [lindex $data(score,2) end]"
  } else {
    set data(title) $data(title_const)
  }
  wm title . $data(title)
}

proc showScores {{cmd ""}} {
  global p data dialog

  set thisCmd [lindex [info level 0] 0]
  if { [info exists dialog(cmd)] && !($dialog(cmd) == "" || $dialog(cmd) == $thisCmd) } {
       return; # already got another dialog up
     }
  set dialog(cmd) $thisCmd
  set dialog(win) .scores
  set w $dialog(win)
  
  # see which place we're in for the window title
  set myScore [lindex $data(score,0) end]
  set allScores $myScore
  lappend allScores [lindex $data(score,1) end]
  lappend allScores [lindex $data(score,3) end]
  lappend allScores [lindex $data(score,2) end]
  set allScores [lsort -integer $allScores]
  set bestScore [lindex $allScores 0]
  set worstScore [lindex $allScores end]
  set place [lsearch $allScores $myScore]
  set place [string map "0 First 1 Second 2 Third 3 Last" $place]

  initSubWindow $w "Scores -- $place Place" 1

  set destroyCmd [list closeDialog $w $cmd]
  wm protocol $w WM_DELETE_WINDOW $destroyCmd
  .c configure -state disabled

  # hmmm - no overstrike fonts in wish8.5b1

  set tmp [label .nameThatWontBeUsed]
  set lFont [$tmp cget -font]
  catch {destroy $tmp}
  set font [font actual "[font actual $lFont] -weight bold"]
  set font2 [font actual "[font actual $font] -overstrike 1"]
  set width 85
  pack [frame $w.top] -side top -fill both

  set title {}
  foreach x {0 1 3 2} {
    pack [frame $w.top.player$x] -side left -fill y
    set highest [lindex $data(score,$x) end]
    if { $highest == $bestScore } {
      # $worstScore >= $data(winAt) ???
      set color($x) blue
      set color2($x) blue
    } else {
      set color($x) black
      set color2($x) black
    }                
    pack [label $w.top.player$x.name -foreground $color($x) -font $font \
	  -text $data(name,$x) -width $width -justify center \
	  -compound top -image ::img::blank] \
      -anchor nw -side top -fill x
    set round 0
    # first pack the overstruck previous scores (except 0)
    if { [llength $data(score,0)] > 2 } {
      foreach y [lrange $data(score,$x) 1 end-1] {
	pack [label $w.top.player$x.r$round -foreground $color($x) \
	      -font $font2 -text $y -width $width \
	      -justify center -compound top \
	      -image ::img::blank] \
	  -anchor nw -side top -fill x
        incr round
      }
    }

    set score [lindex $data(score,$x) end]

    # now pack the latest score in normal font
    pack [label $w.top.player$x.r$round -foreground $color2($x) \
	  -font $font -text $score \
	  -width $width -justify center -compound top \
	  -image ::img::blank] \
      -anchor nw -side top -fill x
  }

  chkTitle

  pack [button $w.top.ok -text "OK" -command $destroyCmd -width 8 -default active] \
    -side left -padx 5 -anchor center
  bind $w <Return> $destroyCmd

  if { $worstScore >= $data(winAt) } {
    pack [label $w.btm -text "Game over! You came in $place place."] \
      -side bottom
    setStatus "Game over! You came in $place Place."
  } else {
    setStatus "Close the Scores dialog to continue playing."
  }

  update
  center $w
  wm deiconify $w
  update
  grabSubWindow $w
  wm resizable $w 0 0
  raise $w
  focus -force $w

  return;

}

proc initHelp {} {

  global help p data tcl_patchLevel

  # restructured mikes nice (but god-forsaken) help widget with 0.90 &&&
  # hmmm - my set-up is a little confusing i guess -
  # each help text ("k") is just a list of {text format text format ....}
  # where format is the text "tag" that determines any special formatting

  foreach {i j k} {

    0 Overview {

{Hearts is an fun card game for four players... Or one player and three AIs (Artificial Intelligences).} {} \n\n {}

{The game is played in rounds in which the whole deck is dealt.  Playing hands where the highest card following suit wins, players try to win as few scoring cards as possible.  These are the Hearts suit for 1 point each, and the Queen of Spades for 13 points.} {} \n\n {}

{Additional rounds are played until someone has 100 points, when the game is over, and the player with the lowest score wins.} {} \n\n {}
}

    1 "How To Play" {

{At the start of the first, second and third rounds, select three cards to pass to your opponent (left, right, and then across). On the fourth round, no cards are passed. To select a card, click on it. To deselect a card, simply click it again.} {} \n\n {}

{The player with the Two of Clubs begins the round.} {} \n\n {}

{Moving clockwise around the table, every player plays one card.  You must play a card of the same suit, if you have one. If not, you can play any card, with the exception that a) you cannot play a point card on the first hand of a round, and b) you cannot lead a Heart unless one has been played previously in the round, or you have no other cards left.} {} \n\n {}

{Whoever plays the highest card of the same suit as that which opened the hand collects all the cards. He or she gains one (1) point for every Heart in the hand, and thirteen (13) points for the Queen of Spades.} {} \n\n {}

{Play continues like this until all cards have been played. A new round is then started; this continues until any player ends a round with 100 points or more, when the game ends. Whoever has the lowest score at this time is the winner.} {} \n {} }

    2 "Scoring & Tips" {

"As mentioned in " {}
"How to Play" "link goto1"
", all Hearts are worth one (1) point, and the Queen of Spades is worth thirteen (13) points. The exception to this rule is that, if you collect all the point cards - the Queen of Spades and all the Hearts - every other player on the game scores twenty six (26) points, and you don't score any. This is called " {}
"Shooting the Moon" "italic"
". Shooting the Moon is easier to do if your hand contains a large number of point cards.\n\n" {}

"Avoid taking hands which contain point cards.\n\n" {}

"In rounds that start by passing cards to other players, get rid of the highest valued cards you have first (aces, kings, etc). Then, during the game, try to get rid of your higher valued cards early on, while it's more likely that other players will be able to follow suit, and won't be able to drop in a point card.\n\n" {}

"Keep track of which cards have been played, as best you can. In particular, look out for whether the Queen of Spades has been played yet, and whether Hearts has been broken (whether a Heart has been played yet in this round).\n" {} }

    3 Changes {

"0.91 - Help menu up/down key bindings." indent \n {}
"0.90 - Restructured Help and About widgets, made the logo bitmap transparent." indent \n {}
"0.87 - Seem to have the auto raise feature working :-> Made the help widget fonts a little bigger." indent \n {}
"0.86 - Re-did Mike's god-awful indentation. Some code tidy up thinking about resizing the game. Bug fix for double clicking on an illegal card. Added a spider card-back." indent \n {}
"0.85 - Added a little program icon for window managers, Changed the card-back widget to work automatically." indent \n {}
"0.80 - Tweaked and removed bugs from new AI. Confined the end of round click to the canvas. Centre allign the end of round cards display and changed the Game Overview a little. Created a new heart picture." indent \n {}
"0.75 - Stopped player from 'shooting', and improved the 'Rules' again. Centre allign the end of round cards display and changed the Game Overview a little." indent \n {}
"0.70 - Start implementing new AI for selecting myHigh, myLow, and found a little bug in the 'down==3 -> play HIGH' rule. Restructured the Options widget, including an option to show the scores in the title bar." indent \n {}
"0.60 - Bit of code rewrite as spider is now separate again. Changed the menus around a little, disabled the Confirm Quit dialog, and overhauled the About widget." indent \n {}
"0.51 - Two unlikely bugfixes for wayward right clicking, and this is also the first release incorporating tkspider!" indent \n {}
"0.50 - Multiple score colors at the end removed.  Correctly show if the player should lead the two of clubs. Overhauled the game speed, card step logic and the name widgets. Fixed the bug that computer won't ever play hearts first and ... started to overhaul the AI. Added pause after hand feature." indent \n {}
"0.40 - Added a debug feature to see the computer's cards. Implemented better card discard AI." indent \n {}
"0.30 - Made new card backs." indent \n {}
"0.28 - Don't display the overstruck zeros in the score. Move the initial player-name dialog into the options menu. Gave the heart gif a little tweak. Fixed up the AI ordering issues (I hope)." indent \n {}
"0.27 - Scoring cards at end of round are displayed." indent \n {}
"0.26 - Window code changes, options menu and colour chooser, a few bug fixes. Mike added an AI fix." indent \n\n {}

{The below changes are from Mike's original Hearts program} {} \n\n {}

"0.24 - Fixed error in help-file found by Olier Raby. Also updated the 'Last Modified' date, which I hadn't done for v0.23." indent \n {}
"0.23 - You're now asked for your name when you open the program, and then a game starts automatically. Also, a number of options are now saved when you close the program, in \.hearts\ (unix) or \hearts.ini\ (other platforms). The code for these changes was written by Olier Raby - thank you for sharing it :)" indent \n {}
"0.22 - Fixed bug in doEndRound, when someone has all the point cards (Queen of Spades and all the Hearts). Found by Gerald Lester." indent \n {}
"Added Heart image into Options dialog, to fill some empty space and make it more attractive" indent2 \n {}
"0.21 - Added help-files" indent \n {}
"0.20 - Options dialog now does validation on the entry widgets, to keep AI names at most 15 characters long. This is to help avoid them needing two lines to fit on the screen, since it's a whole lot of hassle to implement right that I don't need :)" indent \n {}
"0.19 - Fixed scoring bugs found by \[Anon] on the Wiki." indent \n {}
"Scoring changes (buggy, but fixed in 0.19, see below)" indent2 \n {}
"AIs are now numbered 0-2 (not 1-3) for \[lindex] purposes" indent2 \n {}
"Status bar is now set via a \[setStatus] proc, rather than by directly configuring the widget, so that delayed calls to set it via \[after] can be cancelled." indent2 \n {}
"There's no longer a delay (previously 350ms) between the right AI playing a card, and the player bindings being set (in doNextPlayer)." indent2 \n {}
"0.18 - Added Options dialog." indent \n {}
"Removed \[hastag] proc - it was only used once, so I just used it's (one-line) body directly in the spot where it was being called. Marginally increases the speed." indent2 \n {}
"0.17 - Added Button-3 event that raises a player's card, so you can see the whole thing." indent \n {}
"0.16 - Added more status bar messages, so it doesn't appear to hang at the end of a round/game." indent \n {}
"Minor changes to score dialog's appearance (to allow less red, and to add overstriking of scores from previous rounds)" indent2 \n {}
"0.15 - Added a variable, $data(winAt), which stores the number of points needed to lose the game. Saves changing it in multiple places for debugging things." indent \n {}
"Removed lots of old debugging calls to \[puts], and fixed the OK button on the Scores dialog to have \-default active\, instead of \-state active" indent2 \n {}
"0.14 - The Scores dialog now shows scores over 100 in red, at game end (suggsted by RDT)." indent \n {}
"0.13 - Bug in the AIchooseCardsUp proc fixed where, with multiple \[lreplace] calls, the later ones were getting list indexes that no longer existed" indent \n {}
"0.12 - Introduced a third (and final?) AI, slightly better than the last in avoiding the Queen of Spades" indent \n {}
"0.11 - Changes to the AI, because the way the new system was set up sucked ;)" indent \n {}
"0.10 - Changed the way the AI works, so that all that's needed to define which cards get put up at the start of a round is a simple list of glob patterns (ie, '*a *k *q *j *t ... *2' to go from highest to lowest)." indent \n {}
"0.9  - Fixed bug mentioned in 0.8 (99% sure - extra \[puts] left in just in case, for now). Also fixed a bug in the score dialog that made it say the game was over if someone scored more than 10 points - it should be more than 99, but I'd changed it once to check it worked and never set it back." indent \n {}
"Also updated the 'About' dialog to acknowledge contributions from people who I'd thus far left off due to forgetfulness." indent2 \n {}
"0.8  - Added 'debugging' \[puts] in doMoveCard, to try and catch the bug found by rdt. (If origx isn't set, it prints the arguments it was called with, and the results of the \[\$c coords \$item] (where \$origx should come from)." indent \n {}
"0.7  - AIs could play a Heart on the first round. Bug found by \[rdt]." indent \n {}
"0.6  - The main window is now centered on startup, and isn't resizable." indent \n {}
"Small internal change to the code for \transient\ windows, to better handle error cases (which shouldn't be possible, but better safe than sorry), and to deactivate .c instead of removing the bindings on the tags - same effect, but less chance of it going wrong somewhere later." indent2 \n {}
"0.5  - Added a dialog for selecting which cardback you want to use." indent \n {}
"\package require Tk\ also added by Brian Theado \[http://mini.net/tcl/561]." indent \n {}
"Also removed a card-back image I didn't like, and added 2 more (to make 8 in total, better for displaying the 'select card back' screen): a red pattern, and a Tcl Powered one." indent2 \n {}
"Changed the way the card backs are stored - the cardback array is now set via a proc (so that it can be unset to free memory, but set again later); later, you'll be able to select/change the cardback image at any time. The cardback() array's keys no longer need to be incrementing integers for random selection, either, so the images can be named." indent2 \n {}
"0.4  - Temporary (and, as it turned out, buggy) score dialog removed, and replaced with a proper one." indent \n {}
"0.3  - First playable version. Basic level AI only, and a poor score dialog, but the game works. Also added displaying the four player's names on the canvas, by their cards." indent \n {}
"Game starts if an AI has the 2 of clubs, but fails when it's the (human) player's turn." indent2 \n {}
"Beginning of AI so the other players can also pick cards." indent2 \n {}
"0.2  - you can now pick which three cards to pass on." indent \n {}
"0.1  - Initial version, shows the canvas and deals cards, but nothing else." indent \n {} }

4 About {}

} {
      set help($i) ""
      set help(title,$i) "$j"
      set help(text,$i) "$k"
  } 

  # end foreach
  # now mix the variables into the about / change

  set help(text,4) [list "$p(name) $p(version) ($p(date)) by Steven A (with feedback from Mike). Available at the $p(web).\n\n" {} "Based on: Hearts $p(mike_release) was written by Mike Griffiths. Code, ideas, feedback, etc, were gratefully received from: Richard Suchenwirth, Vince Darley, Gerald Lester, and especially R. Dale Thomas. Thanks! $p(mike_email)\n\n" {} "Tcl Version $tcl_patchLevel.\n" {} ]

}

proc showHelp {{topic 0}} {

  global p help data

  set w .help

  if { [winfo exists $w] } {
    showHelpTopic  $w $topic
    wm deiconify $w
    raise $w
    focus $w
    return
  }

  initSubWindow $w "$p(name) - Help" 0

  pack [listbox $w.l -selectmode single -font $data(font_default) -width 12] \
    -expand 0 -fill y -side left -anchor nw
  bind $w.l <<ListboxSelect>> "showHelpTopic $w"
  pack [text $w.t -width 40 -height 22 -yscrollcommand "$w.s set" \
                  -wrap word -font $data(font_default) -padx 5 -pady 8] \
        -expand 1 -fill both -side left -anchor nw
  $w.t tag configure "title" -font $data(font_large) -justify center
  $w.t tag configure "indent" -lmargin2 15
  $w.t tag configure "indent2" -lmargin1 8 -lmargin2 20
  $w.t tag configure "italic" -font "[font actual [$w.t cget -font]] -slant italic"
  $w.t tag configure "link" -font "[font actual [$w.t cget -font]] -underline 1" \
                            -foreground blue 
  $w.t tag bind link <Enter> "%W configure -cursor hand2"
  $w.t tag bind link <Leave> "%W configure -cursor {}"
  pack [scrollbar $w.s -command "$w.t yview"] -fill y -side left -anchor ne

  # populate list, show index topic
  foreach x [lsort [array names help -regexp {^[0-9]+$}]] {
    $w.l insert end $help(title,$x)
    $w.t tag bind goto$x <Button-1> "showHelpTopic $w $x"
  }

  bind $w <KeyPress-q> "destroy $w"
  # there's a minor unresolved issue with wish8.5 and focus
  bind $w <KeyPress-Up> "$w.t yview scroll -1 unit"
  bind $w <KeyPress-Down> "$w.t yview scroll +1 unit"
  bind $w <KeyPress-Prior> "$w.t yview scroll -1 page"
  bind $w <KeyPress-Next> "$w.t yview scroll +1 page"
  focus $w
  update
  center $w
  wm deiconify $w
  showHelpTopic $w $topic
  $w.t configure -state disabled

}

proc showHelpTopic {w {topic {}}} {
  global help

  # show a specific help topic in the window
  # $w is toplevel, $w.t is the text frame

if { $topic != {}} {
  $w.l selection clear 0 end
  $w.l selection set $topic
  $w.l activate $topic
}

  $w.t configure -state normal
  $w.t delete 1.0 end
  set helpFile [$w.l curselection]
  $w.t insert end $help(title,$helpFile) title
  $w.t image create end -image ::img::logo -align center -padx 20
  $w.t insert end "\n\n"
  foreach {text tags} $help(text,$helpFile) {
    $w.t insert end $text $tags
  }
  $w.t configure -state disabled

}

########
# main #
########

set p(name)       "TkHearts"
set p(version)    "0.91"
set p(date)       "26 October 2008"
set p(web)        "Sourceforge TkGames Project (http://tkgames.sf.net)"
set p(mike_email) "talvo@talvo.com"
set p(mike_release) "0.24 (17 February 2005)"

set data(canvas_bg)  SkyBlue2 ;# Mike likes #000077770000
set data(canvas_bg2) grey     ;# Mike likes #000088880000 or Light "grass" green
set data(cardback)   Traditional

# minus indicates size is pixels, not points (more consistant across win/unix)

set data(font_default)   {Arial -16}
set data(font_medium) {Arial -18}
set data(font_large) {Arial -20}
set data(font_large_bold) {Arial -20 bold}
set data(font_button)    {Helvetica -14}
set data(platform)       $tcl_platform(platform)

# Known bugs, as yet unfixed, and things still to add:
# - Keyboard bindings.
# - hitting "n" for newgame n the middle of a round .. doesn't work properly

set data(speed)   1 ;# either 0|1|2
set speed(0,name) Slow
set speed(1,name) Medium
set speed(2,name) Fast

set data(debug) 0
set data(pause) 0  ;# pause between hands
set data(scores) 0 ;# show scores in title
set data(autoraise) 1 ;# give cards a bump on focus

set data(name,0) Player1
set data(name,1) Computer1
set data(name,2) Computer3
set data(name,3) Computer2

set data(diff,1) 0 
set data(diff,2) 1
set data(diff,3) 2

set data(score,0) 0
set data(score,1) 0
set data(score,2) 0
set data(score,3) 0

set data(points,0) {}
set data(points,1) {}
set data(points,2) {}
set data(points,3) {}

set data(cards,0) {}
set data(cards,1) {}
set data(cards,2) {}
set data(cards,3) {}

set data(currentHigh) {}
set data(playing) 0
set data(round)   0  
    # 1 = pass left
    # 2 = pass right
    # 3 = pass up
    # 4 = don't pass, just play
set data(doing) none 
    #   (see proc doCardClick) possible values:
    #   pass   = passing cards to other players (select/deselect cards)
    #   accept = accepting cards passed to us; no bindings
    #   play1  = first round; 2 of clubs only
    #   play2  = click a card to send it
    #   paused = waiting for button click at end of hand
    #   none   = no bindings
    #   ???    = ???

# Hmmm... I was intending to make the game larger, but it doesn't look so nice
# with the cards spaced out as the card detail gets revealed and cluttered
# So maybe i'll go with automatically highlighting card under cursor ??

# set some tuneables for canvas card placement
# originally -width 530 -height 420, t1 = 309. t2 = 15, t3 = 444, ts = 12
# now               640         480       365       15       544       15

set data(tw) 530 ; # canvas width
set data(th) 420 ; # canvas height
set data(t1) 309 ; # player0's cards y coord
set data(t2) 15  ; #
set data(t3) 444 ; # player3's cards x coord
set data(ts) 12  ; # spacing

# originally (tb_base) 140 (tb_diff) 15 (tr_base) 72 (lr_diff) 15

set data(tb_base) 140
set data(tb_diff) 15

set data(tr_base) 72
set data(lr_diff) 15

set data(hearts) 0  ;# has hearts been broken?
set data(winAt) 100 ;# what score do you win at?

if { $data(platform) == "unix" } {
  set p(config) ~/.tkheartsrc
} else {
  set p(config) hearts.ini
}

catch {source $p(config)}

loadCardbacks

initIcons

if {![info exists cardback($data(cardback))]} { set data(cardback) Purple }

image create photo ::img::back -data $cardback($data(cardback))
array unset cardback

set data(allcards) {}
foreach x [image names] {
  if { [string match {::img::[a2-9tjqk][sdch]} $x] } {
    lappend data(allcards) [string range $x end-1 end]
  }
}
set data(allcards) [lsort $data(allcards)]

initHelp
initHearts
newGameHearts
update idletasks

