Spider Go

Keith Vetter 2019-01-07 : One of my favorite games on my phone is Spider Solitaire, and the company that wrote it recently came out with a new variant called Spider Go. In Spider Go there are only 6 columns and the cards run from King down to 8. I find the single suit level of Spider a bit too easy and the 2-suit level a bit too hard while the 2-suit version of Spider Go fits nicely in between in terms of difficulty.

Originally I thought I'd just tweak Mike Griffiths' version of Spider Solitaire to play Spider Go. But once I got into the code I couldn't help but add more and more features. Among the many changes include:

  • switch between Spider and Spider Go
  • GUI tweaks using icons and buttons instead of menus
  • one-click card move (back-ported to Spider Solitaire)
  • highlight cards that can be moved
  • better hints: including moves that clear runs, prioritizing hints and skipping redundant moves
  • better hints: show when you can move to an empty tray or must deal another row
  • show how many moves are available

spider_go_screenshot

Jeff Smith 2019-04-14 : Tried Spider Go on Linux x86_64 but kept getting an error "grab failed: window not viewable". I don't know Tk so Googled the error and came across this link [1 ] which Donal Fellows suggested changing each grab statement to

tkwait visibility $theWidget
grab set $theWidget

The above solved the issue.

Below is an online demo of Spider Go using CloudTk.

# Spider & Spider Go Solitaire
# Keith Vetter, 2019-01-07
# based on version by Mike Griffiths, April 25th 2004
# icons from: https://www.flaticon.com/authors/smashicons
#

package require Tk
package require tooltip

set data(version) "1.0"
set data(game,type) "Spider Go"

set data(cheating)    0
set data(moves)       0
set data(clears)      0
set data(score)     500
set data(undo)       {}
set data(goodmoves)  {}
set data(newdecks)   {}
set data(drag,bad)    0
set data(busy)        0
set data(msg,after)   ""

proc main {} {
    global data

    canvas .c -bg darkgreen -borderwidth 0 -highlightthickness 0 -width 800 -height 600
    bind .c <Configure> {apply {{W h w} {
        set w2 [expr {$w / 2.0}]
        set ::M(width) $w2
        set ::M(height) $h
        $W config -scrollregion [list -$w2 0 $w2 $h]
    }} %W %h %w}

    if {"titleFont" ni [font names]} {
        label .x
        font create titleFont {*}[concat [font actual [.x cget -font]] -weight bold -size 18]
        destroy .x
    }
    if {"scoreFont" ni [font names]} {
        font create scoreFont {*}[font actual {Arial 16 bold}]
    }

    .c bind topcard <ButtonPress-1>   [list dragStart %x %y]
    .c bind topcard <B1-Motion>       [list dragging  %x %y]
    .c bind topcard <ButtonRelease-1> [list dragEnd   %x %y]
    .c bind newdeck <ButtonPress-1>   dealRowCmd
    bind . <F2>            {newGame}
    bind . <F5>            {newGame restart}

    pack .c -expand 1 -fill both -side top
    wm resizable . 0 0

    showScore
    label .c.l -textvariable ::data(score,msg) \
        -foreground white -font scoreFont -bg darkgreen
    place .c.l -in .c -relx .5 -y 10 -anchor n
    doIcons

    trace add variable data(score) write showScore
    trace add variable data(moves) write showScore

    focus -force .c

    foreach tray $data(trays) { set data(col$tray,cards) {} }
    makeTrays
    dealRow $::data(game,cols) M 0 0
    makeDarkenedCards
}

proc @busy {p {pname ""} {pargs ""} {lambda ""}} {
    # Creates the function $pname wrapped with calls to busy 1 and busy 0
    if {$p ne "proc"} { error "bad syntax: $p != 'proc'"}
    proc $pname $pargs "
        busy 1
        try {
            set argVals \[lmap var {$pargs} {set \$var}]
            return \[apply {{$pargs} {$lambda}} {*}\$argVals\]
        } finally {
            busy 0
        }
     "
    return $pname
}

@busy \
proc move {c item tox toy time steps} {
    $c raise $item

    lassign [$c coords $item] origx origy
    set diffx [expr {$tox - $origx}]
    set diffy [expr {$toy - $origy}]

    set stepx [expr {$diffx / double($steps)}]
    set stepy [expr {$diffy / double($steps)}]

    for {set i 1} {$i < $steps} {incr i} {
        $c move $item $stepx $stepy
        update
        after $time
    }
    .c coords $item $tox $toy
}

proc makeTrays {} {
    .c delete trays
    foreach tray $::data(trays) {
        # Make an invisible column for each stack of cards for target of drag and drop

        set x1 $::data(col$tray)
        set x2 [expr {$x1 + [image width ::img::back]}]
        .c create rectangle $x1 50 $x2 800 -outline {} -fill {} \
            -tags "tray.$tray trays immortal"
    }
}

proc doIcons {} {
    # Create all the icons on the GUI
    .c create image -390 5 -image ::img::settings -anchor nw -tag {settings immortal}
    .c bind settings <1> setDifficultyDialog
    tooltip::tooltip .c -item settings "Configure settings"
    .c create image 390 5 -image ::img::help -anchor ne -tag {help immortal}
    .c bind help <1> showRules
    .c bind help <3> cheat
    tooltip::tooltip .c -item help "Playing rules"

    set gutter [expr {2 * [image width ::img::hint]}]
    set clr [::tk::Darken darkgreen 80]
    set x 0
    set y 520
    button .c.undo -text Undo -image ::img::undo -compound top -command undoMove
    .c create window $x $y -window .c.undo -tag {undo icons immortal} -anchor c

    set x -$gutter
    button .c.play -text Play -image ::img::play -compound top -command newGameDialog
    bind .c.play <3> newGame
    .c create window $x $y -window .c.play -tag {play icons immortal} -anchor c

    set x $gutter
    button .c.hint -text Hint -image ::img::hint -compound top -command showGoodMoves
    .c create window $x $y -window .c.hint -tag {hint icons immortal} -anchor c

    roundBox icons 40 20 $clr {ibox immortal}
}
proc roundBox {tag mx my clr newTags {radius 100}} {
    # Creates a rectangle with rounded corners around the bbox of item $tag
    lassign [.c bbox $tag] x0 y0 x1 y1
    if {$x0 eq {}} return
    incr x0 -$mx ; incr y0 -$my
    incr x1  $mx ; incr y1  $my
    set id [roundRect .c $x0 $y0 $x1 $y1 $radius -tag $newTags -fill $clr]
    .c raise $tag
    return $id
}
proc showMessage {msg} {
    after cancel $::data(msg,after)
    .c delete msg
    if {$msg eq ""} return

    lassign [.c bbox ibox] . y0 . .
    incr y0 -10
    .c create text 0 $y0 -text $msg -tag msg -fill white -anchor s
    set id [roundBox msg 60 5 black ""]
    .c add msg withtag $id
    set ::data(msg,after) [after 3000 .c delete msg]
}

proc showRules {} {
    destroy .rules
    toplevel .rules
    wm title .rules "Spider & Spider Go - Rules"
    wm transient .rules .

    pack [::ttk::frame .rules.f] -fill both -expand 1

    ::ttk::scrollbar .rules.sb -command {.rules.t yview}
    text .rules.t -wrap word -yscrollcommand ".rules.sb set"
    ::ttk::button .rules.close -text Close -command {destroy .rules}

    pack .rules.close -in .rules.f  -side bottom -fill none -expand 1 -pady .2i
    pack .rules.sb -in .rules.f -side right -fill y
    pack .rules.t -in .rules.f -side left -fill both -expand 1

    .rules.t tag configure head -font {{} 20 bold} -justify center
    .rules.t tag configure sub -justify center -font {{} 16 italic}
    .rules.t tag configure h2 -font {{} 11 bold}
    .rules.t insert end "Spider & Spider Go Rules\n" head
    .rules.t insert end "Version $::data(version)\n\n" sub

    .rules.t insert end "Spider and Spider Go are types of Patience solitaire games. "
    .rules.t insert end "The goal is to move cards between columns to create descending "
    .rules.t insert end "runs from King down to Ace in the same suit. Once a full run has been "
    .rules.t insert end "created then it will be removed from the table. When the "
    .rules.t insert end "table is completely empty the game has been won.\n\n"

    .rules.t insert end "SETUP:\n\n" h2

    .rules.t insert end "Spider Solitaire is played with two full decks, 104 cards. At the "
    .rules.t insert end "beginning 54 of the cards are divided between 10 tableaus, the "
    .rules.t insert end "first 4 tableaus have 6 cards each, the other 6 tableaus have 5 "
    .rules.t insert end "cards each. The top card of each tableau is turned face up, the "
    .rules.t insert end "others are face down. The remaining 50 cards are placed in a stock "
    .rules.t insert end "at the top of the screen.\n\n"

    .rules.t insert end "GAME PLAY:\n\n" h2

    .rules.t insert end "You can move a card onto another card as long as it is in descending "
    .rules.t insert end "numerical sequence. For example, a six of hearts may be moved to a "
    .rules.t insert end "seven of any suit. A sequence of cards can be moved together but only "
    .rules.t insert end "if they are all of the same suit in numerical descending order. For "
    .rules.t insert end "example, a six and seven of hearts may be moved to an eight of any "
    .rules.t insert end "suit, but a six of hearts and seven of clubs cannot be moved "
    .rules.t insert end "together.\n\n"

    .rules.t insert end "If you create a sequence of Ace to King in the same suit, then those "
    .rules.t insert end "cards are removed from the table.\n\n"

    .rules.t insert end "Moving the top card in a column allows the topmost hidden card to be "
    .rules.t insert end "turned over. This card then enters into the play. Other cards can be "
    .rules.t insert end "placed on it, and it can be moved to other cards in a sequence or to "
    .rules.t insert end "an empty column.\n\n"

    .rules.t insert end "DEALING:\n\n" h2

    .rules.t insert end "You can click on the the extra card pile in the bottom right to deal "
    .rules.t insert end "another row of cards. You cannot deal a new row if there are empty "
    .rules.t insert end "columns (except if there all cards have been exposed).\n\n"

    .rules.t insert end "Spider Go:\n\n" h2

    .rules.t insert end "Spider Go is a variant of Spider where you have six columns instead of "
    .rules.t insert end "ten, and the cards run from 8 to King. Also, you are allowed a new deal "
    .rules.t insert end "even if there are empty columns.\n\n"

    .rules.t insert end "SCORING:\n\n" h2

    .rules.t insert end "You start the game with 500 points. Every time you move a card or "
    .rules.t insert end "undo, you lose one point. Dealing a row does not cost any points. You "
    .rules.t insert end "gain 100 points for every stack you successfully clear.\n\n"

    .rules.t insert end "DIFFICULTIES:\n\n" h2

    .rules.t insert end "There are three difficulties: the difficulties are Easy (1 suit), "
    .rules.t insert end "Medium (2 suits), or Hard (4 suits). For Spider Go there are just "
    .rules.t insert end "two levels: 1 suit or 2 suits.\n\n"

    .rules.t insert end "CREDITS:\n\n" h2

    .rules.t insert end "This version was written by Keith Vetter, based on an earlier version "
    .rules.t insert end "by Mike Griffiths (https://wiki.tcl-lang.org/page/Spider+Solitaire). "
}

proc showScore {args} {
    set ::data(score,msg) [format "Score: %-6s Moves: %d" [comma $::data(score)] $::data(moves)]
}

proc comma {num} {
    while {[regsub {^([-+]?[0-9]+)([0-9][0-9][0-9])} $num {\1,\2} num]} {}
    return $num
}

proc busy {onoff} {
    # Re-entrant code to mark that the UI is busy, discarding all events until turned off
    # See @busy function above
    global data
    if {$onoff} {
        incr data(busy)
        if {$data(busy) == 1} {
            toplevel .__busy
            wm withdraw .__busy
            grab .__busy
        }
    } else {
        incr data(busy) -1
        if {$data(busy) == 0} {
            destroy .__busy
        }
    }
}

proc cheat {} {
    set ::data(cheating) [expr {! $::data(cheating)}]
    foreach card [.c find withtag backcard] {
        set img [expr {$::data(cheating) ? "::img::$::data(card,$card)" : "::img::back"}]
        .c itemconfig $card -image $img
    }
}

proc shuffleList {list} {
    set len [llength $list]
    while {$len} {
        set n [expr {int($len * rand())}]
        set tmp [lindex $list $n]
        lset list $n [lindex $list [incr len -1]]
        lset list $len $tmp
    }
    return $list
}

proc clearBindings {{rtag 1}} {

    # --- remove the bindings from all cards
    if {$rtag} {
        foreach id [.c find withtag topcard] {
            .c dtag $id topcard
        }
    }
    .c bind topcard <ButtonPress-1> {}
    .c bind newdeck <ButtonPress-1> {}
}

proc updateBindings {{clear 1}} {
    global data

    if {$clear} {
        clearBindings
    }

    # --- add bindings to only the top cards
    foreach tray $data(trays) {
        foreach card [getTopCards $tray] {
            .c addtag topcard withtag $card
        }
    }

    if {[info exists data(newdecks)]} {
        foreach deck $data(newdecks) {
            .c raise $deck
        }
    }
    .c bind topcard <ButtonPress-1> [list dragStart %x %y]
    .c bind newdeck <ButtonPress-1> dealRowCmd
}

proc generateGoodMoves {} {
    global data

    set bottoms {XX}
    set parents {XX}
    unset -nocomplain kings
    unset -nocomplain aces

    foreach tray $data(trays) {
        set topCards [getTopCards $tray]
        set top [cardInfo [lindex $topCards end]]
        set bottom [cardInfo [lindex $topCards 0]]
        set parent [lindex $data(col$tray,cards) end-[llength $topCards]]
        lappend bottoms $bottom
        if {"backcard" in [.c gettag $parent]} {
            set parent ""
        }
        lappend parents [cardInfo $parent]

        if {[lindex $top 0] == 13} {
            lappend kings([lindex $top end]) $tray [llength $topCards]
        } elseif {[lindex $bottom 0] == $data(game,low)} {
            lappend aces([lindex $bottom end]) $tray [llength $topCards]
        }
    }

    # Find all moves which can complete a run
    set completeRuns {}
    foreach suit [array names kings] {
        if {! [info exists aces($suit)]} continue
        foreach {kingTray kingLength} $kings($suit) {
            foreach {aceTray aceLength} $aces($suit) {
                if {$kingLength + $aceLength >= $data(game,run)} {
                    set len [expr {$data(game,run) - $kingLength}]
                    lappend completeRuns [list $aceTray $kingTray $len]
                }
            }
        }
    }

    # Find all moves that move the whole stack to new tray
    set sameSuitTrays {}
    set otherSuitTrays {}
    foreach tray $data(trays) {
        set topCards [getTopCards $tray]
        if {$topCards eq ""} continue
        lassign [cardInfo [lindex $topCards end]] pip suit

        # Look for match with the same matching suit
        set nextCard "[expr {$pip + 1}] $suit"
        if {$nextCard in $bottoms} {
            set dests [lsearch -all -exact $bottoms $nextCard]
            foreach dest $dests {
                set move [list $tray $dest [llength $topCards]]
                if {$move ni $completeRuns} {
                    lappend sameSuitTrays $move
                }
            }
            continue
        }

        # Look for match with the a different suit
        set nextOtherCard "[expr {$pip + 1}] ?"
        set dests [lsearch -all -glob $bottoms $nextOtherCard]
        if {$dests eq {}} continue
        foreach dest $dests {
            # Skip if moving to the exact same parent card
            if {[lindex $parents $tray] eq [lindex $bottoms $dest]} {
                continue
            }
            lappend otherSuitTrays [list $tray $dest [llength $topCards]]
        }
    }
    set data(goodmoves,idx) 0
    set data(goodmoves) [concat $completeRuns $sameSuitTrays $otherSuitTrays]
    showNoGoodMoves
}

proc showNoGoodMoves {} {
    # Highlight the newdeck area when no other moves are available
    global data
    if {$data(goodmoves) ne {} || $data(newdecks) eq {} || [getEmptyTrays] ne {}} {
        .c itemconfig forcedDeal -fill [.c cget -bg]
    } else {
        .c itemconfig forcedDeal -fill #008
    }
}

@busy \
proc showGoodMoves {} {
    global data

    if {$data(goodmoves) ne {}} {
        set idx [expr {$data(goodmoves,idx) + 1}]
        showMessage "Move $idx of [llength $data(goodmoves)]"
        set thismove [lindex $data(goodmoves) $data(goodmoves,idx)]
        set data(goodmoves,idx) [expr {$idx % [llength $data(goodmoves)]}]

        lassign $thismove fromCol toCol len
        animateGoodMove $fromCol $toCol $len
        showMessage ""
        return
    }

    set emptyTrays [getEmptyTrays]
    if {$emptyTrays ne {}} {
        showMessage "Move card to an empty stack"
        animateEmptylMove $emptyTrays
    } elseif {$data(newdecks) ne {}} {
        showMessage "Deal another set of cards"
        animateDealMove
    } else {
        showMessage "No useful moves detected"
        newGameDialog
    }
}
proc animateGoodMove {fromCol toCol len} {
    # Animate marker showing which cards to move to where
    set timer 300
    set card0 [lrange [getTopCards $fromCol] 0 $len-1]
    set card1 [lindex [getTopCards $toCol] 0]

    set img_backup(toCol) [.c itemcget $card1 -image]
    foreach card $card0 {
        set img_backup($card) [.c itemcget $card -image]
        .c itemconfigure $card -image ::img::anim
    }
    update
    after $timer
    .c itemconfigure $card1 -image ::img::anim
    update
    after $timer
    foreach card $card0 {
        .c itemconfigure $card -image $img_backup($card)
    }
    update
    after $timer
    .c itemconfigure $card1 -image $img_backup(toCol)
    update
}
proc animateDealMove {} {
    # Animate marking that the only move is from the newdeck area
    set timer 300
    set who [lindex $::data(newdecks) end]
    set who newdeck
    .c itemconfig $who -image ::img::anim
    update
    after [expr {2 * $timer}]
    .c itemconfig $who -image ::img::back
}
proc animateEmptylMove {empties} {
    # Animate marking that the only move into an empty tray
    set timer 300
    foreach empty $empties {
        .c itemconfig col$empty -image ::img::anim
    }
    update
    after [expr {2 * $timer}]
    foreach empty $empties {
        .c itemconfig col$empty -image ::img::tray
    }
}

proc checkForWins {} {
    global data

    # if there're any complete sets of cards, get rid of them.
    foreach tray $data(trays) {
        set top [getTopCards $tray]
        if {[llength [getTopCards $tray]] == $data(game,run)} {
            clearWinCol $tray
        }
    }

    if {$data(clears) == 8} {
        if {$::env(USER) eq "keith"} {
            catch {
                set lastDeal [expr {$data(moves) - $data(moves,last)}]
                set winner [list $data(game,type) $data(suits) $data(lastSeed) $data(score) \
                                $data(moves) $lastDeal]
                set fout [open ~/.spidergo_rc a]
                puts $fout "$winner"
                close $fout
            }
        }
        youWin
        newGameDialog
    }
}

@busy \
proc clearWinCol {col} {
    global data M

    # Column $col has a winning row so remove it
    set toRemove [getTopCards $col]
    set king [lindex $toRemove end]

    set data(col$col,cards) [lrange $data(col$col,cards) 0 end-[llength $toRemove]]
    set data(undo) {}
    set x [expr {-$M(width) + 25 + (12 * $data(clears))}]
    set y [expr {$M(height) - 125}]
    foreach card $toRemove {
        .c dtag $card topcard
        .c raise $card
        move .c $card $x $y 1 15
        update
        if {$card != $king} {
            after 18
        }
    }
    foreach card $toRemove {
        if {$card != $king} {
            .c delete $card
        }
    }

    set last [lindex [getTopCards $col] 0]
    if {$last ne ""} {
        .c itemconfigure $last -image ::img::$data(card,$last)
        .c dtag $last backcard
    }
    incr data(clears)
    putCol $col 0
    after 10
    incr data(score) 100
}

proc whereIs {card} {
    # Locates which tray a card is in
    foreach tray $::data(trays) {
        if {$card in $::data(col$tray,cards)} {
            return $tray
        }
    }
    return ""
}

proc putCol {col {bind 1}} {
    # Tidies up cards in a tray and rebinds if needed
    global data

    set i [llength $data(col$col,cards)]
    foreach card $data(col$col,cards) {
        .c coords $card $data(col$col) [colHeight $col $i]
        .c raise $card
        incr i -1
    }
    if {$bind} {
        generateGoodMoves
        updateBindings
    }
    darkenAllTrays
}

proc putCard {cards col {undo 0}} {
    global data

    if {$undo != 1 && $undo != 0} {
        info default [info level 0] undo undo
    }
    set tray [whereIs [lindex $cards 0]]
    set num [llength $cards]
    set data(col$tray,cards) [lrange $data(col$tray,cards) 0 end-$num]
    set last [lindex $data(col$tray,cards) end]
    if {!$undo} {
        if {$last ne "" && "backcard" in [.c gettags $last]} {
            set bws 1
        } else {
            set bws 0
        }
        lappend data(undo) [list $cards $tray $bws]
    }
    if {$last ne ""} {
        .c itemconfigure $last -image ::img::$data(card,$last)
        .c dtag $last backcard
    }
    foreach card $cards {
        lappend data(col$col,cards) $card
    }
    incr data(moves)
    putCol $col
    if {!$undo} {
        checkForWins
    }
    generateGoodMoves
    updateBindings
}

proc getTopCards {col} {
    global data
    if {$data(col$col,cards) eq {}} { return {}}

    set stack [lassign [lreverse $data(col$col,cards)] topCards]
    lassign [cardInfo $topCards] pip suit
    foreach card $stack {
        if {"backcard" in [.c gettags $card]} break
        lassign [cardInfo $card] nextPip nextSuit
        if {$nextSuit ne $suit || $nextPip != $pip + 1} break

        lappend topCards $card
        set pip $nextPip
    }
    return $topCards
}
proc setDifficultyDialog {} {
    # Dialog to select game type and number of suits
    destroy .diff

    ::ttk::frame .diff  -padding .2i

    ::ttk::label .diff.spider -text "Spider" -font titleFont
    ::ttk::button .diff.spider_1 -text "1 Suit Ace-King" -command {setDifficulty A 1}
    ::ttk::button .diff.spider_2 -text "2 Suits Ace-King" -command {setDifficulty A 2}
    ::ttk::button .diff.spider_4 -text "4 Suits Ace-King" -command {setDifficulty A 4}

    ::ttk::label .diff.spider_go -text "Spider Go" -font titleFont
    ::ttk::button .diff.spider_go_1 -text "1 Suit 8-King" -command {setDifficulty 8 1}
    ::ttk::button .diff.spider_go_2 -text "2 Suits 8-King" -command {setDifficulty 8 2}

    ::ttk::button .diff.cancel -text Cancel -command {destroy .diff}

    grid .diff.spider   x .diff.spider_go
    grid .diff.spider_1 x .diff.spider_go_1 -sticky ew
    grid .diff.spider_2 x .diff.spider_go_2 -sticky ew
    grid .diff.spider_4 x x -sticky ew

    grid .diff.cancel - - -pady {.2i 0}
    grid columnconfigure .diff 1 -minsize .2i

    .c create window 0 [expr {$::M(height) / 2}] -window .diff
    grab .diff
}
proc setDifficulty {lowCard suits} {
    global data

    destroy .diff
    set data(suits) $suits

    if {$lowCard eq "A"} {
        set data(game,type)   "Spider"
        set data(trays)       {1 2 3 4 5 6 7 8 9 10}
        set data(game,cols)   10
        set data(game,low)    1
        set data(game,run)    13
    } else {
        set data(game,type)   "Spider Go"
        set data(trays)       {1 2 3 4 5 6}
        set data(game,cols)   6
        set data(game,low)    8
        set data(game,run)    6
    }
    foreach tray $data(trays) {
        set col [expr {$data(game,cols) == 10 ? $tray : $tray + 2}]
        set data(col$tray) [expr {4 + ($col - 6) * 78}]
    }
    wm title . "$data(game,type) -- [gameTitle]"
    if {[winfo exists .c]} newGame
}
proc clearGame {} {
    global data

    set delList [set_minus [.c find all] [.c find withtag immortal]]
    foreach id $delList {.c delete $id}
    foreach tray $data(trays) {set data(col$tray,cards) {}}
    makeTrays

    set data(moves)      0
    set data(moves,last) 0
    set data(score)      500
    set data(undo)       {}
    set data(clears)     0
    set data(cheating)   0
    set data(newdecks)   {}
    array unset data card,*
}

proc newGame {{restart ""}} {
    global data

    clearGame
    if {$restart eq "restart"} {
        set data(deck) $data(deck,saved)
    } else {
        makeDecks [expr {$restart eq "winning"}]
    }
    redeal
}

proc makeDecks {winning} {
    global data
    if {$winning} {
        set data(lastSeed) [winningSeed]
    } else {
        set data(lastSeed) [expr {int(rand() * 0x7FFFFF)}]
    }
    expr {srand($data(lastSeed))}

    set allcards {}
    set list [list {0_suits} {h h h h h h h h} {h h h h s s s s} {3_suits} {h h s s c c d d}]
    set suits [randomSuit [lindex $list $data(suits)]]
    foreach suit $suits {
        set ranks {a 2 3 4 5 6 7 8 9 t j q k}
        if {$data(game,cols) == 6} {set ranks {8 9 t j q k}}
        foreach rank $ranks {
            lappend allcards "$rank$suit"
        }
    }
    set data(deck) [shuffleList $allcards]
    set data(deck,saved) $data(deck)
}
proc randomSuit {suits} {
    # Change which suit we use from default h, h+s, h+s+c+d
    set numSuits [llength [lsort -unique $suits]]
    set perms(1) {{h h} {h d} {h c} {h s}}
    set perms(2) {{h h s s} {h h s c} {h d s s} {h d s c}}
    if {[info exists perms($numSuits)]} {
        set perm [pickRandom $perms($numSuits)]
        set suits [lmap suit $suits {string map $perm $suit}]
    }
    return $suits
}
proc winningSeed {} {
    # Extracts a winning starting seed from ~/.spidergo_rc
    set seeds {}
    if {[file exists ~/.spidergo_rc]} {
        set fin [open ~/.spidergo_rc r]
        set lines [split [string trim [read $fin]] \n]
        close $fin

        foreach line $lines {
            lassign $line type suits seed
            if {$type eq $::data(game,type) && $suits == $::data(suits)} {
                lappend seeds $seed
            }
        }
    }
    if {$seeds eq {}} {
        showMessage "No known winning positions, using random one"
        return [expr {int(rand() * 0x7FFFFF)}]
    }

    showMessage "Using a known winning position"
    set seed [pickRandom $seeds]
    return $seed
}

proc pickRandom {l} {
    # Returns random element from list $l
    return [lindex $l [expr {int(rand() * [llength $l])}]]
}

@busy \
proc redeal {} {
    global data

    if {$data(game,cols) == 10} {
        set moves {
            {dealRow 10 M 0 0}
            {dealRow 10 B 0 0}
            {dealRow 10 B 0 0}
            {dealRow 10 B 0 0}
            {dealRow 10 B 0 0}
            {dealRow  4 B 0 0}
            {dealRow 10 F 0 0}
            {addDecks 5}}
    } else {
        set moves {
            {dealRow 6 M 0 0}
            {dealRow 6 B 0 0}
            {dealRow 6 B 0 0}
            {dealRow 6 B 0 0}
            {dealRow 6 B 0 0}
            {dealRow 6 F 0 0}
            {addDecks 3}}
    }

    foreach move $moves {
        {*}$move
    }
}
proc gameTitle {} {
    global data
    set title "$data(suits) [expr {$data(suits) == 1 ? {Suit } : {Suits }}]"
    append title [expr {$data(game,low) == 1 ? " Ace" : " 8"}] "-King"
    return $title
}

proc newGameDialog {} {
    global data

    destroy .new
    ::ttk::frame .new -padding {.2i 0}
    ::ttk::label .new.title -text [gameTitle] -anchor c -font titleFont
    ::ttk::button .new.new -text "New Deal" -width 9 -command {destroy .new; newGame }
    ::ttk::button .new.replay -text "Replay" -width 9 -command {destroy .new; newGame restart}
    ::ttk::button .new.cancel -text "Cancel" -width 9 -command {destroy .new}

    bind .new.new <3> {newGame winning}

    pack .new.title .new.new .new.replay .new.cancel -side top -fill x
    pack config .new.title -pady .1i
    pack config .new.cancel -pady .1i

    .c create window 0 [expr {$::M(height) / 2}] -window .new -anchor n
    grab .new
}

@busy \
proc youWin {} {
    set x 0
    set y [expr {$::M(height) / 2}]

    .c delete win1 win2
    .c create text $x $y -tag win1 -text "You Win!" -font {arial 10 bold} -anchor c -fill red
    .c create text $x $y -tag win2 -text "You Win!" -font {arial 10 bold} -anchor c -fill red
    set sizes {10}
    for {set fsize 12} {$fsize <= 120} {incr fsize 2} {
        update ; after 1
        lappend sizes $fsize
        .c itemconfig win1 -font [list arial $fsize bold] -angle [expr {6 * $fsize}]
        .c itemconfig win2 -font [list arial $fsize bold] -angle [expr {-6 * $fsize}]
    }
    update
    after 1000
    foreach fsize [lreverse $sizes] {
        update ; after 1
        .c itemconfig win1 -font [list arial $fsize bold]
        .c itemconfig win2 -font [list arial $fsize bold]
    }

    .c delete win1 win2
    update
}

proc addDecks {num} {
    global data M

    set data(newdecks) {}
    set x [expr {$M(width) - 80}]
    set y [expr {$M(height) - 125}]
    for {set i 1} {$i <= $num} {incr i} {
        set x [expr {$x-12}]
        set id [.c create image $x $y -image ::img::back -tags newdeck -anchor nw]
        lappend data(newdecks) $id
        update idletasks
        after 95
    }
    .c delete forcedDeal
    roundBox newdeck 10 10 [.c cget -bg] forcedDeal 10
}

proc getEmptyTrays {} {
    return [lmap tray $::data(trays) {if {[getTopCards $tray] eq {}} { set tray} else continue}]
}

proc dealRowCmd {} {
    dealRow $::data(game,cols) F 1 1
}
proc dealRow {num whatToShow fromNewdecks removeNewdeck} {
    global data

    clearBindings
    if {$whatToShow ne "M" && $data(deck) eq {}} {
        updateBindings 0
        return
    }

    if {$whatToShow eq "M"} {
        # we're showing the markers...
        .c delete marker
        for {set i 1} {$i <= $num} {incr i} {
            .c create image $data(col$i) 50 -image ::img::tray \
                -anchor nw -tags [list marker col$i immortal]
        }
        updateBindings 0
        return
    }

    # Check for empty trays before dealing
    # except: not for spider go, not if # cards left < # columns, not if all cards turned over
    if {$fromNewdecks && $data(game,type) eq "Spider"} {
        set inplay [::tcl::mathop::+ {*}[lmap tray $data(trays) {llength $data(col$tray,cards)}]]
        set unplayed [llength [.c find withtag backcard]]
        if {$inplay >= $data(game,cols) && $unplayed > 0 && [getEmptyTrays] ne {}} {
            showMessage "You can't deal a new row while there are empty columns."
            updateBindings 0
            return
        }
    }

    # Deal card into tray from either newDecks or just create in place
    for {set tray 1} {$tray <= $num} {incr tray} {
        set data(deck) [lassign $data(deck) card]

        if {$whatToShow eq "B"} {
            set img ::img::back
            set tags [list card backcard]
        } else {
            set img ::img::$card
            set tags [list card]
        }

        set x $data(col$tray)
        set y [colHeight $tray]

        if {$data(newdecks) eq {}} {
            lassign [list $x $y] sx sy
            set animateDeal 0
        } else {
            lassign [.c coords [lindex $data(newdecks) end]] sx sy
            set animateDeal 1
        }

        set id [.c create image $sx $sy -image $img -anchor nw -tags $tags]
        set data(card,$id) $card
        lappend data(col$tray,cards) $id

        if {$animateDeal} {
            move .c $id $x $y 1 10
            putCol $tray 0
            update
        } else {
            if {$tray != $num} {
                update
                after 40
            }
        }
    }

    if {$removeNewdeck} {
        set img [lindex $data(newdecks) end]
        set data(newdecks) [lrange $data(newdecks) 0 end-1]
        .c delete $img
        .c delete forcedDeal
        roundBox newdeck 10 10 [.c cget -bg] forcedDeal 10
    }
    set data(undo) {}
    set data(moves,last) $data(moves)
    checkForWins

    generateGoodMoves
    updateBindings
}

proc undoMove {} {
    global data

    if {$data(undo) eq {}} {
        showMessage "Nothing to undo"
        return
    }
    # Each undo entry: cards tray bws
    set do [lindex $data(undo) end]
    set data(undo) [lrange $data(undo) 0 end-1]

    lassign $do cards tray bws
    set topCards [getTopCards $tray]
    if {$bws == 1} {
        # Undo exposing card
        .c itemconfigure $topCards -image ::img::back
        .c addtag backcard withtag $topCards
    }
    .c dtag $topCards topcard
    putCard $cards $tray 1
}

proc colHeight {col {num 0}} {
    global data

    set pad 50
    set backcardSpacing 10
    set faceupSpacing 25
    set faceUpCards [set_minus $data(col$col,cards) [.c find withtag backcard]]
    if {[llength $faceUpCards] > 12} {
        # Make long columns tighter
        incr faceupSpacing [expr {(12 - [llength $faceUpCards]) * 1}]
    }

    foreach card [lrange $data(col$col,cards) 0 end-$num] {
        incr pad [expr {"backcard" in [.c gettags $card] ? $backcardSpacing : $faceupSpacing}]
    }

    return $pad
}

proc cardInfo {card} {
    global data

    if {$card eq ""} {return {99 X}}
    if {[string is integer -strict $card]} {
        set card $data(card,$card)
    }
    foreach {value suit} [split $card ""] {break}
    if {$value eq "t"} {set value 10}
    if {$value eq "j"} {set value 11}
    if {$value eq "q"} {set value 12}
    if {$value eq "k"} {set value 13}
    if {$value eq "a"} {set value  1}
    return [list $value $suit]
}

proc dragStart {x y} {
    global data

    set x [.c canvasx $x]
    set y [.c canvasy $y]

    clearBindings 0
    set id [.c find closest $x $y]
    set data(drag,topcard) $id
    set col [whereIs $id]

    if {$col eq "" || $data(drag,bad)} {
        set data(drag,bad) 1
        return
    }
    set data(drag,homecol) $col
    if {[getTopCards $col] != $id} {
        set cardList [lrange $data(col$col,cards) [lsearch $data(col$col,cards) $id] end]
    } else {
        set cardList $id
    }
    set data(drag,allcards) $cardList
    set data(drag,orgCoords) [.c coords $id]
    set data(drag,xLoc) $x
    set data(drag,yLoc) $y
    set data(drag,distance) 0
    foreach card $cardList {
        .c raise $card
    }
}

proc dragging {x y} {
    global data
    if {$data(drag,bad)} return

    if {![info exists data(drag,allcards)]} {
        set data(drag,bad) 1
        return
    }

    set x [.c canvasx $x]
    set y [.c canvasy $y]

    set dx [expr {$x - $data(drag,xLoc)}]
    set dy [expr {$y - $data(drag,yLoc)}]
    set data(drag,distance) [expr {$data(drag,distance) + hypot($dx,$dy)}]
    foreach id $data(drag,allcards) {
        .c move $id $dx $dy
    }
    set data(drag,xLoc) $x
    set data(drag,yLoc) $y
}

proc dragEnd {x y} {
    global data
    if {$data(drag,bad) || ![info exists data(drag,allcards)]} {
        catch {putCol $data(drag,homecol)}
        set data(drag,bad) 0
        updateBindings
        return
    }

    set destination [findDragDestination]
    if {$destination eq {}} {
        putCol $data(drag,homecol)
        updateBindings
        return
    }
    putCard $data(drag,allcards) $destination
    incr data(score) -1
    # Refresh spacing on the original column
    putCol $data(drag,homecol)
    updateBindings
}

proc findDragDestination {} {
    global data

    if {$data(drag,distance) < 5} {
        set destination [getBestAutoMove]
        return $destination
    }

    set pickedCard [lindex $data(drag,allcards) 0]
    lassign [cardInfo $pickedCard] pickedCardPips pickedCardSuit

    set trays {}
    set overlapping [.c find overlapping {*}[.c bbox {*}$data(drag,allcards)]]
    foreach id $overlapping {
        if {[.c type $id] eq "rectangle"} {
            set tag [lindex [.c itemcget $id -tag] 0]
            lassign [split $tag "."] . tray
            lappend trays $tray
        }
    }
    if {$trays eq {}} { return {}}

    set emptyTrays {}
    set sameSuitTrays {}
    set otherSuitTrays {}
    foreach tray $trays {
        set trayCards [getTopCards $tray]
        lassign [cardInfo [lindex $trayCards 0]] topPips topSuit
        if {$trayCards eq {}} {
            lappend emptyTrays $tray
        } elseif {$topSuit eq $pickedCardSuit && $topPips == $pickedCardPips + 1} {
            lappend sameSuitTrays $tray
        } elseif {$topPips == $pickedCardPips + 1} {
            lappend otherSuitTrays $tray
        }
    }
    return [lindex [concat $sameSuitTrays $emptyTrays $otherSuitTrays] 0]
}

proc getBestAutoMove {} {
    # Finds what move should be done for the card just clicked on
    global data
    set card [lindex $data(drag,allcards) 0]
    set allLegal [getLegalMoves $card]
    return [lindex [concat {*}$allLegal] 0]
}

proc getLegalMoves {card} {
    # Returns all the legal moves for card, in three lists
    global data
    lassign [cardInfo $card] pips suit

    set emptyTrays {}
    set sameSuitTrays {}
    set otherSuitTrays {}
    foreach tray [shuffleList $data(trays)] {
        set bottom [lindex $data(col$tray,cards) end]
        lassign [cardInfo $bottom] pips2 suit2
        if {$bottom eq {}} {
            lappend emptyTrays $tray
        } elseif {$suit eq $suit2 && $pips + 1 == $pips2} {
            # best move is one with the longest streak so far
            lappend sameSuitTrays [list $tray [llength [getTopCards $tray]]]
        } elseif {$pips + 1 == $pips2} {
            lappend otherSuitTrays $tray
        }
    }
    # Sort sameSuitTrays by length of existing streaks
    set sameSuitTrays [lsort -index 1 -integer -decreasing $sameSuitTrays]
    set sameSuitTrays [lmap item $sameSuitTrays {lindex $item 0}]
    return [list $sameSuitTrays $otherSuitTrays $emptyTrays]
}

proc set_minus {arg1 arg2} {
    set result {}
    foreach item $arg1 {
        if {$item ni $arg2 && $item ni $result} {
            lappend result $item
        }
    }
    return [lsort $result]
}

proc roundRect {w x0 y0 x3 y3 radius args} {
    # Draws a rectangle with rounded corners

    set r [winfo pixels $w $radius]
    set d [expr { 2 * $r }]

    # Make sure that the radius of the curve is less than 3/8 size of the box
    set maxr 0.75
    set d [expr {min($d, $maxr * ($x3 - $x0), $maxr * ($y3 - $y0))}]

    set x1 [expr {$x0 + $d}]
    set x2 [expr {$x3 - $d}]
    set y1 [expr {$y0 + $d}]
    set y2 [expr {$y3 - $d}]

    set xy [list $x0 $y0 $x1 $y0 $x2 $y0 $x3 $y0 $x3 $y1 $x3 $y2 \
                $x3 $y3 $x2 $y3 $x1 $y3 $x0 $y3 $x0 $y2 $x0 $y1]
    return [$w create polygon $xy -smooth 1 {*}$args]
}
proc darkenAllTrays {} {
    # Makes all non-top run face up cards darker

    foreach tray $::data(trays) {
        set top [getTopCards $tray]
        foreach card $::data(col$tray,cards) {
            if {"backcard" in [.c gettags $card]} continue
            set img [.c itemcget $card -image]
            set isDark [string match "::img::??_d" $img]

            if {$card in $top && $isDark} {
                .c itemconfig $card -image [string range $img 0 end-2]
            } elseif {$card ni $top && ! $isDark} {
                .c itemconfig $card -image [string cat $img "_d"]
            }
        }
    }
}
proc makeDarkenedCards {} {
    # Creates 52 images of the playing cards, darkened by 75%
    foreach suit {h s d c} {
        foreach rank {a 2 3 4 5 6 7 8 9 t j q k} {
            set card "::img::${rank}$suit"
            set out [string cat $card "_d"]
            darkenOneCard $card $out 75
        }
    }
}
proc darkenOneCard {img out percent} {
    set w [image width $img]
    set h [image height $img]
    image create photo $out -width $w -height $h

    unset -nocomplain DARK_COLOR
    set stepSize 1
    for {set col 0} {$col < $w} {incr col $stepSize} {
        set col2 [expr {min($w, $col + $stepSize)}]
        set data [$img data -from $col 0 $col2 $h]

        set newData {}
        foreach color $data {
            if {! [info exists DARK_COLOR($color)]} {
                set DARK_COLOR($color) [::tk::Darken $color $percent]
            }
            lappend newData $DARK_COLOR($color)
        }
        $out put $newData -to $col 0
    }
    return $out
}

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::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::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::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::back -format gif -data {
    R0lGODlhRwBgAMIAAH//1P///wAA/8DAwP//AP8A/////////yH5BAEAAAAALAAAAABHAGAAAA
    P/CBDc/jDKSWtQy+rNd+5gKI5kaZ6oJaxsKwxuDMftTK/2Xd1u3vM1nk83cTVktOHxhzQynJJW
    gDANNFlKKvWKi1W3LEqYICgIwMGukWxGY9/r8tm6Egumc/KW3s1Z8Vpzd0F+d3qAdHYMBVWMd4
    w2kQGOk41/kHAvlY+WiUWGeYJ8L6RhoIF7hFKniHWfoG2jaqVSbIJMtGNyaHZ1WrK5wYZVXMJf
    o711g7iRXstptErPrlFGXKPSuNPZUhN+jpmc0OLhm+XgOGKF4cra2M7uQXbNs6bA9MbTs/S9Pl
    nE2oz9KmYjGT5dsa5k2XWv3Ks+qxAd2pbrz6GJ73wk27ep/xIVSpg4grTE6SC1CD8KSRSlyt5F
    lm80PjQJ6xa0hQmZdasW7J+begIBjqM1L5O0hvucIY12EkLFofqeshv0ztQbCt+q1kFXkWvWce
    bSPWwHFupSitagoIyocOqftkCpqnU6Rig7n2eDuumFJ+dNL7Z+Mo3jV9HLVDEjHn6b2GUoMIo8
    dgwZbTLJSvgGWP745M6nlYjjWnzMuCxoTzz72pxaiyEQnDaTHStGYzYQvcjGljYKZDdctjvXro
    rHY4kOs168SfG6HNgLzZCGkKsXVlORdaJ7dz5OvEvRpNacKxMvV6eafgGHoSk4cJbtoQVnug2c
    yJfrZaoFH9wIQ+ViB///NbAYRTLxZNRmlnHCmTiSjUTTRpWNtCCCIylo2YNj9acYaQByKCBpBM
    71wF+E3ZIIfe3kt5Qfr/gDmFDswViXfrh8NxhwtUVlz28zqDNcdsVtl2N3pGDVHFhcYbEIA9JV
    95WSY0WFXW1CwgNkcHTtaN5x5N2oZRgPvcfaGnbdgBeWI9rn15hqrkabimBWcxpaG6Li21Nzei
    Zng5cEkBmFff4pYSWorTVnRnW2gqhjdjaVZk00iobilgjFFmZ78L0Y6Xx2bXRnZkrxGCqaDlhZ
    DnJEchNnBE9Sx1wYr26l1XTWRTGlqtShWtZVn4Aanqi/btlji+mJCdSZAcVn4IPek5LY2prgOV
    pqS+MNuGi1IF4rrXEHDupgt31OSJkSGeJpLbVUndvYqll62eamsMFLqnEukrmppGX2xG6avuLI
    W3YrwuGjVVee6hadFBkJ66xOHnkOw15BeNasZBlc8LZVfvqvv9EeJeK0vuRbby0iF4upnsLBSe
    m7AZfIy2fqQsSoouiO1ijKdC0prp/gWvitSOESivGJ2dbMCkZG58lXsxtXKq/LfMh28rGa5oXs
    0FDQZkyVwmwtC4RJCHFbXGzOy23Yr90mHVQfp+D223DHLffcE3xAN90Y3I03AAkAADs=}

# Alternatives for the last card on each of the 8 stacks:
# Light "grass" green:
# image create photo ::img::marker -width 71 -height 96
# ::img::marker put #0000cccc0000 -to 0 0 70 95

# Light green solid card, like Scorebox:
image create photo ::img::marker0  -format gif -data {
    R0lGODlhRwBgAKECAABkAACIAP///////ywAAAAARwBgAAACXIyPqcvtD6Oc
    tNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbz
    CY1Kp9Sq9YrNarfcrvcLDovH5LL5jE6r1+y2+w2Py+f0uv2OFxUAADs=
}

# White card with the red X:
image create photo ::img::marker -format gif -data {
    R0lGODlhRgBfAOdJAPv7+/T09O3t7ebm5tnZ2dXV1czMzMnExMXFxby8vLuwsLOzs6ysrKSkpJ
    ycnJaWloqKioWFhfsAAPUAAOwAAOUAANwAANQAAMsAAMQAAKRDQ6goKLwAALUAAKQZGawAAKMA
    AJ0wMJsAAJQAAI0KCo0BAYQAAH19fXV0dHJvb29tbW5kZGRkZGhfX2RZWWRVVWJISFlZWV5QUF
    FRUV5MTFlCQk5OTkJCQnsAAHQAAG0AAGcKCmMCAlg9PVY9PVUxMVMsLFQiIlMcHFUTE1sKCl0E
    BFYMDFcAAEsKCgBAAD4+PjA4MDcoKCQyJC8vLz8AADIMDBwjHBEmEQA4AAAxAA8kDwAjAAocCg
    AcAAYNBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    ABLLrCH5BAEBAEkALAAAAABGAF8AAAj+AJMksXKlyQ0bMxIqXMiwocOHECPOsHGjSRUsApNkUd
    EgQYECBEKKHEmypMmTKFMS+JiAQQQnVKyoKCAgQAAAOHPq3Mmzp8+fQHHaDCCAgIMrVRoICMq0
    qVOnAQwoaZLg5tOrWK8WoGjAatavYHkSSEggrNmzY2cUOMv2a9qybeM6LUDWq9y7Pd/i3ZuXLN
    +/OfUC/kt3BgG7g+UKTox3MWPFfh/fLXxYMmTDli/DzczWcd4ToEOLPmEg64LRqDf7pIyY540n
    JkbInl1CB5PWQAlAwTG7t4knN5h67lkASQcLFJInr3DBxImrL0ZYqKCcQoUKH5CsDTq8ZwQTFi
    b+SBg/fkKGIqWbMtBxQTx5CRMsmIjQtDvPAD8+UHBfngKIH7jtJIAQHVDw3ngUfABgU6w1hQAP
    GPBXnnz0BYVCCRVIOMEEGPBwgFP29XRheAeaR4RqPD0YoYYWlJDCUyHyJEAQBZbonw8BAgCEfg
    dKQEEHQeQoVmROLcCehPBZgMMDPkEAnoYTXKDDAlrVdZULI2T43oYcnCiWERkYuGUFIriAVYw9
    CTAEB2K+RyYNPNEAQgU9UsDBEAOcSeRTDuDQXokX5NCATg3k8OeWgQ6qJ2ZZ1TBnjxPcmScAA7
    LZYwUg1PBVg2cSEWaJZL6A0wpZIklBBl5mheZPTpJI3ob+GOCgAAI5rLilfBCAtepP+bX5agYe
    bPDpgQn+ENauPhlQhK2vWocckubxkN6mVoI1Yo/wIZlkCSiYhaxPAdDoK7bk/Rikt3t+lYAOEZ
    K7JQY6JIBWul+5IIKW7k5QwQhmnsVpWGpa6q6dQyw1L6NnFXoopIm29W1QMPCIbYIwxPVwbiTQ
    CWkFJKAY1r9mJTDCuOTtK6/D9H4Vbo3YTgCkkDCmnNW15MbHLcoIh6Xihvl2OO3H1YbVq7v9gQ
    BEZzI/9Z2rREtA4cEeX0UAERzw3LSPqEYdc86NPlrihtpiqinQhsH8U58L92fBBfi+egEODhyb
    dFADrGl1uRyEoEH+Bxq/R/Ckqs4N1Av3fg0vAgTsMKybIojqluA+GZk2fBW4iNPS0EpJZVYgNz
    VggaZ2IIRVAew47gQ/CmGw1JDzpIJ0DE+p084aVv7iolr/tPOl/PKUAoaQdogA7leVLrHfkspI
    4OkJAmG2Tp0DdUIJTJf3dtw9MWCoti0+t3XuPBVQRAZhZwoUDYWXeN529bWOUw8gnG4i+3mByT
    wIPnzv1AM4VJ/kfEzhn//is6S5BO0nAzBC1eqkoOcNrUQcMALgctM69PXtVR36UFOUxaySiQBO
    woGc9iZns249hWaIygEDQsg1GQ2BZX4T3fNyEoDl1Ul0q1vNAXnCAhNg4DrsQLxOBmSHlQXwIA
    NBBCIGTMAC7swtAVoogglMUAIqUhEHRZgBWGJwhClW8YsmKIIWTuaTGC3gAWhMoxofkMOrDGCN
    cNxcGd3HmaBEr47EwyO6WqhH1vGxjwYsGyAf98dBOrGQhvzJxRJ5x0Qqko6OBMAiDTnJQTYykk
    NCJCZ1UklAjsUG4NtkTuhigwLMMJJjcQICTulIAtigCgtooyh3EoAC3AALESgL6QBwk13qxJdx
    QQwweSmABUSBCktwgAFAkhKQMJMkzlyJNKNJzWlaMyTRNMlHFhADKySBCldQgkTGSc5ySoQiUf
    BmQAAAOw==}

image create photo ::img::anim -data {
    R0lGODlhRwBgAJEAANnZ2QAAgP///////yH5BAEAAAAALAAAAABHAGAAAAJ4
    BBgfU5fbPxCY8TF1uf0PAeNj6nL7wygnrfbirDfv/oOhOJKleaKpurKt+8Kx
    PNO1feO5vvO9/wODwiGxaDwik8ols+l8QqPSKbVqvWKz2i236/2Cw+IxuWw+
    o9PqNbvtfsPj8jm9/iWA8TF1uf0PgRkfU5fbPxCgADs=}

image create photo ::img::tray -width 71 -height 96
::img::tray put #0C0 -to 0 0 71 96

image create photo ::img::hint -data {
    iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAAEEfUpiAAABcElEQVRYhe1VMU7FMAx9rf5MByYqcQMO
    gFQWunFZRk5ARwZAQpyg25coI0IyC4nSxHbttojlvymNnecX145BRCAifDxefBERKiLCNLSEX9TIkRyh
    eCRFDQDT0FLgKTiKjciRhg5ourEqZUiUTTdW+WkAOKSbT3Qf132uQUJkyEWGEDVnTPdst8hvUIRgcBkW
    s1uEuCkjm4c+2WPzwN0q1xZQaNQOc/ZaM1pIFvO8hP1zwDlp+wfOEQC+r94l0wxiDs6bs0r7DlD7YRra
    WwDHphtfJB9XErkcuAqJs7kLSa3ENTgRZARSD2g+hQKNxFRInsMigeUqAZvbWSR4fn2bffc316yf2M7H
    6TMapLdAJZBgaThPDk0CrONijZilF3F1YKsQsY73DK7xbX4LtuIkQBTgaSUL3EW4pwiNx/oO3AF42DOw
    S0AixOxszZ6rCK2knl/3710gjkMJ1jn7ZwLyOc1Bmt0c3OM4IJ33Adrcl/ADyZ3SsEDisa4AAAAASUVO
    RK5CYII=}
image create photo ::img::undo -data {
    iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAAEEfUpiAAAChUlEQVRYhb1XS24UMRSsGibjDr8N3ANO
    kNkEcQ8Q5+AAOQicgE2Q0ETiAuyBJQs2oAhN90ygWLTtsd12t5uJKKmlTLddr/x+fqEkRJAEbYwA9I8k
    3FlAdqXotpCUNgZMOWj3Oj7Crmgc+cJ+3JLUway14FcGT2/kqknUWoPrLlZBkk5wVmb7vlGzCijOWg7O
    kcKphledYAkAuGr06CGjRZLoPaONyfOftd5TMie9x/1jQ7J0dCUNi+DvjqTcE4t0wgItXHc9c84PlqGR
    1OXV5yWApN68Xsmc9D+nNgPoQ+XiVgsn3xM4646kOe/Q7fObUz94J3nGgwdPJbUD64naZbrAEVUfpxCF
    dntpTJS66ZqJMH4H8Li0OVQ5WQ9TWORelvK2imDO5oiA5MXchAJsGJ3VKEkKStIw+15Ya5nrLiIaJNIU
    nCHbArl03YLr7vBxXa7igdKwD6FvYOpfxz066N/SxijqWQFZsXeVvg/yYG4xZTOxRJJTl43C6DECR0ti
    MYy1eTE7D9JEGmvreWVpKs/pBySvJT2o3lCBKheEJyLZ5Jr1vyKbRqFhZ9xedreOgQeiISPIpObc1/cP
    crRWbgA8l/SxRkB0seYMh+j2wFTK7PbA05c7fP02XJgr0CXJawD3xww71IShWQFf3g7v01cXN4fGn7sV
    azxw+qyb9IBZAT/flQ/y5MUOnz77KXl4r5P8BeAuAPz+YLCwaRrMO9mRJdi/AhBdCLkDuYaSG23uBWRe
    XW0VSNohGA3TyyrFaBlKootXado7FlWNKJgc/f8i/1VAgD8TPSCLseqqFkCyBYDtpcHY1DrJEwwso/fp
    bSM17N/XhtR6YN7cmSDXCY8ez4/FX4gku4UNWl/cAAAAAElFTkSuQmCC}
image create photo ::img::play -data {
    iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAAEEfUpiAAADh0lEQVRYha1XQWsTQRT+JuZQcKqimCq2
    B7VietJC1kMtxLIXMYik9ZqD3oX+jZ4rngQPQvUmVQK1UEoOHqSF0IN1IaGnlKZgQegrCNWOh+ybzOxM
    tmn1gyWbmTfvfW/mzfcSKKUAQAFQSikIAIqIYELFgyp+734hIiX0qFICgMeHsVYRkcrGg3aUYrmqiEg7
    V0qBH+2zVKlht7WF9dVn1movcTyZ6nwurkLEqWocHBzogY1CAQCwySyT8ZVS3TSYZD1qWkbetDhMo9VG
    BgCklChVavAh4xvc29uDlBIA7BBSStSjJi49f+r3UCxXdf6al8mYMyEiRWGg6lFTCQCbRDTmZRij0Wrj
    7u2bwjeXBTDG/Ey+SZgnYDrWORARiAhSShSm3uDw8DCNlIZVDMm9rn0ogYjQaLVxa/iKN7WsOVB9W4SU
    EvlgPi47Ix2uMAAb2/u4s74OALYDTgXo7gkA1KMm5MoaKAw6n8Y+ZQA89OXGe0JEqH5c7CyKz1dKqQM4
    9W7Ct/MmGq12x4EQItWQ77wPWSGEeyUN/P5zBCGE6uVEX5fC1Btr4xgXzp9LIwctTQwfGyllz/GMuSgt
    Fd9iAHYpA8DVkXFvKknMzc0BSCllLuO+UjApMfLBfH+5wJA8AGqi9M5Sc1PdfeOWJBERhDij3625MACF
    AX4+KFhsHVX8/P6R90IxvrXJuUyYmZlxDEuVGi4OTWFhYaHjbGUNG9v7uB9Flp0upCRlKSUGzo7gx+73
    1FPwtgZzrLm9613I89lel4RvKGuCtTgMjteD424pO+tLD/pFmm70QtZMlVkxfAfD40m7Rqudqjs9CSQD
    cH/dbW05p+97Z32uR00AOPFuesuwV9mlodFqYzw/6vgBgMnJSSwtLTmdajw/6ra1JBnT0UlJOXLgOWbv
    DyQzcKlSQ7FcRbFc1W2DtfS0cKQkieXlZaseGEPDNzB27yVevf7al+j3Ay+B6elpJzgjd+06Lg8//i/B
    GZbGm8/s7KzuAflgvtMvJia8tvWo2fETBorCoNs7wkB9yeedGGzfU4wZvq322epbEAbOnNkFeC3be2/B
    ccGSpEybX0dHGMh0T9YX3IQjRP3otylW0doLa37gU80imMvlUn06O+CT28HBQezs7FhZpGnDifTC/OP6
    r4+vOK2/rEZBchFmYxInaiBmq03WQ9rOyJU111fa7/vjSJxqYQJ/AUeA744T2b/XAAAAAElFTkSuQmCC}
image create photo ::img::settings -data {
    iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAAEEfUpiAAAEA0lEQVRYha1Wz28bRRh9602L1YXmQKQm
    lVrfUMFC5MKhh152BRx7KSdulZB8ssD/AAfOa2i55JReyM09o4pupVZqLyFSpGapRVRVNjQJdRAK7Dhu
    afI4zM56ZvaHS8UnWV6v55v35n2/BiRBEn5IkoRDEvFQEKnVgi4IAJsDFwDyKxwye9ZcxoIYCwZdEBQJ
    v793yK96L0iRSLitQUKKhH6YctB5UCTM8QIAjAXjfUlnuXGEn5+6+PRi3akp9J3JnMHmxcv0YRZEtiB9
    ueuH3NDfGd7HSSJPUCUeADQXgHgfaJ73JMl2z4P6bvc8xPvTdw5JxkMBXfHlxhGaC8DahqtxSJXTn6dC
    pSLp+IDkkNegSgf7o4L2+0g6FX2yUARdMB4KxkOZB0EXVHRGY/m/WnO/P6ZKNTsSWapsDaYfRV39zo5E
    wvFD7kYdLMZDYQjQ7nm4+uEkC87qeh3XrwgjWGsbLuYA7ABYBKbOVdZckN9qrVEUQReMWqJwI92x3fMQ
    deAYGvghyckkO6Ouh54EW4OEa/cOma+YIhvLJFWJWbSkcgMVqoxukZUliF39MxNJIQZd9HXhdEFVMhUe
    4cFjcP6EjLOqNRV39VtF6IubHn78Uh5L1yCrSxv5zRNAY376bnPg4rNLdQeAUQv95nkv5wzknVfX60vq
    v2yDqIN3dad2z8PmwMXmwEWw4hkbRh3sZRuoCvt1TxBjecbtkWvUwaXGP9nzcuMIevfOGJw7PaX53d06
    bFNC2rVQKxLtdkvAtutXROasm52JxFg6BysePlh6id2/a3iW1PDD5wInXVnCKgLGBkEXjDqA0sE2hb62
    4WJ1vd5Xos+lzhdexTnelyJexeQCUJ9qEHXQ/+Sa2Y100YIVzwjl6romsl1AfshFfRjoxeSHfGQXljEV
    i8pWP5KdbIaI/8XsipxFotKqBlNZH7HbpRoZRev9kPNV/WiuiFTQBb++LJM3HoJpQLejDt5Ra+yKKFMp
    agncHzr46JtTPGZeodxUSWWEak22zQJ+723A0SD0dWknQoqR64eKxCNA1oVOYhawvqZonQa+pHez0iTM
    KhuAag/6ptsj12hat1sCTgnw04Mabv1ysjBBHZKlWR218sCqwPV2q0zJq19BbL8cAT9kLu5lctv3Hdu2
    n7l48qeL3/6q5UjYnTjtiWYVvEqcZ9nBc1NlG/iPQ2BP41YZAvs2ByDrqbYSJHDjp2kIdODkOXD5RkkI
    XjcJATOuRWQBKfXBxMHNh2+UJ6ENDMicKAMuM1vukh7Q12dCaSMqAn+44+L9s0czge88qeHMW8e5dUWN
    qHQGfPwtORwZ1+XFqllg30HV6NSv00Uz4bWHkQ1eNoyq9pl9vy+x/3Mc/wsSUe2xpmtt4QAAAABJRU5E
    rkJggg==}
image create photo ::img::help -data {
    iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAAEEfUpiAAACEklEQVRYhc1WPU4CQRh9u643MDExHAAS
    JJYWxgZsPMBC5QVMuIDFAt6Ayt6G9QB2VFhYGkKyF6AxgQRqMZ+FzjIzO7+LEl+38/Pe9337zZsBEYGI
    UI17GyICiAitwYQWqzW1BhMKa+3+BhzCLE0ifiAgIggD1bhHlXoTADCfjRG0BhNxSTXu0WK1psVqTdW4
    RzlHrd3Pt7LtWZoEARHh6v5FpOHDkgdG3YYYlZOECZFqN88QAgCbHHUbeQxsTKiMjPlsLGbBM2jTlBFm
    aRLoJrM0CSKmVak30RlOBX3govg/ge+0Taz8t1BpYJs+w6jbEJS36tj+CVWh2WYGmYQRaaskl1MHLYFK
    0YvAFdYiqlAoooxSv1GFWrt/B2CZpcmDbk2BwKRujcBWBz73AoGqmVgvqDqRkYS6zSZU6s082t37wGQZ
    NsxnY0SqieuzI9xcnuTfprZWpvD8ttjfWdidIEuTgDWIDwRnV4E3FJO5GDvRpi4QMBKg5FmQSXTw8gMZ
    NnKTkA42QypM+limS0BWSy17TnUBORmii7CqNW3HVxVIfg5+O2sVeF6mlz8NyorH58d4en332sNXQnCC
    Mpn7iss60c/V64TDgwCPt6faeVcL5xECWLou/vgkdIbTUkLaAEyPjn1A6IEy10oZFJqQN4e/DkL2Ai8j
    kh8bOuh6RGVE/8uKTYH4BLTzZeQTkA6u1/EXzQl821A0/wwAAAAASUVORK5CYII=}

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

if {$data(game,type) eq "Spider Go"} {
    setDifficulty 8 2
} else {
    setDifficulty A 1
}
main
newGame
return