From 69ab6ffd2444f1017d86cc327028a83224168091 Mon Sep 17 00:00:00 2001 From: Yann Dirson Date: Mon, 17 Mar 2008 20:34:16 +0100 Subject: [PATCH] new 4475edb243ed4627f4c5f2c470ca40b3def034d4 --- .gitignore | 17 + .kateconfig | 1 + AUTHORS | 4 + CHANGELOG | 19 + CMakeLists.txt | 54 + COPYING | 340 + INSTALL | 38 + README | 6 + RELEASE | 30 + TODO | 57 + TODO_Maurizio | 32 + TODO_Riccardo | 2 + TODO_shogi | 72 + add_variant.rb | 19 + cmake/FindCPPUNIT.cmake | 28 + cmake/Tagua.cmake | 13 + data/.gitignore | 3 + data/CMakeLists.txt | 5 + data/highlighting/.gitignore | 3 + data/highlighting/CMakeLists.txt | 2 + data/highlighting/highlighting.lua | 56 + data/pics/.gitignore | 3 + data/pics/CMakeLists.txt | 8 + data/pics/promoteBishop.png | Bin 0 -> 3152 bytes data/pics/promoteKing.png | Bin 0 -> 3188 bytes data/pics/promoteKnight.png | Bin 0 -> 2380 bytes data/pics/promoteQueen.png | Bin 0 -> 3289 bytes data/pics/promoteRook.png | Bin 0 -> 2559 bytes data/piece_icons/.gitignore | 3 + data/piece_icons/CMakeLists.txt | 8 + data/piece_icons/b.png | Bin 0 -> 3152 bytes data/piece_icons/k.png | Bin 0 -> 3188 bytes data/piece_icons/n.png | Bin 0 -> 2380 bytes data/piece_icons/p.png | Bin 0 -> 2084 bytes data/piece_icons/q.png | Bin 0 -> 3289 bytes data/piece_icons/r.png | Bin 0 -> 2559 bytes data/scripts/.gitignore | 3 + data/scripts/CMakeLists.txt | 6 + data/scripts/hllib.lua | 136 + data/scripts/movelist_textual.html | 57 + data/scripts/piece_theme.lua | 85 + data/scripts/shogi_themelib.lua | 157 + data/themes/.gitignore | 3 + data/themes/CMakeLists.txt | 30 + data/themes/controls/Cool/active_clock.svg | 152 + data/themes/controls/Cool/border_corner.svg | 87 + data/themes/controls/Cool/border_top.svg | 71 + data/themes/controls/Cool/inactive_clock.svg | 152 + data/themes/controls/Cool/theme.desktop | 8 + data/themes/controls/Cool/theme.lua | 160 + data/themes/controls/Google/active_clock.svg | 75 + data/themes/controls/Google/border_corner.svg | 60 + data/themes/controls/Google/border_top.svg | 58 + data/themes/controls/Google/inactive_clock.svg | 75 + data/themes/controls/Google/theme_google.desktop | 8 + data/themes/controls/Google/theme_google.lua | 151 + data/themes/controls/XBoard/theme_xboard.desktop | 7 + data/themes/controls/XBoard/theme_xboard.lua | 91 + data/themes/figurines/AlphaTTF/theme.desktop | 8 + data/themes/figurines/AlphaTTF/theme.lua | 13 + data/themes/figurines/AsciiShogiTTF/theme.desktop | 7 + data/themes/figurines/AsciiShogiTTF/theme.lua | 39 + data/themes/figurines/FantasyTTF/Fantasy.sfd | 614 ++ data/themes/figurines/FantasyTTF/Fantasy.ttf | Bin 0 -> 5132 bytes data/themes/figurines/FantasyTTF/theme.desktop | 8 + data/themes/figurines/FantasyTTF/theme.lua | 13 + data/themes/figurines/ShogiTTF/mikachan.ttf | Bin 0 -> 8964 bytes data/themes/figurines/ShogiTTF/theme.desktop | 7 + data/themes/figurines/ShogiTTF/theme.lua | 32 + data/themes/figurines/XiangQi/theme.desktop | 7 + data/themes/figurines/XiangQi/theme.lua | 48 + data/themes/figurines/XiangQi/ukai.ttf | Bin 0 -> 19416 bytes data/themes/pieces/AlphaTTF/Alpha.ttf | Bin 0 -> 40728 bytes data/themes/pieces/AlphaTTF/gradient darkgrey.bmp | Bin 0 -> 12342 bytes data/themes/pieces/AlphaTTF/gradient lightgrey.bmp | Bin 0 -> 12342 bytes .../pieces/AlphaTTF/theme_babaschess.desktop | 7 + data/themes/pieces/AlphaTTF/theme_babaschess.lua | 35 + data/themes/pieces/AlphaTTF/theme_eboard.desktop | 7 + data/themes/pieces/AlphaTTF/theme_eboard.lua | 36 + data/themes/pieces/AlphaTTF/theme_jose.desktop | 7 + data/themes/pieces/AlphaTTF/theme_jose.lua | 25 + data/themes/pieces/BerlinTTF/Berlin.ttf | Bin 0 -> 79280 bytes data/themes/pieces/BerlinTTF/theme_jose.desktop | 7 + data/themes/pieces/BerlinTTF/theme_jose.lua | 28 + data/themes/pieces/EnquilTTF/Enquil.sfd | 597 ++ data/themes/pieces/EnquilTTF/Enquil.ttf | Bin 0 -> 3600 bytes data/themes/pieces/EnquilTTF/theme_eboard.desktop | 7 + data/themes/pieces/EnquilTTF/theme_eboard.lua | 36 + data/themes/pieces/FantasySVG/bb.svg | 212 + data/themes/pieces/FantasySVG/bd.svg | 205 + data/themes/pieces/FantasySVG/bg.svg | 301 + data/themes/pieces/FantasySVG/bh.svg | 173 + data/themes/pieces/FantasySVG/bk.svg | 288 + data/themes/pieces/FantasySVG/bl.svg | 179 + data/themes/pieces/FantasySVG/bn.svg | 210 + data/themes/pieces/FantasySVG/bp.svg | 148 + data/themes/pieces/FantasySVG/bq.svg | 331 + data/themes/pieces/FantasySVG/br.svg | 216 + data/themes/pieces/FantasySVG/bs.svg | 262 + data/themes/pieces/FantasySVG/theme.desktop | 8 + data/themes/pieces/FantasySVG/theme.lua | 42 + data/themes/pieces/FantasySVG/wb.svg | 212 + data/themes/pieces/FantasySVG/wd.svg | 205 + data/themes/pieces/FantasySVG/wg.svg | 301 + data/themes/pieces/FantasySVG/wh.svg | 173 + data/themes/pieces/FantasySVG/wk.svg | 255 + data/themes/pieces/FantasySVG/wl.svg | 179 + data/themes/pieces/FantasySVG/wn.svg | 210 + data/themes/pieces/FantasySVG/wp.svg | 148 + data/themes/pieces/FantasySVG/wq.svg | 299 + data/themes/pieces/FantasySVG/wr.svg | 216 + data/themes/pieces/FantasySVG/ws.svg | 262 + data/themes/pieces/LucenaTTF/Lucena.ttf | Bin 0 -> 54228 bytes data/themes/pieces/LucenaTTF/theme_jose.desktop | 7 + data/themes/pieces/LucenaTTF/theme_jose.lua | 26 + data/themes/pieces/MayanTTF/Mayan.ttf | Bin 0 -> 45768 bytes data/themes/pieces/MayanTTF/theme_eboard.desktop | 7 + data/themes/pieces/MayanTTF/theme_eboard.lua | 35 + data/themes/pieces/MayanTTF/theme_jose.desktop | 7 + data/themes/pieces/MayanTTF/theme_jose.lua | 25 + data/themes/pieces/PrmiSVG/bb.svg | 538 ++ data/themes/pieces/PrmiSVG/bk.svg | 537 ++ data/themes/pieces/PrmiSVG/bn.svg | 683 ++ data/themes/pieces/PrmiSVG/bp.svg | 463 ++ data/themes/pieces/PrmiSVG/bq.svg | 565 ++ data/themes/pieces/PrmiSVG/br.svg | 160 + data/themes/pieces/PrmiSVG/theme.desktop | 7 + data/themes/pieces/PrmiSVG/theme.lua | 20 + data/themes/pieces/PrmiSVG/wb.svg | 527 ++ data/themes/pieces/PrmiSVG/wk.svg | 546 ++ data/themes/pieces/PrmiSVG/wn.svg | 722 ++ data/themes/pieces/PrmiSVG/wp.svg | 463 ++ data/themes/pieces/PrmiSVG/wq.svg | 554 ++ data/themes/pieces/PrmiSVG/wr.svg | 160 + data/themes/pieces/ShogiSVG-TTF/Shogi.sfd | 1277 +++ data/themes/pieces/ShogiSVG-TTF/Shogi.ttf | Bin 0 -> 8796 bytes data/themes/pieces/ShogiSVG-TTF/theme.desktop | 7 + data/themes/pieces/ShogiSVG-TTF/theme.lua | 82 + data/themes/pieces/ShogiSVG/default/bishop.svg | 70 + data/themes/pieces/ShogiSVG/default/example.svg | 92 + data/themes/pieces/ShogiSVG/default/gold.svg | 67 + data/themes/pieces/ShogiSVG/default/horse.svg | 67 + data/themes/pieces/ShogiSVG/default/king.svg | 73 + data/themes/pieces/ShogiSVG/default/lance.svg | 61 + data/themes/pieces/ShogiSVG/default/nude_tile.svg | 57 + data/themes/pieces/ShogiSVG/default/pawn.svg | 67 + data/themes/pieces/ShogiSVG/default/pbishop.svg | 67 + data/themes/pieces/ShogiSVG/default/phorse.svg | 67 + data/themes/pieces/ShogiSVG/default/plance.svg | 58 + data/themes/pieces/ShogiSVG/default/ppawn.svg | 58 + data/themes/pieces/ShogiSVG/default/prook.svg | 67 + data/themes/pieces/ShogiSVG/default/psilver.svg | 61 + data/themes/pieces/ShogiSVG/default/rook.svg | 61 + data/themes/pieces/ShogiSVG/default/silver.svg | 61 + data/themes/pieces/ShogiSVG/default/tile.svg | 63 + data/themes/pieces/ShogiSVG/theme.desktop | 7 + data/themes/pieces/ShogiSVG/theme.lua | 76 + data/themes/pieces/ShogiTTF/theme.desktop | 7 + data/themes/pieces/ShogiTTF/theme.lua | 132 + data/themes/pieces/SkullsSVG/bb.svg | 668 ++ data/themes/pieces/SkullsSVG/bk.svg | 316 + data/themes/pieces/SkullsSVG/bn.svg | 322 + data/themes/pieces/SkullsSVG/bp.svg | 239 + data/themes/pieces/SkullsSVG/bq.svg | 518 ++ data/themes/pieces/SkullsSVG/br.svg | 305 + data/themes/pieces/SkullsSVG/theme.desktop | 7 + data/themes/pieces/SkullsSVG/theme.lua | 20 + data/themes/pieces/SkullsSVG/wb.svg | 668 ++ data/themes/pieces/SkullsSVG/wk.svg | 316 + data/themes/pieces/SkullsSVG/wn.svg | 322 + data/themes/pieces/SkullsSVG/wp.svg | 239 + data/themes/pieces/SkullsSVG/wq.svg | 518 ++ data/themes/pieces/SkullsSVG/wr.svg | 305 + data/themes/pieces/SpatialSVG/bb.svg | 171 + data/themes/pieces/SpatialSVG/bk.svg | 158 + data/themes/pieces/SpatialSVG/bn.svg | 111 + data/themes/pieces/SpatialSVG/bp.svg | 115 + data/themes/pieces/SpatialSVG/bq.svg | 140 + data/themes/pieces/SpatialSVG/br.svg | 246 + data/themes/pieces/SpatialSVG/theme.desktop | 7 + data/themes/pieces/SpatialSVG/theme.lua | 20 + data/themes/pieces/SpatialSVG/wb.svg | 171 + data/themes/pieces/SpatialSVG/wk.svg | 158 + data/themes/pieces/SpatialSVG/wn.svg | 111 + data/themes/pieces/SpatialSVG/wp.svg | 115 + data/themes/pieces/SpatialSVG/wq.svg | 140 + data/themes/pieces/SpatialSVG/wr.svg | 151 + data/themes/pieces/StonesSVG/black.svg | 156 + data/themes/pieces/StonesSVG/blue.svg | 156 + data/themes/pieces/StonesSVG/blue_add.svg | 121 + data/themes/pieces/StonesSVG/green.svg | 156 + data/themes/pieces/StonesSVG/grey.svg | 156 + data/themes/pieces/StonesSVG/orange.svg | 156 + data/themes/pieces/StonesSVG/red.svg | 156 + data/themes/pieces/StonesSVG/red_add.svg | 121 + .../pieces/StonesSVG/theme_chainreaction.desktop | 7 + .../pieces/StonesSVG/theme_chainreaction.lua | 110 + data/themes/pieces/StonesSVG/theme_rs.desktop | 8 + data/themes/pieces/StonesSVG/theme_rs.lua | 10 + data/themes/pieces/StonesSVG/theme_ry.desktop | 8 + data/themes/pieces/StonesSVG/theme_ry.lua | 10 + data/themes/pieces/StonesSVG/theme_wb.desktop | 7 + data/themes/pieces/StonesSVG/theme_wb.lua | 10 + data/themes/pieces/StonesSVG/violet.svg | 156 + data/themes/pieces/StonesSVG/white.svg | 156 + data/themes/pieces/StonesSVG/yellow.svg | 156 + data/themes/pieces/ToriShogiTTF/theme.desktop | 7 + data/themes/pieces/ToriShogiTTF/theme.lua | 79 + data/themes/pieces/XBoardTTF/XBoard.sfd | 1472 ++++ data/themes/pieces/XBoardTTF/XBoard.ttf | Bin 0 -> 8096 bytes data/themes/pieces/XBoardTTF/theme_jose.desktop | 8 + data/themes/pieces/XBoardTTF/theme_jose.lua | 25 + data/themes/pieces/XBoardTTF/theme_xboard.desktop | 8 + data/themes/pieces/XBoardTTF/theme_xboard.lua | 19 + data/themes/pieces/XiangQiSVG/black_advisor.svg | 58 + data/themes/pieces/XiangQiSVG/black_cannon.svg | 61 + data/themes/pieces/XiangQiSVG/black_chariot.svg | 58 + data/themes/pieces/XiangQiSVG/black_elephant.svg | 58 + data/themes/pieces/XiangQiSVG/black_general.svg | 61 + data/themes/pieces/XiangQiSVG/black_horse.svg | 70 + data/themes/pieces/XiangQiSVG/black_soldier.svg | 58 + data/themes/pieces/XiangQiSVG/circle.svg | 61 + data/themes/pieces/XiangQiSVG/inner_circle.svg | 61 + data/themes/pieces/XiangQiSVG/red_advisor.svg | 61 + data/themes/pieces/XiangQiSVG/red_cannon.svg | 64 + data/themes/pieces/XiangQiSVG/red_chariot.svg | 58 + data/themes/pieces/XiangQiSVG/red_elephant.svg | 61 + data/themes/pieces/XiangQiSVG/red_general.svg | 61 + data/themes/pieces/XiangQiSVG/red_horse.svg | 73 + data/themes/pieces/XiangQiSVG/red_soldier.svg | 64 + data/themes/pieces/XiangQiTTF/XiangQi.sfd | 1014 +++ data/themes/pieces/XiangQiTTF/XiangQi.ttf | Bin 0 -> 5036 bytes data/themes/pieces/XiangQiTTF/theme.desktop | 8 + data/themes/pieces/XiangQiTTF/theme.lua | 59 + data/themes/pieces/YahooTTF/Yahoo.sfd | 1542 ++++ data/themes/pieces/YahooTTF/Yahoo.ttf | Bin 0 -> 7324 bytes data/themes/pieces/YahooTTF/theme.desktop | 7 + data/themes/pieces/YahooTTF/theme.lua | 40 + data/themes/squares/Default/arrow_grey.svg | 90 + data/themes/squares/Default/arrow_yellow.svg | 90 + data/themes/squares/Default/selection.lua | 22 + data/themes/squares/Default/spiral.svg | 111 + data/themes/squares/Default/theme.desktop | 8 + data/themes/squares/Default/theme.lua | 18 + .../squares/Default/theme_babaschess.desktop | 7 + data/themes/squares/Default/theme_babaschess.lua | 16 + .../squares/Default/theme_chainreaction.desktop | 7 + .../themes/squares/Default/theme_chainreaction.lua | 16 + data/themes/squares/Default/theme_connect4.desktop | 7 + data/themes/squares/Default/theme_connect4.lua | 16 + data/themes/squares/Default/theme_reversi.desktop | 7 + data/themes/squares/Default/theme_reversi.lua | 15 + data/themes/squares/Default/theme_shogi.desktop | 7 + data/themes/squares/Default/theme_shogi.lua | 32 + data/themes/squares/Default/theme_solid.desktop | 7 + data/themes/squares/Default/theme_solid.lua | 23 + data/themes/squares/Default/theme_xboard.desktop | 7 + data/themes/squares/Default/theme_xboard.lua | 22 + data/themes/squares/Default/theme_xiangqi.desktop | 7 + data/themes/squares/Default/theme_xiangqi.lua | 174 + data/themes/squares/Default/theme_yahoo.desktop | 7 + data/themes/squares/Default/theme_yahoo.lua | 16 + data/themes/squares/Jose/marble04.jpg | Bin 0 -> 16642 bytes data/themes/squares/Jose/marble13.jpg | Bin 0 -> 32093 bytes data/themes/squares/Jose/square_last.png | Bin 0 -> 872 bytes data/themes/squares/Jose/square_premove.png | Bin 0 -> 864 bytes data/themes/squares/Jose/square_select.png | Bin 0 -> 784 bytes data/themes/squares/Jose/theme_jose.desktop | 7 + data/themes/squares/Jose/theme_jose.lua | 23 + data/themes/wallpapers/Buda_and_Pest.jpg | Bin 0 -> 197500 bytes data/themes/wallpapers/Dark_Sunset.jpg | Bin 0 -> 749634 bytes data/themes/wallpapers/Dark_Waters.jpg | Bin 0 -> 582897 bytes data/themes/wallpapers/Fiord.jpg | Bin 0 -> 515520 bytes data/themes/wallpapers/Mont_Blanc.jpg | Bin 0 -> 296035 bytes data/themes/wallpapers/Old_Curtains.jpg | Bin 0 -> 307654 bytes data/themes/wallpapers/Paris_by_Night.jpg | Bin 0 -> 173611 bytes data/themes/wallpapers/Prmao.jpg | Bin 0 -> 331966 bytes data/themes/wallpapers/README | 7 + data/themes/wallpapers/San_Diego.jpg | Bin 0 -> 216119 bytes debian/.gitignore | 11 + debian/README.Debian | 25 + debian/changelog | 5 + debian/compat | 1 + debian/control | 78 + debian/copyright | 81 + debian/docs | 5 + debian/menu | 3 + debian/rules | 102 + debian/tagua-data.files | 3 + debian/tagua-variant-chess.files | 2 + debian/tagua-variant-chess5x5.files | 2 + debian/tagua-variant-crazyhouse.files | 2 + debian/tagua-variant-minishogi.files | 2 + debian/tagua-variant-shogi.files | 2 + debian/tagua.files | 3 + debian/watch | 5 + doc/engine-intf.html | 1895 +++++ doc/uci-engine-interface.txt | 544 ++ doc/xboard-ics-parsing.txt | 161 + extract-messages.sh | 49 + fix_copyright.rb | 26 + lua/.gitignore | 1 + lua/CMakeLists.txt | 90 + lua/COPYRIGHT | 34 + lua/HISTORY | 183 + lua/INSTALL | 99 + lua/README | 37 + lua/doc/amazon.gif | Bin 0 -> 797 bytes lua/doc/contents.html | 456 ++ lua/doc/cover.png | Bin 0 -> 3305 bytes lua/doc/logo.gif | Bin 0 -> 4232 bytes lua/doc/lua.1 | 163 + lua/doc/lua.css | 41 + lua/doc/lua.html | 172 + lua/doc/luac.1 | 136 + lua/doc/luac.html | 145 + lua/doc/manual.css | 7 + lua/doc/manual.html | 8521 ++++++++++++++++++++ lua/doc/readme.html | 40 + lua/etc/Makefile | 44 + lua/etc/README | 37 + lua/etc/all.c | 38 + lua/etc/lua.hpp | 9 + lua/etc/lua.ico | Bin 0 -> 1078 bytes lua/etc/lua.pc | 31 + lua/etc/luavs.bat | 15 + lua/etc/min.c | 39 + lua/etc/noparser.c | 50 + lua/etc/strict.lua | 39 + lua/src/Makefile | 183 + lua/src/lapi.c | 1080 +++ lua/src/lapi.h | 16 + lua/src/lauxlib.c | 653 ++ lua/src/lauxlib.h | 174 + lua/src/lbaselib.c | 643 ++ lua/src/lcode.c | 839 ++ lua/src/lcode.h | 76 + lua/src/ldblib.c | 397 + lua/src/ldebug.c | 622 ++ lua/src/ldebug.h | 33 + lua/src/ldo.c | 516 ++ lua/src/ldo.h | 57 + lua/src/ldump.c | 164 + lua/src/lfunc.c | 174 + lua/src/lfunc.h | 34 + lua/src/lgc.c | 711 ++ lua/src/lgc.h | 110 + lua/src/linit.c | 38 + lua/src/liolib.c | 532 ++ lua/src/llex.c | 461 ++ lua/src/llex.h | 81 + lua/src/llimits.h | 128 + lua/src/lmathlib.c | 263 + lua/src/lmem.c | 86 + lua/src/lmem.h | 49 + lua/src/loadlib.c | 664 ++ lua/src/lobject.c | 214 + lua/src/lobject.h | 381 + lua/src/lopcodes.c | 102 + lua/src/lopcodes.h | 268 + lua/src/loslib.c | 244 + lua/src/lparser.c | 1337 +++ lua/src/lparser.h | 82 + lua/src/lstate.c | 214 + lua/src/lstate.h | 168 + lua/src/lstring.c | 111 + lua/src/lstring.h | 31 + lua/src/lstrlib.c | 868 ++ lua/src/ltable.c | 588 ++ lua/src/ltable.h | 40 + lua/src/ltablib.c | 278 + lua/src/ltm.c | 75 + lua/src/ltm.h | 54 + lua/src/lua.c | 390 + lua/src/lua.h | 385 + lua/src/luac.c | 200 + lua/src/luaconf.h | 762 ++ lua/src/lualib.h | 53 + lua/src/lundump.c | 223 + lua/src/lundump.h | 36 + lua/src/lvm.c | 765 ++ lua/src/lvm.h | 36 + lua/src/lzio.c | 82 + lua/src/lzio.h | 67 + lua/src/print.c | 227 + lua/test/README | 26 + lua/test/bisect.lua | 27 + lua/test/cf.lua | 16 + lua/test/echo.lua | 5 + lua/test/env.lua | 7 + lua/test/factorial.lua | 32 + lua/test/fib.lua | 40 + lua/test/fibfor.lua | 13 + lua/test/globals.lua | 13 + lua/test/hello.lua | 3 + lua/test/life.lua | 111 + lua/test/luac.lua | 7 + lua/test/printf.lua | 7 + lua/test/readonly.lua | 12 + lua/test/sieve.lua | 29 + lua/test/sort.lua | 66 + lua/test/table.lua | 12 + lua/test/trace-calls.lua | 32 + lua/test/trace-globals.lua | 38 + lua/test/xd.lua | 14 + src/.gitignore | 11 + src/CMakeLists.txt | 177 + src/Doxyfile | 240 + src/actioncollection.cpp | 25 + src/actioncollection.h | 32 + src/agent.h | 32 + src/agentgroup.cpp | 88 + src/agentgroup.h | 50 + src/animation.cpp | 737 ++ src/animation.h | 260 + src/animationmanager.cpp | 96 + src/animationmanager.h | 50 + src/chessboard.cpp | 721 ++ src/chessboard.h | 307 + src/chesstable.cpp | 355 + src/chesstable.h | 91 + src/clickablecanvas.h | 26 + src/clock.cpp | 172 + src/clock.h | 89 + src/common.cpp | 40 + src/common.h | 30 + src/components.cpp | 86 + src/components.h | 70 + src/config.xsd | 275 + src/connection.cpp | 164 + src/connection.h | 119 + src/console.cpp | 289 + src/console.h | 53 + src/console_p.h | 69 + src/constrainedtext.cpp | 99 + src/constrainedtext.h | 51 + src/controllers/abstract.cpp | 61 + src/controllers/abstract.h | 207 + src/controllers/editgame.cpp | 331 + src/controllers/editgame.h | 88 + src/controllers/editposition.cpp | 355 + src/controllers/editposition.h | 108 + src/controllers/entitytoken.cpp | 20 + src/controllers/entitytoken.h | 30 + src/core/CMakeLists.txt | 47 + src/core/animation.cpp | 19 + src/core/animation.h | 37 + src/core/animation_fwd.h | 19 + src/core/animator.cpp | 17 + src/core/animator.h | 76 + src/core/baseanimator.cpp | 66 + src/core/baseanimator.h | 33 + src/core/behaviour.cpp | 13 + src/core/behaviour.h | 65 + src/core/board.cpp | 128 + src/core/board.h | 93 + src/core/color.cpp | 35 + src/core/color.h | 57 + src/core/common.h | 61 + src/core/component.cpp | 13 + src/core/component.h | 27 + src/core/component_fwd.h | 19 + src/core/defaultpolicy.cpp | 32 + src/core/defaultpolicy.h | 29 + src/core/defaultpool.cpp | 135 + src/core/defaultpool.h | 82 + src/core/defaultpoolcollection.cpp | 70 + src/core/defaultpoolcollection.h | 36 + src/core/defaultstate.cpp | 39 + src/core/defaultstate.h | 17 + src/core/defaulttype.cpp | 27 + src/core/defaulttype.h | 24 + src/core/delegators/behaviour.h | 44 + src/core/delegators/defaultstate.h | 38 + src/core/delegators/moveserializer.h | 49 + src/core/delegators/state.h | 47 + src/core/delegators/validator.h | 46 + src/core/dropanimator.cpp | 129 + src/core/dropanimator.h | 40 + src/core/export.h | 16 + src/core/interactiontype.h | 25 + src/core/move.cpp | 77 + src/core/move.h | 58 + src/core/moveserializer.cpp | 13 + src/core/moveserializer.h | 69 + src/core/namedsprite.cpp | 19 + src/core/namedsprite.h | 34 + src/core/namer.cpp | 13 + src/core/namer.h | 29 + src/core/pathinfo.cpp | 14 + src/core/pathinfo.h | 39 + src/core/piece.cpp | 29 + src/core/piece.h | 37 + src/core/point.cpp | 177 + src/core/point.h | 69 + src/core/policy.cpp | 12 + src/core/policy.h | 43 + src/core/pool.cpp | 13 + src/core/pool.h | 74 + src/core/poolcollection.cpp | 13 + src/core/poolcollection.h | 39 + src/core/poolcollection_fwd.h | 18 + src/core/promotionmanager.cpp | 17 + src/core/promotionmanager.h | 20 + src/core/repository.cpp | 53 + src/core/repository.h | 82 + src/core/state.cpp | 13 + src/core/state.h | 99 + src/core/state_fwd.h | 18 + src/core/statefactory.cpp | 13 + src/core/statefactory.h | 39 + src/core/tagua-variant.desktop | 11 + src/core/taguaapi.cpp | 14 + src/core/taguaapi.h | 116 + src/core/taguacast.h | 31 + src/core/taguaobject.cpp | 28 + src/core/taguaobject.h | 31 + src/core/turnpolicy.cpp | 59 + src/core/turnpolicy.h | 65 + src/core/type.cpp | 14 + src/core/type.h | 55 + src/core/validator.cpp | 14 + src/core/validator.h | 61 + src/core/variantloader.cpp | 14 + src/core/variantloader.h | 25 + src/crash.cpp | 40 + src/crash.h | 21 + src/decoratedmove.cpp | 54 + src/decoratedmove.h | 51 + src/doxy/.gitignore | 1 + src/doxy/bottom1.png | Bin 0 -> 168 bytes src/doxy/bottom2.png | Bin 0 -> 6979 bytes src/doxy/docheadergears.png | Bin 0 -> 9282 bytes src/doxy/doxygen.css | 246 + src/doxy/footer.html | 14 + src/doxy/grad.png | Bin 0 -> 248 bytes src/doxy/header.html | 34 + src/doxy/headerbg.png | Bin 0 -> 493 bytes src/doxy/logo.png | Bin 0 -> 8809 bytes src/engine.cpp | 101 + src/engine.h | 123 + src/engineinfo.cpp | 76 + src/engineinfo.h | 94 + src/enginenotifier.h | 24 + src/entities/engineentity.cpp | 110 + src/entities/engineentity.h | 55 + src/entities/entity.cpp | 28 + src/entities/entity.h | 46 + src/entities/examinationentity.cpp | 113 + src/entities/examinationentity.h | 71 + src/entities/gameentity.cpp | 159 + src/entities/gameentity.h | 76 + src/entities/icsentity.cpp | 227 + src/entities/icsentity.h | 93 + src/entities/userentity.cpp | 24 + src/entities/userentity.h | 117 + src/export.h | 26 + src/flash.cpp | 11 + src/flash.h | 21 + src/foreach.h | 17 + src/game.cpp | 981 +++ src/game.h | 191 + src/game_fwd.h | 19 + src/game_p.h | 108 + src/gameinfo.cpp | 48 + src/gameinfo.h | 45 + src/genericposition.h | 42 + src/gnushogiengine.cpp | 139 + src/gnushogiengine.h | 111 + src/graphicalgame.cpp | 369 + src/graphicalgame.h | 107 + src/graphicalsystem.cpp | 309 + src/graphicalsystem.h | 199 + src/grid.h | 133 + src/highlighter.h | 59 + src/histlineedit.cpp | 67 + src/histlineedit.h | 36 + src/hline.cpp | 178 + src/hline.h | 79 + src/icsaction.h | 35 + src/icsapi.h | 56 + src/icsapi.impl.h | 41 + src/icsapi_fwd.h | 18 + src/icsconnection.cpp | 370 + src/icsconnection.h | 87 + src/icsgamedata.cpp | 27 + src/icsgamedata.h | 32 + src/icslistener.h | 28 + src/imageeffects.cpp | 354 + src/imageeffects.h | 32 + src/imageeffects_mmx.cpp | 103 + src/imageeffects_sse.cpp | 177 + src/index.cpp | 203 + src/index.h | 120 + src/indexconverter.h | 22 + src/infodisplay.cpp | 43 + src/infodisplay.h | 29 + src/loader/context.cpp | 42 + src/loader/context.h | 113 + src/loader/image.cpp | 407 + src/loader/image.h | 316 + src/loader/theme.cpp | 176 + src/loader/theme.h | 81 + src/location.cpp | 12 + src/location.h | 22 + src/luaapi/genericwrapper.cpp | 140 + src/luaapi/genericwrapper.h | 571 ++ src/luaapi/imaging.cpp | 916 +++ src/luaapi/imaging.h | 220 + src/luaapi/lfunclib.c | 571 ++ src/luaapi/lfunclib.h | 20 + src/luaapi/loader.cpp | 364 + src/luaapi/loader.h | 86 + src/luaapi/luahl.cpp | 366 + src/luaapi/luahl.h | 42 + src/luaapi/luavalue.cpp | 37 + src/luaapi/luavalue.h | 34 + src/luaapi/options.cpp | 536 ++ src/luaapi/options.h | 210 + src/main.cpp | 62 + src/mainanimation.cpp | 60 + src/mainanimation.h | 63 + src/mainwindow.cpp | 745 ++ src/mainwindow.h | 142 + src/mastersettings.cpp | 160 + src/mastersettings.h | 87 + src/movefactory.h | 32 + src/movelist.cpp | 1285 +++ src/movelist_notifier.h | 62 + src/movelist_p.h | 212 + src/movelist_table.cpp | 136 + src/movelist_table.h | 89 + src/movelist_textual.cpp | 389 + src/movelist_textual.h | 118 + src/movelist_widget.cpp | 10 + src/movelist_widget.h | 163 + src/movement.cpp | 71 + src/movement.h | 93 + src/namedsprite_utils.cpp | 19 + src/namedsprite_utils.h | 18 + src/newgame.cpp | 30 + src/newgame.h | 26 + src/nopool.h | 18 + src/option.cpp | 426 + src/option.h | 349 + src/option_p.cpp | 138 + src/option_p.h | 135 + src/pgnparser.cpp | 114 + src/pgnparser.h | 61 + src/piecefactory.h | 23 + src/piecefunction.h | 20 + src/piecegrid.h | 94 + src/piecepool.cpp | 317 + src/piecepool.h | 150 + src/pixmaploader.cpp | 158 + src/pixmaploader.h | 83 + src/player.h | 34 + src/pointconverter.h | 65 + src/poolinfo.cpp | 73 + src/poolinfo.h | 33 + src/positioninfo.cpp | 147 + src/positioninfo.h | 101 + src/pref_board.cpp | 77 + src/pref_board.h | 28 + src/pref_engines.cpp | 197 + src/pref_engines.h | 45 + src/pref_highlight.h | 62 + src/pref_movelist.cpp | 60 + src/pref_movelist.h | 32 + src/pref_preferences.cpp | 94 + src/pref_preferences.h | 46 + src/pref_theme.cpp | 407 + src/pref_theme.h | 83 + src/qconnect.cpp | 97 + src/qconnect.h | 31 + src/random.cpp | 36 + src/random.h | 39 + src/rubyutils.h | 28 + src/serverinfo.h | 91 + src/serverreference.h | 90 + src/settings.cpp | 182 + src/settings.h | 599 ++ src/sprite.cpp | 327 + src/sprite.h | 117 + src/tabwidget.cpp | 46 + src/tabwidget.h | 30 + src/tagua.desktop | 16 + src/tagua.lsm | 16 + src/tagua_it.ts | 369 + src/taguaui.rc | 55 + src/themeinfo.cpp | 97 + src/themeinfo.h | 39 + src/ui.cpp | 223 + src/ui.h | 137 + src/ui/gametags.ui | 159 + src/ui/newgamedialog.ui | 130 + src/ui/pref_board.ui | 424 + src/ui/pref_engines.ui | 211 + src/ui/pref_highlight.ui | 323 + src/ui/pref_movelist.ui | 346 + src/ui/pref_theme.ui | 70 + src/ui/pref_theme_page.ui | 49 + src/ui/preferences.ui | 79 + src/ui/quickconnect.ui | 329 + src/usermove.h | 43 + src/variant.cpp | 32 + src/variant.h | 49 + src/variants.cpp | 79 + src/variants.h | 42 + src/variants/CMakeLists.txt | 6 + src/variants/chess/CMakeLists.txt | 31 + src/variants/chess/animator.cpp | 149 + src/variants/chess/animator.h | 42 + src/variants/chess/behaviour.cpp | 53 + src/variants/chess/behaviour.h | 32 + src/variants/chess/bishop.cpp | 36 + src/variants/chess/bishop.h | 32 + src/variants/chess/castlingrules.cpp | 155 + src/variants/chess/castlingrules.h | 62 + src/variants/chess/chess.cpp | 62 + src/variants/chess/colors.cpp | 17 + src/variants/chess/colors.h | 22 + src/variants/chess/icsverbose.cpp | 55 + src/variants/chess/icsverbose.h | 37 + src/variants/chess/king.cpp | 42 + src/variants/chess/king.h | 37 + src/variants/chess/knight.cpp | 36 + src/variants/chess/knight.h | 32 + src/variants/chess/moveserializer.cpp | 264 + src/variants/chess/moveserializer.h | 61 + src/variants/chess/namer.cpp | 26 + src/variants/chess/namer.h | 27 + src/variants/chess/pawn.cpp | 83 + src/variants/chess/pawn.h | 34 + src/variants/chess/queen.cpp | 35 + src/variants/chess/queen.h | 32 + src/variants/chess/rook.cpp | 36 + src/variants/chess/rook.h | 32 + src/variants/chess/san.cpp | 106 + src/variants/chess/san.h | 54 + src/variants/chess/state.cpp | 150 + src/variants/chess/state.h | 80 + src/variants/chess/tagua-chess.desktop | 20 + src/variants/chess/types.h | 23 + src/variants/chess/validator.cpp | 118 + src/variants/chess/validator.h | 40 + src/variants/chess5x5/CMakeLists.txt | 17 + src/variants/chess5x5/chess5x5.cpp | 50 + src/variants/chess5x5/chess5x5.cs | 22 + src/variants/chess5x5/chess5x5.java | 24 + src/variants/chess5x5/chess5x5.py | 11 + src/variants/chess5x5/chess5x5.rb | 12 + src/variants/chess5x5/tagua-chess5x5.desktop | 21 + src/variants/crazyhouse/CMakeLists.txt | 22 + src/variants/crazyhouse/animator.cpp | 26 + src/variants/crazyhouse/animator.h | 28 + src/variants/crazyhouse/behaviour.cpp | 37 + src/variants/crazyhouse/behaviour.h | 26 + src/variants/crazyhouse/crazyhouse.cpp | 94 + src/variants/crazyhouse/crazyhouse.rb | 116 + src/variants/crazyhouse/global.h | 24 + src/variants/crazyhouse/moveserializer.cpp | 44 + src/variants/crazyhouse/moveserializer.h | 29 + src/variants/crazyhouse/state.cpp | 79 + src/variants/crazyhouse/state.h | 42 + src/variants/crazyhouse/tagua-crazyhouse.desktop | 21 + src/variants/crazyhouse/validator.cpp | 69 + src/variants/crazyhouse/validator.h | 34 + src/variants/minishogi/CMakeLists.txt | 16 + src/variants/minishogi/global.h | 24 + src/variants/minishogi/minishogi.cpp | 68 + src/variants/minishogi/state.cpp | 33 + src/variants/minishogi/state.h | 24 + src/variants/minishogi/tagua-minishogi.desktop | 20 + src/variants/shogi/CMakeLists.txt | 38 + src/variants/shogi/behaviour.cpp | 36 + src/variants/shogi/behaviour.h | 31 + src/variants/shogi/colors.cpp | 17 + src/variants/shogi/colors.h | 22 + src/variants/shogi/moveserializer.cpp | 43 + src/variants/shogi/moveserializer.h | 18 + src/variants/shogi/shogi.cpp | 82 + src/variants/shogi/state.cpp | 171 + src/variants/shogi/state.h | 76 + src/variants/shogi/tagua-shogi.desktop | 20 + src/variants/shogi/types.h | 31 + src/variants/shogi/types/bishop.cpp | 40 + src/variants/shogi/types/bishop.h | 33 + src/variants/shogi/types/dragonhorse.cpp | 44 + src/variants/shogi/types/dragonhorse.h | 33 + src/variants/shogi/types/dragonking.cpp | 44 + src/variants/shogi/types/dragonking.h | 33 + src/variants/shogi/types/gold.cpp | 42 + src/variants/shogi/types/gold.h | 33 + src/variants/shogi/types/king.cpp | 44 + src/variants/shogi/types/king.h | 33 + src/variants/shogi/types/knight.cpp | 38 + src/variants/shogi/types/knight.h | 33 + src/variants/shogi/types/lance.cpp | 37 + src/variants/shogi/types/lance.h | 33 + src/variants/shogi/types/narigin.cpp | 42 + src/variants/shogi/types/narigin.h | 33 + src/variants/shogi/types/narikei.cpp | 42 + src/variants/shogi/types/narikei.h | 33 + src/variants/shogi/types/narikyo.cpp | 42 + src/variants/shogi/types/narikyo.h | 33 + src/variants/shogi/types/pawn.cpp | 37 + src/variants/shogi/types/pawn.h | 33 + src/variants/shogi/types/rook.cpp | 40 + src/variants/shogi/types/rook.h | 33 + src/variants/shogi/types/silver.cpp | 41 + src/variants/shogi/types/silver.h | 33 + src/variants/shogi/types/tokin.cpp | 42 + src/variants/shogi/types/tokin.h | 33 + src/variants/shogi/validator.cpp | 159 + src/variants/shogi/validator.h | 43 + src/weakset.h | 163 + src/xboardengine.cpp | 212 + src/xboardengine.h | 122 + strip_font.rb | 45 + tagua.pot | 747 ++ templates/cpp | 0 templates/h | 0 templates/variant_template.cpp.erb | 57 + templates/variant_template.h.erb | 16 + tests/.gitignore | 7 + tests/CMakeLists.txt | 10 + tests/add_test.rb | 27 + tests/cppunit_main.cpp | 12 + tests/kovacevic_keene_1973.pgn | 14 + tests/luaimage/CMakeLists.txt | 55 + tests/luaimage/maintest.lua | 28 + tests/luaimage/test.cpp | 78 + tests/luaimage/test.lua | 55 + tests/movelist/CMakeLists.txt | 53 + tests/movelist/main.cpp | 33 + tests/options/CMakeLists.txt | 51 + tests/options/foreach.hpp | 814 ++ tests/options/main.cpp | 67 + tests/options/test.lua | 36 + tests/settings/.gitignore | 4 + tests/settings/CMakeLists.txt | 21 + tests/settings/settingstest.cpp | 85 + tests/settings/settingstest.h | 32 + tests/templates/template.cpp.erb | 19 + tests/templates/template.h.erb | 28 + tests/test.lua | 45 + tests/test_canvas.cpp | 122 + tests/test_lua.cpp | 17 + tests/test_pgn.pgn | 129 + tests/test_weakset.cpp | 66 + tests/variants/CMakeLists.txt | 23 + tests/variants/boardtest.cpp | 160 + tests/variants/boardtest.h | 54 + tests/variants/chessgamestatetest.cpp | 137 + tests/variants/chessgamestatetest.h | 40 + tests/variants/chesslegalitytest.cpp | 192 + tests/variants/chesslegalitytest.h | 49 + tests/variants/chesspiecetest.cpp | 55 + tests/variants/chesspiecetest.h | 32 + tests/variants/chessserializationtest.cpp | 194 + tests/variants/chessserializationtest.h | 53 + tests/variants/pooltest.cpp | 104 + tests/variants/pooltest.h | 50 + tests/variants/test_utils.cpp | 27 + tests/variants/test_utils.h | 21 + tests/weak_set/CMakeLists.txt | 17 + tests/weak_set/test_weakset.cpp | 77 + tests/weak_set/weakset_test.cpp | 62 + tests/weak_set/weakset_test.h | 27 + translations/.gitignore | 1 + translations/CMakeLists.txt | 21 + translations/cs.po | 752 ++ translations/fr.po | 746 ++ 874 files changed, 109221 insertions(+) create mode 100644 .gitignore create mode 100644 .kateconfig create mode 100644 AUTHORS create mode 100644 CHANGELOG create mode 100644 CMakeLists.txt create mode 100644 COPYING create mode 100644 INSTALL create mode 100644 README create mode 100644 RELEASE create mode 100644 TODO create mode 100644 TODO_Maurizio create mode 100644 TODO_Riccardo create mode 100644 TODO_shogi create mode 100755 add_variant.rb create mode 100644 cmake/FindCPPUNIT.cmake create mode 100644 cmake/Tagua.cmake create mode 100644 data/.gitignore create mode 100644 data/CMakeLists.txt create mode 100644 data/highlighting/.gitignore create mode 100644 data/highlighting/CMakeLists.txt create mode 100644 data/highlighting/highlighting.lua create mode 100644 data/pics/.gitignore create mode 100644 data/pics/CMakeLists.txt create mode 100644 data/pics/promoteBishop.png create mode 100644 data/pics/promoteKing.png create mode 100644 data/pics/promoteKnight.png create mode 100644 data/pics/promoteQueen.png create mode 100644 data/pics/promoteRook.png create mode 100644 data/piece_icons/.gitignore create mode 100644 data/piece_icons/CMakeLists.txt create mode 100644 data/piece_icons/b.png create mode 100644 data/piece_icons/k.png create mode 100644 data/piece_icons/n.png create mode 100644 data/piece_icons/p.png create mode 100644 data/piece_icons/q.png create mode 100644 data/piece_icons/r.png create mode 100644 data/scripts/.gitignore create mode 100644 data/scripts/CMakeLists.txt create mode 100644 data/scripts/hllib.lua create mode 100644 data/scripts/movelist_textual.html create mode 100644 data/scripts/piece_theme.lua create mode 100644 data/scripts/shogi_themelib.lua create mode 100644 data/themes/.gitignore create mode 100644 data/themes/CMakeLists.txt create mode 100644 data/themes/controls/Cool/active_clock.svg create mode 100644 data/themes/controls/Cool/border_corner.svg create mode 100644 data/themes/controls/Cool/border_top.svg create mode 100644 data/themes/controls/Cool/inactive_clock.svg create mode 100644 data/themes/controls/Cool/theme.desktop create mode 100644 data/themes/controls/Cool/theme.lua create mode 100644 data/themes/controls/Google/active_clock.svg create mode 100644 data/themes/controls/Google/border_corner.svg create mode 100644 data/themes/controls/Google/border_top.svg create mode 100644 data/themes/controls/Google/inactive_clock.svg create mode 100644 data/themes/controls/Google/theme_google.desktop create mode 100644 data/themes/controls/Google/theme_google.lua create mode 100644 data/themes/controls/XBoard/theme_xboard.desktop create mode 100644 data/themes/controls/XBoard/theme_xboard.lua create mode 100644 data/themes/figurines/AlphaTTF/theme.desktop create mode 100644 data/themes/figurines/AlphaTTF/theme.lua create mode 100644 data/themes/figurines/AsciiShogiTTF/theme.desktop create mode 100644 data/themes/figurines/AsciiShogiTTF/theme.lua create mode 100644 data/themes/figurines/FantasyTTF/Fantasy.sfd create mode 100644 data/themes/figurines/FantasyTTF/Fantasy.ttf create mode 100644 data/themes/figurines/FantasyTTF/theme.desktop create mode 100644 data/themes/figurines/FantasyTTF/theme.lua create mode 100644 data/themes/figurines/ShogiTTF/mikachan.ttf create mode 100644 data/themes/figurines/ShogiTTF/theme.desktop create mode 100644 data/themes/figurines/ShogiTTF/theme.lua create mode 100644 data/themes/figurines/XiangQi/theme.desktop create mode 100644 data/themes/figurines/XiangQi/theme.lua create mode 100644 data/themes/figurines/XiangQi/ukai.ttf create mode 100644 data/themes/pieces/AlphaTTF/Alpha.ttf create mode 100644 data/themes/pieces/AlphaTTF/gradient darkgrey.bmp create mode 100644 data/themes/pieces/AlphaTTF/gradient lightgrey.bmp create mode 100644 data/themes/pieces/AlphaTTF/theme_babaschess.desktop create mode 100644 data/themes/pieces/AlphaTTF/theme_babaschess.lua create mode 100644 data/themes/pieces/AlphaTTF/theme_eboard.desktop create mode 100644 data/themes/pieces/AlphaTTF/theme_eboard.lua create mode 100644 data/themes/pieces/AlphaTTF/theme_jose.desktop create mode 100644 data/themes/pieces/AlphaTTF/theme_jose.lua create mode 100644 data/themes/pieces/BerlinTTF/Berlin.ttf create mode 100644 data/themes/pieces/BerlinTTF/theme_jose.desktop create mode 100644 data/themes/pieces/BerlinTTF/theme_jose.lua create mode 100644 data/themes/pieces/EnquilTTF/Enquil.sfd create mode 100644 data/themes/pieces/EnquilTTF/Enquil.ttf create mode 100644 data/themes/pieces/EnquilTTF/theme_eboard.desktop create mode 100644 data/themes/pieces/EnquilTTF/theme_eboard.lua create mode 100644 data/themes/pieces/FantasySVG/bb.svg create mode 100644 data/themes/pieces/FantasySVG/bd.svg create mode 100644 data/themes/pieces/FantasySVG/bg.svg create mode 100644 data/themes/pieces/FantasySVG/bh.svg create mode 100644 data/themes/pieces/FantasySVG/bk.svg create mode 100644 data/themes/pieces/FantasySVG/bl.svg create mode 100644 data/themes/pieces/FantasySVG/bn.svg create mode 100644 data/themes/pieces/FantasySVG/bp.svg create mode 100644 data/themes/pieces/FantasySVG/bq.svg create mode 100644 data/themes/pieces/FantasySVG/br.svg create mode 100644 data/themes/pieces/FantasySVG/bs.svg create mode 100644 data/themes/pieces/FantasySVG/theme.desktop create mode 100644 data/themes/pieces/FantasySVG/theme.lua create mode 100644 data/themes/pieces/FantasySVG/wb.svg create mode 100644 data/themes/pieces/FantasySVG/wd.svg create mode 100644 data/themes/pieces/FantasySVG/wg.svg create mode 100644 data/themes/pieces/FantasySVG/wh.svg create mode 100644 data/themes/pieces/FantasySVG/wk.svg create mode 100644 data/themes/pieces/FantasySVG/wl.svg create mode 100644 data/themes/pieces/FantasySVG/wn.svg create mode 100644 data/themes/pieces/FantasySVG/wp.svg create mode 100644 data/themes/pieces/FantasySVG/wq.svg create mode 100644 data/themes/pieces/FantasySVG/wr.svg create mode 100644 data/themes/pieces/FantasySVG/ws.svg create mode 100644 data/themes/pieces/LucenaTTF/Lucena.ttf create mode 100644 data/themes/pieces/LucenaTTF/theme_jose.desktop create mode 100644 data/themes/pieces/LucenaTTF/theme_jose.lua create mode 100644 data/themes/pieces/MayanTTF/Mayan.ttf create mode 100644 data/themes/pieces/MayanTTF/theme_eboard.desktop create mode 100644 data/themes/pieces/MayanTTF/theme_eboard.lua create mode 100644 data/themes/pieces/MayanTTF/theme_jose.desktop create mode 100644 data/themes/pieces/MayanTTF/theme_jose.lua create mode 100644 data/themes/pieces/PrmiSVG/bb.svg create mode 100644 data/themes/pieces/PrmiSVG/bk.svg create mode 100644 data/themes/pieces/PrmiSVG/bn.svg create mode 100644 data/themes/pieces/PrmiSVG/bp.svg create mode 100644 data/themes/pieces/PrmiSVG/bq.svg create mode 100644 data/themes/pieces/PrmiSVG/br.svg create mode 100644 data/themes/pieces/PrmiSVG/theme.desktop create mode 100644 data/themes/pieces/PrmiSVG/theme.lua create mode 100644 data/themes/pieces/PrmiSVG/wb.svg create mode 100644 data/themes/pieces/PrmiSVG/wk.svg create mode 100644 data/themes/pieces/PrmiSVG/wn.svg create mode 100644 data/themes/pieces/PrmiSVG/wp.svg create mode 100644 data/themes/pieces/PrmiSVG/wq.svg create mode 100644 data/themes/pieces/PrmiSVG/wr.svg create mode 100644 data/themes/pieces/ShogiSVG-TTF/Shogi.sfd create mode 100644 data/themes/pieces/ShogiSVG-TTF/Shogi.ttf create mode 100644 data/themes/pieces/ShogiSVG-TTF/theme.desktop create mode 100644 data/themes/pieces/ShogiSVG-TTF/theme.lua create mode 100644 data/themes/pieces/ShogiSVG/default/bishop.svg create mode 100644 data/themes/pieces/ShogiSVG/default/example.svg create mode 100644 data/themes/pieces/ShogiSVG/default/gold.svg create mode 100644 data/themes/pieces/ShogiSVG/default/horse.svg create mode 100644 data/themes/pieces/ShogiSVG/default/king.svg create mode 100644 data/themes/pieces/ShogiSVG/default/lance.svg create mode 100644 data/themes/pieces/ShogiSVG/default/nude_tile.svg create mode 100644 data/themes/pieces/ShogiSVG/default/pawn.svg create mode 100644 data/themes/pieces/ShogiSVG/default/pbishop.svg create mode 100644 data/themes/pieces/ShogiSVG/default/phorse.svg create mode 100644 data/themes/pieces/ShogiSVG/default/plance.svg create mode 100644 data/themes/pieces/ShogiSVG/default/ppawn.svg create mode 100644 data/themes/pieces/ShogiSVG/default/prook.svg create mode 100644 data/themes/pieces/ShogiSVG/default/psilver.svg create mode 100644 data/themes/pieces/ShogiSVG/default/rook.svg create mode 100644 data/themes/pieces/ShogiSVG/default/silver.svg create mode 100644 data/themes/pieces/ShogiSVG/default/tile.svg create mode 100644 data/themes/pieces/ShogiSVG/theme.desktop create mode 100644 data/themes/pieces/ShogiSVG/theme.lua create mode 100644 data/themes/pieces/ShogiTTF/theme.desktop create mode 100644 data/themes/pieces/ShogiTTF/theme.lua create mode 100644 data/themes/pieces/SkullsSVG/bb.svg create mode 100644 data/themes/pieces/SkullsSVG/bk.svg create mode 100644 data/themes/pieces/SkullsSVG/bn.svg create mode 100644 data/themes/pieces/SkullsSVG/bp.svg create mode 100644 data/themes/pieces/SkullsSVG/bq.svg create mode 100644 data/themes/pieces/SkullsSVG/br.svg create mode 100644 data/themes/pieces/SkullsSVG/theme.desktop create mode 100644 data/themes/pieces/SkullsSVG/theme.lua create mode 100644 data/themes/pieces/SkullsSVG/wb.svg create mode 100644 data/themes/pieces/SkullsSVG/wk.svg create mode 100644 data/themes/pieces/SkullsSVG/wn.svg create mode 100644 data/themes/pieces/SkullsSVG/wp.svg create mode 100644 data/themes/pieces/SkullsSVG/wq.svg create mode 100644 data/themes/pieces/SkullsSVG/wr.svg create mode 100644 data/themes/pieces/SpatialSVG/bb.svg create mode 100644 data/themes/pieces/SpatialSVG/bk.svg create mode 100644 data/themes/pieces/SpatialSVG/bn.svg create mode 100644 data/themes/pieces/SpatialSVG/bp.svg create mode 100644 data/themes/pieces/SpatialSVG/bq.svg create mode 100644 data/themes/pieces/SpatialSVG/br.svg create mode 100644 data/themes/pieces/SpatialSVG/theme.desktop create mode 100644 data/themes/pieces/SpatialSVG/theme.lua create mode 100644 data/themes/pieces/SpatialSVG/wb.svg create mode 100644 data/themes/pieces/SpatialSVG/wk.svg create mode 100644 data/themes/pieces/SpatialSVG/wn.svg create mode 100644 data/themes/pieces/SpatialSVG/wp.svg create mode 100644 data/themes/pieces/SpatialSVG/wq.svg create mode 100644 data/themes/pieces/SpatialSVG/wr.svg create mode 100644 data/themes/pieces/StonesSVG/black.svg create mode 100644 data/themes/pieces/StonesSVG/blue.svg create mode 100644 data/themes/pieces/StonesSVG/blue_add.svg create mode 100644 data/themes/pieces/StonesSVG/green.svg create mode 100644 data/themes/pieces/StonesSVG/grey.svg create mode 100644 data/themes/pieces/StonesSVG/orange.svg create mode 100644 data/themes/pieces/StonesSVG/red.svg create mode 100644 data/themes/pieces/StonesSVG/red_add.svg create mode 100644 data/themes/pieces/StonesSVG/theme_chainreaction.desktop create mode 100644 data/themes/pieces/StonesSVG/theme_chainreaction.lua create mode 100644 data/themes/pieces/StonesSVG/theme_rs.desktop create mode 100644 data/themes/pieces/StonesSVG/theme_rs.lua create mode 100644 data/themes/pieces/StonesSVG/theme_ry.desktop create mode 100644 data/themes/pieces/StonesSVG/theme_ry.lua create mode 100644 data/themes/pieces/StonesSVG/theme_wb.desktop create mode 100644 data/themes/pieces/StonesSVG/theme_wb.lua create mode 100644 data/themes/pieces/StonesSVG/violet.svg create mode 100644 data/themes/pieces/StonesSVG/white.svg create mode 100644 data/themes/pieces/StonesSVG/yellow.svg create mode 100644 data/themes/pieces/ToriShogiTTF/theme.desktop create mode 100644 data/themes/pieces/ToriShogiTTF/theme.lua create mode 100644 data/themes/pieces/XBoardTTF/XBoard.sfd create mode 100644 data/themes/pieces/XBoardTTF/XBoard.ttf create mode 100644 data/themes/pieces/XBoardTTF/theme_jose.desktop create mode 100644 data/themes/pieces/XBoardTTF/theme_jose.lua create mode 100644 data/themes/pieces/XBoardTTF/theme_xboard.desktop create mode 100644 data/themes/pieces/XBoardTTF/theme_xboard.lua create mode 100644 data/themes/pieces/XiangQiSVG/black_advisor.svg create mode 100644 data/themes/pieces/XiangQiSVG/black_cannon.svg create mode 100644 data/themes/pieces/XiangQiSVG/black_chariot.svg create mode 100644 data/themes/pieces/XiangQiSVG/black_elephant.svg create mode 100644 data/themes/pieces/XiangQiSVG/black_general.svg create mode 100644 data/themes/pieces/XiangQiSVG/black_horse.svg create mode 100644 data/themes/pieces/XiangQiSVG/black_soldier.svg create mode 100644 data/themes/pieces/XiangQiSVG/circle.svg create mode 100644 data/themes/pieces/XiangQiSVG/inner_circle.svg create mode 100644 data/themes/pieces/XiangQiSVG/red_advisor.svg create mode 100644 data/themes/pieces/XiangQiSVG/red_cannon.svg create mode 100644 data/themes/pieces/XiangQiSVG/red_chariot.svg create mode 100644 data/themes/pieces/XiangQiSVG/red_elephant.svg create mode 100644 data/themes/pieces/XiangQiSVG/red_general.svg create mode 100644 data/themes/pieces/XiangQiSVG/red_horse.svg create mode 100644 data/themes/pieces/XiangQiSVG/red_soldier.svg create mode 100644 data/themes/pieces/XiangQiTTF/XiangQi.sfd create mode 100644 data/themes/pieces/XiangQiTTF/XiangQi.ttf create mode 100644 data/themes/pieces/XiangQiTTF/theme.desktop create mode 100644 data/themes/pieces/XiangQiTTF/theme.lua create mode 100644 data/themes/pieces/YahooTTF/Yahoo.sfd create mode 100644 data/themes/pieces/YahooTTF/Yahoo.ttf create mode 100644 data/themes/pieces/YahooTTF/theme.desktop create mode 100644 data/themes/pieces/YahooTTF/theme.lua create mode 100644 data/themes/squares/Default/arrow_grey.svg create mode 100644 data/themes/squares/Default/arrow_yellow.svg create mode 100644 data/themes/squares/Default/selection.lua create mode 100644 data/themes/squares/Default/spiral.svg create mode 100644 data/themes/squares/Default/theme.desktop create mode 100644 data/themes/squares/Default/theme.lua create mode 100644 data/themes/squares/Default/theme_babaschess.desktop create mode 100644 data/themes/squares/Default/theme_babaschess.lua create mode 100644 data/themes/squares/Default/theme_chainreaction.desktop create mode 100644 data/themes/squares/Default/theme_chainreaction.lua create mode 100644 data/themes/squares/Default/theme_connect4.desktop create mode 100644 data/themes/squares/Default/theme_connect4.lua create mode 100644 data/themes/squares/Default/theme_reversi.desktop create mode 100644 data/themes/squares/Default/theme_reversi.lua create mode 100644 data/themes/squares/Default/theme_shogi.desktop create mode 100644 data/themes/squares/Default/theme_shogi.lua create mode 100644 data/themes/squares/Default/theme_solid.desktop create mode 100644 data/themes/squares/Default/theme_solid.lua create mode 100644 data/themes/squares/Default/theme_xboard.desktop create mode 100644 data/themes/squares/Default/theme_xboard.lua create mode 100644 data/themes/squares/Default/theme_xiangqi.desktop create mode 100644 data/themes/squares/Default/theme_xiangqi.lua create mode 100644 data/themes/squares/Default/theme_yahoo.desktop create mode 100644 data/themes/squares/Default/theme_yahoo.lua create mode 100644 data/themes/squares/Jose/marble04.jpg create mode 100644 data/themes/squares/Jose/marble13.jpg create mode 100644 data/themes/squares/Jose/square_last.png create mode 100644 data/themes/squares/Jose/square_premove.png create mode 100644 data/themes/squares/Jose/square_select.png create mode 100644 data/themes/squares/Jose/theme_jose.desktop create mode 100644 data/themes/squares/Jose/theme_jose.lua create mode 100644 data/themes/wallpapers/Buda_and_Pest.jpg create mode 100644 data/themes/wallpapers/Dark_Sunset.jpg create mode 100644 data/themes/wallpapers/Dark_Waters.jpg create mode 100644 data/themes/wallpapers/Fiord.jpg create mode 100644 data/themes/wallpapers/Mont_Blanc.jpg create mode 100644 data/themes/wallpapers/Old_Curtains.jpg create mode 100644 data/themes/wallpapers/Paris_by_Night.jpg create mode 100644 data/themes/wallpapers/Prmao.jpg create mode 100644 data/themes/wallpapers/README create mode 100644 data/themes/wallpapers/San_Diego.jpg create mode 100644 debian/.gitignore create mode 100644 debian/README.Debian create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/docs create mode 100644 debian/menu create mode 100755 debian/rules create mode 100644 debian/tagua-data.files create mode 100644 debian/tagua-variant-chess.files create mode 100644 debian/tagua-variant-chess5x5.files create mode 100644 debian/tagua-variant-crazyhouse.files create mode 100644 debian/tagua-variant-minishogi.files create mode 100644 debian/tagua-variant-shogi.files create mode 100644 debian/tagua.files create mode 100644 debian/watch create mode 100644 doc/engine-intf.html create mode 100644 doc/uci-engine-interface.txt create mode 100644 doc/xboard-ics-parsing.txt create mode 100755 extract-messages.sh create mode 100755 fix_copyright.rb create mode 100644 lua/.gitignore create mode 100644 lua/CMakeLists.txt create mode 100644 lua/COPYRIGHT create mode 100644 lua/HISTORY create mode 100644 lua/INSTALL create mode 100644 lua/README create mode 100644 lua/doc/amazon.gif create mode 100644 lua/doc/contents.html create mode 100644 lua/doc/cover.png create mode 100644 lua/doc/logo.gif create mode 100644 lua/doc/lua.1 create mode 100644 lua/doc/lua.css create mode 100644 lua/doc/lua.html create mode 100644 lua/doc/luac.1 create mode 100644 lua/doc/luac.html create mode 100644 lua/doc/manual.css create mode 100644 lua/doc/manual.html create mode 100644 lua/doc/readme.html create mode 100644 lua/etc/Makefile create mode 100644 lua/etc/README create mode 100644 lua/etc/all.c create mode 100644 lua/etc/lua.hpp create mode 100644 lua/etc/lua.ico create mode 100644 lua/etc/lua.pc create mode 100644 lua/etc/luavs.bat create mode 100644 lua/etc/min.c create mode 100644 lua/etc/noparser.c create mode 100644 lua/etc/strict.lua create mode 100644 lua/src/Makefile create mode 100644 lua/src/lapi.c create mode 100644 lua/src/lapi.h create mode 100644 lua/src/lauxlib.c create mode 100644 lua/src/lauxlib.h create mode 100644 lua/src/lbaselib.c create mode 100644 lua/src/lcode.c create mode 100644 lua/src/lcode.h create mode 100644 lua/src/ldblib.c create mode 100644 lua/src/ldebug.c create mode 100644 lua/src/ldebug.h create mode 100644 lua/src/ldo.c create mode 100644 lua/src/ldo.h create mode 100644 lua/src/ldump.c create mode 100644 lua/src/lfunc.c create mode 100644 lua/src/lfunc.h create mode 100644 lua/src/lgc.c create mode 100644 lua/src/lgc.h create mode 100644 lua/src/linit.c create mode 100644 lua/src/liolib.c create mode 100644 lua/src/llex.c create mode 100644 lua/src/llex.h create mode 100644 lua/src/llimits.h create mode 100644 lua/src/lmathlib.c create mode 100644 lua/src/lmem.c create mode 100644 lua/src/lmem.h create mode 100644 lua/src/loadlib.c create mode 100644 lua/src/lobject.c create mode 100644 lua/src/lobject.h create mode 100644 lua/src/lopcodes.c create mode 100644 lua/src/lopcodes.h create mode 100644 lua/src/loslib.c create mode 100644 lua/src/lparser.c create mode 100644 lua/src/lparser.h create mode 100644 lua/src/lstate.c create mode 100644 lua/src/lstate.h create mode 100644 lua/src/lstring.c create mode 100644 lua/src/lstring.h create mode 100644 lua/src/lstrlib.c create mode 100644 lua/src/ltable.c create mode 100644 lua/src/ltable.h create mode 100644 lua/src/ltablib.c create mode 100644 lua/src/ltm.c create mode 100644 lua/src/ltm.h create mode 100644 lua/src/lua.c create mode 100644 lua/src/lua.h create mode 100644 lua/src/luac.c create mode 100644 lua/src/luaconf.h create mode 100644 lua/src/lualib.h create mode 100644 lua/src/lundump.c create mode 100644 lua/src/lundump.h create mode 100644 lua/src/lvm.c create mode 100644 lua/src/lvm.h create mode 100644 lua/src/lzio.c create mode 100644 lua/src/lzio.h create mode 100644 lua/src/print.c create mode 100644 lua/test/README create mode 100644 lua/test/bisect.lua create mode 100644 lua/test/cf.lua create mode 100644 lua/test/echo.lua create mode 100644 lua/test/env.lua create mode 100644 lua/test/factorial.lua create mode 100644 lua/test/fib.lua create mode 100644 lua/test/fibfor.lua create mode 100644 lua/test/globals.lua create mode 100644 lua/test/hello.lua create mode 100644 lua/test/life.lua create mode 100644 lua/test/luac.lua create mode 100644 lua/test/printf.lua create mode 100644 lua/test/readonly.lua create mode 100644 lua/test/sieve.lua create mode 100644 lua/test/sort.lua create mode 100644 lua/test/table.lua create mode 100644 lua/test/trace-calls.lua create mode 100644 lua/test/trace-globals.lua create mode 100644 lua/test/xd.lua create mode 100644 src/.gitignore create mode 100644 src/CMakeLists.txt create mode 100644 src/Doxyfile create mode 100644 src/actioncollection.cpp create mode 100644 src/actioncollection.h create mode 100644 src/agent.h create mode 100644 src/agentgroup.cpp create mode 100644 src/agentgroup.h create mode 100644 src/animation.cpp create mode 100644 src/animation.h create mode 100644 src/animationmanager.cpp create mode 100644 src/animationmanager.h create mode 100644 src/chessboard.cpp create mode 100644 src/chessboard.h create mode 100644 src/chesstable.cpp create mode 100644 src/chesstable.h create mode 100644 src/clickablecanvas.h create mode 100644 src/clock.cpp create mode 100644 src/clock.h create mode 100644 src/common.cpp create mode 100644 src/common.h create mode 100644 src/components.cpp create mode 100644 src/components.h create mode 100644 src/config.xsd create mode 100644 src/connection.cpp create mode 100644 src/connection.h create mode 100644 src/console.cpp create mode 100644 src/console.h create mode 100644 src/console_p.h create mode 100644 src/constrainedtext.cpp create mode 100644 src/constrainedtext.h create mode 100644 src/controllers/abstract.cpp create mode 100644 src/controllers/abstract.h create mode 100644 src/controllers/editgame.cpp create mode 100644 src/controllers/editgame.h create mode 100644 src/controllers/editposition.cpp create mode 100644 src/controllers/editposition.h create mode 100644 src/controllers/entitytoken.cpp create mode 100644 src/controllers/entitytoken.h create mode 100644 src/core/CMakeLists.txt create mode 100644 src/core/animation.cpp create mode 100644 src/core/animation.h create mode 100644 src/core/animation_fwd.h create mode 100644 src/core/animator.cpp create mode 100644 src/core/animator.h create mode 100644 src/core/baseanimator.cpp create mode 100644 src/core/baseanimator.h create mode 100644 src/core/behaviour.cpp create mode 100644 src/core/behaviour.h create mode 100644 src/core/board.cpp create mode 100644 src/core/board.h create mode 100644 src/core/color.cpp create mode 100644 src/core/color.h create mode 100644 src/core/common.h create mode 100644 src/core/component.cpp create mode 100644 src/core/component.h create mode 100644 src/core/component_fwd.h create mode 100644 src/core/defaultpolicy.cpp create mode 100644 src/core/defaultpolicy.h create mode 100644 src/core/defaultpool.cpp create mode 100644 src/core/defaultpool.h create mode 100644 src/core/defaultpoolcollection.cpp create mode 100644 src/core/defaultpoolcollection.h create mode 100644 src/core/defaultstate.cpp create mode 100644 src/core/defaultstate.h create mode 100644 src/core/defaulttype.cpp create mode 100644 src/core/defaulttype.h create mode 100644 src/core/delegators/behaviour.h create mode 100644 src/core/delegators/defaultstate.h create mode 100644 src/core/delegators/moveserializer.h create mode 100644 src/core/delegators/state.h create mode 100644 src/core/delegators/validator.h create mode 100644 src/core/dropanimator.cpp create mode 100644 src/core/dropanimator.h create mode 100644 src/core/export.h create mode 100644 src/core/interactiontype.h create mode 100644 src/core/move.cpp create mode 100644 src/core/move.h create mode 100644 src/core/moveserializer.cpp create mode 100644 src/core/moveserializer.h create mode 100644 src/core/namedsprite.cpp create mode 100644 src/core/namedsprite.h create mode 100644 src/core/namer.cpp create mode 100644 src/core/namer.h create mode 100644 src/core/pathinfo.cpp create mode 100644 src/core/pathinfo.h create mode 100644 src/core/piece.cpp create mode 100644 src/core/piece.h create mode 100644 src/core/point.cpp create mode 100644 src/core/point.h create mode 100644 src/core/policy.cpp create mode 100644 src/core/policy.h create mode 100644 src/core/pool.cpp create mode 100644 src/core/pool.h create mode 100644 src/core/poolcollection.cpp create mode 100644 src/core/poolcollection.h create mode 100644 src/core/poolcollection_fwd.h create mode 100644 src/core/promotionmanager.cpp create mode 100644 src/core/promotionmanager.h create mode 100644 src/core/repository.cpp create mode 100644 src/core/repository.h create mode 100644 src/core/state.cpp create mode 100644 src/core/state.h create mode 100644 src/core/state_fwd.h create mode 100644 src/core/statefactory.cpp create mode 100644 src/core/statefactory.h create mode 100644 src/core/tagua-variant.desktop create mode 100644 src/core/taguaapi.cpp create mode 100644 src/core/taguaapi.h create mode 100644 src/core/taguacast.h create mode 100644 src/core/taguaobject.cpp create mode 100644 src/core/taguaobject.h create mode 100644 src/core/turnpolicy.cpp create mode 100644 src/core/turnpolicy.h create mode 100644 src/core/type.cpp create mode 100644 src/core/type.h create mode 100644 src/core/validator.cpp create mode 100644 src/core/validator.h create mode 100644 src/core/variantloader.cpp create mode 100644 src/core/variantloader.h create mode 100644 src/crash.cpp create mode 100644 src/crash.h create mode 100644 src/decoratedmove.cpp create mode 100644 src/decoratedmove.h create mode 100644 src/doxy/.gitignore create mode 100644 src/doxy/bottom1.png create mode 100644 src/doxy/bottom2.png create mode 100644 src/doxy/docheadergears.png create mode 100644 src/doxy/doxygen.css create mode 100644 src/doxy/footer.html create mode 100644 src/doxy/grad.png create mode 100644 src/doxy/header.html create mode 100644 src/doxy/headerbg.png create mode 100644 src/doxy/logo.png create mode 100644 src/engine.cpp create mode 100644 src/engine.h create mode 100644 src/engineinfo.cpp create mode 100644 src/engineinfo.h create mode 100644 src/enginenotifier.h create mode 100644 src/entities/engineentity.cpp create mode 100644 src/entities/engineentity.h create mode 100644 src/entities/entity.cpp create mode 100644 src/entities/entity.h create mode 100644 src/entities/examinationentity.cpp create mode 100644 src/entities/examinationentity.h create mode 100644 src/entities/gameentity.cpp create mode 100644 src/entities/gameentity.h create mode 100644 src/entities/icsentity.cpp create mode 100644 src/entities/icsentity.h create mode 100644 src/entities/userentity.cpp create mode 100644 src/entities/userentity.h create mode 100644 src/export.h create mode 100644 src/flash.cpp create mode 100644 src/flash.h create mode 100644 src/foreach.h create mode 100644 src/game.cpp create mode 100644 src/game.h create mode 100644 src/game_fwd.h create mode 100644 src/game_p.h create mode 100644 src/gameinfo.cpp create mode 100644 src/gameinfo.h create mode 100644 src/genericposition.h create mode 100644 src/gnushogiengine.cpp create mode 100644 src/gnushogiengine.h create mode 100644 src/graphicalgame.cpp create mode 100644 src/graphicalgame.h create mode 100644 src/graphicalsystem.cpp create mode 100644 src/graphicalsystem.h create mode 100644 src/grid.h create mode 100644 src/highlighter.h create mode 100644 src/histlineedit.cpp create mode 100644 src/histlineedit.h create mode 100644 src/hline.cpp create mode 100644 src/hline.h create mode 100644 src/icsaction.h create mode 100644 src/icsapi.h create mode 100644 src/icsapi.impl.h create mode 100644 src/icsapi_fwd.h create mode 100644 src/icsconnection.cpp create mode 100644 src/icsconnection.h create mode 100644 src/icsgamedata.cpp create mode 100644 src/icsgamedata.h create mode 100644 src/icslistener.h create mode 100644 src/imageeffects.cpp create mode 100644 src/imageeffects.h create mode 100644 src/imageeffects_mmx.cpp create mode 100644 src/imageeffects_sse.cpp create mode 100644 src/index.cpp create mode 100644 src/index.h create mode 100644 src/indexconverter.h create mode 100644 src/infodisplay.cpp create mode 100644 src/infodisplay.h create mode 100644 src/loader/context.cpp create mode 100644 src/loader/context.h create mode 100644 src/loader/image.cpp create mode 100644 src/loader/image.h create mode 100644 src/loader/theme.cpp create mode 100644 src/loader/theme.h create mode 100644 src/location.cpp create mode 100644 src/location.h create mode 100644 src/luaapi/genericwrapper.cpp create mode 100644 src/luaapi/genericwrapper.h create mode 100644 src/luaapi/imaging.cpp create mode 100644 src/luaapi/imaging.h create mode 100644 src/luaapi/lfunclib.c create mode 100644 src/luaapi/lfunclib.h create mode 100644 src/luaapi/loader.cpp create mode 100644 src/luaapi/loader.h create mode 100644 src/luaapi/luahl.cpp create mode 100644 src/luaapi/luahl.h create mode 100644 src/luaapi/luavalue.cpp create mode 100644 src/luaapi/luavalue.h create mode 100644 src/luaapi/options.cpp create mode 100644 src/luaapi/options.h create mode 100644 src/main.cpp create mode 100644 src/mainanimation.cpp create mode 100644 src/mainanimation.h create mode 100644 src/mainwindow.cpp create mode 100644 src/mainwindow.h create mode 100644 src/mastersettings.cpp create mode 100644 src/mastersettings.h create mode 100644 src/movefactory.h create mode 100644 src/movelist.cpp create mode 100644 src/movelist_notifier.h create mode 100644 src/movelist_p.h create mode 100644 src/movelist_table.cpp create mode 100644 src/movelist_table.h create mode 100644 src/movelist_textual.cpp create mode 100644 src/movelist_textual.h create mode 100644 src/movelist_widget.cpp create mode 100644 src/movelist_widget.h create mode 100644 src/movement.cpp create mode 100644 src/movement.h create mode 100644 src/namedsprite_utils.cpp create mode 100644 src/namedsprite_utils.h create mode 100644 src/newgame.cpp create mode 100644 src/newgame.h create mode 100644 src/nopool.h create mode 100644 src/option.cpp create mode 100644 src/option.h create mode 100644 src/option_p.cpp create mode 100644 src/option_p.h create mode 100644 src/pgnparser.cpp create mode 100644 src/pgnparser.h create mode 100644 src/piecefactory.h create mode 100644 src/piecefunction.h create mode 100644 src/piecegrid.h create mode 100644 src/piecepool.cpp create mode 100644 src/piecepool.h create mode 100644 src/pixmaploader.cpp create mode 100644 src/pixmaploader.h create mode 100644 src/player.h create mode 100644 src/pointconverter.h create mode 100644 src/poolinfo.cpp create mode 100644 src/poolinfo.h create mode 100644 src/positioninfo.cpp create mode 100644 src/positioninfo.h create mode 100644 src/pref_board.cpp create mode 100644 src/pref_board.h create mode 100644 src/pref_engines.cpp create mode 100644 src/pref_engines.h create mode 100644 src/pref_highlight.h create mode 100644 src/pref_movelist.cpp create mode 100644 src/pref_movelist.h create mode 100644 src/pref_preferences.cpp create mode 100644 src/pref_preferences.h create mode 100644 src/pref_theme.cpp create mode 100644 src/pref_theme.h create mode 100644 src/qconnect.cpp create mode 100644 src/qconnect.h create mode 100644 src/random.cpp create mode 100644 src/random.h create mode 100644 src/rubyutils.h create mode 100644 src/serverinfo.h create mode 100644 src/serverreference.h create mode 100644 src/settings.cpp create mode 100644 src/settings.h create mode 100644 src/sprite.cpp create mode 100644 src/sprite.h create mode 100644 src/tabwidget.cpp create mode 100644 src/tabwidget.h create mode 100644 src/tagua.desktop create mode 100644 src/tagua.lsm create mode 100644 src/tagua_it.ts create mode 100644 src/taguaui.rc create mode 100644 src/themeinfo.cpp create mode 100644 src/themeinfo.h create mode 100644 src/ui.cpp create mode 100644 src/ui.h create mode 100644 src/ui/gametags.ui create mode 100644 src/ui/newgamedialog.ui create mode 100644 src/ui/pref_board.ui create mode 100644 src/ui/pref_engines.ui create mode 100644 src/ui/pref_highlight.ui create mode 100644 src/ui/pref_movelist.ui create mode 100644 src/ui/pref_theme.ui create mode 100644 src/ui/pref_theme_page.ui create mode 100644 src/ui/preferences.ui create mode 100644 src/ui/quickconnect.ui create mode 100644 src/usermove.h create mode 100644 src/variant.cpp create mode 100644 src/variant.h create mode 100644 src/variants.cpp create mode 100644 src/variants.h create mode 100644 src/variants/CMakeLists.txt create mode 100644 src/variants/chess/CMakeLists.txt create mode 100644 src/variants/chess/animator.cpp create mode 100644 src/variants/chess/animator.h create mode 100644 src/variants/chess/behaviour.cpp create mode 100644 src/variants/chess/behaviour.h create mode 100644 src/variants/chess/bishop.cpp create mode 100644 src/variants/chess/bishop.h create mode 100644 src/variants/chess/castlingrules.cpp create mode 100644 src/variants/chess/castlingrules.h create mode 100644 src/variants/chess/chess.cpp create mode 100644 src/variants/chess/colors.cpp create mode 100644 src/variants/chess/colors.h create mode 100644 src/variants/chess/icsverbose.cpp create mode 100644 src/variants/chess/icsverbose.h create mode 100644 src/variants/chess/king.cpp create mode 100644 src/variants/chess/king.h create mode 100644 src/variants/chess/knight.cpp create mode 100644 src/variants/chess/knight.h create mode 100644 src/variants/chess/moveserializer.cpp create mode 100644 src/variants/chess/moveserializer.h create mode 100644 src/variants/chess/namer.cpp create mode 100644 src/variants/chess/namer.h create mode 100644 src/variants/chess/pawn.cpp create mode 100644 src/variants/chess/pawn.h create mode 100644 src/variants/chess/queen.cpp create mode 100644 src/variants/chess/queen.h create mode 100644 src/variants/chess/rook.cpp create mode 100644 src/variants/chess/rook.h create mode 100644 src/variants/chess/san.cpp create mode 100644 src/variants/chess/san.h create mode 100644 src/variants/chess/state.cpp create mode 100644 src/variants/chess/state.h create mode 100644 src/variants/chess/tagua-chess.desktop create mode 100644 src/variants/chess/types.h create mode 100644 src/variants/chess/validator.cpp create mode 100644 src/variants/chess/validator.h create mode 100644 src/variants/chess5x5/CMakeLists.txt create mode 100644 src/variants/chess5x5/chess5x5.cpp create mode 100644 src/variants/chess5x5/chess5x5.cs create mode 100644 src/variants/chess5x5/chess5x5.java create mode 100644 src/variants/chess5x5/chess5x5.py create mode 100644 src/variants/chess5x5/chess5x5.rb create mode 100644 src/variants/chess5x5/tagua-chess5x5.desktop create mode 100644 src/variants/crazyhouse/CMakeLists.txt create mode 100644 src/variants/crazyhouse/animator.cpp create mode 100644 src/variants/crazyhouse/animator.h create mode 100644 src/variants/crazyhouse/behaviour.cpp create mode 100644 src/variants/crazyhouse/behaviour.h create mode 100644 src/variants/crazyhouse/crazyhouse.cpp create mode 100644 src/variants/crazyhouse/crazyhouse.rb create mode 100644 src/variants/crazyhouse/global.h create mode 100644 src/variants/crazyhouse/moveserializer.cpp create mode 100644 src/variants/crazyhouse/moveserializer.h create mode 100644 src/variants/crazyhouse/state.cpp create mode 100644 src/variants/crazyhouse/state.h create mode 100644 src/variants/crazyhouse/tagua-crazyhouse.desktop create mode 100644 src/variants/crazyhouse/validator.cpp create mode 100644 src/variants/crazyhouse/validator.h create mode 100644 src/variants/minishogi/CMakeLists.txt create mode 100644 src/variants/minishogi/global.h create mode 100644 src/variants/minishogi/minishogi.cpp create mode 100644 src/variants/minishogi/state.cpp create mode 100644 src/variants/minishogi/state.h create mode 100644 src/variants/minishogi/tagua-minishogi.desktop create mode 100644 src/variants/shogi/CMakeLists.txt create mode 100644 src/variants/shogi/behaviour.cpp create mode 100644 src/variants/shogi/behaviour.h create mode 100644 src/variants/shogi/colors.cpp create mode 100644 src/variants/shogi/colors.h create mode 100644 src/variants/shogi/moveserializer.cpp create mode 100644 src/variants/shogi/moveserializer.h create mode 100644 src/variants/shogi/shogi.cpp create mode 100644 src/variants/shogi/state.cpp create mode 100644 src/variants/shogi/state.h create mode 100644 src/variants/shogi/tagua-shogi.desktop create mode 100644 src/variants/shogi/types.h create mode 100644 src/variants/shogi/types/bishop.cpp create mode 100644 src/variants/shogi/types/bishop.h create mode 100644 src/variants/shogi/types/dragonhorse.cpp create mode 100644 src/variants/shogi/types/dragonhorse.h create mode 100644 src/variants/shogi/types/dragonking.cpp create mode 100644 src/variants/shogi/types/dragonking.h create mode 100644 src/variants/shogi/types/gold.cpp create mode 100644 src/variants/shogi/types/gold.h create mode 100644 src/variants/shogi/types/king.cpp create mode 100644 src/variants/shogi/types/king.h create mode 100644 src/variants/shogi/types/knight.cpp create mode 100644 src/variants/shogi/types/knight.h create mode 100644 src/variants/shogi/types/lance.cpp create mode 100644 src/variants/shogi/types/lance.h create mode 100644 src/variants/shogi/types/narigin.cpp create mode 100644 src/variants/shogi/types/narigin.h create mode 100644 src/variants/shogi/types/narikei.cpp create mode 100644 src/variants/shogi/types/narikei.h create mode 100644 src/variants/shogi/types/narikyo.cpp create mode 100644 src/variants/shogi/types/narikyo.h create mode 100644 src/variants/shogi/types/pawn.cpp create mode 100644 src/variants/shogi/types/pawn.h create mode 100644 src/variants/shogi/types/rook.cpp create mode 100644 src/variants/shogi/types/rook.h create mode 100644 src/variants/shogi/types/silver.cpp create mode 100644 src/variants/shogi/types/silver.h create mode 100644 src/variants/shogi/types/tokin.cpp create mode 100644 src/variants/shogi/types/tokin.h create mode 100644 src/variants/shogi/validator.cpp create mode 100644 src/variants/shogi/validator.h create mode 100644 src/weakset.h create mode 100644 src/xboardengine.cpp create mode 100644 src/xboardengine.h create mode 100755 strip_font.rb create mode 100644 tagua.pot create mode 100644 templates/cpp create mode 100644 templates/h create mode 100644 templates/variant_template.cpp.erb create mode 100644 templates/variant_template.h.erb create mode 100644 tests/.gitignore create mode 100644 tests/CMakeLists.txt create mode 100755 tests/add_test.rb create mode 100644 tests/cppunit_main.cpp create mode 100644 tests/kovacevic_keene_1973.pgn create mode 100644 tests/luaimage/CMakeLists.txt create mode 100644 tests/luaimage/maintest.lua create mode 100644 tests/luaimage/test.cpp create mode 100644 tests/luaimage/test.lua create mode 100644 tests/movelist/CMakeLists.txt create mode 100644 tests/movelist/main.cpp create mode 100644 tests/options/CMakeLists.txt create mode 100644 tests/options/foreach.hpp create mode 100644 tests/options/main.cpp create mode 100644 tests/options/test.lua create mode 100644 tests/settings/.gitignore create mode 100644 tests/settings/CMakeLists.txt create mode 100644 tests/settings/settingstest.cpp create mode 100644 tests/settings/settingstest.h create mode 100644 tests/templates/template.cpp.erb create mode 100644 tests/templates/template.h.erb create mode 100644 tests/test.lua create mode 100644 tests/test_canvas.cpp create mode 100644 tests/test_lua.cpp create mode 100644 tests/test_pgn.pgn create mode 100644 tests/test_weakset.cpp create mode 100644 tests/variants/CMakeLists.txt create mode 100644 tests/variants/boardtest.cpp create mode 100644 tests/variants/boardtest.h create mode 100644 tests/variants/chessgamestatetest.cpp create mode 100644 tests/variants/chessgamestatetest.h create mode 100644 tests/variants/chesslegalitytest.cpp create mode 100644 tests/variants/chesslegalitytest.h create mode 100644 tests/variants/chesspiecetest.cpp create mode 100644 tests/variants/chesspiecetest.h create mode 100644 tests/variants/chessserializationtest.cpp create mode 100644 tests/variants/chessserializationtest.h create mode 100644 tests/variants/pooltest.cpp create mode 100644 tests/variants/pooltest.h create mode 100644 tests/variants/test_utils.cpp create mode 100644 tests/variants/test_utils.h create mode 100644 tests/weak_set/CMakeLists.txt create mode 100644 tests/weak_set/test_weakset.cpp create mode 100644 tests/weak_set/weakset_test.cpp create mode 100644 tests/weak_set/weakset_test.h create mode 100644 translations/.gitignore create mode 100644 translations/CMakeLists.txt create mode 100644 translations/cs.po create mode 100644 translations/fr.po diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..517c0c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +*~ +build +patches +CMakeCache.txt +CMakeFiles +CMakeTmp +cmake_uninstall.cmake +Makefile +cmake_install.cmake +DartTestfile.txt +lib +build-stamp +BUILD* +extractedrc.cpp +install_manifest.txt +rcfiles.list +rcfiles.list diff --git a/.kateconfig b/.kateconfig new file mode 100644 index 0000000..e62d524 --- /dev/null +++ b/.kateconfig @@ -0,0 +1 @@ +// kate: space-indent on; indent-width 2; mixedindent off; diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..a3e87d7 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,4 @@ +Paolo Capriotti +Maurizio Monge +Yann Dirson + diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..fb8fb15 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,19 @@ +Version 1.0 alpha - "Clinkz" +=========================== +01-Sep-2007 + +* Internal variant structure completely redesigned. +* Chessboard and pool layout improved and made customizable. +* More shogi themes. +* New variants: Minichess, Minishogi. + +NOTE: Some features and variants that were in the 0.9 release got lost in +refactoring. In particular, loading PGN's does not work anymore, and there are +no more position editing facilities. Some of these features will be restored +for the final 1.0 release, as well as the missing variants. + +Version 0.9 +=========== +25-Sep-2006 + +* First release. diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..e8bfc75 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,54 @@ +PROJECT(tagua) +CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0) +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +include(Tagua) + +if (NOT CMAKE_BUILD_TYPE) + set(DEBUG_BUILD 0) +else (NOT CMAKE_BUILD_TYPE) + string(REGEX MATCH "debug" DEBUG_BUILD ${CMAKE_BUILD_TYPE}) +endif (NOT CMAKE_BUILD_TYPE) + +# boost +FIND_PACKAGE(Boost) + +# lua +IF(SYSTEM_LUA) # use lua installed in the system + INCLUDE(UsePkgConfig) + + IF(LUA_PKG) + PKGCONFIG(${LUA_PKG} LUA_INCLUDE_DIRS LUA_LIBRARY_DIRS LUA_LINK_FLAGS LUA_CFLAGS) + ELSE(LUA_PKG) + PKGCONFIG(lua5.1 LUA_INCLUDE_DIRS LUA_LIBRARY_DIRS LUA_LINK_FLAGS LUA_CFLAGS) + IF(NOT LUA_LINK_FLAGS) + PKGCONFIG(lua LUA_INCLUDE_DIRS LUA_LIBRARY_DIRS LUA_LINK_FLAGS LUA_CFLAGS) + ENDIF(NOT LUA_LINK_FLAGS) + ENDIF(LUA_PKG) + + ADD_CUSTOM_TARGET(lua_library) +ELSE(SYSTEM_LUA) # use the embedded lua source + SET(LUA_BIN_DIR "${CMAKE_CURRENT_BINARY_DIR}/lua") + SET(LUA_INCLUDE_DIRS "${LUA_BIN_DIR}/include") + SET(LUA_LIBRARY_DIRS "${LUA_BIN_DIR}") + SET(LUA_LINK_FLAGS lua) + + ADD_SUBDIRECTORY(lua) +ENDIF(SYSTEM_LUA) + +ADD_DEFINITIONS(-fexceptions) +find_package(KDE4 REQUIRED) +include(KDE4Defaults) + +# blitz +FIND_PACKAGE(Blitz REQUIRED) + +set(CMAKE_CXX_FLAGS_DEBUGFULL "${CMAKE_C_FLAGS_DEBUGFULL} -DTAGUA_DEBUG") +add_definitions(-DQT_NO_KEYWORDS ${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) + +add_subdirectory(src) +add_subdirectory(data) +add_subdirectory(translations) + +enable_testing() +add_subdirectory(tests EXCLUDE_FROM_ALL) diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..5b6e7c6 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..115e573 --- /dev/null +++ b/INSTALL @@ -0,0 +1,38 @@ +What you need +================== + + * A KDE4 development environment with kdelibs and libkdegames (>= KDE 3.92) + * boost 1.34 (headers will suffice) + +Further you will need GNU make, a working C++ compiler (e.g. gcc 3.4.x or later) +and CMake 2.4.7 or later. + +The following packages are optional: + + * lua (5.1.1, if it is not available you can use the internal copy) + +Preparations +================== + +Setting up a KDE4 development environment: + +Follow the tutorial at http://techbase.kde.org/Getting_Started/Build/KDE4 + +Alternatively, you can install KDE beta packages if your system supports them +(e.g. debian, kubuntu, openSUSE). + +Compiling Tagua +================== + +Unpack the Tagua package, change to the package root directory, and type: + +mkdir build +cd build +cmake -DCMAKE_INSTALL_PREFIX=$KDEDIR -DCMAKE_BUILD_TYPE=release .. +make -j2 +make install + +If you want tagua to be linked to system lua instead that the internall one, +add -DSYSTEM_LUA=1 to the command line, and optionally add -DLUA_PKG=xyz to +specify the pkg-config lua package. + diff --git a/README b/README new file mode 100644 index 0000000..18d9f01 --- /dev/null +++ b/README @@ -0,0 +1,6 @@ +Tagua - A generic board game application +=========================================== + +For more information, visit http://www.tagua-project.org + + diff --git a/RELEASE b/RELEASE new file mode 100644 index 0000000..b53b3b6 --- /dev/null +++ b/RELEASE @@ -0,0 +1,30 @@ +Introduction +=============== +Tagua is a generic board game application and framewok for KDE. +It can be used as a replacement for chess applications like XBoard and +Winboard, both for playing in internet servers and for local editing of games. +However, Tagua is much more: it has an extensible board game infrastructure +which makes developing new board games extremely easy. So far, a number of +games have been developed, including Chess, Shogi and Xiangqi. + +Feature list +=============== +* Local editing of games: + Games of chess and a number of variants (see below) can be edited and played locally. + A user friendly and graphically appealing move list control provides a mean to visualize complicated subvariant nesting. +* FICS / ICC compatible server support: + Tagua can manage a connection to a FICS-like server, with which the user can interact using a detachable console. + Games of any chess variant can be played, examined and observed. +* Generic game support: + Many board games can be easily implemented using the extensible Tagua infrastructure. So far, the following board games are implemented: + - Chess + - Chess 5x5 + - Crazyhouse + - Shogi + - Minishogi +* Graphics: + Tagua features an advanced animation engine which can be easily extended on a per-variant basis. + It includes a powerful theme loader based on lua scripts that allows to dynamically create effects like drop down shadows. Themes can customize the appearance of pieces, board squares and borders, clocks, backgrounds and the layout of all these elements. + +For more information, screenshots and design notes, visit http://www.tagua-project.org + diff --git a/TODO b/TODO new file mode 100644 index 0000000..85c40a1 --- /dev/null +++ b/TODO @@ -0,0 +1,57 @@ +FEATURES: + +[DONE] * Play from any position. +[PARTIALLY DONE] * Implement a real SDI interface. + +* Configuration dialog. + + * General: language choice, automatically connect on startup, default variant, etc... + * Connection: manage ics connections and options. + * [DONE] Highlighting: manage highlighting patterns for the ics console. + * [DONE] Animations: animation speed, graphical effects, etc... + * [DONE] Theme: manage themes and theme options; choose default theme; associate themes with variants. + * [DONE] Movelist: colors, fonts, animations and graphical effects preferences. + * [PARTIALLY DONE] Clock: colors and fonts. + * [BROKEN] Engine: List of engines, with type, command line options, working path, etc... + +* GUI Tuning. + + Many things still have to be done to make the gui really user friendly (think about the Panda): + * Message boxes to notify the user of error, for instance while connecting. + * Restore a functional status bar. + [SKETCHED] * Add some game info between the pools (like "FICS, rated crazyhouse") + * Notify the user of Server/Engine events. I don't like the Babaschess-like popup when + i get a match request, i'd prefer an amarok-like notification. + +CURRENT RELEASE: + +[DONE] * Set up a decent installation system, maybe with a cool one-click windows (linux?) installer. +[MOSTLY DONE] * Improve default highlighting script. +[DONE] * Add support for multiple ICS interactions. +[MOSTLY DONE] * More robust ICS support: do not crash when testing invalid moves. +[DONE] * About dialog. +[DOME] * Choose an icon for the application. + +FUTURE RELEASES: + +* Better support for variants in pgn games +* Pgn game list +* Fix examination variant upgrade +* Game print support, through khtml? +* Ability to define a variant in some script language (ruby or lua or ...) +* Complete support for chess engines or variant specific AI. +* An advanced Edit Position mode, with the ability to edit a position for + an arbitrary variant, as well as the various flags such as the en passant + square, etc... +* Improve Examine Mode and Observe Mode: + Movelist support for examination is not as extensive as it could, and I don't know if it will ever be. + Problems: + * [FIXED] Crash when going back to the starting position + * [FIXED] Moves are sometimes not correctly displayed even where there's enough information available. + Future possible features: + * Execute move immediately instead waiting the server response, when possible. + Note: this may prove hard to implement correctly, because one needs to filter out server responses + (after a suitable consistency check) so that they do not cause wrong updates if they come out when they + are already obsolete. + * Display variations correctly in the movelist, instead of always replacing mainline entries. + Note: hard to do, because the protocol sends very few information about the reason of a style12 update. diff --git a/TODO_Maurizio b/TODO_Maurizio new file mode 100644 index 0000000..8fa16e6 --- /dev/null +++ b/TODO_Maurizio @@ -0,0 +1,32 @@ +[DONE] - make the board support generic square tags, instead of select, + premove, etc. +[DONE] - make the board load squares and tags from a theme. +[FORFAITED] - implement edit position. +[DONE] - improve piece shadow (just a couple more configurable settings). +[DONE] - the table should not dispatch mouse events based on the group, + because group size is "virtual". +[DONE] - document the pixmap loader, or soon it will be impossible to use + (even for me). +[PARTLY DONE] - fix examination mode. +- reimplement piecesprite thumbnails. +[DONE] - remove all "../icons" in the code +[DONE] - improve the movelist to handle mixed turns +[WONTFIX :)]- rewrite the piece pool. + Now the conceptual bug of the PieceSprite's having type/color information is fixed, + but i think that a std::map is ok for the pool because identical things should not + be threated as different, if for two pieces ->equals returns true they should really + be identical, for sake of god. +[DONE] - manage in some way the with piece pool. +- better pgn load/save for variants with irregular moves (like progressive) +- add support for editing pgn game tags +[DONE by Paolo :)] - add support for one click move preview in the board +[DONE for reversi] - add support for games where you can or must pass the move (go, reversi, etc) +[HALF DONE] - move in the variant the square numbering string and the SAN move figurines +- support fonts for move figurines +- investigate pcre as a possible replacement for QRegExp. +- remove all code that assumes that there are 2 players :) +- allow to customize fg and bg of svg files too, in some way + (a CSS file? but Paolo will get angry because this will require + Qt-4.2, or maybe 4.3. They are not even supported in the snapshot + anyway) + diff --git a/TODO_Riccardo b/TODO_Riccardo new file mode 100644 index 0000000..9ef6d73 --- /dev/null +++ b/TODO_Riccardo @@ -0,0 +1,2 @@ +[IN PROGRESS] * Do the analog clock + diff --git a/TODO_shogi b/TODO_shogi new file mode 100644 index 0000000..4acbecb --- /dev/null +++ b/TODO_shogi @@ -0,0 +1,72 @@ +move generator: +- add to IType and implement for chess +- use a "set" class instead of a vector for quick is-in test ? +- call from core once, to avoid the numerous calls to canMove() +- have the GUI highlight all possible moves +- remove individual highlighting of square under cursor +- maybe export moves definitions to lua to avoid duplicating the + same data in theme shogi-lib + +general: +- plugins linked with too many libs +- at ui startup, some moves do get badly animated + - chess knight gets its animation, but too fast + - first move of a shogi pawn/king or of a knight does not get animated (or too fast ?) +component-api port: +- finalize shogi functionnality: + - promoting moves + legalitycheck.h pseudolegal() -> validator.cpp + gamestate.h promotionZone() -> ? + gamestate.h canPromote() -> ? + shogiactions.* -> ? + ? -> state.cpp move() + - mimic Chess::Pawn::setPromotion() into a common ancestor for + shogi pieces + - drops + - pieces do not appear in pool + ? -> moveserializer.* serialize() + - dropped pawn cannot checkmate (not in master ?!) + - piece orientation + - japanese digits on shogiban (shogiban.h borderCoords() -> move to theme ?) + - put correct credits in variants/shogi/* + - knight moves -> caracterize jump moves instead of hardcoding Knight in animations + - Pawn::setPromotion + - caracterize royal status (maybe policy-driven to account for Prince in Sho) + instead of hardcoding King + - king and knight do not have a figurine displayed + +other general non-shogi-related things to do quickly: +- find out how to use uninstalled plugins, document running from source tree +- use git-describe for debian package versionning +- solve missing icons ("View" menu) +- shlib versionning scheme +- engines do not work any more (No such slot EngineInfo::playAsWhite) + +tagua core: +- gnushogi engine gets confused when moving through history => generic pb ? +- tooltips for figurines, for people who can't read kanji +- allow for more complex moves (eg. Lion in Chu Shogi) + -> maybe by splitting target square, so the piece gets all different + moves in one click, depending on which part of the square is hit ? +- allow to setup and play problems (tsume shogi) +- loading a saved shogi game from PGN does notwork => probable generic issue +- install engine declarations system-wide + +engines/core: +- engine options (eg. select difficulty level) +- do not allow selection of more than 1 engine for the same side +- allow to declare engines system-wide + +shogi variant: +- decorated move could show captured piece + +gnushogi engine: +- gnushogi engine should catch "Illegal move: " notices from gnushogi +- engine should detect endgame conditions from gnushogi: + "Drawn game!" "Black mates!" + (gnushogi only reports a draw on one side !?) +- support for time + +fetching games from the net for learning: +- http://play.chessvariants.org/ +- http://brainking.com/ diff --git a/add_variant.rb b/add_variant.rb new file mode 100755 index 0000000..aba9257 --- /dev/null +++ b/add_variant.rb @@ -0,0 +1,19 @@ +#!/usr/bin/ruby + +require 'erb' + +TEMPLATE = 'templates/variant_template' +VARIANT_DIR = 'src/variants' + +variant = ARGV.shift or exit +%w(h cpp).each do |ext| + File.open(TEMPLATE + ".#{ext}.erb") do |f| + template = ERB.new(f.read) + out = File.join(VARIANT_DIR, variant + ".#{ext}") + File.open(out, 'w') do |outfile| + outfile.write(template.result(binding)) + end + puts "generated #{out}" + end +end + diff --git a/cmake/FindCPPUNIT.cmake b/cmake/FindCPPUNIT.cmake new file mode 100644 index 0000000..e84ad06 --- /dev/null +++ b/cmake/FindCPPUNIT.cmake @@ -0,0 +1,28 @@ +# - Try to find the libcppunit libraries +# Once done this will define +# +# CPPUNIT_FOUND - system has libcppunit +# CPPUNIT_INCLUDE_DIR - the libcppunit include directory +# CPPUNIT_LIBRARIES - libcppunit library + +FIND_PATH(CPPUNIT_INCLUDE_DIR Test.h PATHS /usr/include/cppunit /usr/local/include/cppunit ) +FIND_LIBRARY(CPPUNIT_LIBRARIES NAMES cppunit PATHS /usr/lib /usr/local/lib ) + +# IF(CPPUNIT_INCLUDE_DIR) +# message (STATUS "found cppunit include dir: ${CPPUNIT_INCLUDE_DIR}") +# ENDIF (CPPUNIT_INCLUDE_DIR) +# +# IF(CPPUNIT_LIBRARIES) +# message (STATUS "found cppunit libraries: ${CPPUNIT_LIBRARIES}") +# ENDIF (CPPUNIT_LIBRARIES) + +IF(CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARIES) + SET(CPPUNIT_FOUND 1 ) + if(NOT CPPUNIT_FIND_QUIETLY) + message(STATUS "Found cppunit: ${CPPUNIT_LIBRARIES}") + endif(NOT CPPUNIT_FIND_QUIETLY) +ELSE(CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARIES) + SET(CPPUNIT_FOUND 0 CACHE BOOL "Not found cppunit library") +ENDIF(CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARIES) + +MARK_AS_ADVANCED(CPPUNIT_INCLUDE_DIR CPPUNIT_LIBRARIES) diff --git a/cmake/Tagua.cmake b/cmake/Tagua.cmake new file mode 100644 index 0000000..145e7fa --- /dev/null +++ b/cmake/Tagua.cmake @@ -0,0 +1,13 @@ +macro(install_local_dir local_dir install_dir) + file(GLOB_RECURSE inst_files ${local_dir}/*) + foreach(inst_file ${inst_files}) +# message("file1 = ${CMAKE_CURRENT_SOURCE_DIR}") +# message("file2 = ${inst_file}") + file(RELATIVE_PATH rel_file ${CMAKE_CURRENT_SOURCE_DIR} ${inst_file}) +# message("rel file = ${rel_file}") + get_filename_component(rel_dir ${rel_file} PATH) +# message("rel dir = ${rel_dir}") + install(FILES ${inst_file} + DESTINATION ${DATA_INSTALL_DIR}/${install_dir}/${rel_dir}) + endforeach(inst_file) +endmacro(install_local_dir local_dir install_dir) diff --git a/data/.gitignore b/data/.gitignore new file mode 100644 index 0000000..b8d64db --- /dev/null +++ b/data/.gitignore @@ -0,0 +1,3 @@ +DartTestfile.txt +Makefile +cmake_install.cmake diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt new file mode 100644 index 0000000..4f6ce46 --- /dev/null +++ b/data/CMakeLists.txt @@ -0,0 +1,5 @@ +add_subdirectory(highlighting) +add_subdirectory(pics) +add_subdirectory(piece_icons) +add_subdirectory(scripts) +add_subdirectory(themes) diff --git a/data/highlighting/.gitignore b/data/highlighting/.gitignore new file mode 100644 index 0000000..b8d64db --- /dev/null +++ b/data/highlighting/.gitignore @@ -0,0 +1,3 @@ +DartTestfile.txt +Makefile +cmake_install.cmake diff --git a/data/highlighting/CMakeLists.txt b/data/highlighting/CMakeLists.txt new file mode 100644 index 0000000..6b61bf9 --- /dev/null +++ b/data/highlighting/CMakeLists.txt @@ -0,0 +1,2 @@ +install(FILES highlighting.lua +DESTINATION ${DATA_INSTALL_DIR}/tagua/highlighting) diff --git a/data/highlighting/highlighting.lua b/data/highlighting/highlighting.lua new file mode 100644 index 0000000..16d3a7d --- /dev/null +++ b/data/highlighting/highlighting.lua @@ -0,0 +1,56 @@ +on["^(%S+) tells you: "] = function() + sentence = line(match.to, line.to) + sentence.bold = true + nick = Text("<" .. ref[1].text .. "> ") + nick.color = "#104050" + + return nick + sentence +end + +on["^%S+ rating adjustment:|^No rating adjustment done."] = function() +-- send_text("Thank you") + + return line +end + +filter("^<12>") + +filter("^") + +nick = "" + +-- Notification +highlight["^(?:Present company includes|Notification|Challenge|You|:).*$"] = { + color = Color(158,29,180) +} + +-- Seek +on["(^%S+%s%((%d|%+)+%))( seeking .*) %(\"play (%d+)\" to respond%)"] = function() + ref[4].bold = true + + return ref[1] + ref[3] + Text(" ==> ") + ref[4] +end + +-- Channel tell +highlight["^%S+%((%d|%+)+%):.*$"] = { + color = Color(177,130,0) +} + +-- Shouts +highlight["^(?:%-%->|%S+%s+(?:(?:c%-)?shouts:)).*$"] = { + color = Color(0,145,65) +} + +-- Game +highlight["^(?:%{|Game|Creating).*$"] = { + bold = true, + color = Color(214,0,3) +} + +-- Tells +-- highlight["^%S+%s+tells you.*$"] = { +-- color = Color(0,40,221) +-- } + + + diff --git a/data/pics/.gitignore b/data/pics/.gitignore new file mode 100644 index 0000000..b8d64db --- /dev/null +++ b/data/pics/.gitignore @@ -0,0 +1,3 @@ +DartTestfile.txt +Makefile +cmake_install.cmake diff --git a/data/pics/CMakeLists.txt b/data/pics/CMakeLists.txt new file mode 100644 index 0000000..27a0c71 --- /dev/null +++ b/data/pics/CMakeLists.txt @@ -0,0 +1,8 @@ +install(FILES + promoteBishop.png + promoteKing.png + promoteKnight.png + promoteQueen.png + promoteRook.png +DESTINATION ${DATA_INSTALL_DIR}/tagua/pics) + diff --git a/data/pics/promoteBishop.png b/data/pics/promoteBishop.png new file mode 100644 index 0000000000000000000000000000000000000000..77aa85c200775fa4b655cc2132ecec96e6fa89a6 GIT binary patch literal 3152 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 aUj7Fq0>GMa5S5t#0000@-*a literal 0 HcwPel00001 diff --git a/data/pics/promoteKnight.png b/data/pics/promoteKnight.png new file mode 100644 index 0000000000000000000000000000000000000000..095cfe1219aefa8abe3a5cac7d2229a468a8d78b GIT binary patch literal 2380 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 Xy_$2D`ZEiM00000NkvXXu0mjfw|0e` literal 0 HcwPel00001 diff --git a/data/pics/promoteRook.png b/data/pics/promoteRook.png new file mode 100644 index 0000000000000000000000000000000000000000..4284eff90f3d63da7690f4e49d06591ee6dce015 GIT binary patch literal 2559 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 aUj7Fq0>GMa5S5t#0000@-*a literal 0 HcwPel00001 diff --git a/data/piece_icons/n.png b/data/piece_icons/n.png new file mode 100644 index 0000000000000000000000000000000000000000..095cfe1219aefa8abe3a5cac7d2229a468a8d78b GIT binary patch literal 2380 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 literal 0 HcwPel00001 diff --git a/data/piece_icons/q.png b/data/piece_icons/q.png new file mode 100644 index 0000000000000000000000000000000000000000..f82c989be3a5b1fef01f23f6e41f801cf30b840b GIT binary patch literal 3289 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 Xy_$2D`ZEiM00000NkvXXu0mjfw|0e` literal 0 HcwPel00001 diff --git a/data/piece_icons/r.png b/data/piece_icons/r.png new file mode 100644 index 0000000000000000000000000000000000000000..4284eff90f3d63da7690f4e49d06591ee6dce015 GIT binary patch literal 2559 zcwPbj2>|wqP)pHAVCo*kPrw84SC)q_w>j9&RspjedLnN zT-ufW=eu*}o;mxRGjnF|efC&ZpY%ze^huxeNuMM{>_jUNLq-cmt`tu23x}5oQ|=We zZ4;`W2wQI!HeM&(Un|@&N7#^*=#FV|X#(s{Vdga9pi{!!;liP7g<09cs!ZXQe!|Yb z3oj@YuFepS{{ETiqdqTu{)n*n>%voy2>mC7(`kSF4B?4i3*Wz8xMQ$z-)dpgr)i+V zopFpQ{e}rIEfe0kO1Sc@ zxMRQ9A#CyKuK-0M*sPMkc8GUExd53zt4EeDWJ~ zFv~Fk0kfSuMuhM1t?Q%f=bI;7RcY3%|C2CZng5^riuu3bQsJ@!;rw3-UzsYbb z6<)vRSc3g8xikS;n}rpV&4%mt3$M!&<}jeiRc8H}3{dcCv;NMzgfDXE*IW|5gR?WD z>*wDiT;r(UK3lks8)7+Y|66xDCSWgm2F>fH{!}=!L^x-V@Wkt8{g)|EzR9Ht@D~c7 zJ#IF9^kQLtUiA7m&!S#I_yLaisJ|+_;g`{`Z{II`>bLP-U$c`tefmAo+qrm)@c4sf z{Xf>A#|$fm__{yn|1Dir!owrY@(iAUoN3YPR}K|c@aQ)z7amCy9>nUX{;O~k)>_#l z;rdO{udfygA8BDgFjuRvT54H3Pd*@Q`nj+fE2#1*;g0s`?c|=q_w%s7t} z@kml|^lr))))bljZo^NwX1+%X4c{)@`DarR&AlnYD@qbDTD>T#4Cvx1!sZ3x`&-UC zVbG%PUb&Y%;mbc3E*T>nPiVj%D176j@D}Y@ah!?W-k+CUI!jU-=Tq+!rf_{fp$NO4 zhP4@dH!S7)FTjU|LCoDQ9Hqc}RR4^yl>u$xxaBS3Dc&Vh4+wvM4EwJyVbB)6Tr*Xcfu?WUMo}y zUV;=+S<4Z7$U$ZymT&$fvI>AeO!jB5mTw5Z&T7vK>?Wv9v+U%?HMvq9M z^bcW5db%s#^_vH339BEr%Iuu~FilmC-#> zB$%mVX1O*R>_^>d*`rvH_Ar$r=w_F~UXQWFsUI6j!TZf}A9~vj@m;U`;?)yC{9QQ{ zl^%jKJ<=nBD4oK1fm!b3$+g?!yI%Ljt2AvLRb-3LdPb1JOL+pZphi*veQWriHdDJI zT=xlqB6-##m($W|BKqC37!H7X>C+oUY%%tCq?h=x(rogFtQZMlXPx*6Gfx~ZJj~u{ zC~ba}^+OCvas1vf~vx~-fE>$QBk%5T@MK(-G^T`8SyCg>i%$u00^U zhC3@)ztsLB=;9^35qrBrKho4!L`M}lr=g`Q(o)F>6!t9~>m}w1M?JlxMH)%S9L7Nm z5{j@1#*HC3chzp8Uw?>ED5&QHjS9wZJJH;2#J0*wSZmwbv+<26=VLc-9z{Rs;AwXd z19X5TWRpMZS607f^_x) zyG(T(@T{A&DJYF^oMXy;$MHuTn>{uoZD z@L{)yJl}X7L97;w4?!$#Eotk9kLxVGMCvC@JAhaA4#(oYv*ZE(nxv|lTmXy)@kur zE1?fUu-g?WjY= +-- (c) 2006 Maurizio Monge +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 2 of the License, or +-- (at your option) any later version. +------------------------------------------------------------------------------- + +Text = { + create_from_hline = function(hline, from, to) + local o = { + line = hline, + from = from, + to = to + } + setmetatable(o, Text[".object_meta_table"]) + return o + end, + [".getter_table"] = { + text = function(self) + return self.line:mid(self.from, self.to) + end + }, + [".method_table"] = { + dump = function(self) + self.line:dump() + end, + clone = function(self) + local hline = self.line:extract(self.from, self.to) + return Text.create_from_hline(hline, 0, hline.length) + end + }, + [".meta_table"] = { + __call = function(prototype, str) + local hline = HLine(str) + return prototype.create_from_hline(hline, 0, hline.length) + end + }, + [".object_meta_table"] = { + __index = function(self, property) + local h = Text[".getter_table"][property] + if h ~= nil then + return h(self) + else + h = Text[".method_table"][property] + if h ~= nil then + return h + else + return nil + end + end + end, + + __newindex = function(self, property, value) + self.line["set_" .. property](self.line, self.from, self.to, value) + end, + + __call = function(self, from, to) + if (to > self.to) then + error("Index " .. to .. " is too large") + end + return Text.create_from_hline(self.line, from + self.from, to + self.from) + end, + + __add = function(self, other) + local hline = self:clone().line:append(other.line, other.from, other.to) + return Text.create_from_hline(hline, 0, hline.length) + end + } +} +setmetatable(Text, Text[".meta_table"]) + +__patterns__ = { } + +on = {} +highlight = {} + +setmetatable(on, { + __newindex = function(self, re, h) + local event = { + pattern = re, + handler = h + } + table.insert(__patterns__, event) + end, + __call = function(self, re, h) + self[re] = h + end +}) + +setmetatable(highlight, { + __newindex = function(self, re, fmt) + local function handler() + local function set_property(prop) + if fmt[prop] ~= nil then + match[prop] = fmt[prop] + end + end + set_property("bold") + set_property("italic") + set_property("color") + return line + end + table.insert(__patterns__, { pattern = re, handler = handler}) + end, + + __call = function(self, re, fmt) + self[re] = fmt + end +}) + +function filter(re) + table.insert(__patterns__, { pattern = re, handler = function() end}) +end + +function __run_event__(event, str, match, ref, state) + env = getfenv(event.handler) + env.line = Text(str) + env.match = env.line(match.from, match.to) + env.ref = {} + for i, r in ipairs(ref) do + env.ref[i] = env.line(ref[i].from, ref[i].to) + end + for k, v in pairs(state) do + env[k] = v + end + setfenv(event.handler, env) + + local result = event.handler() + + if result ~= nil then + return result + end +end diff --git a/data/scripts/movelist_textual.html b/data/scripts/movelist_textual.html new file mode 100644 index 0000000..35c27e7 --- /dev/null +++ b/data/scripts/movelist_textual.html @@ -0,0 +1,57 @@ + + + + + + + + + + + diff --git a/data/scripts/piece_theme.lua b/data/scripts/piece_theme.lua new file mode 100644 index 0000000..033ad43 --- /dev/null +++ b/data/scripts/piece_theme.lua @@ -0,0 +1,85 @@ + +function addShadow(func) + return function(size, args) + local isz = math.floor( size*100/(100+shadow_grow) + 0.5) + local offx = shadow_offset_x*isz/200 + local offy = shadow_offset_y*isz/200 + local i = func(isz, args) + local s = i:create_shadow( shadow*isz/100, shadow_color, + Point(size-isz, size-isz), + Point(offx, offy) ) + s:draw_image(Rect((size-isz)/2-offx, (size-isz)/2-offy,isz,isz), i, Rect(0,0,isz,isz)) + return s + end +end + +function fromSVG_Direct(file) + return function(size, args) + local i = Image(size,size) + i:clear() + i:draw_svg(Rect(0,0,size,size), file) + return i + end +end + +function fromSVG(file) + if shadow then + return addShadow(fromSVG_Direct(file)) + else + return fromSVG_Direct(file) + end +end + +function fromFontGlyph_Direct(...) + local t = (function(...) return ... end):partial(...) + return function(size, args) + local i = Image(size,size) + i:clear() + i:draw_glyph(Rect(0,0,size,size), t()) + return i + end +end + +-- function fromFontGlyph_Direct(file, glyph, fg, bg, border, draw_inner_bg) +-- return function(size) +-- local i = Image(size,size) +-- i:clear() +-- i:draw_glyph(Rect(0,0,size,size), file, glyph, fg, bg, border, draw_inner_bg) +-- return i +-- end +-- end + +function fromFontGlyph(...) + if shadow then + return addShadow(fromFontGlyph_Direct(...)) + else + return fromFontGlyph_Direct(...) + end +end + +function fromPixmap(file) + return function(size, args) + local i = Image(size,size) + i:set_paint_over(false) + i:draw_image(Rect(0,0,size,size), file) + return i + end +end + +function fromColor(color) + return function(size, args) + local i = Image(size,size) + i:clear(color) + return i + end +end + +function overlay(func1,func2,...) + if func2 then + return overlay(function(size, args) + return func2(func1(size, args), size, args) + end, ...) + else + return func1 + end +end diff --git a/data/scripts/shogi_themelib.lua b/data/scripts/shogi_themelib.lua new file mode 100644 index 0000000..ca6475c --- /dev/null +++ b/data/scripts/shogi_themelib.lua @@ -0,0 +1,157 @@ +-- generic functions for shogi themes +-- FIXME: still depends on Shogi.ttf for the tile + +function tile(white, ratio) + return function(size, args) + local i = Image(size,size) + i:clear() + + local g = RadialGradient(Point(size*0.5,size*0.5), size*0.5, Point(size*0.3,size*0.3)) + g[0] = "#ffeda2" + g[1] = "#c0a870" + local b = Brush(g) + + local flip = (white or args.flipped) and not (white and args.flipped) + + if flip then + i:translate(-size, -size) + i:rotate(180) + b:translate(-size, -size) + b:rotate(180) + end + + if ratio then + i:scale(ratio, ratio) + i:translate(size*(1-ratio)*0.5, size*(1-ratio)*0.5) + b:scale(ratio, ratio) + b:translate(size*(1-ratio)*0.5, size*(1-ratio)*0.5) + end + + i:draw_glyph(Rect(0,0,size,size), "../ShogiSVG-TTF/Shogi.ttf", "0x2c", "black", b) + --i:draw_svg(Rect(0,0,size,size), "../ShogiSVG/tile.svg") + return i + end +end + +function draw_arrowhead(i, p, vx,vy, length, rwidth, linecolor,linewidth) + -- normalize to 1 the direction vector + local vl = (vx*vx + vy*vy)^0.5 + vx,vy = vx/vl, vy/vl + -- the component vector along the arrow direction + local vxdirect, vydirect = -vx*length, -vy*length + -- an orthogonal vector of requested relative width + local vxortho,vyortho = vydirect*rwidth, -vxdirect*rwidth + + i:draw_line(p,Point(p.x+vxdirect+vxortho,p.y-vydirect-vyortho), linecolor,linewidth) + i:draw_line(p,Point(p.x+vxdirect-vxortho,p.y-vydirect+vyortho), linecolor,linewidth) +end + +function shogi_moves(moves) + return function(i,size) + if not theme.options.moves_overlay.value then + return i + end + + local index, move + --local xcenter, ycenter, width = size/2, size/2, size/4 + local xcenter, ycenter, width = 0.8*size, 0.82*size, 0.08*size + local tilesize,shortsize = 0.8*width, 0.3*width + local arrowlen,arrowrwidth = 0.2*width, 0.5 + local centerpoint = Point(xcenter,ycenter) + local b = Brush("red") + for index,move in ipairs(moves) do + local x,y,long = move[1],move[2],move[3] + if long then + local p2 = Point(xcenter+1.5*x*width, ycenter-1.5*y*width) + i:draw_line(centerpoint,p2, "purple",1) + draw_arrowhead(i, p2, x,y, arrowlen,arrowrwidth, "purple",1) + else + i:draw_line(centerpoint, Point(xcenter+x*width,ycenter-y*width),"red",1) + i:fill_rect(Rect(xcenter+x*width-shortsize/2, ycenter-y*width-shortsize/2, + shortsize, shortsize), b) + end + end + + -- the tile + i:fill_rect(Rect(xcenter-tilesize/2,ycenter-tilesize/2, + tilesize,tilesize), b) + + return i + end +end + +shogichars = {} +-- standard Shogi +shogichars["king"] = {"0x7389", {"0x7389", "0x5c06"}} +shogichars["jade general"] = {"0x738b", {"0x738b", "0x5c06"}} +shogichars["flying chariot"] = {"0x98db", {"0x98db", "0x8eca"}} +shogichars["bishop"] = {"0x89d2", {"0x89d2", "0x884c"}} +shogichars["gold general"] = {"0x91d1", {"0x91d1", "0x5c06"}} +shogichars["silver general"] = {"0x9280", {"0x9280", "0x5c06"}} +shogichars["knight"] = {"0x6842", {"0x6842", "0x99ac"}} +shogichars["incense chariot"] = {"0x9999", {"0x9999", "0x8eca"}} +shogichars["pawn"] = {"0x6b69", {"0x6b69", "0x5175"}} +shogichars["dragon king"] = {"0x9f8d", {"0x9f8d", "0x738b"}} +shogichars["dragon horse"] = {"0x99ac", {"0x9f8d", "0x99ac"}} +shogichars["narigin"] = {"0x5168", {"0x6210", "0x9280"}} +shogichars["narikei"] = {"0x572d", {"0x6210", "0x6842"}} +shogichars["narikyo"] = {"0x674f", {"0x6210", "0x9999"}} +shogichars["tokin"] = {"0x3068", {"0x3068", "0x91d1"}} +-- Sho Shogi +shogichars["drunken elephant"] = {"0x9154", {"0x9154", "0x8c61"}} +shogichars["crown prince"] = {"0x592a", {"0x592a", "0x5b50"}} +-- Tori Shogi +shogichars["tori phoenix"] = { "0x9d6c" } +shogichars["tori falcon"] = { "0x9df9" } +shogichars["tori eagle"] = { "0x9d70" } +shogichars["tori crane"] = { "0x9db4" } +shogichars["tori quail"] = { "0x9d89" } +shogichars["tori pheasant"] = { "0x96c9" } +shogichars["tori swallow"] = { "0x71d5" } +shogichars["tori goose"] = { "0x9d08" } +-- Chess compatibility (part of Dai Shogi) +shogichars["free king"] = {"0x5954", {"0x5954", "0x738b"}} + +shogimoves_king = { + {-1,1},{0,1},{1,1}, + {-1,0},{1,0}, + {-1,-1},{0,-1},{1,-1}} +shogimoves_rook = {{-1,0,1},{1,0,1},{0,-1,1},{0,1,1}} +shogimoves_dragon = { + {-1,0,1},{1,0,1},{0,-1,1},{0,1,1}, + {-1,-1},{1,-1},{-1,1},{1,1}} +shogimoves_bishop = {{-1,-1,1},{1,-1,1},{-1,1,1},{1,1,1}} +shogimoves_horse = { + {-1,-1,1},{1,-1,1},{-1,1,1},{1,1,1}, + {-1,0},{1,0},{0,-1},{0,1}} +shogimoves_gold = { + {-1,1},{0,1},{1,1}, + {-1,0},{1,0},{0,-1}} +shogimoves_silver = { + {-1,1},{0,1},{1,1}, + {-1,-1},{1,-1}} +shogimoves_knight = {{-1,2},{1,2}} +shogimoves_lance = {{0,1,1}} +shogimoves_pawn = {{0,1}} + +shogimoves_drunken_elephant = { + {-1,1},{0,1},{1,1}, + {-1,0},{1,0}, + {-1,-1},{1,-1}} + +shogimoves_freeking = { + {-1,1,1},{0,1,1},{1,1,1}, + {-1,0,1},{1,0,1}, + {-1,-1,1},{0,-1,1},{1,-1,1}} + +shogimoves_eagle = { + {-1,1,1},{0,1},{1,1,1}, + {-1,0},{1,0}, + {-1,-1},{-2,-2},{0,-1,1},{1,-1},{2,-2}} +shogimoves_crane = { + {-1,1},{0,1},{1,1}, + {-1,-1},{0,-1},{1,-1}} +shogimoves_right_quail = {{0,1,1},{-1,-1,1},{1,-1}} +shogimoves_left_quail = {{0,1,1},{1,-1,1},{-1,-1}} +shogimoves_pheasant = {{0,2},{-1,-1},{1,-1}} +shogimoves_goose = {{-2,2},{2,2},{0,-2}} diff --git a/data/themes/.gitignore b/data/themes/.gitignore new file mode 100644 index 0000000..b8d64db --- /dev/null +++ b/data/themes/.gitignore @@ -0,0 +1,3 @@ +DartTestfile.txt +Makefile +cmake_install.cmake diff --git a/data/themes/CMakeLists.txt b/data/themes/CMakeLists.txt new file mode 100644 index 0000000..72ae03c --- /dev/null +++ b/data/themes/CMakeLists.txt @@ -0,0 +1,30 @@ +install_local_dir(squares/Jose tagua/themes) +install_local_dir(squares/Default tagua/themes) +install_local_dir(controls/Cool tagua/themes) +install_local_dir(controls/Cool tagua/themes) +install_local_dir(controls/Google tagua/themes) +install_local_dir(controls/XBoard tagua/themes) +install_local_dir(figurines/AsciiShogiTTF tagua/themes) +install_local_dir(figurines/FantasyTTF tagua/themes) +install_local_dir(figurines/XiangQi tagua/themes) +install_local_dir(figurines/AlphaTTF tagua/themes) +install_local_dir(figurines/ShogiTTF tagua/themes) +install_local_dir(pieces/EnquilTTF tagua/themes) +install_local_dir(pieces/LucenaTTF tagua/themes) +install_local_dir(pieces/FantasySVG tagua/themes) +install_local_dir(pieces/MayanTTF tagua/themes) +install_local_dir(pieces/SpatialSVG tagua/themes) +install_local_dir(pieces/YahooTTF tagua/themes) +install_local_dir(pieces/PrmiSVG tagua/themes) +install_local_dir(pieces/StonesSVG tagua/themes) +install_local_dir(pieces/XiangQiSVG tagua/themes) +install_local_dir(pieces/XiangQiTTF tagua/themes) +install_local_dir(pieces/AlphaTTF tagua/themes) +install_local_dir(pieces/SkullsSVG tagua/themes) +install_local_dir(pieces/ShogiSVG tagua/themes) +install_local_dir(pieces/ShogiTTF tagua/themes) +install_local_dir(pieces/ShogiSVG-TTF tagua/themes) +install_local_dir(pieces/ToriShogiTTF tagua/themes) +install_local_dir(pieces/XBoardTTF tagua/themes) +install_local_dir(pieces/BerlinTTF tagua/themes) +install_local_dir(wallpapers tagua/themes) diff --git a/data/themes/controls/Cool/active_clock.svg b/data/themes/controls/Cool/active_clock.svg new file mode 100644 index 0000000..3f8123f --- /dev/null +++ b/data/themes/controls/Cool/active_clock.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/data/themes/controls/Cool/border_corner.svg b/data/themes/controls/Cool/border_corner.svg new file mode 100644 index 0000000..7dffe74 --- /dev/null +++ b/data/themes/controls/Cool/border_corner.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/data/themes/controls/Cool/border_top.svg b/data/themes/controls/Cool/border_top.svg new file mode 100644 index 0000000..0d09935 --- /dev/null +++ b/data/themes/controls/Cool/border_top.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/controls/Cool/inactive_clock.svg b/data/themes/controls/Cool/inactive_clock.svg new file mode 100644 index 0000000..b063c7c --- /dev/null +++ b/data/themes/controls/Cool/inactive_clock.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/data/themes/controls/Cool/theme.desktop b/data/themes/controls/Cool/theme.desktop new file mode 100644 index 0000000..4ad865d --- /dev/null +++ b/data/themes/controls/Cool/theme.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Cool +Type=Application +Comment=Cool controls +X-Tagua-ThemeType=Figurines +X-Tagua-Variants=any[default] +X-Tagua-Script=theme.lua diff --git a/data/themes/controls/Cool/theme.lua b/data/themes/controls/Cool/theme.lua new file mode 100644 index 0000000..6750b25 --- /dev/null +++ b/data/themes/controls/Cool/theme.lua @@ -0,0 +1,160 @@ +import("piece_theme.lua") + + +theme.options = OptList { + BoolOpt("wallpaper", "Draw wallpaper", true, OptList { + BoolOpt("blur", "Enable blur", false), + UrlOpt("file", "File:", "../../wallpapers/Paris_by_Night.jpg") + }), + FontOpt("clock_font1", "Clock text font", Font("Sans", true, true)), + FontOpt("clock_font2", "Clock time font", Font("Sans", true, false)), + FontOpt("border_font", "Border font", Font("Sans", false, false)) +} + +local border_ratio = 0.67 +local clock_ratio = 2.6 +local clock_height_ratio = 0.4 +local clock_border_ratio = 0.33 +local pool_width = 3 +local pool_piece_ratio = clock_ratio/pool_width +local border_text_near = 0.0 +local border_text_far = 0.5 + +theme.layout = function(args) + retv = {} + retv.square_size = math.floor(math.min( + args.width/(args.grid_size.x+2*border_ratio+clock_ratio+2*clock_border_ratio), + args.height/(args.grid_size.y+2*border_ratio) ) ) + retv.border_size = math.floor(retv.square_size*border_ratio) + retv.border_text_near = math.floor(retv.border_size*border_text_near) + retv.border_text_far = math.floor(retv.border_size*border_text_far) + retv.clock_size = math.floor(retv.square_size*clock_ratio) + retv.pool_width = pool_width; + retv.pool_piece_size = math.floor(retv.square_size*pool_piece_ratio) + + local d = Point(math.floor((args.width-retv.square_size*(args.grid_size.x+ + 2*border_ratio+clock_ratio+2*clock_border_ratio))/2), + math.floor((args.height-retv.square_size*(args.grid_size.y+2*border_ratio))/2)); + local clock_border = math.floor(retv.square_size*clock_border_ratio) + local clock_height = math.floor(retv.clock_size*clock_height_ratio) + local panel_x = retv.square_size*args.grid_size.x + 2*retv.border_size + clock_border; + retv.board_position = d + Point(retv.border_size, retv.border_size) + retv.clock0_position = d + Point(panel_x, clock_border_ratio*retv.square_size) + retv.clock1_position = d + Point(panel_x, retv.square_size*args.grid_size.y + 2*retv.border_size + - clock_height - clock_border) + retv.pool0_position = Point(d.x + panel_x, retv.clock0_position.y+clock_height+clock_border); + retv.pool1_position = Point(d.x + panel_x, retv.clock1_position.y-clock_border); + + return retv +end + + +function addShadow(i, size) + local s = i:create_shadow( size, "#ffffff", Point(0, 0), Point(0, 0) ) + s:draw_image(Rect(0, 0, i.width, i.height), i) + return s +end + +theme.border = function(b, args) + local rb = math.floor(b*2/3); + local w = args.width; + local h = args.height; + local tr = Image(b, b); tr:clear(); tr:draw_svg(Rect(0,b-rb,rb,rb), "border_corner.svg"); tr = addShadow(tr, b/5) + local tl = Image(b, b); tl:set_paint_over(false); tl:rotate(270); tl:translate(0,b); tl:draw_image(Rect(0,0,b,b), tr) + local bl = Image(b, b); bl:set_paint_over(false); bl:rotate(180); bl:translate(b,b); bl:draw_image(Rect(0,0,b,b), tr) + local br = Image(b, b); br:set_paint_over(false); br:rotate(90); br:translate(b,0); br:draw_image(Rect(0,0,b,b), tr) + local t = Image(w, b); t:clear(); t:draw_svg(Rect(0,b-rb,w,rb), "border_top.svg"); t = addShadow(t, b/5) + local bt = Image(w, b); bt:set_paint_over(false); bt:rotate(180); bt:translate(w,b); bt:draw_image(Rect(0,0,w,b), t) + local l = Image(b, h); l:set_paint_over(false); l:rotate(270); l:translate(0,h); l:draw_image(Rect(0,0,h,b), t) + local r = Image(b, h); r:set_paint_over(false); r:rotate(90); r:translate(b,0); r:draw_image(Rect(0,0,h,b), t) + return { + [Rect(-b,-b,b,b)] = tl, + [Rect(w,-b,b,b)] = tr, + [Rect(-b,h,b,b)] = bl, + [Rect(w,h,b,b)] = br, + [Rect(0,-b,w,b)] = t, + [Rect(0,h,w,b)] = bt, + [Rect(-b,0,b,h)] = l, + [Rect(w,0,b,h)] = r + } +end + +theme.border_color = function() + return "black"; +end + +theme.border_font = function() + return theme.options.border_font.value; +end + +theme.wallpaper = function() + if(theme.options.wallpaper.value) then + local i = Image(theme.options.wallpaper.sub_options.file.value, false) + if(theme.options.wallpaper.sub_options.blur.value) then + i:exp_blur(5); + end + return i + else + return nil + end +end + +function create_clock(file, col) + return function(w) + local h = math.floor(w*clock_height_ratio) + local i = Image(w,h) + i:clear() + i:draw_svg(Rect(0,0,w,h), file) + local s = i:create_shadow( w/16, col, Point(math.floor(w/7), math.floor(w/7)), Point(0, 0) ) + s:draw_image(Rect(math.floor(w/14), math.floor(w/14), i.width, i.height), i) + return s + end +end + +theme.clock_active_background = create_clock("active_clock.svg", "#ff8080") +theme.clock_inactive_background = create_clock("inactive_clock.svg", "#e0e0e0") + +theme.clock_active_text = function(size) + return Brush("#000000") +end + +theme.clock_inactive_text = function(size) + return Brush("#808080") +end + +theme.clock_background_offset = function(w) + local d = math.floor(w/14) + return Point(-d, -d) +end + +theme.clock_height = function(w) + return math.floor(w*clock_height_ratio) +end + +theme.clock_caption_rect = function(w) + local h = math.floor(w*clock_height_ratio) + return Rect(w*0.02, h*0.22, w*0.4, h*0.38) +end + +theme.clock_time_rect = function(w) + local h = math.floor(w*clock_height_ratio) + return Rect(w*0.4, h*0.1, w*0.6, h*0.62) +end + +theme.clock_player_rect = function(w) + local h = math.floor(w*clock_height_ratio) + return Rect(w*0.14, h*0.68, w*0.69, h*0.28) +end + +theme.clock_caption_font = function() + return theme.options.clock_font1.value; +end + +theme.clock_time_font = function() + return theme.options.clock_font2.value; +end + +theme.clock_player_font = function() + return theme.options.clock_font1.value; +end + diff --git a/data/themes/controls/Google/active_clock.svg b/data/themes/controls/Google/active_clock.svg new file mode 100644 index 0000000..30b0544 --- /dev/null +++ b/data/themes/controls/Google/active_clock.svg @@ -0,0 +1,75 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/controls/Google/border_corner.svg b/data/themes/controls/Google/border_corner.svg new file mode 100644 index 0000000..413b53d --- /dev/null +++ b/data/themes/controls/Google/border_corner.svg @@ -0,0 +1,60 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/data/themes/controls/Google/border_top.svg b/data/themes/controls/Google/border_top.svg new file mode 100644 index 0000000..f946f77 --- /dev/null +++ b/data/themes/controls/Google/border_top.svg @@ -0,0 +1,58 @@ + + + + + + + image/svg+xml + + + + + + + + diff --git a/data/themes/controls/Google/inactive_clock.svg b/data/themes/controls/Google/inactive_clock.svg new file mode 100644 index 0000000..b7c3676 --- /dev/null +++ b/data/themes/controls/Google/inactive_clock.svg @@ -0,0 +1,75 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/controls/Google/theme_google.desktop b/data/themes/controls/Google/theme_google.desktop new file mode 100644 index 0000000..eb227ba --- /dev/null +++ b/data/themes/controls/Google/theme_google.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Google +Type=Application +Comment=Google-like controls +X-Tagua-ThemeType=Controls +X-Tagua-Variants=any +X-Tagua-Script=theme_google.lua diff --git a/data/themes/controls/Google/theme_google.lua b/data/themes/controls/Google/theme_google.lua new file mode 100644 index 0000000..9701e8f --- /dev/null +++ b/data/themes/controls/Google/theme_google.lua @@ -0,0 +1,151 @@ +import("piece_theme.lua") + + +theme.options = OptList { + BoolOpt("wallpaper", "Draw wallpaper", false, OptList { + BoolOpt("blur", "Enable blur", false), + UrlOpt("file", "File:", "../../wallpapers") + }), + FontOpt("clock_font1", "Clock text font", Font("Sans", false, true)), + FontOpt("clock_font2", "Clock time font", Font("Sans", false, false)), + FontOpt("border_font", "Border font", Font("Sans", false, false)) +} + +local border_ratio = 0.67 +local clock_ratio = 2.8 +local clock_height_ratio = 0.6 +local clock_border_ratio = 0.16 +local pool_width = 3 +local pool_piece_ratio = clock_ratio/pool_width +local border_text_near = 0.05 +local border_text_far = 0.6 + +theme.layout = function(args) + retv = {} + retv.square_size = math.floor(math.min( + args.width/(args.grid_size.x+2*border_ratio+clock_ratio+2*clock_border_ratio), + args.height/(args.grid_size.y+2*border_ratio) ) ) + retv.border_size = math.floor(retv.square_size*border_ratio) + retv.border_text_near = math.floor(retv.border_size*border_text_near) + retv.border_text_far = math.floor(retv.border_size*border_text_far) + retv.clock_size = math.floor(retv.square_size*clock_ratio) + retv.pool_width = pool_width; + retv.pool_piece_size = math.floor(retv.square_size*pool_piece_ratio) + + local d = Point(math.floor((args.width-retv.square_size*(args.grid_size.x+ + 2*border_ratio+clock_ratio+2*clock_border_ratio))/2), + math.floor((args.height-retv.square_size*(args.grid_size.y+2*border_ratio))/2)); + local clock_border = math.floor(retv.square_size*clock_border_ratio) + local clock_height = math.floor(retv.clock_size*clock_height_ratio) + local panel_x = retv.square_size*args.grid_size.x + 2*retv.border_size + clock_border; + retv.board_position = d + Point(retv.border_size, retv.border_size) + retv.clock0_position = d + Point(panel_x, clock_border_ratio*retv.square_size) + retv.clock1_position = d + Point(panel_x, retv.square_size*args.grid_size.y + 2*retv.border_size + - clock_height - clock_border) + retv.pool0_position = Point(d.x + panel_x, retv.clock0_position.y+clock_height+clock_border); + retv.pool1_position = Point(d.x + panel_x, retv.clock1_position.y-clock_border); + + return retv +end + + +theme.border = function(b, args) + b = math.floor(b*0.7) + local w = args.width; + local h = args.height; + local tr = Image(b, b); tr:clear(); tr:draw_svg(Rect(0,0,b,b), "border_corner.svg"); + local tl = Image(b, b); tl:set_paint_over(false); tl:rotate(270); tl:translate(0,b); tl:draw_image(Rect(0,0,b,b), tr) + local bl = Image(b, b); bl:set_paint_over(false); bl:rotate(180); bl:translate(b,b); bl:draw_image(Rect(0,0,b,b), tr) + local br = Image(b, b); br:set_paint_over(false); br:rotate(90); br:translate(b,0); br:draw_image(Rect(0,0,b,b), tr) + local t = Image(w, b); t:clear(); t:draw_svg(Rect(0,0,w,b), "border_top.svg"); + local bt = Image(w, b); bt:set_paint_over(false); bt:rotate(180); bt:translate(w,b); bt:draw_image(Rect(0,0,w,b), t) + local l = Image(b, h); l:set_paint_over(false); l:rotate(270); l:translate(0,h); l:draw_image(Rect(0,0,h,b), t) + local r = Image(b, h); r:set_paint_over(false); r:rotate(90); r:translate(b,0); r:draw_image(Rect(0,0,h,b), t) + return { + [Rect(-b,-b,b,b)] = tl, + [Rect(w,-b,b,b)] = tr, + [Rect(-b,h,b,b)] = bl, + [Rect(w,h,b,b)] = br, + [Rect(0,-b,w,b)] = t, + [Rect(0,h,w,b)] = bt, + [Rect(-b,0,b,h)] = l, + [Rect(w,0,b,h)] = r + } +end + +theme.border_color = function() + return "#108060"; +end + +theme.border_font = function() + return theme.options.border_font.value; +end + +theme.wallpaper = function() + if(theme.options.wallpaper.value) then + local i = Image(theme.options.wallpaper.sub_options.file.value, false) + if(theme.options.wallpaper.sub_options.blur.value) then + i:exp_blur(5); + end + return i + else + return {} + end +end + +function create_clock(file, col) + return function(w) + local h = math.floor(w*clock_height_ratio) + local i = Image(w,h) + i:clear() + i:draw_svg(Rect(0,0,w,h), file) + return i + end +end + +theme.clock_active_background = create_clock("active_clock.svg", "#ff8080") +theme.clock_inactive_background = create_clock("inactive_clock.svg", "#e0e0e0") + +theme.clock_active_text = function(size) + return Brush("#000000") +end + +theme.clock_inactive_text = function(size) + return Brush("#a0a0a0") +end + +theme.clock_background_offset = function(w) + return Point() +end + +theme.clock_height = function(w) + return math.floor(w*clock_height_ratio) +end + +theme.clock_caption_rect = function(w) + local h = math.floor(w*clock_height_ratio) + return Rect(0, h*0.04, w, h*0.2) +end + +theme.clock_time_rect = function(w) + local h = math.floor(w*clock_height_ratio) + return Rect(0, h*0.23, w, h*0.6) +end + +theme.clock_player_rect = function(w) + local h = math.floor(w*clock_height_ratio) + return Rect(0, h*0.78, w, h*0.21) +end + +theme.clock_caption_font = function() + return theme.options.clock_font1.value; +end + +theme.clock_time_font = function() + return theme.options.clock_font2.value; +end + +theme.clock_player_font = function() + return theme.options.clock_font1.value; +end + diff --git a/data/themes/controls/XBoard/theme_xboard.desktop b/data/themes/controls/XBoard/theme_xboard.desktop new file mode 100644 index 0000000..830dec1 --- /dev/null +++ b/data/themes/controls/XBoard/theme_xboard.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=XBoard +Type=Application +Comment=XBoard style +X-Tagua-ThemeType=Controls +X-Tagua-Variants=any diff --git a/data/themes/controls/XBoard/theme_xboard.lua b/data/themes/controls/XBoard/theme_xboard.lua new file mode 100644 index 0000000..edc56d0 --- /dev/null +++ b/data/themes/controls/XBoard/theme_xboard.lua @@ -0,0 +1,91 @@ +import("piece_theme.lua") + + + +local border_ratio = 0 +local clock_height_ratio = 0.23 +local clock_border_ratio = 0 +local clock_ratio = 4 +local pool_width = 3 +local pool_piece_ratio = clock_ratio/pool_width + +theme.layout = function(args) + retv = {} + retv.square_size = math.floor(math.min( + args.width/(args.grid_size.x+2*border_ratio), + args.height/(args.grid_size.y+2*border_ratio+clock_ratio*clock_height_ratio+2*clock_border_ratio) ) ) + retv.border_size = math.floor(retv.square_size*border_ratio) + retv.clock_size = math.floor(retv.square_size*clock_ratio) + retv.pool_width = pool_width; + retv.pool_piece_size = math.floor(retv.square_size*pool_piece_ratio) + + local clock_border = math.floor(retv.square_size*clock_border_ratio) + local clock_height = math.floor(retv.clock_size*clock_height_ratio) + + local x = math.floor(args.width/2 - retv.border_size-args.grid_size.y*retv.square_size/2) + retv.board_position = Point(x + retv.border_size, retv.border_size+clock_height+2*clock_border) + retv.clock0_position = Point(x + args.grid_size.x*retv.square_size+2*retv.border_size + -retv.clock_size-clock_border, clock_border) + retv.clock1_position = Point(x + clock_border, clock_border) + retv.pool0_position = Point(); + retv.pool1_position = Point(); + + return retv +end + +theme.border = function(b, args) + return {} +end + +theme.wallpaper = function() + return Image() +end + +function create_clock(col) + return function(w) + print("clock ",w) + local h = math.floor(w*clock_height_ratio) + local i = Image(w,h) + i:clear(col) + i:draw_line(Point(0,0),Point(w,0), "black", 2); + i:draw_line(Point(0,0),Point(0,h), "black", 2); + i:draw_line(Point(w,h),Point(w,0), "black", 2); + i:draw_line(Point(w,h),Point(0,h), "black", 2); + return i + end +end + +theme.clock_active_background = create_clock("black") +theme.clock_inactive_background = create_clock("white") + +theme.clock_active_text = function(size) + return Brush("white") +end + +theme.clock_inactive_text = function(size) + return Brush("black") +end + +theme.clock_background_offset = function(w) + return Point() +end + +theme.clock_height = function(w) + return math.floor(w*clock_height_ratio) +end + +theme.clock_caption_rect = function(w) + local h = math.floor(w*clock_height_ratio) + return Rect(0, h*0.1, w*0.5, h*0.7) +end + +theme.clock_time_rect = function(w) + local h = math.floor(w*clock_height_ratio) + return Rect(w*0.4, h*0.05, w*0.7, h*0.8) +end + +theme.clock_player_rect = function(w) + local h = math.floor(w*clock_height_ratio) + return Rect(0, h*0.68, w, h*0.28) +end + diff --git a/data/themes/figurines/AlphaTTF/theme.desktop b/data/themes/figurines/AlphaTTF/theme.desktop new file mode 100644 index 0000000..d55b83b --- /dev/null +++ b/data/themes/figurines/AlphaTTF/theme.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Alpha +Type=Application +Comment=Alpha TTF figurines.| by Eric Bentzen +X-Tagua-ThemeType=Figurines +X-Tagua-Variants=Chess +X-Tagua-Script=theme.lua diff --git a/data/themes/figurines/AlphaTTF/theme.lua b/data/themes/figurines/AlphaTTF/theme.lua new file mode 100644 index 0000000..acb2b7c --- /dev/null +++ b/data/themes/figurines/AlphaTTF/theme.lua @@ -0,0 +1,13 @@ +import("piece_theme.lua") + +function Fig(char) + return Glyph("../../Pieces/AlphaTTF/Alpha.ttf", char, 2) +end + +theme.bishop = Fig("0xF085") +theme.king = Fig("0xF082") +theme.knight = Fig("0xF086") +theme.pawn = Fig("0xF087") +theme.queen = Fig("0xF083") +theme.rook = Fig("0xF084") + diff --git a/data/themes/figurines/AsciiShogiTTF/theme.desktop b/data/themes/figurines/AsciiShogiTTF/theme.desktop new file mode 100644 index 0000000..e043f5b --- /dev/null +++ b/data/themes/figurines/AsciiShogiTTF/theme.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Shogi +Type=Application +Comment=Shogi figurines +X-Tagua-ThemeType=Figurines +X-Tagua-Variants=Shogi,LargeShogi[default],ToriShogi[default] diff --git a/data/themes/figurines/AsciiShogiTTF/theme.lua b/data/themes/figurines/AsciiShogiTTF/theme.lua new file mode 100644 index 0000000..d1fe412 --- /dev/null +++ b/data/themes/figurines/AsciiShogiTTF/theme.lua @@ -0,0 +1,39 @@ +import("piece_theme.lua") +import("shogi_themelib.lua") + +function Fig(char) + return Glyph("../ShogiTTF/mikachan.ttf", char, 2) +end + +function Plain(str) + return Glyph(nil, str, 2) +end + +theme.num_9 = Plain("i") +theme.num_8 = Plain("h") +theme.num_7 = Plain("g") +theme.num_6 = Plain("f") +theme.num_5 = Plain("e") +theme.num_4 = Plain("d") +theme.num_3 = Plain("c") +theme.num_2 = Plain("b") +theme.num_1 = Plain("a") + +theme.phoenix = Plain("Ph") +theme.crane = Plain("Cr") +theme.pheasant = Plain("Pt") +theme.right_quail = Plain("RQ") +theme.left_quail = Plain("LQ") +theme.falcon = Plain("Fa") +theme.swallow = Plain("Sw") + +theme.king1 = Plain("K") +theme.king2 = Plain("K") +theme.rook = Plain("R") +theme.bishop = Plain("B") +theme.gold = Plain("G") +theme.silver = Plain("S") +theme.knight = Plain("N") +theme.lance = Plain("L") +theme.pawn = Plain("P") +theme.drunken_elephant = Plain("DE") diff --git a/data/themes/figurines/FantasyTTF/Fantasy.sfd b/data/themes/figurines/FantasyTTF/Fantasy.sfd new file mode 100644 index 0000000..b408dcb --- /dev/null +++ b/data/themes/figurines/FantasyTTF/Fantasy.sfd @@ -0,0 +1,614 @@ +SplineFontDB: 1.0 +FontName: Fantasy +FullName: Fantasy +FamilyName: Fantasy +Weight: Medium +Copyright: Created by Monge Maurizio with FontForge 1.0 (http://fontforge.sf.net) +Comments: 2006-10-15: Created. +Version: 001.000 +ItalicAngle: 0 +UnderlinePosition: -100 +UnderlineWidth: 50 +Ascent: 800 +Descent: 200 +NeedsXUIDChange: 1 +XUID: [1021 645 1811818106 7095199] +FSType: 0 +OS2Version: 0 +OS2_WeightWidthSlopeOnly: 0 +OS2_UseTypoMetrics: 0 +CreationTime: 1160940435 +ModificationTime: 1160942325 +OS2TypoAscent: 0 +OS2TypoAOffset: 1 +OS2TypoDescent: 0 +OS2TypoDOffset: 1 +OS2TypoLinegap: 90 +OS2WinAscent: 0 +OS2WinAOffset: 1 +OS2WinDescent: 0 +OS2WinDOffset: 1 +HheadAscent: 0 +HheadAOffset: 1 +HheadDescent: 0 +HheadDOffset: 1 +TtfTable: cvt 4 +!$MDh +EndTtf +Encoding: ISO8859-1 +UnicodeInterp: none +NameList: Adobe Glyph List +DisplaySize: -36 +AntiAlias: 1 +FitToEm: 1 +WinInfo: 56 28 7 +BeginChars: 256 6 +StartChar: b +Encoding: 98 98 0 +Width: 1000 +VWidth: 1050 +Flags: H +TeX: 0 0 0 0 +HStem: -8.5625 40<218.008 384.809 471.262 687.496> 46.5817 36.3245<140.961 227.356> 49.1929 39.8071<643.986 719.243> 71.3438 64.5<341.854 507.645> 95.8438 15.5<338.774 509.714> 159.938 40<317.437 525.223> 441.76 40.928<429.74 456.022> +VStem: 175.844 39.937<302.476 412.297> 264.75 39.969<128.658 157.683> 541.219 39.937<127.562 160.272> 623.718 39.8131<342.105 481.557> +Fore +576.375 47.875 m 0 + 565.317 50.9414 534.45 73.8389 414.875 71.2812 c 0 + 372.666 70.1074 331.72 68.6787 296.656 54.3438 c 1 + 252.798 24.0811 191.436 58.0225 149.188 45.375 c 1 + 149.178 44.8076 148.574 45.3555 147.531 44.3125 c 1 + 148.566 45.3477 149.569 43.498 150.531 42.9688 c 0 + 174.341 29.8682 292.742 26.1514 349.156 34.2188 c 0 + 393.085 45.0811 408.373 80.1035 464.375 48.5312 c 0 + 509.018 23.3633 555.314 32.7598 612.469 31.4375 c 0 + 649.476 32.168 685.578 33.5977 717.438 44 c 1 + 717.498 44.1338 717.559 44.3184 717.781 44.6562 c 1 + 701.376 60.3877 629.589 33.1201 576.375 47.875 c 0 +381.906 496.219 m 1 + 360.732 491.412 377.284 461.89 367.559 449.711 c 0 + 353.561 432.185 323.711 452.908 308 445.031 c 1 + 308 445.031 305.977 441.247 310.156 436.125 c 0 + 318.301 425.899 362.897 436.405 368.125 410.438 c 0 + 378.39 359.451 373.834 302.77 394.119 278.141 c 1 + 395.832 277.962 398.241 279.676 398.406 279.656 c 1 + 398.406 280.713 398.494 281.768 398.656 282.812 c 0 + 406.5 333.346 364.175 421.947 405.094 425.5 c 0 + 436.735 428.247 455.249 432.008 453.656 441.531 c 0 + 453.523 442.323 453.546 442.491 453.594 442.562 c 1 + 432.899 448.518 390.797 428.101 384.812 457.438 c 0 + 379.559 483.192 389.352 484.804 381.906 496.219 c 1 +330.219 486.344 m 1 + 339.836 545.827 415.31 555.271 423.875 496.375 c 0 + 424.947 491.104 425.264 486.668 425.312 482.688 c 1 + 449.712 486.274 486.838 485.491 493.094 448.125 c 0 + 496.731 426.395 482.842 409.954 480.844 408.844 c 1 + 465.041 392.308 445.1 388.37 428.094 386.938 c 1 + 432.916 344.526 443.375 313.999 438.312 278.281 c 0 + 437.522 252.806 414.792 236.56 391.625 238.344 c 1 + 391.625 238.219 l 1 + 334.832 240.26 335.04 358.478 330.938 389.844 c 1 + 304.847 392.782 291.418 395.44 279.375 410.562 c 0 + 261.766 430.928 264.103 466.926 289.438 480.438 c 0 + 303.958 487.717 318.029 487.892 330.219 486.344 c 1 +281.219 187 m 1 + 345.416 205.812 479.708 202.001 561.219 190.312 c 1 + 581.207 278.339 557.71 348.99 543.25 393.781 c 0 + 516.092 472.248 481.029 548.495 429.597 611.387 c 2 + 415.938 627.281 l 2 + 400.074 644.537 383.198 660.573 365.156 674.438 c 1 + 301.601 612.755 220.069 462.872 215.781 364.188 c 2 + 215.781 364 l 2 + 210.78 269.22 243.053 233.94 264.938 203 c 0 + 270.679 195.471 276.316 189.861 281.219 187 c 1 +364.5 719.875 m 0 + 379.281 719.875 419.698 680.864 430.63 669.858 c 1 + 451.122 694.965 486.237 724.805 501.031 725.844 c 0 + 511.118 726.553 519.089 721.595 522.344 718.469 c 0 + 602.036 641.933 740.501 381.979 612.938 204.938 c 0 + 610.607 200.945 607.55 196.837 602.681 193.101 c 1 + 601.102 184.759 599.193 176.45 596.844 168.219 c 1 + 594.83 160.556 589.16 153.284 583.458 150.643 c 1 + 576.94 119.082 588.002 102.822 572.964 92.1699 c 1 + 587.781 86.25 l 2 + 613.727 79.292 663.701 89.3623 682.156 89 c 0 + 704.35 89.0488 734.334 89.5254 746.969 72.0312 c 1 + 770.938 48.5918 752.146 13.4727 733 6.96875 c 0 + 668.323 -15 509.575 -12.2266 476.156 -0.125 c 0 + 455.557 4.72754 442.366 17.8652 426.938 21.6875 c 1 + 378.21 10.6992 401.271 -16.9131 219.688 -8.40625 c 0 + 161.423 -4.78223 159.365 -4.65723 131.156 7.96875 c 0 + 98.4746 22.6074 102.601 70.9287 131.5 81.7812 c 0 + 188.639 103.239 241.317 66.6006 276.982 89.21 c 1 + 267.453 93.8242 265.855 102.91 265.719 106.438 c 2 + 263.979 150.613 l 1 + 237.575 163.593 202.265 223.066 196.844 234.938 c 0 + 108.795 430.657 321.654 719.875 364.5 719.875 c 0 +393.995 278.153 m 1 + 393.978 278.164 393.969 278.156 393.969 278.156 c 2 + 393.995 278.153 l 1 +304.844 129.562 m 1 + 374.982 137.23 447.402 138.557 541.219 130.438 c 1 + 541.378 137.378 541.639 144.842 542.878 152.464 c 1 + 464.841 162.359 354.342 163.141 303.966 151.702 c 1 + 304.719 132.906 l 2 + 304.785 131.234 304.779 131.204 304.844 129.562 c 1 +607.938 279.5 m 1 + 661.873 418.16 571.25 609.487 502.062 682.125 c 1 + 485.429 670.79 470.646 656.264 457.938 639.844 c 1 + 515.251 571.07 552.508 489.28 580.969 407.125 c 1 + 595.68 366.56 605.516 323.297 607.938 279.5 c 1 +EndSplineSet +EndChar +StartChar: k +Encoding: 107 107 1 +Width: 1000 +VWidth: 1050 +Flags: H +TeX: 0 0 0 0 +Fore +483.125 761.844 m 1 + 468.862 765.948 453.15 765.812 445.656 765.812 c 0 + 439.344 765.812 419.415 764.378 414.094 761.625 c 1 + 412.661 732.961 438.275 684.119 420.453 668.75 c 0 + 405.175 655.574 351.876 683.04 305.5 672.281 c 1 + 302.491 669.165 301.612 661.915 301.281 646.25 c 0 + 301.47 634.042 303.75 622.746 308.531 615.031 c 1 + 347.581 609.231 420.423 649.468 422.406 611.625 c 0 + 423.532 590.146 419.194 570.889 414.718 553.07 c 1 + 419.561 553.551 424.282 553.81 428.781 553.938 c 2 + 429.031 553.938 l 2 + 434.711 554.025 440.301 553.949 446.173 553.51 c 1 + 441.772 572.787 429.074 628.699 458.594 630.156 c 0 + 498.794 632.139 532.185 619.32 560.312 624.531 c 1 + 567.778 631.726 571.53 664.904 562.969 680.062 c 1 + 524.688 683.501 444.517 643.26 465.281 701.156 c 2 + 472.594 721.781 l 2 + 477.091 735.016 481.423 750.648 483.125 761.844 c 1 +445.469 801.562 m 0 + 537.137 801.562 524.904 764.375 506.281 709.719 c 1 + 551.253 719.925 576.984 717.597 585.094 709.719 c 0 + 618.906 676.79 603.192 597.638 571.5 590.156 c 0 + 535.46 581.646 503.402 591.331 475.969 593.875 c 1 + 476.882 570.475 485.228 546.39 485.698 544.762 c 1 + 495.802 540.45 505.326 534.23 512.912 525.42 c 1 + 598.413 559.422 743.518 537.442 799.062 455.75 c 0 + 824.473 421.421 826.775 376.365 812.406 338.688 c 0 + 778.33 250.768 710.828 210.229 670.812 140.875 c 0 + 658.8 120.056 654.895 97.7393 636.247 91.8066 c 1 + 620.077 23.8467 627.825 -2.79297 602.781 -3.53125 c 0 + 512.726 -6.1875 371.207 -7.06445 274.719 -3.03125 c 0 + 249.16 -1.95117 258.43 26.5059 242.86 89.2256 c 1 + 232.008 91.5312 221.57 97.9336 218.375 107.438 c 0 + 207.96 138.416 197.853 141.945 162.438 187.719 c 0 + 130.559 232.865 89.2324 278.182 70.2188 338.656 c 0 + 45.7598 406.424 78.7549 468.3 108.688 491.094 c 0 + 127.101 506.084 175.025 541.094 274.531 541.094 c 0 + 301.033 541.443 328.12 537.545 353.565 527.523 c 1 + 360.115 534.088 367.492 539.048 375.26 542.79 c 1 + 378.897 559.539 383.215 574.859 385.375 589.281 c 1 + 369.947 585.665 303.176 567.326 285.219 586.75 c 0 + 268.94 604.375 265.845 627.087 265.531 645.688 c 2 + 265.531 646.344 l 2 + 265.647 651.833 265.016 698.671 293.406 706.25 c 0 + 327.001 715.218 358.962 709.449 387.906 704.062 c 1 + 377.194 752.29 356.144 801.562 445.469 801.562 c 0 +335.331 491.595 m 1 + 315.711 498.688 294.874 501.58 272.719 501.031 c 2 + 272.375 501.031 l 2 + 181.065 500.449 75.5928 461.4 108.344 350.719 c 0 + 124.094 300.926 161.169 258.826 194.875 211.094 c 0 + 215.694 182.807 238.332 165.814 253.188 128.156 c 1 + 326.853 128.949 474.298 126.203 621.531 130.656 c 1 + 624.938 136.523 628.43 150.519 636.406 161.25 c 0 + 682.201 240.385 746.252 278.696 775.062 353.031 c 0 + 801.1 421.279 740.844 476.582 663.031 493.5 c 0 + 617.838 503.573 569.757 504.413 528.56 488.341 c 1 + 530.976 469.945 527.425 452.27 522.7 436.562 c 1 + 524.373 436.672 587.869 444.339 616.156 426.062 c 0 + 652.549 402.465 661.97 356.093 649.219 318.625 c 0 + 628.606 258.054 566.659 236.066 551.55 236.561 c 0 + 536.462 236.204 478.241 272.003 473.688 337.25 c 0 + 455.596 434.975 501.496 447.63 486.32 493.448 c 0 + 474.323 519.447 400.447 521.589 379.781 496.844 c 1 + 363.219 466.955 381.57 434.173 386.452 419.79 c 0 + 417.565 328.116 360.239 256.024 339.526 241.812 c 0 + 314.128 224.386 236.216 292.894 228.219 334.438 c 0 + 217.361 371.723 236.206 412.675 276.781 427.844 c 0 + 277.091 427.943 277.376 428.092 277.688 428.125 c 1 + 299.843 436.26 320.362 435.288 338.316 434.158 c 1 + 332.938 452.38 331.028 472.285 335.331 491.595 c 1 +510.153 395.816 m 1 + 506.479 369.176 512.84 352.054 513.5 340.844 c 0 + 515.01 315.196 531.266 290.866 553.896 277.685 c 1 + 614.361 296.185 631.49 366.121 595.438 391.625 c 1 + 573.332 401.147 543.841 396.214 510.153 395.816 c 1 +324.205 282.732 m 1 + 349.946 311.448 360.16 354.6 352.306 392.97 c 1 + 314.567 392.41 312.709 397.179 289.438 389.938 c 0 + 273.396 384.946 261.748 362.312 266.562 345.781 c 0 + 274.613 318.993 297.191 297.676 324.205 282.732 c 1 +594.717 89.8779 m 1 + 491.03 87.418 387.492 88.2793 284.144 88.5605 c 1 + 288.664 68.417 291.529 49.5176 293.281 36.375 c 1 + 381.749 33.332 500.989 33.9717 585 36.125 c 1 + 586.999 49.2988 590.17 69.126 594.717 89.8779 c 1 +EndSplineSet +EndChar +StartChar: n +Encoding: 110 110 2 +Width: 1000 +VWidth: 1040 +Flags: H +TeX: 0 0 0 0 +Fore +151.469 333.469 m 0 + 155.799 333.877 160.352 333.456 164.656 331.969 c 0 + 173.005 329.195 178.561 321.292 178.346 312.497 c 0 + 178.13 303.701 172.193 296.08 163.719 293.719 c 1 + 163.345 288.26 160.751 283.191 156.541 279.696 c 0 + 152.331 276.2 146.872 274.582 141.438 275.219 c 0 + 141.336 275.229 141.234 275.241 141.131 275.253 c 1 + 153.652 263.961 163.606 264.513 174.375 268.344 c 0 + 181.552 270.897 188.25 276.376 193.312 282 c 1 + 195.373 285.921 197.42 289.515 199.188 292.312 c 0 + 200.638 294.607 201.627 296.177 203.438 298.375 c 0 + 203.891 298.925 204.387 299.524 205.438 300.531 c 0 + 206.488 301.538 205.419 304.122 216.094 305.969 c 0 + 218.763 306.431 222.804 306.521 227.125 304.75 c 0 + 231.446 302.979 235.161 299.244 236.969 296.031 c 0 + 240.585 289.605 239.649 286.333 239.469 284.344 c 0 + 239.106 280.364 238.514 279.639 238.156 278.688 c 0 + 235.661 272.055 232.086 265.799 227.75 259.969 c 1 + 239.896 267.127 255.235 277.74 270.625 288.906 c 0 + 287.182 300.919 303.711 313.377 317.469 322.875 c 0 + 324.348 327.624 330.446 331.617 336.219 334.719 c 0 + 339.105 336.27 341.865 337.626 345.375 338.75 c 0 + 348.885 339.874 353.463 342.062 362.219 338.719 c 0 + 434.666 311.051 506.009 367.375 505.844 426.375 c 0 + 505.585 437.421 514.329 446.585 525.375 446.844 c 0 + 536.421 447.103 545.585 438.358 545.844 427.312 c 0 + 545.856 427.036 545.832 426.776 545.844 426.5 c 0 + 547.061 397.716 545.097 371.343 534.125 346.625 c 0 + 523.048 321.67 503.157 299.879 473.031 279.625 c 0 + 418.236 242.786 312.323 169.768 288.562 74.5 c 0 + 287.335 69.5781 288.375 58.1074 292.344 50.375 c 0 + 296.312 42.6426 300.172 39.5615 305.969 39.4688 c 0 + 424.381 37.582 565.449 37.0996 683.031 39.2812 c 0 + 685.438 39.3262 690.168 41.2314 696.906 53.3125 c 0 + 703.645 65.3936 710.031 85.4707 713.969 110.531 c 0 + 721.844 160.653 720.672 230.701 706.062 303.594 c 0 + 676.843 449.379 595.579 604.517 433.969 654.25 c 0 + 431.537 654.998 429.266 656.189 427.281 657.781 c 0 + 409.005 672.532 396.66 692.898 386.031 709.125 c 0 + 384.161 711.98 382.464 714.472 380.75 717 c 1 + 379.326 700.725 379.759 681.503 371.969 663.469 c 0 + 369.401 657.527 364.117 653.196 357.788 651.843 c 0 + 351.459 650.49 344.865 652.283 340.094 656.656 c 0 + 327.966 667.784 320.94 680.703 312.25 690.875 c 0 + 310.379 693.064 308.532 695.042 306.656 696.906 c 1 + 307.43 692.214 308.333 687.384 309.469 682.5 c 0 + 311.413 674.145 313.543 665.913 314.656 657.531 c 0 + 315.77 649.149 317.721 638.943 308.719 627.656 c 0 + 283.543 596.088 274.868 581.807 268.594 566.594 c 0 + 262.319 551.381 257.951 532.617 244.25 496.312 c 0 + 229.625 457.561 195.308 396.661 159.219 354.344 c 0 + 153.053 347.113 148.087 339.501 144.235 331.984 c 1 + 146.499 332.716 148.947 333.231 151.469 333.469 c 0 +338.094 552.5 m 0 + 342.301 552.246 346.559 551.722 350.812 550.938 c 0 + 361.677 548.934 368.861 538.505 366.859 527.641 c 0 + 364.857 516.776 354.427 509.592 343.562 511.594 c 0 + 342.947 511.707 342.337 511.812 341.731 511.912 c 1 + 344.078 508.032 345.055 503.435 344.438 498.875 c 0 + 343.706 492.836 341.959 486.771 337.875 481.219 c 0 + 333.791 475.666 326.848 471.243 319.969 470.094 c 0 + 306.21 467.795 296.568 474.454 289.5 481.656 c 0 + 286.866 484.257 285.084 487.444 284.2 490.839 c 1 + 279.527 487.799 273.725 486.809 268.202 488.262 c 0 + 261.198 490.104 255.738 495.59 253.926 502.602 c 0 + 252.114 509.613 254.234 517.058 259.469 522.062 c 0 + 280.737 543.23 308.647 554.277 338.094 552.5 c 0 +371.281 771.531 m 0 + 373.35 771.747 375.395 771.719 377.312 771.406 c 0 + 390.752 769.213 397.098 761.37 403 754.312 c 0 + 408.902 747.255 414.107 739.295 419.5 731.062 c 0 + 429.577 715.678 440.533 699.756 450.312 690.938 c 1 + 627.471 633.981 714.58 464.648 745.281 311.469 c 0 + 760.765 234.216 762.307 160.588 753.469 104.344 c 0 + 749.05 76.2217 742.212 52.4326 731.844 33.8438 c 0 + 721.476 15.2549 705.23 -0.320312 683.75 -0.71875 c 0 + 565.464 -2.91309 424.149 -2.42285 305.344 -0.53125 c 0 + 282.402 -0.166016 265.232 15.5977 256.75 32.125 c 0 + 248.268 48.6523 245.436 66.8906 249.75 84.1875 c 0 + 274.365 182.881 361.806 251.63 421.281 292.781 c 1 + 399.838 289.834 377.165 291.562 354.531 299.062 c 1 + 351.254 297.26 346.258 294.138 340.219 289.969 c 0 + 327.609 281.264 311.019 268.81 294.094 256.531 c 0 + 277.169 244.252 259.965 232.135 244.625 223.438 c 0 + 236.955 219.089 229.89 215.527 222.281 213.25 c 0 + 214.673 210.973 203.976 208.323 192.969 216.844 c 0 + 188.307 220.453 185.401 224.89 183.625 229.5 c 1 + 159.831 222.733 129.83 228.257 107.281 252.562 c 0 + 92.5352 268.457 91.417 289.854 95.4375 312.094 c 0 + 99.458 334.334 110.216 358.511 128.781 380.281 c 0 + 160.388 417.345 194.83 478.688 206.812 510.438 c 0 + 219.869 545.036 223.64 562.48 231.625 581.844 c 0 + 239.329 600.523 250.813 618.832 275.031 649.469 c 1 + 275.119 650.062 275.18 650.924 275 652.281 c 0 + 274.367 657.046 272.557 664.732 270.531 673.438 c 0 + 266.48 690.848 260.581 712.629 267.438 735.469 c 0 + 270.361 745.204 280.118 751.195 290.125 749.406 c 0 + 313.004 745.315 329.197 731.893 340.688 718.969 c 1 + 340.829 720.367 340.988 721.656 341.125 723.031 c 0 + 342.049 732.302 342.939 741.087 346.094 750.094 c 0 + 347.671 754.597 349.732 759.521 354.844 764.406 c 0 + 358.677 768.069 365.076 770.884 371.281 771.531 c 0 +EndSplineSet +EndChar +StartChar: q +Encoding: 113 113 3 +Width: 1000 +VWidth: 1040 +Flags: H +TeX: 0 0 0 0 +Fore +115.125 474.719 m 0 + 99.7812 474.719 87.4443 455.043 93.1562 441.062 c 0 + 98.4014 428.224 121.023 421.274 133.515 432.582 c 0 + 149.388 446.95 138.55 475.837 115.125 474.719 c 0 +56.125 425.938 m 1 + 56.1562 425.969 l 1 + 37.6289 466.669 69.1982 513.902 113.219 514.625 c 1 + 113.219 514.656 l 1 + 113.625 514.656 l 2 + 113.795 514.658 113.955 514.688 114.125 514.656 c 1 + 143.925 515.666 161.199 497.272 164.562 493.625 c 1 + 164.531 493.594 l 1 + 185.954 472.207 186.8 439.896 171.762 416.359 c 1 + 191.233 392.181 210.862 368.746 231.906 347.312 c 1 + 222.834 411.217 216.43 476.043 217.013 541.339 c 1 + 201.923 547.531 188.982 559.244 182 575.312 c 1 + 181.969 575.281 l 1 + 181.922 575.379 181.615 576.08 181.531 576.281 c 1 + 181.562 576.281 l 1 + 163.265 616.246 193.118 667.031 243.969 665.281 c 0 + 260.842 664.697 276.899 657.585 288.75 645.25 c 1 + 288.781 645.281 l 1 + 288.98 645.093 289.658 644.413 289.75 644.312 c 1 + 289.719 644.281 l 1 + 315.129 619.177 311.907 578.594 287.487 555.231 c 1 + 287.683 554.524 315.245 437.864 357.031 375.125 c 1 + 367.561 452.847 383.829 530.352 408.895 605.317 c 1 + 402.273 611.266 396.786 618.669 393.031 627.344 c 1 + 392.969 627.312 l 1 + 392.921 627.413 392.616 628.136 392.531 628.344 c 1 + 392.562 628.344 l 1 + 363.46 691.921 450.876 749.154 500.25 696.812 c 1 + 500.281 696.844 l 1 + 526.363 671.668 523.628 626.754 494.062 603.406 c 1 + 494.094 603.375 l 1 + 493.997 603.291 493.299 602.718 493.094 602.562 c 1 + 493.062 602.594 l 1 + 489.417 599.57 485.549 597.05 481.53 595.013 c 1 + 480.367 491.137 486.014 427.452 493.812 386.844 c 1 + 525.616 452.681 572.493 529.854 601.203 566.851 c 1 + 601 567.312 l 1 + 600.969 567.281 l 1 + 600.922 567.379 600.615 568.08 600.531 568.281 c 1 + 600.562 568.281 l 1 + 582.265 608.246 612.118 659.031 662.969 657.281 c 0 + 679.842 656.697 695.899 649.585 707.75 637.25 c 1 + 707.781 637.281 l 1 + 707.98 637.093 708.658 636.413 708.75 636.312 c 1 + 708.719 636.281 l 1 + 735.542 609.781 730.46 566.033 702.219 543.5 c 1 + 702.25 543.469 l 1 + 702.156 543.387 701.479 542.839 701.281 542.688 c 1 + 701.25 542.719 l 1 + 689.535 532.929 675.506 528.372 661.554 528.319 c 1 + 644.643 486.175 631.903 442.367 623.781 397.688 c 1 + 623.781 397.625 l 1 + 619.435 374.081 616.274 350.712 617.219 328.656 c 1 + 644.406 357.782 686.581 416.552 720.248 450.207 c 1 + 708.467 488.745 738.507 530.559 779.75 531.438 c 1 + 779.75 531.469 l 1 + 779.956 531.48 780.678 531.5 780.781 531.5 c 1 + 780.781 531.469 l 1 + 800.157 532.273 818.938 524.166 831.625 510.344 c 1 + 831.594 510.312 l 1 + 858.193 483.574 852.942 439.881 824.562 417.531 c 1 + 824.594 417.5 l 1 + 824.503 417.422 823.847 416.895 823.656 416.75 c 1 + 823.625 416.781 l 1 + 808.222 404.072 788.892 400.307 771 403.881 c 1 + 715.619 322.125 669.789 188.215 668.844 133.875 c 0 + 668.524 115.465 650.369 114.214 646.735 113.733 c 1 + 637.768 63.3037 638.882 20.4844 622.875 9.28125 c 1 + 599.686 -13.2461 311.864 -5.35156 267.844 8.625 c 0 + 249.778 14.3613 248.798 17.4971 236.906 84.2812 c 0 + 233.959 100.838 232.794 110.921 232.336 117.62 c 1 + 219.878 120.409 215.005 129.479 214.969 137.438 c 0 + 214.751 185.638 122.017 357.464 107.665 386.422 c 1 + 86.0176 389.516 65.9248 403.272 56.625 424.906 c 1 + 56.543 424.98 56.2129 425.723 56.125 425.938 c 1 +239.656 625.25 m 0 + 226.849 625.25 211.767 607.076 218.5 591.594 c 0 + 222.11 582.884 242.543 570.62 257.969 582.438 c 0 + 262.568 585.961 273.319 603.284 260.312 617.219 c 0 + 255.212 622.683 247.223 625.848 239.656 625.25 c 0 +782.031 491.531 m 0 + 768.335 491.531 753.513 473.652 760.312 457.469 c 0 + 764.095 448.764 783.917 436.832 799.5 448.625 c 0 + 803.175 451.407 815.012 469.363 802.219 483.219 c 0 + 797.245 488.607 789.116 491.939 782.031 491.531 c 0 +658.656 617.25 m 0 + 645.849 617.25 630.767 599.079 637.5 583.594 c 0 + 641.11 574.884 661.543 562.62 676.969 574.438 c 0 + 681.568 577.961 692.319 595.283 679.312 609.219 c 0 + 674.212 614.684 666.223 617.848 658.656 617.25 c 0 +450.625 677.25 m 0 + 436.164 677.25 423.491 657.874 429.5 643.594 c 0 + 433.182 634.843 453.419 622.639 468.938 634.438 c 0 + 485.986 647.4 475.794 679.202 450.625 677.25 c 0 +279.562 301.094 m 0 + 280.768 292.753 278.044 276.641 259.75 275.625 c 0 + 259.7 275.625 259.651 275.616 259.641 275.62 c 2 + 249.302 275.179 243.871 282.099 242.25 283.438 c 0 + 213.372 307.297 188.359 334.129 164.969 361.844 c 1 + 216.462 261.086 247.155 197.644 253.531 154.5 c 1 + 324.67 144.145 531.624 142.048 630.125 152.094 c 1 + 637.498 218.552 675.808 315.064 706.844 374 c 1 + 698.562 364.156 l 2 + 674.3 334.251 649.885 299.337 615.906 272.844 c 0 + 604.105 263.647 588.364 270.21 584.5 282.719 c 0 + 564.271 348.203 591.549 452.666 614.531 516.969 c 1 + 595.669 489.249 541.335 402.162 507.5 319.5 c 0 + 500.317 301.95 475.906 303.788 470.094 320.5 c 0 + 443.57 396.782 443.084 476.584 441.281 552.062 c 2 + 441.281 552.344 l 2 + 441.209 560.361 441.365 568.089 441.438 576 c 1 + 426.127 527.438 399.382 425.993 392.344 324.531 c 0 + 391.191 307.911 371.495 299.604 358.875 311.156 c 0 + 327.574 339.809 293.128 385.459 257.25 514.375 c 1 + 259.136 418.209 273.411 343.627 279.562 301.094 c 0 +259.601 275.616 m 1 + 259.263 275.595 l 1 + 259.406 275.594 l 2 + 259.471 275.6 259.536 275.609 259.601 275.616 c 1 +259.263 275.595 m 1 + 259.25 275.594 l 2 + 259.245 275.594 259.251 275.595 259.263 275.595 c 1 +605.47 109.806 m 1 + 542.544 105.411 463.487 105.288 447.703 105.288 c 0 + 343.004 105.288 290.516 109.848 273.205 111.602 c 1 + 275.808 90.4492 281.647 63.5137 285.625 45.5 c 1 + 345.234 33 558.176 34.0234 595.531 40.875 c 1 + 599.128 55.3643 601.526 83.8633 605.47 109.806 c 1 +EndSplineSet +EndChar +StartChar: r +Encoding: 114 114 4 +Width: 1000 +VWidth: 1040 +Flags: H +TeX: 0 0 0 0 +Fore +544.438 529.344 m 0 + 592.861 527.902 641.225 523.675 665.375 521.688 c 1 + 674.098 556.74 713.491 573.99 724.25 581.281 c 1 + 724.883 593.125 732.899 631.462 733.438 653.062 c 1 + 707.387 659.666 665.192 674.268 638.406 677.531 c 1 + 637.002 653.691 646.57 607.23 618 605.75 c 0 + 584.486 604.014 550.146 606.203 516.75 614.812 c 0 + 494.802 620.47 503.216 642.743 502.5 694.25 c 1 + 462.874 697.486 412.455 695.792 402.781 694.344 c 1 + 401.564 680.234 403.852 662.729 402.5 642.125 c 1 + 404.877 628.618 395.146 614.376 380.344 613.375 c 1 + 349.426 606.654 319.709 608.114 292.875 606.812 c 0 + 263.269 605.375 272.088 650.49 273.656 674.75 c 1 + 259.603 672.111 225.836 669.717 174.875 655.656 c 1 + 176.435 648.14 182.536 594.577 185.875 579.625 c 1 + 203.079 568.255 228.481 552.426 234.969 521.188 c 1 + 252.167 523.306 304.373 530.44 408.531 530.844 c 2 + 410.781 530.844 l 2 + 455.667 530.98 500.004 529.98 544.156 529.344 c 0 + 544.25 529.345 544.344 529.345 544.438 529.344 c 0 +362.688 650.781 m 1 + 361.89 726.611 355.454 736.312 438.469 736.312 c 0 + 552.857 736.312 543.673 735.39 541.781 650.25 c 1 + 560.192 646.723 579.176 645.251 598.312 645.312 c 1 + 598.43 665.075 597.395 671.828 598.438 678.25 c 1 + 598.438 678.25 598.507 707.335 615.5 716.25 c 0 + 635.252 726.59 719.566 698.636 719.594 698.625 c 0 + 725.68 696.207 771.24 692.609 773.125 667.469 c 0 + 775.609 634.201 767.295 604.338 764.094 577.812 c 0 + 763.729 565.128 756.048 554.067 746.75 548.188 c 0 + 702.53 518.167 714.467 528.285 703.844 511.094 c 1 + 705.583 513.896 704.552 512.029 703.406 506.188 c 0 + 701.073 494.302 691.068 479.481 675.938 480.719 c 2 + 646.224 483.134 l 1 + 646.95 373.977 646.42 268.827 647.951 159.457 c 1 + 662.752 147.172 679.995 126.037 752.281 112.844 c 0 + 791.677 105.653 780.242 1.76172 742.5 1.625 c 0 + 580.679 1.08984 418.8 0.318359 256.875 0.53125 c 0 + 161.555 -0.864258 142.425 1.01758 135.469 8 c 0 + 110.129 33.5029 116.7 101.589 143.938 109.188 c 0 + 215.728 129.215 239.509 155.576 244.581 158.813 c 1 + 244.014 267.977 244.216 373.031 246.912 482.481 c 1 + 219.802 479.376 221.611 478.944 216.312 480.875 c 0 + 195.469 488.472 195.781 513.452 195.312 514.875 c 0 + 189.33 535.558 153.459 545.971 149 561.938 c 0 + 140.979 590.774 140.646 618.429 136.125 642.281 c 0 + 132.811 659.765 129.012 683.776 149.656 690.125 c 0 + 204.546 707.006 257.815 713.521 273.719 715.281 c 0 + 319.471 720.343 316.312 683.798 312.438 647.469 c 1 + 330.01 647.935 347.142 648.402 362.688 650.781 c 1 +600.688 125.125 m 0 + 589.812 125.125 578.368 124.851 566.469 125.062 c 0 + 467.086 124.699 367.893 125.488 268.906 124.719 c 1 + 251.742 109.62 213.122 87.0703 162.969 72.0938 c 1 + 159.418 54.9023 160.33 47.8477 161.906 42.4375 c 1 + 190.205 40.9102 731.393 42.623 732.062 42.625 c 1 + 732.881 46.1396 733.382 52.0967 735.5 59.7188 c 1 + 736.479 68.3359 736.519 71.3486 736.188 74.1875 c 1 + 697.688 81.8711 657.095 95.082 625.781 123.938 c 1 + 617.803 124.752 609.496 125.125 600.688 125.125 c 0 +284.591 165.909 m 1 + 316.202 166.102 537.493 166.312 600.719 166.312 c 0 + 603.08 166.312 605.462 166.294 607.865 166.252 c 1 + 606.142 274.514 606.834 378.753 606.125 486.094 c 1 + 518.801 492 367.903 492.644 287.094 486.25 c 1 + 284.36 378.05 284.062 273.913 284.591 165.909 c 1 +EndSplineSet +EndChar +StartChar: p +Encoding: 112 112 5 +Width: 800 +VWidth: 1035 +Flags: HW +TeX: 0 0 0 0 +HStem: -2.1562 40<141.649 512.429> -1.1875 39.9062<165.43 262.793> 89.5938 40<222.924 439.496> 309.188 40<182.406 499.938> 391.375 42.789<284.745 392.096> 394.119 36.756<279.775 398.357> 619.727 40.044<260.275 414.492> +VStem: 192.332 39.962<461.645 592.247> 442.474 39.963<461.645 592.247> +Fore +236.812 129.594 m 2 + 428.812 129.594 l 2 + 444.23 129.811 454.142 112.826 446.37 99.5117 c 0 + 442.733 93.2812 436.025 89.4922 428.812 89.5938 c 2 + 236.812 89.5938 l 2 + 221.395 89.377 211.483 106.361 219.255 119.676 c 0 + 222.892 125.906 229.6 129.695 236.812 129.594 c 2 +499.938 349.188 m 1 + 412.297 409.343 250.04 399.293 182.406 349.188 c 1 + 499.938 349.188 l 1 +337.384 619.727 m 0 + 278.069 619.727 232.294 577.177 232.294 526.945 c 0 + 232.294 476.714 278.069 434.164 337.384 434.164 c 0 + 396.698 434.164 442.474 476.714 442.474 526.945 c 0 + 442.474 577.177 396.698 619.727 337.384 619.727 c 0 +337.384 659.771 m 0 + 416.156 659.771 482.438 601.249 482.438 526.945 c 0 + 482.438 483.394 459.666 445.264 424.956 421.162 c 1 + 532.073 400.061 563.75 343.174 568.875 342.031 c 1 + 579.847 328.663 570.411 309.188 553.531 309.188 c 2 + 400.365 309.188 l 1 + 415.294 190.678 471.331 161.622 528.938 125.812 c 0 + 582.077 92.7803 567.705 7.16992 500.469 -0.25 c 0 + 469.363 -3.68164 216.203 -3.25195 184.656 -1.1875 c 0 + 121.68 2.93457 102.395 85.7266 154.062 122.25 c 0 + 193.172 149.896 259.381 185.425 273.712 309.188 c 1 + 135.781 309.188 l 2 + 120.011 309.199 111.092 325.796 118.281 338.844 c 0 + 131.664 362.468 166.085 401.021 250.957 420.375 c 1 + 215.604 444.429 192.332 482.917 192.332 526.945 c 0 + 192.332 601.249 258.611 659.771 337.384 659.771 c 0 +360.312 309.188 m 1 + 313.844 309.188 l 1 + 298.334 168.232 213.108 115.01 177.156 89.5938 c 0 + 158.824 76.6338 157.959 40.6387 187.281 38.7188 c 0 + 217.137 36.7646 469.681 36.5869 496.094 39.5 c 0 + 533.419 43.6191 522.42 82.7832 507.844 91.8438 c 0 + 449.701 127.987 376.982 165.747 360.312 309.188 c 1 +EndSplineSet +EndChar +EndChars +EndSplineFont diff --git a/data/themes/figurines/FantasyTTF/Fantasy.ttf b/data/themes/figurines/FantasyTTF/Fantasy.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f1c2c65e7036888024056470dc4d575b48428a9d GIT binary patch literal 5132 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%0DW+~b*`5~g$% z%_|;bV^kHOh4Y8dvC!%+EwI|lwc!8odyaHC>m!6HQgA%u^t|*cz7QeWtu6_=Lq!tz9M`T6xG(9 z;)w7~Rp3*sp^M&w?K#d_Ko}Q3i(){2E6%ww@>2*pZu^-Gg5_PeOe&`KG>&K zl7?sdG)Mkdl4@=a1F z4J=1dVh7(VWS&gpd!a9T;f8FTT*X=)x$DRuBjoV*`r6L=`O^K5lvcMkFRqtX*RE}E zJi4(}dT3+kQfXytb7y618~M$8qcnPHXXncN^z;SfUXa}S)eH5_^_?-2gjhM$8V-OL z@|CsCowch-tR{=xz~x-V%KG_@YnRE7UBi5`#&;^~@tS0gOpz{rEtG2@MczHR`BHyS zq?&V6-Kkci(f!dAJBy=kBX1*_ODWOWn?oa+2RXaGeRX4Nv(#vy_C}-hqgB2ApO?K) uIgYbPLjLGX>vw#_V)V!r^4q?f9Jq2B;`E|ey==y?Y{x%fsE|{ literal 0 HcwPel00001 diff --git a/data/themes/figurines/FantasyTTF/theme.desktop b/data/themes/figurines/FantasyTTF/theme.desktop new file mode 100644 index 0000000..f5607aa --- /dev/null +++ b/data/themes/figurines/FantasyTTF/theme.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Fantasy +Type=Application +Comment=Google-like controls +X-Tagua-ThemeType=Figurines +X-Tagua-Variants=Chess[default] +X-Tagua-Script=theme.lua diff --git a/data/themes/figurines/FantasyTTF/theme.lua b/data/themes/figurines/FantasyTTF/theme.lua new file mode 100644 index 0000000..36daebe --- /dev/null +++ b/data/themes/figurines/FantasyTTF/theme.lua @@ -0,0 +1,13 @@ +import("piece_theme.lua") + +function Fig(char) + return Glyph("Fantasy.ttf", char, 3) +end + +theme.bishop = Fig("0x0062") +theme.king = Fig("0x006b") +theme.knight = Fig("0x006e") +theme.pawn = Fig("0x0070") +theme.queen = Fig("0x0071") +theme.rook = Fig("0x0072") + diff --git a/data/themes/figurines/ShogiTTF/mikachan.ttf b/data/themes/figurines/ShogiTTF/mikachan.ttf new file mode 100644 index 0000000000000000000000000000000000000000..42fd9118db75720c5c17607cd95bc5bb21df2092 GIT binary patch literal 8964 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 literal 0 HcwPel00001 diff --git a/data/themes/pieces/AlphaTTF/Alpha.ttf b/data/themes/pieces/AlphaTTF/Alpha.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d7e8baa5e3ee3e336ed7acb6ede2eca2afbfe9a3 GIT binary patch literal 40728 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

bEB>dW!?$VbRHBsU=9G}> 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 literal 0 HcwPel00001 diff --git a/data/themes/pieces/AlphaTTF/theme_babaschess.desktop b/data/themes/pieces/AlphaTTF/theme_babaschess.desktop new file mode 100644 index 0000000..70b0fd6 --- /dev/null +++ b/data/themes/pieces/AlphaTTF/theme_babaschess.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Alpha (BabasChess style) +Type=Application +Comment=Alpha TTF theme,|as BabasChess's default.| by Eric Bentzen +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/AlphaTTF/theme_babaschess.lua b/data/themes/pieces/AlphaTTF/theme_babaschess.lua new file mode 100644 index 0000000..2b95145 --- /dev/null +++ b/data/themes/pieces/AlphaTTF/theme_babaschess.lua @@ -0,0 +1,35 @@ +import("piece_theme.lua") +shadow = 7 +shadow_color = "#404040" +shadow_offset_x = 3 +shadow_offset_y = 3 +shadow_grow = 6 + +function fromGlyphBG(fg, background) + return function(glyph) + return function(size) + local i = Image(background) + local b = Brush(i) + b:scale(size/i.width, size/i.height) + return fromFontGlyph("Alpha.ttf", glyph, fg, b)(size) + end + end +end + +fromGlyphW = fromGlyphBG( "#1f1f1f", "gradient lightgrey.bmp") +fromGlyphB = fromGlyphBG( "#b1b1b1", "gradient darkgrey.bmp") + +theme.white_bishop = fromGlyphW("0xF062") +theme.white_king = fromGlyphW("0xF06B") +theme.white_knight = fromGlyphW("0xF068") +theme.white_pawn = fromGlyphW("0xF070") +theme.white_queen = fromGlyphW("0xF071") +theme.white_rook = fromGlyphW("0x00A0") + +theme.black_bishop = fromGlyphB("0xF062") +theme.black_king = fromGlyphB("0xF06B") +theme.black_knight = fromGlyphB("0xF068") +theme.black_pawn = fromGlyphB("0xF070") +theme.black_queen = fromGlyphB("0xF071") +theme.black_rook = fromGlyphB("0x00A0") + diff --git a/data/themes/pieces/AlphaTTF/theme_eboard.desktop b/data/themes/pieces/AlphaTTF/theme_eboard.desktop new file mode 100644 index 0000000..1c0b5c1 --- /dev/null +++ b/data/themes/pieces/AlphaTTF/theme_eboard.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Alpha (Eboard style) +Type=Application +Comment=Alpha TTF theme.| by Eric Bentzen +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/AlphaTTF/theme_eboard.lua b/data/themes/pieces/AlphaTTF/theme_eboard.lua new file mode 100644 index 0000000..894ff16 --- /dev/null +++ b/data/themes/pieces/AlphaTTF/theme_eboard.lua @@ -0,0 +1,36 @@ +import("piece_theme.lua") +shadow = 7 +shadow_color = "#404040" +shadow_offset_x = 3 +shadow_offset_y = 3 +shadow_grow = 6 + +function fromGlyphGrad(fg, grad1, grad2) + return function(glyph) + return function(size) + --local g = LinearGradient(Point(0.3*size,0), Point(0.7*size,0)) + local g = RadialGradient(Point(size*0.8,size*0.8), size*0.99) + g[1] = grad1 + g[0] = grad2 + return fromFontGlyph("Alpha.ttf", glyph, fg, g)(size) + end + end +end + +fromGlyphW = fromGlyphGrad("black", "#627183", "#DEEAEE") +fromGlyphB = fromGlyphGrad("black", "#292052", "#73697B") + +theme.white_bishop = fromGlyphW("0xF062") +theme.white_king = fromGlyphW("0xF06B") +theme.white_knight = fromGlyphW("0xF068") +theme.white_pawn = fromGlyphW("0xF070") +theme.white_queen = fromGlyphW("0xF071") +theme.white_rook = fromGlyphW("0x00A0") + +theme.black_bishop = fromGlyphB("0xF062") +theme.black_king = fromGlyphB("0xF06B") +theme.black_knight = fromGlyphB("0xF068") +theme.black_pawn = fromGlyphB("0xF070") +theme.black_queen = fromGlyphB("0xF071") +theme.black_rook = fromGlyphB("0x00A0") + diff --git a/data/themes/pieces/AlphaTTF/theme_jose.desktop b/data/themes/pieces/AlphaTTF/theme_jose.desktop new file mode 100644 index 0000000..be6a077 --- /dev/null +++ b/data/themes/pieces/AlphaTTF/theme_jose.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Alpha (Jose style) +Type=Application +Comment=Alpha TTF theme.| by Eric Bentzen +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/AlphaTTF/theme_jose.lua b/data/themes/pieces/AlphaTTF/theme_jose.lua new file mode 100644 index 0000000..aa393c8 --- /dev/null +++ b/data/themes/pieces/AlphaTTF/theme_jose.lua @@ -0,0 +1,25 @@ +import("piece_theme.lua") +shadow = 7 +shadow_color = "#404040" +shadow_offset_x = 3 +shadow_offset_y = 3 +shadow_grow = 6 + +function fromGlyph(glyph) + return fromFontGlyph("Alpha.ttf", glyph, "black", "white", 6.0) +end + +theme.white_bishop = fromGlyph("0xF062") +theme.white_king = fromGlyph("0xF06B") +theme.white_knight = fromGlyph("0xF068") +theme.white_pawn = fromGlyph("0xF070") +theme.white_queen = fromGlyph("0xF071") +theme.white_rook = fromGlyph("0x00A0") + +theme.black_bishop = fromGlyph("0xF06E") +theme.black_king = fromGlyph("0xF06C") +theme.black_knight = fromGlyph("0xF06A") +theme.black_pawn = fromGlyph("0xF06F") +theme.black_queen = fromGlyph("0xF077") +theme.black_rook = fromGlyph("0xF074") + diff --git a/data/themes/pieces/BerlinTTF/Berlin.ttf b/data/themes/pieces/BerlinTTF/Berlin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ce1558f2dac42bf29221872e195b976f9c69c93a GIT binary patch literal 79280 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 literal 0 HcwPel00001 diff --git a/data/themes/pieces/BerlinTTF/theme_jose.desktop b/data/themes/pieces/BerlinTTF/theme_jose.desktop new file mode 100644 index 0000000..00bd779 --- /dev/null +++ b/data/themes/pieces/BerlinTTF/theme_jose.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Berlin (Jose style) +Type=Application +Comment=Berlin TTF theme,|as Jose's default.| by Eric Bentzen +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/BerlinTTF/theme_jose.lua b/data/themes/pieces/BerlinTTF/theme_jose.lua new file mode 100644 index 0000000..d35cc62 --- /dev/null +++ b/data/themes/pieces/BerlinTTF/theme_jose.lua @@ -0,0 +1,28 @@ +-- this theme copies perfectly the default theme of jose, +-- except for the shadow that is better :) + +import("piece_theme.lua") +shadow = 7 +shadow_color = "#404040" +shadow_offset_x = 3 +shadow_offset_y = 3 +shadow_grow = 6 + +function fromGlyph(glyph) + return fromFontGlyph("Berlin.ttf", glyph, "black", "white", 6.0) +end + +theme.black_bishop = fromGlyph("0x006E") +theme.black_king = fromGlyph("0x006C") +theme.black_knight = fromGlyph("0x006A") +theme.black_pawn = fromGlyph("0x006F") +theme.black_queen = fromGlyph("0x0077") +theme.black_rook = fromGlyph("0x0074") + +theme.white_bishop = fromGlyph("0x0062") +theme.white_king = fromGlyph("0x006B") +theme.white_knight = fromGlyph("0x0068") +theme.white_pawn = fromGlyph("0x0070") +theme.white_queen = fromGlyph("0x0071") +theme.white_rook = fromGlyph("0x0072") + diff --git a/data/themes/pieces/EnquilTTF/Enquil.sfd b/data/themes/pieces/EnquilTTF/Enquil.sfd new file mode 100644 index 0000000..06885eb --- /dev/null +++ b/data/themes/pieces/EnquilTTF/Enquil.sfd @@ -0,0 +1,597 @@ +SplineFontDB: 1.0 +FontName: Enquil +FullName: Enquil +FamilyName: Enquil +Weight: Medium +Copyright: Created by Io with FontForge 1.0 (http://fontforge.sf.net) +Version: 001.000 +ItalicAngle: 0 +UnderlinePosition: -100 +UnderlineWidth: 50 +Ascent: 819 +Descent: 205 +Order2: 1 +XUID: [1021 645 1811818106 134493] +FSType: 0 +OS2Version: 0 +OS2_WeightWidthSlopeOnly: 0 +OS2_UseTypoMetrics: 0 +CreationTime: 1156081627 +ModificationTime: 1160235956 +PfmFamily: 17 +TTFWeight: 500 +TTFWidth: 5 +LineGap: 92 +VLineGap: 0 +Panose: 2 0 6 9 0 0 0 0 0 0 +OS2TypoAscent: 0 +OS2TypoAOffset: 1 +OS2TypoDescent: 0 +OS2TypoDOffset: 1 +OS2TypoLinegap: 0 +OS2WinAscent: 0 +OS2WinAOffset: 1 +OS2WinDescent: 0 +OS2WinDOffset: 1 +HheadAscent: 0 +HheadAOffset: 1 +HheadDescent: 0 +HheadDOffset: 1 +OS2SubXSize: 665 +OS2SubYSize: 716 +OS2SubXOff: 0 +OS2SubYOff: 491 +OS2SupXSize: 665 +OS2SupYSize: 716 +OS2SupXOff: 0 +OS2SupYOff: 0 +OS2StrikeYSize: 51 +OS2StrikeYPos: 265 +OS2Vendor: 'PfEd' +TtfTable: cvt 4 +!$VK# +EndTtf +TtfTable: maxp 32 +!!*'"!"&^^!!<3$!!!!#!!!!"!!*'"!'gN:z +EndTtf +LangName: 1033 +Encoding: UnicodeBmp +UnicodeInterp: none +NameList: Adobe Glyph List +DisplaySize: -36 +AntiAlias: 1 +FitToEm: 1 +WinInfo: 63 21 11 +BeginChars: 65539 10 +StartChar: .notdef +Encoding: 65536 -1 0 +Width: 1024 +Flags: W +TtfInstrs: 46 +YlOhX4L,1p!:;PH"pNdEZ3(..m4n[H!rsu:Z3:@2m4tsP"p+WaZ2k",m4nYA +EndTtf +Fore +34 0 m 1,0,-1 + 34 682 l 1,1,-1 + 375 682 l 1,2,-1 + 375 0 l 1,3,-1 + 34 0 l 1,0,-1 +68 34 m 1,4,-1 + 341 34 l 1,5,-1 + 341 648 l 1,6,-1 + 68 648 l 1,7,-1 + 68 34 l 1,4,-1 +EndSplineSet +EndChar +StartChar: .null +Encoding: 65537 0 1 +Width: 0 +Flags: W +EndChar +StartChar: nonmarkingreturn +Encoding: 65538 12 2 +Width: 1024 +Flags: W +EndChar +StartChar: plus +Encoding: 43 43 3 +Width: 1024 +Flags: W +Fore +0 820 m 1,0,-1 + 1024 820 l 1,1,-1 + 1024 -209 l 1,2,-1 + 0 -209 l 1,3,-1 + 0 820 l 1,0,-1 +EndSplineSet +EndChar +StartChar: b +Encoding: 98 98 4 +Width: 1024 +Flags: W +Fore +413 729 m 0,0,1 + 465 770 465 770 506.5 769.5 c 128,-1,2 + 548 769 548 769 600 728 c 0,3,4 + 666 675 666 675 696 619.5 c 128,-1,5 + 726 564 726 564 739 471 c 0,6,7 + 748 411 748 411 742 311.5 c 128,-1,8 + 736 212 736 212 721 157 c 0,9,10 + 717 141 717 141 722 137 c 128,-1,11 + 727 133 727 133 756 133 c 0,12,13 + 820 133 820 133 862 71.5 c 128,-1,14 + 904 10 904 10 899 -77 c 2,15,-1 + 896 -138 l 1,16,-1 + 858 -141 l 2,17,18 + 820 -144 820 -144 769 -118 c 0,19,20 + 718 -93 718 -93 612.5 -71.5 c 128,-1,21 + 507 -50 507 -50 461 -56 c 0,22,23 + 324 -76 324 -76 254 -119 c 0,24,25 + 215 -144 215 -144 171 -141 c 2,26,-1 + 128 -138 l 1,27,-1 + 125 -62 l 2,28,29 + 123 5 123 5 134 38 c 128,-1,30 + 145 71 145 71 181 102 c 0,31,32 + 203 121 203 121 219 127 c 128,-1,33 + 235 133 235 133 267 133 c 2,34,-1 + 319 133 l 1,35,-1 + 314 167 l 2,36,37 + 275 387 275 387 298.5 522 c 128,-1,38 + 322 657 322 657 413 729 c 0,0,1 +545 726 m 0,39,40 + 525 737 525 737 500 737 c 0,41,42 + 477 737 477 737 429 693 c 128,-1,43 + 381 649 381 649 360 608 c 0,44,45 + 324 536 324 536 321 421 c 128,-1,46 + 318 306 318 306 349 180 c 0,47,48 + 355 154 355 154 362 126 c 2,49,-1 + 369 98 l 1,50,51 + 369 96 369 96 305 100 c 0,52,53 + 264 102 264 102 247 99 c 128,-1,54 + 230 96 230 96 212 82 c 0,55,56 + 183 59 183 59 169.5 29 c 128,-1,57 + 156 -1 156 -1 151 -53 c 0,58,59 + 147 -96 147 -96 149 -104.5 c 128,-1,60 + 151 -113 151 -113 168 -113 c 0,61,62 + 190 -113 190 -113 256 -78 c 0,63,64 + 402 -2 402 -2 570 -30 c 0,65,66 + 636 -40 636 -40 680 -46 c 0,67,68 + 711 -52 711 -52 775 -82 c 0,69,70 + 847 -113 847 -113 862 -113 c 0,71,72 + 876 -113 876 -113 878 -105 c 128,-1,73 + 880 -97 880 -97 874 -63 c 0,74,75 + 861 32 861 32 806 78 c 0,76,77 + 785 95 785 95 770 99 c 128,-1,78 + 755 103 755 103 720 100 c 128,-1,79 + 685 97 685 97 676 99 c 128,-1,80 + 667 101 667 101 671 112 c 0,81,82 + 682 140 682 140 695 206.5 c 128,-1,83 + 708 273 708 273 713 328 c 0,84,85 + 718 394 718 394 708 463 c 128,-1,86 + 698 532 698 532 675 583 c 0,87,88 + 660 617 660 617 617.5 664 c 128,-1,89 + 575 711 575 711 545 726 c 0,39,40 +492 609 m 128,-1,91 + 492 615 492 615 496.5 620 c 128,-1,92 + 501 625 501 625 507 625 c 128,-1,93 + 513 625 513 625 517.5 620 c 128,-1,94 + 522 615 522 615 522 609 c 0,95,96 + 522 594 522 594 543 594 c 0,97,98 + 551 594 551 594 557 589.5 c 128,-1,99 + 563 585 563 585 563 579 c 0,100,101 + 563 572 563 572 557 567.5 c 128,-1,102 + 551 563 551 563 543 563 c 0,103,104 + 522 563 522 563 522 538 c 0,105,106 + 522 512 522 512 507 512 c 128,-1,107 + 492 512 492 512 492 537 c 0,108,109 + 492 561 492 561 471 566 c 0,110,111 + 463 568 463 568 457 573 c 128,-1,112 + 451 578 451 578 451 583 c 0,113,114 + 451 594 451 594 471 594 c 0,115,116 + 479 594 479 594 485.5 598.5 c 128,-1,90 + 492 603 492 603 492 609 c 128,-1,91 +EndSplineSet +EndChar +StartChar: k +Encoding: 107 107 5 +Width: 1024 +Flags: W +Fore +413 717 m 0,0,1 + 417 731 417 731 435 734 c 128,-1,2 + 453 737 453 737 527 737 c 0,3,4 + 602 737 602 737 620 734 c 128,-1,5 + 638 731 638 731 642 718 c 0,6,7 + 645 705 645 705 656 700 c 128,-1,8 + 667 695 667 695 695 694 c 0,9,10 + 727 692 727 692 735 687 c 128,-1,11 + 743 682 743 682 745 663 c 0,12,13 + 749 638 749 638 739 605 c 2,14,-1 + 730 578 l 1,15,-1 + 794 582 l 2,16,17 + 863 586 863 586 891.5 568.5 c 128,-1,18 + 920 551 920 551 933 496 c 0,19,20 + 947 431 947 431 927.5 326 c 128,-1,21 + 908 221 908 221 870 159 c 0,22,23 + 852 127 852 127 845 49 c 0,24,25 + 838 -22 838 -22 818 -45 c 128,-1,26 + 798 -68 798 -68 722 -93 c 0,27,28 + 675 -108 675 -108 635.5 -112.5 c 128,-1,29 + 596 -117 596 -117 502 -117 c 0,30,31 + 366 -118 366 -118 304 -103 c 128,-1,32 + 242 -88 242 -88 205 -45 c 0,33,34 + 184 -20 184 -20 179 -5.5 c 128,-1,35 + 174 9 174 9 176 40 c 0,36,37 + 179 87 179 87 158 123 c 0,38,39 + 94 231 94 231 76.5 274 c 128,-1,40 + 59 317 59 317 55 386 c 0,41,42 + 51 451 51 451 53.5 467.5 c 128,-1,43 + 56 484 56 484 75 504 c 0,44,45 + 132 566 132 566 254 545 c 0,46,47 + 322 534 322 534 326 538 c 128,-1,48 + 330 542 330 542 318 581 c 0,49,50 + 307 620 307 620 307 658 c 2,51,-1 + 307 696 l 1,52,-1 + 357 696 l 2,53,54 + 388 696 388 696 399 700 c 128,-1,55 + 410 704 410 704 413 717 c 0,0,1 +614 687 m 0,56,57 + 614 701 614 701 600 704 c 128,-1,58 + 586 707 586 707 526 707 c 0,59,60 + 463 707 463 707 451 704 c 128,-1,61 + 439 701 439 701 440 684 c 0,62,63 + 442 656 442 656 436 653 c 128,-1,64 + 430 650 430 650 393 663 c 0,65,66 + 346 678 346 678 341 672 c 0,67,68 + 337 668 337 668 345.5 613.5 c 128,-1,69 + 354 559 354 559 366 518 c 0,70,71 + 370 504 370 504 384.5 504 c 128,-1,72 + 399 504 399 504 449 518 c 0,73,74 + 465 522 465 522 468 515.5 c 128,-1,75 + 471 509 471 509 471 472 c 0,76,77 + 471 429 471 429 464 423.5 c 128,-1,78 + 457 418 457 418 429 439 c 128,-1,79 + 401 460 401 460 350 481 c 128,-1,80 + 299 502 299 502 251 512 c 0,81,82 + 213 519 213 519 194.5 518.5 c 128,-1,83 + 176 518 176 518 147 507 c 0,84,85 + 120 497 120 497 109.5 486.5 c 128,-1,86 + 99 476 99 476 92 453 c 0,87,88 + 80 408 80 408 90 352.5 c 128,-1,89 + 100 297 100 297 129 249 c 0,90,91 + 164 192 164 192 164 184 c 0,92,93 + 164 178 164 178 195 134 c 0,94,95 + 217 104 217 104 219.5 92 c 128,-1,96 + 222 80 222 80 214 56 c 0,97,98 + 206 35 206 35 206.5 24 c 128,-1,99 + 207 13 207 13 218 -4 c 0,100,101 + 238 -34 238 -34 267.5 -49 c 128,-1,102 + 297 -64 297 -64 359 -78 c 0,103,104 + 463 -100 463 -100 605.5 -81.5 c 128,-1,105 + 748 -63 748 -63 791 -22 c 0,106,107 + 804 -9 804 -9 809.5 32.5 c 128,-1,108 + 815 74 815 74 807 88 c 0,109,110 + 801 98 801 98 830 160 c 0,111,112 + 896 288 896 288 906 403 c 128,-1,113 + 916 518 916 518 864 542 c 0,114,115 + 775 582 775 582 634 472 c 0,116,117 + 581 430 581 430 573 430 c 128,-1,118 + 565 430 565 430 567 484 c 0,119,120 + 568 516 568 516 571 526 c 128,-1,121 + 574 536 574 536 584 535 c 0,122,123 + 641 521 641 521 654 526.5 c 128,-1,124 + 667 532 667 532 689 582 c 0,125,126 + 717 640 717 640 717 659 c 0,127,128 + 717 676 717 676 692.5 675 c 128,-1,129 + 668 674 668 674 638 655 c 0,130,131 + 604 636 604 636 599 645 c 0,132,133 + 594 653 594 653 604 660 c 0,134,135 + 614 668 614 668 614 687 c 0,56,57 +EndSplineSet +EndChar +StartChar: n +Encoding: 110 110 6 +Width: 1024 +Flags: W +Fore +560 761 m 1,0,1 + 565 768 565 768 607 768 c 0,2,3 + 633 768 633 768 647.5 760.5 c 128,-1,4 + 662 753 662 753 685 728 c 0,5,6 + 715 695 715 695 734.5 644 c 128,-1,7 + 754 593 754 593 773 497 c 0,8,9 + 789 413 789 413 786 152 c 0,10,11 + 783 -112 783 -112 772 -123 c 0,12,13 + 762 -133 762 -133 516 -131 c 2,14,-1 + 271 -128 l 1,15,-1 + 268 -95 l 2,16,17 + 266 -74 266 -74 279 -55 c 128,-1,18 + 292 -36 292 -36 347 16 c 0,19,20 + 412 77 412 77 435.5 111 c 128,-1,21 + 459 145 459 145 481 212 c 0,22,23 + 493 244 493 244 494.5 262.5 c 128,-1,24 + 496 281 496 281 489 307 c 2,25,-1 + 478 350 l 1,26,-1 + 421 344 l 2,27,28 + 366 339 366 339 333 333 c 0,29,30 + 314 329 314 329 300 334 c 128,-1,31 + 286 339 286 339 263 358 c 0,32,33 + 237 381 237 381 231 394 c 128,-1,34 + 225 407 225 407 225 445 c 0,35,36 + 225 502 225 502 237 524 c 0,37,38 + 248 550 248 550 283 571.5 c 128,-1,39 + 318 593 318 593 358 598 c 0,40,41 + 478 615 478 615 525 649 c 0,42,43 + 542 662 542 662 547.5 674 c 128,-1,44 + 553 686 553 686 553 712 c 0,45,46 + 553 756 553 756 560 761 c 1,0,1 +638 726 m 0,47,48 + 604 741 604 741 594 735 c 128,-1,49 + 584 729 584 729 584 692 c 0,50,51 + 584 663 584 663 578.5 651 c 128,-1,52 + 573 639 573 639 551 623 c 0,53,54 + 498 584 498 584 382 568 c 0,55,56 + 346 563 346 563 313 546 c 128,-1,57 + 280 529 280 529 264 507 c 0,58,59 + 256 497 256 497 256 449 c 0,60,61 + 256 418 256 418 261.5 405.5 c 128,-1,62 + 267 393 267 393 286 380 c 0,63,64 + 304 367 304 367 315.5 364.5 c 128,-1,65 + 327 362 327 362 343 369 c 0,66,67 + 371 379 371 379 439 379 c 2,68,-1 + 509 379 l 1,69,-1 + 522 318 l 2,70,71 + 531 278 531 278 530 259 c 128,-1,72 + 529 240 529 240 517 204 c 0,73,74 + 502 158 502 158 474 104 c 0,75,76 + 454 71 454 71 402.5 16 c 128,-1,77 + 351 -39 351 -39 321 -59 c 0,78,79 + 297 -74 297 -74 297 -88 c 0,80,81 + 297 -97 297 -97 339.5 -99.5 c 128,-1,82 + 382 -102 382 -102 522 -102 c 0,83,84 + 749 -102 749 -102 749 -94 c 1,85,86 + 750 -89 750 -89 754 164 c 0,87,88 + 756 329 756 329 752.5 387 c 128,-1,89 + 749 445 749 445 736 502 c 0,90,91 + 692 702 692 702 638 726 c 0,47,48 +515 566 m 0,92,93 + 532 573 532 573 547.5 572.5 c 128,-1,94 + 563 572 563 572 568 564 c 128,-1,95 + 573 556 573 556 554.5 544 c 128,-1,96 + 536 532 536 532 518 532 c 0,97,98 + 504 532 504 532 502.5 546.5 c 128,-1,99 + 501 561 501 561 515 566 c 0,92,93 +EndSplineSet +EndChar +StartChar: p +Encoding: 112 112 7 +Width: 1024 +Flags: W +Fore +435 669 m 0,0,1 + 459 676 459 676 540 672 c 0,2,3 + 594 670 594 670 615 665 c 128,-1,4 + 636 660 636 660 658 642 c 0,5,6 + 707 605 707 605 726 535.5 c 128,-1,7 + 745 466 745 466 728.5 397.5 c 128,-1,8 + 712 329 712 329 664 294 c 0,9,10 + 638 274 638 274 639.5 251.5 c 128,-1,11 + 641 229 641 229 672 182 c 0,12,13 + 696 143 696 143 696 132 c 0,14,15 + 696 120 696 120 757 58 c 128,-1,16 + 818 -4 818 -4 838 -11 c 0,17,18 + 851 -16 851 -16 855.5 -26 c 128,-1,19 + 860 -36 860 -36 860 -61 c 2,20,-1 + 860 -102 l 1,21,-1 + 517 -102 l 1,22,-1 + 174 -102 l 1,23,-1 + 174 -61 l 2,24,25 + 174 -38 174 -38 179 -27 c 128,-1,26 + 184 -16 184 -16 198 -9 c 0,27,28 + 235 11 235 11 284.5 62.5 c 128,-1,29 + 334 114 334 114 365 167 c 0,30,31 + 410 242 410 242 410 257 c 128,-1,32 + 410 272 410 272 378 296 c 0,33,34 + 329 333 329 333 313 417.5 c 128,-1,35 + 297 502 297 502 327 569 c 0,36,37 + 341 601 341 601 373.5 631 c 128,-1,38 + 406 661 406 661 435 669 c 0,0,1 +628 621 m 0,39,40 + 607 634 607 634 546 640 c 128,-1,41 + 485 646 485 646 456 638 c 0,42,43 + 390 620 390 620 362 548 c 128,-1,44 + 334 476 334 476 358 387 c 0,45,46 + 367 357 367 357 399 327 c 128,-1,47 + 431 297 431 297 454 297 c 0,48,49 + 465 297 465 297 468.5 293.5 c 128,-1,50 + 472 290 472 290 468.5 281.5 c 128,-1,51 + 465 273 465 273 454 256 c 0,52,53 + 434 231 434 231 438 225 c 1,54,55 + 440 220 440 220 402 159 c 0,56,57 + 369 105 369 105 316 47 c 128,-1,58 + 263 -11 263 -11 233 -27 c 0,59,60 + 205 -41 205 -41 205 -56 c 0,61,62 + 205 -66 205 -66 260 -69 c 128,-1,63 + 315 -72 315 -72 517 -72 c 0,64,65 + 589 -72 589 -72 629 -72 c 128,-1,66 + 669 -72 669 -72 711.5 -71 c 128,-1,67 + 754 -70 754 -70 772 -69 c 128,-1,68 + 790 -68 790 -68 807 -65 c 128,-1,69 + 824 -62 824 -62 826.5 -59 c 128,-1,70 + 829 -56 829 -56 826.5 -50 c 128,-1,71 + 824 -44 824 -44 816 -38 c 128,-1,72 + 808 -32 808 -32 793 -22 c 0,73,74 + 762 0 762 0 708 57.5 c 128,-1,75 + 654 115 654 115 659 121 c 1,76,77 + 665 124 665 124 646 153 c 0,78,79 + 628 178 628 178 611 216 c 0,80,81 + 596 254 596 254 585 260 c 0,82,83 + 576 266 576 266 574 275 c 128,-1,84 + 572 284 572 284 577.5 290.5 c 128,-1,85 + 583 297 583 297 594 297 c 0,86,87 + 621 297 621 297 653.5 336 c 128,-1,88 + 686 375 686 375 692 415 c 0,89,90 + 714 563 714 563 628 621 c 0,39,40 +EndSplineSet +EndChar +StartChar: q +Encoding: 113 113 8 +Width: 1024 +Flags: W +Fore +464 633 m 0,0,1 + 474 646 474 646 518 644.5 c 128,-1,2 + 562 643 562 643 573 630 c 0,3,4 + 587 616 587 616 594 510 c 0,5,6 + 601 423 601 423 617 335.5 c 128,-1,7 + 633 248 633 248 644 227 c 0,8,9 + 653 212 653 212 654 220 c 1,10,11 + 655 222 655 222 655 225 c 0,12,13 + 656 277 656 277 678 439.5 c 128,-1,14 + 700 602 700 602 708 610 c 1,15,16 + 719 625 719 625 758 625 c 0,17,18 + 801 625 801 625 834 577.5 c 128,-1,19 + 867 530 867 530 914 402 c 0,20,21 + 937 339 937 339 942 306.5 c 128,-1,22 + 947 274 947 274 947 184 c 2,23,-1 + 947 56 l 1,24,-1 + 905 0 l 2,25,26 + 852 -72 852 -72 760.5 -102.5 c 128,-1,27 + 669 -133 669 -133 507 -133 c 0,28,29 + 303 -133 303 -133 200 -83 c 0,30,31 + 165 -66 165 -66 119 -20 c 128,-1,32 + 73 26 73 26 61 57 c 0,33,34 + 50 85 50 85 51.5 177 c 128,-1,35 + 53 269 53 269 66 308 c 0,36,37 + 82 361 82 361 121 438.5 c 128,-1,38 + 160 516 160 516 193 558 c 0,39,40 + 218 593 218 593 232 601.5 c 128,-1,41 + 246 610 246 610 278 612 c 0,42,43 + 307 614 307 614 320 612 c 128,-1,44 + 333 610 333 610 340.5 593 c 128,-1,45 + 348 576 348 576 347 550 c 128,-1,46 + 346 524 346 524 340 467 c 0,47,48 + 330 369 330 369 329 276 c 128,-1,49 + 328 183 328 183 337 159 c 0,50,51 + 342 146 342 146 348 154 c 128,-1,52 + 354 162 354 162 368 200 c 0,53,54 + 412 319 412 319 441 532 c 0,55,56 + 452 619 452 619 464 633 c 0,0,1 +552 596 m 0,57,58 + 544 611 544 611 518 613.5 c 128,-1,59 + 492 616 492 616 487 602 c 0,60,61 + 480 577 480 577 471.5 522 c 128,-1,62 + 463 467 463 467 465 462 c 1,63,64 + 475 445 475 445 433 297 c 128,-1,65 + 391 149 391 149 368 119 c 0,66,67 + 353 100 353 100 344.5 96 c 128,-1,68 + 336 92 336 92 328 99.5 c 128,-1,69 + 320 107 320 107 310 131 c 0,70,71 + 298 160 298 160 298 213 c 128,-1,72 + 298 266 298 266 310 538 c 0,73,74 + 312 566 312 566 308 573 c 128,-1,75 + 304 580 304 580 285 582 c 0,76,77 + 268 584 268 584 256 575.5 c 128,-1,78 + 244 567 244 567 221 536 c 0,79,80 + 189 492 189 492 147.5 409 c 128,-1,81 + 106 326 106 326 93 282 c 0,82,83 + 83 243 83 243 82.5 174 c 128,-1,84 + 82 105 82 105 92 78 c 0,85,86 + 103 49 103 49 143 7 c 128,-1,87 + 183 -35 183 -35 215 -51 c 0,88,89 + 268 -78 268 -78 357 -91 c 128,-1,90 + 446 -104 446 -104 547 -99 c 0,91,92 + 672 -94 672 -94 742.5 -72.5 c 128,-1,93 + 813 -51 813 -51 857 -4 c 0,94,95 + 898 38 898 38 911 84 c 128,-1,96 + 924 130 924 130 920 215 c 0,97,98 + 915 287 915 287 893.5 354.5 c 128,-1,99 + 872 422 872 422 822 520 c 0,100,101 + 801 564 801 564 788.5 579 c 128,-1,102 + 776 594 776 594 762 594 c 0,103,104 + 737 594 737 594 732 584 c 0,105,106 + 726 574 726 574 706 402 c 0,107,108 + 700 351 700 351 690.5 270.5 c 128,-1,109 + 681 190 681 190 679 177 c 0,110,111 + 674 130 674 130 661 123.5 c 128,-1,112 + 648 117 648 117 632 151 c 128,-1,113 + 616 185 616 185 601 251 c 0,114,115 + 562 419 562 419 562 515 c 0,116,117 + 560 580 560 580 552 596 c 0,57,58 +EndSplineSet +EndChar +StartChar: r +Encoding: 114 114 9 +Width: 1024 +Flags: W +Fore +144 774 m 128,-1,1 + 156 788 156 788 239 789 c 128,-1,2 + 322 790 322 790 336 776 c 0,3,4 + 348 764 348 764 348 735 c 0,5,6 + 348 719 348 719 352.5 713 c 128,-1,7 + 357 707 357 707 368 707 c 0,8,9 + 380 707 380 707 384.5 714.5 c 128,-1,10 + 389 722 389 722 391 745 c 2,11,-1 + 394 783 l 1,12,-1 + 497 783 l 1,13,-1 + 599 783 l 1,14,-1 + 602 745 l 2,15,16 + 604 720 604 720 609 713.5 c 128,-1,17 + 614 707 614 707 631 707 c 0,18,19 + 646 707 646 707 650.5 712.5 c 128,-1,20 + 655 718 655 718 655 735 c 0,21,22 + 655 765 655 765 668 776 c 0,23,24 + 678 787 678 787 755 788.5 c 128,-1,25 + 832 790 832 790 848 780 c 0,26,27 + 861 770 861 770 858 639 c 2,28,-1 + 855 507 l 1,29,-1 + 802 504 l 1,30,-1 + 748 501 l 1,31,-1 + 745 181 l 1,32,-1 + 742 -138 l 1,33,-1 + 498 -141 l 2,34,35 + 254 -144 254 -144 244 -131 c 0,36,37 + 236 -117 236 -117 236 191 c 2,38,-1 + 236 501 l 1,39,-1 + 187 504 l 1,40,-1 + 138 507 l 1,41,-1 + 135 634 l 2,42,0 + 132 760 132 760 144 774 c 128,-1,1 +317 717 m 1,43,-1 + 317 758 l 1,44,-1 + 248 758 l 2,45,46 + 176 758 176 758 171 751 c 1,47,48 + 164 746 164 746 164 638 c 2,49,-1 + 164 532 l 1,50,-1 + 218 532 l 1,51,-1 + 271 532 l 1,52,-1 + 268 210 l 1,53,-1 + 265 -113 l 1,54,-1 + 492 -113 l 1,55,-1 + 717 -113 l 1,56,-1 + 717 210 l 1,57,-1 + 717 532 l 1,58,-1 + 773 532 l 1,59,-1 + 829 532 l 1,60,-1 + 829 645 l 1,61,-1 + 829 758 l 1,62,-1 + 758 758 l 1,63,-1 + 686 758 l 1,64,-1 + 686 717 l 1,65,-1 + 686 676 l 1,66,-1 + 630 676 l 1,67,-1 + 573 676 l 1,68,-1 + 573 717 l 1,69,-1 + 573 758 l 1,70,-1 + 497 758 l 1,71,-1 + 420 758 l 1,72,-1 + 420 717 l 1,73,-1 + 420 676 l 1,74,-1 + 369 676 l 1,75,-1 + 317 676 l 1,76,-1 + 317 717 l 1,43,-1 +EndSplineSet +EndChar +EndChars +EndSplineFont diff --git a/data/themes/pieces/EnquilTTF/Enquil.ttf b/data/themes/pieces/EnquilTTF/Enquil.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0ce782091f15e03fc38bff0ae98622a20090fbf9 GIT binary patch literal 3600 zcwWs{YiwM_6+Scfx%ahuy}NfG*~i_reb@HdyX$@0#&&GSc1*|v>NpT^Ax`2~>ez|B z5CWk@YJiY}gixinY57s4BA_iOM(R^-0aa~PLDfepsEXP~REUaJ{SzuGh_~n7-8fBE z`lG)(*K_BbGiS~{^UXK2V;}&a!D(RN!1(yyU8B-PAAouptcW8;tl59$|DkL{Vv z=Jy2-t^<$-)b|}aI&;i>Mbl7!3+ur{_f$z3LO>9O^II`7Es*ni2mf zU_Q(!>c-KTdyl~$_zw0@pl&YD9G!jOrB^=ykg=ccIkvJ^g>R4;e*bfJe6Z(=^~!sH ze&a58|N9VU!7i`x&f8An(;%ECu4S2k@@VXxBx*d2Z}5HfdO83blfr3He=6)%0g>ZD5U+vse^MO2L#Olf!Jo)F-9axh=NOyS)Lt8M zfEfVBxR%3q1E$|2jiagbR#q=4|u2z>|;q*NJT}=n1_wp(m1LYU6dH zZ~Toue`Q~i&Vhq$gQbWnx+Pfn2(=GC1RLj5wN>T}hPGfoRMEL?1Y#s$@B(iX@`ju8 zsSFWN%TlXc86-E5l+{$Rnv=Ysp=)mh^!t*fBAQFZLY_QToGgy?t1iXOO3|Uc9AjC9!ml%rj;A`)3^iH|(=2kS>>qrg zzyW^?ALj*Os6E*f-NLb~Zj3zn>_}&PXu_?ryjtBat)33sv54QAhhkw z?z!{qsaC&48UIi-%W~e{`$k1Y&c}_{BK=!~get9Bj@1=5n)mQp&s@%Gjc)M^iZ9w6 zH#kuwvhRk$1rklGvdBkAe8v5bmpqj4Qg7IZbjOk$CrR{mjptQWB2@B*5?ffdxib8# zL38)^Ovvpbv2-XJ&$cY>8yime2K};_N?Deu;}AW+OBD=+M1R-IwXO}l0VS3 zlIs=u&R8($H}qIcGg{l#Nlh9&{Z6oLxub0Qh$iRzygK!IU7{d@!}m+IQ;ZikLI&=D zLpI+Vi(@c!ljQi9bx3bH6m>|9uTn8!@wf!_wL{4sSSjB?HrLa(74oIB&3Q{G#|Tp0 zqB*W391X-$UJt{_(%;`_Xt*+*H55jWdn*ZVBoI~!iwv2d0+1nKG zL`KI|7ggL5-+U}M_1N2lrGnadL61wVO&UZ0A-F?{xdVGQKHT^~#>Gqct>VDwHnTOH z<~g2~yn(RQYlPFBo>YV3&X`+ijRrj_50^BgTs)+zoFEOfSuL4zV%g``T%5>V`D(TI zr)LG?2}YeW>4n;PW|}^Y=fmwbT6G@t4ffdpL`gd$Xj7@FqLu}DCU~FR3 zM+O;Wu)}!EIU^8%gp0fsyrtY>bX$pBn287P^Qo?l=Qf^`wAMrMF0hzCT^Z;L4JAM@gvP-8{x($+o1WMo>lbuA#B&4Xsz-B6Jf%FZD3YnCQNLAcq4yn1AySIHv3kZzMTK`><(A*553Q|XaxK*?3# zo2M0-Q9Zj8p@v=GPpcrWF`raMLHNtIExBe%ZjcZ-xMk}=VJ*Xgapx1a8r7|83>@yNGR zr7v|f>y)y|V(-E4233!B;y1Sj+?*C#=Jbs>V_wl6j2^6Y_O#QI_UeY%4&paXUSG}(umv&YI?@u$dPSlQX2 zc(O7wu}``X$lOFcc?Cwh8!?kW`N2N9|%QIFydSXM}t^_VO(lJuD~472g_ z#w!ehM2ZB1JUH1da7#xvez5UWY~FYJ;GTv|@XGSThKv_HxY&>x zNRmWDW`QT4XviFR$o&nONBepEw#M35o~kp-mI>b3E;M9{@{b!b1EcV}hRlLOMjJ8* zCfVPRd9*(U+h7%DVFqK)!eKD+u6GjOH^K_OPrxGD7f>2UeHmrDU4?n{HK7~N*c`TP z=uySz7|u0|&s@WIZqqjdYp7+=I*WEhXxr-SOm+6KdGMrpp3R_*f+bnwz#rv=5iQ0moq;m&ei`rYG1~r{!@{_<`zZPjlpiX1twuHOgTLS m@9)%Mkb>24V%h(P*t}t{MXqz~l^3_3aat{ShtuvlRs1J|bq8Po literal 0 HcwPel00001 diff --git a/data/themes/pieces/EnquilTTF/theme_eboard.desktop b/data/themes/pieces/EnquilTTF/theme_eboard.desktop new file mode 100644 index 0000000..1a03f65 --- /dev/null +++ b/data/themes/pieces/EnquilTTF/theme_eboard.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Enquil +Type=Application +Comment=Eboard's Enquil theme,|converted to TTF|with potrace.| (unknown author) +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/EnquilTTF/theme_eboard.lua b/data/themes/pieces/EnquilTTF/theme_eboard.lua new file mode 100644 index 0000000..82c88a0 --- /dev/null +++ b/data/themes/pieces/EnquilTTF/theme_eboard.lua @@ -0,0 +1,36 @@ +import("piece_theme.lua") + +shadow = 7 +shadow_color = "#404040" +shadow_offset_x = 3 +shadow_offset_y = 3 +shadow_grow = 6 + +function fromGlyphGrad(fg, grad1, grad2) + return function(glyph) + return function(size) + local g = LinearGradient(Point(0.1*size,0), Point(1*size,0.2*size)) + g[0] = grad1 + g[1] = grad2 + return fromFontGlyph("Enquil.ttf", glyph, fg, g)(size) + end + end +end + +fromGlyphW = fromGlyphGrad("black", "#ffffff", "#b0b0c0") +fromGlyphB = fromGlyphGrad("white", "#404060", "#000000") + +theme.black_bishop = fromGlyphB("0x0062") +theme.black_king = fromGlyphB("0x006B") +theme.black_knight = fromGlyphB("0x006E") +theme.black_pawn = fromGlyphB("0x0070") +theme.black_queen = fromGlyphB("0x0071") +theme.black_rook = fromGlyphB("0x0072") + +theme.white_bishop = fromGlyphW("0x0062") +theme.white_king = fromGlyphW("0x006B") +theme.white_knight = fromGlyphW("0x006E") +theme.white_pawn = fromGlyphW("0x0070") +theme.white_queen = fromGlyphW("0x0071") +theme.white_rook = fromGlyphW("0x0072") + diff --git a/data/themes/pieces/FantasySVG/bb.svg b/data/themes/pieces/FantasySVG/bb.svg new file mode 100644 index 0000000..3e6ded1 --- /dev/null +++ b/data/themes/pieces/FantasySVG/bb.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/bd.svg b/data/themes/pieces/FantasySVG/bd.svg new file mode 100644 index 0000000..4b4f5d9 --- /dev/null +++ b/data/themes/pieces/FantasySVG/bd.svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/bg.svg b/data/themes/pieces/FantasySVG/bg.svg new file mode 100644 index 0000000..0ea21e0 --- /dev/null +++ b/data/themes/pieces/FantasySVG/bg.svg @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/bh.svg b/data/themes/pieces/FantasySVG/bh.svg new file mode 100644 index 0000000..e220304 --- /dev/null +++ b/data/themes/pieces/FantasySVG/bh.svg @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/bk.svg b/data/themes/pieces/FantasySVG/bk.svg new file mode 100644 index 0000000..17db353 --- /dev/null +++ b/data/themes/pieces/FantasySVG/bk.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/bl.svg b/data/themes/pieces/FantasySVG/bl.svg new file mode 100644 index 0000000..f48167f --- /dev/null +++ b/data/themes/pieces/FantasySVG/bl.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/bn.svg b/data/themes/pieces/FantasySVG/bn.svg new file mode 100644 index 0000000..2ad746a --- /dev/null +++ b/data/themes/pieces/FantasySVG/bn.svg @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/bp.svg b/data/themes/pieces/FantasySVG/bp.svg new file mode 100644 index 0000000..c9aa699 --- /dev/null +++ b/data/themes/pieces/FantasySVG/bp.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/bq.svg b/data/themes/pieces/FantasySVG/bq.svg new file mode 100644 index 0000000..3cb16df --- /dev/null +++ b/data/themes/pieces/FantasySVG/bq.svg @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/br.svg b/data/themes/pieces/FantasySVG/br.svg new file mode 100644 index 0000000..a3adac9 --- /dev/null +++ b/data/themes/pieces/FantasySVG/br.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/bs.svg b/data/themes/pieces/FantasySVG/bs.svg new file mode 100644 index 0000000..5d45745 --- /dev/null +++ b/data/themes/pieces/FantasySVG/bs.svg @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/theme.desktop b/data/themes/pieces/FantasySVG/theme.desktop new file mode 100644 index 0000000..3ddc19c --- /dev/null +++ b/data/themes/pieces/FantasySVG/theme.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=FantasySVG +Type=Application +Comment=Fantasy SVG theme,| by Maurizio Monge +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess[default], Shogi +X-Tagua-Script=theme.lua diff --git a/data/themes/pieces/FantasySVG/theme.lua b/data/themes/pieces/FantasySVG/theme.lua new file mode 100644 index 0000000..3ff4030 --- /dev/null +++ b/data/themes/pieces/FantasySVG/theme.lua @@ -0,0 +1,42 @@ +import("piece_theme.lua") + +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +theme.black_gold = fromSVG("bg.svg") +theme.black_horse = fromSVG("bn.svg") +theme.black_lance = fromSVG("bl.svg") +theme.black_silver = fromSVG("bs.svg") +theme.black_p_bishop = fromSVG("bh.svg") +theme.black_p_knight = fromSVG("bg.svg") +theme.black_p_lance = fromSVG("bg.svg") +theme.black_p_pawn = fromSVG("bg.svg") +theme.black_p_rook = fromSVG("bd.svg") +theme.black_p_silver = fromSVG("bg.svg") +theme.white_gold = fromSVG("wg.svg") +theme.white_horse = fromSVG("wn.svg") +theme.white_lance = fromSVG("wl.svg") +theme.white_silver = fromSVG("ws.svg") +theme.white_p_bishop = fromSVG("wh.svg") +theme.white_p_knight = fromSVG("wg.svg") +theme.white_p_lance = fromSVG("wg.svg") +theme.white_p_pawn = fromSVG("wg.svg") +theme.white_p_rook = fromSVG("wd.svg") +theme.white_p_silver = fromSVG("wg.svg") + +theme.black_bishop = fromSVG("bb.svg") +theme.black_king = fromSVG("bk.svg") +theme.black_knight = fromSVG("bn.svg") +theme.black_pawn = fromSVG("bp.svg") +theme.black_queen = fromSVG("bq.svg") +theme.black_rook = fromSVG("br.svg") +theme.white_bishop = fromSVG("wb.svg") +theme.white_king = fromSVG("wk.svg") +theme.white_knight = fromSVG("wn.svg") +theme.white_pawn = fromSVG("wp.svg") +theme.white_queen = fromSVG("wq.svg") +theme.white_rook = fromSVG("wr.svg") + diff --git a/data/themes/pieces/FantasySVG/wb.svg b/data/themes/pieces/FantasySVG/wb.svg new file mode 100644 index 0000000..614f315 --- /dev/null +++ b/data/themes/pieces/FantasySVG/wb.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/wd.svg b/data/themes/pieces/FantasySVG/wd.svg new file mode 100644 index 0000000..7c1821c --- /dev/null +++ b/data/themes/pieces/FantasySVG/wd.svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/wg.svg b/data/themes/pieces/FantasySVG/wg.svg new file mode 100644 index 0000000..69eca4f --- /dev/null +++ b/data/themes/pieces/FantasySVG/wg.svg @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/wh.svg b/data/themes/pieces/FantasySVG/wh.svg new file mode 100644 index 0000000..1b283e6 --- /dev/null +++ b/data/themes/pieces/FantasySVG/wh.svg @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/wk.svg b/data/themes/pieces/FantasySVG/wk.svg new file mode 100644 index 0000000..e85e52a --- /dev/null +++ b/data/themes/pieces/FantasySVG/wk.svg @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/wl.svg b/data/themes/pieces/FantasySVG/wl.svg new file mode 100644 index 0000000..1a41692 --- /dev/null +++ b/data/themes/pieces/FantasySVG/wl.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/wn.svg b/data/themes/pieces/FantasySVG/wn.svg new file mode 100644 index 0000000..6f93790 --- /dev/null +++ b/data/themes/pieces/FantasySVG/wn.svg @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/wp.svg b/data/themes/pieces/FantasySVG/wp.svg new file mode 100644 index 0000000..c178dc5 --- /dev/null +++ b/data/themes/pieces/FantasySVG/wp.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/wq.svg b/data/themes/pieces/FantasySVG/wq.svg new file mode 100644 index 0000000..3cb57e1 --- /dev/null +++ b/data/themes/pieces/FantasySVG/wq.svg @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/wr.svg b/data/themes/pieces/FantasySVG/wr.svg new file mode 100644 index 0000000..cf36f63 --- /dev/null +++ b/data/themes/pieces/FantasySVG/wr.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/FantasySVG/ws.svg b/data/themes/pieces/FantasySVG/ws.svg new file mode 100644 index 0000000..cc04c12 --- /dev/null +++ b/data/themes/pieces/FantasySVG/ws.svg @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/LucenaTTF/Lucena.ttf b/data/themes/pieces/LucenaTTF/Lucena.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cd2f2cbc73524e7b2767d4ce0f2c8f2d04ec4ab8 GIT binary patch literal 54228 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⋙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 JEa6m0@D477Bn$um literal 0 HcwPel00001 diff --git a/data/themes/pieces/LucenaTTF/theme_jose.desktop b/data/themes/pieces/LucenaTTF/theme_jose.desktop new file mode 100644 index 0000000..db23f20 --- /dev/null +++ b/data/themes/pieces/LucenaTTF/theme_jose.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Lucena (Jose style) +Type=Application +Comment=Lucena TTF theme.| by Armando H. Marroquin +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/LucenaTTF/theme_jose.lua b/data/themes/pieces/LucenaTTF/theme_jose.lua new file mode 100644 index 0000000..94f064e --- /dev/null +++ b/data/themes/pieces/LucenaTTF/theme_jose.lua @@ -0,0 +1,26 @@ +import("piece_theme.lua") + +shadow = 7 +shadow_color = "#404040" +shadow_offset_x = 3 +shadow_offset_y = 3 +shadow_grow = 6 + +function fromGlyph(glyph) + return fromFontGlyph("Lucena.ttf", glyph, "black", "white", 6.0) +end + +theme.black_bishop = fromGlyph("0x0076") +theme.black_king = fromGlyph("0x006C") +theme.black_knight = fromGlyph("0x006D") +theme.black_pawn = fromGlyph("0x006F") +theme.black_queen = fromGlyph("0x0077") +theme.black_rook = fromGlyph("0x0074") + +theme.white_bishop = fromGlyph("0x0062") +theme.white_king = fromGlyph("0x006B") +theme.white_knight = fromGlyph("0x006E") +theme.white_pawn = fromGlyph("0x0070") +theme.white_queen = fromGlyph("0x0071") +theme.white_rook = fromGlyph("0x0072") + diff --git a/data/themes/pieces/MayanTTF/Mayan.ttf b/data/themes/pieces/MayanTTF/Mayan.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e516856f341aa2b6c9f9466db36422437447c535 GIT binary patch literal 45768 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 literal 0 HcwPel00001 diff --git a/data/themes/pieces/MayanTTF/theme_eboard.desktop b/data/themes/pieces/MayanTTF/theme_eboard.desktop new file mode 100644 index 0000000..b85af5f --- /dev/null +++ b/data/themes/pieces/MayanTTF/theme_eboard.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Maya (Eboard style) +Type=Application +Comment=Maya TTF theme.| by Armando H. Marroquin +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/MayanTTF/theme_eboard.lua b/data/themes/pieces/MayanTTF/theme_eboard.lua new file mode 100644 index 0000000..8177bf7 --- /dev/null +++ b/data/themes/pieces/MayanTTF/theme_eboard.lua @@ -0,0 +1,35 @@ +import("piece_theme.lua") +shadow = 7 +shadow_color = "#404040" +shadow_offset_x = 3 +shadow_offset_y = 3 +shadow_grow = 6 + +function fromGlyphGrad(fg, grad1, grad2) + return function(glyph) + return function(size) + local g = LinearGradient(Point(0.3*size,0), Point(0.7*size,0)) + g[0] = grad1 + g[1] = grad2 + return fromFontGlyph("Mayan.ttf", glyph, fg, g)(size) + end + end +end + +fromGlyphW = fromGlyphGrad("black", "#737152", "#DEDEAC") +fromGlyphB = fromGlyphGrad("black", "#5A3010", "#BD4820") + +theme.black_bishop = fromGlyphB("0x0062") +theme.black_king = fromGlyphB("0x006B") +theme.black_knight = fromGlyphB("0x006E") +theme.black_pawn = fromGlyphB("0x0070") +theme.black_queen = fromGlyphB("0x0071") +theme.black_rook = fromGlyphB("0x0072") + +theme.white_bishop = fromGlyphW("0x0062") +theme.white_king = fromGlyphW("0x006B") +theme.white_knight = fromGlyphW("0x006E") +theme.white_pawn = fromGlyphW("0x0070") +theme.white_queen = fromGlyphW("0x0071") +theme.white_rook = fromGlyphW("0x0072") + diff --git a/data/themes/pieces/MayanTTF/theme_jose.desktop b/data/themes/pieces/MayanTTF/theme_jose.desktop new file mode 100644 index 0000000..26796e2 --- /dev/null +++ b/data/themes/pieces/MayanTTF/theme_jose.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Maya (Jose style) +Type=Application +Comment=Maya TTF theme.| by Armando H. Marroquin +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/MayanTTF/theme_jose.lua b/data/themes/pieces/MayanTTF/theme_jose.lua new file mode 100644 index 0000000..f64929b --- /dev/null +++ b/data/themes/pieces/MayanTTF/theme_jose.lua @@ -0,0 +1,25 @@ +import("piece_theme.lua") +shadow = 7 +shadow_color = "#404040" +shadow_offset_x = 3 +shadow_offset_y = 3 +shadow_grow = 6 + +function fromGlyph(glyph) + return fromFontGlyph("Mayan.ttf", glyph, "black", "white", 6.0) +end + +theme.black_bishop = fromGlyph("0x0076") +theme.black_king = fromGlyph("0x006C") +theme.black_knight = fromGlyph("0x006D") +theme.black_pawn = fromGlyph("0x006F") +theme.black_queen = fromGlyph("0x0077") +theme.black_rook = fromGlyph("0x0074") + +theme.white_bishop = fromGlyph("0x0062") +theme.white_king = fromGlyph("0x006B") +theme.white_knight = fromGlyph("0x006E") +theme.white_pawn = fromGlyph("0x0070") +theme.white_queen = fromGlyph("0x0071") +theme.white_rook = fromGlyph("0x0072") + diff --git a/data/themes/pieces/PrmiSVG/bb.svg b/data/themes/pieces/PrmiSVG/bb.svg new file mode 100644 index 0000000..3c251c4 --- /dev/null +++ b/data/themes/pieces/PrmiSVG/bb.svg @@ -0,0 +1,538 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/bk.svg b/data/themes/pieces/PrmiSVG/bk.svg new file mode 100644 index 0000000..d0017af --- /dev/null +++ b/data/themes/pieces/PrmiSVG/bk.svg @@ -0,0 +1,537 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/bn.svg b/data/themes/pieces/PrmiSVG/bn.svg new file mode 100644 index 0000000..cffc3ea --- /dev/null +++ b/data/themes/pieces/PrmiSVG/bn.svg @@ -0,0 +1,683 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/bp.svg b/data/themes/pieces/PrmiSVG/bp.svg new file mode 100644 index 0000000..d1bc016 --- /dev/null +++ b/data/themes/pieces/PrmiSVG/bp.svg @@ -0,0 +1,463 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/bq.svg b/data/themes/pieces/PrmiSVG/bq.svg new file mode 100644 index 0000000..8865214 --- /dev/null +++ b/data/themes/pieces/PrmiSVG/bq.svg @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/br.svg b/data/themes/pieces/PrmiSVG/br.svg new file mode 100644 index 0000000..5a9cdec --- /dev/null +++ b/data/themes/pieces/PrmiSVG/br.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/theme.desktop b/data/themes/pieces/PrmiSVG/theme.desktop new file mode 100644 index 0000000..d5e8a60 --- /dev/null +++ b/data/themes/pieces/PrmiSVG/theme.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Prmi +Type=Application +Comment=Prmi (cats) SVG theme,| by Maurizio Monge +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/PrmiSVG/theme.lua b/data/themes/pieces/PrmiSVG/theme.lua new file mode 100644 index 0000000..65b65bc --- /dev/null +++ b/data/themes/pieces/PrmiSVG/theme.lua @@ -0,0 +1,20 @@ +import("piece_theme.lua") +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +theme.black_bishop = fromSVG("bb.svg") +theme.black_king = fromSVG("bk.svg") +theme.black_knight = fromSVG("bn.svg") +theme.black_pawn = fromSVG("bp.svg") +theme.black_queen = fromSVG("bq.svg") +theme.black_rook = fromSVG("br.svg") +theme.white_bishop = fromSVG("wb.svg") +theme.white_king = fromSVG("wk.svg") +theme.white_knight = fromSVG("wn.svg") +theme.white_pawn = fromSVG("wp.svg") +theme.white_queen = fromSVG("wq.svg") +theme.white_rook = fromSVG("wr.svg") + diff --git a/data/themes/pieces/PrmiSVG/wb.svg b/data/themes/pieces/PrmiSVG/wb.svg new file mode 100644 index 0000000..6c4ffa0 --- /dev/null +++ b/data/themes/pieces/PrmiSVG/wb.svg @@ -0,0 +1,527 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/wk.svg b/data/themes/pieces/PrmiSVG/wk.svg new file mode 100644 index 0000000..e1048a6 --- /dev/null +++ b/data/themes/pieces/PrmiSVG/wk.svg @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/wn.svg b/data/themes/pieces/PrmiSVG/wn.svg new file mode 100644 index 0000000..e4b40ba --- /dev/null +++ b/data/themes/pieces/PrmiSVG/wn.svg @@ -0,0 +1,722 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/wp.svg b/data/themes/pieces/PrmiSVG/wp.svg new file mode 100644 index 0000000..be4bb56 --- /dev/null +++ b/data/themes/pieces/PrmiSVG/wp.svg @@ -0,0 +1,463 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/wq.svg b/data/themes/pieces/PrmiSVG/wq.svg new file mode 100644 index 0000000..4bddbfe --- /dev/null +++ b/data/themes/pieces/PrmiSVG/wq.svg @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/PrmiSVG/wr.svg b/data/themes/pieces/PrmiSVG/wr.svg new file mode 100644 index 0000000..00b8c8d --- /dev/null +++ b/data/themes/pieces/PrmiSVG/wr.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG-TTF/Shogi.sfd b/data/themes/pieces/ShogiSVG-TTF/Shogi.sfd new file mode 100644 index 0000000..6d9a60d --- /dev/null +++ b/data/themes/pieces/ShogiSVG-TTF/Shogi.sfd @@ -0,0 +1,1277 @@ +SplineFontDB: 1.0 +FontName: Shogi +FullName: Shogi +FamilyName: Shogi +Weight: Medium +Copyright: Created by Io with FontForge 1.0 (http://fontforge.sf.net) +Comments: 2006-10-6: Created. +Version: 001.000 +ItalicAngle: 0 +UnderlinePosition: -100 +UnderlineWidth: 50 +Ascent: 816 +Descent: 208 +NeedsXUIDChange: 1 +XUID: [1021 306 260876167 15891889] +FSType: 8 +OS2Version: 0 +OS2_WeightWidthSlopeOnly: 0 +OS2_UseTypoMetrics: 0 +CreationTime: 1160099864 +ModificationTime: 1160353221 +PfmFamily: 17 +TTFWeight: 500 +TTFWidth: 5 +LineGap: 92 +VLineGap: 0 +OS2TypoAscent: 0 +OS2TypoAOffset: 1 +OS2TypoDescent: 0 +OS2TypoDOffset: 1 +OS2TypoLinegap: 92 +OS2WinAscent: 0 +OS2WinAOffset: 1 +OS2WinDescent: 0 +OS2WinDOffset: 1 +HheadAscent: 0 +HheadAOffset: 1 +HheadDescent: 0 +HheadDOffset: 1 +OS2Vendor: 'PfEd' +TtfTable: cvt 4 +!$VK# +EndTtf +LangName: 1033 +Encoding: UnicodeBmp +UnicodeInterp: none +NameList: Adobe Glyph List +DisplaySize: -48 +AntiAlias: 1 +FitToEm: 1 +WinInfo: 34 17 10 +TeXData: 1 0 0 346030 173015 115343 0 1048576 115343 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144 +BeginChars: 65536 16 +StartChar: p +Encoding: 112 112 0 +Width: 1024 +Flags: W +TeX: 112 0 0 0 +Fore +496 656 m 0 + 496 656 528 656 528 640 c 0 + 528 640 528 624 528 608 c 0 + 528 592 528 576 560 576 c 0 + 576 576 592 592 592 592 c 0 + 608 608 640 592 640 576 c 0 + 640 560 624 560 576 560 c 0 + 544 544 528 544 528 544 c 0 + 544 512 608 512 640 528 c 0 + 688 528 l 0 + 704 496 688 480 656 480 c 2 + 624 480 l 1 + 656 448 l 2 + 688 432 688 416 672 400 c 0 + 656 400 640 400 640 416 c 0 + 624 448 624 448 624 432 c 0 + 624 384 480 304 400 304 c 0 + 368 304 384 320 432 336 c 0 + 480 352 480 352 464 368 c 0 + 448 368 448 400 480 400 c 0 + 496 400 496 400 496 448 c 0 + 480 480 480 480 464 496 c 0 + 432 496 432 496 448 480 c 0 + 464 464 464 464 448 448 c 0 + 416 416 352 368 352 368 c 0 + 336 368 336 400 352 416 c 0 + 368 416 384 448 400 464 c 2 + 416 496 l 1 + 400 496 l 2 + 352 480 336 496 336 512 c 0 + 352 512 368 528 368 528 c 0 + 400 528 400 528 400 576 c 0 + 400 624 400 624 432 624 c 0 + 448 608 448 608 448 560 c 0 + 432 528 432 528 464 528 c 0 + 496 528 496 528 496 576 c 0 + 496 608 496 640 496 656 c 0 +592 464 m 0 + 592 480 576 480 560 480 c 0 + 544 480 528 480 528 432 c 2 + 528 384 l 1 + 560 416 l 2 + 576 432 592 448 592 448 c 0 + 608 448 592 448 592 464 c 0 +448 224 m 0 + 448 256 480 256 496 224 c 0 + 496 224 496 208 496 192 c 0 + 480 176 480 176 480 160 c 0 + 496 160 544 176 592 192 c 0 + 608 192 624 192 624 176 c 0 + 656 160 656 160 624 160 c 0 + 576 144 576 144 592 96 c 0 + 608 80 608 64 656 64 c 0 + 720 64 752 48 736 32 c 0 + 720 16 704 16 656 32 c 0 + 592 48 576 48 496 48 c 0 + 336 16 336 16 320 48 c 0 + 288 64 288 80 320 64 c 0 + 336 64 368 64 384 64 c 0 + 416 64 432 64 432 112 c 2 + 432 160 l 1 + 400 144 l 2 + 352 144 352 160 400 176 c 0 + 448 224 l 0 +544 128 m 0 + 496 160 448 144 464 96 c 0 + 464 64 528 64 544 96 c 0 + 560 112 560 112 544 128 c 0 +416 0 m 0 + 416 16 448 16 448 0 c 0 + 448 0 448 0 464 -16 c 0 + 464 -32 448 -32 416 -48 c 0 + 368 -80 320 -80 320 -64 c 0 + 320 -64 336 -48 368 -32 c 0 + 384 -32 400 -16 416 0 c 0 +560 0 m 0 + 560 16 608 16 624 0 c 0 + 656 -16 672 -64 640 -64 c 0 + 624 -64 560 -16 560 0 c 0 +EndSplineSet +EndChar +StartChar: g +Encoding: 103 103 1 +Width: 1024 +Flags: W +TeX: 103 0 0 0 +Fore +448 624 m 0 + 480 656 496 672 496 672 c 0 + 512 672 528 656 544 624 c 0 + 576 592 608 576 624 560 c 0 + 688 544 704 528 688 512 c 0 + 672 496 640 496 608 528 c 0 + 592 544 576 544 576 528 c 0 + 560 528 544 528 544 528 c 0 + 528 528 528 512 528 512 c 0 + 528 496 560 480 576 496 c 0 + 592 512 608 512 608 512 c 0 + 624 496 624 464 608 464 c 0 + 608 448 l 0 + 608 432 592 400 576 384 c 2 + 544 352 l 1 + 576 352 l 2 + 592 352 608 368 608 368 c 0 + 624 384 656 368 656 336 c 0 + 656 336 624 320 512 320 c 0 + 384 320 352 336 352 336 c 0 + 352 352 368 352 400 352 c 2 + 432 352 l 1 + 416 400 l 2 + 416 416 416 448 416 448 c 0 + 432 464 464 400 464 384 c 0 + 448 368 464 352 480 352 c 0 + 496 352 496 368 496 416 c 2 + 496 464 l 1 + 448 464 l 2 + 416 464 400 464 384 464 c 0 + 368 480 400 496 448 496 c 0 + 480 496 496 496 496 512 c 0 + 496 512 480 528 464 528 c 0 + 448 528 432 528 432 528 c 0 + 432 544 416 528 400 512 c 0 + 384 512 368 496 352 496 c 0 + 320 480 320 496 368 544 c 0 + 400 560 432 608 448 624 c 0 +544 560 m 0 + 560 576 544 592 528 592 c 2 + 512 624 l 1 + 464 592 l 1 + 432 544 l 1 + 496 560 l 2 + 512 560 544 560 544 560 c 0 +560 416 m 2 + 576 464 l 1 + 544 464 l 2 + 528 464 528 464 528 416 c 0 + 528 384 528 352 528 352 c 0 + 528 352 544 384 560 416 c 2 +544 288 m 0 + 624 304 656 304 656 288 c 0 + 672 272 640 256 592 256 c 0 + 560 256 528 240 528 224 c 0 + 528 224 544 208 560 208 c 0 + 576 192 592 192 624 208 c 0 + 656 224 656 224 672 208 c 0 + 704 192 704 160 688 144 c 0 + 656 144 672 128 720 112 c 0 + 784 96 800 64 752 64 c 0 + 736 64 720 48 720 16 c 0 + 720 -16 720 -32 704 -48 c 2 + 688 -80 l 1 + 656 -64 l 2 + 608 -32 608 -16 640 -16 c 0 + 672 -16 672 -16 672 32 c 2 + 672 80 l 1 + 640 80 l 2 + 624 80 576 80 544 64 c 0 + 480 48 464 48 448 64 c 0 + 448 64 432 80 448 80 c 0 + 448 80 592 112 624 112 c 0 + 624 112 640 112 640 128 c 0 + 640 128 640 128 608 128 c 0 + 560 128 560 128 576 144 c 0 + 592 160 576 176 528 176 c 0 + 496 160 480 176 512 224 c 0 + 512 272 l 0 + 512 288 528 288 544 288 c 0 +368 272 m 0 + 384 288 400 272 416 256 c 0 + 432 240 432 240 416 160 c 0 + 416 112 400 64 400 32 c 0 + 400 0 384 -48 368 -48 c 0 + 352 -48 336 -32 336 -16 c 0 + 320 0 304 0 288 0 c 0 + 272 0 272 16 272 48 c 0 + 288 64 288 80 272 96 c 0 + 240 112 256 128 288 112 c 0 + 320 112 384 128 384 144 c 0 + 384 160 368 160 352 160 c 0 + 304 144 304 144 288 160 c 0 + 256 160 256 192 288 192 c 0 + 304 192 304 192 304 224 c 0 + 304 256 304 272 320 272 c 0 + 336 272 352 240 336 224 c 0 + 336 192 336 192 368 192 c 0 + 384 192 384 192 384 224 c 0 + 384 240 384 240 384 256 c 0 + 368 256 368 256 368 272 c 0 +368 64 m 0 + 368 80 368 96 352 96 c 0 + 320 96 320 80 320 48 c 0 + 320 16 320 16 336 16 c 0 + 352 0 368 32 368 64 c 0 +544 48 m 0 + 544 64 592 32 592 16 c 0 + 592 0 512 -32 496 -32 c 0 + 496 -16 496 -16 512 0 c 0 + 528 16 544 32 544 48 c 0 +EndSplineSet +EndChar +StartChar: k +Encoding: 107 107 2 +Width: 1024 +Flags: W +TeX: 107 0 0 0 +Fore +592 640 m 0 + 608 656 624 640 640 624 c 0 + 672 608 656 592 576 592 c 2 + 528 592 l 1 + 528 544 l 1 + 528 512 l 1 + 576 512 l 2 + 624 528 640 512 640 496 c 0 + 640 480 624 480 576 480 c 2 + 528 480 l 1 + 528 432 l 1 + 528 368 l 1 + 576 368 l 2 + 608 368 640 368 640 384 c 0 + 672 384 688 368 688 336 c 0 + 672 336 656 320 528 320 c 0 + 368 320 320 336 336 352 c 0 + 336 368 368 368 416 368 c 2 + 496 368 l 1 + 496 432 l 1 + 496 480 l 1 + 448 480 l 2 + 400 480 368 480 368 496 c 0 + 384 512 400 512 432 512 c 2 + 496 512 l 1 + 496 544 l 1 + 480 592 l 1 + 432 592 l 2 + 368 608 352 608 368 624 c 0 + 368 640 400 640 480 624 c 0 + 544 624 592 624 592 640 c 0 +560 464 m 0 + 560 480 576 480 608 448 c 0 + 640 416 640 400 608 400 c 0 + 592 400 560 448 560 464 c 0 +608 304 m 0 + 624 304 624 304 624 304 c 1 + 640 304 672 288 672 288 c 0 + 672 272 656 272 624 272 c 0 + 592 272 560 256 560 224 c 0 + 560 224 560 208 592 224 c 0 + 640 224 688 208 672 192 c 0 + 656 176 544 128 544 144 c 0 + 544 144 l 0 + 560 160 576 160 592 176 c 0 + 608 192 608 192 560 192 c 0 + 544 192 528 192 512 176 c 0 + 496 176 480 176 480 192 c 0 + 480 192 496 208 512 224 c 0 + 528 240 528 256 528 272 c 0 + 528 288 528 288 560 288 c 0 + 576 288 592 288 608 304 c 0 +400 256 m 0 + 400 304 400 304 416 288 c 0 + 432 272 448 256 448 256 c 0 + 448 256 432 208 432 176 c 0 + 400 16 400 0 384 0 c 0 + 368 -16 368 -16 352 0 c 0 + 320 32 320 48 352 32 c 0 + 368 32 368 32 384 64 c 0 + 384 96 384 128 384 144 c 2 + 400 192 l 1 + 352 192 l 2 + 320 192 304 192 304 192 c 0 + 288 208 288 208 320 208 c 0 + 336 208 336 224 336 240 c 0 + 336 256 336 272 336 272 c 0 + 368 288 368 272 368 240 c 0 + 368 192 400 208 400 256 c 0 +272 144 m 0 + 272 160 352 160 368 144 c 0 + 368 144 368 128 352 128 c 0 + 352 128 336 112 336 96 c 0 + 336 80 304 32 288 48 c 0 + 272 64 272 64 288 80 c 0 + 304 112 304 112 288 128 c 0 + 272 128 272 144 272 144 c 0 +640 144 m 0 + 656 144 l 0 + 672 144 688 144 704 128 c 0 + 736 128 752 128 752 112 c 0 + 752 96 752 96 720 96 c 2 + 688 96 l 1 + 704 32 l 2 + 704 -32 688 -48 624 -32 c 0 + 592 0 576 16 624 0 c 2 + 656 0 l 1 + 656 48 l 2 + 656 96 656 96 640 96 c 0 + 624 96 592 96 592 96 c 0 + 576 96 560 80 576 64 c 0 + 576 64 576 48 544 32 c 0 + 496 -16 464 0 512 48 c 2 + 544 80 l 1 + 512 80 l 2 + 480 80 464 80 448 96 c 0 + 432 112 432 112 528 112 c 0 + 592 128 624 128 640 144 c 0 +EndSplineSet +EndChar +StartChar: l +Encoding: 108 108 3 +Width: 1024 +Flags: W +TeX: 108 0 0 0 +Fore +512 624 m 0 + 528 624 560 640 560 640 c 0 + 576 640 608 592 592 592 c 0 + 592 592 576 576 544 576 c 0 + 528 576 512 576 512 560 c 0 + 512 544 528 544 624 576 c 0 + 656 576 656 576 656 560 c 0 + 672 528 656 528 592 528 c 0 + 544 528 544 512 608 496 c 0 + 640 480 672 480 672 464 c 0 + 672 464 640 432 624 432 c 0 + 608 432 608 432 608 432 c 0 + 608 416 608 384 592 352 c 0 + 592 320 576 288 576 288 c 0 + 560 288 l 0 + 560 304 432 304 432 304 c 0 + 416 288 416 288 400 288 c 0 + 400 288 384 304 384 368 c 2 + 384 448 l 1 + 432 448 l 1 + 480 432 l 1 + 480 464 l 2 + 464 480 464 496 464 496 c 0 + 464 496 432 480 400 464 c 0 + 368 448 336 432 336 432 c 0 + 320 448 336 464 368 480 c 0 + 384 496 416 512 432 512 c 0 + 448 528 448 528 384 528 c 0 + 352 528 336 528 336 544 c 0 + 336 560 352 560 400 560 c 0 + 448 560 464 560 464 560 c 0 + 464 576 448 576 416 576 c 0 + 368 576 352 576 352 592 c 0 + 352 608 368 608 400 608 c 0 + 432 608 480 608 512 624 c 0 +576 448 m 0 + 576 448 560 464 544 480 c 0 + 512 512 512 512 512 496 c 0 + 512 480 512 464 512 464 c 0 + 496 448 512 448 528 448 c 0 + 560 448 576 448 576 448 c 0 +560 400 m 0 + 560 400 528 416 496 416 c 0 + 464 416 432 400 432 400 c 0 + 432 400 464 384 496 384 c 0 + 544 384 560 400 560 400 c 0 +560 352 m 0 + 560 352 528 352 496 352 c 0 + 464 352 432 352 432 352 c 0 + 432 336 464 336 496 336 c 0 + 528 336 560 336 560 352 c 0 +480 256 m 0 + 464 288 496 288 528 256 c 0 + 544 240 560 240 576 240 c 0 + 592 240 592 224 592 224 c 0 + 592 208 576 208 560 208 c 0 + 528 208 512 208 512 192 c 0 + 512 192 528 192 560 192 c 0 + 576 192 608 176 624 176 c 2 + 640 160 l 1 + 624 112 l 2 + 592 48 592 48 640 48 c 0 + 688 48 736 16 704 0 c 0 + 704 -16 688 0 640 0 c 0 + 544 32 512 32 496 -16 c 0 + 480 -48 464 -48 464 0 c 0 + 464 32 448 32 384 0 c 0 + 336 -16 320 -16 304 16 c 0 + 272 32 272 32 288 48 c 0 + 304 48 320 48 320 48 c 0 + 336 32 352 32 352 32 c 0 + 368 48 368 112 352 144 c 0 + 352 176 352 176 368 176 c 0 + 416 160 464 176 464 192 c 0 + 464 208 464 208 448 208 c 0 + 416 208 384 208 384 224 c 0 + 384 224 416 224 432 224 c 0 + 480 224 480 240 480 256 c 0 +592 144 m 0 + 576 160 512 176 512 160 c 0 + 512 144 528 144 528 144 c 0 + 560 144 560 112 528 112 c 0 + 496 112 496 96 528 96 c 0 + 528 96 544 96 544 80 c 0 + 528 64 l 0 + 480 48 496 32 544 48 c 0 + 576 48 576 48 592 80 c 0 + 592 112 592 128 592 144 c 0 +464 144 m 0 + 464 160 432 160 432 144 c 0 + 416 144 416 128 416 128 c 0 + 432 112 464 128 464 144 c 0 +464 96 m 0 + 448 112 416 112 400 96 c 0 + 384 64 400 48 432 48 c 0 + 464 48 480 64 448 64 c 2 + 432 80 l 1 + 448 80 l 2 + 464 96 464 96 464 96 c 0 +EndSplineSet +EndChar +StartChar: h +Encoding: 104 104 4 +Width: 1024 +Flags: W +TeX: 104 0 0 0 +Fore +400 640 m 0 + 432 656 432 640 432 608 c 0 + 432 576 432 560 464 576 c 0 + 512 576 l 0 + 544 576 544 576 544 592 c 0 + 528 608 544 624 544 624 c 0 + 560 656 576 624 576 592 c 0 + 576 576 576 576 608 576 c 0 + 656 576 656 576 656 560 c 0 + 656 560 640 544 624 544 c 0 + 576 544 576 544 576 512 c 0 + 576 496 608 480 640 496 c 0 + 656 512 656 512 672 496 c 0 + 688 480 688 480 672 464 c 0 + 672 464 640 464 624 464 c 0 + 576 464 576 464 576 448 c 0 + 576 416 608 416 624 432 c 0 + 624 432 640 432 656 432 c 0 + 672 400 656 384 608 384 c 0 + 576 384 576 384 576 368 c 0 + 576 336 608 336 640 352 c 0 + 688 352 l 0 + 720 320 672 304 544 304 c 0 + 448 304 432 304 448 320 c 0 + 448 336 448 336 496 336 c 0 + 544 336 544 336 544 368 c 0 + 544 384 544 384 496 384 c 0 + 464 384 464 400 464 400 c 0 + 464 416 480 416 512 416 c 0 + 544 416 544 416 544 448 c 0 + 544 464 528 464 512 464 c 0 + 496 464 480 448 480 448 c 0 + 464 432 464 432 448 448 c 0 + 432 464 432 464 432 400 c 0 + 432 320 416 288 400 320 c 0 + 400 320 400 352 400 384 c 2 + 400 448 l 1 + 384 416 l 2 + 368 400 352 384 336 384 c 0 + 320 384 320 400 352 448 c 0 + 368 480 384 512 384 512 c 0 + 384 512 384 528 368 528 c 0 + 336 528 336 560 368 560 c 0 + 384 560 400 560 384 592 c 0 + 384 608 400 624 400 640 c 0 +544 512 m 0 + 544 528 544 544 512 544 c 0 + 496 544 480 544 480 544 c 0 + 480 544 464 528 448 528 c 0 + 432 528 416 512 448 496 c 0 + 448 480 464 480 464 496 c 0 + 464 496 480 496 512 496 c 0 + 528 496 544 496 544 512 c 0 +608 272 m 0 + 624 288 640 288 656 272 c 0 + 656 240 640 240 576 240 c 0 + 560 240 528 224 528 224 c 0 + 528 224 544 208 576 224 c 0 + 624 224 624 224 624 208 c 0 + 624 192 624 192 576 192 c 0 + 544 192 528 176 528 160 c 0 + 528 160 544 160 592 160 c 0 + 624 160 640 160 640 144 c 0 + 624 128 624 128 576 128 c 0 + 512 112 528 96 592 96 c 0 + 672 112 688 96 672 32 c 0 + 640 -48 608 -80 576 -48 c 0 + 544 -16 544 0 576 -16 c 0 + 608 -16 624 -16 624 0 c 0 + 624 0 l 0 + 608 -16 560 32 560 48 c 0 + 560 64 592 64 608 32 c 2 + 640 16 l 1 + 640 48 l 1 + 640 64 l 1 + 544 64 l 2 + 480 64 448 64 432 64 c 0 + 432 64 448 48 464 32 c 0 + 480 16 496 -32 464 -32 c 0 + 464 -32 448 -16 432 16 c 0 + 416 32 416 48 400 48 c 0 + 400 48 400 96 400 160 c 2 + 400 272 l 1 + 496 272 l 2 + 576 272 608 272 608 272 c 0 +496 224 m 0 + 496 224 480 240 464 240 c 0 + 448 240 432 224 432 224 c 0 + 432 224 448 208 464 208 c 0 + 496 208 496 224 496 224 c 0 +496 176 m 0 + 496 176 496 192 464 192 c 0 + 448 192 432 176 432 176 c 0 + 432 160 448 160 464 160 c 0 + 496 160 496 160 496 176 c 0 +496 128 m 0 + 496 144 448 144 432 128 c 0 + 432 112 432 112 448 96 c 0 + 480 96 512 112 496 128 c 0 +368 32 m 0 + 384 64 384 64 384 48 c 0 + 400 16 384 -32 368 -32 c 0 + 352 -48 352 -16 368 32 c 0 +496 48 m 0 + 496 64 528 64 544 32 c 0 + 560 16 560 -16 528 -16 c 0 + 528 -16 496 32 496 48 c 0 +EndSplineSet +EndChar +StartChar: B +Encoding: 66 66 5 +Width: 1024 +Flags: W +TeX: 66 0 0 0 +Fore +528 624 m 0 + 512 624 512 640 544 640 c 0 + 576 640 592 624 576 592 c 0 + 560 560 576 560 608 560 c 0 + 640 576 640 544 592 528 c 0 + 560 512 560 496 576 480 c 0 + 576 480 576 464 576 448 c 0 + 576 432 592 416 608 400 c 2 + 640 384 l 1 + 608 336 l 2 + 576 288 544 272 528 304 c 0 + 512 320 512 336 528 320 c 0 + 560 320 576 352 576 368 c 0 + 576 400 576 400 560 400 c 0 + 512 400 512 416 528 432 c 0 + 544 464 544 464 528 464 c 0 + 512 464 448 416 448 384 c 0 + 448 368 416 320 416 320 c 0 + 400 320 400 336 384 336 c 0 + 384 352 384 352 384 368 c 0 + 400 384 400 400 384 400 c 0 + 368 416 352 400 336 352 c 0 + 336 320 320 304 320 304 c 0 + 288 304 288 352 320 384 c 0 + 336 416 336 432 320 448 c 0 + 288 448 304 464 320 464 c 0 + 336 464 352 480 368 496 c 0 + 384 512 384 512 352 544 c 0 + 304 576 304 576 336 576 c 0 + 352 576 368 592 384 608 c 0 + 400 624 432 624 448 608 c 0 + 464 592 464 592 432 576 c 0 + 416 560 416 560 416 544 c 0 + 416 528 432 512 432 512 c 0 + 464 512 448 496 432 480 c 0 + 400 464 384 448 400 432 c 0 + 400 416 416 416 480 480 c 0 + 528 512 528 528 528 560 c 0 + 528 592 528 608 528 624 c 0 +656 544 m 2 + 656 592 672 592 704 576 c 0 + 736 560 736 544 688 528 c 2 + 656 512 l 1 + 656 544 l 2 +448 240 m 0 + 512 240 608 240 624 240 c 0 + 624 224 608 224 576 208 c 0 + 544 192 544 192 544 192 c 0 + 544 224 512 224 448 192 c 2 + 400 176 l 1 + 368 208 l 1 + 336 240 l 1 + 384 240 l 2 + 400 224 432 224 448 240 c 0 +448 160 m 0 + 448 160 544 160 560 160 c 0 + 560 144 544 144 528 128 c 0 + 480 112 480 96 544 112 c 0 + 608 112 640 80 640 48 c 0 + 640 16 576 -64 544 -64 c 0 + 448 -96 320 -48 352 16 c 0 + 368 32 400 48 416 48 c 0 + 464 32 480 0 480 -16 c 0 + 464 -32 512 -32 560 -16 c 0 + 608 16 608 32 576 64 c 0 + 560 80 544 80 496 80 c 0 + 432 64 416 80 448 112 c 0 + 464 128 464 128 448 144 c 0 + 448 144 448 144 448 160 c 0 +432 0 m 0 + 416 16 384 16 384 0 c 0 + 384 -16 400 -48 416 -48 c 0 + 448 -48 448 -16 432 0 c 0 +EndSplineSet +EndChar +StartChar: s +Encoding: 115 115 6 +Width: 1024 +Flags: W +TeX: 115 0 0 0 +Fore +384 576 m 0 + 400 608 432 640 432 640 c 0 + 432 640 448 624 464 608 c 0 + 496 576 496 576 496 560 c 0 + 480 544 480 560 464 560 c 0 + 432 592 432 592 416 560 c 2 + 400 528 l 1 + 448 528 l 2 + 480 544 480 528 480 528 c 0 + 480 512 480 512 464 496 c 0 + 448 496 448 496 448 496 c 0 + 448 480 464 480 480 496 c 0 + 480 496 480 496 496 496 c 0 + 512 480 512 496 512 544 c 2 + 512 624 l 1 + 576 624 l 1 + 656 624 l 1 + 640 544 l 2 + 640 480 640 464 656 448 c 0 + 672 448 672 432 656 416 c 2 + 624 384 l 1 + 656 368 l 2 + 688 352 688 336 688 336 c 0 + 672 320 656 320 624 336 c 2 + 608 352 l 1 + 544 336 l 2 + 480 304 464 304 464 320 c 0 + 464 352 464 352 432 336 c 0 + 368 320 352 320 352 336 c 0 + 336 352 352 352 384 352 c 0 + 416 352 416 368 416 400 c 0 + 416 448 400 448 400 448 c 0 + 384 448 384 448 384 432 c 0 + 400 416 400 384 384 384 c 0 + 368 384 352 416 352 448 c 0 + 352 464 352 480 352 480 c 0 + 336 496 336 496 352 512 c 0 + 352 512 368 544 384 576 c 0 +608 576 m 0 + 608 576 592 576 576 576 c 0 + 560 576 544 576 544 576 c 0 + 544 576 560 560 576 560 c 0 + 592 560 608 576 608 576 c 0 +608 512 m 0 + 608 528 608 528 576 528 c 0 + 560 528 544 528 544 512 c 0 + 544 512 560 496 576 496 c 0 + 608 496 608 512 608 512 c 0 +416 496 m 0 + 416 496 400 512 384 512 c 0 + 368 496 368 480 384 480 c 0 + 400 480 416 480 416 496 c 0 +576 448 m 0 + 560 496 544 480 544 416 c 0 + 544 368 544 368 560 368 c 0 + 592 368 592 384 592 400 c 0 + 576 416 576 432 576 448 c 0 +624 464 m 0 + 592 480 592 480 592 448 c 0 + 592 416 608 416 624 448 c 0 + 624 464 l 0 +496 352 m 0 + 512 368 512 384 512 416 c 0 + 512 448 512 464 496 448 c 0 + 496 432 496 416 480 400 c 0 + 480 384 480 384 480 368 c 0 + 496 368 496 368 496 352 c 0 + 496 352 l 0 +464 432 m 0 + 464 448 464 448 448 448 c 0 + 448 448 448 448 448 432 c 0 + 448 416 448 416 448 416 c 0 + 448 416 448 416 464 432 c 0 +400 272 m 0 + 400 272 416 272 416 256 c 0 + 432 240 448 240 464 256 c 0 + 496 256 624 256 656 256 c 0 + 672 240 688 240 688 224 c 0 + 704 208 656 176 640 176 c 0 + 608 176 544 160 544 144 c 0 + 544 128 624 128 656 144 c 0 + 672 160 672 160 688 160 c 0 + 688 144 720 144 736 144 c 0 + 768 144 768 144 768 128 c 0 + 768 112 752 112 736 112 c 0 + 704 96 704 96 704 48 c 0 + 704 0 688 -48 656 -48 c 0 + 656 -32 640 -32 624 -16 c 2 + 592 16 l 1 + 624 16 l 2 + 656 16 656 16 656 32 c 0 + 672 48 672 64 656 80 c 0 + 656 96 656 112 624 112 c 0 + 592 112 576 112 560 96 c 0 + 544 96 544 96 560 80 c 0 + 592 48 592 32 544 16 c 0 + 496 0 496 16 528 32 c 0 + 544 64 544 96 528 96 c 0 + 512 80 464 96 464 112 c 0 + 464 112 480 128 496 128 c 0 + 512 128 544 176 528 192 c 0 + 512 208 512 224 528 224 c 0 + 528 256 528 256 496 240 c 0 + 448 208 432 176 432 128 c 0 + 432 32 416 -16 384 -16 c 0 + 368 -16 352 0 336 16 c 0 + 320 32 320 32 304 16 c 0 + 288 0 256 0 256 32 c 0 + 256 32 256 48 272 48 c 0 + 272 64 288 80 288 96 c 0 + 288 144 304 160 336 144 c 0 + 352 144 368 144 384 160 c 0 + 416 192 416 192 400 224 c 0 + 400 256 400 272 400 272 c 0 +624 224 m 0 + 624 240 576 240 560 224 c 0 + 544 224 560 192 576 192 c 0 + 592 176 640 208 624 224 c 0 +384 80 m 0 + 384 112 384 128 352 96 c 0 + 336 64 336 32 368 32 c 0 + 384 32 384 48 384 80 c 0 +EndSplineSet +EndChar +StartChar: r +Encoding: 114 114 7 +Width: 1024 +Flags: W +TeX: 114 0 0 0 +Fore +544 672 m 0 + 560 688 592 656 576 624 c 0 + 576 608 576 608 592 640 c 0 + 608 656 624 672 624 672 c 0 + 640 672 656 640 640 624 c 0 + 624 624 624 608 656 592 c 0 + 688 560 704 512 672 512 c 0 + 656 496 640 496 640 480 c 0 + 624 464 624 464 656 432 c 0 + 672 416 688 400 688 368 c 0 + 688 336 688 336 656 336 c 0 + 608 336 576 384 544 448 c 0 + 528 512 512 512 512 416 c 0 + 512 336 496 320 496 320 c 0 + 480 320 480 336 480 416 c 0 + 480 480 480 496 464 496 c 0 + 448 496 448 496 432 464 c 0 + 432 400 368 336 352 336 c 0 + 336 352 352 368 368 400 c 0 + 384 416 400 448 400 464 c 2 + 416 496 l 1 + 368 496 l 2 + 320 496 320 528 368 528 c 0 + 400 528 416 544 416 544 c 0 + 416 544 400 544 368 544 c 0 + 352 544 336 544 336 544 c 0 + 336 560 432 608 464 624 c 0 + 464 624 448 624 432 624 c 0 + 384 624 368 640 368 640 c 0 + 368 656 384 656 464 656 c 0 + 496 656 544 672 544 672 c 0 +544 592 m 0 + 528 640 512 640 512 576 c 0 + 512 528 512 528 544 528 c 0 + 576 544 592 528 576 496 c 2 + 576 464 l 1 + 592 480 l 1 + 624 512 l 1 + 592 544 l 2 + 576 544 560 576 544 592 c 0 +640 544 m 0 + 640 544 624 560 608 576 c 2 + 576 592 l 1 + 608 560 l 2 + 624 544 640 544 640 544 c 0 +464 544 m 0 + 464 560 464 576 448 576 c 0 + 448 576 448 560 448 544 c 0 + 448 528 448 528 448 528 c 0 + 464 528 464 528 464 544 c 0 +624 416 m 0 + 608 432 592 448 592 448 c 0 + 576 448 608 400 624 384 c 0 + 656 368 656 384 624 416 c 0 +480 272 m 0 + 496 288 544 272 544 240 c 0 + 544 224 560 224 576 224 c 0 + 608 240 640 224 640 192 c 0 + 640 192 640 192 592 192 c 0 + 544 192 544 192 544 176 c 0 + 544 160 560 160 608 160 c 0 + 656 160 672 160 688 144 c 2 + 704 112 l 1 + 688 64 l 2 + 672 32 656 16 656 0 c 0 + 704 0 l 0 + 736 0 768 -32 752 -48 c 0 + 736 -48 720 -48 688 -48 c 0 + 656 -32 608 -32 576 -32 c 2 + 528 -16 l 1 + 528 -64 l 2 + 512 -112 496 -112 480 -64 c 0 + 480 -32 464 -16 368 -48 c 0 + 320 -64 320 -64 288 -32 c 0 + 272 -32 272 -16 272 -16 c 0 + 272 -16 304 0 320 -16 c 0 + 400 -16 400 0 368 80 c 0 + 352 96 352 128 352 144 c 0 + 352 144 368 144 416 144 c 0 + 480 144 512 160 496 176 c 0 + 496 192 480 192 448 176 c 0 + 416 176 416 176 400 192 c 2 + 368 208 l 1 + 432 208 l 2 + 496 208 512 224 496 256 c 0 + 480 272 480 272 480 272 c 0 +496 112 m 0 + 496 128 480 128 448 128 c 0 + 400 112 400 96 448 96 c 0 + 480 96 496 96 496 112 c 0 +640 80 m 2 + 656 128 l 1 + 592 128 l 2 + 576 128 544 128 544 128 c 0 + 528 112 528 96 560 96 c 0 + 608 96 608 64 576 64 c 0 + 544 64 528 64 528 64 c 0 + 528 64 544 48 576 48 c 0 + 592 48 608 48 608 32 c 0 + 608 32 592 16 576 16 c 0 + 560 32 544 16 528 16 c 0 + 528 0 624 0 624 16 c 0 + 640 16 640 48 640 80 c 2 +496 64 m 0 + 496 64 480 64 448 64 c 0 + 416 64 416 64 416 48 c 0 + 416 48 416 48 432 48 c 0 + 464 48 512 64 496 64 c 0 +496 16 m 0 + 496 16 416 32 416 16 c 0 + 400 16 416 0 448 0 c 0 + 480 0 496 0 496 16 c 0 +EndSplineSet +EndChar +StartChar: b +Encoding: 98 98 8 +Width: 1024 +Flags: W +TeX: 98 0 0 0 +Fore +448 640 m 0 + 464 672 512 688 512 656 c 0 + 496 640 528 624 576 640 c 0 + 576 656 592 640 592 640 c 0 + 608 624 608 608 576 592 c 2 + 560 576 l 1 + 608 576 l 1 + 672 576 l 1 + 672 464 l 2 + 672 352 656 336 640 320 c 0 + 624 304 624 304 592 320 c 0 + 560 336 560 352 592 352 c 0 + 624 352 624 368 624 384 c 0 + 624 400 624 416 592 416 c 0 + 480 416 464 416 416 368 c 0 + 368 320 352 304 352 320 c 0 + 352 336 368 352 384 368 c 0 + 400 400 416 416 416 480 c 0 + 416 528 400 544 384 528 c 0 + 368 512 368 512 368 528 c 0 + 368 528 368 544 400 576 c 0 + 416 592 432 624 448 640 c 0 +528 592 m 0 + 544 608 544 608 512 608 c 0 + 464 608 448 592 448 576 c 0 + 448 560 512 576 528 592 c 0 +528 528 m 0 + 512 560 448 560 448 528 c 0 + 448 512 464 512 480 512 c 0 + 512 512 528 512 528 528 c 0 +624 528 m 0 + 624 544 608 544 592 544 c 0 + 560 544 560 544 560 528 c 0 + 560 512 560 512 592 512 c 0 + 608 512 624 512 624 528 c 0 +528 464 m 0 + 528 480 512 480 496 480 c 0 + 464 480 448 480 448 448 c 0 + 448 432 512 448 528 464 c 0 +624 464 m 0 + 624 464 608 480 592 480 c 0 + 560 480 544 480 560 464 c 0 + 560 448 576 448 592 448 c 0 + 624 432 624 448 624 464 c 0 +368 256 m 0 + 368 288 384 288 400 256 c 0 + 416 240 416 240 384 224 c 0 + 368 192 368 192 384 144 c 0 + 400 144 400 128 368 96 c 0 + 336 64 336 64 352 32 c 0 + 368 16 368 -32 352 -64 c 0 + 336 -96 320 -80 320 -16 c 0 + 320 32 320 32 288 16 c 0 + 272 16 256 16 256 16 c 0 + 240 32 240 32 336 112 c 0 + 368 144 368 160 320 160 c 0 + 288 160 288 176 320 208 c 0 + 368 256 l 0 +576 240 m 0 + 640 256 688 256 688 240 c 0 + 688 208 560 176 512 208 c 0 + 496 224 496 240 512 224 c 0 + 528 224 544 224 576 240 c 0 +624 160 m 0 + 736 176 720 176 752 160 c 0 + 768 160 784 144 784 144 c 0 + 784 128 752 128 704 112 c 0 + 656 112 592 112 560 112 c 0 + 496 96 480 96 464 128 c 2 + 448 144 l 1 + 496 144 l 2 + 528 128 576 144 624 160 c 0 +688 32 m 2 + 672 96 672 96 688 96 c 0 + 704 96 736 32 736 -16 c 0 + 736 -32 736 -64 720 -64 c 2 + 704 -96 l 1 + 640 -64 l 2 + 592 -48 592 -32 640 -32 c 2 + 688 -32 l 1 + 688 32 l 2 +EndSplineSet +EndChar +StartChar: R +Encoding: 82 82 9 +Width: 1024 +Flags: W +TeX: 82 0 0 0 +Fore +528 640 m 0 + 528 656 528 656 560 640 c 0 + 576 624 592 608 576 592 c 0 + 576 560 576 560 608 560 c 0 + 656 544 656 512 624 496 c 0 + 560 480 528 432 576 400 c 0 + 576 384 576 384 576 368 c 0 + 560 352 560 320 560 304 c 0 + 576 256 592 240 640 272 c 0 + 656 272 672 288 656 304 c 0 + 656 336 672 336 704 304 c 0 + 720 272 720 256 720 256 c 0 + 704 240 640 224 608 224 c 0 + 544 224 528 256 528 320 c 0 + 528 352 528 384 528 400 c 0 + 512 416 464 368 464 320 c 0 + 464 288 448 272 448 256 c 0 + 432 240 416 240 400 256 c 0 + 384 256 384 272 400 288 c 0 + 416 304 416 320 416 320 c 0 + 400 352 384 336 352 304 c 0 + 336 288 320 272 320 272 c 0 + 304 272 288 288 320 320 c 0 + 336 352 336 368 320 384 c 0 + 288 400 304 416 336 416 c 0 + 352 416 368 416 368 432 c 0 + 384 448 384 448 368 464 c 0 + 352 464 352 480 368 496 c 0 + 384 512 384 512 368 528 c 0 + 352 528 352 544 416 544 c 0 + 464 560 464 544 464 544 c 0 + 464 528 464 528 448 512 c 0 + 448 512 448 512 448 496 c 0 + 448 480 448 464 432 464 c 0 + 400 448 400 432 432 432 c 0 + 480 448 480 432 432 400 c 0 + 400 384 384 368 416 368 c 0 + 432 352 448 368 480 416 c 0 + 528 448 528 480 544 512 c 0 + 544 544 544 592 528 608 c 0 + 528 624 528 640 528 640 c 0 +576 528 m 0 + 576 544 576 544 576 528 c 0 + 560 528 560 528 576 512 c 0 + 576 512 576 512 576 528 c 0 +400 608 m 0 + 400 624 400 640 432 640 c 0 + 480 640 480 608 432 592 c 0 + 416 576 400 576 400 576 c 0 + 400 576 400 592 400 608 c 0 +624 448 m 0 + 608 480 608 480 640 480 c 0 + 656 480 656 464 656 416 c 0 + 656 368 656 368 640 352 c 0 + 608 320 592 336 608 368 c 0 + 624 384 624 416 624 448 c 0 +448 176 m 0 + 480 176 512 176 512 176 c 0 + 544 192 560 176 560 96 c 0 + 560 48 560 48 528 16 c 2 + 496 -16 l 1 + 528 0 l 2 + 560 0 592 -16 576 -48 c 0 + 576 -64 496 -80 448 -64 c 0 + 432 -48 416 -32 448 -16 c 0 + 464 0 464 16 448 16 c 0 + 400 48 432 128 496 128 c 0 + 512 128 528 128 528 144 c 0 + 528 144 512 160 496 144 c 0 + 448 128 416 144 416 160 c 0 + 416 176 416 176 448 176 c 0 +512 80 m 0 + 512 96 464 96 464 80 c 0 + 448 80 448 48 464 32 c 0 + 480 16 480 32 496 48 c 0 + 512 64 512 80 512 80 c 0 +EndSplineSet +EndChar +StartChar: S +Encoding: 83 83 10 +Width: 1024 +Flags: W +TeX: 83 0 0 0 +Fore +480 448 m 0 + 480 480 480 496 528 464 c 0 + 544 448 544 448 544 416 c 0 + 528 400 544 384 608 336 c 0 + 704 288 720 256 688 240 c 0 + 688 224 672 240 608 288 c 0 + 496 384 512 384 432 304 c 0 + 400 272 368 240 352 240 c 0 + 304 208 320 240 400 320 c 0 + 480 400 480 416 480 448 c 0 +480 288 m 0 + 512 288 544 288 544 288 c 0 + 576 304 576 272 544 256 c 0 + 512 240 528 224 560 224 c 0 + 576 224 576 208 544 192 c 0 + 512 192 512 160 544 160 c 0 + 576 160 576 128 544 128 c 0 + 512 112 528 80 560 80 c 0 + 608 80 608 80 608 64 c 0 + 608 48 576 48 480 48 c 0 + 384 48 368 48 400 96 c 0 + 416 112 416 112 416 128 c 0 + 416 144 416 160 416 160 c 0 + 448 176 448 192 416 208 c 0 + 384 224 400 224 448 224 c 0 + 480 224 496 240 464 256 c 0 + 432 272 432 288 480 288 c 0 +480 96 m 0 + 480 112 464 112 448 96 c 0 + 432 80 432 80 448 80 c 0 + 464 64 480 80 480 96 c 0 +EndSplineSet +EndChar +StartChar: H +Encoding: 72 72 11 +Width: 1024 +Flags: W +TeX: 72 0 0 0 +Fore +448 480 m 0 + 448 496 448 512 464 512 c 0 + 464 512 512 464 512 448 c 0 + 512 432 352 304 336 304 c 0 + 320 320 352 352 384 384 c 0 + 432 432 448 464 448 480 c 0 +608 336 m 0 + 560 384 544 400 560 400 c 0 + 592 400 688 336 688 304 c 0 + 704 256 672 256 608 336 c 0 +464 352 m 0 + 464 368 480 368 496 352 c 0 + 560 320 560 304 496 288 c 0 + 480 288 464 288 480 304 c 0 + 480 320 480 336 480 336 c 0 + 464 352 464 352 464 352 c 0 +432 256 m 2 + 512 272 528 272 544 256 c 0 + 560 224 544 160 528 128 c 0 + 512 112 512 96 528 96 c 0 + 544 96 560 80 544 64 c 0 + 544 48 544 48 496 48 c 0 + 432 32 400 64 432 80 c 0 + 448 96 448 112 432 128 c 0 + 416 160 416 176 480 208 c 2 + 512 224 l 1 + 464 224 l 2 + 448 224 416 224 416 240 c 2 + 384 256 l 1 + 432 256 l 2 +512 176 m 0 + 496 192 480 192 464 176 c 0 + 448 176 448 128 464 128 c 0 + 496 128 512 160 512 176 c 0 +EndSplineSet +EndChar +StartChar: L +Encoding: 76 76 12 +Width: 1024 +Flags: W +TeX: 76 0 0 0 +Fore +480 528 m 0 + 480 560 512 560 528 544 c 0 + 544 528 544 512 528 496 c 0 + 512 480 512 464 544 464 c 0 + 576 464 576 448 560 432 c 0 + 544 416 544 416 560 400 c 0 + 624 384 624 368 576 336 c 0 + 560 336 544 320 544 304 c 0 + 528 272 528 224 544 224 c 0 + 560 224 544 176 528 144 c 2 + 480 112 l 1 + 528 112 l 2 + 560 128 576 128 576 112 c 0 + 592 80 560 64 512 64 c 0 + 464 64 432 80 448 112 c 0 + 464 112 464 128 448 160 c 0 + 432 224 432 272 448 304 c 0 + 464 304 464 304 480 288 c 0 + 496 272 512 288 512 320 c 0 + 512 368 512 368 464 336 c 0 + 400 304 384 320 448 384 c 0 + 480 416 480 432 480 528 c 0 +560 368 m 0 + 560 384 l 0 + 544 384 544 368 544 368 c 0 + 544 368 544 352 560 352 c 0 + 560 368 l 0 +496 208 m 0 + 496 208 496 224 480 240 c 0 + 464 240 464 240 480 224 c 0 + 480 192 496 176 496 208 c 0 +EndSplineSet +EndChar +StartChar: P +Encoding: 80 80 13 +Width: 1024 +Flags: W +TeX: 80 0 0 0 +Fore +480 448 m 0 + 512 496 512 512 528 496 c 0 + 544 480 544 416 544 384 c 0 + 528 368 528 352 560 352 c 0 + 576 352 576 336 576 320 c 0 + 576 304 576 304 528 288 c 0 + 512 288 496 272 480 240 c 0 + 464 176 464 160 512 128 c 0 + 560 96 576 80 544 64 c 0 + 496 32 416 112 416 176 c 0 + 416 192 432 224 448 256 c 0 + 480 304 480 320 464 352 c 0 + 464 368 464 384 480 448 c 0 +EndSplineSet +EndChar +StartChar: plus +Encoding: 43 43 14 +Width: 1024 +Flags: W +TeX: 112 0 0 0 +Fore +0 848 m 1 + 1088 848 l 1 + 1088 -208 l 1 + 0 -208 l 1 + 0 848 l 1 +EndSplineSet +EndChar +StartChar: comma +Encoding: 44 44 15 +Width: 1024 +VWidth: 16000 +Flags: H +TeX: 99 0 0 0 +Fore +324.894 722.652 m 0 + 418.447 762.901 502.209 795.536 509.824 796.624 c 1 + 525.054 796.624 859.016 657.383 874.246 644.329 c 0 + 880.772 638.89 968.887 -118.236 968.887 -173.716 c 0 + 968.887 -192.209 948.218 -193.297 512 -193.297 c 0 + 75.7822 -193.297 55.1133 -192.209 55.1133 -173.716 c 0 + 55.1133 -130.202 142.14 636.714 147.578 642.153 c 0 + 150.842 645.417 230.253 681.314 324.894 722.652 c 0 +696.93 695.457 m 2 + 609.904 733.53 531.581 766.165 522.878 769.429 c 0 + 514.176 771.604 430.413 741.146 337.948 699.808 c 2 + 169.335 626.924 l 1 + 160.633 561.654 l 2 + 156.281 526.844 136.7 349.528 117.119 168.949 c 2 + 81.2207 -160.662 l 1 + 512 -160.662 l 1 + 942.778 -160.662 l 1 + 906.881 168.949 l 2 + 887.3 349.528 867.719 526.844 863.367 561.654 c 2 + 854.665 626.924 l 1 + 696.93 695.457 l 2 +EndSplineSet +EndChar +EndChars +EndSplineFont diff --git a/data/themes/pieces/ShogiSVG-TTF/Shogi.ttf b/data/themes/pieces/ShogiSVG-TTF/Shogi.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e5607f1488867969c0785ae823a49f780e9af3ad GIT binary patch literal 8796 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 RKcm0zz4Tl9`yD4w{5L`S5!(O& literal 0 HcwPel00001 diff --git a/data/themes/pieces/ShogiSVG-TTF/theme.desktop b/data/themes/pieces/ShogiSVG-TTF/theme.desktop new file mode 100644 index 0000000..f48c8ec --- /dev/null +++ b/data/themes/pieces/ShogiSVG-TTF/theme.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Shogi SVG/TTF +Type=Application +Comment=Shogi TTF theme from SVG files +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess,Shogi[default] diff --git a/data/themes/pieces/ShogiSVG-TTF/theme.lua b/data/themes/pieces/ShogiSVG-TTF/theme.lua new file mode 100644 index 0000000..8ad13e3 --- /dev/null +++ b/data/themes/pieces/ShogiSVG-TTF/theme.lua @@ -0,0 +1,82 @@ +import("piece_theme.lua") +import("shogi_themelib.lua") + +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +fontnames = {"Potraced from ???", "Potraced from shogi.net"} +fontlist = {"Shogi.ttf", "Shogi2.ttf"} + +theme.options = OptList { + BoolOpt("moves_overlay", "Moves overlay", true), + SelectOpt("symbols", "Symbol set", BoolOptList { + BoolOpt("use_predefined", "Predefined", true, OptList { + ComboOpt("font", "Symbol set", fontnames) + }), + BoolOpt("use_custom", "Custom font", false, OptList { + UrlOpt("file", "SVG glyph directory", "Shogi.ttf") + }), +-- BoolOpt("use_system", "System font", false, OptList { +-- FontOpt("font", "System font", Font("Arial", true, true)) +-- }), + }) +} + +function addChar(char, promoted) + return function(i, size) + i:draw_glyph(Rect(0,0,size,size), + theme.options.symbols.options.use_predefined.value + and fontlist[theme.options.symbols.options.use_predefined.sub_options.font.selected+1] + or theme.options.symbols.options.use_custom.value + and theme.options.symbols.options.use_custom.sub_options.file.value + or theme.options.symbols.options.use_system.sub_options.font.selected, + char, promoted and "#d00000" or "#004000", + "#fff3c8", 4, false) + return i + end +end + +function shogi_piece(char, white, promoted, ratio, moves) + return addShadow(overlay(tile(white, ratio), + shogi_moves(moves), + addChar(char, promoted))) +end + +theme.black_king = shogi_piece("0x6B", false, false, 1, shogimoves_king) +theme.black_rook = shogi_piece("0x72", false, false, 0.96, shogimoves_rook) +theme.black_p_rook = shogi_piece("0x52", false, true, 0.96, shogimoves_dragon) +theme.black_bishop = shogi_piece("0x62", false, false, 0.93, shogimoves_bishop) +theme.black_p_bishop = shogi_piece("0x42", false, true, 0.93, shogimoves_horse) +theme.black_gold = shogi_piece("0x67", false, false, 0.9, shogimoves_gold) +theme.black_silver = shogi_piece("0x73", false, false, 0.9, shogimoves_silver) +theme.black_p_silver = shogi_piece("0x53", false, true, 0.9, shogimoves_gold) +theme.black_knight = shogi_piece("0x68", false, false, 0.86, shogimoves_knight) +theme.black_p_knight = shogi_piece("0x48", false, true, 0.86, shogimoves_gold) +theme.black_lance = shogi_piece("0x6C", false, false, 0.83, shogimoves_lance) +theme.black_p_lance = shogi_piece("0x4C", false, true, 0.83, shogimoves_gold) +theme.black_pawn = shogi_piece("0x70", false, false, 0.8, shogimoves_pawn) +theme.black_p_pawn = shogi_piece("0x50", false, true, 0.8, shogimoves_gold) + +theme.white_king = shogi_piece("0x6B", true, false, 1, shogimoves_king) +theme.white_rook = shogi_piece("0x72", true, false, 0.96, shogimoves_rook) +theme.white_p_rook = shogi_piece("0x52", true, true, 0.96, shogimoves_dragon) +theme.white_bishop = shogi_piece("0x62", true, false, 0.93, shogimoves_bishop) +theme.white_p_bishop = shogi_piece("0x42", true, true, 0.93, shogimoves_horse) +theme.white_gold = shogi_piece("0x67", true, false, 0.9, shogimoves_gold) +theme.white_silver = shogi_piece("0x73", true, false, 0.9, shogimoves_silver) +theme.white_p_silver = shogi_piece("0x53", true, true, 0.9, shogimoves_gold) +theme.white_knight = shogi_piece("0x68", true, false, 0.86, shogimoves_knight) +theme.white_p_knight = shogi_piece("0x48", true, true, 0.86, shogimoves_gold) +theme.white_lance = shogi_piece("0x6C", true, false, 0.83, shogimoves_lance) +theme.white_p_lance = shogi_piece("0x4C", true, true, 0.83, shogimoves_gold) +theme.white_pawn = shogi_piece("0x70", true, false, 0.8, shogimoves_pawn) +theme.white_p_pawn = shogi_piece("0x50", true, true, 0.8, shogimoves_gold) + + +-- To be able to adapt this theme to chess too +-- FIXME: should find a FreeKing kanji instead +theme.black_queen = shogi_piece("0x67", false, false, 1, shogimoves_freeking) +theme.white_queen = shogi_piece("0x67", true, false, 1, shogimoves_freeking) diff --git a/data/themes/pieces/ShogiSVG/default/bishop.svg b/data/themes/pieces/ShogiSVG/default/bishop.svg new file mode 100644 index 0000000..18646de --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/bishop.svg @@ -0,0 +1,70 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/example.svg b/data/themes/pieces/ShogiSVG/default/example.svg new file mode 100644 index 0000000..a2331ef --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/example.svg @@ -0,0 +1,92 @@ + + + + + + + + + image/svg+xml + + + + + + + 切り + + + diff --git a/data/themes/pieces/ShogiSVG/default/gold.svg b/data/themes/pieces/ShogiSVG/default/gold.svg new file mode 100644 index 0000000..2a7c7f9 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/gold.svg @@ -0,0 +1,67 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/horse.svg b/data/themes/pieces/ShogiSVG/default/horse.svg new file mode 100644 index 0000000..9104730 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/horse.svg @@ -0,0 +1,67 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/king.svg b/data/themes/pieces/ShogiSVG/default/king.svg new file mode 100644 index 0000000..cd613c1 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/king.svg @@ -0,0 +1,73 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/lance.svg b/data/themes/pieces/ShogiSVG/default/lance.svg new file mode 100644 index 0000000..a230599 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/lance.svg @@ -0,0 +1,61 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/nude_tile.svg b/data/themes/pieces/ShogiSVG/default/nude_tile.svg new file mode 100644 index 0000000..0d1074e --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/nude_tile.svg @@ -0,0 +1,57 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/pawn.svg b/data/themes/pieces/ShogiSVG/default/pawn.svg new file mode 100644 index 0000000..854b3ae --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/pawn.svg @@ -0,0 +1,67 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/pbishop.svg b/data/themes/pieces/ShogiSVG/default/pbishop.svg new file mode 100644 index 0000000..38e14be --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/pbishop.svg @@ -0,0 +1,67 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/phorse.svg b/data/themes/pieces/ShogiSVG/default/phorse.svg new file mode 100644 index 0000000..80ffed3 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/phorse.svg @@ -0,0 +1,67 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/plance.svg b/data/themes/pieces/ShogiSVG/default/plance.svg new file mode 100644 index 0000000..894f054 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/plance.svg @@ -0,0 +1,58 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/ppawn.svg b/data/themes/pieces/ShogiSVG/default/ppawn.svg new file mode 100644 index 0000000..f49a951 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/ppawn.svg @@ -0,0 +1,58 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/prook.svg b/data/themes/pieces/ShogiSVG/default/prook.svg new file mode 100644 index 0000000..1e69754 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/prook.svg @@ -0,0 +1,67 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/psilver.svg b/data/themes/pieces/ShogiSVG/default/psilver.svg new file mode 100644 index 0000000..a47e350 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/psilver.svg @@ -0,0 +1,61 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/rook.svg b/data/themes/pieces/ShogiSVG/default/rook.svg new file mode 100644 index 0000000..8bb9f31 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/rook.svg @@ -0,0 +1,61 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/silver.svg b/data/themes/pieces/ShogiSVG/default/silver.svg new file mode 100644 index 0000000..1acd80a --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/silver.svg @@ -0,0 +1,61 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/default/tile.svg b/data/themes/pieces/ShogiSVG/default/tile.svg new file mode 100644 index 0000000..2adfb9d --- /dev/null +++ b/data/themes/pieces/ShogiSVG/default/tile.svg @@ -0,0 +1,63 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/ShogiSVG/theme.desktop b/data/themes/pieces/ShogiSVG/theme.desktop new file mode 100644 index 0000000..7eb8d29 --- /dev/null +++ b/data/themes/pieces/ShogiSVG/theme.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=ShogiSVG +Type=Application +Comment=Shogi SVG theme,| created with potrace from ??? +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess,Shogi diff --git a/data/themes/pieces/ShogiSVG/theme.lua b/data/themes/pieces/ShogiSVG/theme.lua new file mode 100644 index 0000000..8039ebc --- /dev/null +++ b/data/themes/pieces/ShogiSVG/theme.lua @@ -0,0 +1,76 @@ +import("piece_theme.lua") +import("shogi_themelib.lua") + +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +fontnames = {"Potraced from ???", "Potraced from shogi.net", "Potraced from daemonshogi"} +fontlist = {"default", "shogi.net", "daemonshogi"} + +theme.options = OptList { + BoolOpt("moves_overlay", "Moves overlay", true), + SelectOpt("symbols", "Symbol set", BoolOptList { + BoolOpt("use_predefined", "Predefined", true, OptList { + ComboOpt("font", "Symbol set", fontnames) + }), + BoolOpt("use_custom", "Custom", false, OptList { + UrlOpt("dir", "SVG glyph directory", "default/") + }), + }) +} + +function addGlyph(file) + return function(i, size) + local dir + if theme.options.symbols.options.use_predefined.value then + dir = fontlist[theme.options.symbols.options.use_predefined.sub_options.font.selected+1] + else + dir = theme.options.symbols.options.use_custom.sub_options.dir.value + end + i:draw_svg(Rect(0,0,size,size), dir .. '/' .. file) + return i + end +end + +function shogi_piece(file, white, ratio, moves) + return addShadow(overlay(tile(white, ratio), + shogi_moves(moves), + addGlyph(file))) +end + +theme.black_king = shogi_piece("king.svg", false, 1, shogimoves_king) +theme.black_rook = shogi_piece("rook.svg", false, 0.96, shogimoves_rook) +theme.black_p_rook = shogi_piece("prook.svg", false, 0.96, shogimoves_dragon) +theme.black_bishop = shogi_piece("bishop.svg", false, 0.93, shogimoves_bishop) +theme.black_p_bishop = shogi_piece("pbishop.svg", false, 0.93, shogimoves_horse) +theme.black_gold = shogi_piece("gold.svg", false, 0.9, shogimoves_gold) +theme.black_silver = shogi_piece("silver.svg", false, 0.9, shogimoves_silver) +theme.black_p_silver = shogi_piece("psilver.svg", false, 0.9, shogimoves_gold) +theme.black_knight = shogi_piece("horse.svg", false, 0.86, shogimoves_knight) +theme.black_p_knight = shogi_piece("phorse.svg", false, 0.86, shogimoves_gold) +theme.black_lance = shogi_piece("lance.svg", false, 0.83, shogimoves_lance) +theme.black_p_lance = shogi_piece("plance.svg", false, 0.83, shogimoves_gold) +theme.black_pawn = shogi_piece("pawn.svg", false, 0.8, shogimoves_pawn) +theme.black_p_pawn = shogi_piece("ppawn.svg", false, 0.8, shogimoves_gold) + +theme.white_king = shogi_piece("king.svg", true, 1, shogimoves_king) +theme.white_rook = shogi_piece("rook.svg", true, 0.96, shogimoves_rook) +theme.white_p_rook = shogi_piece("prook.svg", true, 0.96, shogimoves_dragon) +theme.white_bishop = shogi_piece("bishop.svg", true, 0.93, shogimoves_bishop) +theme.white_p_bishop = shogi_piece("pbishop.svg", true, 0.93, shogimoves_horse) +theme.white_gold = shogi_piece("gold.svg", true, 0.9, shogimoves_gold) +theme.white_silver = shogi_piece("silver.svg", true, 0.9, shogimoves_silver) +theme.white_p_silver = shogi_piece("psilver.svg", true, 0.9, shogimoves_gold) +theme.white_knight = shogi_piece("horse.svg", true, 0.86, shogimoves_knight) +theme.white_p_knight = shogi_piece("phorse.svg", true, 0.86, shogimoves_gold) +theme.white_lance = shogi_piece("lance.svg", true, 0.83, shogimoves_lance) +theme.white_p_lance = shogi_piece("plance.svg", true, 0.83, shogimoves_gold) +theme.white_pawn = shogi_piece("pawn.svg", true, 0.8, shogimoves_pawn) +theme.white_p_pawn = shogi_piece("ppawn.svg", true, 0.8, shogimoves_gold) + +-- To be able to adapt this theme to chess too +theme.black_queen = shogi_piece("gold.svg", false, 0.9, shogimoves_freeking) +theme.white_queen = shogi_piece("gold.svg", true, 0.9, shogimoves_freeking) diff --git a/data/themes/pieces/ShogiTTF/theme.desktop b/data/themes/pieces/ShogiTTF/theme.desktop new file mode 100644 index 0000000..f705218 --- /dev/null +++ b/data/themes/pieces/ShogiTTF/theme.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=ShogiTTF +Type=Application +Comment=Shogi TTF theme +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess,Shogi[default],LargeShogi[default] diff --git a/data/themes/pieces/ShogiTTF/theme.lua b/data/themes/pieces/ShogiTTF/theme.lua new file mode 100644 index 0000000..63925b6 --- /dev/null +++ b/data/themes/pieces/ShogiTTF/theme.lua @@ -0,0 +1,132 @@ +import("piece_theme.lua") +import("shogi_themelib.lua") + +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +theme.options = OptList { + BoolOpt("moves_overlay", "Moves overlay", true), + BoolOpt("single_kanji", "Single kanji on tiles", false), + SelectOpt("symbols", "Symbol set", BoolOptList { +-- BoolOpt("use_predefined", "Predefined", true, OptList { +-- ComboOpt("font", "Symbol set", fontnames) +-- }), + BoolOpt("use_custom", "Custom font", false, OptList { + UrlOpt("file", "SVG glyph directory", "../../figurines/ShogiTTF/mikachan.ttf") + }), +-- BoolOpt("use_system", "System font", false, OptList { +-- FontOpt("font", "System font", Font("Arial", true, true)) +-- }), + }) +} + +function addChar(complete, single, promoted) + return function(i, size) + font = theme.options.symbols.options.use_custom.sub_options.file.value + if theme.options.single_kanji.value then + i:draw_glyph(Rect(size*0.2,size*0.25,size*0.6,size*0.6), font, single, + promoted and "#d00000" or "#004000", + "#fff3c8", 4, false) + else + --local charsize, margin1, margin2 = 0.45, 0.09, -0.02 -- epgyobld + local charsize, margin1, margin2 = 0.4, 0.12, 0 + i:draw_glyph(Rect(size*(0.5-charsize/2),size*margin1,size*charsize,size*charsize), + font, complete[1], promoted and "#d00000" or "#004000", + "#fff3c8", 4, false) + i:draw_glyph(Rect(size*(0.5-charsize/2),size*(0.5+margin2),size*charsize,size*charsize), + font, complete[2], promoted and "#d00000" or "#004000", + "#fff3c8", 4, false) + end + return i + end +end + +function shogi_piece(first, char, white, promoted, ratio, moves) + return addShadow(overlay(tile(white, ratio), + shogi_moves(moves), + addChar(first, char, promoted))) +end + +theme.black_king = shogi_piece(shogichars["jade general"][2], shogichars["jade general"][1], + false, false, 1, shogimoves_king) +theme.black_rook = shogi_piece(shogichars["flying chariot"][2], shogichars["flying chariot"][1], + false, false, 0.96, shogimoves_rook) +theme.black_p_rook = shogi_piece(shogichars["dragon king"][2], shogichars["dragon king"][1], + false, true, 0.96, shogimoves_dragon) +theme.black_bishop = shogi_piece(shogichars["bishop"][2], shogichars["bishop"][1], + false, false, 0.93, shogimoves_bishop) +theme.black_p_bishop = shogi_piece(shogichars["dragon horse"][2], shogichars["dragon horse"][1], + false, true, 0.93, shogimoves_horse) +theme.black_gold = shogi_piece(shogichars["gold general"][2], shogichars["gold general"][1], + false, false, 0.9, shogimoves_gold) +theme.black_silver = shogi_piece(shogichars["silver general"][2], shogichars["silver general"][1], + false, false, 0.9, shogimoves_silver) +theme.black_p_silver = shogi_piece(shogichars["narikei"][2], shogichars["narikei"][1], + false, true, 0.9, shogimoves_gold) +theme.black_knight = shogi_piece(shogichars["knight"][2], shogichars["knight"][1], + false, false, 0.86, shogimoves_knight) +theme.black_p_knight = shogi_piece(shogichars["narikei"][2], shogichars["narikei"][1], + false, true, 0.86, shogimoves_gold) +theme.black_lance = shogi_piece(shogichars["incense chariot"][2], shogichars["incense chariot"][1], + false, false, 0.83, shogimoves_lance) +theme.black_p_lance = shogi_piece(shogichars["narikyo"][2], shogichars["narikyo"][1], + false, true, 0.83, shogimoves_gold) +theme.black_pawn = shogi_piece(shogichars["pawn"][2], shogichars["pawn"][1], + false, false, 0.8, shogimoves_pawn) +theme.black_p_pawn = shogi_piece(shogichars["tokin"][2], shogichars["tokin"][1], + false, true, 0.8, shogimoves_gold) + +theme.white_king = shogi_piece(shogichars["king"][2], shogichars["king"][1], + true, false, 1, shogimoves_king) +theme.white_rook = shogi_piece(shogichars["flying chariot"][2], shogichars["flying chariot"][1], + true, false, 0.96, shogimoves_rook) +theme.white_p_rook = shogi_piece(shogichars["dragon king"][2], shogichars["dragon king"][1], + true, true, 0.96, shogimoves_dragon) +theme.white_bishop = shogi_piece(shogichars["bishop"][2], shogichars["bishop"][1], + true, false, 0.93, shogimoves_bishop) +theme.white_p_bishop = shogi_piece(shogichars["dragon horse"][2], shogichars["dragon horse"][1], + true, true, 0.93, shogimoves_horse) +theme.white_gold = shogi_piece(shogichars["gold general"][2], shogichars["gold general"][1], + true, false, 0.9, shogimoves_gold) +theme.white_silver = shogi_piece(shogichars["silver general"][2], shogichars["silver general"][1], + true, false, 0.9, shogimoves_silver) +theme.white_p_silver = shogi_piece(shogichars["narikei"][2], shogichars["narikei"][1], + true, true, 0.9, shogimoves_gold) +theme.white_knight = shogi_piece(shogichars["knight"][2], shogichars["knight"][1], + true, false, 0.86, shogimoves_knight) +theme.white_p_knight = shogi_piece(shogichars["narikei"][2], shogichars["narikei"][1], + true, true, 0.86, shogimoves_gold) +theme.white_lance = shogi_piece(shogichars["incense chariot"][2], shogichars["incense chariot"][1], + true, false, 0.83, shogimoves_lance) +theme.white_p_lance = shogi_piece(shogichars["narikyo"][2], shogichars["narikyo"][1], + true, true, 0.83, shogimoves_gold) +theme.white_pawn = shogi_piece(shogichars["pawn"][2], shogichars["pawn"][1], + true, false, 0.8, shogimoves_pawn) +theme.white_p_pawn = shogi_piece(shogichars["tokin"][2],shogichars["tokin"][1], + true, true, 0.8, shogimoves_gold) + +-- Sho Shogi + +theme.black_drunken_elephant = shogi_piece(shogichars["drunken elephant"][2], shogichars["drunken elephant"][1], + false, false, 1, shogimoves_drunken_elephant) +theme.black_p_drunken_elephant = shogi_piece(shogichars["crown prince"][2], shogichars["crown prince"][1], + false, true, 1, shogimoves_king) + +theme.white_drunken_elephant = shogi_piece(shogichars["drunken elephant"][2], shogichars["drunken elephant"][1], + true, false, 1, shogimoves_drunken_elephant) +theme.white_p_drunken_elephant = shogi_piece(shogichars["crown prince"][2], shogichars["crown prince"][1], + true, true, 1, shogimoves_king) + +-- This is part of Dai Shohi + +theme.black_freeking = shogi_piece(shogichars["free king"][2], shogichars["free king"][1], + false, false, 1, shogimoves_freeking) +theme.white_freeking = shogi_piece(shogichars["free king"][2], shogichars["free king"][1], + true, false, 1, shogimoves_freeking) + +-- To be able to adapt this theme to chess too +theme.black_queen = theme.black_freeking +theme.white_queen = theme.white_freeking diff --git a/data/themes/pieces/SkullsSVG/bb.svg b/data/themes/pieces/SkullsSVG/bb.svg new file mode 100644 index 0000000..37a4f81 --- /dev/null +++ b/data/themes/pieces/SkullsSVG/bb.svg @@ -0,0 +1,668 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/bk.svg b/data/themes/pieces/SkullsSVG/bk.svg new file mode 100644 index 0000000..37fbcf2 --- /dev/null +++ b/data/themes/pieces/SkullsSVG/bk.svg @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/bn.svg b/data/themes/pieces/SkullsSVG/bn.svg new file mode 100644 index 0000000..6b6fb5b --- /dev/null +++ b/data/themes/pieces/SkullsSVG/bn.svg @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/bp.svg b/data/themes/pieces/SkullsSVG/bp.svg new file mode 100644 index 0000000..a6bb181 --- /dev/null +++ b/data/themes/pieces/SkullsSVG/bp.svg @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/bq.svg b/data/themes/pieces/SkullsSVG/bq.svg new file mode 100644 index 0000000..5c7e8f5 --- /dev/null +++ b/data/themes/pieces/SkullsSVG/bq.svg @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/br.svg b/data/themes/pieces/SkullsSVG/br.svg new file mode 100644 index 0000000..de0fdcb --- /dev/null +++ b/data/themes/pieces/SkullsSVG/br.svg @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/theme.desktop b/data/themes/pieces/SkullsSVG/theme.desktop new file mode 100644 index 0000000..025f09d --- /dev/null +++ b/data/themes/pieces/SkullsSVG/theme.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Skulls +Type=Application +Comment=Skulls SVG theme,| by Maurizio Monge +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/SkullsSVG/theme.lua b/data/themes/pieces/SkullsSVG/theme.lua new file mode 100644 index 0000000..65b65bc --- /dev/null +++ b/data/themes/pieces/SkullsSVG/theme.lua @@ -0,0 +1,20 @@ +import("piece_theme.lua") +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +theme.black_bishop = fromSVG("bb.svg") +theme.black_king = fromSVG("bk.svg") +theme.black_knight = fromSVG("bn.svg") +theme.black_pawn = fromSVG("bp.svg") +theme.black_queen = fromSVG("bq.svg") +theme.black_rook = fromSVG("br.svg") +theme.white_bishop = fromSVG("wb.svg") +theme.white_king = fromSVG("wk.svg") +theme.white_knight = fromSVG("wn.svg") +theme.white_pawn = fromSVG("wp.svg") +theme.white_queen = fromSVG("wq.svg") +theme.white_rook = fromSVG("wr.svg") + diff --git a/data/themes/pieces/SkullsSVG/wb.svg b/data/themes/pieces/SkullsSVG/wb.svg new file mode 100644 index 0000000..005a7af --- /dev/null +++ b/data/themes/pieces/SkullsSVG/wb.svg @@ -0,0 +1,668 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/wk.svg b/data/themes/pieces/SkullsSVG/wk.svg new file mode 100644 index 0000000..4196e6a --- /dev/null +++ b/data/themes/pieces/SkullsSVG/wk.svg @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/wn.svg b/data/themes/pieces/SkullsSVG/wn.svg new file mode 100644 index 0000000..b4268dd --- /dev/null +++ b/data/themes/pieces/SkullsSVG/wn.svg @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/wp.svg b/data/themes/pieces/SkullsSVG/wp.svg new file mode 100644 index 0000000..0d9fad4 --- /dev/null +++ b/data/themes/pieces/SkullsSVG/wp.svg @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/wq.svg b/data/themes/pieces/SkullsSVG/wq.svg new file mode 100644 index 0000000..5946851 --- /dev/null +++ b/data/themes/pieces/SkullsSVG/wq.svg @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SkullsSVG/wr.svg b/data/themes/pieces/SkullsSVG/wr.svg new file mode 100644 index 0000000..4597b4a --- /dev/null +++ b/data/themes/pieces/SkullsSVG/wr.svg @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/bb.svg b/data/themes/pieces/SpatialSVG/bb.svg new file mode 100644 index 0000000..fe5ff52 --- /dev/null +++ b/data/themes/pieces/SpatialSVG/bb.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/bk.svg b/data/themes/pieces/SpatialSVG/bk.svg new file mode 100644 index 0000000..10b624c --- /dev/null +++ b/data/themes/pieces/SpatialSVG/bk.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/bn.svg b/data/themes/pieces/SpatialSVG/bn.svg new file mode 100644 index 0000000..0468937 --- /dev/null +++ b/data/themes/pieces/SpatialSVG/bn.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/bp.svg b/data/themes/pieces/SpatialSVG/bp.svg new file mode 100644 index 0000000..b2ad36e --- /dev/null +++ b/data/themes/pieces/SpatialSVG/bp.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/bq.svg b/data/themes/pieces/SpatialSVG/bq.svg new file mode 100644 index 0000000..fd9320f --- /dev/null +++ b/data/themes/pieces/SpatialSVG/bq.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/br.svg b/data/themes/pieces/SpatialSVG/br.svg new file mode 100644 index 0000000..56d2dea --- /dev/null +++ b/data/themes/pieces/SpatialSVG/br.svg @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/theme.desktop b/data/themes/pieces/SpatialSVG/theme.desktop new file mode 100644 index 0000000..a0bbb9f --- /dev/null +++ b/data/themes/pieces/SpatialSVG/theme.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Spatial +Type=Application +Comment=Spatial SVG theme,| by Maurizio Monge +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Chess diff --git a/data/themes/pieces/SpatialSVG/theme.lua b/data/themes/pieces/SpatialSVG/theme.lua new file mode 100644 index 0000000..65b65bc --- /dev/null +++ b/data/themes/pieces/SpatialSVG/theme.lua @@ -0,0 +1,20 @@ +import("piece_theme.lua") +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +theme.black_bishop = fromSVG("bb.svg") +theme.black_king = fromSVG("bk.svg") +theme.black_knight = fromSVG("bn.svg") +theme.black_pawn = fromSVG("bp.svg") +theme.black_queen = fromSVG("bq.svg") +theme.black_rook = fromSVG("br.svg") +theme.white_bishop = fromSVG("wb.svg") +theme.white_king = fromSVG("wk.svg") +theme.white_knight = fromSVG("wn.svg") +theme.white_pawn = fromSVG("wp.svg") +theme.white_queen = fromSVG("wq.svg") +theme.white_rook = fromSVG("wr.svg") + diff --git a/data/themes/pieces/SpatialSVG/wb.svg b/data/themes/pieces/SpatialSVG/wb.svg new file mode 100644 index 0000000..fe1fb02 --- /dev/null +++ b/data/themes/pieces/SpatialSVG/wb.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/wk.svg b/data/themes/pieces/SpatialSVG/wk.svg new file mode 100644 index 0000000..1505b7f --- /dev/null +++ b/data/themes/pieces/SpatialSVG/wk.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/wn.svg b/data/themes/pieces/SpatialSVG/wn.svg new file mode 100644 index 0000000..84d7d0d --- /dev/null +++ b/data/themes/pieces/SpatialSVG/wn.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/wp.svg b/data/themes/pieces/SpatialSVG/wp.svg new file mode 100644 index 0000000..3f69aa6 --- /dev/null +++ b/data/themes/pieces/SpatialSVG/wp.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/wq.svg b/data/themes/pieces/SpatialSVG/wq.svg new file mode 100644 index 0000000..6332440 --- /dev/null +++ b/data/themes/pieces/SpatialSVG/wq.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/SpatialSVG/wr.svg b/data/themes/pieces/SpatialSVG/wr.svg new file mode 100644 index 0000000..51174c9 --- /dev/null +++ b/data/themes/pieces/SpatialSVG/wr.svg @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + Maurizio Monge + + + + + Maurizio Monge + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/black.svg b/data/themes/pieces/StonesSVG/black.svg new file mode 100644 index 0000000..1f4d124 --- /dev/null +++ b/data/themes/pieces/StonesSVG/black.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/blue.svg b/data/themes/pieces/StonesSVG/blue.svg new file mode 100644 index 0000000..d834314 --- /dev/null +++ b/data/themes/pieces/StonesSVG/blue.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/blue_add.svg b/data/themes/pieces/StonesSVG/blue_add.svg new file mode 100644 index 0000000..9ab2159 --- /dev/null +++ b/data/themes/pieces/StonesSVG/blue_add.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/green.svg b/data/themes/pieces/StonesSVG/green.svg new file mode 100644 index 0000000..7aa9542 --- /dev/null +++ b/data/themes/pieces/StonesSVG/green.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/grey.svg b/data/themes/pieces/StonesSVG/grey.svg new file mode 100644 index 0000000..a04c2a5 --- /dev/null +++ b/data/themes/pieces/StonesSVG/grey.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/orange.svg b/data/themes/pieces/StonesSVG/orange.svg new file mode 100644 index 0000000..411dd87 --- /dev/null +++ b/data/themes/pieces/StonesSVG/orange.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/red.svg b/data/themes/pieces/StonesSVG/red.svg new file mode 100644 index 0000000..ac2b3ee --- /dev/null +++ b/data/themes/pieces/StonesSVG/red.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/red_add.svg b/data/themes/pieces/StonesSVG/red_add.svg new file mode 100644 index 0000000..8b95732 --- /dev/null +++ b/data/themes/pieces/StonesSVG/red_add.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/theme_chainreaction.desktop b/data/themes/pieces/StonesSVG/theme_chainreaction.desktop new file mode 100644 index 0000000..6728dfa --- /dev/null +++ b/data/themes/pieces/StonesSVG/theme_chainreaction.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Red/Blue +Type=Application +Comment=Red/Blue SVG stones| by Maurizio Monge +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=ChainReaction[Default] diff --git a/data/themes/pieces/StonesSVG/theme_chainreaction.lua b/data/themes/pieces/StonesSVG/theme_chainreaction.lua new file mode 100644 index 0000000..292f3fe --- /dev/null +++ b/data/themes/pieces/StonesSVG/theme_chainreaction.lua @@ -0,0 +1,110 @@ +import("piece_theme.lua") +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +function fromSVG1(file) + return function(size) + local i = Image(size,size) + i:clear() + i:draw_svg(Rect(size*0.25,size*0.25,size*0.5,size*0.5), file) + print("create from "..file) + return i + end +end + +function fromSVG2(file) + return function(size) + local i = Image(size,size) + i:clear() + i:draw_svg(Rect(size*0.45,size*0.05,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.05,size*0.45,size*0.5,size*0.5), file) + return i + end +end + +function fromSVG3(file) + return function(size) + local i = Image(size,size) + i:clear() + i:draw_svg(Rect(size*0.25,size*0.0334936490538904,size*0.5,size*0.5), file) + i:draw_svg(Rect(0,size*0.46650635094611,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.5,size*0.46650635094611,size*0.5,size*0.5), file) + return i + end +end + +function fromSVG4(file) + return function(size) + local i = Image(size,size) + i:clear() + i:draw_svg(Rect(0,0,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.5,0,size*0.5,size*0.5), file) + i:draw_svg(Rect(0,size*0.5,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.5,size*0.5,size*0.5,size*0.5), file) + return i + end +end + +function fromSVG5(file) + return function(size) + local i = Image(size,size) + i:clear() + i:draw_svg(Rect(0,0,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.5,0,size*0.5,size*0.5), file) + i:draw_svg(Rect(0,size*0.5,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.5,size*0.5,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.25,size*0.25,size*0.5,size*0.5), file) + return i + end +end + +function fromSVG6(file) + return function(size) + local i = Image(size,size) + i:clear() + i:draw_svg(Rect(0,0,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.5,0,size*0.5,size*0.5), file) + i:draw_svg(Rect(0,size*0.25,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.5,size*0.25,size*0.5,size*0.5), file) + i:draw_svg(Rect(0,size*0.5,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.5,size*0.5,size*0.5,size*0.5), file) + return i + end +end + +function fromSVG7(file) + return function(size) + local i = Image(size,size) + i:clear() + i:draw_svg(Rect(size*0.08,0,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.42,0,size*0.5,size*0.5), file) + i:draw_svg(Rect(0,size*0.25,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.5,size*0.25,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.08,size*0.5,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.42,size*0.5,size*0.5,size*0.5), file) + i:draw_svg(Rect(size*0.25,size*0.25,size*0.5,size*0.5), file) + return i + end +end + +theme.white_add = addShadow(fromSVG_Direct("red_add.svg")) +theme.black_add = addShadow(fromSVG_Direct("blue_add.svg")) +theme.white_1 = addShadow(fromSVG1("red.svg")) +theme.black_1 = addShadow(fromSVG1("blue.svg")) +theme.neutral_1 = addShadow(fromSVG1("grey.svg")) +theme.white_2 = addShadow(fromSVG2("red.svg")) +theme.black_2 = addShadow(fromSVG2("blue.svg")) +theme.white_3 = addShadow(fromSVG3("red.svg")) +theme.black_3 = addShadow(fromSVG3("blue.svg")) +theme.white_4 = addShadow(fromSVG4("red.svg")) +theme.black_4 = addShadow(fromSVG4("blue.svg")) +theme.white_5 = addShadow(fromSVG5("red.svg")) +theme.black_5 = addShadow(fromSVG5("blue.svg")) +theme.white_6 = addShadow(fromSVG6("red.svg")) +theme.black_6 = addShadow(fromSVG6("blue.svg")) +theme.white_7 = addShadow(fromSVG7("red.svg")) +theme.black_7 = addShadow(fromSVG7("blue.svg")) + diff --git a/data/themes/pieces/StonesSVG/theme_rs.desktop b/data/themes/pieces/StonesSVG/theme_rs.desktop new file mode 100644 index 0000000..eb0f6c7 --- /dev/null +++ b/data/themes/pieces/StonesSVG/theme_rs.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Red/Blue +Type=Application +Comment=Red/Blue SVG stones| by Maurizio Monge +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Reversi + diff --git a/data/themes/pieces/StonesSVG/theme_rs.lua b/data/themes/pieces/StonesSVG/theme_rs.lua new file mode 100644 index 0000000..c59e82f --- /dev/null +++ b/data/themes/pieces/StonesSVG/theme_rs.lua @@ -0,0 +1,10 @@ +import("piece_theme.lua") +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +theme.white_stone = fromSVG("red.svg") +theme.black_stone = fromSVG("blue.svg") + diff --git a/data/themes/pieces/StonesSVG/theme_ry.desktop b/data/themes/pieces/StonesSVG/theme_ry.desktop new file mode 100644 index 0000000..b4afa3e --- /dev/null +++ b/data/themes/pieces/StonesSVG/theme_ry.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Red/Yellow +Type=Application +Comment=Red/Yellow SVG stones| by Maurizio Monge +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Reversi,Connect4[default] + diff --git a/data/themes/pieces/StonesSVG/theme_ry.lua b/data/themes/pieces/StonesSVG/theme_ry.lua new file mode 100644 index 0000000..b3f2832 --- /dev/null +++ b/data/themes/pieces/StonesSVG/theme_ry.lua @@ -0,0 +1,10 @@ +import("piece_theme.lua") +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +theme.white_stone = fromSVG("red.svg") +theme.black_stone = fromSVG("yellow.svg") + diff --git a/data/themes/pieces/StonesSVG/theme_wb.desktop b/data/themes/pieces/StonesSVG/theme_wb.desktop new file mode 100644 index 0000000..ac5eebe --- /dev/null +++ b/data/themes/pieces/StonesSVG/theme_wb.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=White/Black +Type=Application +Comment=Shogi TTF theme,| created with potrace +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=Reversi[default] diff --git a/data/themes/pieces/StonesSVG/theme_wb.lua b/data/themes/pieces/StonesSVG/theme_wb.lua new file mode 100644 index 0000000..6d657ff --- /dev/null +++ b/data/themes/pieces/StonesSVG/theme_wb.lua @@ -0,0 +1,10 @@ +import("piece_theme.lua") +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +theme.white_stone = fromSVG("white.svg") +theme.black_stone = fromSVG("black.svg") + diff --git a/data/themes/pieces/StonesSVG/violet.svg b/data/themes/pieces/StonesSVG/violet.svg new file mode 100644 index 0000000..c285fec --- /dev/null +++ b/data/themes/pieces/StonesSVG/violet.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/white.svg b/data/themes/pieces/StonesSVG/white.svg new file mode 100644 index 0000000..2a56b7f --- /dev/null +++ b/data/themes/pieces/StonesSVG/white.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/StonesSVG/yellow.svg b/data/themes/pieces/StonesSVG/yellow.svg new file mode 100644 index 0000000..a87ce94 --- /dev/null +++ b/data/themes/pieces/StonesSVG/yellow.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/ToriShogiTTF/theme.desktop b/data/themes/pieces/ToriShogiTTF/theme.desktop new file mode 100644 index 0000000..834b703 --- /dev/null +++ b/data/themes/pieces/ToriShogiTTF/theme.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=ToriShogiTTF +Type=Application +Comment=Tori Shogi TTF theme +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=ToriShogi[default] diff --git a/data/themes/pieces/ToriShogiTTF/theme.lua b/data/themes/pieces/ToriShogiTTF/theme.lua new file mode 100644 index 0000000..a756b25 --- /dev/null +++ b/data/themes/pieces/ToriShogiTTF/theme.lua @@ -0,0 +1,79 @@ +import("piece_theme.lua") +import("shogi_themelib.lua") + +shadow=7.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +theme.options = OptList { + BoolOpt("moves_overlay", "Moves overlay", true), + BoolOpt("single_kanji", "Single kanji on tiles", false), + SelectOpt("symbols", "Symbol set", BoolOptList { +-- BoolOpt("use_predefined", "Predefined", true, OptList { +-- ComboOpt("font", "Symbol set", fontnames) +-- }), + BoolOpt("use_custom", "Custom font", false, OptList { + UrlOpt("file", "SVG glyph directory", "../../figurines/ShogiTTF/mikachan.ttf") + }), +-- BoolOpt("use_system", "System font", false, OptList { +-- FontOpt("font", "System font", Font("Arial", true, true)) +-- }), + }) +} + +function addChar(single, promoted) + return function(i, size) + font = theme.options.symbols.options.use_custom.sub_options.file.value + i:draw_glyph(Rect(size*0.2,size*0.25,size*0.6,size*0.6), font, single, + promoted and "#d00000" or "#004000", + "#fff3c8", 4, false) + return i + end +end + +function shogi_piece(char, white, promoted, ratio, moves) + return addShadow(overlay(tile(white, ratio), + shogi_moves(moves), + addChar(char, promoted))) +end + +-- Tori Shogi +theme.black_phoenix = shogi_piece(shogichars["tori phoenix"][1], + false, false, 1, shogimoves_king) +theme.black_falcon = shogi_piece(shogichars["tori falcon"][1], + false, false, 1, shogimoves_drunken_elephant) +theme.black_p_falcon = shogi_piece(shogichars["tori eagle"][1], + false, true, 1, shogimoves_eagle) +theme.black_crane = shogi_piece(shogichars["tori crane"][1], + false, false, 1, shogimoves_crane) +theme.black_right_quail = shogi_piece(shogichars["tori quail"][1], + false, false, 1, shogimoves_right_quail) +theme.black_left_quail = shogi_piece(shogichars["tori quail"][1], + false, false, 1, shogimoves_left_quail) +theme.black_pheasant = shogi_piece(shogichars["tori pheasant"][1], + false, false, 1, shogimoves_pheasant) +theme.black_swallow = shogi_piece(shogichars["tori swallow"][1], + false, false, 1, shogimoves_pawn) +theme.black_p_swallow = shogi_piece(shogichars["tori goose"][1], + false, true, 1, shogimoves_goose) + +theme.white_phoenix = shogi_piece(shogichars["tori phoenix"][1], + true, false, 1, shogimoves_king) +theme.white_falcon = shogi_piece(shogichars["tori falcon"][1], + true, false, 1, shogimoves_drunken_elephant) +theme.white_p_falcon = shogi_piece(shogichars["tori eagle"][1], + true, true, 1, shogimoves_eagle) +theme.white_crane = shogi_piece(shogichars["tori crane"][1], + true, false, 1, shogimoves_crane) +theme.white_right_quail = shogi_piece(shogichars["tori quail"][1], + true, false, 1, shogimoves_right_quail) +theme.white_left_quail = shogi_piece(shogichars["tori quail"][1], + true, false, 1, shogimoves_left_quail) +theme.white_pheasant = shogi_piece(shogichars["tori pheasant"][1], + true, false, 1, shogimoves_pheasant) +theme.white_swallow = shogi_piece(shogichars["tori swallow"][1], + true, false, 1, shogimoves_pawn) +theme.white_p_swallow = shogi_piece(shogichars["tori goose"][1], + true, true, 1, shogimoves_goose) diff --git a/data/themes/pieces/XBoardTTF/XBoard.sfd b/data/themes/pieces/XBoardTTF/XBoard.sfd new file mode 100644 index 0000000..14d16c4 --- /dev/null +++ b/data/themes/pieces/XBoardTTF/XBoard.sfd @@ -0,0 +1,1472 @@ +SplineFontDB: 1.0 +FontName: XBoard +FullName: XBoard +FamilyName: XBoard +Weight: Medium +Copyright: Created by Io with FontForge 1.0 (http://fontforge.sf.net) +Version: 001.000 +ItalicAngle: 0 +UnderlinePosition: -100 +UnderlineWidth: 50 +Ascent: 819 +Descent: 205 +Order2: 1 +XUID: [1021 645 1811818106 3714181] +FSType: 0 +OS2Version: 0 +OS2_WeightWidthSlopeOnly: 0 +OS2_UseTypoMetrics: 0 +CreationTime: 1156037136 +ModificationTime: 1160235844 +PfmFamily: 17 +TTFWeight: 500 +TTFWidth: 5 +LineGap: 92 +VLineGap: 0 +Panose: 2 0 6 3 0 0 0 0 0 0 +OS2TypoAscent: 0 +OS2TypoAOffset: 1 +OS2TypoDescent: 0 +OS2TypoDOffset: 1 +OS2TypoLinegap: 0 +OS2WinAscent: 0 +OS2WinAOffset: 1 +OS2WinDescent: 0 +OS2WinDOffset: 1 +HheadAscent: 0 +HheadAOffset: 1 +HheadDescent: 0 +HheadDOffset: 1 +OS2SubXSize: 665 +OS2SubYSize: 716 +OS2SubXOff: 0 +OS2SubYOff: 143 +OS2SupXSize: 665 +OS2SupYSize: 716 +OS2SupXOff: 0 +OS2SupYOff: 491 +OS2StrikeYSize: 51 +OS2StrikeYPos: 265 +OS2Vendor: 'PfEd' +TtfTable: cvt 4 +!$VK# +EndTtf +TtfTable: maxp 32 +!!*'"!"]0I!"T&0!!!!#!!!!"!!*'"!'gN:z +EndTtf +LangName: 1033 +Encoding: UnicodeBmp +UnicodeInterp: none +NameList: Adobe Glyph List +DisplaySize: -36 +AntiAlias: 1 +FitToEm: 1 +WinInfo: 46 23 12 +BeginChars: 65538 16 +StartChar: .notdef +Encoding: 65536 -1 0 +Width: 443 +Flags: W +TtfInstrs: 46 +YlOhX4L,1p!:;PH"pNdEZ3(..m4n[H!rsu:Z3:@2m4tsP"p+WaZ2k",m4nYA +EndTtf +Fore +34 0 m 1,0,-1 + 34 682 l 1,1,-1 + 375 682 l 1,2,-1 + 375 0 l 1,3,-1 + 34 0 l 1,0,-1 +68 34 m 1,4,-1 + 341 34 l 1,5,-1 + 341 648 l 1,6,-1 + 68 648 l 1,7,-1 + 68 34 l 1,4,-1 +EndSplineSet +EndChar +StartChar: .null +Encoding: 65537 0 1 +Width: 0 +Flags: W +EndChar +StartChar: nonmarkingreturn +Encoding: 13 13 2 +Width: 341 +Flags: W +EndChar +StartChar: plus +Encoding: 43 43 3 +Width: 1024 +Flags: W +Fore +0 818 m 1,0,-1 + 1024 818 l 1,1,-1 + 1024 -204 l 1,2,-1 + 0 -204 l 1,3,-1 + 0 818 l 1,0,-1 +EndSplineSet +EndChar +StartChar: B +Encoding: 66 66 4 +Width: 1023 +Flags: W +Fore +461 732 m 0,0,1 + 481 756 481 756 507 756 c 0,2,3 + 540 756 540 756 565 722 c 0,4,5 + 579 704 579 704 579 686 c 0,6,7 + 579 662 579 662 564 643 c 2,8,-1 + 548 622 l 1,9,-1 + 593 593 l 2,10,11 + 754 483 754 483 754 374 c 0,12,13 + 754 294 754 294 711 236 c 0,14,15 + 709 233 709 233 707 231 c 0,16,17 + 683 200 683 200 683 189 c 256,18,19 + 683 178 683 178 705 117 c 2,20,-1 + 729 56 l 1,21,-1 + 712 46 l 2,22,23 + 694 34 694 34 623 25 c 2,24,-1 + 554 16 l 1,25,-1 + 580 -2 l 2,26,27 + 602 -16 602 -16 645 -17 c 0,28,29 + 666 -18 666 -18 738 -18 c 0,30,31 + 858 -18 858 -18 887 -28 c 0,32,33 + 895 -30 895 -30 907 -36 c 0,34,35 + 943 -52 943 -52 945 -62 c 1,36,37 + 945 -75 945 -75 906 -123 c 0,38,39 + 892 -141 892 -141 889 -141 c 0,40,41 + 881 -141 881 -141 855 -129 c 0,42,43 + 823 -117 823 -117 709 -120 c 0,44,45 + 604 -121 604 -121 583 -114 c 0,46,47 + 572 -110 572 -110 550 -98 c 2,48,-1 + 507 -79 l 1,49,-1 + 468 -98 l 2,50,51 + 432 -117 432 -117 402 -119 c 0,52,53 + 382 -121 382 -121 307 -120 c 0,54,55 + 193 -117 193 -117 161 -129 c 0,56,57 + 135 -141 135 -141 127 -141 c 256,58,59 + 119 -141 119 -141 86 -91 c 0,60,61 + 71 -68 71 -68 71 -62 c 0,62,63 + 71 -53 71 -53 110 -36 c 0,64,65 + 142 -21 142 -21 199 -19 c 0,66,67 + 225 -18 225 -18 278 -18 c 0,68,69 + 398 -18 398 -18 418 -11 c 0,70,71 + 426 -8 426 -8 436 -2 c 2,72,-1 + 462 16 l 1,73,-1 + 393 25 l 2,74,75 + 325 34 325 34 304 46 c 2,76,-1 + 287 56 l 1,77,-1 + 311 117 l 2,78,79 + 333 178 333 178 333 189 c 256,80,81 + 333 200 333 200 309 231 c 0,82,83 + 264 293 264 293 262 374 c 0,84,85 + 262 483 262 483 423 593 c 2,86,-1 + 468 622 l 1,87,-1 + 452 643 l 2,88,89 + 419 683 419 683 453 724 c 0,90,91 + 461 732 l 0,0,1 +521 444 m 2,92,93 + 520 486 520 486 506 485 c 0,94,95 + 502 484 502 484 498 480 c 1,96,97 + 492 476 492 476 492 441 c 2,98,-1 + 492 407 l 1,99,-1 + 455 405 l 2,100,101 + 417 402 417 402 417 391 c 256,102,103 + 417 380 417 380 450 376 c 0,104,105 + 454 376 l 2,106,-1 + 491 374 l 1,107,-1 + 495 338 l 2,108,109 + 495 299 495 299 507 299 c 0,110,111 + 521 299 521 299 521 338 c 2,112,-1 + 525 374 l 1,113,-1 + 562 376 l 2,114,115 + 598 380 598 380 599 391 c 0,116,117 + 599 402 599 402 562 405 c 2,118,-1 + 525 407 l 1,119,-1 + 521 444 l 2,92,93 +630 205 m 0,120,121 + 630 214 630 214 618 217 c 0,122,123 + 602 220 602 220 510 221 c 0,124,125 + 394 224 394 224 384 212 c 1,126,127 + 379 201 379 201 383 195 c 1,128,129 + 387 191 387 191 510 191 c 0,130,131 + 619 191 619 191 627 197 c 0,132,133 + 630 199 630 199 630 205 c 0,120,121 +647 129 m 0,134,135 + 621 135 621 135 507 135 c 0,136,137 + 362 135 362 135 348 120 c 0,138,139 + 345 117 345 117 345 112 c 0,140,141 + 345 103 345 103 405 102 c 0,142,143 + 434 101 434 101 507 101 c 0,144,145 + 660 101 660 101 669 108 c 0,146,147 + 671 110 671 110 671 112 c 0,148,149 + 671 125 671 125 647 129 c 0,134,135 +EndSplineSet +EndChar +StartChar: K +Encoding: 75 75 5 +Width: 1023 +Flags: W +Fore +498 735 m 0,0,1 + 508 746 508 746 516 732 c 0,2,3 + 520 725 520 725 521 714 c 0,4,5 + 525 696 525 696 538 693 c 0,6,7 + 542 692 542 692 550 691 c 0,8,9 + 577 688 577 688 576 675 c 0,10,11 + 575 663 575 663 550 662 c 0,12,13 + 529 660 529 660 526 653 c 0,14,15 + 524 646 524 646 524 622 c 0,16,17 + 525 589 525 589 536 579 c 0,18,19 + 540 575 540 575 550 570 c 1,20,21 + 596 538 596 538 603 479 c 0,22,23 + 604 471 604 471 604 464 c 2,24,-1 + 604 430 l 1,25,-1 + 647 455 l 2,26,27 + 736 504 736 504 826 472 c 0,28,29 + 899 446 899 446 930 379 c 0,30,31 + 977 273 977 273 853 161 c 2,32,-1 + 802 114 l 1,33,-1 + 796 22 l 2,34,35 + 794 -61 794 -61 783 -77 c 1,36,37 + 774 -84 774 -84 703 -105 c 0,38,39 + 556 -148 556 -148 384 -123 c 0,40,41 + 320 -113 320 -113 268 -94 c 0,42,43 + 232 -81 232 -81 224 -66 c 0,44,45 + 214 -49 214 -49 214 36 c 2,46,-1 + 214 114 l 1,47,-1 + 164 161 l 2,48,49 + 40 276 40 276 85 377 c 0,50,51 + 99 408 99 408 129 435 c 0,52,53 + 205 504 205 504 305 480 c 0,54,55 + 338 473 338 473 369 455 c 2,56,-1 + 412 430 l 1,57,-1 + 412 464 l 2,58,59 + 412 525 412 525 457 563 c 0,60,61 + 461 567 461 567 466 570 c 0,62,63 + 487 581 487 581 490 597 c 0,64,65 + 491 604 491 604 492 622 c 0,66,67 + 492 655 492 655 485 659 c 0,68,69 + 481 661 481 661 468 662 c 0,70,71 + 441 665 441 665 441 676 c 0,72,73 + 441 688 441 688 468 691 c 1,74,75 + 490 699 490 699 492 711 c 1,76,77 + 492 729 492 729 498 735 c 0,0,1 +548 529 m 0,78,79 + 531 548 531 548 507 548 c 0,80,81 + 469 548 469 548 453 501 c 0,82,83 + 448 487 448 487 446 471 c 0,84,85 + 443 437 443 437 462 391 c 0,86,87 + 466 381 466 381 473 364 c 0,88,89 + 505 296 505 296 507 296 c 0,90,91 + 511 296 511 296 543 364 c 0,92,93 + 571 429 571 429 571 456 c 0,94,95 + 571 463 571 463 570 471 c 0,96,97 + 565 512 565 512 548 529 c 0,78,79 +347 432 m 0,98,99 + 263 475 263 475 184 437 c 0,100,101 + 120 406 120 406 106 344 c 0,102,103 + 96 297 96 297 123 251 c 0,104,105 + 142 219 142 219 203 168 c 2,106,-1 + 262 120 l 1,107,-1 + 332 132 l 2,108,109 + 443 156 443 156 599 144 c 0,110,111 + 648 140 648 140 684 132 c 2,112,-1 + 754 120 l 1,113,-1 + 813 168 l 2,114,115 + 942 274 942 274 905 360 c 0,116,117 + 899 375 899 375 888 390 c 0,118,119 + 841 456 841 456 753 454 c 0,120,121 + 663 452 663 452 599 381 c 0,122,123 + 551 329 551 329 531 252 c 0,124,125 + 526 235 526 235 525 221 c 0,126,127 + 520 188 520 188 512 185 c 0,128,129 + 510 184 510 184 507 184 c 0,130,131 + 497 184 497 184 493 205 c 0,132,133 + 492 211 492 211 491 221 c 0,134,135 + 483 308 483 308 416 380 c 0,136,137 + 384 415 384 415 347 432 c 0,98,99 +698 62 m 0,138,139 + 645 77 645 77 474 78 c 0,140,141 + 401 79 401 79 373 74 c 0,142,143 + 264 52 264 52 263 33 c 0,144,145 + 263 28 263 28 268 23 c 0,146,147 + 277 16 277 16 338 30 c 0,148,149 + 438 51 438 51 592 41 c 0,150,151 + 644 37 644 37 679 30 c 0,152,153 + 741 17 741 17 749 25 c 0,154,155 + 763 40 763 40 720 55 c 0,156,157 + 711 58 711 58 698 62 c 0,138,139 +687 -11 m 0,158,159 + 634 4 634 4 478 7 c 0,160,161 + 418 9 418 9 401 5 c 1,162,163 + 391 1 391 1 332 -11 c 0,164,165 + 260 -27 260 -27 264 -48 c 0,166,167 + 265 -52 265 -52 268 -55 c 0,168,169 + 274 -63 274 -63 338 -45 c 0,170,171 + 438 -18 438 -18 584 -30 c 0,172,173 + 640 -35 640 -35 679 -45 c 0,174,175 + 743 -62 743 -62 749 -54 c 1,176,177 + 765 -38 765 -38 716 -20 c 0,178,179 + 703 -15 703 -15 687 -11 c 0,158,159 +484 497 m 0,180,181 + 492 518 492 518 507 518 c 0,182,183 + 527 518 527 518 536 486 c 0,184,185 + 540 473 540 473 540 458 c 0,186,187 + 540 430 540 430 519 390 c 0,188,189 + 511 375 511 375 507 375 c 0,190,191 + 498 375 498 375 483 424 c 0,192,193 + 476 447 476 447 476 458 c 0,194,195 + 476 479 476 479 484 497 c 0,180,181 +211 410 m 0,196,197 + 274 434 274 434 344 397 c 0,198,199 + 371 383 371 383 391 361 c 0,200,201 + 424 327 424 327 447 254 c 0,202,203 + 454 234 454 234 456 219 c 2,204,-1 + 461 186 l 1,205,-1 + 405 180 l 2,206,207 + 339 173 339 173 308 165 c 2,208,-1 + 266 156 l 1,209,-1 + 213 202 l 2,210,211 + 125 279 125 279 140 339 c 0,212,213 + 142 345 l 0,214,215 + 156 384 156 384 190 401 c 0,216,217 + 199 406 199 406 211 410 c 0,196,197 +714 415 m 0,218,219 + 767 432 767 432 823 400 c 0,220,221 + 855 382 855 382 868 356 c 0,222,223 + 891 308 891 308 857 261 c 0,224,225 + 841 238 841 238 807 207 c 2,226,-1 + 754 155 l 1,227,-1 + 710 164 l 2,228,229 + 670 174 670 174 611 180 c 2,230,-1 + 555 186 l 1,231,-1 + 560 219 l 2,232,233 + 569 278 569 278 607 337 c 0,234,235 + 617 352 617 352 626 361 c 0,236,237 + 658 397 658 397 714 415 c 0,218,219 +EndSplineSet +EndChar +StartChar: N +Encoding: 78 78 6 +Width: 1023 +Flags: W +Fore +273 712 m 0,0,1 + 277 723 277 723 285 720 c 0,2,3 + 294 717 294 717 340 682 c 0,4,5 + 383 649 383 649 387 640 c 0,6,7 + 393 623 393 623 406 638 c 0,8,9 + 415 648 415 648 432 677 c 0,10,11 + 460 721 460 721 473 722 c 1,12,13 + 484 721 484 721 514 668 c 0,14,15 + 525 650 525 650 529 638 c 1,16,17 + 577 628 l 2,18,19 + 741 598 741 598 834 409 c 0,20,21 + 921 232 921 232 923 -38 c 2,22,-1 + 925 -129 l 1,23,-1 + 623 -129 l 1,24,-1 + 321 -129 l 1,25,-1 + 323 -91 l 2,26,27 + 325 -43 325 -43 375 24 c 0,28,29 + 394 49 394 49 425 86 c 0,30,31 + 503 177 503 177 517 237 c 0,32,33 + 520 247 520 247 521 258 c 0,34,35 + 525 285 525 285 522 286 c 1,36,37 + 519 286 519 286 511 279 c 0,38,39 + 496 264 496 264 452 244 c 0,40,41 + 371 202 371 202 323 150 c 0,42,43 + 311 137 311 137 298 121 c 0,44,45 + 250 60 250 60 229 66 c 0,46,47 + 221 68 221 68 214 77 c 0,48,49 + 204 89 204 89 180 89 c 0,50,51 + 128 89 128 89 101 131 c 0,52,53 + 87 152 87 152 87 176 c 0,54,55 + 87 227 87 227 124 292 c 0,56,57 + 135 310 135 310 151 335 c 0,58,59 + 195 403 195 403 203 437 c 0,60,61 + 216 512 216 512 241 549 c 0,62,63 + 244 554 244 554 248 559 c 0,64,65 + 272 588 272 588 274 605 c 0,66,67 + 275 616 275 616 272 646 c 0,68,69 + 268 701 268 701 273 712 c 0,0,1 +626 577 m 0,70,71 + 549 612 549 612 525 598 c 0,72,73 + 512 590 512 590 536 575 c 0,74,75 + 551 566 551 566 572 562 c 0,76,77 + 602 556 602 556 641 529 c 0,78,79 + 764 448 764 448 810 181 c 0,80,81 + 821 118 821 118 826 48 c 0,82,83 + 837 -73 837 -73 852 -92 c 0,84,85 + 860 -102 860 -102 875 -102 c 0,86,87 + 888 -102 888 -102 894 -90 c 0,88,89 + 902 -68 902 -68 882 103 c 0,90,91 + 873 173 873 173 865 209 c 0,92,93 + 837 340 837 340 785 427 c 0,94,95 + 779 437 l 0,96,97 + 738 501 738 501 667 552 c 0,98,99 + 645 568 645 568 626 577 c 0,70,71 +425 589 m 1,100,101 + 415 605 415 605 366 589 c 0,102,103 + 325 576 325 576 325 561 c 0,104,105 + 325 538 325 538 381 560 c 0,106,107 + 425 574 425 574 425 589 c 1,100,101 +364 510 m 0,108,109 + 364 527 364 527 333 515 c 0,110,111 + 312 507 312 507 296 491 c 0,112,113 + 270 462 270 462 269 435 c 0,114,115 + 269 422 269 422 278 422 c 0,116,117 + 285 422 285 422 286 434 c 0,118,119 + 286 446 286 446 300 446 c 0,120,121 + 320 446 320 446 335 470 c 0,122,123 + 341 480 341 480 341 488 c 0,124,125 + 341 499 341 499 353 502 c 1,126,127 + 364 502 364 502 364 510 c 0,108,109 +552 340 m 0,128,129 + 565 369 565 369 555 377 c 1,130,131 + 549 385 549 385 542 369 c 0,132,133 + 539 359 539 359 529 329 c 1,134,135 + 525 321 525 321 533 315 c 0,136,137 + 539 311 539 311 550 336 c 0,138,139 + 552 340 l 0,128,129 +183 229 m 0,140,141 + 169 244 169 244 158 235 c 0,142,143 + 155 233 155 233 151 229 c 0,144,145 + 137 212 137 212 147 190 c 0,146,147 + 152 179 152 179 161 178 c 1,148,149 + 176 174 176 174 185 197 c 0,150,151 + 193 217 193 217 183 229 c 0,140,141 +246 161 m 0,152,153 + 246 176 246 176 243 176 c 0,154,155 + 233 176 233 176 217 140 c 0,156,157 + 209 122 209 122 212 118 c 1,158,159 + 217 108 217 108 234 132 c 0,160,161 + 246 149 246 149 246 161 c 0,152,153 +EndSplineSet +EndChar +StartChar: P +Encoding: 80 80 7 +Width: 1023 +Flags: W +Fore +444 642 m 0,0,1 + 469 660 469 660 507 660 c 0,2,3 + 572 660 572 660 604 611 c 0,4,5 + 635 565 635 565 608 514 c 0,6,7 + 597 497 597 497 603 491 c 0,8,9 + 606 488 606 488 619 482 c 0,10,11 + 644 469 644 469 664 441 c 0,12,13 + 684 414 684 414 686 387 c 0,14,15 + 687 375 687 375 687 350 c 0,16,17 + 687 296 687 296 678 280 c 0,18,19 + 673 272 673 272 661 257 c 2,20,-1 + 636 226 l 1,21,-1 + 655 218 l 2,22,23 + 694 200 694 200 742 140 c 0,24,25 + 753 127 753 127 761 114 c 0,26,27 + 810 38 810 38 813 -64 c 2,28,-1 + 814 -121 l 1,29,-1 + 507 -121 l 1,30,-1 + 202 -121 l 1,31,-1 + 203 -64 l 2,32,33 + 206 38 206 38 255 114 c 0,34,35 + 290 169 290 169 340 205 c 0,36,37 + 352 214 352 214 361 218 c 2,38,-1 + 380 226 l 1,39,-1 + 362 248 l 2,40,41 + 315 303 315 303 329 381 c 0,42,43 + 342 453 342 453 397 482 c 0,44,45 + 416 491 416 491 416 498 c 0,46,47 + 416 502 416 502 408 514 c 0,48,49 + 379 571 379 571 418 619 c 0,50,51 + 429 632 429 632 444 642 c 0,0,1 +EndSplineSet +EndChar +StartChar: Q +Encoding: 81 81 8 +Width: 1023 +Flags: W +Fore +468 732 m 0,0,1 + 488 754 488 754 507 756 c 0,2,3 + 531 756 531 756 557 723 c 0,4,5 + 572 704 572 704 572 690 c 0,6,7 + 572 672 572 672 552 646 c 2,8,-1 + 532 622 l 1,9,-1 + 564 472 l 2,10,11 + 596 321 596 321 598 315 c 0,12,13 + 600 307 600 307 649 454 c 2,14,-1 + 698 599 l 1,15,-1 + 683 619 l 2,16,17 + 668 636 668 636 667 657 c 0,18,19 + 667 682 667 682 699 709 c 0,20,21 + 718 724 718 724 732 724 c 0,22,23 + 755 724 755 724 781 691 c 0,24,25 + 795 672 795 672 795 657 c 0,26,27 + 795 634 795 634 770 608 c 0,28,29 + 758 596 758 596 751 596 c 0,30,31 + 740 596 740 596 745 492 c 0,32,33 + 747 386 747 386 754 343 c 2,34,-1 + 758 299 l 1,35,-1 + 823 414 l 2,36,37 + 880 515 880 515 881 531 c 0,38,39 + 882 538 882 538 877 545 c 0,40,41 + 849 583 849 583 888 622 c 0,42,43 + 934 666 934 666 971 620 c 0,44,45 + 1012 573 1012 573 971 533 c 0,46,47 + 961 522 961 522 945 514 c 0,48,49 + 931 508 931 508 923 480 c 0,50,51 + 916 454 916 454 900 357 c 0,52,53 + 877 222 877 222 869 202 c 0,54,55 + 862 186 862 186 836 154 c 0,56,57 + 807 119 807 119 796 71 c 0,58,59 + 787 31 787 31 793 16 c 0,60,61 + 796 7 796 7 811 -21 c 0,62,63 + 840 -73 840 -73 824 -92 c 0,64,65 + 806 -114 806 -114 692 -128 c 2,66,67 + 690 -129 690 -129 687 -129 c 0,68,69 + 511 -149 511 -149 338 -130 c 0,70,71 + 333 -130 333 -130 329 -129 c 0,72,73 + 212 -114 212 -114 193 -93 c 0,74,75 + 176 -74 176 -74 205 -21 c 0,76,77 + 227 19 227 19 226 34 c 0,78,79 + 226 43 226 43 220 71 c 0,80,81 + 209 119 209 119 180 154 c 0,82,83 + 151 191 151 191 144 213 c 0,84,85 + 137 236 137 236 116 357 c 0,86,87 + 94 490 94 490 83 505 c 0,88,89 + 79 511 79 511 71 514 c 0,90,91 + 12 545 12 545 28 592 c 0,92,93 + 33 606 33 606 45 620 c 0,94,95 + 82 666 82 666 128 622 c 0,96,97 + 167 583 167 583 139 545 c 0,98,99 + 130 531 130 531 144 503 c 0,100,101 + 154 481 154 481 193 414 c 2,102,-1 + 258 299 l 1,103,-1 + 262 343 l 2,104,105 + 269 386 269 386 271 492 c 0,106,107 + 276 596 276 596 265 596 c 0,108,109 + 251 596 251 596 232 627 c 0,110,111 + 221 645 221 645 221 657 c 0,112,113 + 221 682 221 682 253 710 c 0,114,115 + 270 724 270 724 282 724 c 0,116,117 + 308 724 308 724 334 691 c 0,118,119 + 349 672 349 672 349 657 c 0,120,121 + 349 638 349 638 333 619 c 2,122,-1 + 318 599 l 1,123,-1 + 367 454 l 2,124,125 + 416 307 416 307 418 315 c 0,126,127 + 420 321 420 321 452 472 c 2,128,-1 + 484 622 l 1,129,-1 + 464 646 l 2,130,131 + 426 691 426 691 468 732 c 0,0,1 +679 152 m 0,132,133 + 561 166 561 166 390 155 c 0,134,135 + 349 153 349 153 323 149 c 0,136,137 + 237 138 237 138 248 117 c 0,138,139 + 250 114 250 114 252 112 c 0,140,141 + 261 102 261 102 322 114 c 0,142,143 + 419 130 419 130 600 122 c 0,144,145 + 661 119 661 119 694 114 c 0,146,147 + 755 102 755 102 764 112 c 0,148,149 + 780 129 780 129 735 142 c 0,150,151 + 713 147 713 147 679 152 c 0,132,133 +671 56 m 0,152,153 + 582 70 582 70 407 62 c 0,154,155 + 359 60 359 60 333 56 c 0,156,157 + 263 45 263 45 263 26 c 0,158,159 + 263 22 263 22 267 18 c 0,160,161 + 274 10 274 10 325 19 c 0,162,163 + 390 28 390 28 507 28 c 0,164,165 + 626 28 626 28 691 19 c 0,166,167 + 742 10 742 10 749 18 c 0,168,169 + 765 34 765 34 721 46 c 0,170,171 + 701 52 701 52 671 56 c 0,152,153 +EndSplineSet +EndChar +StartChar: R +Encoding: 82 82 9 +Width: 1023 +Flags: W +Fore +196 671 m 1,0,1 + 200 677 200 677 270 675 c 2,2,-1 + 338 671 l 1,3,-1 + 340 643 l 1,4,-1 + 342 613 l 1,5,-1 + 389 613 l 1,6,-1 + 436 613 l 1,7,-1 + 438 643 l 1,8,-1 + 441 671 l 1,9,-1 + 512 671 l 1,10,-1 + 582 671 l 1,11,-1 + 586 643 l 1,12,-1 + 588 613 l 1,13,-1 + 630 613 l 1,14,-1 + 674 613 l 1,15,-1 + 676 643 l 1,16,-1 + 679 671 l 1,17,-1 + 750 671 l 1,18,-1 + 821 671 l 1,19,-1 + 824 600 l 1,20,-1 + 826 527 l 1,21,-1 + 782 490 l 1,22,-1 + 738 452 l 1,23,-1 + 738 284 l 1,24,-1 + 738 116 l 1,25,-1 + 770 86 l 2,26,27 + 797 58 797 58 800 40 c 0,28,29 + 802 32 802 32 802 13 c 2,30,-1 + 802 -29 l 1,31,-1 + 836 -32 l 1,32,-1 + 870 -34 l 1,33,-1 + 870 -79 l 1,34,-1 + 870 -121 l 1,35,-1 + 507 -121 l 1,36,-1 + 146 -121 l 1,37,-1 + 146 -79 l 1,38,-1 + 146 -34 l 1,39,-1 + 180 -32 l 1,40,-1 + 214 -29 l 1,41,-1 + 214 13 l 2,42,43 + 214 48 214 48 226 64 c 0,44,45 + 232 71 232 71 246 86 c 2,46,-1 + 278 116 l 1,47,-1 + 278 284 l 1,48,-1 + 278 452 l 1,49,-1 + 234 490 l 1,50,-1 + 191 527 l 1,51,-1 + 191 596 l 2,52,53 + 191 666 191 666 196 671 c 1,0,1 +773 533 m 0,54,55 + 773 542 773 542 697 545 c 0,56,57 + 653 546 653 546 510 548 c 0,58,59 + 264 548 264 548 244 540 c 0,60,61 + 233 536 233 536 244 525 c 0,62,63 + 252 517 252 517 513 519 c 0,64,65 + 757 521 757 521 770 529 c 0,66,67 + 773 531 773 531 773 533 c 0,54,55 +703 462 m 0,68,69 + 703 471 703 471 636 473 c 0,70,71 + 603 474 603 474 510 476 c 0,72,73 + 324 478 324 478 311 468 c 0,74,75 + 306 463 306 463 315 454 c 0,76,77 + 323 445 323 445 513 448 c 0,78,79 + 692 450 692 450 701 458 c 0,80,81 + 703 460 703 460 703 462 c 0,68,69 +703 121 m 0,82,83 + 703 130 703 130 636 132 c 0,84,85 + 603 133 603 133 510 135 c 0,86,87 + 319 137 319 137 310 124 c 0,88,89 + 307 120 307 120 315 112 c 0,90,91 + 322 105 322 105 513 105 c 0,92,93 + 688 109 688 109 700 116 c 0,94,95 + 703 118 703 118 703 121 c 0,82,83 +750 57 m 0,96,97 + 750 66 750 66 663 69 c 0,98,99 + 617 70 617 70 510 71 c 0,100,101 + 285 73 285 73 266 64 c 0,102,103 + 257 59 257 59 268 48 c 0,104,105 + 275 41 275 41 513 43 c 0,106,107 + 736 45 736 45 748 53 c 0,108,109 + 750 55 750 55 750 57 c 0,96,97 +766 -46 m 0,110,111 + 766 -37 766 -37 671 -34 c 0,112,113 + 622 -33 622 -33 510 -32 c 0,114,115 + 268 -30 268 -30 250 -40 c 0,116,117 + 241 -45 241 -45 252 -55 c 1,118,119 + 257 -62 257 -62 513 -60 c 0,120,121 + 749 -57 749 -57 763 -50 c 0,122,123 + 766 -49 766 -49 766 -46 c 0,110,111 +EndSplineSet +EndChar +StartChar: b +Encoding: 98 98 10 +Width: 1023 +Flags: W +Fore +461 732 m 0,0,1 + 481 756 481 756 507 756 c 0,2,3 + 538 756 538 756 565 723 c 0,4,5 + 579 705 579 705 579 690 c 0,6,7 + 579 669 579 669 564 652 c 2,8,-1 + 548 630 l 1,9,-1 + 594 601 l 2,10,11 + 739 504 739 504 753 401 c 0,12,13 + 755 382 755 382 754 363 c 0,14,15 + 746 293 746 293 709 240 c 0,16,17 + 701 228 701 228 693 221 c 2,18,-1 + 676 206 l 1,19,-1 + 698 139 l 2,20,21 + 724 72 724 72 720 61 c 0,22,23 + 713 46 713 46 596 29 c 2,24,-1 + 560 23 l 1,25,-1 + 584 11 l 2,26,27 + 606 -1 606 -1 703 -2 c 0,28,29 + 719 -2 719 -2 742 -2 c 0,30,31 + 865 -2 865 -2 891 -11 c 0,32,33 + 899 -14 899 -14 911 -20 c 0,34,35 + 940 -36 940 -36 949 -45 c 1,36,37 + 953 -54 953 -54 914 -112 c 0,38,39 + 895 -141 895 -141 889 -141 c 0,40,41 + 882 -141 882 -141 853 -129 c 0,42,43 + 827 -117 827 -117 750 -120 c 0,44,45 + 736 -120 736 -120 718 -121 c 0,46,47 + 626 -127 626 -127 601 -120 c 0,48,49 + 588 -116 588 -116 561 -105 c 2,50,-1 + 507 -86 l 1,51,-1 + 455 -105 l 2,52,53 + 410 -124 410 -124 378 -124 c 0,54,55 + 359 -125 359 -125 298 -121 c 0,56,57 + 197 -116 197 -116 171 -126 c 0,58,59 + 168 -127 168 -127 164 -129 c 0,60,61 + 133 -141 133 -141 127 -141 c 0,62,63 + 117 -141 117 -141 83 -82 c 0,64,65 + 65 -50 65 -50 67 -45 c 1,66,67 + 76 -36 76 -36 105 -20 c 0,68,69 + 135 -5 135 -5 182 -3 c 0,70,71 + 209 -2 209 -2 274 -2 c 0,72,73 + 402 -2 402 -2 426 8 c 0,74,75 + 429 10 429 10 432 11 c 2,76,-1 + 456 23 l 1,77,-1 + 420 29 l 2,78,79 + 303 46 303 46 296 61 c 0,80,81 + 292 72 292 72 318 139 c 2,82,-1 + 341 206 l 1,83,-1 + 323 221 l 2,84,85 + 288 253 288 253 270 326 c 0,86,87 + 265 346 265 346 264 363 c 0,88,89 + 255 471 255 471 375 567 c 0,90,91 + 396 584 396 584 422 601 c 2,92,-1 + 468 630 l 1,93,-1 + 452 652 l 2,94,95 + 419 693 419 693 461 732 c 0,0,1 +536 711 m 0,96,97 + 523 724 523 724 507 724 c 0,98,99 + 488 724 488 724 474 703 c 0,100,101 + 468 695 468 695 468 688 c 0,102,103 + 468 670 468 670 491 658 c 0,104,105 + 500 653 500 653 507 653 c 0,106,107 + 529 653 529 653 543 673 c 0,108,109 + 548 681 548 681 548 688 c 0,110,111 + 548 701 548 701 536 711 c 0,96,97 +570 580 m 0,112,113 + 507 621 507 621 506 621 c 0,114,115 + 494 618 494 618 401 548 c 0,116,117 + 361 517 361 517 352 507 c 0,118,119 + 304 463 304 463 296 393 c 0,120,121 + 295 377 295 377 296 362 c 0,122,123 + 301 314 301 314 332 259 c 0,124,125 + 343 240 343 240 350 236 c 0,126,127 + 364 228 364 228 574 231 c 0,128,129 + 660 232 660 232 666 236 c 0,130,131 + 685 247 685 247 708 312 c 0,132,133 + 718 342 718 342 720 362 c 0,134,135 + 724 403 724 403 705 445 c 0,136,137 + 687 492 687 492 627 538 c 0,138,139 + 605 555 605 555 570 580 c 0,112,113 +620 195 m 0,140,141 + 574 202 574 202 430 198 c 0,142,143 + 399 197 399 197 388 195 c 0,144,145 + 365 190 365 190 360 166 c 2,146,-1 + 352 141 l 1,147,-1 + 507 141 l 1,148,-1 + 664 141 l 1,149,-1 + 656 165 l 2,150,151 + 650 186 650 186 637 191 c 0,152,153 + 631 193 631 193 620 195 c 0,140,141 +664 100 m 0,154,155 + 633 107 633 107 459 109 c 0,156,157 + 415 110 415 110 405 108 c 0,158,159 + 396 106 396 106 360 100 c 0,160,161 + 336 97 336 97 333 86 c 1,162,163 + 333 70 333 70 435 60 c 0,164,165 + 472 57 472 57 507 57 c 0,166,167 + 624 57 624 57 671 79 c 0,168,169 + 696 91 696 91 664 100 c 0,154,155 +555 -8 m 2,170,171 + 514 18 514 18 506 18 c 0,172,173 + 499 18 499 18 457 -9 c 2,174,-1 + 418 -34 l 1,175,-1 + 282 -34 l 2,176,177 + 150 -34 150 -34 125 -45 c 0,178,179 + 108 -54 108 -54 108 -59 c 0,180,181 + 108 -63 108 -63 117 -79 c 0,182,183 + 130 -99 130 -99 141 -99 c 1,184,185 + 145 -98 145 -98 151 -96 c 0,186,187 + 173 -90 173 -90 294 -90 c 0,188,189 + 404 -90 404 -90 431 -81 c 0,190,191 + 443 -78 443 -78 463 -68 c 2,192,-1 + 507 -47 l 1,193,-1 + 554 -68 l 2,194,195 + 591 -86 591 -86 631 -89 c 0,196,197 + 654 -90 654 -90 722 -90 c 0,198,199 + 843 -90 843 -90 865 -96 c 0,200,201 + 882 -102 882 -102 892 -89 c 0,202,203 + 895 -85 895 -85 899 -79 c 0,204,205 + 910 -59 910 -59 906 -54 c 0,206,207 + 903 -51 903 -51 891 -45 c 0,208,209 + 866 -34 866 -34 732 -34 c 2,210,-1 + 598 -34 l 1,211,-1 + 555 -8 l 2,170,171 +498 489 m 0,212,213 + 513 505 513 505 519 474 c 0,214,215 + 521 465 521 465 521 452 c 2,216,-1 + 525 415 l 1,217,-1 + 562 412 l 2,218,219 + 599 411 599 411 599 398 c 0,220,221 + 599 387 599 387 562 384 c 2,222,-1 + 525 382 l 1,223,-1 + 521 348 l 2,224,225 + 521 315 521 315 507 315 c 0,226,227 + 495 315 495 315 495 348 c 2,228,-1 + 491 382 l 1,229,-1 + 454 384 l 2,230,231 + 417 387 417 387 417 398 c 0,232,233 + 417 411 417 411 455 412 c 2,234,-1 + 492 415 l 1,235,-1 + 492 449 l 2,236,237 + 492 483 492 483 498 489 c 0,212,213 +EndSplineSet +EndChar +StartChar: k +Encoding: 107 107 11 +Width: 1023 +Flags: W +Fore +498 735 m 0,0,1 + 508 746 508 746 516 732 c 0,2,3 + 520 725 520 725 521 714 c 0,4,5 + 525 696 525 696 538 693 c 0,6,7 + 542 692 542 692 550 691 c 0,8,9 + 577 688 577 688 576 675 c 0,10,11 + 575 663 575 663 550 662 c 0,12,13 + 529 660 529 660 526 653 c 0,14,15 + 524 646 524 646 524 622 c 0,16,17 + 525 589 525 589 536 579 c 0,18,19 + 540 575 540 575 550 570 c 1,20,21 + 596 538 596 538 603 479 c 0,22,23 + 604 471 604 471 604 464 c 2,24,-1 + 604 430 l 1,25,-1 + 647 455 l 2,26,27 + 736 504 736 504 826 472 c 0,28,29 + 899 446 899 446 930 379 c 0,30,31 + 977 273 977 273 853 162 c 2,32,-1 + 802 115 l 1,33,-1 + 797 25 l 2,34,35 + 794 -63 794 -63 783 -75 c 0,36,37 + 773 -85 773 -85 703 -105 c 0,38,39 + 556 -148 556 -148 384 -123 c 0,40,41 + 320 -113 320 -113 268 -94 c 0,42,43 + 232 -81 232 -81 224 -66 c 0,44,45 + 214 -49 214 -49 214 36 c 2,46,-1 + 214 114 l 1,47,-1 + 164 161 l 2,48,49 + 40 276 40 276 85 377 c 0,50,51 + 99 408 99 408 129 435 c 0,52,53 + 205 504 205 504 305 480 c 0,54,55 + 338 473 338 473 369 455 c 2,56,-1 + 412 430 l 1,57,-1 + 412 464 l 2,58,59 + 412 525 412 525 457 563 c 0,60,61 + 461 567 461 567 466 570 c 0,62,63 + 487 581 487 581 490 597 c 0,64,65 + 491 604 491 604 492 622 c 0,66,67 + 492 655 492 655 485 659 c 0,68,69 + 481 661 481 661 468 662 c 0,70,71 + 441 665 441 665 441 676 c 0,72,73 + 441 688 441 688 468 691 c 1,74,75 + 490 699 490 699 492 711 c 1,76,77 + 492 729 492 729 498 735 c 0,0,1 +540 541 m 0,78,79 + 496 565 496 565 466 528 c 0,80,81 + 436 493 436 493 448 432 c 0,82,83 + 456 395 456 395 493 325 c 0,84,85 + 504 304 504 304 507 304 c 0,86,87 + 518 304 518 304 550 384 c 0,88,89 + 566 424 566 424 568 442 c 0,90,91 + 575 493 575 493 553 528 c 0,92,93 + 547 537 547 537 540 541 c 0,78,79 +360 424 m 0,94,95 + 269 475 269 475 185 435 c 0,96,97 + 98 394 98 394 107 314 c 0,98,99 + 113 253 113 253 176 189 c 0,100,101 + 216 149 216 149 231 147 c 0,102,103 + 236 146 236 146 244 148 c 0,104,105 + 339 173 339 173 431 180 c 0,106,107 + 481 186 481 186 488 195 c 0,108,109 + 496 205 496 205 481 257 c 0,110,111 + 479 262 479 262 476 272 c 0,112,113 + 448 365 448 365 375 415 c 0,114,115 + 368 420 368 420 360 424 c 0,94,95 +834 432 m 0,116,117 + 762 468 762 468 696 443 c 0,118,119 + 579 400 579 400 538 270 c 0,120,121 + 521 214 521 214 525 202 c 0,122,123 + 530 188 530 188 577 182 c 0,124,125 + 586 181 586 181 611 178 c 0,126,127 + 707 165 707 165 741 156 c 2,128,-1 + 788 144 l 1,129,-1 + 825 175 l 2,130,131 + 915 251 915 251 909 330 c 0,132,133 + 905 396 905 396 834 432 c 0,116,117 +623 144 m 0,134,135 + 494 163 494 163 364 139 c 0,136,137 + 272 124 272 124 259 115 c 0,138,139 + 249 108 249 108 248 79 c 0,140,141 + 245 43 245 43 253 43 c 0,142,143 + 256 43 256 43 260 45 c 0,144,145 + 351 73 351 73 451 75 c 0,146,147 + 476 76 476 76 512 76 c 0,148,149 + 636 75 636 75 700 60 c 2,150,-1 + 762 45 l 1,151,-1 + 768 70 l 1,152,153 + 770 102 770 102 768 107 c 0,154,155 + 761 125 761 125 623 144 c 0,134,135 +635 38 m 0,156,157 + 555 53 555 53 445 48 c 0,158,159 + 425 47 425 47 412 45 c 1,160,161 + 396 40 396 40 320 25 c 0,162,163 + 256 11 256 11 249 2 c 0,164,165 + 246 -2 246 -2 246 -14 c 2,166,-1 + 246 -38 l 1,167,-1 + 295 -21 l 2,168,169 + 446 24 446 24 614 2 c 0,170,171 + 655 -4 655 -4 691 -13 c 0,172,173 + 754 -31 754 -31 759 -27 c 0,174,175 + 762 -25 762 -25 762 -11 c 0,176,177 + 762 6 762 6 735 16 c 0,178,179 + 712 24 712 24 635 38 c 0,156,157 +671 -42 m 0,180,181 + 604 -26 604 -26 479 -24 c 0,182,183 + 438 -24 438 -24 421 -27 c 0,184,185 + 300 -49 300 -49 286 -63 c 1,186,187 + 286 -79 286 -79 400 -92 c 0,188,189 + 457 -98 457 -98 507 -98 c 0,190,191 + 624 -98 624 -98 701 -75 c 0,192,193 + 723 -68 723 -68 727 -62 c 1,194,195 + 729 -56 729 -56 671 -42 c 0,180,181 +EndSplineSet +EndChar +StartChar: n +Encoding: 110 110 12 +Width: 1023 +Flags: W +Fore +265 712 m 0,0,1 + 269 724 269 724 279 720 c 1,2,3 + 326 692 326 692 369 652 c 0,4,5 + 377 644 377 644 379 641 c 0,6,7 + 387 625 387 625 406 650 c 0,8,9 + 415 661 415 661 428 683 c 0,10,11 + 452 721 452 721 464 724 c 1,12,13 + 475 724 475 724 501 679 c 0,14,15 + 516 652 516 652 516 642 c 0,16,17 + 516 630 516 630 541 630 c 0,18,19 + 655 627 655 627 756 522 c 0,20,21 + 820 457 820 457 858 367 c 0,22,23 + 908 249 908 249 930 54 c 0,24,25 + 938 -17 938 -17 938 -75 c 2,26,-1 + 938 -125 l 1,27,-1 + 911 -129 l 2,28,29 + 896 -132 896 -132 599 -132 c 2,30,-1 + 314 -129 l 1,31,-1 + 311 -103 l 2,32,33 + 305 -43 305 -43 412 81 c 0,34,35 + 495 180 495 180 510 233 c 0,36,37 + 514 251 l 2,38,-1 + 518 279 l 1,39,-1 + 437 237 l 2,40,41 + 357 194 357 194 338 177 c 0,42,43 + 323 164 323 164 288 120 c 0,44,45 + 241 59 241 59 219 67 c 0,46,47 + 212 70 212 70 206 77 c 0,48,49 + 198 88 198 88 173 89 c 0,50,51 + 120 89 120 89 92 131 c 0,52,53 + 79 152 79 152 79 176 c 0,54,55 + 79 227 79 227 116 292 c 0,56,57 + 127 310 127 310 143 335 c 0,58,59 + 187 403 187 403 195 437 c 0,60,61 + 208 512 208 512 231 545 c 0,62,63 + 235 552 235 552 241 559 c 0,64,65 + 264 587 264 587 266 606 c 0,66,67 + 266 616 266 616 264 646 c 0,68,69 + 260 701 260 701 265 712 c 0,0,1 +489 611 m 0,70,71 + 487 645 487 645 473 664 c 0,72,73 + 464 677 464 677 459 673 c 0,74,75 + 457 671 457 671 450 660 c 0,76,77 + 438 641 438 641 432 618 c 0,78,79 + 425 585 425 585 418 585 c 0,80,81 + 414 585 414 585 405 591 c 0,82,83 + 392 599 392 599 378 588 c 0,84,85 + 372 583 372 583 361 573 c 0,86,87 + 333 545 333 545 323 555 c 1,88,89 + 315 566 315 566 338 588 c 0,90,91 + 365 618 365 618 339 640 c 0,92,93 + 331 647 331 647 318 655 c 0,94,95 + 296 668 296 668 295 663 c 1,96,97 + 294 661 294 661 294 654 c 0,98,99 + 294 642 294 642 302 614 c 0,100,101 + 310 593 310 593 302 581 c 0,102,103 + 298 575 298 575 287 564 c 0,104,105 + 249 528 249 528 237 477 c 0,106,107 + 234 465 234 465 231 450 c 0,108,109 + 223 406 223 406 197 363 c 0,110,111 + 126 250 126 250 117 216 c 0,112,113 + 115 211 115 211 114 204 c 0,114,115 + 107 152 107 152 130 136 c 0,116,117 + 136 132 136 132 143 129 c 0,118,119 + 187 110 187 110 214 157 c 0,120,121 + 233 189 233 189 243 178 c 0,122,123 + 253 165 253 165 233 128 c 0,124,125 + 218 96 218 96 229 98 c 0,126,127 + 236 99 236 99 248 117 c 0,128,129 + 308 201 308 201 403 254 c 0,130,131 + 412 259 412 259 422 264 c 0,132,133 + 492 300 492 300 509 323 c 0,134,135 + 523 343 523 343 530 393 c 0,136,137 + 536 434 536 434 548 434 c 0,138,139 + 562 434 562 434 556 357 c 0,140,141 + 554 331 554 331 550 291 c 0,142,143 + 542 211 542 211 513 164 c 0,144,145 + 494 132 494 132 444 74 c 0,146,147 + 356 -29 356 -29 343 -81 c 0,148,149 + 341 -87 341 -87 341 -91 c 0,150,151 + 341 -102 341 -102 608 -102 c 2,152,-1 + 877 -102 l 1,153,-1 + 870 -11 l 2,154,155 + 847 372 847 372 695 521 c 0,156,157 + 648 570 648 570 607 582 c 0,158,159 + 536 606 536 606 526 598 c 0,160,161 + 523 596 523 596 521 589 c 0,162,163 + 515 564 515 564 503 575 c 0,164,165 + 493 584 493 584 489 611 c 0,70,71 +289 491 m 0,166,167 + 316 518 316 518 344 519 c 0,168,169 + 357 520 357 520 357 510 c 0,170,171 + 357 502 357 502 345 502 c 0,172,173 + 336 502 336 502 333 488 c 1,174,175 + 333 467 333 467 310 452 c 0,176,177 + 301 446 301 446 292 446 c 0,178,179 + 278 446 278 446 278 434 c 128,-1,180 + 278 422 278 422 270 422 c 0,181,182 + 254 422 254 422 264 452 c 0,183,184 + 272 474 272 474 289 491 c 0,166,167 +143 229 m 0,185,186 + 157 244 157 244 168 235 c 0,187,188 + 171 233 171 233 175 229 c 0,189,190 + 188 212 188 212 173 189 c 0,191,192 + 164 175 164 175 152 178 c 0,193,194 + 137 180 137 180 136 204 c 0,195,196 + 135 219 135 219 143 229 c 0,185,186 +EndSplineSet +EndChar +StartChar: p +Encoding: 112 112 13 +Width: 1023 +Flags: W +Fore +444 642 m 0,0,1 + 469 660 469 660 507 660 c 0,2,3 + 572 660 572 660 604 611 c 0,4,5 + 635 565 635 565 608 514 c 0,6,7 + 597 497 597 497 603 491 c 0,8,9 + 606 488 606 488 619 482 c 0,10,11 + 644 469 644 469 664 441 c 0,12,13 + 684 414 684 414 686 387 c 0,14,15 + 687 375 687 375 687 350 c 0,16,17 + 687 296 687 296 678 280 c 0,18,19 + 673 272 673 272 661 257 c 2,20,-1 + 636 226 l 1,21,-1 + 655 218 l 2,22,23 + 694 200 694 200 742 140 c 0,24,25 + 753 127 753 127 761 114 c 0,26,27 + 810 38 810 38 813 -64 c 2,28,-1 + 814 -121 l 1,29,-1 + 507 -121 l 1,30,-1 + 202 -121 l 1,31,-1 + 203 -64 l 2,32,33 + 206 38 206 38 255 114 c 0,34,35 + 290 169 290 169 340 205 c 0,36,37 + 352 214 352 214 361 218 c 2,38,-1 + 380 226 l 1,39,-1 + 362 248 l 2,40,41 + 315 303 315 303 329 381 c 0,42,43 + 342 453 342 453 397 482 c 0,44,45 + 416 491 416 491 416 498 c 0,46,47 + 416 502 416 502 408 514 c 0,48,49 + 379 571 379 571 418 619 c 0,50,51 + 429 632 429 632 444 642 c 0,0,1 +555 618 m 0,52,53 + 509 641 509 641 467 620 c 0,54,55 + 445 608 445 608 437 588 c 0,56,57 + 418 544 418 544 452 510 c 0,58,59 + 455 507 455 507 459 504 c 0,60,61 + 480 487 480 487 469 478 c 0,62,63 + 461 471 461 471 427 459 c 0,64,65 + 381 442 381 442 367 404 c 0,66,67 + 363 390 363 390 360 371 c 0,68,69 + 351 308 351 308 390 264 c 0,70,71 + 399 254 399 254 410 247 c 0,72,73 + 438 228 438 228 435 223 c 0,74,75 + 427 212 427 212 381 190 c 0,76,77 + 256 127 256 127 233 -52 c 2,78,-1 + 229 -94 l 1,79,-1 + 507 -94 l 1,80,-1 + 788 -94 l 1,81,-1 + 783 -52 l 2,82,83 + 760 127 760 127 635 190 c 0,84,85 + 583 215 583 215 581 223 c 1,86,87 + 578 228 578 228 606 247 c 0,88,89 + 650 275 650 275 656 336 c 0,90,91 + 658 354 658 354 656 371 c 0,92,93 + 648 427 648 427 612 448 c 0,94,95 + 602 454 602 454 589 459 c 0,96,97 + 542 476 542 476 542 486 c 0,98,99 + 542 492 542 492 552 502 c 0,100,101 + 591 533 591 533 584 576 c 0,102,103 + 580 604 580 604 555 618 c 0,52,53 +EndSplineSet +EndChar +StartChar: q +Encoding: 113 113 14 +Width: 1023 +Flags: W +Fore +464 736 m 0,0,1 + 482 756 482 756 507 756 c 0,2,3 + 540 756 540 756 562 725 c 0,4,5 + 572 710 572 710 572 696 c 0,6,7 + 572 678 572 678 550 654 c 2,8,-1 + 529 633 l 1,9,-1 + 562 473 l 2,10,11 + 595 314 595 314 598 311 c 1,12,13 + 599 304 599 304 650 454 c 2,14,-1 + 702 602 l 1,15,-1 + 684 625 l 2,16,17 + 649 668 649 668 687 704 c 0,18,19 + 727 745 727 745 771 701 c 0,20,21 + 805 667 805 667 784 638 c 0,22,23 + 778 629 778 629 766 618 c 2,24,-1 + 739 591 l 1,25,-1 + 743 465 l 2,26,27 + 748 332 748 332 754 320 c 0,28,29 + 761 306 761 306 784 343 c 0,30,31 + 791 353 791 353 824 410 c 0,32,33 + 882 511 882 511 883 527 c 0,34,35 + 884 534 884 534 878 543 c 0,36,37 + 850 583 850 583 885 618 c 0,38,39 + 914 647 914 647 954 631 c 0,40,41 + 992 616 992 616 993 577 c 0,42,43 + 993 549 993 549 965 528 c 0,44,45 + 952 518 952 518 940 518 c 0,46,47 + 931 518 931 518 928 506 c 0,48,49 + 922 489 922 489 896 345 c 0,50,51 + 874 208 874 208 868 198 c 2,52,-1 + 833 150 l 2,53,54 + 802 112 802 112 795 70 c 0,55,56 + 786 31 786 31 794 11 c 0,57,58 + 797 5 797 5 802 -6 c 0,59,60 + 816 -36 816 -36 826 -42 c 0,61,62 + 839 -51 839 -51 831 -82 c 0,63,64 + 827 -97 827 -97 820 -103 c 0,65,66 + 801 -121 801 -121 631 -135 c 0,67,68 + 560 -141 560 -141 507 -141 c 0,69,70 + 372 -141 372 -141 247 -118 c 0,71,72 + 204 -110 204 -110 196 -103 c 0,73,74 + 181 -89 181 -89 183 -59 c 0,75,76 + 185 -46 185 -46 191 -42 c 0,77,78 + 200 -35 200 -35 214 -6 c 0,79,80 + 229 23 229 23 226 44 c 0,81,82 + 225 53 225 53 221 70 c 0,83,84 + 214 112 214 112 183 150 c 2,85,-1 + 148 198 l 2,86,87 + 142 208 142 208 120 345 c 0,88,89 + 91 507 91 507 84 515 c 0,90,91 + 82 518 82 518 76 518 c 0,92,93 + 51 518 51 518 32 548 c 0,94,95 + 23 563 23 563 23 577 c 0,96,97 + 23 615 23 615 60 631 c 0,98,99 + 100 647 100 647 131 618 c 0,100,101 + 166 583 166 583 138 543 c 0,102,103 + 129 529 129 529 139 508 c 0,104,105 + 147 489 147 489 192 411 c 0,106,107 + 259 296 259 296 261 300 c 0,108,109 + 266 310 266 310 271 446 c 2,110,-1 + 277 591 l 1,111,-1 + 250 618 l 2,112,113 + 212 652 212 652 229 681 c 0,114,115 + 234 690 234 690 245 701 c 0,116,117 + 289 745 289 745 329 704 c 0,118,119 + 367 668 367 668 332 625 c 2,120,-1 + 314 602 l 1,121,-1 + 366 454 l 2,122,123 + 418 300 418 300 418 311 c 1,124,125 + 421 314 421 314 454 473 c 2,126,-1 + 488 633 l 1,127,-1 + 468 654 l 2,128,129 + 424 694 424 694 464 736 c 0,0,1 +532 712 m 0,130,131 + 520 724 520 724 507 724 c 0,132,133 + 485 724 485 724 480 700 c 0,134,135 + 474 673 474 673 496 664 c 0,136,137 + 520 657 520 657 533 679 c 0,138,139 + 544 697 544 697 532 712 c 0,130,131 +308 683 m 0,140,141 + 296 693 296 693 289 693 c 0,142,143 + 276 693 276 693 260 673 c 0,144,145 + 254 665 254 665 254 660 c 0,146,147 + 254 650 254 650 275 635 c 0,148,149 + 282 629 282 629 286 629 c 0,150,151 + 298 629 298 629 313 651 c 0,152,153 + 318 659 318 659 318 664 c 0,154,155 + 318 673 318 673 308 683 c 0,140,141 +749 679 m 0,156,157 + 728 701 728 701 708 683 c 1,158,159 + 698 671 698 671 698 664 c 0,160,161 + 698 651 698 651 718 635 c 0,162,163 + 725 629 725 629 730 629 c 0,164,165 + 739 629 739 629 749 641 c 0,166,167 + 762 654 762 654 762 660 c 0,168,169 + 762 668 762 668 749 679 c 0,156,157 +111 593 m 0,170,171 + 95 612 95 612 72 602 c 0,172,173 + 56 594 56 594 56 577 c 0,174,175 + 56 548 56 548 95 548 c 0,176,177 + 111 548 111 548 116 568 c 0,178,179 + 120 583 120 583 111 593 c 0,170,171 +948 600 m 1,180,181 + 919 612 919 612 904 592 c 0,182,183 + 896 581 896 581 901 565 c 0,184,185 + 909 544 909 544 935 549 c 0,186,187 + 959 555 959 555 960 577 c 0,188,189 + 960 597 960 597 948 600 c 1,180,181 +543 409 m 0,190,191 + 511 548 511 548 507 548 c 0,192,193 + 501 548 501 548 460 337 c 0,194,195 + 446 267 446 267 448 265 c 0,196,197 + 453 260 453 260 480 271 c 0,198,199 + 508 281 508 281 536 271 c 0,200,201 + 563 260 563 260 568 265 c 1,202,203 + 570 269 570 269 543 409 c 0,190,191 +357 376 m 0,204,205 + 324 485 324 485 312 506 c 1,206,207 + 308 511 308 511 306 494 c 0,208,209 + 302 469 302 469 299 390 c 0,210,211 + 294 262 294 262 298 255 c 1,212,213 + 306 255 306 255 325 264 c 0,214,215 + 351 273 351 273 371 264 c 0,216,217 + 393 256 393 256 394 258 c 0,218,219 + 396 263 396 263 357 376 c 0,204,205 +718 255 m 1,220,221 + 720 258 720 258 716 387 c 0,222,223 + 709 513 709 513 704 503 c 0,224,225 + 691 483 691 483 636 310 c 0,226,227 + 620 259 620 259 622 258 c 1,228,229 + 623 256 623 256 645 264 c 0,230,231 + 665 273 665 273 691 264 c 0,232,233 + 710 255 710 255 718 255 c 1,220,221 +202 333 m 0,234,235 + 143 428 143 428 144 427 c 1,236,237 + 134 438 134 438 134 437 c 0,238,239 + 134 435 134 435 137 423 c 2,240,-1 + 156 320 l 2,241,242 + 169 235 169 235 171 233 c 0,243,244 + 174 230 174 230 193 243 c 1,245,246 + 215 253 215 253 229 250 c 0,247,248 + 246 246 246 246 246 251 c 256,249,250 + 246 256 246 256 202 333 c 0,234,235 +864 335 m 0,251,252 + 879 436 879 436 878 436 c 1,253,254 + 876 440 876 440 794 295 c 0,255,256 + 770 254 770 254 770 251 c 0,257,258 + 770 246 770 246 788 250 c 0,259,260 + 801 253 801 253 823 243 c 1,261,262 + 842 230 842 230 845 233 c 1,263,264 + 845 230 845 230 864 335 c 0,251,252 +536 236 m 0,265,266 + 505 247 505 247 504 247 c 1,267,268 + 504 245 504 245 476 236 c 0,269,270 + 435 219 435 219 385 226 c 0,271,272 + 373 228 373 228 366 231 c 1,273,274 + 352 240 352 240 321 229 c 0,275,276 + 298 218 298 218 248 216 c 0,277,278 + 210 216 210 216 196 206 c 0,279,280 + 186 198 186 198 193 186 c 0,281,282 + 197 180 197 180 209 166 c 2,283,-1 + 236 136 l 1,284,-1 + 328 148 l 2,285,286 + 423 161 423 161 507 161 c 0,287,288 + 595 161 595 161 688 148 c 2,289,-1 + 780 136 l 1,290,-1 + 807 166 l 2,291,292 + 830 193 830 193 826 200 c 1,293,294 + 824 202 824 202 820 206 c 1,295,296 + 806 216 806 216 769 216 c 0,297,298 + 730 216 730 216 698 229 c 0,299,300 + 665 239 665 239 652 232 c 0,301,302 + 620 217 620 217 563 228 c 0,303,304 + 548 231 548 231 536 236 c 0,265,266 +679 117 m 2,305,306 + 510 139 510 139 346 118 c 0,307,308 + 339 117 339 117 333 116 c 0,309,310 + 258 105 258 105 253 105 c 0,311,312 + 247 105 247 105 257 64 c 0,313,314 + 261 48 261 48 264 45 c 1,315,316 + 306 52 l 2,317,318 + 350 60 350 60 507 60 c 0,319,320 + 666 60 666 60 710 52 c 0,321,322 + 741 45 741 45 754 45 c 1,323,-1 + 768 105 l 1,324,325 + 679 117 l 2,305,306 +712 18 m 0,326,327 + 641 29 641 29 455 30 c 0,328,329 + 407 31 407 31 389 29 c 0,330,331 + 257 13 257 13 251 -4 c 0,332,333 + 245 -18 245 -18 248 -18 c 2,334,335 + 333 -11 l 2,336,337 + 502 13 502 13 674 -10 c 0,338,339 + 678 -10 678 -10 683 -11 c 0,340,341 + 767 -18 767 -18 768 -18 c 0,342,343 + 770 -18 770 -18 766 -4 c 0,344,345 + 762 6 762 6 712 18 c 0,326,327 +687 -43 m 0,346,347 + 497 -20 497 -20 318 -45 c 0,348,349 + 226 -55 226 -55 216 -71 c 0,350,351 + 214 -74 214 -74 214 -79 c 0,352,353 + 214 -87 214 -87 401 -104 c 0,354,355 + 474 -110 474 -110 507 -110 c 0,356,357 + 598 -110 598 -110 756 -88 c 0,358,359 + 802 -82 802 -82 802 -79 c 0,360,361 + 802 -62 802 -62 758 -53 c 0,362,363 + 735 -49 735 -49 687 -43 c 0,346,347 +EndSplineSet +EndChar +StartChar: r +Encoding: 114 114 15 +Width: 1023 +Flags: W +Fore +196 671 m 1,0,1 + 200 677 200 677 270 675 c 2,2,-1 + 338 671 l 1,3,-1 + 340 643 l 1,4,-1 + 342 613 l 1,5,-1 + 389 613 l 1,6,-1 + 436 613 l 1,7,-1 + 438 643 l 1,8,-1 + 441 671 l 1,9,-1 + 512 671 l 1,10,-1 + 582 671 l 1,11,-1 + 586 643 l 1,12,-1 + 588 613 l 1,13,-1 + 630 613 l 1,14,-1 + 674 613 l 1,15,-1 + 676 643 l 1,16,-1 + 679 671 l 1,17,-1 + 750 671 l 1,18,-1 + 821 671 l 1,19,-1 + 824 600 l 1,20,-1 + 826 527 l 1,21,-1 + 782 490 l 1,22,-1 + 738 452 l 1,23,-1 + 738 282 l 1,24,-1 + 738 114 l 1,25,-1 + 770 87 l 2,26,27 + 796 64 796 64 800 49 c 0,28,29 + 802 40 802 40 802 15 c 2,30,-1 + 802 -29 l 1,31,-1 + 836 -32 l 1,32,-1 + 870 -34 l 1,33,-1 + 870 -79 l 1,34,-1 + 870 -121 l 1,35,-1 + 507 -121 l 1,36,-1 + 146 -121 l 1,37,-1 + 146 -79 l 1,38,-1 + 146 -34 l 1,39,-1 + 180 -32 l 1,40,-1 + 214 -29 l 1,41,-1 + 214 15 l 2,42,43 + 214 53 214 53 224 66 c 0,44,45 + 230 73 230 73 246 87 c 2,46,-1 + 278 114 l 1,47,-1 + 278 282 l 1,48,-1 + 278 452 l 1,49,-1 + 234 490 l 1,50,-1 + 191 527 l 1,51,-1 + 191 596 l 2,52,53 + 191 666 191 666 196 671 c 1,0,1 +311 615 m 1,54,-1 + 309 645 l 1,55,-1 + 265 645 l 1,56,-1 + 221 645 l 1,57,-1 + 221 596 l 1,58,-1 + 221 548 l 1,59,-1 + 507 548 l 1,60,-1 + 795 548 l 1,61,-1 + 795 596 l 1,62,-1 + 795 645 l 1,63,-1 + 751 645 l 1,64,-1 + 707 645 l 1,65,-1 + 705 615 l 1,66,-1 + 703 585 l 1,67,-1 + 630 585 l 1,68,-1 + 560 585 l 1,69,-1 + 557 615 l 1,70,-1 + 555 645 l 1,71,-1 + 512 645 l 1,72,-1 + 469 645 l 1,73,-1 + 468 615 l 1,74,-1 + 464 585 l 1,75,-1 + 389 585 l 1,76,-1 + 314 585 l 1,77,-1 + 311 615 l 1,54,-1 +744 498 m 1,78,-1 + 766 517 l 1,79,-1 + 507 517 l 1,80,-1 + 250 517 l 1,81,-1 + 272 498 l 1,82,-1 + 294 478 l 1,83,-1 + 507 478 l 1,84,-1 + 722 478 l 1,85,-1 + 744 498 l 1,78,-1 +705 291 m 1,86,-1 + 705 446 l 1,87,-1 + 507 446 l 1,88,-1 + 311 446 l 1,89,-1 + 311 291 l 1,90,-1 + 311 137 l 1,91,-1 + 507 137 l 1,92,-1 + 705 137 l 1,93,-1 + 705 291 l 1,86,-1 +727 89 m 0,94,95 + 715 101 715 101 677 103 c 0,96,97 + 643 105 643 105 507 105 c 0,98,99 + 322 105 322 105 302 98 c 0,100,101 + 295 95 295 95 289 89 c 0,102,103 + 281 80 281 80 290 77 c 0,104,105 + 306 73 306 73 507 73 c 0,106,107 + 719 73 719 73 730 78 c 1,108,109 + 734 81 734 81 727 89 c 0,94,95 +770 6 m 1,110,-1 + 770 41 l 1,111,-1 + 507 41 l 1,112,-1 + 246 41 l 1,113,-1 + 246 6 l 1,114,-1 + 246 -30 l 1,115,-1 + 507 -30 l 1,116,-1 + 770 -30 l 1,117,-1 + 770 6 l 1,110,-1 +841 -79 m 0,118,119 + 841 -70 841 -70 830 -67 c 0,120,121 + 806 -62 806 -62 507 -62 c 0,122,123 + 207 -62 207 -62 185 -68 c 0,124,125 + 175 -70 175 -70 175 -79 c 0,126,127 + 175 -87 175 -87 185 -89 c 0,128,129 + 207 -94 207 -94 507 -94 c 0,130,131 + 813 -94 813 -94 833 -88 c 0,132,133 + 841 -86 841 -86 841 -79 c 0,118,119 +EndSplineSet +EndChar +EndChars +EndSplineFont diff --git a/data/themes/pieces/XBoardTTF/XBoard.ttf b/data/themes/pieces/XBoardTTF/XBoard.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2029ffbe2f87ccd7bc30dc95e03d463d272f869b GIT binary patch literal 8096 zcwWs}d2l4|)Z*VGl(`3_si{qyCs7%B zz#js>Yx{Ne!Cjxa@f`-~K@iu0M`Yyyxib%%Pt=|J`50H5iXZj)FkkPuGC1Zs5C*o|r#p z-hl4}{;z=Vz2($RGrfn3dtm%U;PWSD&Yeax_+hwyHSpP!Gbd)RdTqK3rv5TQWc%q; zXXf!Vz6|$=d!miVe^&T?Z0Pw14q9VxpbSI)@s*d}@s8zovB?k}^yiBR3Jw@U2N#=Y zf6$+`Bv%|#OJd_=$ZGMVHOiN*N3}o){Wksu^h4z1=%b_C5VUPYJ;or%VZ|%yH!>F~& zZBK_4hHg2A-URMV-x>@}EuNvzkYAv^=q$P$JpkQDh6bZvBy3^-UvR-A;S3hs=cAr~ z4Nj03^5v4?ybE^brS6pFc#^vM%D)=-kswDECOSCo*6 zu}ZkD8jX;yQ!JS7x-KD@>iS@mD~?65pgg1~x;j3tX_>38J#jJ}>8ULIq!(kx3VA{` zjgjthxtlOeqvY!fr7&9KjFU-jQAxpA5Mn@tnqIs>pCd%v{^4-Dj=+E0=tq7%7ef&t$dz$UpJVRheOC zFgb~FJVFW9m|7FK?}ok8nfk>cPBdlefzPgQcFXGE#eTEvnnSrvUq6!~6c&;h$)rbC zIkA#05$ZCLB`ll5(m(9nzTQ-m?)citQ=b^+e4=;3DJD%tE)V#A*pbJVq0GfesVLmysMUeE0TE`lwB)} ze0(6Am^gmAzW+K~MEc^YYgo?p+v;a#Gs(>{5sK%>ON?r^2;~^~pQck;554TxO*>yx zolToIB!yhr(O1e`Rj*}-8hT7;vfenp%d$2SGS%Gbm^q3gT-|+jVc{_gW65(RNth9p z2}8Cly4j+HG2M39&{?`(l1hQc!AP&;$$sBDE(NX|36GA5W=jdgpwVXF>Z60vk&e5LN-O=g z>F)}k!VZIH>tozdoRpz;X{_6wL}?<+MX;>CSq zs+PpU3imb*dz=$R?~TNUHiY7v@>`0MlyfTe6-FNR+ z*ALkd+cvDIXRdd2*-j@7U5}}A>_fk(L?Adf3BlTSupDPb1FASSA?w~5c+QAhqdKk*m0Ux zVC3aiXoOzPAVdad5P&-&b#$cT!pnI#SOxdjgw7xsM_NJF@9)d-t6?{mu)^VNmXLt~ z%feaLj3&&uE;NYU3l`9`7WMbF=Bahj={X02K-nJI7LOttU$ z(M(8>r%cf5y5UO?$o!#?#`@p-v8h37g-oI9{yx!F$B_1!GRRy8TNw`7);R#n4}+f` zCQqPYG=Z)~2hj<10U>uJL)YSUcrDK0PHW*b4)SXTs0tnjxo^F7K-Gbgd|S7|MRCNB zG96swTiRJhIld2Eac!CN$GyZRHxW{=6FN1?NN*L|DN3rq)L;n%hG#N|3FzDn&?!XrfNs(WCP9Z>lS)sD{^3yu4@2=haBUjPHzx_Zb_Q8SE zKMyIIgwan;N*?2crMkLO{%>l!Sh{?AJ>N|?BEC_Gk7WzF64(H6%99i z$MK=Z)_qp6L^MAN)X2M13gMZhH#M4g!#%Y z?nYI@+|Zb3)$Y$|QAvK}QJEV&m-&2ERk~yJaItW<9{-byEPBiL-4k~dLu1@Ke=@0u ztMy_}bkljyQ7O|H)#LAb-ysY9s0ar$b!baPfX=y)6>+@u%n{d}9M*+3F`-!w*LAE= zZY#=~w2z#*fc@yYm`N%o`r53d*npi?f_3g#+QfvFoen#Mgv zg8oX^473zW%Pt$B@&L049*i4mOGT-Zm^zc`;QAJl3U}`FyTG+XHFffLfa^xJt4o)Q z8r8Bk5gvbj-_G3%U)N(v^1=OsLbeD^O$+?W)f>-N946J3_`CA;;$F@c{`s!=?l)9S zWyBcNYq`OIqU~F0OtQ6X9N#K8$sW3g}^m|+hF=9HZywN7qGi`%M1?Q+$gKuBF zNS`FH0v3J(ePN|Hwand$g+ojJBzUgaiezLN1ef0qf}1O1Rl8F6dv;1UKU)1NW(iQq z3M~-LmU~3P6k$ZLqJ@WmfN(exYyiI#R+w7vlZosqMoiZdR(x)DeQD5> zlh(p_7ygm*o3FDNyLN|b73wfVjt{4d03}Bmj}pRuOiTsPi_V2$ieYjsrOMG{LN+`o z#$-r9B^_{fVhU1@h;mU)x~dwsG@*|jRMbhw6dVjhn4ES8_ZZ;I*bvc=)hkmfC0tj( znM@hFLZgae0)mzA@*%ZhDLT|XH zl1;?x1QCEVwT|0&S6RFj)n&-TN6Dy>e)3%nw)9-@OwTopvPn)AZi_ey{XD(#Nx3o z?~NAbjzR*DS^oQ@WvqSV4@2A0rI51HFZ|Ym5zFW`pnQ)5L;wB={f=6%C%bvdBAT49 znT#rBMN3h+c6*dz567kG?M(<2Rfqs`w`$bYvS7bAsyCw%NK$!99YyF)$#mCMRpCmS zx9+*#-sjfEWywvAhn!UrE;%Y!Gkq!8ix!FkCixLylDhzrJOYU1IrJs;4fK8VFX+Fp zj2n0Y@ABV?Ux`tIRb0X-OJTYdZd>~!SVP`1$MVMPfEAx=*QcF&pkuvdD?uIs{lhCz zjDJQHYr?>_{K6?3R4zlKqJ7^X(BumSSC%)Ow@>)*Lh+oZdXZd? z;-O}!Q0l4XBV121iHoSnt-+Y53hAB_Zf$6u@OU936u|nXYRF8uPfiWL|Mot}Jdo>6 z3m}5X6u6fbgvVW_*pn%w6jkn@Adid8iYcj|G}Mm z4(v}xL8DnLXLCk&wRQJro)CPC#8pOntB*cb%^2pYsV_D{_i#?H|IBBZv=bA?w!HY< zew92wo!j@xS~W_37|vK`C>DAAF)BX#V6?BhQq89oEqTYix>;0LLp`SS6w|0wOf@V^s>MB7Qn(jtEw65Hd5f#cPC9HkdRVg~u=wE@ zKKPwUs6JIyli1BCB9ar|ey8vYHzLXOt~=E5=Z2sl0l~I|5ao$}81RAe+fHXR_wodRb$-?|GDtrSi)jTi!Hpi@T#Y(932<$eJH=$RWC$~P`ANT+9O@cqGzPj_$8MmM4w;!cC-fF+NLp7@n3G!1n5`WG(~xwYtsyI{LVHlAsb(4(;Vav z`(MbI|9NS?HOi+k($O<*ngIQ^HcbJmeZNgJq~lF(T0&WTL!0Ix|6??P=Flvf0iCnx z5Xzz((RuivhKe_fZbQdFeiW!l;7La^E5nb9nQn;zK56k z)}RtO4F4yAo<|jgCgx^m=4TIOZ#h;4QJ?u+sXAaj+&d$TwJ!m5+o&nW|fZ2FzW)9k|t=S&~|2_fC?4e_4q5W->UIV|C zngYoHT8;YADEtPYR|6_}-)=|LZDhaTpK + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/black_cannon.svg b/data/themes/pieces/XiangQiSVG/black_cannon.svg new file mode 100644 index 0000000..35a486f --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/black_cannon.svg @@ -0,0 +1,61 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/black_chariot.svg b/data/themes/pieces/XiangQiSVG/black_chariot.svg new file mode 100644 index 0000000..785f685 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/black_chariot.svg @@ -0,0 +1,58 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/black_elephant.svg b/data/themes/pieces/XiangQiSVG/black_elephant.svg new file mode 100644 index 0000000..b805a48 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/black_elephant.svg @@ -0,0 +1,58 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/black_general.svg b/data/themes/pieces/XiangQiSVG/black_general.svg new file mode 100644 index 0000000..c8018e0 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/black_general.svg @@ -0,0 +1,61 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/black_horse.svg b/data/themes/pieces/XiangQiSVG/black_horse.svg new file mode 100644 index 0000000..34bc074 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/black_horse.svg @@ -0,0 +1,70 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/black_soldier.svg b/data/themes/pieces/XiangQiSVG/black_soldier.svg new file mode 100644 index 0000000..151f193 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/black_soldier.svg @@ -0,0 +1,58 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/circle.svg b/data/themes/pieces/XiangQiSVG/circle.svg new file mode 100644 index 0000000..0a1657d --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/circle.svg @@ -0,0 +1,61 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/inner_circle.svg b/data/themes/pieces/XiangQiSVG/inner_circle.svg new file mode 100644 index 0000000..3230d3b --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/inner_circle.svg @@ -0,0 +1,61 @@ + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/red_advisor.svg b/data/themes/pieces/XiangQiSVG/red_advisor.svg new file mode 100644 index 0000000..502e054 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/red_advisor.svg @@ -0,0 +1,61 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/red_cannon.svg b/data/themes/pieces/XiangQiSVG/red_cannon.svg new file mode 100644 index 0000000..63683fc --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/red_cannon.svg @@ -0,0 +1,64 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/red_chariot.svg b/data/themes/pieces/XiangQiSVG/red_chariot.svg new file mode 100644 index 0000000..2250012 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/red_chariot.svg @@ -0,0 +1,58 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/red_elephant.svg b/data/themes/pieces/XiangQiSVG/red_elephant.svg new file mode 100644 index 0000000..9b116c8 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/red_elephant.svg @@ -0,0 +1,61 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/red_general.svg b/data/themes/pieces/XiangQiSVG/red_general.svg new file mode 100644 index 0000000..4b0d2c9 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/red_general.svg @@ -0,0 +1,61 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/red_horse.svg b/data/themes/pieces/XiangQiSVG/red_horse.svg new file mode 100644 index 0000000..baea278 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/red_horse.svg @@ -0,0 +1,73 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + + + + diff --git a/data/themes/pieces/XiangQiSVG/red_soldier.svg b/data/themes/pieces/XiangQiSVG/red_soldier.svg new file mode 100644 index 0000000..5aa3d34 --- /dev/null +++ b/data/themes/pieces/XiangQiSVG/red_soldier.svg @@ -0,0 +1,64 @@ + + + + + +Created by potrace 1.7, written by Peter Selinger 2001-2005 + + + image/svg+xml + + + + + + + + + + diff --git a/data/themes/pieces/XiangQiTTF/XiangQi.sfd b/data/themes/pieces/XiangQiTTF/XiangQi.sfd new file mode 100644 index 0000000..577a810 --- /dev/null +++ b/data/themes/pieces/XiangQiTTF/XiangQi.sfd @@ -0,0 +1,1014 @@ +SplineFontDB: 1.0 +FontName: XiangQi +FullName: XiangQi +FamilyName: XiangQi +Weight: Medium +Copyright: Created by Monge Maurizio with FontForge 1.0 (http://fontforge.sf.net) +Version: 001.000 +ItalicAngle: 0 +UnderlinePosition: -100 +UnderlineWidth: 50 +Ascent: 51 +Descent: 13 +Order2: 1 +XUID: [1021 645 1811818106 11622961] +FSType: 0 +OS2Version: 0 +OS2_WeightWidthSlopeOnly: 0 +OS2_UseTypoMetrics: 0 +CreationTime: 1160082499 +ModificationTime: 1160236156 +PfmFamily: 17 +TTFWeight: 500 +TTFWidth: 5 +LineGap: 6 +VLineGap: 0 +Panose: 2 0 6 3 0 0 0 0 0 0 +OS2TypoAscent: 0 +OS2TypoAOffset: 1 +OS2TypoDescent: 0 +OS2TypoDOffset: 1 +OS2TypoLinegap: 0 +OS2WinAscent: 0 +OS2WinAOffset: 1 +OS2WinDescent: 0 +OS2WinDOffset: 1 +HheadAscent: 0 +HheadAOffset: 1 +HheadDescent: 0 +HheadDOffset: 1 +OS2SubXSize: 41 +OS2SubYSize: 44 +OS2SubXOff: 0 +OS2SubYOff: 30 +OS2SupXSize: 41 +OS2SupYSize: 44 +OS2SupXOff: 0 +OS2SupYOff: 0 +OS2StrikeYSize: 3 +OS2StrikeYPos: 16 +OS2Vendor: 'PfEd' +TtfTable: cvt 4 +!!3-K +EndTtf +TtfTable: maxp 32 +!!*'"!#,EO!!rW*!!!!#!!!!"!!*'"!'gN:z +EndTtf +LangName: 1033 +Encoding: UnicodeBmp +UnicodeInterp: none +NameList: Adobe Glyph List +DisplaySize: -36 +AntiAlias: 1 +FitToEm: 1 +BeginChars: 65539 20 +StartChar: .notdef +Encoding: 65536 -1 0 +Width: 27 +Flags: W +TtfInstrs: 46 +YlOhX4L,1p!:;PH"pNdEZ3(..m4n[H!rsu:Z3:@2m4tsP"p+WaZ2k",m4nYA +EndTtf +Fore +2 0 m 1,0,-1 + 2 42 l 1,1,-1 + 23 42 l 1,2,-1 + 23 0 l 1,3,-1 + 2 0 l 1,0,-1 +4 2 m 1,4,-1 + 21 2 l 1,5,-1 + 21 40 l 1,6,-1 + 4 40 l 1,7,-1 + 4 2 l 1,4,-1 +EndSplineSet +EndChar +StartChar: .null +Encoding: 65537 0 1 +Width: 0 +Flags: W +EndChar +StartChar: nonmarkingreturn +Encoding: 65538 12 2 +Width: 21 +Flags: W +EndChar +StartChar: plus +Encoding: 43 43 3 +Width: 65 +Flags: W +Fore +0 52 m 1,0,-1 + 66 52 l 1,1,-1 + 66 -13 l 1,2,-1 + 0 -13 l 1,3,-1 + 0 52 l 1,0,-1 +EndSplineSet +EndChar +StartChar: comma +Encoding: 44 44 4 +Width: 64 +Flags: W +Fore +32 49 m 0,0,1 + 39 49 39 49 45 46 c 0,2,3 + 64 38 64 38 63 18 c 0,4,5 + 62 -3 62 -3 42 -10 c 0,6,7 + 24 -17 24 -17 10 -2 c 0,8,9 + -4 12 -4 12 4 31 c 256,10,11 + 12 50 12 50 32 49 c 0,0,1 +32 46 m 256,12,13 + 23 46 23 46 15.5 40.5 c 128,-1,14 + 8 35 8 35 6 27 c 0,15,16 + 0 8 0 8 16 -3 c 0,17,18 + 32 -16 32 -16 49 -3 c 0,19,20 + 64 8 64 8 58 27 c 0,21,22 + 56 35 56 35 48.5 40.5 c 128,-1,23 + 41 46 41 46 32 46 c 256,12,13 +EndSplineSet +EndChar +StartChar: period +Encoding: 46 46 5 +Width: 64 +Flags: W +Fore +32 45 m 0,0,1 + 38 45 38 45 44 42 c 0,2,3 + 59 35 59 35 58 18 c 0,4,5 + 58 0 58 0 41 -6 c 0,6,7 + 25 -12 25 -12 13 1 c 0,8,9 + 1 13 1 13 8 29 c 256,10,11 + 15 45 15 45 32 45 c 0,0,1 +32 42 m 0,12,13 + 17 42 17 42 11 28 c 0,14,15 + 4 13 4 13 17 1 c 0,16,17 + 30 -10 30 -10 45 0 c 0,18,19 + 59 9 59 9 54 25 c 0,20,21 + 52 32 52 32 46 37 c 128,-1,22 + 40 42 40 42 32 42 c 0,12,13 +EndSplineSet +EndChar +StartChar: A +Encoding: 65 65 6 +Width: 64 +Flags: W +Fore +24 33 m 1,0,1 + 25 37 25 37 28 34 c 1,2,3 + 28 32 28 32 26 29 c 0,4,5 + 24 27 24 27 24 16 c 0,6,7 + 25 4 25 4 22 4 c 1,8,9 + 21 5 21 5 21 14 c 2,10,-1 + 22 22 l 1,11,-1 + 19 19 l 1,12,13 + 15 16 15 16 15 17 c 128,-1,14 + 15 18 15 18 19 23 c 1,15,-1 + 24 33 l 1,0,1 +34 34 m 1,16,17 + 36 36 36 36 38 33 c 0,18,19 + 39 32 39 32 39 27 c 1,20,-1 + 38 22 l 1,21,-1 + 43 23 l 1,22,-1 + 49 23 l 1,23,24 + 51 22 51 22 49.5 21 c 128,-1,25 + 48 20 48 20 44 20 c 2,26,-1 + 38 20 l 1,27,-1 + 38 15 l 1,28,-1 + 38 11 l 1,29,-1 + 42 11 l 1,30,31 + 44 12 44 12 46 11 c 128,-1,32 + 48 10 48 10 47 9 c 1,33,-1 + 44 9 l 1,34,35 + 31 7 31 7 29 8 c 256,36,37 + 27 9 27 9 31 10 c 1,38,39 + 35 10 35 10 35 15 c 1,40,-1 + 36 19 l 1,41,-1 + 32 18 l 1,42,43 + 29 18 29 18 27 18.5 c 128,-1,44 + 25 19 25 19 27 20 c 2,45,46 + 27 21 27 21 32 21 c 1,47,48 + 35 22 35 22 35 24 c 2,49,-1 + 35 30 l 1,50,-1 + 34 34 l 1,16,17 +EndSplineSet +EndChar +StartChar: C +Encoding: 67 67 7 +Width: 64 +Flags: W +Fore +34 36 m 1,0,1 + 34 38 34 38 37 36 c 0,2,3 + 38 35 38 35 37 32 c 1,4,5 + 34 29 34 29 36 29 c 1,6,-1 + 40 30 l 2,7,8 + 44 31 44 31 45.5 30 c 128,-1,9 + 47 29 47 29 46 25 c 0,10,11 + 44 14 44 14 39 15 c 1,12,13 + 38 17 38 17 39 17 c 0,14,15 + 42 17 42 17 43 24 c 1,16,-1 + 43 28 l 1,17,-1 + 40 27 l 1,18,19 + 39 27 39 27 37 26 c 1,20,-1 + 35 26 l 2,21,22 + 34 26 34 26 32 24.5 c 128,-1,23 + 30 23 30 23 31 22 c 1,24,-1 + 34 23 l 2,25,26 + 37 24 37 24 38 23 c 128,-1,27 + 39 22 39 22 38 19 c 2,28,-1 + 37 16 l 1,29,30 + 37 15 37 15 35 15 c 1,31,32 + 32 14 32 14 31.5 11.5 c 128,-1,33 + 31 9 31 9 33 8 c 0,34,35 + 36 6 36 6 41.5 7.5 c 128,-1,36 + 47 9 47 9 47 12 c 0,37,38 + 47 13 47 13 50 12 c 1,39,40 + 50 9 50 9 51 9 c 1,41,42 + 52 7 52 7 48.5 5.5 c 128,-1,43 + 45 4 45 4 40 4 c 0,44,45 + 31 4 31 4 29 9 c 128,-1,46 + 27 14 27 14 32 29 c 2,47,-1 + 34 36 l 1,0,1 +34 19 m 0,48,49 + 34 22 34 22 32 20 c 0,50,51 + 31 19 31 19 31.5 18 c 128,-1,52 + 32 17 32 17 33 17 c 128,-1,53 + 34 17 34 17 34 19 c 0,48,49 +21 30 m 1,54,55 + 21 36 21 36 23 36 c 128,-1,56 + 25 36 25 36 25 31 c 0,57,58 + 25 28 25 28 25 27.5 c 128,-1,59 + 25 27 25 27 26 28 c 1,60,61 + 27 32 27 32 29 29 c 0,62,63 + 31 27 31 27 28 26 c 1,64,65 + 25 24 25 24 25 23 c 1,66,-1 + 24 22 l 1,67,68 + 24 20 24 20 24 19 c 0,69,70 + 24 16 24 16 26 15 c 1,71,72 + 28 15 28 15 28 13 c 0,73,74 + 28 9 28 9 24 12 c 1,75,76 + 23 14 23 14 22 12 c 1,77,78 + 22 11 22 11 19.5 8.5 c 128,-1,79 + 17 6 17 6 16 6 c 1,80,-1 + 17 9 l 1,81,82 + 23 16 23 16 21 30 c 1,54,55 +16 24 m 0,83,84 + 16 27 16 27 19 24 c 0,85,86 + 23 20 23 20 19 20 c 0,87,88 + 16 20 16 20 16 24 c 0,83,84 +EndSplineSet +EndChar +StartChar: E +Encoding: 69 69 8 +Width: 64 +Flags: W +Fore +23 31 m 2,0,1 + 23 35 23 35 24 35 c 0,2,3 + 26 35 26 35 26 31 c 1,4,5 + 27 27 27 27 29 27 c 0,6,7 + 30 27 30 27 29 24 c 1,8,9 + 22 22 22 22 28 20 c 0,10,11 + 30 19 30 19 30 17 c 0,12,13 + 30 14 30 14 27 16 c 1,14,15 + 26 12 26 12 26 10 c 0,16,17 + 26 2 26 2 24 2 c 1,18,-1 + 24 4 l 1,19,20 + 23 7 23 7 23 10 c 2,21,-1 + 24 18 l 1,22,-1 + 22 15 l 1,23,24 + 14 10 14 10 14 11 c 1,25,-1 + 17 14 l 2,26,27 + 18 15 18 15 19 17 c 128,-1,28 + 20 19 20 19 21 20 c 0,29,30 + 23 23 23 23 20 23 c 0,31,32 + 10 23 10 23 20 25 c 2,33,-1 + 24 26 l 1,34,-1 + 23 31 l 2,0,1 +36 29 m 1,35,-1 + 43 29 l 1,36,-1 + 46 30 l 1,37,-1 + 46 20 l 2,38,39 + 46 17 46 17 46 13 c 1,40,-1 + 47 9 l 1,41,42 + 47 6 47 6 46 5 c 1,43,44 + 44 4 44 4 43 5 c 1,45,46 + 42 7 42 7 39 7 c 128,-1,47 + 36 7 36 7 35 6 c 1,48,49 + 34 4 34 4 33.5 6 c 128,-1,50 + 33 8 33 8 33 18 c 2,51,-1 + 33 28 l 1,52,-1 + 36 29 l 1,35,-1 +43 25 m 0,53,54 + 43 28 43 28 39 27.5 c 128,-1,55 + 35 27 35 27 35 24 c 0,56,57 + 35 22 35 22 38 22 c 2,58,-1 + 40 22 l 1,59,-1 + 42 23 l 1,60,61 + 43 23 43 23 43 25 c 0,53,54 +43 19 m 2,62,-1 + 43 20 l 1,63,-1 + 39 20 l 2,64,65 + 35 20 35 20 35 18 c 0,66,67 + 35 14 35 14 41 16 c 1,68,69 + 43 18 43 18 43 19 c 2,62,-1 +43 12 m 128,-1,71 + 43 14 43 14 39 14 c 128,-1,72 + 35 14 35 14 35 11 c 0,73,74 + 35 9 35 9 37 9 c 1,75,76 + 38 10 38 10 41 10 c 0,77,70 + 43 10 43 10 43 12 c 128,-1,71 +EndSplineSet +EndChar +StartChar: G +Encoding: 71 71 9 +Width: 64 +Flags: W +Fore +36 32 m 0,0,1 + 36 37 36 37 38 37 c 128,-1,2 + 40 37 40 37 40 32 c 128,-1,3 + 40 27 40 27 43 27 c 2,4,-1 + 47 27 l 1,5,6 + 48 26 48 26 47.5 20 c 128,-1,7 + 47 14 47 14 46 13 c 1,8,9 + 44 12 44 12 42 14 c 128,-1,10 + 40 16 40 16 42 16 c 128,-1,11 + 44 16 44 16 44 22 c 0,12,13 + 44 25 44 25 42 25 c 2,14,-1 + 39 25 l 1,15,-1 + 39 14 l 2,16,17 + 39 1 39 1 37 1 c 0,18,19 + 36 1 36 1 36 12 c 2,20,-1 + 35 23 l 1,21,22 + 34 23 34 23 34 20 c 0,23,24 + 34 16 34 16 33 14 c 1,25,26 + 31 12 31 12 31 15 c 0,27,28 + 31 17 31 17 31 20 c 0,29,30 + 31 26 31 26 34 26 c 0,31,32 + 36 26 36 26 36 32 c 0,0,1 +22 35 m 0,33,34 + 22 37 22 37 25 35 c 0,35,36 + 26 34 26 34 24 31 c 0,37,38 + 22 29 22 29 24 29 c 1,39,40 + 27 30 27 30 28 28.5 c 128,-1,41 + 29 27 29 27 28 24 c 128,-1,42 + 27 21 27 21 23 20 c 2,43,-1 + 20 19 l 1,44,45 + 20 18 20 18 24 18 c 0,46,47 + 29 18 29 18 29 16 c 1,48,-1 + 28 14 l 1,49,-1 + 28 12 l 2,50,51 + 28 10 28 10 24 9 c 2,52,-1 + 20 8 l 1,53,54 + 20 6 20 6 18 8 c 0,55,56 + 17 9 17 9 17 19 c 128,-1,57 + 17 29 17 29 18 29 c 0,58,59 + 22 29 22 29 22 35 c 0,33,34 +25 26 m 0,60,61 + 24 27 24 27 22.5 26.5 c 128,-1,62 + 21 26 21 26 21 24 c 128,-1,63 + 21 22 21 22 22 22 c 1,64,65 + 27 24 27 24 25 26 c 0,60,61 +25 14 m 1,66,67 + 27 16 27 16 23 16 c 0,68,69 + 20 16 20 16 20 13 c 0,70,71 + 20 12 20 12 22.5 12 c 128,-1,72 + 25 12 25 12 25 14 c 1,66,67 +EndSplineSet +EndChar +StartChar: H +Encoding: 72 72 10 +Width: 64 +Flags: W +Fore +23 32 m 128,-1,1 + 23 34 23 34 24 34.5 c 128,-1,2 + 25 35 25 35 26 33 c 1,3,4 + 28 32 28 32 25 29 c 1,5,6 + 23 25 23 25 23 23 c 2,7,-1 + 23 12 l 2,8,9 + 23 4 23 4 21 4 c 0,10,11 + 20 4 20 4 20 13 c 2,12,-1 + 21 22 l 1,13,-1 + 18 20 l 2,14,15 + 15 17 15 17 14.5 17 c 128,-1,16 + 14 17 14 17 17 20 c 1,17,0 + 23 30 23 30 23 32 c 128,-1,1 +33 33 m 2,18,19 + 37 34 37 34 40.5 34.5 c 128,-1,20 + 44 35 44 35 44 34 c 0,21,22 + 44 32 44 32 41 32 c 1,23,-1 + 39 30 l 1,24,25 + 39 29 39 29 41 29 c 1,26,-1 + 43 28 l 1,27,28 + 43 27 43 27 41 27 c 0,29,30 + 38 27 38 27 38 25 c 0,31,32 + 38 24 38 24 41 24 c 1,33,-1 + 43 23 l 1,34,35 + 43 22 43 22 41 22 c 0,36,37 + 38 22 38 22 38 20 c 0,38,39 + 38 19 38 19 43 19 c 0,40,41 + 44 19 44 19 46 18 c 1,42,-1 + 48 18 l 1,43,44 + 49 16 49 16 47.5 10 c 128,-1,45 + 46 4 46 4 44 2 c 1,46,47 + 42 1 42 1 40 3 c 1,48,49 + 37 8 37 8 40 6 c 0,50,51 + 42 5 42 5 43 7 c 128,-1,52 + 44 9 44 9 44 13 c 0,53,54 + 44 18 44 18 34 16 c 2,55,-1 + 29 15 l 2,56,57 + 28 15 28 15 28 24 c 2,58,-1 + 28 32 l 1,59,-1 + 33 33 l 2,18,19 +35 29 m 0,60,61 + 35 33 35 33 33 31 c 0,62,63 + 32 30 32 30 32 29 c 256,64,65 + 32 28 32 28 34 28 c 0,66,67 + 35 28 35 28 35 29 c 0,60,61 +35 24 m 0,68,69 + 35 26 35 26 34 26 c 0,70,71 + 32 26 32 26 32 24 c 0,72,73 + 32 23 32 23 33.5 23 c 128,-1,74 + 35 23 35 23 35 24 c 0,68,69 +35 19 m 0,75,76 + 35 21 35 21 33 21 c 0,77,78 + 30 21 30 21 30 19 c 0,79,80 + 30 18 30 18 33 18 c 0,81,82 + 35 18 35 18 35 19 c 0,75,76 +37 15 m 0,83,84 + 37 16 37 16 38.5 15.5 c 128,-1,85 + 40 15 40 15 41 14 c 1,86,87 + 43 13 43 13 41 11 c 1,88,89 + 37 11 37 11 37 15 c 0,83,84 +26 11 m 0,90,91 + 27 14 27 14 28 10 c 1,92,93 + 28 4 28 4 25 7 c 1,94,95 + 25 9 25 9 26 11 c 0,90,91 +34 13 m 0,96,97 + 34 14 34 14 35 14 c 1,98,99 + 37 13 37 13 37 11 c 128,-1,100 + 37 9 37 9 36 9 c 0,101,102 + 34 9 34 9 34 13 c 0,96,97 +30 11 m 2,103,104 + 30 13 30 13 31 13 c 0,105,106 + 34 13 34 13 34 9 c 0,107,108 + 34 8 34 8 32 8 c 128,-1,109 + 30 8 30 8 30 9 c 2,110,-1 + 30 11 l 2,103,104 +EndSplineSet +EndChar +StartChar: R +Encoding: 82 82 11 +Width: 64 +Flags: W +Fore +34 37 m 1,0,1 + 34 40 34 40 35 40 c 0,2,3 + 38 40 38 40 38 36 c 1,4,5 + 37 35 37 35 37.5 35 c 128,-1,6 + 38 35 38 35 41 34 c 1,7,8 + 44 34 44 34 44 33 c 128,-1,9 + 44 32 44 32 41 32 c 1,10,-1 + 38 31 l 1,11,12 + 38 30 38 30 42 30 c 0,13,14 + 43 30 43 30 45 30 c 1,15,-1 + 47 29 l 1,16,-1 + 46 26 l 1,17,18 + 46 22 l 1,19,20 + 44 17 44 17 41 17 c 0,21,22 + 37 17 37 17 37 15 c 0,23,24 + 37 14 37 14 44 14 c 1,25,26 + 50 15 50 15 51 13 c 1,27,28 + 52 12 52 12 50 12 c 0,29,30 + 44 12 44 12 42 11 c 1,31,-1 + 37 11 l 1,32,-1 + 37 6 l 1,33,-1 + 35 -1 l 1,34,35 + 34 0 34 0 34 4 c 2,36,-1 + 34 10 l 1,37,-1 + 28 10 l 2,38,39 + 23 10 23 10 22 9.5 c 128,-1,40 + 21 9 21 9 21 5 c 0,41,42 + 21 3 21 3 20 3 c 128,-1,43 + 19 3 19 3 18 4 c 1,44,-1 + 18 14 l 1,45,-1 + 19 23 l 1,46,-1 + 16 20 l 2,47,48 + 13 17 13 17 12.5 17.5 c 128,-1,49 + 12 18 12 18 15 22 c 0,50,51 + 18 25 18 25 20 31 c 0,52,53 + 22 35 22 35 24 35 c 1,54,55 + 26 34 26 34 23 30 c 0,56,57 + 21 27 21 27 21 20 c 1,58,-1 + 22 13 l 1,59,-1 + 26 13 l 1,60,-1 + 34 15 l 1,61,62 + 34 16 34 16 31 16 c 0,63,64 + 29 16 29 16 28 20 c 1,65,66 + 28 26 28 26 26 26 c 1,67,68 + 26 28 26 28 28 28 c 2,69,-1 + 33 28 l 1,70,71 + 37 30 37 30 32 30 c 1,72,-1 + 28 31 l 1,73,74 + 28 34 28 34 33 34 c 0,75,76 + 35 34 35 34 34 37 c 1,0,1 +43 26 m 1,77,78 + 43 28 43 28 40 28 c 128,-1,79 + 37 28 37 28 37 26 c 0,80,81 + 37 25 37 25 40 25 c 1,82,-1 + 43 26 l 1,77,78 +34 25 m 0,83,84 + 34 28 34 28 31 26 c 0,85,86 + 27 24 27 24 32 24 c 0,87,88 + 34 24 34 24 34 25 c 0,83,84 +34 21 m 1,89,90 + 34 22 34 22 32 22 c 128,-1,91 + 30 22 30 22 30 21 c 128,-1,92 + 30 20 30 20 32 20 c 1,93,-1 + 34 21 l 1,89,90 +42 22 m 128,-1,95 + 42 23 42 23 40 23 c 1,96,-1 + 38 22 l 1,97,98 + 38 21 38 21 40 21 c 128,-1,94 + 42 21 42 21 42 22 c 128,-1,95 +EndSplineSet +EndChar +StartChar: S +Encoding: 83 83 12 +Width: 64 +Flags: W +Fore +31 35 m 0,0,1 + 37 38 37 38 39 37 c 0,2,3 + 44 35 44 35 34 32 c 1,4,5 + 25 31 25 31 28 28 c 1,6,7 + 28 26 28 26 35 28 c 0,8,9 + 44 30 44 30 44 28 c 0,10,11 + 44 27 44 27 42 27 c 128,-1,12 + 40 27 40 27 40 25 c 0,13,14 + 40 24 40 24 39.5 23 c 128,-1,15 + 39 22 39 22 39 21 c 2,16,17 + 38 19 38 19 39 18.5 c 128,-1,18 + 40 18 40 18 44 18 c 0,19,20 + 50 18 50 18 50 17 c 128,-1,21 + 50 16 50 16 40 16 c 0,22,23 + 37 16 37 16 30.5 15.5 c 128,-1,24 + 24 15 24 15 23 15 c 0,25,26 + 17 14 17 14 16 15 c 0,27,28 + 14 17 14 17 20 17 c 128,-1,29 + 26 17 26 17 26 18 c 0,30,31 + 26 26 26 26 23 32 c 1,32,33 + 23 34 23 34 25 33 c 1,34,35 + 27 33 27 33 31 35 c 0,0,1 +35 22 m 2,36,-1 + 35 24 l 1,37,-1 + 35 25 l 1,38,-1 + 31 25 l 1,39,40 + 27 24 27 24 28 20 c 1,41,42 + 29 18 29 18 32 18 c 128,-1,43 + 35 18 35 18 35 22 c 2,36,-1 +23 9 m 0,44,45 + 29 15 29 15 30 12 c 1,46,47 + 31 11 31 11 29.5 9.5 c 128,-1,48 + 28 8 28 8 23 6 c 0,49,50 + 16 2 16 2 23 9 c 0,44,45 +38 8 m 1,51,52 + 32 16 32 16 41 11 c 0,53,54 + 45 8 45 8 45 6 c 0,55,56 + 45 2 45 2 38 8 c 1,51,52 +EndSplineSet +EndChar +StartChar: a +Encoding: 97 97 13 +Width: 64 +Flags: W +Fore +29 28 m 1,0,1 + 29 35 29 35 31 35 c 0,2,3 + 35 35 35 35 34 30 c 1,4,-1 + 34 24 l 2,5,6 + 34 21 34 21 40 22 c 1,7,-1 + 49 22 l 1,8,9 + 51 20 51 20 49.5 19.5 c 128,-1,10 + 48 19 48 19 42 19 c 2,11,-1 + 34 19 l 1,12,-1 + 34 14 l 1,13,-1 + 34 9 l 1,14,-1 + 37 9 l 1,15,16 + 40 10 40 10 43 9 c 128,-1,17 + 46 8 46 8 45 7 c 128,-1,18 + 44 6 44 6 33 6 c 0,19,20 + 21 6 21 6 21 7 c 128,-1,21 + 21 8 21 8 25 8 c 2,22,-1 + 30 8 l 1,23,-1 + 30 13 l 1,24,-1 + 30 18 l 1,25,-1 + 26 17 l 1,26,27 + 21 17 21 17 20 16 c 1,28,29 + 18 16 18 16 16 17 c 128,-1,30 + 14 18 14 18 15 19 c 1,31,32 + 15 20 15 20 23 20 c 1,33,-1 + 30 21 l 1,34,-1 + 29 28 l 1,0,1 +EndSplineSet +EndChar +StartChar: c +Encoding: 99 99 14 +Width: 64 +Flags: W +Fore +33 36 m 2,0,1 + 34 38 34 38 35 36 c 1,2,3 + 36 35 36 35 36 32 c 1,4,-1 + 34 29 l 1,5,-1 + 39 30 l 2,6,7 + 44 31 44 31 45 29.5 c 128,-1,8 + 46 28 46 28 45 22 c 128,-1,9 + 44 16 44 16 42 14 c 128,-1,10 + 40 12 40 12 39 16 c 1,11,12 + 38 18 38 18 38 17 c 1,13,14 + 37 15 37 15 35 15 c 0,15,16 + 32 15 32 15 33 12 c 1,17,-1 + 33 8 l 1,18,-1 + 39 8 l 2,19,20 + 44 8 44 8 47 13 c 1,21,22 + 47 15 47 15 48 14 c 128,-1,23 + 49 13 49 13 50 10 c 1,24,25 + 50 7 50 7 47 6 c 1,26,27 + 38 0 38 0 32 6 c 0,28,29 + 30 8 30 8 30 14 c 0,30,31 + 30 22 30 22 27 22 c 1,32,33 + 25 20 25 20 30 29 c 1,34,35 + 30 30 30 30 32 33 c 1,36,-1 + 33 36 l 2,0,1 +42 25 m 2,37,38 + 42 28 42 28 40 28 c 0,39,40 + 33 27 33 27 31 25 c 0,41,42 + 30 24 30 24 30.5 23.5 c 128,-1,43 + 31 23 31 23 34 23 c 0,44,45 + 39 23 39 23 39 21 c 128,-1,46 + 39 19 39 19 40 18 c 1,47,-1 + 42 24 l 1,48,-1 + 42 25 l 2,37,38 +34 19 m 1,49,-1 + 34 21 l 1,50,51 + 32 21 32 21 32 19 c 0,52,53 + 32 18 32 18 34 18 c 1,54,-1 + 34 19 l 1,49,-1 +21 29 m 0,55,56 + 29 31 29 31 29 29 c 128,-1,57 + 29 27 29 27 26 27 c 0,58,59 + 24 27 24 27 22 23 c 2,60,-1 + 21 20 l 1,61,-1 + 24 20 l 1,62,63 + 27 21 27 21 27.5 20 c 128,-1,64 + 28 19 28 19 27 15 c 128,-1,65 + 26 11 26 11 24 11 c 0,66,67 + 21 11 21 11 20 10 c 1,68,-1 + 18 13 l 1,69,70 + 18 16 18 16 15 14 c 0,71,72 + 13 12 13 12 12.5 13 c 128,-1,73 + 12 14 12 14 14 17 c 0,74,75 + 20 24 20 24 18 26 c 128,-1,76 + 16 28 16 28 21 29 c 0,55,56 +24 16 m 1,77,78 + 24 18 24 18 23 18 c 0,79,80 + 21 18 21 18 21 15 c 128,-1,81 + 21 12 21 12 24 16 c 1,77,78 +EndSplineSet +EndChar +StartChar: e +Encoding: 101 101 15 +Width: 64 +Flags: W +Fore +27 34 m 1,0,1 + 30 40 30 40 32 36 c 1,2,3 + 32 35 32 35 35 35 c 1,4,5 + 37 36 37 36 37.5 34.5 c 128,-1,6 + 38 33 38 33 36 32 c 1,7,-1 + 34 30 l 1,8,-1 + 36 30 l 1,9,-1 + 41 30 l 1,10,-1 + 43 29 l 1,11,-1 + 41 25 l 2,12,13 + 40 22 40 22 36 22 c 0,14,15 + 30 22 30 22 33 19 c 1,16,17 + 35 15 35 15 38 20 c 1,18,19 + 41 22 41 22 42 21 c 0,20,21 + 45 19 45 19 40 18 c 1,22,23 + 38 16 38 16 38 15 c 128,-1,24 + 38 14 38 14 43 11 c 128,-1,25 + 48 8 48 8 50 8 c 1,26,27 + 51 7 51 7 50 6.5 c 128,-1,28 + 49 6 49 6 47 6 c 1,29,30 + 46 5 46 5 40 8 c 1,31,-1 + 36 12 l 1,32,-1 + 36 10 l 2,33,34 + 36 2 36 2 33 1 c 1,35,36 + 32 1 32 1 30 3 c 128,-1,37 + 28 5 28 5 30 6 c 1,38,39 + 32 6 32 6 32 8 c 1,40,41 + 33 10 33 10 31 9 c 1,42,43 + 30 9 30 9 27 8 c 1,44,45 + 22 5 22 5 20 5 c 128,-1,46 + 18 5 18 5 23 8 c 1,47,48 + 24 8 24 8 26.5 10 c 128,-1,49 + 29 12 29 12 30 13 c 2,50,-1 + 32 16 l 1,51,-1 + 28 14 l 1,52,-1 + 19 10 l 1,53,-1 + 20 11 l 2,54,55 + 21 12 21 12 23 13 c 0,56,57 + 27 16 27 16 28.5 17 c 128,-1,58 + 30 18 30 18 29 18 c 1,59,60 + 29 19 29 19 25 17 c 2,61,-1 + 20 15 l 1,62,-1 + 20 16 l 1,63,64 + 21 17 21 17 25 19 c 1,65,66 + 28 22 28 22 26 21 c 1,67,68 + 24 21 24 21 23 24 c 0,69,70 + 21 32 21 32 24 32 c 0,71,72 + 25 32 25 32 27 34 c 1,0,1 +30 30 m 2,73,74 + 34 32 34 32 30 32 c 0,75,76 + 28 32 28 32 26 30 c 1,77,78 + 24 29 24 29 27 29 c 128,-1,79 + 30 29 30 29 30 30 c 2,73,74 +37 26 m 128,-1,81 + 37 27 37 27 35.5 27.5 c 128,-1,82 + 34 28 34 28 33 27 c 0,83,84 + 31 25 31 25 35 25 c 0,85,80 + 37 25 37 25 37 26 c 128,-1,81 +30 25 m 0,86,87 + 30 27 30 27 28 27 c 128,-1,88 + 26 27 26 27 26 25 c 0,89,90 + 26 24 26 24 28 24 c 128,-1,91 + 30 24 30 24 30 25 c 0,86,87 +EndSplineSet +EndChar +StartChar: g +Encoding: 103 103 16 +Width: 64 +Flags: W +Fore +24 31 m 2,0,1 + 24 35 24 35 25 35 c 0,2,3 + 28 35 28 35 28 25 c 1,4,-1 + 27 18 l 1,5,-1 + 32 21 l 2,6,7 + 37 24 37 24 37 25 c 1,8,-1 + 35 24 l 1,9,10 + 31 20 31 20 29 23 c 1,11,12 + 29 25 29 25 30 25 c 0,13,14 + 35 25 35 25 35 27 c 1,15,-1 + 32 27 l 1,16,-1 + 29 26 l 1,17,-1 + 33 31 l 1,18,-1 + 36 35 l 1,19,-1 + 38 35 l 2,20,21 + 40 35 40 35 40 33 c 1,22,-1 + 42 33 l 1,23,24 + 44 34 44 34 46 32 c 1,25,26 + 48 32 48 32 44 27 c 2,27,-1 + 41 23 l 1,28,29 + 42 23 42 23 42 21 c 0,30,31 + 42 20 42 20 46 20 c 1,32,33 + 49 19 49 19 49 18 c 128,-1,34 + 49 17 49 17 46 17 c 2,35,-1 + 42 17 l 1,36,-1 + 42 10 l 2,37,38 + 42 4 42 4 41 2.5 c 128,-1,39 + 40 1 40 1 37 4 c 2,40,-1 + 34 6 l 1,41,-1 + 37 7 l 1,42,43 + 39 7 39 7 39 12 c 1,44,-1 + 40 16 l 1,45,-1 + 34 16 l 1,46,-1 + 28 16 l 1,47,-1 + 28 10 l 2,48,49 + 28 6 28 6 27 4 c 128,-1,50 + 26 2 26 2 24 4 c 1,51,-1 + 24 11 l 1,52,53 + 25 15 25 15 24 16 c 1,54,-1 + 22 13 l 1,55,56 + 22 11 22 11 19 8 c 128,-1,57 + 16 5 16 5 15 5 c 0,58,59 + 13 5 13 5 16 8 c 1,60,61 + 19 14 19 14 17 15 c 128,-1,62 + 15 16 15 16 16 17 c 128,-1,63 + 17 18 17 18 20 18 c 0,64,65 + 24 18 24 18 24 21 c 1,66,67 + 25 22 25 22 24.5 22.5 c 128,-1,68 + 24 23 24 23 23 22 c 1,69,70 + 19 21 19 21 18.5 21.5 c 128,-1,71 + 18 22 18 22 18 26 c 2,72,-1 + 19 31 l 1,73,74 + 21 31 21 31 21 28 c 0,75,76 + 21 24 21 24 24 26 c 1,77,-1 + 24 31 l 2,0,1 +40 28 m 1,78,79 + 42 30 42 30 39 30 c 1,80,81 + 37 29 37 29 38 28 c 0,82,83 + 40 26 40 26 40 28 c 1,78,79 +38 20 m 0,84,85 + 38 22 38 22 36 20 c 1,86,87 + 34 19 34 19 36 19 c 128,-1,88 + 38 19 38 19 38 20 c 0,84,85 +30 14 m 0,89,90 + 30 16 30 16 35 14 c 1,91,92 + 36 12 36 12 35.5 10.5 c 128,-1,93 + 35 9 35 9 34 9 c 1,94,-1 + 32 11 l 2,95,96 + 30 13 30 13 30 14 c 0,89,90 +EndSplineSet +EndChar +StartChar: h +Encoding: 104 104 17 +Width: 64 +Flags: W +Fore +32 34 m 1,0,1 + 41 36 41 36 42 34 c 1,2,-1 + 37 32 l 2,3,4 + 31 30 31 30 37 30 c 0,5,6 + 41 30 41 30 41 28.5 c 128,-1,7 + 41 27 41 27 36 26 c 1,8,-1 + 37 26 l 1,9,-1 + 41 24 l 1,10,11 + 40 23 40 23 38 23 c 1,12,-1 + 34 22 l 1,13,14 + 34 21 34 21 40 21 c 128,-1,15 + 46 21 46 21 47 19.5 c 128,-1,16 + 48 18 48 18 47 13 c 0,17,18 + 45 3 45 3 42 1 c 1,19,20 + 41 1 41 1 38 4 c 2,21,-1 + 36 7 l 1,22,-1 + 38 7 l 1,23,24 + 40 6 40 6 41.5 8 c 128,-1,25 + 43 10 43 10 43 14 c 2,26,-1 + 43 18 l 1,27,-1 + 35 17 l 2,28,29 + 26 17 26 17 25 16 c 1,30,31 + 23 16 23 16 23 25 c 2,32,-1 + 23 34 l 1,33,-1 + 26 34 l 1,34,-1 + 32 34 l 1,0,1 +30 30 m 0,35,36 + 30 32 30 32 29 32 c 0,37,38 + 27 32 27 32 27 30 c 0,39,40 + 27 29 27 29 29 29 c 0,41,42 + 30 29 30 29 30 30 c 0,35,36 +30 25 m 1,43,-1 + 29 25 l 1,44,-1 + 27 25 l 1,45,-1 + 30 25 l 1,43,-1 +30 21 m 128,-1,47 + 30 22 30 22 28 22 c 1,48,-1 + 26 21 l 1,49,50 + 26 20 26 20 28 20 c 128,-1,46 + 30 20 30 20 30 21 c 128,-1,47 +18 12 m 1,51,52 + 19 17 19 17 21 11 c 1,53,54 + 21 9 21 9 19.5 7.5 c 128,-1,55 + 18 6 18 6 17 7 c 1,56,57 + 17 10 17 10 18 12 c 1,51,52 +35 15 m 1,58,-1 + 37 15 l 1,59,-1 + 40 14 l 1,60,61 + 42 10 42 10 39 10 c 1,62,-1 + 35 15 l 1,58,-1 +30 13 m 1,63,64 + 28 15 28 15 31 15 c 1,65,66 + 36 12 36 12 34 10 c 0,67,68 + 33 9 33 9 31.5 10.5 c 128,-1,69 + 30 12 30 12 30 13 c 1,63,64 +24 12 m 0,70,71 + 23 14 23 14 25 14 c 128,-1,72 + 27 14 27 14 28 12.5 c 128,-1,73 + 29 11 29 11 28 10 c 1,74,75 + 26 6 26 6 24 12 c 0,70,71 +EndSplineSet +EndChar +StartChar: r +Encoding: 114 114 18 +Width: 64 +Flags: W +Fore +30 36 m 1,0,1 + 29 38 29 38 32 38 c 0,2,3 + 34 38 34 38 34 36 c 128,-1,4 + 34 34 34 34 37 34 c 0,5,6 + 39 34 39 34 38 31 c 1,7,8 + 34 31 34 31 34 29 c 1,9,-1 + 37 29 l 1,10,11 + 41 30 41 30 42.5 28 c 128,-1,12 + 44 26 44 26 42 21 c 128,-1,13 + 40 16 40 16 37 16 c 128,-1,14 + 34 16 34 16 34 15 c 128,-1,15 + 34 14 34 14 41 15 c 1,16,17 + 49 15 49 15 50 14 c 128,-1,18 + 51 13 51 13 49.5 12.5 c 128,-1,19 + 48 12 48 12 42 11 c 1,20,-1 + 34 11 l 1,21,-1 + 34 7 l 2,22,23 + 34 0 34 0 31 0 c 0,24,25 + 30 0 30 0 30 5 c 128,-1,26 + 30 10 30 10 29.5 10.5 c 128,-1,27 + 29 11 29 11 23 10 c 128,-1,28 + 17 9 17 9 16 10 c 0,29,30 + 13 13 13 13 18 13 c 0,31,32 + 30 13 30 13 30 15 c 0,33,34 + 30 16 30 16 27 16 c 1,35,36 + 25 15 25 15 24.5 15.5 c 128,-1,37 + 24 16 24 16 24 19 c 0,38,39 + 24 20 24 20 23 22 c 128,-1,40 + 22 24 22 24 22 25 c 2,41,42 + 21 27 21 27 21.5 27.5 c 128,-1,43 + 22 28 22 28 26 28 c 128,-1,44 + 30 28 30 28 30 29 c 128,-1,45 + 30 30 30 30 27 30 c 0,46,47 + 25 30 25 30 26 33 c 1,48,49 + 30 33 30 33 30 36 c 1,0,1 +38 26 m 2,50,51 + 38 27 38 27 36 27 c 128,-1,52 + 34 27 34 27 34 25 c 0,53,54 + 34 24 34 24 35 24 c 2,55,-1 + 36 24 l 1,56,-1 + 38 25 l 1,57,-1 + 38 26 l 2,50,51 +30 25 m 0,58,59 + 30 26 30 26 29 26 c 128,-1,60 + 28 26 28 26 27 25 c 128,-1,61 + 26 24 26 24 26 23 c 1,62,63 + 30 21 30 21 30 25 c 0,58,59 +38 20 m 128,-1,65 + 38 22 38 22 36 22 c 128,-1,66 + 34 22 34 22 34 20 c 128,-1,67 + 34 18 34 18 36 18 c 128,-1,64 + 38 18 38 18 38 20 c 128,-1,65 +30 20 m 2,68,69 + 30 21 30 21 29 21 c 0,70,71 + 27 21 27 21 27 19 c 0,72,73 + 27 18 27 18 28 18 c 1,74,-1 + 30 19 l 1,75,-1 + 30 20 l 2,68,69 +EndSplineSet +EndChar +StartChar: s +Encoding: 115 115 19 +Width: 64 +Flags: W +Fore +30 36 m 1,0,1 + 29 38 29 38 30 38 c 1,2,3 + 32 39 32 39 35 36 c 0,4,5 + 37 34 37 34 40 35 c 128,-1,6 + 43 36 43 36 44.5 34.5 c 128,-1,7 + 46 33 46 33 44 32 c 1,8,-1 + 41 32 l 2,9,10 + 39 32 39 32 41 30 c 1,11,12 + 42 30 42 30 41 27 c 1,13,14 + 41 26 41 26 42 26 c 0,15,16 + 44 26 44 26 44.5 24 c 128,-1,17 + 45 22 45 22 44 21 c 1,18,-1 + 41 22 l 1,19,20 + 40 24 40 24 38 23 c 128,-1,21 + 36 22 36 22 36 20 c 2,22,23 + 35 19 35 19 36 18.5 c 128,-1,24 + 37 18 37 18 41 19 c 1,25,26 + 50 19 50 19 50 17 c 0,27,28 + 50 16 50 16 43 16 c 0,29,30 + 37 16 37 16 35.5 14.5 c 128,-1,31 + 34 13 34 13 34 7 c 2,32,-1 + 34 2 l 1,33,34 + 33 -1 33 -1 32.5 1 c 128,-1,35 + 32 3 32 3 32 8 c 2,36,-1 + 32 15 l 1,37,-1 + 25 15 l 1,38,39 + 21 14 21 14 17 14 c 1,40,41 + 15 15 15 15 16 16 c 128,-1,42 + 17 17 17 17 19 17 c 0,43,44 + 32 17 32 17 32 19 c 128,-1,45 + 32 21 32 21 30 21 c 128,-1,46 + 28 21 28 21 28 22 c 1,47,48 + 27 23 27 23 24 22 c 1,49,50 + 22 19 22 19 21.5 20 c 128,-1,51 + 21 21 21 21 23 24 c 0,52,53 + 27 30 27 30 24 30 c 2,54,-1 + 23 30 l 1,55,56 + 22 31 22 31 21 31 c 1,57,58 + 21 34 21 34 28 34 c 0,59,60 + 32 34 32 34 30 36 c 1,0,1 +37 29 m 2,61,-1 + 37 31 l 1,62,63 + 34 31 34 31 32 30 c 1,64,-1 + 28 30 l 1,65,66 + 31 30 31 30 29 28 c 1,67,68 + 29 23 29 23 33 23 c 128,-1,69 + 37 23 37 23 37 29 c 2,61,-1 +EndSplineSet +EndChar +EndChars +EndSplineFont diff --git a/data/themes/pieces/XiangQiTTF/XiangQi.ttf b/data/themes/pieces/XiangQiTTF/XiangQi.ttf new file mode 100644 index 0000000000000000000000000000000000000000..346fd58acf45f477744a742fc7b62300e55fa6eb GIT binary patch literal 5036 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 literal 0 HcwPel00001 diff --git a/data/themes/pieces/XiangQiTTF/theme.desktop b/data/themes/pieces/XiangQiTTF/theme.desktop new file mode 100644 index 0000000..c774a40 --- /dev/null +++ b/data/themes/pieces/XiangQiTTF/theme.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=XiangQi +Type=Application +Comment=XiangQi TTF theme,| created with potrace +X-Tagua-ThemeType=Pieces +X-Tagua-Variants=XiangQi[default],Chess + diff --git a/data/themes/pieces/XiangQiTTF/theme.lua b/data/themes/pieces/XiangQiTTF/theme.lua new file mode 100644 index 0000000..e0f46bb --- /dev/null +++ b/data/themes/pieces/XiangQiTTF/theme.lua @@ -0,0 +1,59 @@ +import("piece_theme.lua") +shadow=5.0 +shadow_color="#404050" +shadow_offset_x=6 +shadow_offset_y=4 +shadow_grow=5 + +white_col = "#d00000" +black_col = "#000070" +white_col2 = "#a00000" +black_col2 = "#000000" + +function fromChar(char, white) + return function(size) + local i = Image(size,size) + i:clear() + local g = RadialGradient(Point(size*0.5,size*0.5), size*0.5, Point(size*0.3,size*0.3)) + g[0] = "#ffeda2" + g[1] = "#c0a870" + i:draw_glyph(Rect(0,0,size,size), "XiangQi.ttf", "0x2c", "black", g, 0, true) + i:draw_glyph(Rect(0,0,size,size), "XiangQi.ttf", "0x2e", + white and white_col2 or black_col2, + "#fff3c8", 5, false) + i:draw_glyph(Rect(0,0,size,size), "XiangQi.ttf", char, + white and white_col or black_col, + "#fff3c8", 4, false) + return i + end +end + +theme.black_advisor = addShadow(fromChar("0x61", false)) +theme.black_cannon = addShadow(fromChar("0x63", false)) +theme.black_elephant = addShadow(fromChar("0x65", false)) +theme.black_general = addShadow(fromChar("0x67", false)) +theme.black_horse = addShadow(fromChar("0x68", false)) +theme.black_chariot = addShadow(fromChar("0x72", false)) +theme.black_soldier = addShadow(fromChar("0x73", false)) +theme.red_advisor = addShadow(fromChar("0x41", true)) +theme.red_cannon = addShadow(fromChar("0x43", true)) +theme.red_elephant = addShadow(fromChar("0x45", true)) +theme.red_general = addShadow(fromChar("0x47", true)) +theme.red_horse = addShadow(fromChar("0x48", true)) +theme.red_chariot = addShadow(fromChar("0x52", true)) +theme.red_soldier = addShadow(fromChar("0x53", true)) + +-- To be able to adapt this theme to chess too +theme.black_bishop = theme.black_advisor +theme.black_king = theme.black_general +theme.black_knight = theme.black_horse +theme.black_pawn = theme.black_soldier +theme.black_queen = theme.black_elephant +theme.black_rook = theme.black_chariot +theme.white_bishop = theme.red_advisor +theme.white_king = theme.red_general +theme.white_knight = theme.red_horse +theme.white_pawn = theme.red_soldier +theme.white_queen = theme.red_elephant +theme.white_rook = theme.red_chariot + diff --git a/data/themes/pieces/YahooTTF/Yahoo.sfd b/data/themes/pieces/YahooTTF/Yahoo.sfd new file mode 100644 index 0000000..8885b39 --- /dev/null +++ b/data/themes/pieces/YahooTTF/Yahoo.sfd @@ -0,0 +1,1542 @@ +SplineFontDB: 1.0 +FontName: Yahoo +FullName: Yahoo +FamilyName: Yahoo +Weight: Medium +Copyright: Created by Io with FontForge 1.0 (http://fontforge.sf.net) +Version: 001.000 +ItalicAngle: 0 +UnderlinePosition: -100 +UnderlineWidth: 50 +Ascent: 819 +Descent: 205 +Order2: 1 +XUID: [1021 645 1811818106 9845185] +FSType: 0 +OS2Version: 0 +OS2_WeightWidthSlopeOnly: 0 +OS2_UseTypoMetrics: 0 +CreationTime: 1156082481 +ModificationTime: 1160236016 +PfmFamily: 17 +TTFWeight: 500 +TTFWidth: 5 +LineGap: 92 +VLineGap: 0 +Panose: 2 0 6 9 0 0 0 0 0 0 +OS2TypoAscent: 0 +OS2TypoAOffset: 1 +OS2TypoDescent: 0 +OS2TypoDOffset: 1 +OS2TypoLinegap: 0 +OS2WinAscent: 0 +OS2WinAOffset: 1 +OS2WinDescent: 0 +OS2WinDOffset: 1 +HheadAscent: 0 +HheadAOffset: 1 +HheadDescent: 0 +HheadDOffset: 1 +OS2SubXSize: 665 +OS2SubYSize: 716 +OS2SubXOff: 0 +OS2SubYOff: 491 +OS2SupXSize: 665 +OS2SupYSize: 716 +OS2SupXOff: 0 +OS2SupYOff: 0 +OS2StrikeYSize: 51 +OS2StrikeYPos: 265 +OS2Vendor: 'PfEd' +TtfTable: cvt 4 +!$VK# +EndTtf +TtfTable: maxp 32 +!!*'"!"&ar!#>P7!!!!#!!!!"!!*'"!'gN:z +EndTtf +LangName: 1033 +Encoding: UnicodeBmp +UnicodeInterp: none +NameList: Adobe Glyph List +DisplaySize: -36 +AntiAlias: 1 +FitToEm: 1 +WinInfo: 63 21 11 +BeginChars: 65539 10 +StartChar: .notdef +Encoding: 65536 -1 0 +Width: 1024 +Flags: W +TtfInstrs: 46 +YlOhX4L,1p!:;PH"pNdEZ3(..m4n[H!rsu:Z3:@2m4tsP"p+WaZ2k",m4nYA +EndTtf +Fore +34 0 m 1,0,-1 + 34 682 l 1,1,-1 + 375 682 l 1,2,-1 + 375 0 l 1,3,-1 + 34 0 l 1,0,-1 +68 34 m 1,4,-1 + 341 34 l 1,5,-1 + 341 648 l 1,6,-1 + 68 648 l 1,7,-1 + 68 34 l 1,4,-1 +EndSplineSet +EndChar +StartChar: .null +Encoding: 65537 0 1 +Width: 0 +Flags: W +EndChar +StartChar: nonmarkingreturn +Encoding: 65538 12 2 +Width: 1024 +Flags: W +EndChar +StartChar: plus +Encoding: 43 43 3 +Width: 1024 +Flags: W +Fore +0 817 m 1,0,-1 + 1024 817 l 1,1,-1 + 1024 -203 l 1,2,-1 + 0 -203 l 1,3,-1 + 0 817 l 1,0,-1 +EndSplineSet +EndChar +StartChar: b +Encoding: 98 98 4 +Width: 1024 +Flags: W +Fore +500 785 m 0,0,1 + 523 804 523 804 532 802 c 128,-1,2 + 541 800 541 800 570 772 c 0,3,4 + 641 703 641 703 581 703 c 0,5,6 + 570 703 570 703 562 698 c 128,-1,7 + 554 693 554 693 554 686 c 0,8,9 + 554 666 554 666 568.5 646.5 c 128,-1,10 + 583 627 583 627 598 627 c 0,11,12 + 618 625 618 625 683.5 560.5 c 128,-1,13 + 749 496 749 496 742 484 c 0,14,15 + 736 472 736 472 754 462 c 1,16,17 + 771 456 771 456 773 422 c 128,-1,18 + 775 388 775 388 765.5 348 c 128,-1,19 + 756 308 756 308 736 268 c 128,-1,20 + 716 228 716 228 693 210 c 0,21,22 + 679 200 679 200 679.5 193 c 128,-1,23 + 680 186 680 186 696 172 c 1,24,25 + 720 144 720 144 720 123 c 0,26,27 + 720 99 720 99 735 84 c 0,28,29 + 752 67 752 67 739 52.5 c 128,-1,30 + 726 38 726 38 699 44 c 0,31,32 + 669 53 669 53 643 25 c 0,33,34 + 625 6 625 6 628.5 -0.5 c 128,-1,35 + 632 -7 632 -7 664 -8 c 1,36,37 + 685 -12 685 -12 685 -37 c 0,38,39 + 685 -54 685 -54 693 -58.5 c 128,-1,40 + 701 -63 701 -63 726 -61 c 0,41,42 + 768 -56 768 -56 796 -54 c 0,43,44 + 813 -52 813 -52 818 -60.5 c 128,-1,45 + 823 -69 823 -69 823 -100 c 2,46,-1 + 823 -147 l 1,47,-1 + 516 -148 l 2,48,49 + 374 -148 374 -148 304 -145.5 c 128,-1,50 + 234 -143 234 -143 214 -136.5 c 128,-1,51 + 194 -130 194 -130 228 -119 c 0,52,53 + 250 -109 250 -109 235 -93 c 0,54,55 + 216 -71 216 -71 243.5 -63.5 c 128,-1,56 + 271 -56 271 -56 356 -59 c 0,57,58 + 460 -66 460 -66 466 -47 c 0,59,60 + 469 -39 469 -39 462.5 -34.5 c 128,-1,61 + 456 -30 456 -30 443 -30 c 0,62,63 + 423 -30 423 -30 421 -27 c 128,-1,64 + 419 -24 419 -24 429 -10 c 0,65,66 + 447 10 447 10 435 14 c 1,67,68 + 399 19 399 19 374 29 c 0,69,70 + 353 37 353 37 311 42 c 0,71,72 + 295 43 295 43 284.5 49 c 128,-1,73 + 274 55 274 55 277 60 c 0,74,75 + 283 71 283 71 390.5 73 c 128,-1,76 + 498 75 498 75 498 64 c 128,-1,77 + 498 53 498 53 536 71 c 0,78,79 + 558 80 558 80 566 80 c 128,-1,80 + 574 80 574 80 577 71 c 0,81,82 + 580 64 580 64 583 61.5 c 128,-1,83 + 586 59 586 59 590 61 c 128,-1,84 + 594 63 594 63 601 69 c 0,85,86 + 617 87 617 87 603 102 c 0,87,88 + 588 120 588 120 578 102 c 0,89,90 + 570 86 570 86 552 104 c 0,91,92 + 536 120 536 120 558 141 c 0,93,94 + 578 161 578 161 593.5 162.5 c 128,-1,95 + 609 164 609 164 609 147 c 0,96,97 + 609 129 609 129 623 149 c 0,98,99 + 631 162 631 162 620.5 167.5 c 128,-1,100 + 610 173 610 173 570 177 c 0,101,102 + 513 183 513 183 494 173 c 128,-1,103 + 475 163 475 163 504 143 c 0,104,105 + 528 122 528 122 522 112 c 0,106,107 + 518 106 518 106 418 104 c 128,-1,108 + 318 102 318 102 292 107 c 1,109,110 + 287 109 287 109 304 129 c 128,-1,111 + 321 149 321 149 397 149 c 0,112,113 + 423 149 423 149 439.5 151 c 128,-1,114 + 456 153 456 153 462.5 156.5 c 128,-1,115 + 469 160 469 160 468 166 c 1,116,117 + 461 184 461 184 428 184 c 0,118,119 + 356 187 356 187 336.5 191 c 128,-1,120 + 317 195 317 195 325 203 c 0,121,122 + 341 218 341 218 384 223 c 128,-1,123 + 427 228 427 228 439 217 c 0,124,125 + 448 208 448 208 542.5 294.5 c 128,-1,126 + 637 381 637 381 637 400 c 0,127,128 + 637 405 637 405 613.5 384 c 128,-1,129 + 590 363 590 363 558 329 c 0,130,131 + 475 246 475 246 465 246 c 0,132,133 + 452 246 452 246 418 278 c 2,134,-1 + 385 309 l 1,135,-1 + 396 267 l 2,136,137 + 403 239 403 239 401 235.5 c 128,-1,138 + 399 232 399 232 383 245 c 0,139,140 + 360 263 360 263 360 248 c 0,141,142 + 360 232 360 232 340 233 c 128,-1,143 + 320 234 320 234 307 250 c 0,144,145 + 294 265 294 265 284 309 c 0,146,147 + 280 324 280 324 279.5 331 c 128,-1,148 + 279 338 279 338 281 338 c 128,-1,149 + 283 338 283 338 288 331 c 0,150,151 + 299 312 299 312 327 321 c 0,152,153 + 340 326 340 326 343 329 c 128,-1,154 + 346 332 346 332 343.5 335 c 128,-1,155 + 341 338 341 338 328 345 c 0,156,157 + 303 359 303 359 318 378 c 128,-1,158 + 333 397 333 397 318 405 c 0,159,160 + 302 415 302 415 327 441 c 0,161,162 + 348 470 348 470 343 475 c 0,163,164 + 336 483 336 483 313.5 473.5 c 128,-1,165 + 291 464 291 464 291 453 c 0,166,167 + 291 448 291 448 285.5 444 c 128,-1,168 + 280 440 280 440 274 440 c 0,169,170 + 257 442 257 442 291 471 c 0,171,172 + 324 500 324 500 309 505 c 0,173,174 + 292 511 292 511 290.5 531 c 128,-1,175 + 289 551 289 551 304 551 c 0,176,177 + 317 551 317 551 351.5 514.5 c 128,-1,178 + 386 478 386 478 387 464 c 0,179,180 + 387 452 387 452 433 399 c 0,181,182 + 479 343 479 343 516 343 c 0,183,184 + 538 343 538 343 546 349.5 c 128,-1,185 + 554 356 554 356 554 375 c 0,186,187 + 554 407 554 407 520 426 c 0,188,189 + 485 448 485 448 415.5 514.5 c 128,-1,190 + 346 581 346 581 346 592 c 0,191,192 + 346 601 346 601 352 604 c 128,-1,193 + 358 607 358 607 366.5 603.5 c 128,-1,194 + 375 600 375 600 381 591 c 0,195,196 + 390 577 390 577 410 584 c 0,197,198 + 429 591 429 591 429 572 c 0,199,200 + 429 559 429 559 434.5 554 c 128,-1,201 + 440 549 440 549 449.5 554 c 128,-1,202 + 459 559 459 559 470 572 c 0,203,204 + 477 580 477 580 479 585 c 128,-1,205 + 481 590 481 590 478 593 c 128,-1,206 + 475 596 475 596 466 599 c 0,207,208 + 453 605 453 605 454 616 c 128,-1,209 + 455 627 455 627 473 663 c 0,210,211 + 489 696 489 696 491 711.5 c 128,-1,212 + 493 727 493 727 483 739 c 0,213,214 + 473 750 473 750 476.5 759.5 c 128,-1,215 + 480 769 480 769 500 785 c 0,0,1 +530 -51 m 0,216,217 + 540 -33 540 -33 529 -26 c 0,218,219 + 516 -19 516 -19 500 -28.5 c 128,-1,220 + 484 -38 484 -38 484 -53 c 0,221,222 + 484 -72 484 -72 503 -71.5 c 128,-1,223 + 522 -71 522 -71 530 -51 c 0,216,217 +606 -55 m 0,224,225 + 600 -36 600 -36 583.5 -34 c 128,-1,226 + 567 -32 567 -32 567 -50 c 0,227,228 + 567 -59 567 -59 573.5 -65.5 c 128,-1,229 + 580 -72 580 -72 589 -72 c 0,230,231 + 611 -72 611 -72 606 -55 c 0,224,225 +664 -59 m 128,-1,233 + 664 -46 664 -46 651.5 -39 c 128,-1,234 + 639 -32 639 -32 631 -40 c 0,235,236 + 620 -51 620 -51 624 -61.5 c 128,-1,237 + 628 -72 628 -72 643 -72 c 0,238,232 + 664 -72 664 -72 664 -59 c 128,-1,233 +408 732 m 0,239,240 + 416 745 416 745 436.5 745 c 128,-1,241 + 457 745 457 745 457 732 c 0,242,243 + 457 718 457 718 442.5 710 c 128,-1,244 + 428 702 428 702 415 710 c 0,245,246 + 401 719 401 719 408 732 c 0,239,240 +360 -32 m 0,247,248 + 360 -26 360 -26 364.5 -21.5 c 128,-1,249 + 369 -17 369 -17 374 -17 c 0,250,251 + 387 -17 387 -17 387 -22 c 0,252,253 + 387 -30 387 -30 374 -37 c 0,254,255 + 369 -40 369 -40 364.5 -38.5 c 128,-1,256 + 360 -37 360 -37 360 -32 c 0,247,248 +EndSplineSet +EndChar +StartChar: k +Encoding: 107 107 5 +Width: 1024 +Flags: W +Fore +473 743 m 0,0,1 + 489 768 489 768 507.5 771.5 c 128,-1,2 + 526 775 526 775 526 753 c 0,3,4 + 526 744 526 744 534 735.5 c 128,-1,5 + 542 727 542 727 554 724 c 0,6,7 + 571 719 571 719 578 703.5 c 128,-1,8 + 585 688 585 688 578.5 674.5 c 128,-1,9 + 572 661 572 661 554 661 c 0,10,11 + 537 661 537 661 531.5 646.5 c 128,-1,12 + 526 632 526 632 523 576 c 128,-1,13 + 520 520 520 520 525 497.5 c 128,-1,14 + 530 475 530 475 552 451 c 0,15,16 + 573 427 573 427 583.5 423.5 c 128,-1,17 + 594 420 594 420 614 430 c 0,18,19 + 646 450 646 450 655 465 c 0,20,21 + 668 485 668 485 689 479.5 c 128,-1,22 + 710 474 710 474 729 445 c 0,23,24 + 745 422 745 422 751 419.5 c 128,-1,25 + 757 417 757 417 768 432 c 0,26,27 + 786 454 786 454 801 454 c 128,-1,28 + 816 454 816 454 816 468 c 0,29,30 + 816 481 816 481 837 481 c 0,31,32 + 855 481 855 481 858 455.5 c 128,-1,33 + 861 430 861 430 844 419 c 0,34,35 + 830 411 830 411 830 362 c 0,36,37 + 830 315 830 315 816 315 c 0,38,39 + 811 315 811 315 807 295 c 128,-1,40 + 803 275 803 275 803 248 c 0,41,42 + 803 180 803 180 782 163 c 0,43,44 + 767 151 767 151 767 143.5 c 128,-1,45 + 767 136 767 136 783 120 c 0,46,47 + 802 100 802 100 797.5 76 c 128,-1,48 + 793 52 793 52 769 52 c 0,49,50 + 762 52 762 52 753.5 42 c 128,-1,51 + 745 32 745 32 742 19 c 128,-1,52 + 739 6 739 6 727.5 -6 c 128,-1,53 + 716 -18 716 -18 703 -21 c 0,54,55 + 683 -26 683 -26 678.5 -32.5 c 128,-1,56 + 674 -39 674 -39 684.5 -43 c 128,-1,57 + 695 -47 695 -47 712.5 -48.5 c 128,-1,58 + 730 -50 730 -50 754 -44 c 0,59,60 + 800 -34 800 -34 815 -45.5 c 128,-1,61 + 830 -57 830 -57 830 -101 c 2,62,-1 + 830 -137 l 1,63,-1 + 505 -137 l 2,64,65 + 356 -137 356 -137 282 -134 c 128,-1,66 + 208 -131 208 -131 187 -124 c 128,-1,67 + 166 -117 166 -117 201 -105 c 0,68,69 + 223 -95 223 -95 206 -78 c 0,70,71 + 199 -69 199 -69 198.5 -66 c 128,-1,72 + 198 -63 198 -63 198.5 -59.5 c 128,-1,73 + 199 -56 199 -56 217.5 -55 c 128,-1,74 + 236 -54 236 -54 253.5 -53.5 c 128,-1,75 + 271 -53 271 -53 318 -53 c 0,76,77 + 422 -50 422 -50 422 -38 c 128,-1,78 + 422 -26 422 -26 394 -22 c 1,79,80 + 388 -22 388 -22 358 -20.5 c 128,-1,81 + 328 -19 328 -19 311 -18 c 0,82,83 + 279 -17 279 -17 272.5 -13.5 c 128,-1,84 + 266 -10 266 -10 280 -3 c 0,85,86 + 302 12 302 12 333 8 c 0,87,88 + 346 6 346 6 356.5 10 c 128,-1,89 + 367 14 367 14 369 22 c 1,90,91 + 374 33 374 33 360.5 35 c 128,-1,92 + 347 37 347 37 306 32 c 0,93,94 + 262 27 262 27 248.5 30 c 128,-1,95 + 235 33 235 33 235 46 c 0,96,97 + 235 54 235 54 229 60 c 128,-1,98 + 223 66 223 66 213 66 c 0,99,100 + 199 66 199 66 198.5 70 c 128,-1,101 + 198 74 198 74 208 87 c 0,102,103 + 219 100 219 100 225.5 100 c 128,-1,104 + 232 100 232 100 245 87 c 0,105,106 + 278 51 278 51 299 83 c 0,107,108 + 308 98 308 98 327 75 c 1,109,110 + 333 64 333 64 340.5 61 c 128,-1,111 + 348 58 348 58 351 65 c 1,112,113 + 361 78 361 78 316 123 c 0,114,115 + 309 130 309 130 303 136.5 c 128,-1,116 + 297 143 297 143 293.5 147.5 c 128,-1,117 + 290 152 290 152 288 155 c 128,-1,118 + 286 158 286 158 287 159 c 128,-1,119 + 288 160 288 160 291 159 c 0,120,121 + 301 156 301 156 306 162 c 128,-1,122 + 311 168 311 168 311 184 c 0,123,124 + 311 197 311 197 308.5 204.5 c 128,-1,125 + 306 212 306 212 302 210 c 0,126,127 + 291 203 291 203 263 218 c 0,128,129 + 251 225 251 225 247 227.5 c 128,-1,130 + 243 230 243 230 244 236 c 128,-1,131 + 245 242 245 242 250.5 247.5 c 128,-1,132 + 256 253 256 253 273 267 c 0,133,134 + 288 280 288 280 294 287 c 128,-1,135 + 300 294 300 294 299 297.5 c 128,-1,136 + 298 301 298 301 289 302 c 0,137,138 + 268 302 268 302 249 281 c 0,139,140 + 233 261 233 261 205 275 c 0,141,142 + 179 289 179 289 192 307 c 0,143,144 + 207 325 207 325 177 355 c 2,145,-1 + 148 387 l 1,146,-1 + 180 378 l 2,147,148 + 200 373 200 373 203.5 377.5 c 128,-1,149 + 207 382 207 382 193 393 c 128,-1,150 + 179 404 179 404 158 412 c 0,151,152 + 135 422 135 422 132.5 428.5 c 128,-1,153 + 130 435 130 435 141 454 c 0,154,155 + 172 505 172 505 205 452 c 2,156,-1 + 223 423 l 1,157,-1 + 255 452 l 2,158,159 + 285 480 285 480 302 479 c 128,-1,160 + 319 478 319 478 339 448 c 0,161,162 + 355 425 355 425 363.5 423 c 128,-1,163 + 372 421 372 421 396 433 c 0,164,165 + 423 446 423 446 453.5 475.5 c 128,-1,166 + 484 505 484 505 484 517 c 0,167,168 + 484 526 484 526 465 510 c 0,169,170 + 443 495 443 495 437 508 c 0,171,172 + 430 519 430 519 439 545 c 128,-1,173 + 448 571 448 571 462 581 c 0,174,175 + 478 592 478 592 461.5 617 c 128,-1,176 + 445 642 445 642 410 660 c 0,177,178 + 370 677 370 677 386 693 c 0,179,180 + 400 707 400 707 443 685 c 0,181,182 + 473 666 473 666 482.5 671 c 128,-1,183 + 492 676 492 676 469 699 c 0,184,185 + 454 714 454 714 473 743 c 0,0,1 +511 407 m 0,186,187 + 477 447 477 447 443 405 c 0,188,189 + 428 388 428 388 431.5 363 c 128,-1,190 + 435 338 435 338 452 333 c 0,191,192 + 471 329 471 329 498 357 c 0,193,194 + 516 374 516 374 518.5 384 c 128,-1,195 + 521 394 521 394 511 407 c 0,186,187 +298 386 m 0,196,197 + 289 399 289 399 278 397.5 c 128,-1,198 + 267 396 267 396 246 379 c 0,199,200 + 231 368 231 368 225 356.5 c 128,-1,201 + 219 345 219 345 223.5 337 c 128,-1,202 + 228 329 228 329 241 329 c 0,203,204 + 260 329 260 329 282.5 351 c 128,-1,205 + 305 373 305 373 298 386 c 0,196,197 +738 390 m 0,206,207 + 729 398 729 398 712.5 398 c 128,-1,208 + 696 398 696 398 688 389 c 0,209,210 + 675 376 675 376 679 352.5 c 128,-1,211 + 683 329 683 329 699 329 c 128,-1,212 + 715 329 715 329 731.5 354 c 128,-1,213 + 748 379 748 379 738 390 c 0,206,207 +360 293 m 0,214,215 + 360 303 360 303 353.5 309 c 128,-1,216 + 347 315 347 315 338 315 c 0,217,218 + 320 315 320 315 322 299 c 128,-1,219 + 324 283 324 283 343 277 c 0,220,221 + 350 275 350 275 355 279.5 c 128,-1,222 + 360 284 360 284 360 293 c 0,214,215 +415 295 m 128,-1,224 + 415 303 415 303 408.5 309 c 128,-1,225 + 402 315 402 315 394 315 c 128,-1,226 + 386 315 386 315 380 309 c 128,-1,227 + 374 303 374 303 374 295 c 128,-1,228 + 374 287 374 287 380 280.5 c 128,-1,229 + 386 274 386 274 394 274 c 128,-1,230 + 402 274 402 274 408.5 280.5 c 128,-1,223 + 415 287 415 287 415 295 c 128,-1,224 +498 286 m 0,231,232 + 498 299 498 299 485.5 306.5 c 128,-1,233 + 473 314 473 314 465 306 c 0,234,235 + 454 294 454 294 458 284 c 128,-1,236 + 462 274 462 274 477 274 c 0,237,238 + 498 274 498 274 498 286 c 0,231,232 +581 295 m 128,-1,240 + 581 303 581 303 575 309 c 128,-1,241 + 569 315 569 315 560 315 c 0,242,243 + 552 315 552 315 546 309 c 128,-1,244 + 540 303 540 303 540 295 c 128,-1,245 + 540 287 540 287 546 280.5 c 128,-1,246 + 552 274 552 274 560 274 c 0,247,248 + 569 274 569 274 575 280.5 c 128,-1,239 + 581 287 581 287 581 295 c 128,-1,240 +664 295 m 128,-1,250 + 664 303 664 303 658 309 c 128,-1,251 + 652 315 652 315 643 315 c 0,252,253 + 635 315 635 315 629 309 c 128,-1,254 + 623 303 623 303 623 295 c 128,-1,255 + 623 287 623 287 629 280.5 c 128,-1,256 + 635 274 635 274 643 274 c 0,257,258 + 652 274 652 274 658 280.5 c 128,-1,249 + 664 287 664 287 664 295 c 128,-1,250 +671 232 m 1,259,260 + 668 238 668 238 664.5 242 c 128,-1,261 + 661 246 661 246 660 245 c 1,262,263 + 659 243 659 243 623 232 c 0,264,265 + 598 224 598 224 599.5 222.5 c 128,-1,266 + 601 221 601 221 634 220 c 0,267,268 + 654 219 654 219 665 222.5 c 128,-1,269 + 676 226 676 226 671 232 c 1,259,260 +577 174 m 0,270,271 + 584 191 584 191 576 201 c 0,272,273 + 573 205 573 205 570.5 199.5 c 128,-1,274 + 568 194 568 194 569 183 c 0,275,276 + 569 170 569 170 572 168 c 0,277,278 + 574 167 574 167 577 174 c 0,270,271 +720 120 m 0,279,280 + 720 139 720 139 693 149 c 128,-1,281 + 666 159 666 159 634.5 154 c 128,-1,282 + 603 149 603 149 592 131 c 0,283,284 + 581 112 581 112 597.5 96.5 c 128,-1,285 + 614 81 614 81 631 95 c 0,286,287 + 652 112 652 112 643 122 c 1,288,289 + 637 133 637 133 649 142 c 0,290,291 + 655 146 655 146 663.5 140 c 128,-1,292 + 672 134 672 134 678 122 c 0,293,294 + 687 105 687 105 697 98.5 c 128,-1,295 + 707 92 707 92 713.5 97.5 c 128,-1,296 + 720 103 720 103 720 120 c 0,279,280 +387 133 m 0,297,298 + 387 139 387 139 379 144 c 128,-1,299 + 371 149 371 149 360 149 c 0,300,301 + 341 149 341 149 336.5 144 c 128,-1,302 + 332 139 332 139 339 126 c 128,-1,303 + 346 113 346 113 368 87 c 0,304,305 + 395 57 395 57 398.5 56 c 128,-1,306 + 402 55 402 55 396 80 c 0,307,308 + 387 123 387 123 387 133 c 0,297,298 +470 122 m 0,309,310 + 470 133 470 133 464 141 c 128,-1,311 + 458 149 458 149 450 149 c 128,-1,312 + 442 149 442 149 435.5 142 c 128,-1,313 + 429 135 429 135 429 126 c 0,314,315 + 429 108 429 108 440 89.5 c 128,-1,316 + 451 71 451 71 464 61 c 128,-1,317 + 477 51 477 51 487.5 53 c 128,-1,318 + 498 55 498 55 498 73 c 0,319,320 + 498 94 498 94 484 94 c 0,321,322 + 479 94 479 94 474.5 102 c 128,-1,323 + 470 110 470 110 470 122 c 0,309,310 +554 122 m 0,324,325 + 554 133 554 133 547.5 141 c 128,-1,326 + 541 149 541 149 533 149 c 128,-1,327 + 525 149 525 149 518.5 141 c 128,-1,328 + 512 133 512 133 512 122 c 0,329,330 + 512 110 512 110 518.5 102 c 128,-1,331 + 525 94 525 94 533 94 c 128,-1,332 + 541 94 541 94 547.5 102 c 128,-1,333 + 554 110 554 110 554 122 c 0,324,325 +443 28 m 0,334,335 + 443 32 443 32 439 35.5 c 128,-1,336 + 435 39 435 39 430 39 c 0,337,338 + 416 39 416 39 409 25.5 c 128,-1,339 + 402 12 402 12 412 5 c 0,340,341 + 422 -1 422 -1 432.5 6.5 c 128,-1,342 + 443 14 443 14 443 28 c 0,334,335 +498 18 m 0,343,344 + 498 39 498 39 486 39 c 0,345,346 + 473 39 473 39 465.5 26 c 128,-1,347 + 458 13 458 13 466 5 c 0,348,349 + 478 -6 478 -6 488 -2 c 128,-1,350 + 498 2 498 2 498 18 c 0,343,344 +540 18 m 128,-1,352 + 540 39 540 39 526 39 c 0,353,354 + 521 39 521 39 516.5 32.5 c 128,-1,355 + 512 26 512 26 512 18 c 128,-1,356 + 512 10 512 10 516.5 3.5 c 128,-1,357 + 521 -3 521 -3 526 -3 c 0,358,351 + 540 -3 540 -3 540 18 c 128,-1,352 +609 11 m 0,359,360 + 609 25 609 25 595 25 c 0,361,362 + 590 25 590 25 585.5 21 c 128,-1,363 + 581 17 581 17 581 11 c 0,364,365 + 581 6 581 6 585.5 1.5 c 128,-1,366 + 590 -3 590 -3 595 -3 c 0,367,368 + 601 -3 601 -3 605 1.5 c 128,-1,369 + 609 6 609 6 609 11 c 0,359,360 +498 -28 m 0,370,371 + 498 -17 498 -17 486 -17 c 0,372,373 + 471 -17 471 -17 464 -30.5 c 128,-1,374 + 457 -44 457 -44 468 -50 c 0,375,376 + 478 -56 478 -56 488 -49 c 128,-1,377 + 498 -42 498 -42 498 -28 c 0,370,371 +606 -33 m 0,378,379 + 608 -26 608 -26 603.5 -21.5 c 128,-1,380 + 599 -17 599 -17 589 -17 c 0,381,382 + 580 -17 580 -17 573.5 -23 c 128,-1,383 + 567 -29 567 -29 567 -39 c 0,384,385 + 567 -56 567 -56 583.5 -54 c 128,-1,386 + 600 -52 600 -52 606 -33 c 0,378,379 +661 -33 m 0,387,388 + 663 -27 663 -27 658 -22 c 128,-1,389 + 653 -17 653 -17 643 -17 c 0,390,391 + 634 -17 634 -17 629 -22 c 128,-1,392 + 624 -27 624 -27 627 -33 c 1,393,394 + 632 -51 632 -51 643 -51 c 128,-1,395 + 654 -51 654 -51 661 -33 c 0,387,388 +EndSplineSet +EndChar +StartChar: n +Encoding: 110 110 6 +Width: 1024 +Flags: W +Fore +421 757 m 0,0,1 + 420 771 420 771 423.5 773.5 c 128,-1,2 + 427 776 427 776 441 768 c 0,3,4 + 467 755 467 755 483 734 c 128,-1,5 + 499 713 499 713 495 697 c 1,6,7 + 494 687 494 687 503 683 c 128,-1,8 + 512 679 512 679 536 681 c 0,9,10 + 554 682 554 682 581 675 c 128,-1,11 + 608 668 608 668 628 657 c 0,12,13 + 672 633 672 633 751.5 552.5 c 128,-1,14 + 831 472 831 472 826 456 c 1,15,16 + 821 446 821 446 854 376 c 0,17,18 + 887 311 887 311 879 297 c 0,19,20 + 869 283 869 283 893 248 c 0,21,22 + 916 209 916 209 912 140 c 0,23,24 + 907 36 907 36 913 1.5 c 128,-1,25 + 919 -33 919 -33 942 -39 c 0,26,27 + 960 -44 960 -44 964.5 -55.5 c 128,-1,28 + 969 -67 969 -67 966 -100 c 2,29,-1 + 962 -152 l 1,30,-1 + 627 -155 l 2,31,32 + 550 -155 550 -155 491.5 -155 c 128,-1,33 + 433 -155 433 -155 393 -153.5 c 128,-1,34 + 353 -152 353 -152 328 -150 c 128,-1,35 + 303 -148 303 -148 294 -144 c 128,-1,36 + 285 -140 285 -140 289.5 -135 c 128,-1,37 + 294 -130 294 -130 311 -123 c 0,38,39 + 333 -113 333 -113 318 -97 c 0,40,41 + 299 -75 299 -75 325 -68 c 128,-1,42 + 351 -61 351 -61 433 -65 c 0,43,44 + 533 -70 533 -70 533 -56 c 128,-1,45 + 533 -42 533 -42 505 -42 c 0,46,47 + 479 -42 479 -42 461 -31 c 128,-1,48 + 443 -20 443 -20 443 -33 c 0,49,50 + 443 -52 443 -52 422 -47.5 c 128,-1,51 + 401 -43 401 -43 381 -21 c 0,52,53 + 363 -2 363 -2 363 3.5 c 128,-1,54 + 363 9 363 9 382 16 c 0,55,56 + 405 26 405 26 412 10 c 0,57,58 + 416 0 416 0 423 0 c 128,-1,59 + 430 0 430 0 446 8 c 0,60,61 + 477 24 477 24 519 16 c 0,62,63 + 565 9 565 9 580 25 c 0,64,65 + 595 40 595 40 595 25 c 128,-1,66 + 595 10 595 10 683.5 -0.5 c 128,-1,67 + 772 -11 772 -11 811 -2 c 0,68,69 + 839 7 839 7 840 17 c 128,-1,70 + 841 27 841 27 813.5 34 c 128,-1,71 + 786 41 786 41 747 39 c 0,72,73 + 706 35 706 35 692 38.5 c 128,-1,74 + 678 42 678 42 678 55 c 0,75,76 + 678 75 678 75 710 77 c 0,77,78 + 722 77 722 77 726 79.5 c 128,-1,79 + 730 82 730 82 724 86 c 1,80,81 + 705 93 705 93 706.5 112 c 128,-1,82 + 708 131 708 131 726 131 c 0,83,84 + 735 131 735 131 741 126.5 c 128,-1,85 + 747 122 747 122 747 117 c 0,86,87 + 747 104 747 104 767 120 c 0,88,89 + 775 127 775 127 777 134.5 c 128,-1,90 + 779 142 779 142 774 142 c 1,91,92 + 760 147 760 147 762 162 c 128,-1,93 + 764 177 764 177 782 195 c 0,94,95 + 801 214 801 214 793 238 c 0,96,97 + 784 261 784 261 778 245 c 0,98,99 + 773 229 773 229 753 228.5 c 128,-1,100 + 733 228 733 228 733 243 c 0,101,102 + 733 256 733 256 754 279 c 0,103,104 + 769 293 769 293 767.5 302 c 128,-1,105 + 766 311 766 311 747 335 c 0,106,107 + 731 354 731 354 724 369 c 128,-1,108 + 717 384 717 384 721 388 c 128,-1,109 + 725 392 725 392 738 386 c 1,110,111 + 740 384 740 384 739.5 385.5 c 128,-1,112 + 739 387 739 387 737 389.5 c 128,-1,113 + 735 392 735 392 731 397.5 c 128,-1,114 + 727 403 727 403 721.5 409 c 128,-1,115 + 716 415 716 415 708.5 423.5 c 128,-1,116 + 701 432 701 432 693 440 c 0,117,118 + 668 465 668 465 645.5 481.5 c 128,-1,119 + 623 498 623 498 617 495 c 0,120,121 + 600 484 600 484 565.5 485.5 c 128,-1,122 + 531 487 531 487 523 498 c 0,123,124 + 519 504 519 504 515.5 501 c 128,-1,125 + 512 498 512 498 512 488 c 128,-1,126 + 512 478 512 478 505.5 470.5 c 128,-1,127 + 499 463 499 463 491 463 c 0,128,129 + 480 463 480 463 478.5 456.5 c 128,-1,130 + 477 450 477 450 484 430 c 0,131,132 + 495 397 495 397 482 383 c 0,133,134 + 462 363 462 363 481.5 362 c 128,-1,135 + 501 361 501 361 523 380 c 0,136,137 + 548 404 548 404 565 407 c 128,-1,138 + 582 410 582 410 583 391 c 0,139,140 + 583 374 583 374 591 391 c 0,141,142 + 597 407 597 407 617 408 c 128,-1,143 + 637 409 637 409 637 394 c 0,144,145 + 637 378 637 378 598 341.5 c 128,-1,146 + 559 305 559 305 545 308 c 0,147,148 + 527 312 527 312 519 297 c 0,149,150 + 512 284 512 284 486 284 c 0,151,152 + 459 284 459 284 416 260.5 c 128,-1,153 + 373 237 373 237 346 207 c 0,154,155 + 314 173 314 173 296 173 c 0,156,157 + 290 173 290 173 270 156 c 128,-1,158 + 250 139 250 139 230 117 c 0,159,160 + 188 72 188 72 156.5 64 c 128,-1,161 + 125 56 125 56 125 91 c 0,162,163 + 125 119 125 119 102 112 c 0,164,165 + 88 108 88 108 88 113 c 0,166,167 + 88 115 88 115 90 119 c 0,168,169 + 99 132 99 132 86 149 c 0,170,171 + 72 167 72 167 65.5 197 c 128,-1,172 + 59 227 59 227 71 221 c 0,173,174 + 83 213 83 213 112 230 c 0,175,176 + 128 238 128 238 131.5 241.5 c 128,-1,177 + 135 245 135 245 133 248.5 c 128,-1,178 + 131 252 131 252 118 259 c 0,179,180 + 101 268 101 268 107 279.5 c 128,-1,181 + 113 291 113 291 154 328 c 0,182,183 + 190 361 190 361 198 374.5 c 128,-1,184 + 206 388 206 388 194 396 c 0,185,186 + 181 404 181 404 181.5 409 c 128,-1,187 + 182 414 182 414 199 425 c 0,188,189 + 219 436 219 436 219.5 440.5 c 128,-1,190 + 220 445 220 445 201 459 c 0,191,192 + 191 466 191 466 187.5 470.5 c 128,-1,193 + 184 475 184 475 189.5 485 c 128,-1,194 + 195 495 195 495 206 506 c 128,-1,195 + 217 517 217 517 245 544 c 2,196,-1 + 317 609 l 1,197,-1 + 284 647 l 2,198,199 + 251 685 251 685 230 685 c 0,200,201 + 217 685 217 685 216.5 691 c 128,-1,202 + 216 697 216 697 226 719 c 0,203,204 + 238 745 238 745 257.5 753 c 128,-1,205 + 277 761 277 761 277 740 c 0,206,207 + 277 726 277 726 299 736 c 0,208,209 + 319 745 319 745 328 714 c 0,210,211 + 333 693 333 693 346.5 685.5 c 128,-1,212 + 360 678 360 678 360 696 c 0,213,214 + 360 700 360 700 369.5 707 c 128,-1,215 + 379 714 379 714 392 719 c 0,216,217 + 421 735 421 735 421 757 c 0,0,1 +325 657 m 0,218,219 + 332 671 332 671 320 671 c 0,220,221 + 305 671 305 671 298 657 c 1,222,223 + 294 652 294 652 295.5 647.5 c 128,-1,224 + 297 643 297 643 303 643 c 0,225,226 + 317 643 317 643 325 657 c 0,218,219 +381 602 m 0,227,228 + 408 632 408 632 400 634 c 128,-1,229 + 392 636 392 636 363 607 c 0,230,231 + 332 574 332 574 343 574 c 0,232,233 + 355 574 355 574 381 602 c 0,227,228 +595 629 m 0,234,235 + 595 643 595 643 560 643 c 0,236,237 + 526 643 526 643 526 629 c 0,238,239 + 526 624 526 624 536 620 c 128,-1,240 + 546 616 546 616 560 616 c 128,-1,241 + 574 616 574 616 584.5 620 c 128,-1,242 + 595 624 595 624 595 629 c 0,234,235 +443 498 m 0,243,244 + 443 511 443 511 435 515.5 c 128,-1,245 + 427 520 427 520 415 515.5 c 128,-1,246 + 403 511 403 511 392 498 c 0,247,248 + 370 474 370 474 374 448 c 128,-1,249 + 378 422 378 422 403 422 c 0,250,251 + 419 422 419 422 424 428 c 128,-1,252 + 429 434 429 434 425 450 c 0,253,254 + 418 477 418 477 430 477 c 0,255,256 + 443 477 443 477 443 498 c 0,243,244 +304 470 m 0,257,258 + 336 505 336 505 324 505 c 0,259,260 + 308 505 308 505 280 470 c 0,261,262 + 250 436 250 436 260 436 c 0,263,264 + 272 436 272 436 304 470 c 0,257,258 +131 173 m 1,265,266 + 124 187 124 187 116 187 c 0,267,268 + 111 187 111 187 111 173 c 0,269,270 + 111 168 111 168 115.5 163.5 c 128,-1,271 + 120 159 120 159 126 159 c 0,272,273 + 131 159 131 159 133 163.5 c 128,-1,274 + 135 168 135 168 131 173 c 1,265,266 +798 -54 m 0,275,276 + 745 -57 745 -57 735 -38 c 0,277,278 + 730 -29 730 -29 727 -27 c 128,-1,279 + 724 -25 724 -25 721 -28 c 128,-1,280 + 718 -31 718 -31 714 -42 c 0,281,282 + 706 -66 706 -66 706 -71 c 0,283,284 + 706 -79 706 -79 760.5 -75.5 c 128,-1,285 + 815 -72 815 -72 830 -62 c 0,286,287 + 841 -55 841 -55 833.5 -53 c 128,-1,288 + 826 -51 826 -51 798 -54 c 0,275,276 +609 -62 m 0,289,290 + 609 -49 609 -49 587 -49 c 0,291,292 + 568 -49 568 -49 574 -62 c 0,293,294 + 582 -76 582 -76 596 -76 c 0,295,296 + 601 -76 601 -76 605 -71.5 c 128,-1,297 + 609 -67 609 -67 609 -62 c 0,289,290 +540 443 m 128,-1,299 + 540 451 540 451 546 457 c 128,-1,300 + 552 463 552 463 560 463 c 0,301,302 + 569 463 569 463 575 457 c 128,-1,303 + 581 451 581 451 581 443 c 128,-1,304 + 581 435 581 435 575 428.5 c 128,-1,305 + 569 422 569 422 560 422 c 0,306,307 + 552 422 552 422 546 428.5 c 128,-1,298 + 540 435 540 435 540 443 c 128,-1,299 +623 443 m 128,-1,309 + 623 451 623 451 629 457 c 128,-1,310 + 635 463 635 463 643 463 c 0,311,312 + 652 463 652 463 658 457 c 128,-1,313 + 664 451 664 451 664 443 c 128,-1,314 + 664 435 664 435 658 428.5 c 128,-1,315 + 652 422 652 422 643 422 c 0,316,317 + 635 422 635 422 629 428.5 c 128,-1,308 + 623 435 623 435 623 443 c 128,-1,309 +605 296 m 0,318,319 + 617 311 617 311 622 313.5 c 128,-1,320 + 627 316 627 316 631.5 311.5 c 128,-1,321 + 636 307 636 307 646 288 c 0,322,323 + 664 254 664 254 664.5 179 c 128,-1,324 + 665 104 665 104 648 104 c 0,325,326 + 630 104 630 104 648 87 c 0,327,328 + 662 73 662 73 663.5 47 c 128,-1,329 + 665 21 665 21 652 21 c 0,330,331 + 636 21 636 21 617 51 c 0,332,333 + 596 82 596 82 580 66 c 0,334,335 + 570 57 570 57 560 58 c 128,-1,336 + 550 59 550 59 531 70 c 0,337,338 + 509 86 509 86 506 84 c 128,-1,339 + 503 82 503 82 508 59 c 256,340,341 + 513 36 513 36 511.5 35.5 c 128,-1,342 + 510 35 510 35 498 49 c 1,343,344 + 497 51 497 51 494 55 c 0,345,346 + 475 79 475 79 486 100 c 128,-1,347 + 497 121 497 121 523 111 c 0,348,349 + 545 102 545 102 563 118.5 c 128,-1,350 + 581 135 581 135 567 152 c 0,351,352 + 552 170 552 170 567 180 c 128,-1,353 + 582 190 582 190 566 209 c 0,354,355 + 551 228 551 228 566 228 c 0,356,357 + 572 228 572 228 576.5 234.5 c 128,-1,358 + 581 241 581 241 581 249 c 0,359,360 + 581 270 581 270 605 296 c 0,318,319 +515 180 m 0,361,362 + 541 209 541 209 540 194 c 0,363,364 + 539 190 539 190 536 181 c 1,365,366 + 527 163 527 163 542 148 c 0,367,368 + 557 134 557 134 541 126 c 0,369,370 + 535 122 535 122 530.5 125.5 c 128,-1,371 + 526 129 526 129 526 137 c 0,372,373 + 526 146 526 146 521.5 152.5 c 128,-1,374 + 517 159 517 159 512 159 c 0,375,376 + 499 159 499 159 515 180 c 0,361,362 +706 166 m 128,-1,378 + 706 174 706 174 712 180.5 c 128,-1,379 + 718 187 718 187 726 187 c 0,380,381 + 735 187 735 187 741 180.5 c 128,-1,382 + 747 174 747 174 747 166 c 128,-1,383 + 747 158 747 158 741 151.5 c 128,-1,384 + 735 145 735 145 726 145 c 0,385,386 + 718 145 718 145 712 151.5 c 128,-1,377 + 706 158 706 158 706 166 c 128,-1,378 +21 159 m 0,387,388 + 14 173 14 173 26 173 c 0,389,390 + 42 173 42 173 42 159 c 128,-1,391 + 42 145 42 145 36 145 c 0,392,393 + 29 145 29 145 21 159 c 0,387,388 +448 124 m 0,394,395 + 485 153 485 153 482 142 c 0,396,397 + 481 137 481 137 470 124 c 0,398,399 + 454 104 454 104 437 104 c 0,400,401 + 424 104 424 104 448 124 c 0,394,395 +415 48 m 0,402,403 + 415 62 415 62 437 62 c 0,404,405 + 456 62 456 62 450 48 c 0,406,407 + 442 34 442 34 428 34 c 0,408,409 + 423 34 423 34 419 38.5 c 128,-1,410 + 415 43 415 43 415 48 c 0,402,403 +EndSplineSet +EndChar +StartChar: p +Encoding: 112 112 7 +Width: 1024 +Flags: W +Fore +491 696 m 0,0,1 + 555 705 555 705 579 702 c 128,-1,2 + 603 699 603 699 617 682 c 0,3,4 + 634 659 634 659 635.5 614.5 c 128,-1,5 + 637 570 637 570 621 559 c 0,6,7 + 605 551 605 551 621 535 c 0,8,9 + 631 525 631 525 634.5 516.5 c 128,-1,10 + 638 508 638 508 633 503 c 128,-1,11 + 628 498 628 498 616 498 c 0,12,13 + 595 498 595 498 595 484 c 0,14,15 + 595 453 595 453 639 494 c 0,16,17 + 657 510 657 510 665 509.5 c 128,-1,18 + 673 509 673 509 692 491 c 0,19,20 + 720 467 720 467 720 400 c 0,21,22 + 720 357 720 357 711.5 336.5 c 128,-1,23 + 703 316 703 316 673 288 c 0,24,25 + 627 242 627 242 637 216 c 0,26,27 + 643 197 643 197 645.5 196.5 c 128,-1,28 + 648 196 648 196 655 213 c 0,29,30 + 662 229 662 229 669 226.5 c 128,-1,31 + 676 224 676 224 703 198 c 0,32,33 + 746 155 746 155 774.5 111 c 128,-1,34 + 803 67 803 67 803 45 c 0,35,36 + 803 19 803 19 818 4 c 0,37,38 + 832 -10 832 -10 828 -71 c 2,39,-1 + 823 -132 l 1,40,-1 + 516 -134 l 2,41,42 + 336 -135 336 -135 272 -132 c 128,-1,43 + 208 -129 208 -129 208 -118 c 0,44,45 + 208 -101 208 -101 228 -83 c 0,46,47 + 250 -65 250 -65 234 -47 c 0,48,49 + 218 -27 218 -27 242 -21 c 128,-1,50 + 266 -15 266 -15 353 -18 c 0,51,52 + 394 -19 394 -19 423.5 -16 c 128,-1,53 + 453 -13 453 -13 455 -7 c 0,54,55 + 459 2 459 2 434.5 9.5 c 128,-1,56 + 410 17 410 17 384 16.5 c 128,-1,57 + 358 16 358 16 345 8 c 1,58,59 + 329 -7 329 -7 322 11 c 0,60,61 + 314 29 314 29 299 14 c 0,62,63 + 281 0 281 0 256 27 c 0,64,65 + 231 55 231 55 240.5 62.5 c 128,-1,66 + 250 70 250 70 296 58 c 0,67,68 + 344 44 344 44 353 55 c 0,69,70 + 360 66 360 66 432 59 c 0,71,72 + 474 54 474 54 487 56.5 c 128,-1,73 + 500 59 500 59 495 70 c 0,74,75 + 491 82 491 82 468 84.5 c 128,-1,76 + 445 87 445 87 385 84 c 0,77,78 + 282 79 282 79 271 94 c 0,79,80 + 261 111 261 111 288.5 122 c 128,-1,81 + 316 133 316 133 351 126 c 0,82,83 + 397 116 397 116 437 117.5 c 128,-1,84 + 477 119 477 119 477 131 c 0,85,86 + 477 145 477 145 447 145 c 0,87,88 + 424 145 424 145 414 150 c 128,-1,89 + 404 155 404 155 410 163.5 c 128,-1,90 + 416 172 416 172 436 180 c 0,91,92 + 475 192 475 192 493 178 c 0,93,94 + 510 164 510 164 533 184 c 0,95,96 + 546 197 546 197 550.5 209 c 128,-1,97 + 555 221 555 221 550.5 228 c 128,-1,98 + 546 235 546 235 533 235 c 0,99,100 + 525 235 525 235 518.5 230 c 128,-1,101 + 512 225 512 225 512 218 c 0,102,103 + 512 202 512 202 495 218 c 0,104,105 + 480 235 480 235 439 235 c 0,106,107 + 413 235 413 235 389 243.5 c 128,-1,108 + 365 252 365 252 354 262 c 128,-1,109 + 343 272 343 272 348 281.5 c 128,-1,110 + 353 291 353 291 378 292 c 0,111,112 + 401 293 401 293 373 300 c 0,113,114 + 367 302 367 302 360 303 c 0,115,116 + 334 308 334 308 321 316 c 128,-1,117 + 308 324 308 324 313.5 332 c 128,-1,118 + 319 340 319 340 342 343 c 0,119,120 + 374 348 374 348 388.5 367.5 c 128,-1,121 + 403 387 403 387 381 396 c 0,122,123 + 367 402 367 402 372 411 c 128,-1,124 + 377 420 377 420 407 445 c 2,125,-1 + 457 487 l 1,126,-1 + 422 528 l 2,127,128 + 387 572 387 572 400 585 c 0,129,130 + 415 600 415 600 415 631 c 0,131,132 + 415 685 415 685 491 696 c 0,0,1 +549 448 m 128,-1,134 + 558 457 558 457 544 472 c 0,135,136 + 529 485 529 485 520 473 c 1,137,138 + 513 460 513 460 526.5 449.5 c 128,-1,133 + 540 439 540 439 549 448 c 128,-1,134 +498 465 m 0,139,140 + 498 470 498 470 484 470 c 0,141,142 + 479 470 479 470 474.5 465.5 c 128,-1,143 + 470 461 470 461 470 455 c 0,144,145 + 470 450 470 450 474.5 448 c 128,-1,146 + 479 446 479 446 484 449 c 0,147,148 + 498 457 498 457 498 465 c 0,139,140 +443 354 m 0,149,150 + 443 360 443 360 429 360 c 0,151,152 + 424 360 424 360 419.5 355.5 c 128,-1,153 + 415 351 415 351 415 344 c 0,154,155 + 415 339 415 339 419.5 337.5 c 128,-1,156 + 424 336 424 336 429 339 c 0,157,158 + 443 346 443 346 443 354 c 0,149,150 +452 288 m 1,159,160 + 461 304 461 304 451 314 c 1,161,162 + 448 318 448 318 445.5 312.5 c 128,-1,163 + 443 307 443 307 444 296 c 0,164,165 + 444 281 444 281 448 282 c 1,166,167 + 450 282 450 282 452 288 c 1,159,160 +595 228 m 0,168,169 + 595 255 595 255 591.5 259.5 c 128,-1,170 + 588 264 588 264 577 253 c 128,-1,171 + 566 242 566 242 568 217.5 c 128,-1,172 + 570 193 570 193 581 193 c 0,173,174 + 595 193 595 193 595 228 c 0,168,169 +554 131 m 128,-1,176 + 554 139 554 139 547.5 145.5 c 128,-1,177 + 541 152 541 152 533 152 c 128,-1,178 + 525 152 525 152 518.5 145.5 c 128,-1,179 + 512 139 512 139 512 131 c 128,-1,180 + 512 123 512 123 518.5 116.5 c 128,-1,181 + 525 110 525 110 533 110 c 128,-1,182 + 541 110 541 110 547.5 116.5 c 128,-1,175 + 554 123 554 123 554 131 c 128,-1,176 +609 131 m 128,-1,184 + 609 139 609 139 602.5 145.5 c 128,-1,185 + 596 152 596 152 588 152 c 128,-1,186 + 580 152 580 152 573.5 145.5 c 128,-1,187 + 567 139 567 139 567 131 c 128,-1,188 + 567 123 567 123 573.5 116.5 c 128,-1,189 + 580 110 580 110 588 110 c 128,-1,190 + 596 110 596 110 602.5 116.5 c 128,-1,183 + 609 123 609 123 609 131 c 128,-1,184 +650 124 m 128,-1,192 + 650 138 650 138 637 138 c 0,193,194 + 623 138 623 138 623 124 c 0,195,196 + 623 119 623 119 627.5 114.5 c 128,-1,197 + 632 110 632 110 637 110 c 0,198,191 + 650 110 650 110 650 124 c 128,-1,192 +554 76 m 128,-1,200 + 554 84 554 84 547.5 90.5 c 128,-1,201 + 541 97 541 97 533 97 c 128,-1,202 + 525 97 525 97 518.5 90.5 c 128,-1,203 + 512 84 512 84 512 76 c 128,-1,204 + 512 68 512 68 518.5 61.5 c 128,-1,205 + 525 55 525 55 533 55 c 128,-1,206 + 541 55 541 55 547.5 61.5 c 128,-1,199 + 554 68 554 68 554 76 c 128,-1,200 +649 63 m 0,207,208 + 635 80 635 80 630 81.5 c 128,-1,209 + 625 83 625 83 617 70 c 0,210,211 + 614 65 614 65 619.5 59.5 c 128,-1,212 + 625 54 625 54 638 51 c 0,213,214 + 655 46 655 46 657 48.5 c 128,-1,215 + 659 51 659 51 649 63 c 0,207,208 +720 -15 m 128,-1,217 + 720 -2 720 -2 707 5 c 128,-1,218 + 694 12 694 12 686 4 c 0,219,220 + 675 -7 675 -7 679 -17.5 c 128,-1,221 + 683 -28 683 -28 699 -28 c 0,222,216 + 720 -28 720 -28 720 -15 c 128,-1,217 +526 -14 m 0,223,224 + 526 0 526 0 505 0 c 128,-1,225 + 484 0 484 0 484 -14 c 0,226,227 + 484 -19 484 -19 490.5 -23.5 c 128,-1,228 + 497 -28 497 -28 505 -28 c 128,-1,229 + 513 -28 513 -28 519.5 -23.5 c 128,-1,230 + 526 -19 526 -19 526 -14 c 0,223,224 +664 -14 m 0,231,232 + 664 0 664 0 643 0 c 0,233,234 + 623 0 623 0 623 -14 c 0,235,236 + 623 -19 623 -19 629 -23.5 c 128,-1,237 + 635 -28 635 -28 643 -28 c 0,238,239 + 652 -28 652 -28 658 -23.5 c 128,-1,240 + 664 -19 664 -19 664 -14 c 0,231,232 +761 -14 m 128,-1,242 + 761 0 761 0 747 0 c 0,243,244 + 742 0 742 0 737.5 -4 c 128,-1,245 + 733 -8 733 -8 733 -14 c 0,246,247 + 733 -19 733 -19 737.5 -23.5 c 128,-1,248 + 742 -28 742 -28 747 -28 c 0,249,241 + 761 -28 761 -28 761 -14 c 128,-1,242 +EndSplineSet +EndChar +StartChar: q +Encoding: 113 113 8 +Width: 1024 +Flags: W +Fore +462 632 m 0,0,1 + 470 654 470 654 508 649 c 128,-1,2 + 546 644 546 644 551 621 c 0,3,4 + 555 598 555 598 533 576 c 128,-1,5 + 511 554 511 554 488 558 c 0,6,7 + 469 562 469 562 461 584.5 c 128,-1,8 + 453 607 453 607 462 632 c 0,0,1 +241 605 m 0,9,10 + 249 627 249 627 287 622 c 128,-1,11 + 325 617 325 617 329 594 c 0,12,13 + 333 570 333 570 311.5 548 c 128,-1,14 + 290 526 290 526 267 530 c 0,15,16 + 247 535 247 535 239 557.5 c 128,-1,17 + 231 580 231 580 241 605 c 0,9,10 +684 605 m 0,18,19 + 692 627 692 627 730 622 c 128,-1,20 + 768 617 768 617 772 594 c 0,21,22 + 776 570 776 570 754.5 548 c 128,-1,23 + 733 526 733 526 710 530 c 0,24,25 + 690 535 690 535 682 557.5 c 128,-1,26 + 674 580 674 580 684 605 c 0,18,19 +47 549 m 0,27,28 + 55 571 55 571 93 566 c 128,-1,29 + 131 561 131 561 136 538 c 0,30,31 + 140 515 140 515 118 493 c 128,-1,32 + 96 471 96 471 73 475 c 0,33,34 + 54 479 54 479 46 501.5 c 128,-1,35 + 38 524 38 524 47 549 c 0,27,28 +877 549 m 0,36,37 + 885 571 885 571 923 566 c 128,-1,38 + 961 561 961 561 966 538 c 0,39,40 + 970 515 970 515 948 493 c 128,-1,41 + 926 471 926 471 904 475 c 0,42,43 + 884 479 884 479 876 501.5 c 128,-1,44 + 868 524 868 524 877 549 c 0,36,37 +493 443 m 0,45,46 + 502 472 502 472 513.5 445.5 c 128,-1,47 + 525 419 525 419 527 364 c 0,48,49 + 531 292 531 292 544 292 c 0,50,51 + 556 292 556 292 551 251 c 0,52,53 + 546 215 546 215 555.5 211 c 128,-1,54 + 565 207 565 207 584 237 c 0,55,56 + 597 259 597 259 617 263.5 c 128,-1,57 + 637 268 637 268 637 251 c 0,58,59 + 637 239 637 239 609 220 c 0,60,61 + 593 210 593 210 586 197.5 c 128,-1,62 + 579 185 579 185 583.5 176 c 128,-1,63 + 588 167 588 167 602 167 c 0,64,65 + 629 167 629 167 659 219 c 128,-1,66 + 689 271 689 271 699 338 c 0,67,68 + 707 387 707 387 716.5 408.5 c 128,-1,69 + 726 430 726 430 734.5 417.5 c 128,-1,70 + 743 405 743 405 747 361 c 0,71,72 + 755 294 755 294 767 279 c 128,-1,73 + 779 264 779 264 810 284 c 0,74,75 + 839 304 839 304 850 296 c 1,76,77 + 860 286 860 286 857.5 220 c 128,-1,78 + 855 154 855 154 844 147 c 0,79,80 + 830 139 830 139 830 94 c 0,81,82 + 829 46 829 46 801.5 17 c 128,-1,83 + 774 -12 774 -12 728 -12 c 0,84,85 + 678 -12 678 -12 678 -32 c 128,-1,86 + 678 -52 678 -52 754 -44 c 2,87,-1 + 830 -39 l 1,88,-1 + 830 -86 l 1,89,-1 + 830 -134 l 1,90,-1 + 505 -134 l 2,91,92 + 282 -134 282 -134 216 -127 c 128,-1,93 + 150 -120 150 -120 201 -101 c 0,94,95 + 223 -91 223 -91 206 -73 c 0,96,97 + 202 -68 202 -68 199.5 -65.5 c 128,-1,98 + 197 -63 197 -63 198 -60 c 128,-1,99 + 199 -57 199 -57 199.5 -55.5 c 128,-1,100 + 200 -54 200 -54 208.5 -52.5 c 128,-1,101 + 217 -51 217 -51 222.5 -50.5 c 128,-1,102 + 228 -50 228 -50 247.5 -49.5 c 128,-1,103 + 267 -49 267 -49 280 -48.5 c 128,-1,104 + 293 -48 293 -48 325 -48 c 0,105,106 + 420 -46 420 -46 426 -33 c 0,107,108 + 428 -27 428 -27 415 -20.5 c 128,-1,109 + 402 -14 402 -14 384.5 -10.5 c 128,-1,110 + 367 -7 367 -7 349 -7.5 c 128,-1,111 + 331 -8 331 -8 324 -14 c 0,112,113 + 309 -27 309 -27 299 -17 c 1,114,115 + 292 -7 292 -7 238 -7 c 0,116,117 + 187 -4 187 -4 187 15 c 0,118,119 + 187 27 187 27 201 31.5 c 128,-1,120 + 215 36 215 36 252 36 c 0,121,122 + 317 36 317 36 327 46 c 0,123,124 + 331 50 331 50 339 49 c 128,-1,125 + 347 48 347 48 354 42 c 0,126,127 + 370 27 370 27 381 44 c 0,128,129 + 391 59 391 59 371.5 71 c 128,-1,130 + 352 83 352 83 329 76 c 0,131,132 + 307 70 307 70 298 84 c 0,133,134 + 289 100 289 100 264 79 c 0,135,136 + 248 63 248 63 236.5 63 c 128,-1,137 + 225 63 225 63 194 79 c 0,138,139 + 162 96 162 96 158.5 102 c 128,-1,140 + 155 108 155 108 173 120 c 0,141,142 + 195 139 195 139 234 133 c 0,143,144 + 254 129 254 129 254 131 c 0,145,146 + 254 132 254 132 249 134 c 0,147,148 + 220 148 220 148 194.5 181.5 c 128,-1,149 + 169 215 169 215 176 231 c 0,150,151 + 181 244 181 244 176 247 c 128,-1,152 + 171 250 171 250 151 245 c 0,153,154 + 138 242 138 242 133 242 c 128,-1,155 + 128 242 128 242 136 245 c 1,156,157 + 150 253 150 253 151.5 272.5 c 128,-1,158 + 153 292 153 292 138 292 c 0,159,160 + 125 292 125 292 125 334 c 0,161,162 + 125 355 125 355 135 367.5 c 128,-1,163 + 145 380 145 380 155.5 376 c 128,-1,164 + 166 372 166 372 167 352 c 0,165,166 + 167 330 167 330 195 285 c 0,167,168 + 227 234 227 234 244 184 c 1,169,170 + 245 177 245 177 251 173.5 c 128,-1,171 + 257 170 257 170 262 173 c 0,172,173 + 273 181 273 181 279.5 216 c 128,-1,174 + 286 251 286 251 277 257 c 1,175,176 + 269 260 269 260 270 281 c 128,-1,177 + 271 302 271 302 284 379 c 0,178,179 + 288 409 288 409 300 423.5 c 128,-1,180 + 312 438 312 438 322 428.5 c 128,-1,181 + 332 419 332 419 332 390 c 0,182,183 + 332 350 332 350 346 340 c 0,184,185 + 359 332 359 332 354 285 c 0,186,187 + 352 237 352 237 363 237 c 0,188,189 + 368 237 368 237 375.5 226 c 128,-1,190 + 383 215 383 215 387 201 c 1,191,192 + 394 186 394 186 403 177 c 128,-1,193 + 412 168 412 168 419 170 c 0,194,195 + 436 177 436 177 455 234 c 128,-1,196 + 474 291 474 291 479 354 c 0,197,198 + 487 429 487 429 493 443 c 0,45,46 +789 210 m 0,199,200 + 789 226 789 226 775.5 222 c 128,-1,201 + 762 218 762 218 756 201 c 0,202,203 + 746 176 746 176 749 171.5 c 128,-1,204 + 752 167 752 167 768 181 c 0,205,206 + 789 200 789 200 789 210 c 0,199,200 +354 165 m 0,207,208 + 345 181 345 181 324 181 c 0,209,210 + 305 181 305 181 296 159.5 c 128,-1,211 + 287 138 287 138 300 125 c 128,-1,212 + 313 112 313 112 338.5 130.5 c 128,-1,213 + 364 149 364 149 354 165 c 0,207,208 +551 152 m 0,214,215 + 548 169 548 169 514 177.5 c 128,-1,216 + 480 186 480 186 466 173 c 0,217,218 + 457 162 457 162 457 123 c 0,219,220 + 457 101 457 101 463 92.5 c 128,-1,221 + 469 84 469 84 483 84 c 0,222,223 + 509 84 509 84 532 107 c 128,-1,224 + 555 130 555 130 551 152 c 0,214,215 +713 167 m 0,225,226 + 703 181 703 181 677 181 c 0,227,228 + 662 181 662 181 656 173.5 c 128,-1,229 + 650 166 650 166 650 147 c 0,230,231 + 650 132 650 132 656 122 c 128,-1,232 + 662 112 662 112 670 112 c 0,233,234 + 689 112 689 112 705 133 c 128,-1,235 + 721 154 721 154 713 167 c 0,225,226 +423 33 m 0,236,237 + 431 40 431 40 426 58 c 0,238,239 + 421 74 421 74 415 66 c 0,240,241 + 413 64 413 64 410 58 c 1,242,243 + 400 45 400 45 406.5 33.5 c 128,-1,244 + 413 22 413 22 423 33 c 0,236,237 +495 -29 m 0,245,246 + 497 -23 497 -23 491.5 -17.5 c 128,-1,247 + 486 -12 486 -12 477 -12 c 128,-1,248 + 468 -12 468 -12 463 -17.5 c 128,-1,249 + 458 -23 458 -23 461 -29 c 1,250,251 + 466 -47 466 -47 477 -47 c 128,-1,252 + 488 -47 488 -47 495 -29 c 0,245,246 +609 -33 m 128,-1,254 + 609 -25 609 -25 602.5 -18.5 c 128,-1,255 + 596 -12 596 -12 588 -12 c 128,-1,256 + 580 -12 580 -12 573.5 -18.5 c 128,-1,257 + 567 -25 567 -25 567 -33 c 128,-1,258 + 567 -41 567 -41 573.5 -47.5 c 128,-1,259 + 580 -54 580 -54 588 -54 c 128,-1,260 + 596 -54 596 -54 602.5 -47.5 c 128,-1,253 + 609 -41 609 -41 609 -33 c 128,-1,254 +664 -33 m 128,-1,262 + 664 -25 664 -25 658 -18.5 c 128,-1,263 + 652 -12 652 -12 643 -12 c 0,264,265 + 635 -12 635 -12 629 -18.5 c 128,-1,266 + 623 -25 623 -25 623 -33 c 128,-1,267 + 623 -41 623 -41 629 -47.5 c 128,-1,268 + 635 -54 635 -54 643 -54 c 0,269,270 + 652 -54 652 -54 658 -47.5 c 128,-1,261 + 664 -41 664 -41 664 -33 c 128,-1,262 +852 365 m 0,271,272 + 862 375 862 375 874 366 c 128,-1,273 + 886 357 886 357 886 339 c 0,274,275 + 886 331 886 331 879.5 325.5 c 128,-1,276 + 873 320 873 320 865 320 c 0,277,278 + 849 320 849 320 844.5 336.5 c 128,-1,279 + 840 353 840 353 852 365 c 0,271,272 +581 320 m 0,280,281 + 581 334 581 334 617 334 c 0,282,283 + 651 334 651 334 648 317 c 1,284,285 + 639 299 639 299 632 303 c 1,286,287 + 617 306 617 306 602 306 c 0,288,289 + 594 306 594 306 587.5 310.5 c 128,-1,290 + 581 315 581 315 581 320 c 0,280,281 +127 179 m 0,291,292 + 124 190 124 190 129.5 193.5 c 128,-1,293 + 135 197 135 197 145.5 191.5 c 128,-1,294 + 156 186 156 186 167 173 c 0,295,296 + 180 159 180 159 179 155.5 c 128,-1,297 + 178 152 178 152 161 155 c 0,298,299 + 135 160 135 160 127 179 c 0,291,292 +EndSplineSet +EndChar +StartChar: r +Encoding: 114 114 9 +Width: 1024 +Flags: W +Fore +298 750 m 0,0,1 + 309 769 309 769 320.5 753.5 c 128,-1,2 + 332 738 332 738 332 702 c 0,3,4 + 332 665 332 665 349 652 c 128,-1,5 + 366 639 366 639 414 639 c 0,6,7 + 451 639 451 639 466 624 c 0,8,9 + 482 608 482 608 490 624 c 0,10,11 + 499 639 499 639 486 639 c 0,12,13 + 472 639 472 639 475 681 c 0,14,15 + 476 722 476 722 512 733 c 0,16,17 + 521 736 521 736 539 743 c 128,-1,18 + 557 750 557 750 560 751 c 0,19,20 + 567 753 567 753 572.5 739 c 128,-1,21 + 578 725 578 725 581 702 c 0,22,23 + 586 660 586 660 595 653 c 128,-1,24 + 604 646 604 646 650 646 c 0,25,26 + 694 646 694 646 704.5 652.5 c 128,-1,27 + 715 659 715 659 720 688 c 0,28,29 + 726 730 726 730 754 733 c 0,30,31 + 779 738 779 738 796 751 c 0,32,33 + 816 771 816 771 823 755 c 128,-1,34 + 830 739 830 739 830 673 c 0,35,36 + 830 608 830 608 826 595.5 c 128,-1,37 + 822 583 822 583 803 588 c 0,38,39 + 775 595 775 595 775 580 c 0,40,41 + 775 564 775 564 747 529 c 0,42,43 + 730 506 730 506 725 470.5 c 128,-1,44 + 720 435 720 435 721 328 c 0,45,46 + 721 233 721 233 725.5 195 c 128,-1,47 + 730 157 730 157 743.5 138 c 128,-1,48 + 757 119 757 119 793 104 c 0,49,50 + 815 94 815 94 822.5 81 c 128,-1,51 + 830 68 830 68 830 39 c 0,52,53 + 830 13 830 13 836 1 c 128,-1,54 + 842 -11 842 -11 858 -15 c 128,-1,55 + 874 -19 874 -19 880 -32 c 128,-1,56 + 886 -45 886 -45 886 -76 c 2,57,-1 + 886 -130 l 1,58,-1 + 519 -131 l 2,59,60 + 288 -132 288 -132 220 -129 c 128,-1,61 + 152 -126 152 -126 152 -113 c 0,62,63 + 152 -105 152 -105 159 -99.5 c 128,-1,64 + 166 -94 166 -94 176 -94 c 0,65,66 + 189 -94 189 -94 190.5 -90.5 c 128,-1,67 + 192 -87 192 -87 183 -77 c 0,68,69 + 144 -39 144 -39 205 -39 c 0,70,71 + 244 -39 244 -39 252.5 -28.5 c 128,-1,72 + 261 -18 261 -18 239 6 c 0,73,74 + 232 14 232 14 230 17 c 128,-1,75 + 228 20 228 20 225 24.5 c 128,-1,76 + 222 29 222 29 228 30 c 128,-1,77 + 234 31 234 31 237 33 c 128,-1,78 + 240 35 240 35 257.5 35 c 128,-1,79 + 275 35 275 35 287.5 35.5 c 128,-1,80 + 300 36 300 36 332 36 c 0,81,82 + 422 38 422 38 422 51 c 0,83,84 + 422 66 422 66 364 61 c 0,85,86 + 307 56 307 56 277 65 c 0,87,88 + 239 78 239 78 261.5 89 c 128,-1,89 + 284 100 284 100 346 100 c 0,90,91 + 401 100 401 100 413.5 103.5 c 128,-1,92 + 426 107 426 107 419 123 c 0,93,94 + 415 132 415 132 416.5 134.5 c 128,-1,95 + 418 137 418 137 424 132.5 c 128,-1,96 + 430 128 430 128 443 116 c 0,97,98 + 462 99 462 99 472.5 96 c 128,-1,99 + 483 93 483 93 494 101 c 0,100,101 + 512 118 512 118 512 101 c 0,102,103 + 512 95 512 95 516.5 90.5 c 128,-1,104 + 521 86 521 86 526 86 c 0,105,106 + 544 86 544 86 536.5 103.5 c 128,-1,107 + 529 121 529 121 491 165 c 0,108,109 + 443 223 443 223 457 231 c 0,110,111 + 470 239 470 239 456.5 259.5 c 128,-1,112 + 443 280 443 280 425 280 c 0,113,114 + 409 280 409 280 426 263 c 0,115,116 + 457 232 457 232 421 219 c 0,117,118 + 399 210 399 210 372 230 c 0,119,120 + 359 238 359 238 355 242.5 c 128,-1,121 + 351 247 351 247 354 250 c 128,-1,122 + 357 253 357 253 368 257 c 0,123,124 + 379 262 379 262 381.5 265.5 c 128,-1,125 + 384 269 384 269 380.5 275.5 c 128,-1,126 + 377 282 377 282 363 295 c 0,127,128 + 347 309 347 309 338.5 332 c 128,-1,129 + 330 355 330 355 333 371.5 c 128,-1,130 + 336 388 336 388 350 385 c 0,131,132 + 356 383 356 383 358.5 383.5 c 128,-1,133 + 361 384 361 384 357 386 c 0,134,135 + 345 394 345 394 347 413 c 128,-1,136 + 349 432 349 432 361 432 c 0,137,138 + 376 432 376 432 357 450 c 128,-1,139 + 338 468 338 468 314 477 c 0,140,141 + 292 485 292 485 297.5 499.5 c 128,-1,142 + 303 514 303 514 329 516 c 0,143,144 + 339 517 339 517 329.5 520.5 c 128,-1,145 + 320 524 320 524 298 527 c 0,146,147 + 266 532 266 532 252.5 540 c 128,-1,148 + 239 548 239 548 247.5 557 c 128,-1,149 + 256 566 256 566 284 572 c 256,150,151 + 312 578 312 578 313 580 c 1,152,-1 + 300 583 l 1,153,154 + 297 583 297 583 291 584 c 0,155,156 + 242 586 242 586 232 585 c 0,157,158 + 212 583 212 583 202 596 c 128,-1,159 + 192 609 192 609 206 619 c 1,160,161 + 220 626 220 626 213 645 c 0,162,163 + 204 669 204 669 222 702.5 c 128,-1,164 + 240 736 240 736 262 736 c 0,165,166 + 288 736 288 736 298 750 c 0,0,1 +408 530 m 0,167,168 + 399 544 399 544 393 541.5 c 128,-1,169 + 387 539 387 539 387 520 c 0,170,171 + 387 512 387 512 391.5 508.5 c 128,-1,172 + 396 505 396 505 401 508 c 0,173,174 + 416 516 416 516 408 530 c 0,167,168 +616 487 m 0,175,176 + 609 501 609 501 602 501 c 128,-1,177 + 595 501 595 501 588 487 c 0,178,179 + 585 482 585 482 589 477.5 c 128,-1,180 + 593 473 593 473 602 473 c 128,-1,181 + 611 473 611 473 615 477.5 c 128,-1,182 + 619 482 619 482 616 487 c 0,175,176 +408 473 m 0,183,184 + 402 487 402 487 393 487 c 0,185,186 + 387 487 387 487 387 473 c 0,187,188 + 387 468 387 468 391.5 463.5 c 128,-1,189 + 396 459 396 459 403 459 c 0,190,191 + 408 459 408 459 409.5 463.5 c 128,-1,192 + 411 468 411 468 408 473 c 0,183,184 +470 383 m 0,193,194 + 470 404 470 404 458 404 c 0,195,196 + 445 404 445 404 438 391.5 c 128,-1,197 + 431 379 431 379 439 371 c 0,198,199 + 450 360 450 360 460 364 c 128,-1,200 + 470 368 470 368 470 383 c 0,193,194 +436 335 m 0,201,202 + 429 349 429 349 421 349 c 0,203,204 + 415 349 415 349 415 335 c 0,205,206 + 415 330 415 330 419.5 325.5 c 128,-1,207 + 424 321 424 321 430 321 c 0,208,209 + 435 321 435 321 437 325.5 c 128,-1,210 + 439 330 439 330 436 335 c 0,201,202 +498 300 m 0,211,212 + 498 321 498 321 486 321 c 0,213,214 + 473 321 473 321 465.5 308.5 c 128,-1,215 + 458 296 458 296 466 288 c 0,216,217 + 478 277 478 277 488 281 c 128,-1,218 + 498 285 498 285 498 300 c 0,211,212 +526 217 m 0,219,220 + 526 238 526 238 513 238 c 128,-1,221 + 500 238 500 238 493 225.5 c 128,-1,222 + 486 213 486 213 494 205 c 0,223,224 + 505 194 505 194 515.5 197.5 c 128,-1,225 + 526 201 526 201 526 217 c 0,219,220 +581 149 m 0,226,227 + 581 155 581 155 567 155 c 0,228,229 + 554 155 554 155 554 140 c 0,230,231 + 554 127 554 127 567 134 c 0,232,233 + 581 140 581 140 581 149 c 0,226,227 +623 107 m 0,234,235 + 623 127 623 127 609 127 c 0,236,237 + 604 127 604 127 599.5 121 c 128,-1,238 + 595 115 595 115 595 107 c 0,239,240 + 595 98 595 98 599.5 92 c 128,-1,241 + 604 86 604 86 609 86 c 0,242,243 + 623 86 623 86 623 107 c 0,234,235 +498 51 m 0,244,245 + 498 68 498 68 488 71.5 c 128,-1,246 + 478 75 478 75 466 62 c 0,247,248 + 454 51 454 51 457.5 40.5 c 128,-1,249 + 461 30 461 30 477 30 c 0,250,251 + 485 30 485 30 491.5 36.5 c 128,-1,252 + 498 43 498 43 498 51 c 0,244,245 +609 51 m 128,-1,254 + 609 59 609 59 602.5 65.5 c 128,-1,255 + 596 72 596 72 588 72 c 128,-1,256 + 580 72 580 72 573.5 65.5 c 128,-1,257 + 567 59 567 59 567 51 c 128,-1,258 + 567 43 567 43 573.5 36.5 c 128,-1,259 + 580 30 580 30 588 30 c 128,-1,260 + 596 30 596 30 602.5 36.5 c 128,-1,253 + 609 43 609 43 609 51 c 128,-1,254 +668 53 m 0,261,262 + 661 71 661 71 642 71 c 128,-1,263 + 623 71 623 71 623 53 c 0,264,265 + 623 38 623 38 641 27 c 128,-1,266 + 659 16 659 16 668 26 c 1,267,268 + 677 33 677 33 668 53 c 0,261,262 +706 58 m 0,269,270 + 706 72 706 72 692 72 c 0,271,272 + 687 72 687 72 682.5 68 c 128,-1,273 + 678 64 678 64 678 58 c 0,274,275 + 678 53 678 53 682.5 48.5 c 128,-1,276 + 687 44 687 44 692 44 c 0,277,278 + 698 44 698 44 702 48.5 c 128,-1,279 + 706 53 706 53 706 58 c 0,269,270 +374 -18 m 0,280,281 + 347 -27 347 -27 328 -14 c 1,282,283 + 313 0 313 0 293 -19 c 0,284,285 + 282 -32 282 -32 286.5 -35.5 c 128,-1,286 + 291 -39 291 -39 317 -39 c 0,287,288 + 355 -39 355 -39 379 -47 c 0,289,290 + 401 -56 401 -56 401 -32 c 0,291,292 + 401 -19 401 -19 395 -16 c 128,-1,293 + 389 -13 389 -13 374 -18 c 0,280,281 +462 -40 m 1,294,295 + 472 -29 472 -29 458 -19 c 0,296,297 + 445 -10 445 -10 437 -24 c 1,298,299 + 428 -35 428 -35 441 -44 c 0,300,301 + 446 -48 446 -48 452.5 -46.5 c 128,-1,302 + 459 -45 459 -45 462 -40 c 1,294,295 +637 -40 m 128,-1,304 + 637 -27 637 -27 624 -20 c 128,-1,305 + 611 -13 611 -13 603 -21 c 0,306,307 + 592 -32 592 -32 596 -42.5 c 128,-1,308 + 600 -53 600 -53 616 -53 c 0,309,303 + 637 -53 637 -53 637 -40 c 128,-1,304 +692 -39 m 0,310,311 + 692 -25 692 -25 671 -25 c 128,-1,312 + 650 -25 650 -25 650 -39 c 0,313,314 + 650 -44 650 -44 656.5 -48.5 c 128,-1,315 + 663 -53 663 -53 671 -53 c 128,-1,316 + 679 -53 679 -53 685.5 -48.5 c 128,-1,317 + 692 -44 692 -44 692 -39 c 0,310,311 +740 -39 m 0,318,319 + 746 -25 746 -25 728 -25 c 0,320,321 + 706 -25 706 -25 706 -39 c 128,-1,322 + 706 -53 706 -53 718 -53 c 0,323,324 + 732 -53 732 -53 740 -39 c 0,318,319 +803 -30 m 0,325,326 + 803 -25 803 -25 780 -25 c 0,327,328 + 772 -25 772 -25 768.5 -29.5 c 128,-1,329 + 765 -34 765 -34 768 -39 c 0,330,331 + 774 -48 774 -48 788.5 -45 c 128,-1,332 + 803 -42 803 -42 803 -30 c 0,325,326 +415 202 m 128,-1,334 + 415 210 415 210 429 210 c 128,-1,335 + 443 210 443 210 443 205 c 0,336,337 + 443 198 443 198 452 173 c 0,338,339 + 458 156 458 156 457 155 c 128,-1,340 + 456 154 456 154 439 172 c 0,341,333 + 415 194 415 194 415 202 c 128,-1,334 +353 127 m 0,342,343 + 347 141 347 141 358 141 c 0,344,345 + 374 141 374 141 374 127 c 128,-1,346 + 374 113 374 113 368 113 c 0,347,348 + 361 113 361 113 353 127 c 0,342,343 +EndSplineSet +EndChar +EndChars +EndSplineFont diff --git a/data/themes/pieces/YahooTTF/Yahoo.ttf b/data/themes/pieces/YahooTTF/Yahoo.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a5edd97a6cc53f4985dad17836da2c1606840b0a GIT binary patch literal 7324 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 + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/data/themes/squares/Default/arrow_yellow.svg b/data/themes/squares/Default/arrow_yellow.svg new file mode 100644 index 0000000..aed84f4 --- /dev/null +++ b/data/themes/squares/Default/arrow_yellow.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/data/themes/squares/Default/selection.lua b/data/themes/squares/Default/selection.lua new file mode 100644 index 0000000..663a3eb --- /dev/null +++ b/data/themes/squares/Default/selection.lua @@ -0,0 +1,22 @@ +import("piece_theme.lua") + +function alone(color) + return function(size) + local i = Image(size,size) + i:clear() + i:draw_line(Point(size*0.1,size*0.1), Point(size*0.9,size*0.1), color, size*0.1); + i:draw_line(Point(size*0.1,size*0.9), Point(size*0.9,size*0.9), color, size*0.1); + i:draw_line(Point(size*0.1,size*0.1), Point(size*0.1,size*0.9), color, size*0.1); + i:draw_line(Point(size*0.9,size*0.1), Point(size*0.9,size*0.9), color, size*0.1); + local a = Color(color) + a.a = 64 + i:fill_rect(Rect(size*0.1,size*0.1,size*0.8,size*0.8), a); + i:exp_blur(size*0.1); + return i + end +end + +theme.validmove = fromColor("#cd9eee") +theme.highlighting = alone("#80ff80") +theme.premove = alone("#4040ff") +theme.selection = alone("#ff4040") diff --git a/data/themes/squares/Default/spiral.svg b/data/themes/squares/Default/spiral.svg new file mode 100644 index 0000000..d2344e1 --- /dev/null +++ b/data/themes/squares/Default/spiral.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/data/themes/squares/Default/theme.desktop b/data/themes/squares/Default/theme.desktop new file mode 100644 index 0000000..9405236 --- /dev/null +++ b/data/themes/squares/Default/theme.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Default +Type=Application +Comment=Default squares +X-Tagua-ThemeType=Squares +X-Tagua-Variants=Chess[default], Shogi, XiangQi +X-Tagua-Script=theme.lua diff --git a/data/themes/squares/Default/theme.lua b/data/themes/squares/Default/theme.lua new file mode 100644 index 0000000..dee9167 --- /dev/null +++ b/data/themes/squares/Default/theme.lua @@ -0,0 +1,18 @@ +import("piece_theme.lua") +import("selection.lua") + +theme.background = function (size) + local dark_square = Color("#6b829c") + local light_square = Color("#b8c0c0") + dark_square.a = 224 + light_square.a = 224 + local i = Image(size*2,size*2) + i:set_paint_over(false); + i:fill_rect(Rect(0,0,size,size), light_square) + i:fill_rect(Rect(size,0,size,size), dark_square) + i:fill_rect(Rect(0,size,size,size), dark_square) + i:fill_rect(Rect(size,size,size,size), light_square) + return i +end + + diff --git a/data/themes/squares/Default/theme_babaschess.desktop b/data/themes/squares/Default/theme_babaschess.desktop new file mode 100644 index 0000000..e240469 --- /dev/null +++ b/data/themes/squares/Default/theme_babaschess.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=BabasChess +Type=Application +Comment=BabasChess default squares +X-Tagua-ThemeType=Squares +X-Tagua-Variants=Chess diff --git a/data/themes/squares/Default/theme_babaschess.lua b/data/themes/squares/Default/theme_babaschess.lua new file mode 100644 index 0000000..9c9baa7 --- /dev/null +++ b/data/themes/squares/Default/theme_babaschess.lua @@ -0,0 +1,16 @@ +import("piece_theme.lua") +import("selection.lua") + +theme.background = function(size) + local dark_square = "#008284" + local light_square = "#c6dfc6" + local i = Image(size*2,size*2) + i:fill_rect(Rect(0,0,size,size), light_square) + i:fill_rect(Rect(size,0,size,size), dark_square) + i:fill_rect(Rect(0,size,size,size), dark_square) + i:fill_rect(Rect(size,size,size,size), light_square) + return i +end + +theme.validmove = fromColor("#ffff8c") + diff --git a/data/themes/squares/Default/theme_chainreaction.desktop b/data/themes/squares/Default/theme_chainreaction.desktop new file mode 100644 index 0000000..7c23971 --- /dev/null +++ b/data/themes/squares/Default/theme_chainreaction.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Default +Type=Application +Comment=Default squares +X-Tagua-ThemeType=Controls +X-Tagua-Variants=ChainReaction[default] diff --git a/data/themes/squares/Default/theme_chainreaction.lua b/data/themes/squares/Default/theme_chainreaction.lua new file mode 100644 index 0000000..fe281e5 --- /dev/null +++ b/data/themes/squares/Default/theme_chainreaction.lua @@ -0,0 +1,16 @@ +import("piece_theme.lua") +import("selection.lua") + +theme.background = function(size) + local i = Image(size,size) + i:clear("#a0a0a0"); + i:draw_line(Point(0,0),Point(size,0), "black", 2); + i:draw_line(Point(0,size),Point(size,size), "black", 2); + i:draw_line(Point(0,0),Point(0,size), "black", 2); + i:draw_line(Point(size,0),Point(size,size), "black", 2); + return i +end + +theme.validmove = fromColor("#bdaede") + + diff --git a/data/themes/squares/Default/theme_connect4.desktop b/data/themes/squares/Default/theme_connect4.desktop new file mode 100644 index 0000000..7ae704d --- /dev/null +++ b/data/themes/squares/Default/theme_connect4.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Default +Type=Application +Comment=Default squares +X-Tagua-ThemeType=Squares +X-Tagua-Variants=Connect4[default] diff --git a/data/themes/squares/Default/theme_connect4.lua b/data/themes/squares/Default/theme_connect4.lua new file mode 100644 index 0000000..752662f --- /dev/null +++ b/data/themes/squares/Default/theme_connect4.lua @@ -0,0 +1,16 @@ +import("piece_theme.lua") +import("selection.lua") + +theme.background = function(size) + local upper = Image(size,size) + local lower = Image(size,size) + upper:fill_rect(Rect(0,0,size,size), "#8090a0") + upper:draw_svg(Rect(0,0,size,size), "arrow_grey.svg") + lower:fill_rect(Rect(0,0,size,size), "#2030d0") + lower:draw_svg(Rect(0,0,size,size), "spiral.svg") + return { [Rect(0,0,size*7,size)] = upper, [Rect(0,size,size*7,size*6)] = lower } +end + +theme.highlighting = fromSVG("arrow_yellow.svg") +theme.validmove = fromColor("#bdaede") + diff --git a/data/themes/squares/Default/theme_reversi.desktop b/data/themes/squares/Default/theme_reversi.desktop new file mode 100644 index 0000000..5c4e100 --- /dev/null +++ b/data/themes/squares/Default/theme_reversi.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Default +Type=Application +Comment=Default squares +X-Tagua-ThemeType=Squares +X-Tagua-Variants=Reversi[default] diff --git a/data/themes/squares/Default/theme_reversi.lua b/data/themes/squares/Default/theme_reversi.lua new file mode 100644 index 0000000..4c2dc40 --- /dev/null +++ b/data/themes/squares/Default/theme_reversi.lua @@ -0,0 +1,15 @@ +import("piece_theme.lua") +import("selection.lua") + +theme.background = function(size) + local i = Image(size,size) + i:clear("#008040"); + i:draw_line(Point(0,0),Point(size,0), "black", 2); + i:draw_line(Point(0,size),Point(size,size), "black", 2); + i:draw_line(Point(0,0),Point(0,size), "black", 2); + i:draw_line(Point(size,0),Point(size,size), "black", 2); + return i +end + +theme.validmove = fromColor("#bdaede") + diff --git a/data/themes/squares/Default/theme_shogi.desktop b/data/themes/squares/Default/theme_shogi.desktop new file mode 100644 index 0000000..85a8f42 --- /dev/null +++ b/data/themes/squares/Default/theme_shogi.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Shogi +Type=Application +Comment=Shogi-like squares +X-Tagua-ThemeType=Squares +X-Tagua-Variants=Shogi[default],LargeShogi[default],ToriShogi[default],Chess diff --git a/data/themes/squares/Default/theme_shogi.lua b/data/themes/squares/Default/theme_shogi.lua new file mode 100644 index 0000000..2bb35e5 --- /dev/null +++ b/data/themes/squares/Default/theme_shogi.lua @@ -0,0 +1,32 @@ +import("piece_theme.lua") +import("selection.lua") + +theme.options = OptList { + ColorOpt("square", "Square color", "#EBD6A0"), + IntOpt("alpha", "Alpha", 192, 0, 255, "slider"), + BoolOpt("useborder", "Use border", true, OptList { + ColorOpt("border", "Border color", "#9C8755"), + IntOpt("bwidth", "Border width", 3, 1, 10) + }) +} + +theme.background = function(size) + local i = Image(size,size) + local square = theme.options.square.value + local useborder = theme.options.useborder.value + local border = theme.options.useborder.sub_options.border.value + local bwidth = theme.options.useborder.sub_options.bwidth.value + square.a = theme.options.alpha.value + + i:clear(square); + if(useborder) then + i:draw_line(Point(0,0),Point(size,0), border, bwidth); + i:draw_line(Point(0,size),Point(size,size), border, bwidth); + i:draw_line(Point(0,0),Point(0,size), border, bwidth); + i:draw_line(Point(size,0),Point(size,size), border, bwidth); + end + return i +end + +theme.validmove = fromColor("#bdaede") + diff --git a/data/themes/squares/Default/theme_solid.desktop b/data/themes/squares/Default/theme_solid.desktop new file mode 100644 index 0000000..3bafcfd --- /dev/null +++ b/data/themes/squares/Default/theme_solid.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Custom Color +Type=Application +Comment=Squares with a solid custom color +X-Tagua-ThemeType=Squares +X-Tagua-Variants=Chess, Shogi, XiangQi diff --git a/data/themes/squares/Default/theme_solid.lua b/data/themes/squares/Default/theme_solid.lua new file mode 100644 index 0000000..e46468f --- /dev/null +++ b/data/themes/squares/Default/theme_solid.lua @@ -0,0 +1,23 @@ +import("piece_theme.lua") +import("selection.lua") + +theme.options = OptList { + ColorOpt("light", "Light square", "white"), + ColorOpt("dark", "Dark square", "black"), + IntOpt("alpha", "Alpha", 192, 0, 255, "slider"), +} + +theme.background = function(size) + local dark_square = theme.options.dark.value + local light_square = theme.options.light.value + dark_square.a = theme.options.alpha.value + light_square.a = theme.options.alpha.value + local i = Image(size*2,size*2) + i:set_paint_over(false) + i:fill_rect(Rect(0,0,size,size), light_square) + i:fill_rect(Rect(size,0,size,size), dark_square) + i:fill_rect(Rect(0,size,size,size), dark_square) + i:fill_rect(Rect(size,size,size,size), light_square) + return i +end + diff --git a/data/themes/squares/Default/theme_xboard.desktop b/data/themes/squares/Default/theme_xboard.desktop new file mode 100644 index 0000000..7e85f30 --- /dev/null +++ b/data/themes/squares/Default/theme_xboard.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=XBoard +Type=Application +Comment=XBoard default squares +X-Tagua-ThemeType=Squares +X-Tagua-Variants=Chess diff --git a/data/themes/squares/Default/theme_xboard.lua b/data/themes/squares/Default/theme_xboard.lua new file mode 100644 index 0000000..a2c3860 --- /dev/null +++ b/data/themes/squares/Default/theme_xboard.lua @@ -0,0 +1,22 @@ +import("piece_theme.lua") +import("selection.lua") + +theme.background = function(size) + local dark_square = "#73a26b" + local light_square = "#c6c363" + local i = Image(size*2,size*2) + i:fill_rect(Rect(0,0,size,size), light_square) + i:fill_rect(Rect(size,0,size,size), dark_square) + i:fill_rect(Rect(0,size,size,size), dark_square) + i:fill_rect(Rect(size,size,size,size), light_square) + i:draw_line(Point(0,0),Point(2*size,0), "black", 2); + i:draw_line(Point(0,size),Point(2*size,size), "black", 2); + i:draw_line(Point(0,2*size),Point(2*size,2*size), "black", 2); + i:draw_line(Point(0,0),Point(0,2*size), "black", 2); + i:draw_line(Point(size,0),Point(size,2*size), "black", 2); + i:draw_line(Point(2*size,0),Point(2*size,2*size), "black", 2); + return i +end + +theme.validmove = fromColor("#bdaede") + diff --git a/data/themes/squares/Default/theme_xiangqi.desktop b/data/themes/squares/Default/theme_xiangqi.desktop new file mode 100644 index 0000000..c354ff1 --- /dev/null +++ b/data/themes/squares/Default/theme_xiangqi.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Xiangqi +Type=Application +Comment=Xiangqi squares +X-Tagua-ThemeType=Squares +X-Tagua-Variants=Xiangqi[default] diff --git a/data/themes/squares/Default/theme_xiangqi.lua b/data/themes/squares/Default/theme_xiangqi.lua new file mode 100644 index 0000000..566eeec --- /dev/null +++ b/data/themes/squares/Default/theme_xiangqi.lua @@ -0,0 +1,174 @@ +import("piece_theme.lua") + +theme.options = OptList { + ColorOpt("square", "Square color", "#D9C48F"), + ColorOpt("table", "Table color", "#B9A46F"), + BoolOpt("useborder", "Use border", true, OptList { + ColorOpt("border", "Border color", "#724D18"), + IntOpt("bwidth", "Border width", 2, 1, 10) + }) +} + +function Pt(x, y) + return Point(math.floor(x), math.floor(y)) +end + +theme.background = function(size) + local square = theme.options.square.value + local table = theme.options.table.value + local border = theme.options.useborder.sub_options.border.value + local bwidth = theme.options.useborder.sub_options.bwidth.value + local rb = Image(size,size) + local rt = Image(size,size) + local lb = Image(size,size) + local lt = Image(size,size) + local rlb = Image(size,size) + local rlt = Image(size,size) + local i_rlb = Image(size,size) + local i_rlt = Image(size,size) + local ltb = Image(size,size) + local rtb = Image(size,size) + local i_ltb1 = Image(size,size) + local i_rtb1 = Image(size,size) + local i_ltb2 = Image(size,size) + local i_rtb2 = Image(size,size) + local rltb = Image(size,size) + local castle1 = Image(3*size,3*size) + local castle2 = Image(3*size,3*size) + rb:clear(table) + rb:fill_rect(Rect(size*0.5,size*0.5,size*0.5, size*0.5), square) + rb:draw_line(Pt(size,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + rb:draw_line(Pt(size*0.5,size),Pt(size*0.5,size*0.5), border, bwidth) + rt:clear(table) + rt:fill_rect(Rect(size*0.5,0,size*0.5, size*0.5), square) + rt:draw_line(Pt(size,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + rt:draw_line(Pt(size*0.5,0),Pt(size*0.5,size*0.5), border, bwidth) + lb:clear(table) + lb:fill_rect(Rect(0,size*0.5,size*0.5, size*0.5), square) + lb:draw_line(Pt(0,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + lb:draw_line(Pt(size*0.5,size),Pt(size*0.5,size*0.5), border, bwidth) + lt:clear(table) + lt:fill_rect(Rect(0,0,size*0.5, size*0.5), square) + lt:draw_line(Pt(0,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + lt:draw_line(Pt(size*0.5,0),Pt(size*0.5,size*0.5), border, bwidth) + rlb:clear(table) + rlb:fill_rect(Rect(0,size*0.5,size, size*0.5), square) + rlb:draw_line(Pt(size,size*0.5),Pt(0,size*0.5), border, bwidth) + rlb:draw_line(Pt(size*0.5,size),Pt(size*0.5,size*0.5), border, bwidth) + rlt:clear(table) + rlt:fill_rect(Rect(0,0,size, size*0.5), square) + rlt:draw_line(Pt(size,size*0.5),Pt(0,size*0.5), border, bwidth) + rlt:draw_line(Pt(size*0.5,0),Pt(size*0.5,size*0.5), border, bwidth) + i_rlb:clear(square) + i_rlb:fill_rect(Rect(0,0,size, size*0.5), Color(0,255,255,32)) + i_rlb:draw_line(Pt(size,size*0.5),Pt(0,size*0.5), border, bwidth) + i_rlb:draw_line(Pt(size*0.5,size),Pt(size*0.5,size*0.5), border, bwidth) + i_rlt:clear(square) + i_rlt:fill_rect(Rect(0,size*0.5,size, size*0.5), Color(0,255,255,32)) + i_rlt:draw_line(Pt(size,size*0.5),Pt(0,size*0.5), border, bwidth) + i_rlt:draw_line(Pt(size*0.5,0),Pt(size*0.5,size*0.5), border, bwidth) + ltb:clear(table) + ltb:fill_rect(Rect(0,0,size*0.5, size), square) + ltb:draw_line(Pt(0,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + ltb:draw_line(Pt(size*0.5,size),Pt(size*0.5,0), border, bwidth) + rtb:clear(table) + rtb:fill_rect(Rect(size*0.5,0,size*0.5, size), square) + rtb:draw_line(Pt(size,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + rtb:draw_line(Pt(size*0.5,size),Pt(size*0.5,0), border, bwidth) + i_ltb1:clear(table) + i_ltb1:fill_rect(Rect(0,0,size*0.5, size), square) + i_ltb1:fill_rect(Rect(0,size*0.5,size*0.5, size*0.5), Color(0,255,255,32)) + i_ltb1:draw_line(Pt(0,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + i_ltb1:draw_line(Pt(size*0.5,size),Pt(size*0.5,0), border, bwidth) + i_rtb1:clear(table) + i_rtb1:fill_rect(Rect(size*0.5,0,size*0.5, size), square) + i_rtb1:fill_rect(Rect(size*0.5,size*0.5,size*0.5, size*0.5), Color(0,255,255,32)) + i_rtb1:draw_line(Pt(size,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + i_rtb1:draw_line(Pt(size*0.5,size),Pt(size*0.5,0), border, bwidth) + i_ltb2:clear(table) + i_ltb2:fill_rect(Rect(0,0,size*0.5, size), square) + i_ltb2:fill_rect(Rect(0,0,size*0.5, size*0.5), Color(0,255,255,32)) + i_ltb2:draw_line(Pt(0,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + i_ltb2:draw_line(Pt(size*0.5,size),Pt(size*0.5,0), border, bwidth) + i_rtb2:clear(table) + i_rtb2:fill_rect(Rect(size*0.5,0,size*0.5, size), square) + i_rtb2:fill_rect(Rect(size*0.5,0,size*0.5, size*0.5), Color(0,255,255,32)) + i_rtb2:draw_line(Pt(size,size*0.5),Pt(size*0.5,size*0.5), border, bwidth) + i_rtb2:draw_line(Pt(size*0.5,size),Pt(size*0.5,0), border, bwidth) + rltb:clear(square) + rltb:draw_line(Pt(size,size*0.5),Pt(0,size*0.5), border, bwidth) + rltb:draw_line(Pt(size*0.5,size),Pt(size*0.5,0), border, bwidth) + castle1:clear(square) + castle1:fill_rect(Rect(0,0,size*3, size*0.5), table) + castle1:fill_rect(Rect(size*0.5,size*0.5,size*2, size*2), Color(0,0,128,32)) + castle1:draw_line(Pt(size*0.5,size*0.5),Pt(size*2.5,size*2.5), border, bwidth) + castle1:draw_line(Pt(size*2.5,size*0.5),Pt(size*0.5,size*2.5), border, bwidth) + castle1:draw_line(Pt(0,size*0.5),Pt(3*size,size*0.5), border, bwidth) + castle1:draw_line(Pt(0,size*1.5),Pt(3*size,size*1.5), border, bwidth) + castle1:draw_line(Pt(0,size*2.5),Pt(3*size,size*2.5), border, bwidth) + castle1:draw_line(Pt(size*0.5, 0.5*size),Pt(size*0.5, 3*size), border, bwidth) + castle1:draw_line(Pt(size*1.5, 0.5*size),Pt(size*1.5, 3*size), border, bwidth) + castle1:draw_line(Pt(size*2.5, 0.5*size),Pt(size*2.5, 3*size), border, bwidth) + castle2:clear(square) + castle2:fill_rect(Rect(0,size*2.5,size*3, size*0.5), table) + castle2:fill_rect(Rect(size*0.5,size*0.5,size*2, size*2), Color(255,0,0,32)) + castle2:draw_line(Pt(size*0.5,size*0.5),Pt(size*2.5,size*2.5), border, bwidth) + castle2:draw_line(Pt(size*2.5,size*0.5),Pt(size*0.5,size*2.5), border, bwidth) + castle2:draw_line(Pt(0,size*0.5),Pt(3*size,size*0.5), border, bwidth) + castle2:draw_line(Pt(0,size*1.5),Pt(3*size,size*1.5), border, bwidth) + castle2:draw_line(Pt(0,size*2.5),Pt(3*size,size*2.5), border, bwidth) + castle2:draw_line(Pt(size*0.5, 2.5*size),Pt(size*0.5, 0), border, bwidth) + castle2:draw_line(Pt(size*1.5, 2.5*size),Pt(size*1.5, 0), border, bwidth) + castle2:draw_line(Pt(size*2.5, 2.5*size),Pt(size*2.5, 0), border, bwidth) + + local retv = { + [Rect(0,0,size,size)] = rb, + [Rect(8*size,0,size,size)] = lb, + [Rect(0,9*size,size,size)] = rt, + [Rect(8*size,9*size,size,size)] = lt, + [Rect(size,0,2*size,size)] = rlb, + [Rect(6*size,0,2*size,size)] = rlb, + [Rect(size,5*size,7*size,size)] = i_rlb, + [Rect(size,4*size,7*size,size)] = i_rlt, + [Rect(size,9*size,2*size,size)] = rlt, + [Rect(6*size,9*size,2*size,size)] = rlt, + [Rect(0,size,size,3*size)] = rtb, + [Rect(0,4*size,size,size)] = i_rtb1, + [Rect(0,5*size,size,size)] = i_rtb2, + [Rect(0,6*size,size,3*size)] = rtb, + [Rect(8*size,size,size,3*size)] = ltb, + [Rect(8*size,4*size,size,size)] = i_ltb1, + [Rect(8*size,5*size,size,size)] = i_ltb2, + [Rect(8*size,6*size,size,3*size)] = ltb, + [Rect(size,size,2*size,3*size)] = rltb, + [Rect(6*size,size,2*size,3*size)] = rltb, + [Rect(size,6*size,2*size,3*size)] = rltb, + [Rect(6*size,6*size,2*size,3*size)] = rltb, + [Rect(3*size,3*size,3*size,size)] = rltb, + [Rect(3*size,6*size,3*size,size)] = rltb, + [Rect(3*size,0,3*size,3*size)] = castle1, + [Rect(3*size,7*size,3*size,3*size)] = castle2 + } + return retv +end + +function alone(color) + return function(size) + local i = Image(size,size) + local g = RadialGradient(Point(size*0.485,size*0.485), size*0.54) + g[0] = Color(0,0,0,0) + g[0.2] = Color(0,0,0,0) + g[0.78] = color + g[0.85] = color + g[1] = Color(0,0,0,0) + i:clear() + i:fill_rect(Rect(0,0,size,size), g) + return i + end +end + +theme.validmove = alone(Color(255,0,255,192)) +theme.highlighting = alone(Color(255,255,128,192)) +theme.premove = alone(Color(0,0,255,192)) +theme.selection = alone(Color(255,0,0,192)) + diff --git a/data/themes/squares/Default/theme_yahoo.desktop b/data/themes/squares/Default/theme_yahoo.desktop new file mode 100644 index 0000000..9b34ffc --- /dev/null +++ b/data/themes/squares/Default/theme_yahoo.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Yahoo +Type=Application +Comment=Yahoo games squares +X-Tagua-ThemeType=Squares +X-Tagua-Variants=Chess diff --git a/data/themes/squares/Default/theme_yahoo.lua b/data/themes/squares/Default/theme_yahoo.lua new file mode 100644 index 0000000..649990d --- /dev/null +++ b/data/themes/squares/Default/theme_yahoo.lua @@ -0,0 +1,16 @@ +import("piece_theme.lua") +import("selection.lua") + +theme.background = function(size) + local dark_square = "#319231" + local light_square = "#cecf9c" + local i = Image(size*2,size*2) + i:fill_rect(Rect(0,0,size,size), light_square) + i:fill_rect(Rect(size,0,size,size), dark_square) + i:fill_rect(Rect(0,size,size,size), dark_square) + i:fill_rect(Rect(size,size,size,size), light_square) + return i +end + +theme.validmove = fromColor("#bdaede") + diff --git a/data/themes/squares/Jose/marble04.jpg b/data/themes/squares/Jose/marble04.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db737f68c78c24728eda472cbba9895f88cad321 GIT binary patch literal 16642 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 a4we^>xHp8~7_6tG1!V4_-@my3@V@{vFn*H& literal 0 HcwPel00001 diff --git a/data/themes/squares/Jose/marble13.jpg b/data/themes/squares/Jose/marble13.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fefef7325734c79336a950550f2ba58eed2152a1 GIT binary patch literal 32093 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 IG@ft&*~htYcu_bxCyDx`7I;J! zGca%qfiUBxyLEqng6t)pzOL+-SU9=$H4MTUfjXJKdb&7Uw> z`36Q4nv5oO$2iQ=2%4qPdfR8d67O~gN5{?}wIxpvcYZv+$$GQ1%7O(_?mOsv-RF<*K9dE7YpiUgU;Vhh@SJ{| z)Gyz@W4>3mgns_JP0nt{)tY;u(bL^cb~gUAmVDK}Jpc90&)>iPI=kxEJ+EE9a(Cum zUB6%E+T`QyrC(ydS4yu~wd(!xs-Mp*|NguE-99JFBX3{%@xR^8yJP3hQFa#69lh=;&zZ7$t}&eAupR^R4||@Z9^{ zA>WeatFxB%t256!f4l0_j{;%kjiF_$XT5An3ubTsp7!-~|Myq_7S9#mx;=be*>>OH z(AZGk@O!114!*%#H($Q;F7NZp?}tB~GCdZawPw}RUDMJp3;O0QD3rVApvf+vd%ir)hB1cRrmpUXO@geCwi@179= literal 0 HcwPel00001 diff --git a/data/themes/squares/Jose/square_premove.png b/data/themes/squares/Jose/square_premove.png new file mode 100644 index 0000000000000000000000000000000000000000..ad7bdca1391dab94e0ce7c9c5ee0a95405cdd4d6 GIT binary patch literal 864 zcwXxa@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cu_bxCyDx`7I;J! zGca%qf-qx!O8i8iAbW|YuPgf{HUVC1_GhIrKzXLOo-U3d6?5L+@bwc3WN>}>dsR1^ zbhE|92S<(^k(FrMB{KbK)E#E+f{wnBKkwVty$gTJrlDk+x!`Hd$mSM(Y>VWH(BMZ z?)wYVj1?5$-f%owFxk4~cyDb=tW?0s2~~#vYwa(Wi%WXlePMCe*Vo$nw%oFrXM)P~ z`ZK=pZCO|U>G7A^x>~!Fum0$$x|Ph|a`~`~%-(YkFTQ>wXSe^JtcIu2n$15xD(c_g zQ@wTN#9hB%J^Jk#EVqpBv-kP+b)D~i`{rB{yJ=l9@np&$`-f8*d5`YD{5{tA=IIN4 zXgsAB&zj|NFOcu_bxCyDx`7I;J! zGca%qfiUBxyLEqng6t)pzOL+-SU9w8!gH-nkm9l`DUw_o}cbKk=H>oP57F|25witCM@rs(m+~ zZR79qW&X}tPrhYMwO$>%?zwsS0+pY0o;;khbNBZ0&nj#w=6mLRKDgAdXv@=S`zku_ z%{c+IQ94;?pLz_>iQAdy(swdnuh3#zq@*xPkU&H;OL_ABf28ndwqD=FjT`ovF5vcj zwepT+1n 0.5 then + img:fill_rect(Rect(x*size,y*size,size,size), dark) + else + img:fill_rect(Rect(x*size,y*size,size,size), light) + end + end + end + return img +end + +theme.validmove = fromColor("#bdaede") +theme.highlighting = fromPixmap("square_last.png") +theme.premove = fromPixmap("square_premove.png") +theme.selection = fromPixmap("square_select.png") + diff --git a/data/themes/wallpapers/Buda_and_Pest.jpg b/data/themes/wallpapers/Buda_and_Pest.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb1ab503dbcf2be3231a5c3431e5a7f159e04e0f GIT binary patch literal 197500 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

Wc9w|P3gUj}>Km1PoOSkB)V$Vr&zpQn@ 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 literal 0 HcwPel00001 diff --git a/data/themes/wallpapers/Dark_Sunset.jpg b/data/themes/wallpapers/Dark_Sunset.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6d0e94c289df721d638351aa608a1851db83fd7 GIT binary patch literal 749634 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%0D*gpLn`8G9c5q* zMOh|MFz{EyPaRZq1D1A`SZ_u>ZJi;Gl0uS7s~c{X-8Lq+17>13031^nR!03uq-KzSB~@Wa|_NUETTK0!0)npHg|`Z)!ylQqoAp zRTtb?08d81uOmQ^Mr5d+y%^&p<)o2>aRmb-IdBwYd%E*a>u>58xK|x%YWg+$X_ao> z$k$Z#w7tmG)<$}{G|dH6+Xa>ys8!^)EOgBESJ~X8iiKg^h!`|8<`M|Yuwrdh5m!^l z?7>wLN9Jc@0)kX>%*cw)vLY916gDK1X;nt-%xKU9a(+M(Ks3L4Bhz1Azg`*_w3>Qo zEBizA{br~-%KrdI8ZzGLtySN|^*E+uGsjUCech7LMK7q)y2!GkJbO_3b=|(qcH_QX zx~=VIq_RP4(<^VMqtTPmMGZY}hp)Fn@mTJ5wv7OUQnN+(a1E2H-5S56e*Xa5>7>+pH%;9x z8V|UQTO4n!taiap){1zhW|j-Q^H81XvU66-j|=8VNb7sT{-Tqdki|%0f`n%(S0~&E z!5QPvBdl-r%i5h?uk=2O*1e{;+-ke++dXe(pFvjHc8j#un%0^+>wQC&RjHwhtWr!8 zptNx#Oq+ctW$F8{UsN{U=2X^p-@6pCcDw2~OjXHg)!G{Rt7(T(-04%(Yo?qtm5O6n zAq^!IDG~~XCI*=$L)5V|MB)hxovtZZY~tJbdj9~bSim+L`Hc`sSjfg!Rs3dYnhR5d_IQ$Rko~>W&zu(sk!g)5~ zTWMl2a6Q>00dP;`;ADZudiYg|Cu0v8$o;?T{{YX=O27&Fesjkhf=3wt0DSy;J$!d( zPfb@KXC4%Scsb|x9!WVLwt7DP{{H~n!ZHHjl0uf?oDVNMoDfC4hMxG{*^o&A15GrK6)@< zg#ktffHCL({(0zQ1fSRpe?oux=r^oX1jh_df_V7G0m(l<>`xti02~&`BjX+qkCM5^ z#z6kv7%)r43}79rmG>?N+_vA4Keq=X=Z=U|iBX&l@{@qM$OxwdgZ@?nBl`aUeuh^8 zH=JZ*S)}EEd~?n`kV!v|dPjD-+pP3cU2gXp8*QqDFWp>g=UQrL@>7E&GVW&N2-9=1 z1S+xU0FyvjI{-N+whSr|szW008Ihch2l-h0LBTjBMou_5AC8-=8itGr#`*Nq#l`^jjaq_^MWzfo!^ zsx-8>lMR3HNGKu|CZ_NyB%nT`w7!h9BAmCjJlvxt1euAwApoVZ<`!ZV6;K^|naZNr zt!x433mTc6Mw^yA(bGe6Y>FT)lShC^!Y`n@`yFp>?{->UQ{8UfYAdd}*4oEQH4$n( zJFBb}lhVZ$)>!Lk=7QyXgwn}QV_8&8xQ&?X-nEC-br|=6^x$EXJixCMFBg`fn_Q}!>Lg1L*EI4|d15J; zfn>08<)|R~EnUNEBzjbyg7p6Y)n{nCjr7wsx4zbYsjJ05f4kqU{{Z0|<)YU`9h%Em zr&@_9WxP|=nz^d#Etb(0H5*mb(!{JV(Khkdp#K0%ouJhnsO{ji-tK+2zf@hscdCx! z=&HG@>or|1Of7J)xa$2;Uo??S)bq=ePHG}p8D|X<$5qC(`dOv#9j;#Q{aN1Vsjl|x zWdWwP(OzEJp*vxtDdLIhX{c(;Q;Y7Rc%_fkVt}FG%8VdSvx|%w67V2uJfrRjcB^6jUf6eErS?uh72_%`B6wMxOogh-M!MV&mFx)ZRt}>UGJ8r=UTCCiRx-uvfGL(D-bWA zrr+?x?ss))bjG^wt=5;e9lF1m>*J28+I??zv=g{g&{$bjsn)SQ^z+xr2dIvcsC0EL z>^EsXlK!5%4Od%T+pQNZW#YQnwyE_Fu$mkF(O`VE?MF{MFGX#ZV&3UsjVciEk|g@Xqjjkyv&YB+9}OWwN7@7I3VrKmETDL zhQgQ|Bg6d-{usYi8pgqE)YZCj$)jj5A}Q_g>ihKtrsYv?kyYB}miZ(zigb;Y)nr7H zKt{wob?N^AWHD?RR@;WZ6`kGI@uJUOwT^ANCf`(YMLjJHfBD<8Q@WuuRMb;O z?iqa-jPvNTME-zDWD62eh~flpkSN#!Zf(a1s;a06K)3)7dLYrPL)6Y!b{7XN>Udqi zfS_YLz07cM2hUoWF97holPrq|nIh~YpZTp~j-VKMXxtr9qLEt=4H~m&vvUn4^r_`j z(7WxYZ&3q~7?IAz;i@PjrlX{_)6-JhtyD0jJ+{?vr;3W#Z=_O6!%Ia9ED=ULsZ|8A zW@7Bw8JFurxfg!W{WA9>Q&=e|XSrYg%RnuCbwG?;X>}Y`F;>krc4I>Ju5&&Q&+$1HbfwGqiv+jy<_K0~yZjU~)ze{{RuaEor`eC+fSUTUVvaNa}4h zd$cSS5-kjp)>OT!sVk{e`f`H=;i=@4-5iJ&a2RJ#I_{Y)+r{a0%S_Rbc#&deRpdWt2dwyBz`ik`8Dpp_La1uw57I@7e?yCbY+di9%4XiXpVWAz_twQ0%Zvi1|| zHpwNnhN}MnS-mudxv*42RYgNtbDPjd1zYXJwHqU7?hPpbMYvr507RX?qV4|x(+6y+ zt=C(ve0tv5CcC&rSwHfrZkKr)hFg6EVai8I1UBeoL|~<)o!qZGx_kPz?9I!){gJuo zJ2e$8ZmXu$ntM@LBCD)QSkTebdKZYre?M(CRklKcK**$`t1_HtAHzHzEQUrYpo~6z zqGlRLDqW>90VZ7}5rUAtv_obKtjI$!7`K_uK4NxB4MAowsvAgMUY9GY)WU;a#MY5O zk&Ol^>7|VkmYSghMO_QCMNto^2dPa{9H?Z9K&3>{NgH4~jgCkiQlI^R?k=I9U21x( z#iz8rin>;6w3Q@#VAQ&&Ow)xjLtQ0Y%B^e&?acQKeB!y_{!Z2lX*4}eB9!n{h%}Om|jI~(1 zBmk?^Q?Xdo@CyUjiZDdeO&m&hW&`_^?i5)dasjV@3cJ~_YI~pEO@FWI_?uU1%kA@E zELJG1?laUw8W$zDBu{{RlFeO-6ecWwwt|VIGRj`$#o-wO9U)f;Afsk^(Xw?7gqNut=Bp2RPfc_V6)t%v(nB&K~Z)z63J_Z zS2+rjRxCl>fD<|343BY&IN^;Vi558HRYXJ-s;UC2fzSW|7~+|k*t-(U#Fi(LPbA`i z`hNZ-EWOC2mVz2hIc)C^v8K^=Yb!jr8#I!~HDM~_K9x1Zvc&mPM2rfMxfj!xiNOa1 zg~`T11mhrn%6tKzA2`J!^xXFp?RC1zeS}f!YYoorL#n8nLh{>n4E2&$)yFcCg!SW* z8Yjyv(Tu5Ju0``KD5M2vV#7IMk&p?%#(Bs9A3r2<)UC4{)OWvD%t72;0Y;A%x4$@O z;BoTfZrDztLk1uaLl8;xfN{Xdh)&OiEkZVY{!VRBS(!*@CTM$vDQG%iaw7TGtyffnjHb8G3a2awy!2}HM z8QO7@2RPv5XFQHhI$zekwijRV^6P^HBCE%T0rzKmlg3EFQ_qZf8RQ>4^$gY>xY0V* zAd^t(`dO>#XIbFA+g+_Ux^GWuRgU9D>B`Cik_4t)633k9snhHOcb%jSsy|lafN&4_ zP6_8AasdOPBo4tgI7~>TvH{$`E8vh$e;FM3^U|qcK~h2PEPQz9YQCoiGacu*9p<&s zUMTctyt8WS70FUKG`DhX)hi`EFWdTa#G0OhYIkYmR3TDiD0hD_y9|`}-s|^5!%ZD7 zw)%P2bP-YpqkEQ%yW6!@4Ak_fuq4n?CfcQmk|5C`k)$z|Q>&*{1bV7S>|;(cs_tF(Fw`z;N=TG}mJUuhR= zmq_mMQ_Db=D@jawlCqVi-6NKF6z+C_f=r({K9Q>}I-gwI`#G;Qb#K5>6ubE+b0r0VI}N)sI8#Z z?MQy9wRN&8PS$qcTj}j7+b-YUsYPTr+6tSDKk*i#yZy!%u2A)K^{!-AhN5SVokG)6 z;QAYP5Q{desg9lmifuoC+?3SoN~B3;s*Ey43~Ll(GzzO4DFQGQU?@FA`>A85y7rq` zY0DkDj>m7cX*$)@)_N!*rlGfsEK$@_LlVTOr)tp+^O9wdhmoC$=`9uRx~sI+xBI`_ z)7De=*5z`zniefhG>fMvjJy&|Q8vpng3o{*iP@c?H+7cFjJzjPYnj_#Vq&%CIaM54 zAyh7i(@_ziMFpsni6iTMhLi%4Z)E`S+Q~YY(6%I=mHBkLAQx)IAEm2mR~&!+Lnu;w z4DplWpT}RM9@|{(moD7sKH2K3O3ej!Z4ITU?N-_vxag@bma%P0$m%Wk26;rwaz~uj zMz89{Gf0>P)l>6vaga%IoI!I3J*uw} zn53LW^zT%d-|4>dZQHKYms&_}HtM=-g#_-61x+NYJTpe$=1CL;Ac6{z#5P7)4CB#@ zFbV}w+%U6t4)%KYun0TsZx{drW{+YGZN&|?+J_hO#A9FR4ISJKEnj5T8g|)rrb}gW zP`tFT$6051=_heLx~?Qi>DD}CD0Yl(Ms#ANoRjq3+$|rW`x)DfA*8Lf+TXZ0N7Qu< zq;&9-qIy||rMyQAY8#`oQCTUPk{Wt~r);L4Xr{nf107Y~Jy>)vX}guHcCe|mXxqFN z@c9L9_b8UvK$zOf(g|yK6ky6iupZ(MP#>ng*xNf*+MO$Fx6?f}_fgoWulmNdmBnRc z+VLOVyaD7sq*S!D($mwVNMnq$mSxYH3@ux38$8GXn&>bJN3#Mkf<-0gQ!rY-eUgnP36-jD{zHf(XuWjAO5|MZAsVvhY*j?IVsnW1pO!FgWVp z(&$|Zy8FCGf){emP%+vRaqtTeP6vU@ZUArzI0GlIvTTYskUm(q0FTmJ@sW;sI2rNI z2VA_!hiT(rz&=Y3J-O#OTmp0d0JlWTG90T0!ztl_B>oDJ#0(s6%LBK-J~}X9u*Y`g zQsn#rl1J`8_aF4=&=rg1Fnj&(>)q-r30Llu}vY~AHLN*0j zF~;R!%ER?39a581#oLWl6-rL@+DBMc!9nO$P8tgypqtqg6smVL6jv2s5;YEyw$XwW zLAu^XWk7N5BHpC%0N86e8<-Bagp+D*F5}9Hoj%-u7!t zoYj>RQ`xkBleAjsN=Yp>1x0ezRNTZEakcA2B3WIREFWpd7=is)ccFVV*~`TC>WM$& z4QcnfV!;p&rjC}bk>R`6l9*+ZI$5?tI12LuNehmhy8&{&>gx^fx!RE_X)F7MdxGO^ zq=HEt(^@TbQQK)uirMsiSyE>a<H$ZM zqarrEIy+<%%n1a$Eovqs4|dCEYcz@alDl51292nNGDSs0162tfHxx%MI4hl zqA6m|tEdB|bx@*s6|l3?$)RTsA49g}r0jxR;X;Xh*4nPIw=wieLp3ElOA06oqBvu4 zLEJ$gWDYvm<7$Ezkfh*&fsZ_VamXk0kWPBf{{T)}2D`T1m(dzx>s+;U(p#m}vu%LD zlwa{9rNTNU4&|O$A|WPls0$D_9Aw@x$PzazE=eEyW-@+BMpp200|U1p90ob*o*NUv z;n^5uT@pu>%dCmFra=;Ui?JhT)HWn`HG?$4^Aob2N@a4b-E|!&zT&yxzW7qiTLlQ( z_{sdP2*~n3wlIErPO^Y9h2)NWy9~R@hV)+5v5&0E}RsIlu>w zFc0Jm9)r4t0D>b>6mB^<@>!VRaCkW9K0F?Xbw*WjE=qe@P5|{A4a;%~MJIL+0XWV< z9T+fU%&a{}T#{QGPUE~_DxZK)KR!P_67?yt%8QlB3%G!H4+96B0nZ%%!1*I147=5s z4+?RT7-Jp=c7RFo=La|)6_oz~?YRdBDljp*&>nXT3=h?ia7q38a2>%v4t|``@3+@% z7z;XtVB`$DI3FONA%8jkym8bsRO@XaqiH_xRO)&gLbN~#Y9>jmst(}a`72BYO8SXh zF);v`##?XzlJR@I*{l|8j-k{w@LKFvsF~{Pr7E%u@*_$=uo#`cbZYC*jx}It(g*6KtqFwJSY>7^10!bJt z3$Sd~sqL0~RkpH7Dl2F$cKS-W;Q+@aRV@@0^*))962sOlHLtkC{ zr8FX4FQ!&q7u%>;V#8BW45RqwqDa>(yLd2D&QXkq20RGxEZdHuw%VN*zN6BVGHr!_ znJlj$B&x!hX&Y`>r~o4Si!TSJ!)U^vw}Zq=)775Z}j012$LT$9qCnlTd02Kd{3EYn3d+RCLz z^I=Wl8NtfAQ;a)}q;DOQY7GtA9^uqN`j*vSJ=;d=O8aR|H*J(j5vaFaYFa62D(+FU zBvir}YE%%!GRlDH!LPMWs;#V`(3)~u6K!{fqgUUd4QQjPB2u4WZQSPLQmm-y9F4Pn zHz`#os(#7X%8%ii-u>K4qOcJy&J|Y*GItgLU=znD z1Cx(A>#tm_D!e(s1Z04V$qHDV*-VvOw>}4f(m@#*U_^YlQ894s{f6qp$ zIg&_$+`C5Ra!%2J+1vBa^zqXublhxD%7=Ts$@%~=VPSSCA0PlhWZRc22ra;3MhAm| z$2j=t(KEDBo-&wH*Gj@1_4kqae?#r^Vi5F z2h=h#+ZoTiA8vUcIR4*0I%OK;gU`@aeE#bO90a>I<*>V0H;gyQ;N)_-AJg;E=~Ws# z23BBHZUk-{K_n1>XUIH^cs_b>$&oi7l^bxQ1fK*i!!TimIS294qIL+uLG@HB7IYg* z7CFG?L% z91Ie9K00spf0eaYI6GN}>=ToK2Y`I}$v8cBvdI$#2%$_^V9HDH&ehsf5$7O=#&A4m zqYHgHf5!b!Pw|H|+UOkd=`jumm1EB32Zk+-0zu%MV1Rm24ADeecc`L34?aQoT>Rtq zILW~nI4yBB(T7*S%Vo3VkO0BM5$(qr9Ay4_?9_l9kfuNfrVdKvovizOZVQkPz$c90 zgA04tz+U@o0r%RvRrT9!JHb*N+jAVp8B)Y!a1HEY0Knj$a53XNkC-gKnFaK*PTe z?PYAK%MHL|zylwgv9#5W>G_pG)u@UVD^?u-z zNybL*F^qAK>(g`%sMh}g-)_5B7g+1Rx6^*z`t%iB;pj~60c?zALa^ijG5vY+4s)EJ zJt>N<(-F71I2b?W&(3*1J_+%U+ooiZ-yD@YNF#P18%bFa8)~q~B>aU0@CPP`kd2x5 zP|Osgc2jr$pp_#A~{oD-6`1YrLFrZdk<(p8c- zl?YW_0HCQJ;&Gqda!>l_gVSqk>BbihCjucBP7Zy=iP~84&VR}{{j=veJ#>?^D8}Vv z8w+^c2jFc{OW#mP~)sU-aVrN#l{ zo(JO?#tay74nrYavJB&syC?N-2L~tP;PNs$SXxOqQoyhX2G9^5NRXTk03>Jg$DWyk zmvkd=VxR?X2?{a#Kp84Af;|5KeDu84EL(q>jIl)wq&u8pxER}pU^zUlNb}Ky3*nF~ z%*?6?Rs?1I5?Bzq+Ibk{4DT8eB}P#f452sHr2^_9H?ah zlqf<5Gm)I+5P3NL`bysYtLyj2x$lDuy+sSWw1PAzVM2DZ{O38y=i?lK^T|;x%P5SY zz#pmpHz)+CKR@+3$AgZVqrfB75<2b-(0~_}&JhW0w&8<-zD^GSkhV7xNYWquFx!l3 z6nMrJeZZU^9F->^{{T*qfwx|t9tQhwT;Rg8?x`3?!!hKOyJ*MmNFINu#~mtJvd@Ox zKTh0oa7VpyjyXBWJPhOxn}@x3M1&)|BC8XEN1jguB!5%!(S}52D;kDE3YkAG@&N}q z0E3^7JoM5#fkL}k;`re6d+&cd7;uVJ-MJh%8%P22PBK`Hr}qHk9E@ip9Rn+6!zkf_ zP`TZ(k0j^GB!D>}FP?fu2wHR`4|c#nX22`P2`7x6f2rj89ViacIbnh6g~x50&`se-B?@GwG*oMaA9Bz*Yz&+K{zQWOB7kPb)5 z$3f_Qar>8Ol&R)C1yTmq01r6#WM?_~{qv5x6>_r|C0a*d?4<1q$_5TWQ?woc zJn%PuOKLj2Xv#R+J=s3*+=IaR@Br(uNWuO80M{7E>6kF(9b;jnl=6RLiG4L^u93FaVa#l5wBUvA8jFFdBR%P+(dswL_ARc)M z;2x@m?$y5Ee7RWf8go+G7J$2l43;Veu-x~Y%`EWx&d2kAM;&f*R~ z1pfeGRoeTZ+uPidQ&DRzJ1u+@2&JK#x+*%@>-I6iZZGsnTmI270ZICgMS zwPc;%?ae(sF=di!jZ;8@3$P$Ygqfs25t!qApVB}%6>g&X(E57P@lR70w7Kg^Xk>4= zgF)%~>-2|Y(MAH+RDG4WERsvMIa+cz1=yCnt0Q5y+wU8%q3+Ylnszo zSPO=RtW?@5uSw{os;ZI-xGUwUjv7X$mJuq+_mjF)pbFT1?z>1J;j@fwMcrSiF7?n$ z2WmShZ|#nkx-76hzVA(JboG(Z*1+iV&}oRGe^ALyERPwEDu7+p%V2cPp}vH)#UvDv z_m8~Y%I6$YlSPtsqmx^qO*L>twfo;qP#)s+xLi!Rjv0Lq4q!m1|Tn%ReSjbezn z7wckUMN$@l1x$wbD#(tfduup&jX@?y3QcUZ#GVP;(g@&!!0p8hC;Ef>!0kqe?w4w` zl^oSw&aBhbmkm*H(>f5xco$7#X=9+#x_Vl;C1`UEZ1c-qB`KCjcWjMazyc3$(7#a{ zvgh?3^%ve=-qC42O{r`;F|u-_3qG9E*GfyxeFY@~%~4#naarwZveZr^sgkUS zk$qVR6JE`IF!sKp?NQ#1DWxINm6x4KdV@<*6qdYLbd9>U2(2~LQQT#oYJ1gKr*}6g z7|J4I@UUrFy4}^b`fIHnZ4GIfXe;SvrK)C@M4nix6vZJjBP&NMtK__8SzKfh)M*Z9 z@e$3Mnm_$KtYCrw+7U=A{P%FJETp@dPcAe%L0JkTDznGsl#LtKiX?ZfM2#e9P)Jqu zj%|+ns3a8ncJoVrvRW_H1zbx#;H=O>JD)id=0+By#S_O9*QcB-Sb zCFbd9si?bE+ZN+dOC7$bO*32M;i;Atlr_$b7ElOA~qf-EM zt1tnMmZ4`3QVR<-2j-!;3`VLQNa!pZ+kUt=>UX)(o*9APD9jxtD91O_?)r?nM}IbwG*9F+(2l5#QU z$v>W`!InDLHJZ}-whLocxBwwQ-oNtu3yuZ03IQx6kxr?YvGm8HB%P!Me7LMc4%g{t z;+jg_*rKRxCm)y=K3RW@jrO6tIogdsG}E(Qdxv$nG*V3@;}ka7>4UR7V96wvvojS0 z=h`qh9))(Y!C~#MWP5vHu~?zE+O)TCtk;_BO|AwqUN2QPC@%MU$3y|@ZdKDru(2v- zc2O8&ssZy8{8g*tyX$YI%?_;og+$fY8kAABWR~lyV4wwa`hvwzv1GsxmfMl%*oLJ@ z3ev$GQPWV<(a}X5L0BwQbdbRaV&%k`jX*3$3CI8efd*Ix@lO(xhoU@;0QK1=nU=+n z58@P&)PQ-cNhOTFU2m42PmP$+8r!UG+qN@*WczPPR4$#`*LGW_=U?kf<#qbd+R;qa znj23`QJXcE$!(ClHmOpbeOV>+MNCLyNW@rmH@>ITGU=;SRk2tv`hlt|76VCSqiXu7 z#EUG?Q8?V8AR!8ul1+rjM&f)vZJ5fg%t=2bvQE+CB(cYwE_U)pI$u#CMIfr2?oozZ zlYmC$z{XBV0N?}2B=f3T+Q_vBWYlO5iVczn!{f=tV6-S5`_R6Yeszq!syp`) zcFz51tE$uYx~m)-ne7^1PgT`CQ^U5Ry0)$U@fK;)S?Qq?%Tb?6Pa8VJKjG8d&fw_l zcDL=ezoEC%Xl2)7XoXERR5y()tF=6J7fMK1B|Qy4e}X4S-mW!()EaiDWpc{?kLte2 z=#6#U%^lpmYfn?C<D)ctsULTG(|rEhmm-FKG3q+!%eW3`Iwj+werSZHoGO+{+A&;SG!lZAL=fuePw zV#rG_)~T6z6ETvR^`eO+%eIFlTxKH#7gD#WCW$mr^7jnwy+_q4hCI^u5_?`^^<(arZl4+wMAh zw|1m>OA?X8hcYAV%PeM;HDkw>DPaN*bZlf{4sSBCg`S1QU^ z@eaprN_W!b3H1Pcn97ikF#~9+@a(CvS*h$@gXO5Bv8uHPkbgNfsZ#M+{Z#!g_jkHF zle7J^?Pj~VX@8~qdTS<})S3#{RZD84(Uz+Kj-I~aRV9u~y>03krLT3V^_lLqG8SeB zaM(SO?R|%{T2}R-v=xA9EguG{y0ro_#@D;`rWk3d=&l#*jB!OJ#!82dX^=P&#AIO_ z9ife{6llR%gjQC@z`IUC1hxP?6U$^|@*8&mtJuU1tk_Ti90e)|=ukKS@=pT_VwNl_Y>RvUx3EnDhm#g#kqY zSmB~7yTC2VF3=7zTWA;=0G#LBhHbd#9C=s%E8kGVL3ZBN^yQ~35p`C-^e@`{MIyCL zyG+LMRM{;O1W?dPc9G3Y(2~;03cy$eetj?Q2XOS~XFGSSJG-o=r>E1}9^Pt96*36g z?|P`+6`sjT54uX4%8|G#gNUM$julDk!M~(F+-g6rkE(rZ^%LF%YsQAsw}sSK$nFue zlvf+9(+KpYkED%P(ffLM;-~c~&Ij32y6q+N)^CeXBP@O&mTJuBNsmz6!3A9Numx=d!7>L|ZrbdfGetWQS5yY26>G?wy*~ z`ijS_ITHCqjpUV+&`hp+x6c~ zv-dmccKxaDmn}!9s4eq8vF!~l!mJ8=y*yB~-+ybTM5p`NU`Zi#R*}Rkcb%(AptN?L z)jE$~+O2fje&whw^fbDk>>dkMhN*4LMI~KLwlf8~o~}5G(wd#9@*>8vZjnQEV#3o> zyGGDJ=`A~nX{uH^=&PuzB0tNLB3_=ZnxY4A(YTT+VsHQ>t9eY4Wb(OuvPklN956?a zC~sIpBKijLmH~pXY8n6_q-?QEGfga#FaXFwWdxB!WjpY|ZKwfz-{xRr+8a{YwWX@b ztF&#}p7p2hhAFK#Y9|i^v2_7wRm)P;!o_2ro?w#1Sb+@*9NHu+$-0dM2WoZ(kNPm{JQ$#6=6!J&1OZ11RX0_k@``LP}K@O^m zO6!Y`v9)XMJF+Tj+kU^2I@(%`adPW~j-*IdGbpEonpUDrt4tD|bEH22@gCEs6DB}>V5Fv>!@q!`R(j4<7j(tW)D02Hew7jiY+ z+M`d;r{nIHlf8Ei(%W=-X7X$ z`gE$*-N?~4i7FmRWHahI8mfwtr4{6kn%LEoNMm=w#Cwzy0{nHKmsZTrEb@)A^1L~8 z2EYSOsn`HCyug5{!sCR6yP927NJL1Ar~cwBj!g~E2)mt-izFIn--KGT(Lqq#SSSk` zGXTED_K-;`3vC1PbI%<0+bRwr-|FxHBQ1=T!1(2e9y$Er=d8C)^;M?zZEW_g&i4Dd zz2CUO8O?5=(?-jt)z}t{z4rGsOB@WlkFM050g`}pO|I?rqp9u}R(%!PuFBg|Sbu|5 z>I={CrsVgfE3tr94xBrV-prLYFZfgo&0s0%hZHHa^o z1lMnu*PfS)m%AO%(fyUt6}t0X*3WOFj<$;5X}8;=6?gmn&azcsv$NY3)~0rbHIiv& zRS>}#V=RLpA3HvzzM8wu^;->3)T)~{gS_Y+Ek}3lM{MVUSvB6PwP~uD?k_f|x+AN> zbg!U_TDlq;PpY|wi6T&?&cW?()Ap;d>dW78yX&v5o$=O+wA8vPvbM^U_6;F#P)%W= z)AFFAhUZr!1T{@eW{wEsWS4w|u9=FV>1rwJp>;E?k+Cw3>Q3U=V#gaBAsutHpbAuh zj;qTOPZ5qpu)$3eOpJ`KG_pG_23Xli^(%|!w7nRkD=Dfcro<6O!vJ_Jq;Ns4w-KbwbEbs0%1Y^Jqn5In zOA<=KQu4$wz#W-fDFdS~IFQL3Se616?FxnrEnN@fWpFN$+{8#pDTk?DYfB2!;Fa7G zDA7~Y6+2k~Fx_ljD)isZ*74+mI6pl39C_=E58uW-pC9Ye(FqDSOCtsu1e4>&IRxYO z&OG#?j(<5EfzR#K;ejV{?a%IO=~!kHj!Oat0ptC_&*bnqIrGs- zq=q|Hl#&2B8Rr=o;D7gCf2hdmYpSkBFizH7;N=)(7Qr}dV?ICAf+K<7ZU{syQ+oy~ ztQUFC(9C_gI0{ep=|Qo4d~1vtME>Cwr>sIvd|&05y9C`cdDDuEzfWTts`{^-XK- zJ<7JrX44ieV_Rpo!C!T*tJhX5Rjw&ydCZpjM2f1Wvby0+u%gcjEMQ3|rT~+HN_NNU z3eVj7c(tc?Y=6fuUbR%#O(jdHwA~(%()4LOt!*aDUv^5nt-+F5s#>bCOGh-L2v#sU z+qz$|eWuaW-)pA3Q==*1sCKCPitRs3f32yJS()ULy8O2)sX~Ve*rb&7W~JzL<;wk} z;iHO{LRQF^Izt4$^-Fr%E9T$n#2G@y0xZEsS8uZs(098)cfaaLeM;(08Llogx=m^H z_tQp*rK6{`TB_~3W_e-%0E%^1rno$`^p8(bGu6GmmKo=Yre%z>#}@Xx`=75r!>>qI z+q7k^J5M$1RVaf}>gy#l>Uw=Kr0MAmbySp6aH~F_by(AO4&YvIX=~Bd+J4`DsnL33YRu9#9s2tPT$bD2Z8bbgS2dYpc8*yi zX}~)d8$X}PW!^dS5<>Y{OS|P(SdL&z5sjjdtIV3Iw1tIN%}ESX0#S7fa6vq(QZV9I z0YrsZMpc0f0aTy}vRIu3Lm?W781-R(rarBHp?jaHJ8jykp5OM4iq8bJn#Z_x4;R^X z{>fFvb;k3owG`3QEp%}DvmdfgykIv#t%M`YJwL7foqnGCsow1|UqN5>2c?}g4UI30(f4ZWl%W!y{S89>$&P|bwU(iwmMP6dDyYF)UCC5-x3XVUpHOrfuBSlRwZ5aV zQ>|X2)z=@ss-?3_EOd1hl2u%)=AIgAim550m(fW*Mv-wGVX^_!ze+#h)m!xe+A7ZP zRBIYLeN;N4zSF0)RFv{4)Q3+RdG7SJ*N;^a&h<+t+EFvbGs`=362h%0!EE=4_>OBW zFNfp~UB{m^8I0{LNe0m$DG1ZD%?W9@k)Lt=vFW}t`Fy-mu3~kNRA}+S33BzQYG6kt zAJh3j=heGqDjUz#$JE_rm$sH0hjIIhK@Di8u<7Y5ZdY4%v1%nmfK=2U{H!TW52PiY zsgWZ@4(y=@J+S&p{{Rk+7uagbO?BPZw)YFV6sru>HUSu@(i%FeAeWWTsU7<53jz}x zC}1(1`poLfsJ@u{ecKHgWYwSeEpEE$DDIW?wEELUR#u7bI!^Ixq*_|aP3`I2Jqqb5 zp0m{6uuJOy04#(GqeTjQlkF_7K`g+R#ggR360`QPO!MMZiOq1%jS)jPbkoFgi8iIUzTO zXw;pf-Ok`w$AgS>&nK^q5m-|MZ(bTRlFAfdXCLPL=L0{ElplfZeK)^`{eQL+x^c1N z+cebx=H$&nE;7{&D3D(I}Y{^eGC& zDaJ9$KaAiH@1GqjDoBqMi>VnI9c+NeMwU}V9lAM?o)Q*g$;p>aZa*a5|M0;}cQ4Q@fy2|SU~tA3~F`e6i{Kz0fuW;@iUxw0DoV3HNw zf=~H!PaJjP7x=tgEaO^sYQY^mfAKB5x3#wm)l#CVY74dEX)M&!GMq^9#~n<(sAXA{ z6MzR^;8Y}ReKd`k-IYMdR#NS^IU@k8F*z7MGC&;uYrn+9R6(eItUHAb8%*?idMhTI zr}bqrY+G%%pVUak=8X_dB)-V-pn}*0k=Hr=SwEBD)2`Pu#SpsWN|Nn&zL?wKEb;~~ z_)2QdMt{&9xc>meuRg_xzwCVYVo5yYWaIw-0JmG){6AV-M|Lh++6D?VJ*I~9UfY>n zELC@!J5}x2p;PE39ceS$OL6`;DaOqF=Yv{i?iL?o~3w>p@9x zH!Ez_F6+4nl2wGkPQkdH<2XJ#^WWi3Km9@B+LSW+l2{_Z{zSX*cr{S-d-&Rm}S5kK^^(ACf8iL7fwaubv z!^Li?xX{P7^%c$Cg2`S(v@onmk4>4}?qi!d8<9(l+B zj~r+B9d#iqf)6~5d>r6p{{T<@&qYdH1#~2wV2=Ru0Vn?ex&EJ@jE`(1A%iK_qz2;6eTW0N>6!Xt_@uR2NG9(WN!AilVxDnPysgT6myFkQ^{nFKF)6_R=s#&|Sd9>CoEh}8^(Sa>hxvHL(MXn}Ts#&CpGz_J> zMs$b=VpVx&rXf*Ou`W~)1u5rtIzaUrDymq}-0ecel1Kmn)bG=!o-yZF)%Sh-o%IKC zwOXz^N*z0;`+ID-T`BFh#G0l*MzXk5NvN)Mk}gl)5l>A{?Y1^lMTi~QHJ4>3H2t3M z3pa0njjTG4we?iJ!b){%v^8BOpm%5%tj5w)$9aX?Cn+K;G!ci$3Od|c(@YNEeG&Hu zxZTBqDh}=aMc;JdM{cT)8XBucm7=cxD`>OXt;$5OT0Y923aK_EaV$+o6UV!277wE8 z3tdmq{{Yq0H*Lv9UvF7m<0uKKv`{s5v~7QRSnJGWINVgQ00MK@2>CXb_<}i_Xqd^idYx5SSv8sIsO<9BQ(ZKiwH1{nq6%A7R{FaltyO(x)}hvtl_rj%JJl;BQP5S{ZZOtD9bQFaNi-3F#RD*zi9X|w z{wHao51^tl2hkt}$Z)@%L1kSkXp0OO?gpG-u+r75Q3S4`VRr3c6J!pRTyu}jrE-L= zl}`Z~(;jiKvVr^f{=I&l{+`r9*&fixR!PTiEG;fMa_=1bJwVxTL_#sg1r!B1>+=hA zWqXBDQV26og1Nyyq=(y_9A_Bg#sTZ})%5jrj_uga&(|cWER$$kT`Yn=UN^RxsftWW z4a_!h0XS2G$jI}r;942K78kylG>+grwszZZPX74lJZk)`r~d$VXRYauzrWKLMMWJo z&WgHM2HS0XlZ8f9+~QC&Qv-rQIRNK80vC^;Ir1~t zFChpTG3`(QP%-TXl5x%kNf`0xo{^e_k%~xCGNW-WLMoi#?shl;o;Ki;ah{rPT8`Ce z1l;bn>v$}&r{2~<0Fp;LV~GneFC(#4M2!hz!#MCQQS5%7ea0iY{jm2g)gDg%4o(J0 z1Y~4kOeJ^S2%>~+uFt=Xk9aUYU zyKSd}Owk#s1oe``c$jaL@eDvLY|y~@7(pR|G#Q6kr(n&dBr4Cn)Nz8vl>rN=>?>4^ zEshO3*qFgo6fKw$z}=Y8v$?K!rM|nW<8h<5(^OVm>*%dk>PTK%>xF$pbkwv_!5Xyf zB(pSW#!GDk$a2c5k%5=59n$U3cJFG7t0<}aC)-&dzw6ycJ;p118n;o=v3qu#wOeW= zO1rJTJd(ybX=JFK&!V6NV;0f@Q}u-IBjcU$mVrmeqDjgB0}|RgJmjo|utGc8Z9UqPSC3 z#<9y#uMXvqFeP#rjx(f2x?|yWDhYG z)F>lW1}etE6{|&VNGD;>Vf&jcPM+5Ybbh0=+wD50@p;pb)Y|G*YqY(_N{YG|sZpbi z3q=|qN+`;xh>!pQy0W!<(s#489m3M|5l?tGSv|-)Ej^>on|eST%i?jz|nJ3x%B^`%1)! zNO#I4k)1GA!#U|cYkQU2+Da-5xYlw|>N?w1k_qfOg};Q=+TMl&i1dpt&svq&`HfW4 zhAjD1U8=%W^2|Sl%t%^CjH`Kyv6&UgU4W?Qk58nx{{SLx+3F4?MWqY~(piF#7q8~& zbZg)SGVjnQa%Hq#HFsvUEy5dco`2&yZjRu_npM72H>Gr;fut)KntFJX`9}rJSOC5O z^%PVq0L+_xH7Zn=$OMt?9tdY8iT(H>4!l|V(zEEzJ>42TciSynWtyt~t#Z5DbluC; zsnfUUOm8gaT2}PZD*fW36C9<(Z&?5!6STW4^--pEwt=9n)G%FbckMN9ST&8>T4^S* z#~m8eK~HzBxrcKE_Y)$9i_j`&Z2qY@=X?h|xmlze1)8>#mD}qC`pk4-j+Mf7Alv@ik$*h{NRjx2NveQ3 zO;<%%0?$cRO(s2BYKWa!NRk1_;Hl+EJoSeDwU%e2|TxFg;tEgX+_M@v>o{7NOL zp-)OWf|U`p6V|)UC2Z=E?J`He0B5VdDV@pABJjv_5J{WQIzo!IHVnq3jzrPJ~$xfJZFQ)1tVnxBXNRw z+E3>kxbZ~-~v9Q1y_zuEcxIKhEDjHpK-hv7## zS0u0}o(Uh1Bx9~h5CSeED!Y|QQ5)`JNGeC1XFOv+Iq4L;n-zzzxpzzcp5V7%-++SfAX1 za!`T+02~m1051cAcn9|CFRe9Yn?+cvbshR~1tbBZrlgN8al6&1CM$KilxA9rnu&Hs zzM3$M62y{KdV<`0pl+91{X3y7b^5aFYN}dWrOD#^Ej4YbC|S~?=+Zc;k#L!g6yPL^ z2_PP$+Al=vTb254ech{tCGSztTxw~wotl%~r!?iZ8407Sq=4;7t}T|CW|k(9FcUnC z>Yzqhj*$o~%vnsF#~zVHw&1Y`V2W(8BG3ZL@S=%hKmbDj08?K8b_8x%@F;-W3@~Wg zYsY);G@ZllU8YMWm9X3@DKs~2o-+t)iZK@Z?x=!Q63h0p^$>eHhQw6w=IsXg;t(vW(v|v zQ#SbtC7q^_{=5=NF2f~{B$7`(W~(-twf9S2_ZL!X*8c#CY#L(vbWVk~&L*U!wLw7& zPj;(;X`~F5pK>FKYC~^!XK6pms{=&v#E{0uOvYifJnjYFlFutD>7`X&D5$zsjBBJN zknq9SvwCBUSU^dkUGZMJ!GL%bUwcRW<5Y2Pd*NcI+Qe2)>En{1*5=9i(in(?c zq$vrSFrY?+ZehZbP}SJAM{1}hy6LN>R;JPrRekN#PG07gs`F{5mQ`w+izRz{ja5qu z?{}r0)x;+o9K<@a?6FxV-KZ_`GClQRua>FjmZDiwNWq3U+E-x|XpR@sh$^lM?Z`b{ zh=8FqXeg?>M(O~n(r5y-2owcX5Dp??z22)N+2;D+W4`;Ib|hi;+is?_P*YmyK!%ou zJtPIpnRVc?J{m_LnI%83JN)tt^$>EwaJ&aXO9ms7N6O%wjF5kRjbOqwAbSpTobCz% zInR$7ImS9l`$1f(SHZ&La+Pdyaz`irzB+yr3uBf~No3iao;KjK4-CwB{+RL4oOv|V z922#fRf^zk7-DchEI>StdHu&pqROmFSSj@Q*l?gQB_l4z$12{Zn9~d7V zKhvhkofrvDSduZfAp1@~1P{p1L8a02nartj?rG zwSt~YU?|1`5#!slC)yh%0f2btlyqV4ty=NzAD2lqH2w?%d9VDa0N!1mjn{jgzg{$;i* z_zVMu7RwTR;FHdAka+S*#{hHv@zD(|h4w~QXc!qdY;l&xIXv(f z`Tqc3h)E`-`yWm#lz5Tc2^y`BTWUAxOg;9a;S=(~;!1;8(nocl%qEN~PZ+~Yi|<2@b;aU!n?+xL|w?0mn&?D55Dg zq7U+IIZ#69Cx8_4K_K&t5Hr_kK_P(*%ZwixAQ8L|pPmN?Jarv&&`{X(VygH6o9Ep7 z;la4t{rTt#>QBp)SXi?2{Keh4;HW2R=K)Hn10{cP z!k%&gB#x4E)-7Cd{hd~?9h9UJPE7)Bv>`&4s|PtPaGE%`a=q*r6` z!uI%e=kJTc&Fbz{Ig~@S52yh{ARE*vPyvhRlsT@W&+c7{=cd}Ovr z0C_x|9+NDL0L zS1Ze)Z+6vqz<+K}k_q|pIr%@=qN_B4iyTLV0FOL|$wSCoHZg#52T6Tbjf`L!A9haM z=WmmMtByJR;OCM#CNzTq##CnpG6*spa^&-jWDF6XX!Fs74l)D|H$LL=k_wC{3&0rs zf=+SgBLt3$RsBbB+Q5zZ$wCfx;2iVd;CRoDlf@vNw(_i)Amp5`MtQ)_en15Ljz>mA z9v$|3u*3o6DIcf;cs~T=IQ;Zr!p zK0<<9JBaa-f&Sq9WB2JwIE!R*W-_3Ajxqg5Amn5J0H>zfX_?6Zw!R4?g$x4_IVZrt zC-O6bax!BubNt2+fzAma9Qj#xwf3Cq6joP}#hy z5<^Ce?a186B;=1IXOqT!^pq;Aj^h6I>w^xFuni-zEF>yQwl>BYu-NiX3`xh6^W>g{ ze5hG)WXrbFaPED@xgVz=`vZgJ4&V@NZdU*(1e3Jno`2;adHi_jsODiIVysdX3>fDM z%t+gULl8kEZ5SWlrh$9++PhZWP3&y!Z-cSh1|CBWSA&ppzp>*u{`mYJx={Z7a7PMA zI6e-4I35q@&+XDIl=M>=jYEKWSqF#geg&w%(yIa2GNX+u^?di z$N*&Hq$clyWLdkuK3jDc{p`Z-hd-134n4j(UVd@l{G9bi_dmXxXSO%3JEp2Fx`$Tk zokV3Y>Aev}1^Vej0xFp1xWJVWnlm$R5u~6t#SY7Y32y%Y#UAlqX(yXV{XShFc%q%- zo48u0-KON4ShpBpOKmI9GRq)DFC3m#i3LMvsKFLRfL+hgqqa=VjF zM|Ap%)kcbns${K;w3-I3s4SG5NN7Le3(YU5Q+RSn%pyq@5kiSjvnZ9@FFnb&*z0uH zZ96fiG;Ow$r>OKJb`DPS`D--P^9D+JHf-A0^*48SJNJ*r|p)jx$Ca-*{-C`K~JMJj+5=h z6&*&Wza*ert#9R)#tq4WTKgl31dWrsb;clhM+k z7@DKdiiu>Y3g;-h^5~dgN4KLb-LAacHJy`Q_bXMMNqf>TRnlo|1)hLVX!}K7Sy4Ui zYB@xYRdJ3G;*O$3M}lG}U9NxvSi?qRl15}O9H9^ z8-^=-O3_no>bnBB?|WV;F4%nyc0Pt(Ev@ynj{g9xbsRQpP0D>atPQG;&270)MGZ|= z1$~~&O$2o>MNsB3O+3XNqs-adQ0SiK+ibQy0YhT5Y0WjJ?N_~PqHXU(X0qCCaXmCQ zJ?5Bwoh&aTa+Ieo9nMOU%1Z*akPj=98xUQ~lFV7$o?U|;aQNMZ z%u8$q;E~Gg)XEFGg(<-&1F2yV ztNTC&n5aHV`|=km06F1FJRIjZI0k|VCPGd|JZB%dUjz@wC-6FOI!GV`L>fG8(2m$c zz5Dg+g!WnrOHHQRYom;$7TbLd1Y_0p%L;0Aib+hNP&ch8c|ld$Lvi|gc~w$Jy+%fI z17r|<4hOpfBb;FT9|amEfldSL><03FTyaCZ1_ zw%}hI;lP?ClVok*puP9s_2;0&q97_>Ko}8~D9U#N0SCzc0PcSvgYZEl;S*YcP87d5w*NJ@^WtgeNN$RTylX(Xxg8p+n zEm~L4&w9TR;u5L=Ea=NDc`$a|l3-&;fOzEM#$bh5606J0scRq$llisVZFPSe#ODZE zOQ1$=*mWhyz$3}!c{%Vi`SN=DS~+D{)m5TiT3lg^41w|Ea3P8L9tTKTl&iYAkUT`I zZ6gQB$jS0ZDsl1;o;o@Wg+K^GDzXVbNy@P#GOka!pVUatka-sKFs2uP|3`bc10I+vTJyrDs^?$BljTW+#xcYCmR8?(F15HE! z00r49t@S1eWQ;XCO7!7Ois)TKsRWbOhVByFsx+1EYc{*McG>N=+WVDeue4if?l&8C zx{8i^n)62uUINuTFqolqWtAO+!s^*!f&T!*gHKuX&(rU8yYa3&hgC(V^;dIs6?N9K z{{SpPD5&(#;Vz)4mR4z=?R9#&DV78*)f33ED#&npuOx+M%f~>56Utkv2*O5ab=1?K zGzbFqRg63fM{UIvQMH0t>iJMcJMwCQta=@&DYOI@JFcSFmYop#S4`2>-EOz7S*PrE zlvdg}_scATO3Gm+MO9Rpik6N!46{zbV@4#f{Jni_eL?82s1E2wKWsa3q_i%G)3CjV zPDiFR)eVa0srJrHm)q=i_|a->>l_0bh1&#voKYyjEpB~xeRkbGp>99;dE1q*(_NUb z)=acCUa^kjtt(Z63+?#sYYR1GkVw=JEXZ)T3K_(HvV$cruN%6f zp$qQMWofnY(MwnKt8J;%8b*e;YF$;@PW#>IYw7g0@9o5oY_wFz>0Yg{%HT8%>l715 zx%aStY5xFL9kuQjuhkv7y;yY?q}H9mp{#nHFK(ryqNlV_%^h7FSBlAYLh?{hy`~dI zNwePrLkJA37{#e}xyNfwA@y0?x_MJg*6HD+`{$$95H6uD?6fCQ%Sty#UtOhZqm^o> z_STvLvb3y@$h{ARctm~^9I-;}EOW4EywI!>-69MNfQ(v3g@Cn10b?7nBZDzPdqx->Kpl zmiRQS`jKj(mPzRx2a>XNEO#+-a831X@1JI_)2%%>cRO(mo5DBT>Wh6k1;A!^l1EfX zl}KYFFd4`kjCCrivuM8J*lcoMEjA5nr)oaWQCME#MN4_Kw6jx}rmv-rrDlO-XeTP< zDzY#r>ZBgL{Qm$F88mNeew!tIGhprRmee}OP>ni<9UZ4d`s-`V%2LAwvpVceHs8?Vgyv#M4p1 zYe$Z1{a0T^eKOy0$SG|u%*DZ;WdQ=eTGQ$;>Fcrd*1pkK(Dt)Q+Uu(O>7XriaL`dm zw3nJ{n&xZGuC|rlNNX+g(ZsS;p9Io$c3$Dzez$HnD-HKr zH*I?pZZOu`G$pe4YoP8Aa#{=+uGj0T&lsSxQ^=AvEfi?diCR+Oof1&3wRK0)maEYg zJO2Q8En3UzgSj_5?G>)+bf|*usJlUTf);yCs-~urva+J0%Iwfa(=c@^)ef;ou!p~I zpGkjBI*Cf%yFp{4s*BW#Dm2YaW|xv7mPUtxe4baQii@>~|}DX1ndCs?!>RhN9hi zqB_FCJq^~;aE!$~GDkIhE*Qq^A_hg836yR?$=8!LI_AyvG2guhYL8fHjdk?tdAsTn zL8|nn*4uo)*mU*#(`%lYzr|~-sFr%oH(Hdl(L+?IRbz2UDUL#m=xt}wZ_=G@!}y$? zm(wsv)Zc6=Xlw7ZHnPCB*`%O`;TSU^aK+;)T~G#*ddU9(T>k(`-%c7Q>B8}TWnFaAy@t{^OJLI|LSzP^F4^{_=7`ifRd+?Nzei5P~Ocw$#L zAwq^Yk#>W&mfp_xleb-^vqJ?v7KzhV*sek-k}tf~S2{?pT9)Bda!o}`T&pIe6Fjco zjWkh>s)0q78n|WfNCfWSf&e+mQb9QQ^YTIGqbZhHBQh{X%u7m5GfqnLeVE zyB^;s$n%~)Mh~2vbP?$(sp{@GI{HgpqSs4NU3t7*Y9ph!TWFw$S!SNDvUZLbRgxzW zGdk~(g$HpXrY_;@Z4KJ(9dpX_9Fi%o=1Hs)AgNh0*8%CXEB!15{`;0IZ;OH&?l<>My9XM~fTPkT(=BcB^6k z01^)T_Mfs^X0upmZo_u!&#Lv5ox_rrAo`}|O;<-nRe95N(?d@R#XVY5TW$4KKC84b z%T=&|V-xSE*}k@KHM)w&MX&pJs{19NHPz3z)@^aG>Eo%@_p5fEtrXSLSC#7#3hU)um6r**$d8Z#3348*v?mvTu8nK{5!AP#f5Ohk@|ry(Om-Z@s< z6>_IMkDti!MtU?N?fznb%yLU0JCJdN1ZULe{MZDH?&z4{VlW*>GQg=PXf48#h3Aa% zk&is}WPhma2Hj2F8~XLDJ$D#pJ~4SD5uK%g5TPun6@gSn+{ILL!7M-kpL^pd(|z&Q`4zV;`bKYJXP9zw^pf>(5<6}x((FzdXAwacw>ecJONL?qAVA;0;B=H~MikzXPRukEVuNCoSb)q4Dh8HP#Zd2HSmSZUZ>R&!iUVQP zn*>qsL1>QM_Af_4qx989t4rA{Zgm$5>xJ^?ZnjqH-AhoJtGQR!R!sudTxxc_ky0d# zw8}(Kpj9o=I*+|QozZkvR~=d0?Hg^Qp{AC$wg~U`>g$N7fgRd7DJW;Dk*cQ%W2c1S zo!tP&?rC4BTONq-mvK8!^zC}2j{e$y=>6O7Box(BLnV_;QPVP8ZI#s&E-GP`{ap0% zG=8l+q;nt=66G4(hp;_|hSfcepR;-bD@{s>W~ZLcwX@3#;HybrTO{?yKu0b2B$gY# zMi2@IVMR$og-O+^#X67zuF6K1B!Whir6k{h(9y7Xr8^t4cOclIw&!ptt3PipA5#|; z?}u~l+UG*)3x%C+{hRIPkkl0x3c;nMtCC@>b!5@UGm5K-2_+pdi5^JgH8OjBFv#_X z(y!B{Br;Za3sCox>89=w3MbO@Ym4pPj(WHZ)fF{V&`{GQODxbLys^(B#Eg#W>Lm7U z1fi#-rlq8$hB{gb3VLcPDmbGN!AnI+1a$P&u%OP!VvaRbUF7Wm5$CFtygyKVnfiIt z^XhKsUE!&%n$3E94vL_rO55h4s(ME)U(SpR3=KPqKy?&T9$de`@INQ2^{TWJzwl6_*hc*^Sssf z9{g6?b@qzVR;zW!$w{ZG&+x5Fs$_K&SnlfS_djQ9luWgroM{zVg+x;{QmJgk{uz2X zJBjssaPBO&v`aT`?E05oH8TY?^cB}RWVhI1X&pT^k}BHh%oz&7q71yQSM(RHbzLTc z(E6)b)X__FsIpqst@h}c2fAObl`z}w5F~DP$t3p*l$5U5k=8e2q@HQg1&q{J?6r@QSNMnygT7qpRx(=sKnAinnv#FfTO%P1FyC#TGOl%isWemZZiLE+! z1YNe|9iiQ;tV7(s<yQFclVDXRNJr@P^Lrl!!B+Mz{U)w0i1EY%uT?E}G01m-35 zV1h+7wE{e}dzYP?Ppfnf(r0U}x32!{3r(u|RZUr~uhu83f%R6PzUmVt%A((CwZ|~6 zkU5f;+YMaenw}#I%0y8s9<#Ujc4-ZDY0!Pc*0-x=CZEuK<eznL>{pEb>O#*cLr4D%)FD3QXF2?2m>O?!LWzWiRVz1X(TtvhAik!Y7kT<8+GTP|8N zQCWnsQrzygT6m%UFI3VjZ$)2GBhyz>M!R=OBNfoPDvwcFw4R=|>dW)$okwb*ijwoF zLaQQ&Ib;qwW7HqHI%@v_Y}7XX@MxN9YMT2k15tM#*CdrD zr&Q@kgp9S6sT#1Tx>?agu)LvWSdgkp$O4-_-*>fNt(13bT}Z5ul4MY(SZ76a zETAY>1niIkHoCa-2h2lIFT08sD#K%frYu;}xS z3or*FK)Z4RoDv2>893v{N#`Ft$yN+uBLp4UY=MHL{*@f_7|2&^Y<5OD7zGEt6yy!+PaqSFjy#T|!|_$RUP`mjq9%0LQA;4^-I z1M&R_L=sQ}S9^xX7+`-64+96zLEs(%^V03M!{2^>y9@n3m~Q?1k+#Eew!~le`q+2D zWn=Cb_T+Pr2*A!c1P|Ms;B(S9NY&V}+@XUkYP+1c1KK=i11fOD1NqM;GsezYmG_Js za4-+b`0f|)`vPcA$9~sA!fPWu29X)mzzZdc2j(!|o^~l3XzI2`T z_W15TeJoM-43X|$7;niVfq};uJ_slN&m}7s1neWp&U5=`LbBqo~Gx9P0I(V=LC*O~){q5fjYQ3xF@Emj+&}{dwxkE zgp(W#1yPDLL-+`)2ONMn9tY{`xc%qtzhi9n{b}60on;M_Tzv{yE!OIbg>};9O-?H# zq=GtiWrx-gs`~X06lfnOaZ{hk$9J`R>;B_wU25<(H~dejF88ITbNt9wx~^H{Nq8U4 zRAmpq!wvu)abL#spvXZ0aps)D%jJXW^42+2xdU*aoj@mMH(RS#*Mg&Y(mfp_HeFO` zmT1TT`~fGn*T}_W4}s&KkCXB7pWEm9b?sO9Na@Bz?{=|h6Kc_Eoi9sT;T){hHL~2Q zDWVRfhIr}Yk(qIjs+sp5yj4+_AJ_i?r>}ay!jk6{oulrRm0^V{A=g%`s?Uc>s!{CX zl%aF{sbi(XKc}71nOV*O&s@jwbYc8zH$24*?3di2jPu1Tgx&35BcKdblH2L%mBLH*IaCvabjCdgPS>l(PU1SQC&)IUgAvcIrZ$NQlMopt~|{B>3He z8yFx3_#-&!Jm)c~je?dT(V1AO0EXIdGQ0Q#Bc~37-uis`_ zG5-KB_Qo@uob;Ybg;&}i2Miq!M;zcUBLox6d=D8p>*EOy!XpH)xRAquIRNDFgU1>1 zfI#G>Z*y*R$=s#A6)ht!d05eMU5WTPCj=-b%f~==pf)u`3cZfsJH568af1|>cKe@C zVzt4fw9R}q9m?026w&%R#}}^m8aKIOJEiV;BiLi5x6riGtnx~cEW3AZP)AfRc66TBtc?bv#bcN@Q2 zc7Er{sI+#LuDN$}NmNw!)3Ul|N*1HN&8aR?NH2QM?+2nWWVOdPp-lB6StT+B9-6BZ zxBD^l-F59Ar@MC#R(Bfft9zH+3p5Gbxawd>w=Hz@MRAhbZ>)A{*)4M{5eCFjIfTO+ z2)t39n=vTLriY8nR?M&@h~iXN@?VhhO!SWu`d2R@c^L~w=1hPhnHs|tA~0&p>H}CD zgi-1YP5FyT2o0v0`uy!4lf8C}RQFfytCv)1>fJvbHB`4M$?2h@l1H~C1QahJq=JoU z*&Z=Z5)knLxs|YR&t$chwy=F4_j^uhy(=|kmt1!vOzC}FtPJ64w9US$Y37cdU|;4v zP1T_EeOAmX3c76d9aws!^?yt2{WJG^l)|qFu-hwvM4MFX&5TU9r}-@SA8cJ^2D}9$09t`PIXyTL!>sq z-jGhFs}*LeRr|X_lzMwk+aYO$HtQyywNr`P`M9CBT4`WeeK^yQA%}5|6p-78Eu3S| zsoVClUeN1Jd#0}xdP>V*qZ>|C$zH;a?{=fQ-DxJKqN0XK{Z**1jyYd!d1a+%-;Koe zwW)2QiiX>6o_MYkQCnyztLhm?+t$_6(7{PtAc*;nX`*w;!vb6U$EfD2(YjArY5BCS zsnfJK{XaRRFKVsz5&`yp=!{ar={zzZ0TJVMV7bF!;PtYrNtd2D&WR<4NYTk4A$ZwC zdTD`DK?O~UwW0yWT96$Xg{r!-UA;kA5;w4R2V=48wm&IzBYnZ&o?DW~|b%~(C_f&)eCj( zo&Nw%w2dW3k=C-ZA;1*$dYXgRK&%w*R-Vx#s<~aC%-fLd*PH(U3PAoH{6U}a`G_tu z@}MA^a~!a`6|rPAWtn<~Bo`Q(R%OTO z2WSHx;4_1a9A$~X1J6m_9!b_9f0$%g&>$t4IaNSFdiuGRCYxl8wD2^O zKM5RYSO$_ub^8Og^`PU36Ie&6=bxIM{^;Z3tm>ALCd^^mkxDEE7WKV@QC zMh)r6^4C;D$Y4UNH|hgElJ^9D^_U`CJ;B&_qgkO4-S%)U{r&ypBLWRgN&*Fo}-T!lWB(uzU7 zK>%G`4V;42{{WUK+D^zV(vENZM%Q|)U(_{Q%M^3fEt1no217*@HoIr0rNiXzGZo}u zV?9gY?T2k>P|q%z)AW?~Kom@!(g<)^VZ#NRVz;fVl^bi0B}C)Vxw}?#9BrqU}UdYkXP#Otcv=`EcJIy z4fMrfy322_xy2}hQ+GbTh0(+wniVio%f2Tt?=*DL6le9P@aeN64G^ZOa}t6gfmnxN zqy~8$*;tbOaz3E86+_DD8zM!n*wV(NYLJTp_zFL%n!PA0=#xkpgLb0shtv;zbq2b$ zeKh|71+{jb(MI}j{yw}?L291wTLnHYkytKO(wCM=gov=3BuQg|;UvTza_8E=r+)cq zoe^%)_fGWFcJ|E;XuI6)-Mz9>)oKf+!eckBHQQ6mwpyB@8{mIBcn}{>Gy*=hMUzk2 zG}VgNrS!$JlE25; zhB1-}AmnEU!2Apo`4}BTABTeCY}R6VvjrJWiKT`ZgSs(}2;yYYfTFFjXJCNH%tp^_ z!3(A+(Id4ZQmZ?a1O|3xAd_T@r3BKd-ZEX&vA<2)W~~o#?$uh#^>wA2*1Pu~TF*UH z@+YCGnWpht8$C8ow=a6E$C@`b;9bERhJj5yT|-iW~#X{YN?rP z-ggex_f2IPU-53S!vz@1K91+2v$hg28w!kVwM&}{{YgK z9g@ZX+Hf###R5QB!yGXdpzNr1x`A}hYDq7o+1IclwGhi)q%Ht??iF!v;`IZl;1d8ab_0w)7B~A*7yyDlN_e!{~ZbM+AYm*hcf8kVblpYTX}g)p2@@ zQ&DEU(9Vx&zS9|Co}R6C9h10G4P6BO*y^B|GHeXU=;+6)!sGPs*(+X;ucDVr)(B}R zs$@&MYOCVaQ`W1KO*~62Tye2^oe~H}&^@>$^<7)LAFtrkq6xasQZnsHA>R}QMZ zO9eb{?v6^zO0}x>A1uLy8&rqEVa{YzFa?Zpico1LC7HkkpbZ>qM*&%wYW}5BhLDFy z)=vDg&tm6}VH>Z6f-Nu~O63+Ul9TI+z&G z6!J$AE~w#x?N-IVOQ&?bWep8ZqOn-#g5P3`?`v*0Y6(p}iq%3MvUw^hDV}tuj+O~! zV3ICK1QOUiVZQfikEpE?pku1;PjNe4sw~tn(n&)}eQPv&+2bwhtJ@N`j*{nCQYcnD z!813$G&w9Wmn%Ev+>52Y_oHkb!LPCCd;NiF@3k7L+--Ex$1mi1T8kqjl*u9# zzf)A309RrJcc|XWq+XH+^f2?^y(=$r^meBDi?r#THQVmm(CUg^0ikTRY9*to)aD1M zdfViu0jJuj6Hh#h!+fg*Sy-E_1iIe z3tdHSF|u697N2(6WihBzC#FQ_x*hh{J;Bo2ORCt$M3K zw+T{ZTAHfb*O|RpB~a4H*;G-H){T$pPrv%>Pw6cSf3WCn4{p(VdP}9L777Y$t>W=< zZ&|5t_4M(}T~&0Ef<+`1E@GxCkfKM;Ch+r*5J=QC2s>zIhm z=B!ZVyn~@h)~<-C5<r*UGEmJ(w3FMP< z?rb0yk7xV;02R+pE{477d(FSNItd#l|leIIeLTzh=7P2IREH1}^UQ9>rYTPBitDXU)h6i7r3QA;qMk&x$S zzMvFf-FDDra*2_fJuYT^%=wuA0GpabFwC+*#77iy#DTK!4CBj47fTt3tUQH?#(8El ztP31*#*PBSTUr&60?f?jq!KTwob98EPzEe++Rv`Lo1yG_uBTbu^rV-FoYdPO(=;~u zoJInQ>T0Pand&KO*=1;_^y3A=@zjP6%F#((HO}#_b?xG5D3+2jQF<{)2^9g%l=0HV z5Ql>5M(Gr18!$7~iKQ&pYX*?g7CY>8l=_0rr!4l1q!d!L)bUl@=_7&BCdR|UC#b3H zGy06A?#YzI2v%tcQUMYv#xih20to=FK1jw-;B~(kV-!W$vxG}50+RXwW+*)(&F#1x zbjEu%GwIn$GzRo8zy_{`4%dXV=>@tNC?XRGpr=S6GQX`Wh>>FkSvY5sLc5*VWtfsr zBOe$e%nLF0qq3CA$;Jo=;fKJ%>$x5<%JJd1I1JuT$Ipyy$iVnKemdewk|tF}-L!IW zbMEBl+t2p?-AV!2i?e&!9k=~!n?BfP6O;yEzMvx@7{csc4oMkfkLYobG6DIm`;nus z`m&0apH6C-wCmE%B$HCSQW_h~G89&%ubKu*xS>_t(X>M#u?IZ3uu0r^57bUVfPc0= zelwr_`ZeN7LOhJYS$8ri$z}wVB%Ba81MS8E7|$I%t$+(P8XFc;NH?)k2;;vS8wB76 zjqURQkD;-Oe$Q~!+D6+2p5xp4S}Ro(v~bnv>c}pX^^YREwQW@dvm2kR+dr6GNXh`l z+@za2y2IOzKtLNAb z{{W^8Rl38w7OPZtn--0^TQ8db09aI;KAE;rS3y`PWsv}>yImHVM=?P|6PHMzW6LU) z$W?x#J&LznG=;BG_WJi&Yj65@QCD1URmBo1E>LPFimsaJO9*1mO(-~()6_Ax5>2H* z=|-KP?d{XM+KRJD*{sy5pzPGvsH?41P*X-V9pKGVb*P4Q4J@k!a!F1kQbO!FRa|A- zO*3z;?-UpLB)CCYMW$_WGtt$wP}EbyS0V_iVF0YE@$EyqaZChXKH7;J$tcW{j8UYC z0<(ok8$!$oCri!vh=J9lX+_YwNszRps6v!Qg>qR|%kQU2gYo0WHFoDyk})M~+mV+pk_C9!I0vgNmQ{fvmcpAgOh%x}4KO-KAd&qg zNxVi40w@q__7}Hf$mIJTpy6kz8=f%0U})xZ{qJw2hM6 zhV$+X&I4osNycz94hWIMeqtDlej9 z45pRKVbBtdz)^C=Q55j{vC6Wc3RJ|=x;{Yn2N_n_PFO1t6|#871bu5|N;eFRT9o!W zNgIv91cC@S2&2d&p%+K%N8&miu&z0qFOkQc#B!Yc4;aDm`2(JD*KsnETXyI0IJx;YDlj~mp0 za(r-3d>rS14GmjlC+<9OCCqCR@e?mVWAD{2jO5aikQSs-mUzok{VRUsRWGKfZV(l6A-Fu_CxO!;f1HH>0GN&gfAyQ6Kii)@9JLaF6fzk2 z0D;R7$m78nKLqEVcqmf%pnCTBkH6Oj9#%-&J;I*VyKAte`rA z#~B&U+#GvBCjjs;dB+*)o7O1D0IK71fP6Uv4bP5#J_j8xT96_InPX-L1B~GC9OEZB z$^7s-VOpx-o_;)Wck=i4!G{%PWp)fn!l*%zGFTC~-~#vuAbUp`W+e68Zz9I5731B5 zk_ZQrz&HeW_&NRhYDt64rDHpI{$XauNyg$i2S0(G`S1=@csL^-dPMCD;BVSP z9&ky(K2?Cg&N%CaVjWQkNX7>20@+{=NzO=Yl72k-!09lz?eXV-j{g8Zjvdg5kxXm@ zF(FiQwON5A=RA_20zL=y!RA(DQe;g=ks;}0M$AQ;#+ztli(XdiY zu1@z-LFAAa0*ZLSbpU`tKI8GoJ!E~chh4-3j1*7?&^RrOa-)VPl1KC%AZbGrwEU|N z2M2D`{rqG1869>iOl+t~C9qk?mB|A?xf%Y%c=#w*@2>a1$ZSWj?02if#frXY58IL0 z6J7bOj?MyMzY5qWNCzha#{)m_@%wao&JchA0f7auGNbk&kN5lzn-*xJj1Yu_AVZuI zS*s~OdYd0ZUHb3) zU13;b84@G=i!m4{cmp63Mmagj=bka1dixMrB+P}mIV5w>o=MI>zvCY{2|;WZ1RgkC z_#pfr!5ru3BgZ47Rfxc5{{YldTW&}IcvdI;*%{+FUUTGh(kl1kr(U0?{P1wM?0!8y zzW7_}ZIRzQeIS8ZPB$Fq-gyW2#yH6%^0EPkcJ&w2G8O_h%Yxt*Cm`cIWBrF6H52Sr z3@|dleC{KVPtGyN^*nXdOtOh24pKm;9OHWfw17bQ$AW*pdQ2`HrIFx_1RH~GL6Azg z=PUpKc=( zI0TXL$?0Oupbf(bxqVy_?q*OJf;{lSMluFJW6^^Okho_h4&XMNjIIL>rz%G{!NBpr zKO?17-rets7E%dURtR|gM6m>@!3TCg3;@SD2n2~wlI&TZe$$WuC5{d=pTP0)pBU)D zE0O>uhIX?C0|XKqjii!1=XXD!o{Sh;Rf+WFLJMG(+$02N$Z$?`oc{o+$4ZrzLMh+I zK{zT%91P@~@#la?=cG|FQc5{urx_&V9DHzi>yb9l9z!RyClR0}n1ZSsaK_P`upU7D zxiDeS%tJ5&MF*83gAxXI`$~=*IXOA-0UUI65=zdXg>b|-y>iM|aNq_5JdjH%3JysC zZVk}NTQcGIbF`=f9~nFlxEx@9a6ELS^K?V7o$VQCr)NMinBo}k9A zFv3{StGn@%M|^Y?VZ{uN?YCPS~|Ys-e`=g9Fkio6Vm<=l0;=O)k#bM zW>S(!V`0^i+g$=QEe&*+Ys2dOQ+%3gtM;k7!jjfj?~+!Aj-S;M8fq9(k~V=EQb{8W z=t8I#kehyFWW95L~d2>>1%+IAR~U4}48$j;J2 zobWgq$AkWz9`Y_E0h=n^t8yD4l1IVd4oLav+|~O7N2b+d;&=fG3J!8`-- zJo)I=CE>(*RB{eMCj&f?e<#5FWFOd|1o1l5vxR=b*C* z8N3W1(~M*Df#78P4w^-M)sJp@>CYE~4gsB2Hx_8XLdhDP#Q_Xdo;(HTCmF^_&PHzT zm9th{yML(l1@BNvVPv`6uU6eVZiXZ1+U&Oo>mrV>qE<20R@5YEB#|kNL%G@*BLkv@ z?5K&KE_V~)@8idl@=j0bEz}a5N=Bc!2$0T?j%(0Qk1xP3Ks0VW%KwRhWamP(? zK@Bu9Q`5y16!0R&3=qb#LlkH*sT^nmqK|+EGEO+)FM?AFJC1V7yFvGygW+&@5BeN` zQ5mZ>u;@Dum|QK42_i{OFy=4rvw%t5uY9gGoQyD z7%-_MNdaVF%aSrbBhT;qV;({4uw7YOf&l7}OYT11 z#2uS`xWPQI{e}qgdR8SR3-N${31V{G`SItB9z675!m%kOw_t|I1C5}Ov~lnO!8rVQ z&qlEZD2n+}kK8ag02~8`<0JO-)N=1xbE3A-RcW_JcdkH8R5H}98cJLcH%@RADIm8y zh{yzS)P9dp>Kkp=+ile}wyG#^sPNh9?e$YnOfGccXPV7Y(yB64v?ZmbeYwa~F=ZRvT~Z^uJi94+(j{m9&!>P2(U#9fY)D#BQxG7o4uBg-+#$vGMF2RZzF zMf-`azwocN9m(!}MM_hR6{IeA8VSOK{{Y#Fs9J{60s;@dO6lW1;g#4(=V=dU=m9e2 zfzDVBp-4QEIT!~cC;EZcm>=Sa-TJF`jL_ds8cJ2U>OSaPDK$=`q@qfhYpJdD^-XWn zc2q?HB$nY?DyycAK{$?-XPz_sLom5Ktl5G!6;q*V%#tw+6l*}6l15n9ZOeQyV=j#} zvBnKq-nP=Cc4K=|s4REdx?(N<6*?1B$xYr)`CqMa{{RTq(?h0gmzmvOYn91v;`e-x z1l}fSV@Tum>I(X0@enLSf$B$ct#jXde|@K-Mm01kN2n-DBD|5;>FT)dbmkakzDyyBFBqQKfq&+V0=#8|CXkrjxeCcc8b}Dxmwu)OS~wmh83cVmrUOWRi6+(_(_#UDNL~psbtA;9H z;kiG-)~61Oi)}CT4FoSzART9V!J1MGA?rJ9+~4 zvI*Gji#JSb%{QuGwTn&Oj#|5<5ltN#niy*2Ge(c;tSsO9v9yPB1uO>U$N&{<)cw`% z-j1n`-*nZM+N<3_DIS`#In;O8VJU}W+pMChYDN+O>?(aS;TRwX8O7RzvKpUB+oHMm zBURn?H)zeq;e6CKF4)?k(>jMnT%~NsbE2xGh+L}l>m;=iRMApZFWbu~*%C&fmWl6o z)dy-j18LK@ucRB+lse;5+NK^m?Y*lKaVA+6zvK#{ zY}C12qCC>bL@KU8EV`JXBS4_XQ=J+VDQ46G3P{6ZS!HEJP*~{%??4cy$*=$xOA^9> zv3uifcT4K-!`ZDjRjRcIZnY$~-{G%OZnf&E?Yc_0P{}j3I(@B@=Pb8+%X~zy-858E zEU-C`a4Z;pcKe0(N!*=p+t%#_Rmo!QitC+KuNO>OqZE+Mc+~ecxHNTd5Z^r|xO#9~ z=-im8z-LwU9hh8w>(rW(Uf0^YpWdnHb^ic)d-T^T`z3Au<#4RHXsruwt4I>6-C;uo zuFWOly(UY0n4F3jC3<*bSyo16`Y8Hmxp$|z8edgvdp&gBp|NWE3Jp7rVK*ee4=4o6K6sjK$;A#{88caf<_P2>HZ&EaO{y>ttOo=uumZtg00iSZnS-UI18+9RPw1?#nPH_z4X-trCZZvRJv40=qvgHMn0!@W3csI zxb6>kd!?%NllK>1_de@LKjJEjP_?a-OVJr5gHKy&3%Wr_Hd4juQiOpbpr?j4RaOT@ z6^2Enr-B%%E%ustt#-?GBx_4=w$Rh6$4^N|O%kLikRb>PqN|lGM*N<;RBh5KX3GLVWBPeG8O8@4ba@XA%lLj?C?Y^iXIYT`ca*M{m54jDDP`&v4u$lAjOnuy zPVVl1Ho-wOs0blN@Bsk(k*M#6RIyYhw0&6h=2)S#)7x#dUYL*U9V%L?qM=zZ9$BO) zq_8-OG*AKe3bReq(P*ym>;B$K#;Z#Aj?Yotdp#XYB1?K*pr@MGt!+yjUf9KKQ^Rn0 z+Bn&mNc-3Uy7^I+EJzqQ$DHw>+xma=)_wYdxYOvnZiDXJveL&(+wE~`{yS3hyc1Jt zeM}{>-!}wF8b~(HNj}w5q{MfScIQz@B!(aYnn5%Il{(PhN^mUmMUObF!l;fz1M$6& z)E&BAVe7HJxU#H}inQ51|*MlWxs-kMM6j6FMtW;9U@-MbHm0kTp zp!qM}>xIw!L%zCnPh&J~ayMzaYgzvQ4?Ws4v~+Ok`%PnrSem zF-sU8Sn4nF5bneFA53Y!;dbL((p&YPVKleMqy+PuR68 z&mA?cr(m6AsFCTyv?a&S@cjB-qS4n-a+9g3N zCdbH)z$aJ&-duSRH0SeMMVH@mU}}(csMWNC{<1i$GaH7c?>Bojh3`!LF?Rwk-S+Rb zmkR47_eeC=C03HPY5gHeZF*ZyTBMo=lIwT6%}mnOBu^?xcTXYMnUa*$8c*sn;i!9A zs&%!)xq9~N+pTqA)Gt+TzF8>rRZZ4vsN7qrH0<=WlG|sHD$`3*hlCjxFhOKh^#1@r z=uJ7>EfZkv_KmkkXwy1wCXSUim#etc%Og!a+U-_C&2YKYJ00~Cme>G}HADb(w^8Y; zYy5V~da2}EDr>bB;(BC2Tg@seQ`?b#zbYNNSsKqQqm=AnjHFkpi`SW7E}ETpscC_uuO^gikAJ>%BIT zsJ+E{wY07FRgD}p)UwhwMJlY}eK`?Bg&EH7t*+wei&n1g7j53_OI=$@1lN1b#)2D# zT|K(xRccrbs$0DjN71<@9P_+_IlzoYfk_~?Z2Q-9G>wrZthno&O)M1kLY;zM;w&no zcaQC0qoLY=F%dRI{1UzClgf>~^pJLwCxwdw@&30fUa5E2UpU;rQk zKpupigMtT9cg8ZEhwBQ_uBvP3GzN{Wwp=K&8(sU!ai#6nn72ssyh3`JE+RUL)TcWQ zL=@5~T#(KemBPPK-P7-fcRr%NpZg7M)?J$K4OWoU^qs+rPWH9hmr2j4=**RM7W=LK zx_IKbS4C{5k~C^shKUT#93iD*r_(O~0QV0^+9)*6g%nyNRQE5u5VaR??K+(-RaUAy zB=O2_8qWDqTw0!r*FyqHEHhO|Op-#(BW6V%cy-$T+2{+ucC7mQPit*OMN1cPF8VJ@ zS$k1HZr#kfU8rpr2`P1D6(rt`x{lX!zNIumI*Q2T{vSN0VsAy$to-V{(Pg58%JU9p zBbWkBG6-RkDP?pHSSSisHbTl=NB|67NS+cEq<1V-M&4hh)U&Bo1b{5vupkgLl1QpQ zp-$HKJ4N@COATkD?zDBOB~?{6pwqHfQ@)_n7pP~EE)*9ERdFnlM^cjgwPM0)>LS`h z76c0gB#kz%;GA-;#?o@2gw8`8U>^tZ$6h6Nqv`MKHeCm(FIrPd>05TK(3-OMO>4N* zYACdabe^J?rfZW^UhTHY@xG=>D2p;YQ6r9QI$t?emQr8P#ax=q}+ z)G%9C!>hYNYCPVS21pQk0ZdDkYY^OYe;OwGl-K z-lKoK5re9w`kL8%^2KB_d;+g@s69J=TK01Wh{CZ4c%_fJbQnwf65(??Bln&~p5 z$4y5|OA%ztyn~Q7KWe_5`(xTc4Sl+fO>eE#39fz5*KBnTtgpC8s4AzSsJJ~uR*GS; zEj(1wtjdawB!$T##Y&abjJAQdAQ0DDNWE62POnG=8;rFQjj(S?2YR|YiUbgN-uB$p z8ysCrq4Zv~`j6DM?(_HiPgLnX+v&>L*W z>8y0Is>!perfJ?cknSw1h!X)Jr;Gs#JC)!Ck#yD&e3w#A1)1ZG%5=h_@I@OJ;yPdbA z&;S(u{r&si60%}vRNQ|?&~ctr9B@A;o;c}HH3BB%VDi`mmkG$-pKbjlaY80n9$42K2MHAn~4!5&EoESzrqkvrjC{7C2&wOta4N`zUrmm{f zRQCIvFjm0O%+xiJe=;X3?u-En$kHnY83f<8e0To-HRN7%1s0TlOrEu+$&h}Xp7BUgs!b*C~c%7tcFFs#dm>qCU)(?0cbq!Zwi zoM#;T@;Es7>OZ4&y{|#&-6^6p{8Lj{bd8FF!EF^2wM9&@(MA!csh&U@YO0wxO*5Qt zmDur=$J9uh+NKUFNFyskJ2Cxw2fPy=vW8s;*Tx zTa~{_)73jsS)iz$+Bq*b8aR@Qk~qpD%H~B-ibq)JQ6iE&mC{S* zBx76+Q)|y|up{S}97HH{Y^(BHBS|Imo>BCD|Q#+QDc}p`k z3mpCQSEXw#{jIv|8}r-l8pFDJzW)G!zTTpMC0zDfZN{e8VYf55X=0~Tf~vGr2iUD5 zHoW4)+`3$~NIUX|-A{k=zJ*XaI7UDBA7a%9|050BYxK=Sd-em79BArZIOZtaE zyMI=JL)GcMBS{tpBG!Ga?KX_;hks%Eh0!{KAF6Sn>Ta;>9_i{~sbJN2O1h{$Yo~0k zR6;vRYI$UR*7EgrD-^~=mE&1bKUF(fLqTutk87wcaYYTb4%_J1sG^22k;Up+DQYTq zs;I$giQU_7&F=2Uc6x5_r)KnjfBR*sJ9n)u;#H})&sU}I6zdqe*)McZODzM^)w;Nb9BXS zsIbR9o>-~1cAPWabhW@jjWl&|#`3+oR{%*R1<4cbsv%;_xspi2ILWmc7Ez5WiYNUo zewRMWWE$mJz8GT;2o_g=i0TKqt-b3L54L#}6~cVS$PA&gg7_KE+z>`N$vkvSkh&~r z0*pDzr~noul5jsIxyBbbSEDRCmbR1ZD{j;grN)6JmZfd?SRP7ig&(UZ z66~j}M?f8Sjp_(EB+McXWn8vG;|FO`$GCtBsXjcMpBd?d5J)=^NF&^AaG-(#91&yS zaDqseJ2{dujP6EKcAp%djAZ3}{Bg-n7y@Gm8M25D20tE8kTH)0o&osj;$WF&QdPhD zym7(YKOS+@dql?r)m_6Svfgpzk&ZqI&m5jQPrB)a!%&7mM1YoM;Z@N807m}+GUJli zInSPwG7?!BV3x}(XCa6Ha9i8`2cL|5t!ZRDpa_8bnNV#2kTZ-DG4eio zEr3LnU^!_JGq?HKMn^o6v?v7Ro<;~AJQLTcgtcfY2j;ma1Sz?NbBZ`(dzlqcYN_gT#jyQsaR7lZLRAE#Mb^7^=ww~VgHwxD= z(c5j;ORY(SVn8jl6*cRy;OySe1!6f+O9RJ0jO}k;*DX(fuV*gRmz$kYcOjhp#dOjF z#~hQpB>euvt}FQEz{ureJicJC{{Z)BLlN#g#lFM0IN9((eA!!|j*tHUbjnA=@}H$* zBN)r59OUEY=Z}y3{`l+k>+}nz?fQ4=JGQ@N1Tod>irq=7F0-sbYHBKHxr;?Kb4o#J zV1f%;`U(!jX(eIq2OpUVbTUYZA1+;02{^+uDyi|~I5_kF0Ke;Z>FYv2ZMzxT-4!Kd z)wMQlBX6sys+2N%b6+Dj>WWCw!n(srCB>9)AUjCRs-TXuKY<}9GoGJFq=6z0)EQ(A zL*wM{@E!4E#@q;@OWmEA4*EbB^4HfE{E6tZu2^q4kri@-Cm;@Tias(=Ka6$BVUJEo zz#u6?fO5F@mmu@-NgSM?;{Z9``iI9KBd!WaWc9`ua+M>H z0{}C$a1Kb^Nb*Ve!9JIcZwVbrmR4M{_!%Qk)Nn`u zjDdlI*(yiIbCcu@fmT4dk+-XW3y^(*PCv`-$Q*OeJ~}QnEc}mPI~eB~$Cc-hSR8o& z0OO+u5xjsp1{)Q;umm6j13QVpC+8>6$LF(vr4Dx-?(u@WV*}uW^Zm2uuGzLZAS(qY z3m_#2KaLJF{XgHN=u%~8Mp*(%Vv*x*%9BQ@?+cJ}j;iQcUvCTv7(FeGy{mtF{eb%Q z_A&Nl_Jg!!DB1=&Cy++q!*&nA2gU|@=$4JzH9*9uAh>)21~>qL#yHMFB>aJ%j1ntu zD5oqz$tu{|Fm~XRw4Xc-$2mN6o;pyydU8h_ zY)>`czrzL!+Yw+(O|*i9fH)vv0^hz!&fZ5=mv^-`s?lAx);i-u{{R4z`J*g#I*3#1 zc%DmTO*I%laHY~{LRCVCbs{mu(-e%3d6>4NvH^5SuD04aEp>8HS4Uf4LqycIRQn8( zOlqnj*hzip%yQUnIO_-fb9eJf+52Vx0EAjnT&?`L=EW4*_5sfi;^Bc>{w{{SOzwNpGn zDQat}qKxl^9h7RQjk;3fTeJ%5=2B#0%vGG6h9r`I2OyR?87UWWbs%Z_gI}i&KX2=B@jI7VF<7)sa>=i&e(ux29upD83)crzI{W^DwYRM89A4(b+ znnzSgDr&Bl=7t3>MrLG&M^ska+X)B&%X#Jg7`A&~@viD>S*hryz1!$)Hp^9AOmMu^ zkz8t}mb}u*ImJ6k9WY0zTrwfrj;$aEPyI>uj`>m8ZsqDe<@a+}YfH73z?YgkO|BTU z&WESDEyCYN5th>wZ!LHWJFIOgQ|w~A=OE&*pdQ=y@3^%+&A01lE>(4Q`h7oL05L$$ zzd=WD)K@Dj$wq5hp1x^mt+T+@k-%hxG?J3BGYkdYlY^Zse~COF(1eV(agaOdI?PND z2=r6|q>I&U#+x_cq2bxTQ5Pg2(7m;#br*Zx)lf8X?K!KX-RZSWH>n(NG}*7D3b8AI z&ROO}F`+!XY*%hcIRt{<;cax4;<($LMif8s8WmRO3F(%o_qVj}RAzr}a04mpJkBC3I+6BK>ud0iv)0F=v(!C7e?~L8%xD2@g=fJzasL4ETkK*4bE9rm z1BFeO2jw;%!XC(K#fN3DzR;v_E8v{J)+KY9& zP&eAB>pd@^-|Bq*{{R!4JuH_#)@rJHs(P2Kuw5(_QA1H2tpxVFgq1L}tW4WhN_xZ~ zoNpnBI2~u-qK~MZIoSnb`VsIH->YR9$R?Q+ca>iH;?p`H?z6%_M` z*(F$}ESt#KcVEMw0WY2g%kHzBAM-XXISwLo% zCo34s$sC@Tn#_7hPzIf9Rjq9Fejc#q@(-0}VikyP6~(ZTS$AtkCC_ceW=bh1=SC#xMKu979P)QR-HyjWsA+p~sU@&Ssp#5@>K2}!ptvzSD?BE6oWm6=CBKgNs z<^KSQhG|hF%VsmaDV>oQF%Hqe9$q>2e@i5Ul2ogXN@+brDGT9*YM^>islhK2C#Ddo!-Y~w z7{nL3eZfO0K; z8(UZPpWg=V4b9${u^pMY(ZQy4&C)+rwFO*f?kVA|qe+ZHrsUBY%FMK}Q&FeehLj@i z>=VZ_`N-o;j`{hdF#Zl@(>7Jm)Y4|63>jj9ZOu3HNLZ1~jw>kS)M+tF;3i!smb3 zT1fuy(}UEWq9|%BcQJ#~fdM-L$EIvLUfL|WV$DIPtg%!}Q%`8Mz+j<*S%hJp7}=PH zXroBknV)_)l3Sjiy;q#cD=bJFL$)}PB91(b!Z@Q(YDF6RBaH&aimIrganWrq+^*Iq zAdCV>$mNFs4<|kcAoJFqTPm4y%nzG9fElwA1v1KP5Ey_0qMeo`3mkkRsKsZIq|!es zFXTlhLi{_E{Y=))$tJer(&2_O2~snUZUT%U1Q0!-@_8k>#s@=o)9-z`7z%NceEB~k zj{tc;wm$E6R>B?F9^8T(1RQ4`PB1bCdXH0Ts};iIS!#~Djc!ydJ$f36L=_lxk=3Ds zphohB2tt^|fw;ly=nO#wU2b}j`D>F@exJ4>+SG&G4%~dbhjXy$ho)BEb|CbmY?47L z=L2$JDaRn6IL=ORK?^$Yweny#L56mNe!?O)p| zEj_;NrLvz^cZT{RuKRf@UgK=i7J8-hVy?PEtLd$F@8?4d#3V75m6v;<>q+cWI)IKP znU*9Y3Zo> zm2EZ+I@@HeXi*QNRZ!_fT~#88DFvvm_1Jr(b+4(`{nB9ukXtMo$5Yv@cEz=6yM4yi zvegUVS1W+S3aFIl1nZMw4HjSP_(eamOiVZqKvQ%B%I(30g}U? zIr1axFS|PLxVO5k1w}~}lec;^SFKIOkEk_NN{Kzr;J}Z#a;_328=|F)YAGyO zoR1q^uZQ?+v~WtyNGTLW+~#K#+Ov*r=Z%6?=65Rb>O*eP)vS@1F_}=#p?B2G6bRE` zL_=VVEO}xu3cVgL9DN1$%G0d1&ZzEX{tsF$4;>vvii6NqrIz_}t8cfKNe{6jp@JzL zQZUjPeJ~0D&DX9)o=F~ATXd2;O(X6mN1j62kiR67#QV-$j{x;uc89k1zS8#BOK2(x zX;!L|+fQ-SweZF1%X8E<;byEeR4=}*D0jz8Pq=J}Vw=-ZlFeZ5oe4NXzodiY4B(Pj zXTi=!2+toqT<|{*{{W@?+S1cZmpVwzJtP{c#Z68pjcOw%G_1Q5 z9MsY)my)hBibF^SSbGbtH4l65HC@Qml#tjX(KWTYYR_S(3|b4-bUUuKwFLXbsQ@rQ zBnXKZMNr!a>sv!C&^$AvMjjdCkT4?)hYmP740yp-895oxUVQ4xKI8o|cM4A6+OIl# zr?y?z?m(iwY4)ZPL2H(ImZVH#s8{=0R+@QsRMXBBlw^?L09P`nBbZ#`83tBYto%qL zF{_mc7I3Rms6rJc@<}WTO2~YsY!M&CMqxU9)L-N|)EKBBv_Oj%MY3wDAfRtp81xNF z7ZPR5v0}`}a0P~3mg78t2_&4Ho=-%|&JmCfB*-|yWA1MZ2GBO+${d4^4?Phhr~Zsm zEYPzShD0b5N@oH{XGR36j%Z#v5tQvJP8j2!z>+wXjD)(#1Y-rG2-q80@E37oftEi9 zJ(813}Rh1V3h=peEBQ#4};f5h(tTXH@FqS%8cX!co-y- zFg{Q8>+M0?Aw!i20)TwrbI0TpEn7n-q&9L0PTYb?w4zQ zqJ-C7t7z@?Q5I*atC!OV!~hZ?yP3=F&cdLaaNj*aYIV)J>l4%2?Dvb@bxG+f(@;+h zB=AZHxoameBO}J#ymAZ^xDk$z)pol5Lo^o1>0x>(Qlg?}sVHHdc_1*s2GSVpLd^2H z0I4ceA3aGRo{HB=K}j^Uu&{zEXyQX0OSTA=NQF+&(Vzqkpq3bJcXYG|`2Bb9e%p@w z))TM8_4s}M*sP_k)LMB6vi6{*JduMuv=#P8R^x7KxRR(Ny?3(g6M>;Ndpvop*vKj z;9veu8*WQBc7-91Ff*RBe{t@5g74i}GzOT8-%(p%p{gi#UE=QybK5i~pBI5uHRh@1 zRxnkFmuv};;pSCM%_c+>$RP_MYEtUHSVHY1I|T}weL;ygsOnV~&q}OBh`Q}SvH@*H zf`tpYV|x$);87%iEYQY-+Z>SsjLv~pP|$xdeK$?%C#Z_in8;;d!GJ1w^U^8q6c9Xd zo1MSaks4H`YU&|S(0?p$F$oNbw{ZnqYsgMe0H>_$W$d1TyH;DFvR!+HRi!MHtxZ>S zs?`@t2=zVF(N~k~=*bNYtsHJvi~;F|gwm zipX#>Jg6rjMo`mXzLxFzD6TY72xRLgX}R#eEPVEals7kS{Sr<_MBR7g|OaKsXDI;Oi% zRo^@Pf-5$esM0zP*`+h54OXkP)ZBFdki61KbF38^f}VKjq)7tIk+dNb+D;tkt4DA2 zE|#dGtFUP+Ed_nHJlpHO(mRFGB=o{O@>f=gsv4qD7?%WY<$LPEt|TW*dN^rPETE0#pvoSJ#1l}gPs5D)Sa z9ImvILoS^N^MS6s&=pGgF{ZNeF&s@9QVJr1e>r(HkfBegi0rTBB#?EpRVc=uNfT;> zE$s!c#4?2*c^=cx{{WnPbHG}T3Uj%LQH%x{`2g^6NcjBc9WzsvU*)j&oCX6NE|0IyoOt&Y*$CfQgG&U}KoP%<-*1QFxO z9|t`s1Y%F~08o4!k(O)%50WrSbVVv$;bd%#0gzjE<=iup zzmcCGwt7(wM693`DgY`E$P9l;^T-N$2f+B}qXrE}c%)#VRBhT0Imjm@5$zyj0|brO zJb}^aGlo*`+gOwY9B>aB=068BgkETJjSnyZ?0N{|rAg+94oH4*0 ze*G9QsY^H`0F?xjgPa45f_(Y-&PGp+^sjV2kz%UbMhU=E&+bNeA2`SR^noN`a;FME z%nnZ@o^$!*$NF@1U;tg8EC?zvGEe9K0DSx&kc;X@{V&^^{r0RFP?Gw7p#h4JHm2Z6 zK0^;{00HC!jDKzw$0xLeM`r|?6^|*5@q>eb@sB5uJamC1SiMGUOz!*3xX2~GF^_7f z;3|bsd;!Vm$Z8*Yk${^>W3-%%H!t$Ux5@eb`DqtsxUQzo!)`Czy^fpU!uaLfp|W=t zaNcqOY^cx90pl6tj=39m5fF0!0Hl!q)yN!`UPt;4Mo%1)0gFD7Vhbxs4&94@0Ne>< zk-IB^0O0uX(U6u{*>~;Sl#)2r@w;#$PmB%4hA>V%a5x-v zd~39pnF$D^Yc3dmLmU>}kTZejjB}2f{b-7-0Fstdx!WYGV*qeJd~xx|9W07cunn#4 zAxKi{LY2TdRv_)&gN&cRA3Yd#lU~$%^r3wJ0FRCw5@>@M*$Fau+Kr8%kO|s0?gVEU z$ie)K^d@HG0Gmg)IL9B3kH5da?}Y})+o-M20=DWl{rIA&3MFkL!%? z_#d8*AFqIMj!(jozyKc~*kjN3K(e~C7a2kj z0DWm&aS`F%`&3}<-gr>N0u@31MBlX+m*9M~R zZJ+|hSSCpWCj^`f1|SYMa6Uf;U-Fcy0vs+FxKo|O7*Ysxk~tw*V~{|{Nz>SYxDHng z$MmCe7$bQ+XADPQLH4Td@JnPKOCR$RIVT(sjC^$5I|`pNkg=*U^3GIb1C!2hMt^ah zd~$kLk-CLaH)VL*xI>fi{ZBm|>N7}oC?F0L;1CZ7lh4QF&*!5C6hh@6C4ZNO z7zb{1`bkm-M+5%x*T96|CsU>9hb) zu0Z`fgTV`*{y*#6R07Dk^%N!~VhJa}11Fuzr_S#j91+qnBPaugL7p%^K+ZYxK>omd zd>o`orBz5FOCT8|+Pj#r89SR8-HZ}*#s*M<&3&2|-*3JK3@(KrW3|djk%&|&%Awts zZNQz`$oV+;ZQ66vt+PiNhCgy`37_*7ByPYNIs6QAK;Qw=XniI0ogt7(v)nf1j!z^x zTpuGR@sGzxnKJ0ic7V&yahxANAQPVhKOTBU>CN4W9}n->--ErFH2{YhV8Koq4($7~ zMnB4=k@}kebI9pTagakDhbzfYGrTt^^N+{w3Hj+PNRk5McJ15PlejXkkAOMwFh4#= zN2wVbcM=p9$nRV2lDW#(4ez0IoVu8!#-TxBQF(s)PPtoRQ-`csS#uvOZ1${@?fi0A7%a zuzGMu9WSRf&I~Ff0K0!y@AG480!9bOA2}zEeE1{k2Yt+=1y3Ll2tOM@$BcYr^pkl6 z06_#0LFXKCkHP$Y;B=}d{G4QjJmZG>=RAXg5B~r?H~Zki#SJ5?w-4?BbBqp4WO0&s z8S*@29*I<$a0X6rd>#)RlZ>C7{{4J7k-aqtSb*uk!tKifxWEOm!6zj0PC77Q za);yqR4K}?2RI%JXDkoN&If_iQ(IVSFS=^FDhXnzztKDwdkm9q5evPxQ9Uvjk0w93 z3TcZBg0nJ_&P1QpVVKl{(STgB1fThUIUJ5LYG0YQ=KpRJEj7RLblTWA!t!0aPyJv1(AD4ap!^ zTq>z{3ZSzwpaqgi*iajj@ZSh^pL!tCU6H(Zsn<=aS?ElUX4JQT;c?gB>E~*Dm4e=p zH{Dm)#aA1wRFufuqhvCe({m3MKAZcEc>0n0{?L8H?n}d2U2xP@cX|p4<0)^admXN> zuE}ephCw31M@sbYM-l<$K_oF}=xGGMeSUpN{{RKmm&%UW_VZ9x-t}$2Ok0eSTWO-8 zqgSei#cq}9sH!g2>jHY!AFf%RN!&YSTUqK4rcFQetKZ(tYrfX%+ATj})wGu_J#4w_ z+EuBbv}<}waTue#)l!Yt`fL3aRB^3zBNXyWF%^a5bnIUDRqOodGYE98{535KjwWCnnliYU6GXh~O&%ae0PYA+ zSDmu=X1Y>CU2DBsE>ty0tp&o0@ouTNv@$BWb5k8#M4raWiCQ;8edxV(rAYq(PR4;0 z-3H)-M+6Wz+PjQqug`wgFO92X+|(T-MCqWL{_@Gy*+BBwOlLJWT>3h)YRM|s+wxa7_~&wysD^-h`is7_>=g0 zCT24mrdndH6MybzWP(+M6GVl}hiPPwW_?Mem5`C8lgo_57~4>35L1qktH#o7HvVA& zRksVJtPn-RH6EbVpHuzrrFrC}p{~`}np;Jhk)Q3X+E-6TL^L!M>gQ!8vdwRdXD8eu zc^tHi#Qu$bgS6^t@1`v&r_$RsB?Y@wYc_(qrkqo@s)|e73Oz{-L@Tu|O<evPc+x zx&}ui?izL)_wN+9> zS2Z%1Sm^@qReU$-0XxguEg3m}Zy6JVDvzBtEFo%xsYoKwV7UrT_{hV;}Z~u75DC zBITn2V9THg1yeHEXBD{}J?OFg#rM=upcSz_Y zf-x;F2dO-b>1A<~b;TjunGRX9!;QEY7+iCf$RvTu$lwlo=ouLeFe-ij0Dp&L!Rd-2 zgKiCvzt_0rb;6LLjtk=fj~P7U~`C zP}0}gv<0FGDXte7D>C%;6_*;15!scgI`b6L4l z)0K%tk`*OQ$;!nO*j9Ne!;J|cAYy3p=2~}Q6e`=w?WJsVUasSE0`NzuuQ-+cI%z#~ z{vp3oG#c}|vC%JUJ3*(cGFv~DLlq?j97`Q7x|*68>FKE{qm4qOH1I_nNT{kXxyIs8Sy$+{vh%C=FM+~A$tB#<7DlK$X63&ZI!qI4&o)HNGB&cc3YIhbozB#cH zg+Yv;<`OUo@Vjx&0neU))28@tR!qKMUSOBbW)Gd3b3pm504cV?A^~DWUr1C1RBCHk zruWzV0sJ(9aQOidxdT+NniIO>D zucf5DTrBmA>UwNi-BWQ>3q(q@%N+6SDvHg6$fUHdb?P7jMu|~=W}HZ=B`r~?np}EVLc4VDb8eNE?IkRB#z^j(jX$ zBaF$IWo0FOC&Na^IrHnj^>JA{mty+c(zlyrec#f$VRRm_?EQ7VY3em4Qb2V5!m5s< z0^W-nIR!*DFAhOitRkbdccda4IB^F|13iBfr zSe?#G-UD+U`s?>UqTTp53O`^2TseKyDz1V?j zysWY+0Row#idx#qNL`BVWC$CkO;4tEUW3EHIS5JJ@^Q|VB?wu9Bo;I`EbY<3M zf{CrrA~C9)Ox3j@sINzNs0K+$XwVT$_Rm*6P4BaP;+CefS$7vxTQ!D}?j?X#(b86S z-i{c5jM3W71!;<{YK0h`r>taASXpC=XGg&F7M-lRj?GhVxIncQtwC&-in5+%1!SSG zh?24mz$+&7EO(Y!5Hc|%Jza7mDB1&tP_D!f?2A#ds9*{L7f>Jq;ip2k_pwhqBsL;81CO?)3g;em)ljg&jnTHnw_d{cH4a=G`C7ZhI%qvL+YPG{0tgf<+p+3CM`MmaVIe=|+lBlO9Ao3>t{DkM7~bAX5(x)9 zfJx7uIN)QW^MEpV1IavpUV1GZ8QBmv;6{C?1fE6@gPiGaP6+)uJbve*)*unX##swyAfOxq z50CkL{Qm&$(&0Eqz!Cb58Bj<$BOLxfBaTStJ`YKq{RIagq9_CsH{c9$$jLl>dHfES zem-OUzMPHu7%|VK9>v=pSb#mGD{wv8WBo9GN%-k2QaCKgfFJS#%5ldepPZcI@tpCF zmKlP^vTSTN7-t#xjQkQu2l4*>B{i-j;YPuNK?iVLdyaGG$sBXQ=|-buZ{GUVY<~E> z7_Iw*q4j36eLGKP?uM!D-J;o3HC~{l(zMprxZfAjBAO_!6|u@_%rk{{ZL%p&6?dMZ zeU|JkueFy8)$jPl-?_cb)b~oM>br%kwp=w5TG_<3R*Ghv$qf_~u^=@y5WFH~jm9E@ z6m@ttN>sD@OTB?bRKaI*%n?S__YAWEjOU&+k=LAG;urOuVETX2dV{l?7ULbuy}I7Z zC9?ZHxVZ4M_x~nH8Nui!qvyDFaPAgo-t5*aJkVu7!&d z09&>+pVfy)6H4lcx|xUod^+`@1(IuFWaAHiiHCUUKBT+d+pnjd%+%FuIdp||whG$I zV?9L%q1U&HsN${`=+}yh3qVh|6^!Ny877)G5CF&5ucqIp>lf1>XY5_9v8;05s$-?S z_a^fjZfpLpsaJQ1wikWA$dfe<3WCw$USDyLx$^%2{4V~Kb^e{!&Gj?fOEOt4mir}r zH*e@~qFC>Do9*%yiS-mTb10TN3w;!oGDTT9+ci_e96^Y79@@tvyF9XPl13$&@Lk#W z2i!{%c|Lz20gPv??+VMwER%SqY9k(FGf5OqJz0FJX%R<60vX8jq%@_NsnVnoi#eB7 z36_b2M-aAUJ4q`GX0fpX^r+l{V3W2xj+Qo(8g`7$9MgThR0T4wlV&+0U59aIMr>mQ zw~rw8oc@|AW}xkmweN;&MW0&t27^vC4)PY$^xCT6E#g;VRLHrN90ogf4hAvShLWMn zZYh)vxD1%i@^V-eA(ZXlIDCKx20-gE_UG<9McgXR#L(MnFB&H4X1n(ZS0O*t(xukzb5$jmp85{?e-O5Y_U9+ksiLqPs)QacqrHy<-q z`(shidn;*WDzYlfjPRclAz-BfvBpX<;1iZP{kqBj08F>5f@$4jpfwGq=chGBhS%D* z7qQ(b#WhRmJEi7Y>jmD9LL9I;Iz3aW6?Fx!SZ)QvtSINqmY#xkeFD=5wn^dsZX z{U|Q|%Uh)))BW?cTIRUkbR|?4-Bm|#U6nU&2Y8UdboE*$kJWo5t4~`2k~va1)xlWM zGbo#qwm@J28&Pq3FJs9iMG-}}z5v@(0c31{_>wNZfc&w2nPUoMEH-3}fJpQB0Gxgg zf-pfKgVB-57F3Z2B!#!D5*bT?3Mo)Y3VuTjAMP^CM|7pGprx*%V^eLo(bCr2t5*!Q zR8^2iQ3T)yWGvCh74YPGir?7LS0qdolX@sDNgy%GWpD;S4+Vrt;>ReNK2M2jL2>f5dl{J>Nou>DvE z3hRPF3_OFJ=iGDGWV6O4V5lDj6cSuNoDvE4k`R&bz!T07Nu{Wg1!gIdUpP6&NDINw z&N4|PWE^9`dogk>4O9UmZB?)*rPTsOU0L4AXaPar)6jPKb=>s%3^>fu?M06OhEM=p zVFxS$zyM>MXP=IGM^LztnRX~1!WGkT`C`haK5`C6zz6q6^=?^OB@U>}3O*7408gCf z!Ot9I90TW~O;b2|iVQ2CQAr`UI~H6FWB>sNkKc})r1t$r4MV^8>3uM@of193A(#TI zxBy5lSdGU3a7pv$_dO$dqg~l@#!##k_ia3%W=IMX;O7Gb=Z=v}BTV@!Ry+cuoOmBN z8RtLtI!__s1|@({pm{haoc`RLJU^Njnpfq)Kq$-o|ZMDk`YOn|s%a>F2l@<_oMJoq2iqW6{qELdP;CpZIv zjQ9inIwog3NEsxIo;-|W1e3?f@%RUhoCkf)-TUpwZa&7?VPbuSRek(1UH69S){f5i zdi75!hI?;pwS7f9DJz+!v`qqfg+0MG$U!R0f<{;j_4xa_w)&YH$#b~;oRUi)C+9gi zK6&f)bMEcCrVxZM z45TgrAY-q_<*u4~+UiO7-q!I}sIL>}~BlZ{^^gzHn+?;WooMCw5C&!QJ zljEhWtls^8pYPXm@WF@x&+F4y4opyZK50tmoTzy=;Oo=CxNG5a5%f!E(rRDrdLa7P&+GK`FpK1Ni0XCK|* zniK}c_5#TQx3EbBUfgQGPQwX6{qeXve8)Wd*4WLrojdgNBp?=S^{f?j?f1Wbo#QTC`z!SS z0NSf2sO}B>w>PffOJ$?3)VH^|U2E?bE0Kkxc_gS4O$8z--M)GKGN~V^+kL%M{{TpO zN{3utHDA>g_f1-K-OpRq*4VpYrEN5@MQqagB9W!H&v5%Bicr;+Ql!*zPb`Zw`gK(W zf14Zh@%6vmduE@})}F>tU16ryz2dysZMVZsBDA`1LCtZ4?rJVg8?({1)R@*Za~sP@ zj&c%A9eJm;)}GPUTSk=9(9=@s%LTrY*KIU_2&AT^ff1^(jNbbBch${?%gIpEu`K1A zJwj$PnpJ_1CZXLF4F@$iB})p~qlmi^Ls#Mz&9Z_lZjjjrRL4rOyYiB(0(lPFMfCE> z;G1y=Vr)q!jwtXE1G>iEpDL<@3agRhXvge&E#2iqmv;(F1Y*Z->;iDiagY>nIRIpg zV4YA)N~^fCDaQS{Q{;oeAfM0A!098g^<5O;kjyY}FaaQBo=F3N{kqW=&wuv+02qTA zJL`t)OJ@3D*X>g^OfP)7X{#L!bn+O|qM@r~ua-KM81-RDX$+-5Kyec>3=|xh{u*7n zfZO%2b)LGi8;QC{qo^q2a42f+jYieCR;rI-^;u;5RD^E|u6;r>xfXx;nAg00lkLqA zm6j{ExVy|_S#Twm-)n_fNf02i#;V;>9vvxHCiB) z@W$MOHfSmLRY2eW08-ygyW??|P**?8Dn`-}6;a@l6cLYtF_!!sb@e0&CEQ#2WQD;$ zq~v60EZOjI2*yVP2c%ExGP1b3cxExP2@G`z(7UM0w^&EJ zzf6`Z?bA-`olj?nTT)nV5I&{<0EI17nrBknY_P-@LtjrrAK6@CO^GAROHCbF-oTzz zuIhPR3oO3y3t*pdDlj~bHhIq&IOiTZA*BzNP^v_1jKl)Wgdc9wLbBt62q3O<2?M6d z98)2Rcw(L=Dq1;XSrC;Wl+y#aBEiCjWIB=A90CI=Ab@$`j(X$4kE-vdjTN9{w(FkJ z-KD%}8^orTzJj`@I*ay?ySC>xtLzb^a#9u~!%k<8HkiW17U`SlpHz1fPxmsW4%}HZ zzNfy)X{)KG)4Gn~9kP3e+otN3)75iSQ!3t?nHgY3c9ulmi5u=CuTp-aJ11AHw63PE z?X8~9x{~>6l8;qb-4+P7MGXvb)Y4q3U`1G?)Hd3P1d&Y`^{ZEWPIs~OJRYX4)LpjL zG`9C)Hyf zum*a?T2tROcgR$Jw12awZ8VujJG?DD!~4|Jw%HmOA?fo;*c_* zTN(4GPiv0s{SfyTR%t2iw6}{rRE8Ucx~->sE#^4m5?k*!%DPz(-=wM>W=pI$3R6j?bqch0(PQj;fqUE9u0D)k>1g z>$04nMchYSUVFn~%|({+OoXE&p8_|BIIyW{#Nj|p#BrhXM1jVlQ0U#6RRaN+24&)T zGV`aM0W7Z;v*^%Asy8RlR*9g)R>P8{-`%V3uAA=ekhN;9H+P_|s5B8ve6!M2BsUus zaz_xWhN_NNH7`t(J|L?^FuGtCRsx`EDTcc_!4(M$uL*S+fBhmaGhbgTdr4#<$|)hqM{ZPtqq!u)#%F+ zB}GK4hD5&DBpHLcr)5g2D{Xq7v@2{^tySHk(bkufM5FfmBj*8=6 ztjSYBX{vWCQ#=iiXd$G-2*WVPRxQTMWxr1p*IRWhT}(=l$272r=Rl!~Vx=}rq-FLI zAQ84U<$3GGf22;>>JI03cE_k`QV1-%3gbtqwN>Wp>&Z`0V5wPt%hXkq)UK{(#4xeU zxMpu^G3(lE_N<`O(^x3whN|OTsqX&(!R=I35ell=9TDV~vS_1l$w^3|8m3hYViE#J z1RFjD;#2spQL}SEGT_f5KtXDf5vH2jj-_JJGYVH^ETAa^5ofZ=mYHHn45UV;K|ttn z&{5!uU@VmlM3Z=mP1-9&9)#ANSFS9zH1o|-Otjazt0@)g6o!rItCm>Z17(sDSxMTX z&tGS-_d4ASt8Ud6JF3OCAzQ_+N;zr)KGmqHx5^ebK1_iz$-rJZuqUWARCN{g(?>yW zi29FRUjG1ZO#xXj1Jq6FM7ew@V%tN0-4iWAXe6A=6VvQ9Ei833?M$#J++{MXjR=ib zCwHr~410$?ZGuIOx9$Pp0o$;wQajei_2-`T*zwl7???9oU3Z(eeZAHiv;G*;6G>yS zR6p?pd1)fH$zLQksOu@IrBN+Z@l;l%l%U8JTr0X05i0B0y(2-Q`$MCtO;cA~?{r`B zexR*+45Fg>sunuxwn9KaB8XE#fJxmOHsiSUQhi)^4@XdTu016#skGJA>z!4mt#!0k zd#x?Xs@bP)_ZTjhTI$$nr&RV zr7U+HQQb{pLr`>mwkk~9=)+9(-^OcX921hMsg?pK!tR@t>lQN(jkfGJ%EHQqGRC`rR1S>JbKvqYa5+3+;NTxUWS^_cbUKSp_LD@`OFS{_F6mOz zm8Qg%Ye!8)l+|;f8-g%uu*j^0Ga%)a6!og4k%WRia5xIwh8PRDf-ra(2lI?`!OC6J zptyG@>Ib$O3c)QPi?o#A@&2~EJy9@He-bouLu)25Sk>(NSVUke`jftPgk#o!iKuLu zgs5|xmJGj_R$V5RF*4U>gh=jsBC`?zII)%5Q1_?HSCd!zN~tP-CG>&rM+S}{mAa4W z54Ad?qp@0c+fA*lcDb!_>HgtV+UjoAc1~Akk@xxxO&G~T_#r$+N~2urEFHnHlrkQQ&E|W(lnl?B;621P*@Vf7aUZuLs3;* z41S$eY*9ruP+ZM4ROS5$q>!D@6hcPQtV?>kM%LJvW_APJCjX0v6o6 zlrUn90Kj8{0pt<$lZ348l?#qo1IYH02;G7Pa1JmyIQhXH5Udl_Mh%$5K0z37o&nAe z?fYk|^e6$a6+m>Z2kD409MyDMj-mvv(zVdTd!v)qijJ{jYjw>W6q1^)i$^Rf2fjHX zkYMi491O$Wzq>Y=sqR(Ox?-Y|nnN}6&u@~Zrs4Jg12^#Lq;VON6yGBd9oP(}NWrqi z%*f;f;EZKP;lVk_APkR>pE>ES^?7SWs;1)f?NucmGrSbBqqNnNY{fh{QHDt+F{|K$ zQHaJl=&kP0O|NZ;KOU5K+!8Qf!{dgVUvRW_*56Naqtq6sfx~)&YT8IDDdbONkxvYg zB+*Eus<3qA5x0iNP1l`8pzewGmEUPv$f4FsXkMyXbv_v+f+-teQ-ZN>es~0obzM{T zqTN}iXf*|Ove9eqDX4q;*3!|eG%;Kzm+l3kx`+?9siG*cQ_jx}hAB??_u@cFtM6`= z)0WGul@_Er-i4vI4JS=(Y32U_h$eU-h9*UbQmq7%lPoNUbkG!08t!7TdBQa>m?;?L zTTxv=E~DvTYTyHC3z`-f?gNTyI#3oTkXGo}18``IJdnGQuKpEc8arJ}vcD}T4thJMU-lDEV zjwxY*pb1H6qj=F?nvQ`p8pRK%5R^91cJOVI$|>q)o~E8Hv;nDXPzjz!r?;{omP&~n zgDqWDkte9nmtV#QELdIS^X7VWW90<~k~=z7hAceB73N5xTD=ND8>wIyLXD_uzDsRn z5nh!)l}(PMS=wm=dMOl9fgDt5BZ@u4Y*Ao=5`sa%T!W1HJRF|8mQF+Qh2%Csz`@`g zlffsC+XJFxkV6|Y4`>^YjIlWJk^x*F+noG!(>2cbX0TCDbkw(-eTLsk8RwqiTTcVv zC#bQ*N@Nui$m_x)BNlzDhR!;$NKjdbRREGn00228oq!!l!vG}E7EZtpN$rO1ajKt3 zX}Y~Yw2gAE`-)3tme{I8T`x8AG<4Mam)sIC4Dys#I}^YRTviuNAwi}4ZLI3MhjfA) z#nmR&_j`z%C~D~S3aWn#r?8}qvdJwQ#SJV-f!+5=+msbOQ&*1Xr+B-=qU;(L^;f4X znidO{(XVxsFCe>LUOfH9zKW;{aV!h%qLN~)u`jFD zx!ozRF&;BLy`eceHe6&(KD`n(xie-^>Td)r1 z9m0x@$~8Tk4;h2Y5&{{5$jSi@6q{8#g#thiwVzN7Epa@~(9WQY5WJDe=OB6DanB(1 za>~FfG>oLGsR}<*Za@D3k3XL$z#SpU#ximE_~}}hf}>@Ofk|wfC<7Q!0m;ul1Y;lO zC#^hJ!lajM@3prgu5-68+ynA+jmPnvXP}ZZ$%yzz!pMM;y?mYImLv{NJY;7)W2D=Z z;6%kAXeG~=B%hxn0PV+|V;?#0F)GOs95zN(UnPJ%XA8hQgOiMTJoI3~((1Da%77P; zNC%F7NGBiAj!t>cN(1DgkU?c6jDk~)fZh%dBRKLrbU|fBGcv2pGl0Q>%KreAf#3o8 z@_tXAzTi(7l!Fw6kP5gvc9KVsr`$ka=t&s)Fkwo~=bRjs=Ykvd9)E9v_|Hm#O{Xlu zz$BdUk}?Ru`S=+hAD)r00}RRu2hK7;1dZ7M{{Xk=qfqa|D`XM|LC)-Bjx(Pe{{VmA z1`I4lQy6Ah7-uArl>{7TIUI~=Y50B6Kj1GWu z?x+AcK*qns0J%hBbAU-K4mrSV;BW_=XD6=mB`Q>81Nj`7~fs?@bzyqRk@}j!udiz@}LCy<-ocl&FalkkyIXxPinL?%nxXguE0tRwD zz>V496O-}?Cnuu@6f~kXJA-rjPI3tShB(3T=l#!0H_PqD+yx5Q;E)R+#v3^tar=@w zP5R);Ot4Y`BXeYA61)@1$3NfWC#8%KxiYbgmR;Mj#Qylnz{eT={PbYLy~U8LZNiMH zINZCA<^box#&+}0PI1tQ-C0^PPS8iYoD3ZNe4hZ0IOOA!@<F3Y>{dTy( z3P>dK20$TlKt2Hk<0HodqK5wb;KPF$aTFo4PGl_K2ZG-3^6uNm1dsZfk;XR-?(64b zuxx@?1o+2-Jn}jC$4F(HaYSSaq$@VX0GuCW29G2;Lik;D6aHdJ7FP)S~L0muZA zfKEJQXUjeI9X^%u-`{K)P#?(rF;a1WI0R$PMh~3%$oS~=^*0TH3Y9y71h=&01W?83YhcNEu&gI3Kn-{krNoSmG=y`@hOC%mV}LKI|4yK_vKN$Bd%)t8IBR zmjtLdBfG7IbsN0G2M)e_~88hIxwKu-+pktThqx+ipz!( zuu{c1$S;iXkO}!9ocZZQQ@^f8&=8g3NXAbaMn-Z58$TzHjE2{iBFAtAv#{h~`+p?! zkKe&Pbd%wC0f@l_$PRYMP6CoSV*@wL}lzlXO|#{9W< z_uSdNfZN;rd~0yEnTP-ksVCG%BnKcKPDXjo1~54!XP&;P+l(j*Far4i0gQOTARK3( z&qRcM;!VSWjfF{H?}i^I&nF)}8NKs@je(DFQ|XNIKqL?jd@gq%Jo0*qx(YSPy}9?V z(+|GA>z3ZdFn%jAK9klRQEfKEt12l3-P^T%xY#iI39mF9)3Db z3~UOLRT%q*7-VhdAP`TyXBol%opz*;O`{mk7;itT0oXBM2_WS701N;+OfD6u00PI; zCy=GHk@KD7gPf0VaqR(4G3O<)N6+O1FX|+!%)X{o({ig8 z{Xvv74l$6!o=^L$g_veHRe2r1&w`~eFfe_iX$0~ylfWGqFtRoQfXNJZ2LYR4Y=M;o zV1PkUgT^^0Iq2ie$}-@n$Y5}}_}rr;{GK=*XO4PL=`w(uivr`*0q|3H=4JEB2IWA; z0c>ENd-U2c%){Ti-0n#@-~xl=CyX$`89yVV1{R`>Fp+?47A_R7;s+VeIKan~kI5Ow zD9o&>nm4mc+qjN=3o`+N`W+y>wPBw%Ft;AfIfapd%4tXT}CsdQ90Ah0ZO zM*u2;?f(GlE&91zR@0I8F}BLJ`C9CV@}8*u=f0kmX*0nY@Car=1Sj(RX* zYMEe}x1HdpAQflY1M|mU0LK7+_yhCF zQ7>NvgSPd!vsbn6x5Ey1oqM75tZ62q)ix_yvw&bV@KxLB{J;^u-P7YN_jWc9ebUx0*U?*dUYIfhr|bSqeig zZ~`6ET?^VC+4ka=mYYrKDgj?b3=thccvE`R)h`l&(@S)?dgeEkhW1)yi5J3nTqW-o zgI#4~pI2$=s_i}0?cEJlqtLpBg;>_l{4N)`O{J@nILp^tu8~D0B|Iz`K_lT(NSvTb z2SpZBezECb);J!WKnCAcfWT!5YJIA>h zNnDJB)FZNe?X-8BPb|ioYZk7zLbUp)MciR(JH4*q5Jjq*DjAVlOLX$7mKh^ZsFDO? z2vrcTs!r?aFQ)i=d)*7o zw#V*bdTUJtQ9RQ)NR}p(%wwfhRZCk~;MH$bO&#{ah~1nbsVrD7kO?G`2G#RDsABoo z{mIasp3)WF#O`g;Z8~0pHemuuPyAy40A7gFLuawk$o{2ORZD=6C_@b@7m`O!ppP0G zO!sH}K)ahieD&3iw#V50Cv&E@MMq1zpU~5k@=G)pyBrlH%X6t{Bh7r&>mw*LOhWBN z>Pe-0G4&Jm^R4WC-R~Vo{3+QeF7B4weN{lWQwuaQ8i%*(iy{P;wpn8-O*O;P0h!dv zIofgQzjrQiXg=QAJ9pb_boOYjKW(P0v~~-7R+|NmIzZLcw6^en^VbQYjKM8T!5(R+ zXO?9^0LYFhJZ4ohM9JZ*=+VO0WD-t<29GSX8aS8-nSgmhs;q5onQ~}!Fgb<< z7g{0^b}F2MDeB_F1EmQim}DybD`(Xm)6v&%*xW6*Iz0v38})XGO)Cv8ve9X}=?a+c z(dpHuigR>&x{GXc$8@Q$Mw+&Hq$~z^b?6+{T>;)b6$Li4(zfkWrL{$_lDJY=DfMY& ztfn5dZK|%Fk*)VC8QN%InKqEfyU?nDF;1oJ7M#&~*RdL}PFyb?x70U1VGfSF)M=8l zK|yA}Q5ra|8lshzsb;&~D<)R1fx^W+Y}BJ@jR2VT)3`my&>H^$xnEE1qZ7H)_Qt9^ zqg?d8%7W3WCA42>`=Dtwt-+Ejgcjp7eaccwUYNXN3a)dtAV55}3cBA)jfa>7ORTZd zs-P@-KqT6s^?H#_HM;~7bghzX=_P<0SvPDC8xy|=5$k=*{{Zyq-3r||-Yd4b?ibT+ zb`hqu9eF6+@Z6>LjA8Xk@H$DT$18287}^j7W!S>!;M8V`ECqBix&f zUX`S{QTkVF2Xpj=%H3?Mr&bWn4O=vI*6Ca^k~r!WvVAq$;eb7PZ{B~ZuHSYtg@CHIVv0<`3mWdlY=!iipbHUUK&{!iJDRd^ z&GlKYbO+K$)Q+QHrdw5uPu;6KJ5iyv3)-%gw?xxgn^XS)Cs0&U)z4EriFto=C*qJ4L7T?T+tivQZVkUMuaC)idhb^;Dj<-sxKP2_(Xu z<_irRYT;s~h9!*&(p_i5!z^q-g|lcCru(+V6V2k9X1ERrkNB-6gB(^|Cn?G>ghu-9Lz?J!+? zu}xWUvg=KKcvrdVOO4W&W{#q!-Cb0Q*4ur`ISoWq^kAumVyxLkQBv!E-fDi_ccZp9 z{=`RbtB&udHDxvDKwamxfkMMX$a_Js_F!_}Wt zJ-h7&p1o>b^HE*24fdLvs ztQu~LTcviUj?+Y!TC03ib-IFRA)_$cpnSyzZN)&~*wY^5Ftk7Bx{Ulm%NcOV9d!C-A;cTLoNfM&E({GU;rNOAowf6*HRoF!UWkMH7 zeIb8_Oxlu;pS#~x5?5&+*g>c2wOuxmqppsNR$r)Tq5G7c=JPIWw#KDLmFJW-TayAu z5Az8e-e<(KxtTu+;kjlEV^%r5$kP;XxE@=qex_pT3q+DCv&I7m9y6$D$CrjR^K%jk z)If?q&d#-|S+-H6kgipVhTF^xD;YPk{k-nq_mOg`fU!(MIW$HD4lCUk34(RI*QK%?nl1XZ-+eTZj zm6p9NYI@m~C7zukq@JPupi1nrzU(MnycI`)GC)!Cems-UKiBh~uJ~3%@G&#VAfGoo ziL)7-EM5Nqp;epJqBWqP*Q-+iHE9s$XA>|AzFbHO#~%Opm8MhKSAc2lfP6vVb>yWI3h6mhBsq!|QV<+JL$NP2HtGyp^P{a+a z6b?Zd89oj=RSG`EF1U*vXWf(KnVEqj@&MsS9~kK_hZH+sdgI||ZZ_mqV8vIfoYrgp z)LGOCRtn8Ysii@+j0V|nhLV<#PSjx)&o=Xr>8TVk83aZ<%4obE` zBb*L$a!pAz!lS46PKv9G0D zfiuR^&}sW)NhAXAb2t&4OB)(mIUOXb*_2Ydhg9`fZY&+5)HJ&JAddZNy|mVD;@q!L zEy}0wZzUcrOB7PX(!oq?72&HeGKzY4g``l5&NTASQTp{2o`eRzx;T=isUwXlDq^P% z=p@qs9!TOW-kP%&Ld?nmC#4fxXs-0rTB~4MntJHkj(7+k%}JC)ENV#rKG_-3$GKf{ zG0EsjgmkLDk_eN#-C4TWF8T)m(Kc@ZQr&mIPq7?)Z?AE%#vJ;b?ayt7wEBD3j|JAl ztS`OTvuMiO#*Vp5Z>hiOi;b}$lCGptLo!YLE|y3Z8o~-SEQt)E<4~z}X}V2A+g)!C znY!w$hN{q-s))m*&F+$$_`aFG+tuW$wbk9JV~#4yTG|g!?fqD(*vTIShEu9zwU^6f z@9GCp_R{@VQK)0={T)~S8eFG>X|1)ijZn0=8uq9NXqx3=SBlfVBHNlLEa>U9>OSXF zV@cKBAxMpOo~WeMR8l1L)isbgSU z)(VAD&cJA@7F*4*u|##~D6s8EdLIIJ;tkwcE!sc0y|L~*%}*NKs?Th-ZDEiJ#j8+y zvuWzem|2jNp}VATM=}!_5(wD=Bdf{%RH+e-poI(pB|-NQyeJqYuv;LG7-z=gQ};VY zSUa`a?M-bcvQK@|vfT8&!Y@1F;= zEynigxVi(>yl?;j0eD-cBCHXpSI7}xL$`l%jRM7n0wxq^fdG7(Pe?{hmyW9JL@DB&`$j9eCdOrS@_Ap@$RB{>O z*iXEXkPcIxPX|6TkJ1l3`5{z{@ha?5BOVDn91kBq9zW~XKh9@tlsiwfg~1>F)<)3B z&#?IODEq>v8wkQ_x%AL*f1rUQWZTOTmzl>0D+PZ zw}HXICmeOfDV}ZMhNLj;wT5z$c9-R_qf zJ3XG+0jRp(ZncoxtyC28LTV0F~+f}VxunO*s4hbuOL3AKg5pbdAwA1H|XAm z>8W*9{!jRRr?~J@nQk?eRk@~`mqya;l4@v_KGeF&=}Nr1Bub&WgE5(dD;Rm0dZ}YY z4ARLVtue-e%gELMRTsD?N@`&waXhW10OHFM0;=BZ%yv~BNujk1J7PKCZ?C@keKKk; z?|nYjL!$eM+`2tOTS=w+t!ZuZSgp5xvcW?Inw6RlxI3s0|m!CYSLX417)D|NK#n(C(YP0vxyBQsp@vCAV$AwH}W z)5dqR$WG5oYilO2s(PxKOtQ(dEJo0xH47RnYl!2HHTEJ#0;&zF0Kn>u89DQku5ZLi zsO0l9xiVCyT#73sg#Z%f6l|r7q$Bc|c4k@LREZ2(epz(OFa$J$w^h|;BPW`o=BxlI zyR3JssA`FJf>k0&;$4wb!4iauo(S?*C?P-+IMWKM069GM$`u5@OA&@Wx z##m#XPI7u7%Wh-pdr8RKk$_3YKqDXh$j&?;9B|K(fq}_600Ms;`9Hbfp0?_M17IuY zF;fS~l1hQqM%4hfxMgxk$r#TkfIn~Ftk2yYS4E+F+t~}X-|k?sYC0WdqO0zUNi>%G zYt=@&3ylG-OvYw0Yu`a5Mk zUCN=WE2?9pfg)Mz>Rg7Fc`!?{R2djmzyzymrI^gpDD-0iTX+rtJbRUn3a}$`@TUjl zZs|DpuDg$)arMKw8~ny7Kc;G1MF(W`y)BBZ>!?L`r3A}d^@~kdH6_L>x@DG32x5v@ zhowxVV~R4HMlxFasD$P`>`zb-LWW>A1p|`Y=k^?DocZahipycL(xtmkTBxj+*jjng z-)yFal8Gj)l+@Hpu*HNAJn}S-0E|( zBVb7&9)O-Uy@vza2%>-;fEV9w&({VlNbz8o!DdpyjufyU9ANO+zykyK$mpjLENZUr zvpY(WxsEZ&{A2bX2lLl2E5;Yym1bP++6F=SUkq21$j9&UIcbc5u@YfO1(;_foB}qC z5Bh=0=>_f2Jw9Jfm=AB0dUUw&hHuIcD4pd0F(fd0V6Gq-rzHqW1l3G z=0y$HjjO)Yew%N5?TFch*t_e;THxAK^W={iKb-WMOq0QoAHd;G25>S)fBN6B^YPQi-F@wbeg6QD zrUJ4vI75|0+R6zBB$I*&81cd9`(v(Eq?Ohv)uon9M;uY6=^3PDP!&{?$0TH90A-H@ zrmaDJvT02{U#m5J`q!lN&Ad6OzFw+D9UHQsaRnWss+=0P0i*^owN{RQ#Il|p z7n_=uV+O)5?D8<^h&O692_BWPsg!Sv8GN+amkAOU?s!!jZp?NZ_1yFX?TP33q4(=W z+k0zl>>i%fRF`dSaMX0S?R7zBN)etQpt(}Ob>J+F zS;;u^P6vVVdBExJ_jtMA?p3#o&23f6>2s-?vf*&8nWw6(s-26?H1j(acXwh*B;fcb z&rQ@+lGoN#Qd6OMs;VKUg%``qG^rF|05W$wj|0zMKjU5}CyeL3;DrWGwyr9;;+cM9c7!VrkVxzGf7#yZMc!W9X>RAi6m-&R>JwRVp^gb* zhTnEcOcnIBt1t}o`;iQ83&vHB$ry4!Fdgsg#-i*#zO3#3r;?tc?{2r)>*tb}ccbZF zEc91+BMiVD@WoiL%YlI^HZnT*qv#j9v>n3wanlxciD|DLw5^{;-D#qPgp!t1{6^1m z!V;V6mZo}VJ5}CVHg*IY_16CY2DJH1=6}NTKg)0go>2d3dpty2v8La!KgBt z2J*aMB(UZ4F^xcyy1^i6VW~k=!Momp92>D)dn7J0zzl9V;NblK0AB~5e;stIln$-# z_wG@_RRpeco+6&9QYrQe`Al1yHkzd18Eb2jr>aDtsT#Iw=0fdK`dy{C@8S3o{ zP%UR~ewS_UG?FZ$dOM$WFQOz@K-*8LZ%RKJJyMTXs4NP_Cr!&0Cw!s_aRiyP5$pw${Ch~!8+KlJxUr7XIF{{Y>{ z>2=?FyPWNE*Y{hZEp;8D8K#cD9W!ZZl%yYHAcRdU5*8H@BGa-(5{|S@JPSh-(!~RM zYYN2z#u=AndleA7KGX=Iakzp&<2X1qOH2I5keOOWnVg0^oS6$TC-u1`ZqSdvLNYcX~# z+?w_q000Ak0000s00002uu12RRY#IX;2Z!xa(Ml?JtLpfACWKbF8?Pd`5$ zNrvOaukk0oYijP~X&W`(7N*hmy*Bgc@P!r{)~%@j0PMYch~Lv`{_;PyakNN_3M-ON zUV?ohP)BO|Z0#jDLH89FTaCg~7((D=e>qP8bje>A=)KMmqM-t9uEd=_n*qanY3W>1*8?F&Sy< zX{xF!si$=eT)|gMP^BbfQd$;^-?MjIu1G3>75K8VmXb`KU7`%a^k{&(DBEQ^X?HX) zesQNUC&My?02OADTCVjHz!UM`+RbBJwM(jvtLeDHljM~EAKS_Q0H@E#4I_GDLP?h- zZ}M@LBw%1<WtMZZfGt_{c0r8?pz_fDnAB=RD`Y=!J6@@D*Pmeyk2hxL}ZR z&z?CPah|?N>k3oMauT5#qmg7o9LlaosT7FVXx|)j`~2V#)e)SK$O900U`pf8OC8+* z0DPQ$bhLXPrV_yFFkFpMy(EeK7Xxw#@~pD%RxTt26jT`iE)PCOj=XXI01%$i*W2}! zJ>R8@fh=0AQ(9|MouL(xYC0M)YUiwiG>>oJg%vT)vlC^x-@C74TA~M6Pf!xM1Dtso z%7e+rC;NW+>p%TOc8~u696Mcf(bRPjQs1a2mr-fC9I1-7<3UX^{uxl=cc+a*s~mDrx13WSWYZ#Lem_ zsAO6AYHwR{QdinMN9{JKr0s`wY!{tLVWz!XEw?#nFLq0WO6fffR{9Hscx)J|U`Ka? zKm$iCYQTaIUfJJlmrV(8U2WSfRRZX0T2rX6Ixkn&3X5#Eii&T)SFzrTPS%+t5*BKA zm11D~R!8>6aleE!Ux@I(!@C&f@a)Hw(Zm8UiKwH@kF#pIwXh1u%CZ^nUC$Sf%gqT^ znKKEjGo3)Pk!p-L94!N|)m(9&d(WcvCaJkl>52}>-86S|`>m?8pdcuXJG6>z`SrlaLjal^<+q(Jnzjkfc%}qt#Dymz4lyfPHz(uS=%PsmVPV%kXE6lGRvfc~q9yWS zWo*`FV$*0U=S*cu_0V=-F)l_Ia;7rjV~Hd}3&;wVCtCs{i2zFkZueUfbKlcPboCyK zskmrX?lir;w>3>&+8TO&Hx=f$QC{SR8**Brl2(o?Y3GeqDe5a+K}yRcfT?UY{jv6c zyqEiimesn`ygIv1UT31Nin0qeJscI*%M|224J8FkAIMp&*P6K_XB!AIZsj`1{q5}5 zv)B5wNY?4z$#-g5So=eSTeMH!xsi~GopoS@oTed_Hvo_+h zNBut5#Sh$WG2RCJeH^~&rnS8AZ< z2;#Kc=_!?rY5d}nRVuMX_nq5LKet)CReh(r*W5K-=e8Zb(a=Npc5CLadd+#<8mVQ> zw%c8jjR>~UY+Oei)b45hQR-Am*~X%w?I(FV!){xbezj9+T^&zysi?K+4I@KsTdiGv zx&G7cs;=~+PqmHSHuUP{o}xh?DvC(zL94qZ+3g>sVTViTiaL6#%~hr*{xx@%ueZvH z1==Mv?_XOPd`={g&lD<&Aj2|{fDO4anT+h3l43xrHsFJbZLsRyz8x}Eora;|pOE=SmJ-n_rZq0Wa zQD~a;0gg}ObXKiXPSpF}bVw$Of(nro@?qSm1gYm9dc1X>pNm}SE54PuRZmMtbhk%q zl3F!Lq@YT9>E@(r6i_0A?dGS9Mq>&Bv!5-Fj-;pl323FEsJIuWwNTSj)Lm|qq#>h< zC5>up>ST~b5|9hX<&C92*3~H;Yy@({98Yv@ChB+ibAD88mMEm(NjwND0tzLDXJvfgXy-_P;xE3M`EY%_tXxWxYFBdHMeH8RX6Y( z-P)wJKAe*75~@jNwQS6Fbn8@UqV)`J@^0TEMvkFk8U~7=wjWyh_ekhlIDId2uuC0P zEgz&{vfHZcv{y-G+!!aNNl_uE_O|BAp$y~>vNKOO>l z5nQ<{*ce}7R=~%%0|Un=BocW8$6W72wN-Y4!Hz)p5C~5jKunyR08Tmh=^>Qu4$43P zWM?}-#7(fT(+xL<)_^M4J9l_pve?bNLKElRui%IC2th<}_gg5E;-jmnx^!Rb5aLpo`~=8!0AL1s&8l zSspYlsN^GJLaK4Q)5aVpfI|?Yj*MdcW zt{R%2hRs2v{_^1!cAmUdyJ{Kgqml)os-l!4)6y2p)Fg^s!jDXX$E!5UG@z;=c|9_t z13NOnl0#=ZlpiF4oCD(;fRb9p0B9cKg_<;fHIBppK_KF(>G0p%>{sp63Z7W-aCht| zxf~tGJ5L8V@^i?>dMM4edl8>d5ai*Qu^+1ilw{y!3=ThTh{A;>kEZdBym@Tpikxx> z9uKr1-=g{8ocJY9LHBXwe2?2cdUgyL%BV{Ei;$(6PZ8eYW#tjcwsUbww8ouvv?nUZI*;(VHql0FiwZHO}qFP}h zx29d2J4Apw1J$Et(iYo2OqKOdReQY45~W4{^D0(XR4x@+S1Mtpr#Q!4eazn(t5%c7`iih+}L8QH{CU0cM721G9QU5V37m zN|tsz>M9160009umedGa0Z0RT7T*p4+imye%?>KDW6D}WS&0nFLu8ZgB>TDNI3u1i z0M9ujoU-R3d}WCC+?hs9T^dtW-L9g7s!B^;t|zIi zd77G6h3655`#54CyS#y9D7&Hx+gN5QOJ{HNMZKzZZLaIwPUreG^I9~WMJ2+jhMvCi zO-;3HYHFiuTAAW$5SUPmJWPZhF{5;iqLSZ9aB_yK=_SUi@9z}_o~pgURooe}RxPcy zB0vJB0muiacXV~ulB15*X0N@%mwLO6ERxe(B1-G*5ZdOBWRSy7jVj2*`ZTdTvB=ww zcCJrU^Km0CxnzbdBSJLFj)=}i>Lg`PG_uAcEC^N=r0O`9CSbrSyIHa$EEs{%l?3Sk zn*xcxMGRD$hgoUc7K6Cx{aK*(Etgc+u)b8+MQtlkm6O%eef3;dh=V~yi4sW#JvtK_ ztb#1$kWlFTL)^VXbNi0U=(_zoq^s!tOO5xrcOSl`de~Ufz2e`!Xn_j?z==;9R2d|U zvWI2>PHy$uhr0TT(QmqG+m@W|v{lhNP~Br#@0!5U(Y1J*rP+kk^aZ1iR)G%4!vJ$D z6V>~2yIL$Zg{{2SP*^nWu9;CKsF%>Aw@}lsr5!yCF66s~QnA4RGDz8C0|suX48CJA zA&}jyuQUgB1 zgENJo4yGh3<&$v-$R8LO!Tz7H>%HLndB$;^kTN*VFb5d^oh8e9WT|Ya#t+XR91uqX z-SJZjl(8FE8Q>qm+nv1m;AikT z=*Z<{m0b`v6oNs|=RD-+ImbC8$Rp24UG`v}0sSYENhbgR27Gg$>-f(`tChnHjQAfU z{{Z!e$LF8v$4P?=*}YbIi+CY%$N;yq1M){1=YTWFJg9k1GGq50XJ1 zGlR!XqFDkA5zB7K01?h`50RXC9R73Tu8fN&)giD6I4^)nJbWGj{{Sz7ILN^0!G}RO zkVhsEqm&GeKp+nc2sj%{bDW%KBZJa~s4FL?5rUu6*duWn1P(lHISdW}=ccHNF)`V3X(PIO(NoR#_PdUrZ_7z@4lxNdS9Blw)i6d|Yjt}H>jVZjP#ebP9#4_a&lxz+fzxwH0|gtHkUh!+ zDwFWXaOHo@2lNL$AL_Z-rGP4OJ~-n9{{W}s9Q22A(ENA5rC`GN-C>W@WIMNmBVeD^ zz$ec>F^@hxjP!IH{##*a5ZO9G&W;i^Pk)Dl;bPi-?9*JG8xB^s`!k=z`%Y%WRk>n1Ozr=j_{{WAc9uD`m zBNMv+(ney1emEp1ZDV(7=^U}7&$+WJt=z85E(!h18HXG2N>LW3IUkJt_15BXg#&Ip1M$XBKfm`U z_vI2*M(hwbEJo9Tj{uePob!+0JZEo5G^raM>i8rS+5rV{G6~4R2RS&-2*CO2np=;U z`OrVw`(faN$Lw&rN8h$UIT+iF`$2{cYoF6=%jAm1}enZNknohsrIHi+vM(|U*gHQ=p^#o;#w=4l1xrtDQP_40Bk~t0!Dp=v8v_|Ua2Mp~Is9~wV2n1$WDEccoxo$~ z4d?ww`;LrO#A+EmLS*He02NTAj0WR=PdMW^p zkm`Pa(Q%9)!T#9gg?X>r;nZwColm*Jg@Sm>oT$SPKynV=bGc4&oR0@2cq4()$sz-h zA{O{kLld0m1IGj4{BhH2gDMwQWgE7Hz#I&n!H=ILjt7&Bj(RdMsVrzvmLRch#{-f8 z#xQUPK0o&@Drk&XvA1f1{&dOQ#lB%Q?PX*uBh?&JM7pPqVd3@9=yq-(cf zUBQ<=&~k9Vlg|g9NaxAuy4#%vq3NEkvMMF3sHUN&Y1qZSwss3o5O6^TRvQtpL1B!B zWg~#-!LYkZjOTXjkU-n|MhVaT=cXNHrr_3ADyubBOxDRKcq(nTN_7n-zUOY4D(&?n zDoaF_5vSY*8EBcn$>6HdATgnPo@jTjwS(dQKVF!I_h+>fI_`$ytZdqXySLrf(w2** z&cobmJ_So9wuVZVw`w|d&+!^3iUAxlNakoTP_wDo*NL5k(wbB18(3?;;eAkdTJ=>m z5V%Yr=Dzi;=A^2rw$x8YOATD`*k~R#nx;75jwdohP3y&z*P^}m`jgkaw$VM} z(z?4q!*8#LM+*h3Sex}U5o!swJQXx^-E7vDrdOITMGMT()cW-DO1VM24!pklO^3SO zwZGdt;ij~i)HXX$@k^c7*>IkomMgBBw5&4f31}MN78kiv(v+T-cni)Q2~~ZiP7jFb ze-!ZCyTd+aBuvg?cvH-1mN?ot;htDDvdJ8C2Wa&pa2+)+m2C{TVV2BD9V2pMjUBXx zEW=aAud@bZ)2f&O!KNgSaXVe#-rVX96Q-&44!6=edgZ4m29~U}+^&(>{?@9@u~Dng z+H0OE;-;*J(XCZQa2jXKgo3L70DSL1WZf2mzqyvUWR@3#SJSoCHCF>kI<#`rB~7xH zvPBg!24;BVU*#M&(sR~I)BW1|O76#WbpHTx<*3p!Qfu{|D$OOX=_#VP=xuXH7oka6 zI!R9*B=(EVHo+xoRLu(1sCgq+h+}77F4`xz){D)`$6?YHb$WW$Nq4NFvL>6Po-H|3 zRUIWw;*L}Zv(eH<`6d|)$@)+bSg!O>6rp5^mPBx_jT50yRT4FNz@l~}kU>_m7#vV# zbu_@K1cDh&?OiQRSFkr@rYJpW-R|1zy$^oT-Ko;Oz}GiQF-2K!sIchExS*lF*=pgq z+h@36E@@8BJX1n`;-CYV-wH8=8R2wScs``Qp-*_bb#k%&JZk%1l(Jr~ms-26Ro3x* zuAS$hj&HDqWHhfUKw_Sfq(cmG`et#wwruX|{d!zp*BzJXFHTR~E0v*5`(J9R?KxFG zma*GI?lhlm9C3=dV)n^&sCZmBNn?SfiCROIdtKj7?0r6KzTo!{U3Sp-14s8a@2jns z4J!?OronBwQn&Fr=FSO~<98&D3rjnpv;ak@0WV5vLd zrYWobpnJ95&gr}tI_qukOG#Zvq_pf8D;;~mQ%ES{w^vn9O4U%Tusm`@lq2+#tUT!d z027|w_7k((lefArw3=p{NNTBc%UyN7rq@+nQAbN}xCmcQQ`X5_Q&B9JSzt-(YMDJW zFw0C#NbcQwJ=<@n4LzcJU)-+mcN((AZ?i&{t!<{Q7MqGXYMYL%vwhtyqRR~CIp?eX zArirP3lJ1WI;N;96bJnM>m6CFzNdTZQFyx5HEyQvR;{I^hB}(KqJoYZ+N7hPx5rUa zEHw1gR_Zex5pH;(ia5tA7d>Ks6wM4!CQ1}Zb9v^92rv1Lu{$FxERAiaQ;5)(veGdH zw7uQ%#ddQumRMla?f}v?0YqsVUfPJN6af@eW7rSyr0kH=S_f43?)6D5H+^zyG;WNN zK@c(N`e|aC`&x>3PJ*(gDCpyq2*ac^Y}^SW)_P@|} zmN{CguBsre{{XA6D>c9Pk@ve?N8CG4V>HHy(mH- zfL80VlQ%SzY^qoi&cRg`imIzK5Ho1)>1t3W(i_SnzT@?%8edZaCP&(_uiVHsJp(V`i}ahyVT#b z#)n9>&ue=>Y^i!mOYWhpieYN7+u+|L+w|p-1-WV($dlKrbdH=#CaPRx?&4f+_sva3 zSEe-{sn&Xe;Xy@HsV~=Z?{d3p`+$;5vQTZ3YMCh`mQhO!OCw1?rez^FgkM2^lzxb{ z{e!-pj=B9o=+w68Tm2RP09{%%<@&g+*HdD)8u}=zZISwhBT;ZPEi^R(BQy&jkYEwk z182NL#k1!x93pI{U5G&*i87HjBS$7;Mc4SBCA{gME+q1u(E$Eh7B|E&WuOu>l$JmV z)oUw@rdZUK^7Vj-9Hz8V+%r(spW*%VRF-p1^$p(bFH2XcwHni2J5!?WDkY_`QB6C_ znu76cs@&kLNT$rPkF&{|5c2BtABM%TGapK(tTM(-v^rxADhh_2Nd&W738%?W+DX-#Y0<*JUS zR?6auS}J;aW->(_Wg`o}+jVy1L|S`ipfs0mtWd)ZvrAgw zqiLat!zJG2(V@9tE5KvxS6r$?%`?iilOBoocX&uS)WO4bL zMrE?h0?|;4RYFIbB#kSVX50|EKp-ek3aa!90iXdVlE(LLyL+N+-L%lUTetdm?@fzH z+Sbu(Yn525t`wWMdOhCCnBmFKCXNMvxJfOxZ~0kG^Sa6Psd zW(ssqd(A1A=$^U0E`yE|lp%2;C< z4Y%~1{`>=xpTHdS7C9MEIX(%D9#u~zuu0?k07g$FW1{v1?ceG5^1K-Oj~NjvsXJQ^ zFc^{m+{6BEGsbg|&r0318B{GIsrH~eWS#@#Ayfc!yMc@zdMDGBy);j%*TRH zB#e#@JbC9h>BrEyY;#-j#cnWSn6yPF{yFNY z5tX5jw;E+6V<0Z_%YC_(fGNf!hxLZ!g2#{tS5DEe0!O)aGYlLq4}*d-P6x;*9#5K* zijko2Mx&LP40GshH8e3`tbt*>-D#$B#{t!zNU#(f6eNs{n}28++A-ia&fq^!9AJ)l z9)BGyyr=&FnuvW7Y;n)N`w@n(^?&j|+XY7)OSCC0$TqJ28B`O%;Z8Xq@O%J#by;_N zUEFjYimR=#(i;6^d6?L=l@1w<*9y97kGZTc#ks;;XoQt7BkV}zSi?9h6|A}Dq_)9X zakx(n6|#z!TC0u1szr(lDp-`e%Of#7_*4Vj&dRIFIHq(Ju3dSkZhhIlQA*z}qN>H*e>r6>cNpQB*(o~^}j=qMX3DgkH5>-PiQh|`l#v;UcD%c=! zdUFvcq!S1N#s&hNqyd1S9Gnrr-Jgu|dV<_E#ro~5VY^jd9z7dwvaLNXnV}}0X|)5^ z6D`8I*9M}L(iK>cN$qtZ(B*nokjlWh3RJTOt<9SY?n4q(k}BHI0{~qkYda|V0598N zy>=UNaZC2|SL+Dl?U!yejg(zyp|swgSoa3_#w#wHr_)!O+f^L}JtPRLcDYwYNfdEH zWi0@aS(OwP4E=|@>TMmSt~yUvK}lI{w|7TbX$vL#g1$JKIV8C?){cg<)Ktq(6>8tp zB21K#6+?X5{ie0Gk^6zC)tMu;_ZLtUjLjp-PaWUwFEPeLvq%PO1F0Mhr4(_VquOT0 z1#fZtp=-I*eXLr4xmF!>M++i7EzY9nrXUGf637f?1z3}NFq7U66C;V4khJPR(@Q4A z*(J6jk08ndjlzrO$-^jsoA3F5O~L;F@JTz}*1(Fz_X|5iyeQh=p<9Bg1_I;`NgR=b z=kbgHa+@=>l;r1Q25vB*^N>#;jxnB(9(;^o{(gA)&;38YUpdAwtVibx5AU33&p7Il z`eIxssN9M_m=;C>Q#%74r`)BEHs>6MBjd?E5UVM4c4AsEOCoH`Zx~Q9ki`E0nCFp? z9(q{u??b$e+lC1L04rb+LC+^VkM!v&I3ru+5l++f5zSN9XQx(=SAyI$+PC!*n}ht=DtZxI2H{i@gfzd!E-+Km(!$e~H50PA z^g|RIu%}7f{+&B3thL=ntkj*e(|V&*-fHQlsjt)!)!o2)XwZkJqN%ESC?g9Qd6qa4 zPb}WRK=A7E*d2Yc%!0Ms`<7RZlLktJ73w3R;_1lnD*`c48IGPKQ4vKUGSoBk&jQ3Uq9>Yp5*XHPR9S_ye=W5IjS@*5bD;vSk~&9BS#`r%rnbXsOXaGz z<9-&1>dcHLorE+pORzAC7a`Qij=c-A*!0$s)0V9jq3o18S4HXn0OeThHrNuL3TTm5 zF*Q>l5>(gJ1T$3DPV!AO@;kF&mGa}L z;kzg+da5kM7G~6{OBU!T0k#}iJ7!iTi;`TE?q^eI$LI6;>qqZ@ zz5YiK;D*Uzf;jjCf=}*w^Zviw^~8!u+mZob8)?Qs&PIO+{eK-A;Z=xJk@>(MpWOU@ z{{ZX3=%VUBbDUv)%s;3c@$<(<3=}EZBt}96K~6?VZRf^G_#ou-=lYJ5%4OfS7Gkas zxk+HHk{c`m0~}xz?I(<9rHvukl~e8HhstCV@CZDQ>C$M>s4@vzP%(B)0uDXRlfmSE z-54-SkQ357iv`J280EZzIQ;p?IP=FyCWtQQOtWr9f92p~I5}QMM}v{T&QHfq6V#}c zN^N{8&&WCP?#4LdBbzFHj$08Kl#Z&u=eqjoE&@w9sa$(9{&Ij@q_R0 z>w>*UETvmxoEB)nPzYXd0ppMc2=V>8Dx;KRoVddta>tSGZgY-2;~DFpRiYV_Zr*=L zB$9Eoe180&+oaOT8<69A9RC0?4p{O42RHx~9tM1V{VI*eU`F5)JN&=47*5BFJqZAd zA7=(knME8k@EC?WRN!NF4hBi`eEf7!c8HC#ZvY+0G5`mFKTB>HAcKLAjCJ%$67XbV zOBV1|WEuAGepK>#!T2NLJ4~Rq08rQ*kTbU!Jb{lH$Hsbi7q=taS8j)KTh&nGesI&a z;P36Z?_`R-`M&34LmwTYD4gVwOMb*3Y1(iJ&&GV?9QE2EozzpuHA4;vSj?COa0ws~ zpQtDdQ~`syXROWN{ZsWNXsgh+Pp54orR${BHIvfcwRWhDYN_<)NRdrBsD@b@7%2=s zw9O%cXWWi7XM;z|&Lc%RPD84D!_!S#K#4ZUUa1Lkmfb^0FyYzw%V?jvgK>ywo+17%qpm2aAA77hW`M}zV<~i zfX!?DAbkm5zMyE|xLWe(Q=~gvOIJ}$wGhD1f7Mm+L|v$CP|BhtiCv@nyM*i_h9bpQ zSr{i=)?>#r`K-%$cZKCpW|L{>c@|i5qfr zQdX?Dqlv_H%UKjHG=cCoDLsCKdtKSC&~`r61rKX<4Wh|a8CIWDTwsRltE&iwAZM28 zQm-W<$P!mD(wNXR%s|G_Jk$EU(ce+Ee^mMpSlH@rUE#h{%QmU)y^h&utEi#V)=Nyt z^!9qlb}UjfL)}=>yBFBZ&A5^)OZ+%vL7nj#C-F?rotE5oPBBK@K+UAcr& zX#4e|dn6PyJd<4i0E_8&N-K@d1TM=YANgxwNwxVlm7r!q^uO^u`0W;=WYRD^YwrAS+2gIV$zy(Txk0a zkhQh~4YAMy+ zdx2_sWsYcfE2_$=AjnWU{HgbILR|Y_+>KqMu24%&Ri`xt!iiQu$n69*ZfR;Ga0cX( zEwV)(4mP_^dS(M=z=+d@8*vSsGEN@PT+KIeV@b?+4yxAEJ z#A=N0Nc97Io{vNUSEzzOtbVT{tOc1Is}OO$86<_3NL}zv9_Z$Yj#(s)nORQ_fzpX2 z-GT#yoP)KtoP2_+K?frQ5uZQSkL)Gl$#U$sY;Kxnrb~sIqea=_`KII$mSgMhg!8ti& z`57D@M>*-iNbB2c_r9IF5PAJm9n{KwO|6mXg)!lH!NDbn{GLbu071ucO79#?w90T5 zBSj3(?X^Ov@=0tD{;wy%>9TohmlM-uw1k;^=A1P*Q7l!`T@B&-FMMI?0Hn2?CJ?#hbH9*EC$Hc@QHWl?o(dT+oM zN!dX=Vs+pD0IDh;(^G0aGoWp?n%ldSwknyHmrgji+jJq?7-Jh5D>uU9J8Fv~fS1d~9NX#>-i zV;TviWy`xeTb;G-7KiN~o2t|LYL07-W%$h|w$;~Z7P9{UtSaiGD?IlZC0QPxgtU{D zqf+p(lQIUCLy79m9Xdl#AEvQE98g8+B1WkNI*8zms*R;%L{wajz;FlvgA{N|(~Q*e zdW26JWz-KYEpHo_)<(CGh{BRWs2`P9+fuWxk1ZE%L7GBNrllYaH%hii19P_I?M@9O zs{ZFcpyvnLcB>y81CP!!Kd)aJc72PTsxrlMoS!Vm2i!o<7~p4)dT%uWx4Sa7cpFOx zOn3otw1+$v-SOjr(pQ)eNF`VigMs7A65KNW4%X-ABdeH?4i8fC5Hf*z3Qk*l43mZ# z*@7{a1hj_BPSIfh2oJARaTw;2%6-3}7}(P|_&*LQgI6_`&c`BjkVW z(pQiLBxD7~Msv7>li-8y#s?YkfN|1+dtk?uAL40rS@jQU>>^X^+jP~|t>Y}m3v#szmf#tV1({F3^pKN6uT4Q6{{ZS6_$)?Q(@k2m?w@c-+|@0Lx`QS7#!4NYXShK5)@3k8avI(bM93^7`$;)b2o4$oEyz*%;T21dd14>jRQ9%IM< z0Eja*tk4{mS~jiHp=Fc;MT>ZVYUZnqXl9E?k;q462lJ$1eA_8PM%w`9uZ>6GU9Z)b zntM&cTMe!Yt=>909@|4vT9h>Pm7roYsH&4I1WLp^5>=!?%BOJ$tnYD$yjYZP?8Y|IV44u2uaIG;de7&u|7viV=qC8Rl6WptN=!q zC0OYsfvNsfHo|i;XJA*`J_w3%Q(p9wZ=zjU@4IkUvMY36> zwcRNH0OG5RQ^Ky|Dkqva(P@lH7$;|{Sh+~ZWC6~K!>w;N(RQ%?N>5`|NMPVTN-U23)8|MK0ijNm1cU)afPqx7;9E8u=9Bq?*Z%+&vVF~2v&m~9aCQR? zG#X#(DJhfI?|*MEH0+NxJiqXCm9)Yw%qe7Q+CU)4Mn#6Vot}47Q841X4U~tfYmRBN=g>zYEI%Gt(z47OA~EuavT>4-9tdxmuMfa2-uNhtQ~8DwL5%=Rmw`) zD)hC=isMA<9Yrlo9XwLOQ8)I#~MDALRn z>qmh6m#o*CcSTw0E!viPTMb>Z z?$!6ozq+C_)WJ@#PYlyrqY*}G8P3>ebpdlGdh`DPvZ<`@I?jtv=nI`iqgLISg^IQd z#Z952t)z+S#A_rnBvVaNkhBoRFahOc0E3MA?2~`ce~P78mQ2JxB!J16UrW4`u_~ci zX`jyoM`1w{n9Hav*xywAcZDHhvB{PvOow#=D%jE4e6zh-^o9yfk&jM(wi~tjYq$Dp znvTP#sQZOitL&F+B?Xe#Nl9^!PS8_SefQk86*!q`t0k6=DaAuEl1L<#6!PW;H`GR< z?)j!}*Y^5rMzVs`w7S}^_j#a((QvZbj1tm7AgKEpsw!z-l^p2{i>N^rBag@?!<58D%^O_f9=W1gfrqUb;!9wUX z(vrZIwyh^lDZ4*y`^DVpZ1??7-n$Ks#al^9RZkCWwEp8w1SN`6HOffD2|Xl&Na~hJ z+DN32Y=nS^tl8e)(@WfFJCUxbdylI%or|?rn|&1qtJN{1OR4Y1M(bW#Dz-o>wWBhbRy6dowd{5=cAiVwHw<71@lN!!cvM!)=A@r<3uWE26>ev zl2=8RM@*IjAf{_1`K-Lzd2*A_aWRosJaY)sh1C>ja}z*ND`}8_DkTI*OIm!uE3QQpwC4lTiX&@wkR*NwsR_APHy(!tBtghEZYSmf>{{S88-377=sv24?M{c`8 zExz$emCXxTs;Z2WM>x;>YwrZ8$N70BMLR@(b- z-AzSNHAmWkvZjd7QHLsGDa?5E$T;f5zTQ5gJ4H5+u-r8cjJ)YdC@C${U+mWQmcEvb z-A=U9Ekz|nbdpV1M@Wk1IQM$17pe;}b~8<7sC9*=m$$l_;oJ(Hb)zaZg}y6=rjFK! z?JJ;DSw~k-O968-ByA$i4N5CQ?)g$A+*y|J=Y}^qJok%abTT7Fn)0(ysdY*!nU$Ed zNLYHIoG8-38&ikAU^_3J23BhXt4FFgG=ih?^1OGCTFLb=Iz-t?hoh)OIa1YD$_|;kD35sWgQQ zH1k#7Zj_ewtGC5fOs^!7wRDOkQ<$gAC}SFdS|`$%YicxY!reWe?sZ*Go~kh4BWj4+ zEk@MMGED_6awKw6tx^~g2SVjelWzB?&0XUZ&wOEJ9X4Hs!HK$)f6?* zR@K=nzQSKsD6X-iZ$?uV@wlh4U2}qZmEL>fZ=>!8i0+P!w#{YLR52p!T4-%lHr+p7 zjWg4V3stt2%xy;%oX1BYofqyVjiz)C#GILbh;s7(0Mj#5$M^w}&1-ywsN>CwMSPf- zD=w6dLzGFHMvYK@S6f{%nJp$lMHz^Zyz@LkR&`}MSxU-MRkFj)C>2`&0McuA1J*5P zt1h~F+>c|9hN|%-==9KBVv zslLB*@0WLms`GW+Ank63iRu;Sg4GwR9CzBvDE384s`68{M)Ij3Qr$XQb!AU|?Ua<( zS}VnuwY8#3i`DAm6foE7S?QW1{{Rfz);T9I(ZMlcQ!tecR{ThzV+b!t{t;ofJdP+V zx^~G#Hx-6DD|Nb#1OOmZDy=g(+O5pBQ$9l%Y>v(i;1a<|2+@?; zWIBNbnKb%bPTLhY|+XI;zOMJCC7Q4J zjliZFNJV=Rl%pfiNWYX@Zcd@p_7=M(J=WDCQfj+embF~hAl5{yxvh5vlLDrSv6Lc- z%Si;RBv$10Tf@sqH;7CNXl&R-Qy7g|W6I@}NVn@^Xs)-?uBxRGR+*)o1x&haVjCw` zq67`OZ6*VabGmg@2e+A)Jyp z7~}!)$KxP*>I0=UM0%#)m0}5KYoci>E))|lr!5V}jhY(BfH~h8m3P4>0iz=z5Jys! zl;8usmw;H1GC{%M5P2g5fq{>Xdej6E2;hq!1B%>X!gh(32*`b;WVyo(i%kWN5c*JR0CrW zqm9IVrbGB*cCLRRco`l~MhqI}CXr_`p^^~jvIJIi7EA33nM@EO; zM{b#wGgWht1QEi5L|~GWNWRbS%qKWKhkq zW09mtVGW4mAgN-^-DJ%z+)nK3o36j1uy)>}t{HVrWYYcRYFlb-(NE~I+bbHRh+0S@ zr%W>iWo9gc92*|tt9$Ebx7F8DcBaQX5!6XlJvv_`yIh`WkFPYZ1q0z@_PN}f3INIq zr~|6e_^wiDjOiYElou8<8O8(4W=ASS8d}Po)Um2jxg!s3w5s|Egc1hEctN%bKt8(_ zeP|QEY+U;1TH7=wmP*;?hNkgU%SETGk(QdG=XR`=Lq$%g3xOG^lYEZMs;HxkkiAwE zHQm1KeVV6J>ssqQ!@0NAsl3+HQzSQA^tX$gEiEOwo)r?wLrF;_kwq+};bxaRP5=Uq z(sOHHscYLNuDVfa4K<_Xg5yz5r>MZXLvfl@1T@Q0IccM~6ouIdm@FX!fUG^&`}Qle z^4T8MCZDgKrlNJIsnk_Bs>wA3^$2$W)lOs(#8_`JM5EkTnGRQFXy?uNkZjgRFBg)i z!y`6yv|!6jvPd9Rc`sPt5iUc;kmtoCUt;J9kTS@xoi`p6)-MQ^BQGSy2=p%yh}k7u~Vy(_tP zS6FH-ZKbaL$=4P7`ol)mRd)+qRLwzdhO&@vrlY5$b!bfl>{OW^7|X;MV{z;4HkH>F z8TDPqx0m@ZQClXZw9we~bdO%Oe{7o_XznvKazrTE@`rqA$Vejt4Hua{t^V?=>qSj( zcxxensx4-s+dUK|V-dn=qCC@-RT)${zy$NjuOv$xaW9C$<31%IkzK@UC4!@p(3rBO z9JGmOgvTr#6`yuKVt2{3y}hs{3!a#%MR+VZGP4 zKKuUtuzWQ#fU3xIlEeUV7sfDr5=m{t{G;d3M|#e84{69Oq>!VGE-~buK;s$b^U*Pu zMJIP9fp#i6!T$g#{+Ls@_dFb)xS7yMj!yMrr9c5$8#y^UNX9~(V?XQC*8C0n)$v@7 zfW7!4@Ldi4ucz&Q%_9dQvuAF%=2HgEv}Sd7X> zS0D2?K7X!ykEawizP{H-^xzH#_*^Vp@AVO~1Cojk0YbRL9ORtmkVqqp9#2NQmJhod z*n(JdgX91_Wl!Molk?I{T`*JwQ^Y}70Qc&YL0m2Yek$`v} zP7gj0@6&K$N{|?CIT+v)1_>A^jSA0HibJ*9EMUROWrF`qxvk@@)O!G|AJkQ9m!G-GYu#n&*;J1%EmuifWfs6uwIrEW&N#3W@ zJBVW(oPLiamgHb~!36%@Bn+})N~*H}M$j;-7XXF%$C6Jx@!)m!8+JlDAdt+hoHh^l z&j$koCmu7=g9`ywKA9{FF6G!P;;$#t7@6ThszJDImigsI9mU^0q1mq9f;P80|KRk4W2{Ikn+*GkrtU$|=k^m)J zDtH*+=jWq?1#-aqh}p3L8SvY%aB+_(&U!Fmd~+-cKvEf-0y0a07=Qo=82pi*f9QE; zc>!k;G9V{%?HFUhIV9j8--GZu>AXn55)g*L86&|y2*^0WJP<)21axaiNIt3uEwmHI zv?n7cjtJoAAm=AM;K7GTr4kH*!Bt_9RN&_v5*UARkM!%cn=Ur5>Bz|N3h~c5&!0Yj z=#m*yNEdU3U^WJCEwp?SjPb`LbMu~h>LUA(yCFf!;X`B$jOWgL1GtvYpC_XR9KC(V zZdA6yFyE*tI0u39SLE^g^kT|F?exPjDgiu?>@l7=8R-&$2y(vS0q2GQ<${tv2JS(~ z{DOJuLQWPlfJ2ADBw&@!J-?86AmjZyLIrRSw;g`T?}HtNEtdeP1d=YiKC zOe9^>D2TRlK_C)w&fUyZ6OuW|1Z^jz;FXaT!w`I6kc;PT-f_FY$gsE>t=<|+dxZ@<%<;_8U8pJ}V^v7A z!i>?xa;YrLsO-cX`J&CKGebVP0a4^Kh0B=BuBu(+^Hx1YTg?HVW-5l3!Zaq4(@O4j zgK}!EhN`V4zcA5Zc-&cs&Gj{+X0J*OIiRpUV z6L#ICfgsTR!0uj|)>kgs_nNlQmn)mC%eT6(Pt#LcbpD~Yx)iFjs?tMC3{_DNO<;yd z)v}JT)tgnH*xZDFCrJ?;~hZHviXybmHFs1~8Fhz#% zX}-|gZk$&O@ia=NzwXQ>N0l2trxi0<5XFC1_| z133qPxykTOdd5{(>zC8EyuVOWX?;s^>?WdyEA=g1s)gMbp-EIP{91>;O!X*Cs*fMu??IGCX+>Uwol@(;PBl~gczsv<{1t&bbJ zmKoMUV{b(9?D3lir>!*rUN+dPuG{Hg9a&YZnrMqLk_xaOi#6$L*f6cZs^@S)GWK~D zS%RrwO?I5%mO04*i8=A-=i}q0kcL!Ih9ICm<=EI^k(I}{0Q~smbdBC7h&I+@O0uWm z=NK)3styiGBj+6odWXvi7#7I^Kx7~faLVAQ0autqfs4->9i@1p5TGo_+`dimJ2YBIU8_7K*v^C zlm*^c0=eAT;9%fqIph(+_#k7DFvF>+{{W6zWz(`y!&_~;I;F(as+ESB2_>nJg3;EN zc4#UQl*h{xjmyxd`df9fFO5COWAME_dtMZa^$Q1LJ^NVwKfWd6M0n7mloCfAk+wH0 zqu{KOvVtBr$SBLW9Do@4=-8e_E52Qkfw`RI6axx*I3pW}K2KTV-F4MHqPx-9FRNL9 z?JZ#xc0F5PQTH|aHmHR#+pfkC%q??F<{Dawmoa5a6#%bSRj(8d%W12P% z8-^`{uDMrM#^6EPat;)M(<_oU0M*e0r+!VjpHimf=+kfgPh5gHnPN`H zE1!N&(h1H~dqCup2|u}m3u)tU!J90qxd0sFB%Pz+6OGtkCmiRcLNJaGB)C$*evrXN z><<8EIQ_rATcMqs3LS$cHm=j-8-_sh!OtN1`Oi*q)9Z0Q!WV0|Nvf z$UPwh@mwE{-_HJLVS@_9 zXi&cVK5>8v%8pJ)fOGz%$AEfK9H7KYleHT=h+H8JyE{*i#9`OucpPJyK1Vchn!T6NR-uc-zv8P z(No*4n?*GoTZw;D9`_0)Po%r0-zs}Hnzl<@s6LPT3}Y5ONOasW4#A>kUI|O{K6i`Degd$MoS>$}4z3$e%+U?(M=d@`(OLt3jaMM%J&|4^M^T%kQ zp!QNrDTcJ6h8(;erv8Y)dQ z9i=F(7b|TTwA`pH(L~0Yq8ptPLi5W;g`|>M#H?oCwHY9V@*7HhIO+T6)b+cx_j>(Z zLEGz%=BAd@UMuH@*?zImP)~Ohu~t${XV-++(7CEMj+YfEmi z?beFZ-KMeB_WS-W?WMC+T#@g!)Sae@=c}l<#EC3*x0lpIKTRE1> z5~bmJSTe{wys?#?6gTpuW(cKP&99lIT@<)wI!$P0lvoZFA4x3X03@l@pb~6XI&O)g z4n1Mfns-jD0)QKBZ2ZiC1Ta3sgp5s?M3|4t6T!~n)5sl;= z*Y%^_e%|(@vo~8_wzayk(0WST^v!&xxW^ca_=%1d#fsSiODt20n9A0`^FkqQ z;f5RUPj>#XbU$gdCwMQ~?#8-rxba5?noTQqqO;UTRaZkKlgAytj*=RLmW7g3t&%C^ zNaa41jEq8$BDFrI)q49;&tHALUUg0W=~z|kE;W@mO8Tmri9iuWB+^SGnPng%uMNk> zI>YgwA5RQLhbax{Ef$F1! zXOKYynniHD-}Nn3ExD>I>(|#XTWxX6Jn+Qz6SInX3O(+qtt_QdC`K~CC^^ShH*r3d zyY<=)9cu0$aQk_C(pq-oS4U4tUv&F;CHsoVKJth?8q_s)H?IKoA$g#THV6zD5IrFJ zNBS;Z2W+U;z5DD>ceO61ywcInp{R7CMNGPWg0_^(Z`B4G$m`Pbo~&piq}7jbmXm9qC6xEISjDM22uv+Jm8P1j6HmAi~}>@F3N-KyZEo?qu+NH&C3 zTw|_m_yb4bb9kSMOE2Q(^2S~xDkqlGG9*5ElwGZtc!q+JApnva%h4JAS(x&lAa1mDLqZh(W;ftp`G6U01)q|_&Zy3?XPDv&al-t zF`_ASPMd0r6+M?t+Gwcl@X(6+Aobd|siRbyc%VpOi|%CgWoPAD5%i_nU#WiScSEy( zR{hex$5m{$)XQSDQQllp-RU%)iqdVi>f1%N5*T8j^@_nuBpW0%E7Y)NF5PO64am3| zOqBVI+|#Ua=I2*}Xd}xBWBf#hSwo1WkzP`k_`r{X3b&6y*O6513Y(ngS} z5sfQF(MVfq09vqHa0aRRMfwfVUrsjb7OU4Zmd#<_`q(M1RT0)j4OO2&PD`{l>uf~H zPg{76U1h4QlXOu|vBd(B8_4=MR!3W?zN5QKLrWr7oh71m_Mz1qqim&;<}a#@QhB=xGGI$0n90MeuVGzK(O zZp9H$M&%5N{c?Jb=7d{XYkz#49{dd-l(2~x>{c8Du3l~ z+H&_~lA&-UTFY#-w<=0@IV@43lBPhLNdzy1O-+tN~G^DC-h8k~^K$ zMA6i&Qsy|lK`D(3W^e!^e-0lGw zgI8)gKKFM5Jq2pH#@(&b^mG?JXE1@|ZGC&JX(gbrTc$fws>4P0@X2yyX$s!EyAEY)+?BMNwtgRM;N1fH6%{;jGtl(<$y=z`!eK&%&*3Rn_A zEPQe29xys&tff?-qyy5Vg4JLbYOhn*2Z{6zyc%yGbJ+c+N-VnDdT`G*L#(jh88w0279MXCA@30G2#?Ki7#1Nb#w}Y~DhQ zG08pv9smRO@ITf)dc8qmwOlWiw6o6*wu+{qprVCms-9SIV}>ZzcNtqDRS5-wBy)lx z1e&2_kN^jAO;D}s{x%2K4#i7gp_-SvUB`k)CGKmb^(1H!V`qwMV_WJAK1r3MlAQy} z%1bWPAU8ydRCez4T`mr0U-+v+Sz=(U!XrMMyH(S+*!JuaJw0tW^#{2f7d#Wwo|3U^ zJx8rux*Co+bj1tVDm3kfO2pDnaHzJ+RFXwqeVO*6%8acn3IKRag)l;{T(!j|!W~K5 z>*XpGqocUotoJzrDcu$3ktBg;w7#PMp4=4RP>0!&5$mLUc zBOW;C<2lccoSvPWG7L9 zAo5SfkRV0!jF86!ZJ^^64sMymBZf{!_pwjPa7A#!h-n@w1V_umoTn?$6+38UC66 zzIt3IPksLYwSRnh{q@`RZE^Z!?fY9awv)Qn>t5qoFP2&jTT*H$thz!9s%a>tsiT|H z3s-u0WSQwzW!n;gDcnd=PyYagA8KhdpJBB>c&h@`>rU=pYi(k-N#mNL9W7<4rP zTp1-rN;*2q*Clo&a{8Ggp1nuW{k74(v9Vh;R)n!o*lZeplAhfJ6g$Kd%S!}w^>+sj z%w(vpsESI7WjHcCjKBpX^+6QP;xbI_aphqVLYojLlt%KoG!Ole5C+XGtbl%E)(Zs7 zst?U07GvEP(xbQMEz<2lzA19j#OxPy0^72oMsNwoAdoij56*FbIwpA9CfEZNTx`ZN z7dXklu+7hNZC^(2~|SV?cDxYI>7FRbjP zVwyyaMsqOFCh+WMdNk*MbS*Bm(vY-FE>|ils{>ZkS6*mRmZ#ICsJK#71*oSLkh(~Q zNJMV_p;871Q>r};qb=6@i+brTEj1NI%DUkdzNb!Er>BNng>==^BF8-}!PC~A$x_&4 zA~FI1qZ$1}eH>I@XzP24^v6kC+YaDRNj1+^QE1&qTc&8Qws^NmaC<$rDIubxt*44N zkSfnlParJ_KC*247c@1-NfcRx zfDX5%5RT=5GzA1VV{unq?bhMxTrai@Npt+gy6PJ(slo$?XG+@W8)^_k6OE-v_#JtX z^|kfUrt~hHzIKPQ*ZLhntgrO5TXkl(vDGa_w@=&ZBWP=E_KN6>Ls?lo1>vf#r%V8LXx9$5Rz&yr5?srcT>Fmx{FXFFBwyMjPZb9qxz^g}1OGRz8+v%+KTQpx~XtUA8 zu~J*8qZ=WL1V9wJ#IcDcBXqJWNdDq*s-0rBP*7NGG%;Cp?XHz*thQPRY2mlp=@vDQ z(Wj0WQ2~-5J!c_gl$P}whB91%RH^_8P)^`Z2_%+62OJVJUJ9c_3|g+<|6c7`@G zypQHfGpdGm(y9durCMT&S&HjwVo4^JZ#Mb41277zp-~3_4!;w%kOk80C;*&0DJ4nw z4sroM(>Ooueth-v31>GtF-Irc&MGPP&+3R?B@%|u++Z>)W#n!`4WXFv&}kh5x`b|W zSKG-xa0uXjG2r}g0m#2spHc1f@7v$JwpgmJ+NWPq-t_*OxC(!Jd+>BR^8b?UbTRR0&U~YZM z0DW=ckJeVHvFi`1KJMQ%>=46gsMZ%4V0wLqI@ze)Q&!wJNBp*G>bRz z{q!@bbzYtNjL?y3N}EM2_v**f_cp!MB`pk=YlafN1nne6Dg=J|V2oYnRX~mysmXQq zGu70~Q&TI=Q9QCwJgv(~G}1JZJAUrWOB3Xtw>Q%7(pC4qUAFEIaWuZ9lEtg^J?7O< zqbSK}BfZ^Hnrod+993)Yr>$6_h|B{FxjD@{$1L78-~O7=cEC8mw*run7QT^czu_ znn>n5S{b$mbul(#VxxGGk%3?osK_Ia9G<*v{{R%NIcI}b_S0BV!xVRoN2abcm$_kx zLe-MlYrQI3nemsBc7mWGoyO@SNP}{_j_U0_CZq4)Wi535`?6jw+N#BMtFzS#YP!8U zb-31Pz|;}ltA#rxvP~%xMKpyFR8*;uVb0-*zr-K4eY)-5gYDIIihW5_sV_I{=TW$XUv6s5Xins1( z)jA{jA(B@S#~tq4)AE0t7TSoTbtugn9msK?SLs~I2mlT;#IgB|m2B~YxUV4bjO1V* zzcHFuOZPjs8e>U)MCs!-zRw=4tg~9L6f>V*p6_W`Dk>=}5kWCUS5Gz~^+%;pqEubt zH^;gCfcmZN-+x8E)o7No*W5WN9$U7Ltf$A^Jr%ubZZ|7EWNaX)rDld{MJ&cDh}oGV zSpZh*pYX?t7RlxOKRf)4)NsVvVJQl8SvO08;<7cAMJm8<6;-$O>6^r|z)L1#A6!iA zB`PdMDv%@%Tmr_y;`IyIUZrW}%CK}&kG*3tuk#5_t~Y+K&<5Opo7!*)J#i3v$)Tr# z9!Y23n=yhIDPhRmRY3i1wSoZ5-qDcX4AM_9jwspcB_x>}1@#n|r8+^v-M>(-&6(i+#hb~<{QMTp)iOmf(%F8CDm^T8Z4iR$TD zC7IRZhEGgn^wZ9{c*~V%VpSuGH7z8L&81Zodz)rrsEQfgl@*w0A{T8Sg%n9unxNu>ai0k^xA+^tRA9aCM{e#BP_d!Q=^b~~+3T1!@evl$vH%Vnyn4XD?-kzP5T zou-uxi%m`zV=E=M+g{me4$^74wB~`KdMkZol+{y`!m_^RuNeC(?FEbR0 zLPx)7+;Yr+Z*)$V?Jk$6(RwbA(6!TTsJmPz+a=Rf-NQ&~FE_f^Us|GCi5;3KnaGAO zO;ia3;#wFILl6}I0Fl@NzqT?ycpta!I!Iz|Mro<0VOwsHuE)!Yz%^iNasx`r7==)g z#xn{Cwh(W=#oPT&M34R}WGL7YNhHRYmh~e!+N~DT$lHQR@(utw1o6n=bCk;X3aC(p zQdp2M065PhB=es>PtQFSCe~*NG2kg*1wp~!dvWL7K_mf_$3-y*)G?eaOsf9?k_hK$ z#&qE}I3Vq~|co;e7$-o%#j~w~w zIAO7N4`zM<7yyED2n6IFKW)Td`6gFp8OccYfcrxn{{Z#lCjnMP+q-edZNPA#1p@uM z^YpI%-y9e|Niaq{u_0p_2oH_if=2K39AGcPbw%~zZUk#QZ#yp49-LAu&gMtRP?02z z+k+@jPS(dMUZBR}cUWV2T!l!{o!E{MS5YK%(gC|Y&5R%g*%3vv zGJpp5PSv>IW60}X*zw7<%%4#I09Ch(9lqgFK|!fC&FZdOx<=K~+ietebFr*IiQyT}g00*|3R*v&!vC~`bcV@oS(7?29caoYqN$cW+FvB%PIy`|Tcu@@D4jNFz z5DDwcpYZb2EnBR+iQEd(+pLy2th7^lVcD*FhNZn`joSeTrGlf>WhM5>z#+0dSV=f= z&$BE3OklVKjm!YRCmX&wC!V?A;aEY*PvR`3P2!oU^ABX~f>&77F8~4^fg6zg)nf08 z$x}y{Q|QXY9An*zDPwhH@TYPHp7(~E-mkV;9+r)TRnGNZvc0awZbo~JbgAqL_){G% zFQ~y~o^!QSFr2g(-dO z+}7760>u=SGTiHp8hS@*g_f3Dxg{~ST162>Dui4XVmRx~kF8B@9--74Lqc};`%!SM zzuM^`)z(`~(-D^kUD zGd7>RN^Mt&BbE=iiV08J*F_xalSU?li2|~RLP#SZb?s+iJ4bHqFKsQB8k>DE)^*cQ zb=4Kp!%b6F6>Eb8bP&$av&RiG2H3&F6Dzg|+Iqo%U0NM&eZrvE6pu)>dd}HQ%|%TT z#Pqe+dT1@RjWCWl;oVa33Xo6`;zf2lob|!@&w*y(@PXp<%F_6t%|)A@TOvp!bx76( zlguTS2?7)=x;6BXK2ZNrs{YQkxZ~B;&0^uBoW6ddswyi;PPz*xt1csd(g(o;8luYV@fYq7I;$ zE&?=(pLs5ejNtX(cxHMp5b(UNZ!KTViX_tKbdVK}L}DzH8;0y!uEwCl3o`>jnU*OB zy)tSbES}Ua2Z;JB6z$6aG8Y(6M-@XOc}fV5n4*lTXscl8}gk z`jevwGRRlzcbmQlJ{o5*fmgOVGN z7##T?etP*GL{X=#R|Ez|D}u5damR(p`A{->1dck>LaOqY{Yf)@h@a7$UI%Z5h9PXy!>af*F%@B1Si{ z1Kvq3mD)xQ)Bud<+mqIFtgu`=iQHS&-jh<)+B9t~4K|ssipf>7rt?ioWHr|1sRBic z3W}GP?%5epk=al;j+-d807hgbl+a+LQ3N?{N)0qMXCu5%a)QEV}^ARvj7>8Zv-v_22kI0w$f>> zDlHmP$3<G)I%d$iY}p>`TO}Sik=s+XtH>Kls+Cn9k#;PBshj@*Hy{#rPykgF1wf&zlR)?LR_Vx6SafH7Z6^6o zMZ(dIK}{UdTxg2rgNXyxtb2#3R#asf$5o%zA831ids;OmwuX;PT(ng@RCH@Y2?Fs2 zWm_^)R$-XSP_ELdk7nR>!esdtxMlno19TWQL+ko78VH zg#w;51=k zAy$+`D#lh6r4ylz13us@U3v8X08^rFx;szy%1JI7&ef;ss`YIYRqsVZS#L-pdF_=o z5t!C_tE*zE5z~@4Mq>)nF$Hv7L zs3V(nk;nr{8Ds4%23_HiX2fv#cZud4JQ1Rxgd{n9+AM3PIORy=kesj~CWuH&l-Ac7 zD~9GCBJG&V#m}YMExR(aGXDTH*+wJNbSbFf5v6ohb;nm~jdOC=Rkz)HWv?1i z&3TdvXe<%hEw<`dj8Jdv)<-kt%LNzP_Vlxk`g`td^-|nQ(W@hEl9H<~IZ5t0JsaJtaa> zPZc#}kV>?*Qp9D38H{b|O(aSV_~VyjGJtmgc=8VX5XTI45(U=HEAGr%N8Op7$!BA* z)W+xmzyMKqXEw)x6l?_r6aWAKI_xo7i=73Vy7R?LSh6Ouw+U+LVP`SW->rd=tKd9a zt`xvXRFsfP#GVEXuCvBnKzBev1hxvCsrO?bj!t;~zdTe=qplY16tK-%O?cIo+L<*Q z-cl!qI_tVt8mUZsu{erK6%>mT3^^ONWP#N3$8m!3ZKArfCSHjHWT< z93PJZkQ(FYkp_zIzc*#00z3R z&G~>E>8c?lucoo>PzsD4ql^Lx=b}JS7B>|K-bf&M9G*r7d}9D$ zW5*qF6sik=H{fTGz5wI&fCA$jj1MRBdYUMsi3-GuiVF~^p;va)#3&RC5=r>*Zw)NW zZHXp;vTuL@7I)*1h8t;Z6tveX#nvU+J?3~SYk^b(da8KEIGo`_Zjun9M>#IzlhjAJ zw(Vbf(v|eOGWfPDyAaa4M#5U_c!EqFz~tnN;JQebSfq%SMUXO+8#HX8 z>dLZ^%KO-0K@4z;#4@k|)iBfpDIkgj8w7i92tL@V`$c2Z*3CF8H08cqNWL^xmuPAW zNmTXJz{M)nId&2>bA7|3C|oSy5x5i8tkNke6p1+ms00DWJFqY^ILXhzBdDF8%52pa zZ%(RLqp!M8aDs@c;*ak3H1NdAMq+t`I;c>KzhD``>G@hhfUKl8@&av82*EsnFnHsT zarx=6BEuAMswxFgG@_!d>`Me%Rn$o!DC=Zc!n+oBVoB6VvPnHC5=pune%6#DEDLo(JQujFF*Pm~V2soAI1`hwc48f9w-WA_bCJSfpsI=hF`I zdlj2vAmQ3fZ3;*wv5XA$NYQuCOjR0`dnUAr;Ff5>O*u4+JduDfvLvpEj@cO}aKknL zAO=mDf(B76sS%R=u;dLzbZXOLfdPf@y^XI5k;wK{OKGiIK{b01t$X&x-j1Z4@wuA- zc*(&${{T~g{{Yj{l$@qi44yy?+yH>*0QlqnogqaEs16CiApB(W{}Bay~F~@tjCEp+3XPk@5ckH^@J@{AciTnkjbz9FnXF#&9=`V?VdF5A@^mV#LS3J&#EP?8>2`gQtkg&cI+ zhhD?J{2%z};Oy){+!=$eNf`l4dzWr_AQOf@Gn`;!qj#ufEOEyt9Q^V|NXPnopNw>g zUCCwzBVwm1jobJjoMRz}z+eVP>O7J3Y~(ZLl>s9J`?p2>ABi{{U}) zpG+70(eph@ONXbw=AyAP_YD%ta8I~$Lav`a&k8R08Wxeo*GFBTmi7- z0hI8~``~~v$DfXrj4!w_Zh zNn{@E z<0Jx4BxgQz=N)zdiJ8~H~5#(x}tPmcrpfPp5BliWylkN~VeMgyPf2t4B)kDr2Ik(HMiY&Li&BOWov z4z`5uB0^J`d-nn2Zk`YU67oE67xk zPDu)?PXLC-bAgPLoSu}HkWT0Hh9Cgs9E@Rew>UZZB!1@|7%=9pJ;4}m7|8?@xd$1? zf`7690A7qh8w(?WjFLkGpY8tu^B-vE_UXQuI^`rFGi0l0AcA=$jGs8<51;AK2X#Yk z4edJy0V|&b6a5G$7;$I7!ZugihWR+;e?WYJ`*JuP8e|M3-b=7jq^Um8N&Q3& zmhr|980Vy;Cp$*vUnP7g2LvCVJPtoS9~Y*ri3w17V~#P8Zb&&9;C_?mq}!fI`tkdb zg9{Qwjx|PY!JBFL!ki4YMnZv{k&oN+(XmYtW(Wvn%7C~kRPm612gW}<{@o;a#`Frx zQNSc*h5+(>;Ab8IIVX&D+Mi)yFp-kU{{S{uJTbrrf&KDv(+C6u-+k+?bl6_UFenlPfyeJq=KR+R+J1V za6^O`4geUfByL$=ClRnT+Lv0$g8dEyDHKhssSLY;V6ZYPs8X(_f#Qu7J6QyRHv)*N zJ$Mw+YSy%MHI&wxsM_Bp(v_^VJI9bquLt;1}@4rh}2|}A#4Q-IAXi8 zo;m5Br8MrVu+K|B+TJY}2`{H!^56|t)T(7u}= zi0Dsl4ij=sRnQ}^`bocG$gbv%;uEYXwLXs27cT5++k@P!iDIIm)!I&Ins;gnYM9I2 zt%%v%G!aX_Xro4R9`*o~Bddnha-+FW(cCDfN$74A@K#bvvLQ#Modd@zHvobk47@Th zD$1uLs-H^UDy&zA?bfNByzc|Hm%3F;5rb9O+YyRMXD#lzQ$pz+pkhgeL!IN6tqXIP zOw;!_Pu7X5t^K~$HzRGOpKsn$*=wPvywFgy$`BQ&YPn;INg1#eQ#iu(!lz+d-p2m` zGMcVP;=mLD+}`+5K;G*2BeB>Y_rLRt`e|XNhDqj@D4~fAl1n25ia3DDk(`hMugUp6 zGEYlnzkfC=zq*rR(ObeKjq;#PrfdK{|ceieR$AT?Ax_BUN!A zz#VBW(`$>KyY1eN)VGJFlKXYFB$w#upfvGP-4bb|s-~8dmTF0%Xq9Az%AL=>RI6vE zGpUfqFHl8hAs8m~HhR#;%`j7IwSZ0)LDOeoNdOiFzGL%OVn+O4*tjEHvl7HAvEv(? zf_OLw#yP?L{B(4ZJ3M5*4mU>F+PeWG1P?4oBj=3g&rPt^B;NR4WB~jSQEF=XYh8xTNiA)C!mXA#p;*-Vaf0rf=cs?>!3YK9eiUb@2XH%|r8`?| zhQCqOOD)R1mOVSA=oHl7H9f)QjyNeTl#vH<6s|~;vQV(1Bb8=2R-@@OXLI}4t*Esp zdu()iOSKjig1=05ijKI{&3wDaM9^1jbWN=+apE?bigE)drA)CXGc!W$%js2V8HgKJ zmDmu>Z_=PyzDd{yJSYI}O#$^jz;!$P2PBMj7jK8vJ@(7oj^Wk{5B#~OCUysQMgUaQLPVHL0mrUvnOKH|uq@kj;iFFmO zy5|fOR+)6%bb_vHZN6AhDYIo-G^ScX986M3(NOSC1-a^Uv-bAC>mOG4mg#5im3@8C zcCSs-y)av~g43ucps?BLZIQ;NJ0Xsln&DK^dT$V9+boijA(@jZ9hs2>r=2v-N`feY z+qKzcRb>EK0_}m)ZO9rzpj&BRh@+iMNeU}#CinVsF-ZL@+Y{=K>bJQ1ho`U>t3GwSv~cSWo@FWBxa{cx0eh6#$WLBY09!l%$bQ~ zpF1IaD>U$CCU%1~$fna;)M0<2l86IHHoQQ8G!>$VsRHS;k-TUGkp?>*Cfdj52b;Rb zSB}s3m$p`}*W9i>#ur>n&%h^hUb+g}K`(bbgwMA3}jbj;5e30@lrR2AZ=+#~pXv-F2#Lnr}pEJxf=3)4C0=@M)SU zpLI34Zr2%WYnlvg+_e=lysAp%2iiCQ3-9T-=~K9!-=mLL=v`l=^yTi&sHy0!)R&z@ zO=G>sa)z8%QCCsJRH5gI*f@%6Z&<}72i4h__n-7l^xl4mXQ) z=#Gt&rO6bxv7XL;6n+yf6>3ZSY{{XG-&*)zD_V#+K z9;v3TzAdv?U8r>>HmO=0ZG4YkEp@$;8j4eJre!gScOZnMj!7(i-$<4v!ma@%?d7>3 zXB*GYfHDX4>&>sM7VZ|N`nURL(%qVpo*w4t%>i}Pa#hqz6)Y4sn}x>ba$#LlKIqaZ zElWFkbFSA)g+&Ei1JLIDJ1-hS=gyhq&Sd06G}7iIuf##=9Y4PK90VKm^|>Yd4KS++NJ~y6#U!&+KY}Z-{ zzV=9AF{3IbC;ud-B0U8%cOt^1Fw=>th_lTqI+ z66s4_NJjLhqoARZDoEj1CZ2!OOmo?N4{F8h)D9+#PK}q%D_QmDc&HY@N6- zO?lKccWRR9LwCN*PfpadlvJB3qo=omiLeMu3_0kSDxpSo6jMV2q)@BUtF4=22`p5z zZ?FdxRFZW7cN9k8@4oG_f;$VLeNHUxN!>+i`E)mIs7ABbF7d-tTMEcDwviIaBE?y# zZn#Q!c)clPS_*kyW)a9Sj0Z#8Z4x_w+$~>8RjMnsW&2p#?K+=SU#>fSONH$!ni`m` zk!(q*EOe93)Yj@bT5n1ikqJpb>eADiPfh6Sa#-}uo|?~ZL}y58%ez!EBB-9ec}rAQ z)i5Pwo_QoJa@;W>bh>T_)s&jPIi-qN>{S+ND8LO2?LBJNEapxfeLaPC5W_el12}_P z0Lq|+C`GUZnXD0YdO)fHO%6$8xRXl~7@HuChQJQB+@7TT1#o5~IpZV~k2&OwjDKw7 z^ZuD!kmQ8Qx)v^s2m@&t##s21Ro^%9G;#-?HMdK{O52vBXAfX9G(Ek z=Z>Kww%_*LeR#YW?N@PJj&c-u@y0x0f3N!Vsbfqq@la7%sUNYG}S#jiyU>&3YGv|_gb<9d%VyOzniOJ*Rj&YuTKetR;qW=IE zm9$TFsHLv0kWWcRNkwm`lBTMvzP_d^YFL0kRydYPL)1*?Y%wb_2L};?&cRe&kO2Bu z18aH$5=Nt|)2k)_p@;Yp6DjU8}6^qb-+eIF;@%Ra}$P z+Zqze>aA{;qFT>VL4-(;E4XxLX**+S?M{ZUXsc~R*BPyG8Si(xt*>3EwFOq$E?0Ym zr!MnLQ@LXWzm)=r#~D2pL8rAH+gIB)2BfT^OGS#`DY01X!lTrR^;scV?iWgl;`H3p z(kyXO3S+}OjKx92T2V&I6l63(w#wv|ZOj2sykOvX2N}k44tji#N)R@neN0CdHbuRO z(7yF;>@gVRnysjO4H9dmo_dfkZNTWD3`xOf;aNa9P(BGK&JX)_(xR&p>~|1zo-jEh z3!lm4<2d=~?W>F_2M5m}5OeT<>EL`GzJv(OGS05sfn^v{7X%JT9z0~8dBEx$``hn; zKVJBLlkf(+(Yofh-|2f^IaMw$NjKFNBRiL zvH^fN2W~I`IKqNB1e|_&>bmYt40X19ew?JNYJ0w+yU;Z%Lg8xt3vEp;U3GHCNB)g0 zQN7zDX*mcAl5#gO}#2 zrKB<$WmuPgragHIvl66&fCJ71i27I(Pp8xX9I*VhdjmxK3LP+n5)BImhW#$D=hLS* z?S&?oyNv8!372PuZ-&9fH?~Q~gOTT+m8dJR0}o&z@yR4^&JX!{z(1erI_cmoAZ>sz zw2%q+U@#fSow)>j9zn-l2#O-cGQ^KK8Oh1X&+p`Xe00!3JM*yLf0?_#g;jOJn>!oZ zfmO|YkC%KB-_Jgnk9o-jaCZ-GMgbWo!Nxft4m|Z=>+NmZ?$7DUt##eKVQbOaPKdF^ zbm(q(iK9~|@XJNIGWB(JbD}!tI0`}tX-H5QzG|%5BT>zOdHUTDj_H z{u`$4O=$hA{2RCNy_caQ%YiqOn=Og1RhF8FbboKO z#m1{f$6Sl(+vZ4O)4DiLI8p`+7Qtf8o=G_> zPn?0%K8x+=s+s1rjAB>D=9ei|6rZ9}m z2;2w+etE|pJaSLROQoZjtbi##k#2L6;aCiTk-~w&@^g{_;3Qq>j=9Jr0Kk8r3VAv3 z03!e%e{QV)zklNqVH3$3D|%?kcNHp0!jZ|x7{@tKN6E(>Hksl^ZO7bxa(F-Uaquul z!1L3yAq19X$OGEh&NJu7oCA#h-1E{Gh#(Hdc7_Fx(su*KFagLp&U#T@M?U`m>~LWK zj2yB5057>RIA!?x@=uRGN6$#4Bh&;g(!_b>4a1!H;Af@v(P6itU5=mt2?SsdAbBL|LhIw+!)0Q+4Fm1REf zjqEac_&7hGj~y-yCYm!$7F3Ys0bCFWV0`2rKXJ#$P2y!u%oli8WyUj+#t-)xJ5P-M zaynHjIXgd7f6nC<*BQppKRD!)4<0&dRC;${;fn1UDl$3a_W2kDdGpeM4f|CN`|tP8 z5Sp#F>U(?qJK*YyfZIVJ1^|KXY@BUnAPn$H2lp60IzcR`3q}H|AOhIi_+!Dr$MplD zDoDh+KVIO*yJ#{NGYi1_?B-x0GOg0`{Vx%zxNZ-wa?nbI(ZV(bKQrc1ky zc7OpSkTAP)bMSn1;6M0_cf-37_e$g1>aBIAlGmo9mYh=d(zfSIPP7*XH85JWJf@(> zU3#O6MoP2+mKKrYJo^`2eO3Peh^~#XYP(;-4BSfy=J$7S6L*4H1XsA1vb-Yk%ZD*{hXf+nCk}0Qo>T9YJ zN|gKQ!y&7vGHl+??xn*7V}(4gj(DM+m%=rY!g9M zO-%5-6`JPYU78vTbh5=NH44odwZ^5FVn9r2{-leKe*Iclsc0>h+A2FGn$rYScAFKl zooQ{BswhYD>FH@ul|Tt4$;-(pd1NKnlHEf|L1wgCtTsv^Y}57%3VT(8(@w!@t<)4T ztS}-+6BRPZswJtPm!6@dmCG~mrAYE{*x-U&B>bHI$MSN2ez$xx!!rICmk>ZLjWn{g zYnDo)?OOl_$fIOkg_6wFb2+IqQfqUt*%zWOMIS&(<&Ni|0JHmwv3;rm1e}j{;^d4F z3XP<2FmQbIOFJ=EEKblyFaobW02mm+{{VB(T?3g5D8OapWaj{!51jmylllJ1q;*hp z&Q8!rAhFIDKL?ID{+a7Y3)}1M@9@QJaVstvOJEhwaxef5=kxxV8PCUFQvU#oR=c)E zqkCQ3s%U1Ck8VLpdOSoi5uE!De0<@xtXMnR;W*D7>u%?J$joftAe;0bSMVp z&$t8b$;yqVk~sr79eC;fDOI{9YkOm8q(`5)RJ0dLyY)g(E7Q|y%EyjdH7?Na2d>o* zS1BPx%M(VD42`{He-N>Y!L!9&D|uQ0YXGc|8ZZ@prba5eesVVeSh?ZjR&oJEjd!(P zz>s$%U_d8+1!Kq=>7#@XM7CWwoqo^B0S_ zbe_7bq$E+)*+-`3FhFTO-PK$W!(#A4kbLO+i0$s9(pnGc<4|g3wZ~bkyIPkjHn&6~ zd94)JtBe+huSE!rTC`r0Ng|@Ov54M6&P%oB{v3VX{{VzF{r9&w2y5zW+WwZFXnx8G zYW~9aW%XpItdf~rD$~3&%@tJJOC&fyq%b^3fW)2^{7D{KLt=co#Ed{vA2AF$h}D!c z(_KPWQvl@AAY*Sl$2H-tDv$eeY9JDJjoLD7fntukq3P+5avo-R3zuhN0WTvn$bZaG z7H!Nq;FIJ7`wtVp#Lr$sbnc#+?ezqrYF!Jal1qvqVu`4=B%gh82pQYlw2|9kAyH1~ z{n_KMXFm@y0!Z1fr^f|^~g(&<(O5c_Uq>!G*sC>vRRly$seHr?F><@Y`KTZqU z{e4xV=zCe*Dmu+uX0%lrpZM0ncB`dYt0m!H75jR4t7L{1^lJ>6rKpvPNBX+WvwaPH zMfS$l{n64lTS{H@!&Y2gn#p`fFLwG00qV75GrSR0M$iV9SYVbzv0VzB73*o`Z9?^W{LklQWQR#<0)x7K=UR1_3uzWF?GyFpH>fszP>4HBJ`dlZ_Zx?Pj+ z_jP-Dt12~@c4+JuLuIbG*?U=_%;~49q@)ql&1$>fSX0keRZ|A&;UrbZEb7sj6-feF zyeA_rTP+-MW^+^IAQ9zfhGvFk&=jCt#jJXjlmuVqc}z`47V#Qpr&%Osc;i{*23Xw# zA=E%W%dJ#FvPoTk>bk}X)IVRH^}lF3?IU%iuu|Nv6H7;S*LKP(yMCyvv`PdQ3uILh z)qf6-N~Brio~8;>JFJC6g}`rA`zW2fy!J;#zi((GqtR8=7TW5VGPB*Obwn!z-etU1 z4c@)lTG%CVQc-aLM2R7cZ0njX%Jz#<_M1p{_V?SXR5p4&FKMNgac`rGRM1_G3^H79 zFR#BL~q zN2V4Q#Eb?&E4iILpn@*2lZ=juX$**q zx-%n|-k_2dMov$(dl$xd$@u4@nkMih8@7@oB&c3|t~`)OKZB6nS_{X2n9gek>!UAjQGjO zJHONCkn#TjJ5`>i5f(Sk`+Hwrmw!Adl33PI&i??*3dNMrTnWVyro*GNFLck;-2V_AZ zRLLvt%8$+m@k>g+2c2l7F`A4y0?WqoqB;Y9ok6IYHnzK6jSmYd+316d-HM&)FkL~Y z^IB{Tx31NV7xY!7q0^m*u~&LXmkncmy5H*LC`7MIMn$^bk~TS12~yDoY+_Tml1EzY z-*XUoEO2I=_ab?#5{e4xB}E%d20DibBVck4OYTsh?Jd@~hvmjwBa_RD z0vxO{-SSp7v$s~eHG7`BoKws{n>^BQ>yg`kb~uu5+*C6FakY0o)3^){Pk=n*_WWn6 z7g*lzH2S+w>llv9r*o|py8Q0e;(Hks8u zyt>`3jca>-((R{YTeSqStY$eYeJLb{u)C78qDT~}QUKvGbPC?sak#Dn3$M-38-PGN zfOw0J#=*XOd)DLQ$Q6Ml+mkrGoV8fn;;O*MbJ+pdXGceA^hR@Xf|RFYIJ z%8eYrsNvA;$Es6l>62P_=TBd3R;#aWwT)=Hi|s89Z51tsqU4lzs`YwlE>}7k;6h%K zK(fIGT+O+O+EfOBXEKUieE3YU>emRCBPc2PhK)h3NZ$4w-BB+P%0NC_g*8l7wEDR9 zRd3V3P4RQNlotR|;A>d21^xV1-;sx=NX&h`WV$k(x=_I4o2a zC7A9zRD~n2KD*C#(*5G@E|Rv~?+|JJ+fvvyPMxyq>0@fDOP;HyrKq@8IZsb=(@SuY zp5GJTGA`Le0l?EY`YWe&>FL%Gx@${{u_YzOs-301SH-Xi=Yp0(BBZCNiQPn!Z*9(u zSKE<5_RCM(j;qtQn}r>=HPhFD6>}-BXW;R-&Gr>za^ybu~+Cf*Oivs-B6L)RSWu+PQe& z4Tz7{#+0(@&gj8eWu>9FE}^ng-777W2^?`zR-rV~v4$|K0jk)w0ulouatO`<&KO%^II}}j zWoKj&2URJU5RoiWFh`A~jn&C1rp<5FJZs_^IP($35t*XcN{ZTwnlYF3vWpA>1Xiot z9-&&kr?m}L+KWwJJ9$NsYLfDsD=dV>L0XuM^D~Si)7d31rFJk!?eI z?!7eh&h6VBO$FLYpGq4xpp?sR*-C0@_Ux73u93nzJdwoeq<=7=0QC^l`scIXQukqkylaB2cYv+9^w+32zghK-XLjD% zX0vE5H*T>+(NaTijjAM>w^UYFoyNAVW-7U9XZ1n=0;+{veD#)K?$>f`J=cQS+`SUB z-zzk5wrRT#j-)azf2UN^Jw)-H)KuB(bkwuJ zvzr{glTB~l#f>Y4ASi6*NL6IX%I@9Oyq;q(nR%T&?>aYAHY%c-B#lv9Kt@pNP^k@f>aa;-EU718ZAV+0NXsGsrzq%!l;mWta2yZEoOr?U z$sHt;ph5!e11BXhjz{@{9|yp|{PXeBBRhF!%CTIJ7{DWs1Z_AU0FV!p!D2$?k}zGi zw;p|<5=lP*C?uZ)l6-NYh%xrL?a)!(Yp&}{{0fHKRat%&q9>$#Y%rIqh1O;f$Y(+6 zMu0n+N*LE82g;t!YVO`y`|U2WzglZz(s5jF(rC&^y-C)Zwo11&DNnrzsU#*v^pq$b zv0RQw>hAC7cWNu%G_jJe z>4BMq{gCbUrKhXV_QhzayL)J+uv_&txUJ$!%nT{xlNN;RZ5Usbqxx=H{GmZB&(ymvtnRRLd61+a10zY3@)|F~r~bbpCX#SP-$Y zxl+KyZ;;pb9+n+Xd1GzTck2HD_;*OzS~Q-fx{7%WmAARQKq5&bf|!U2JDN8FCK0G+ z*pXq+czDaunX?hN)0j{hB?hE31Tl!DidN7{6)7zQyi-E(&*pwX8!5CVnMkz=SQ5(V z>h%H{ESy|DzN^!8`c}(h(-+uv4JC%%L2at8hIXlBtx9;Oo*AVos?QtDQ!$c(6+)AN z)a9j(zeveuI62$w1o#Kee*@%aABZl8(o`BJPf*xxj)od$c_gW5B7$nCmD)#nQY9+Q zwbDOPq<1SCg4h`9Sn}*2%OJ5M4TJ0eV2}vGKY@@B&OCLg1Z=RxuBxuFqOu_+5P+jf zk}QBM0(q<3a3FFEF$9oUkWR#lFxz_jE$!w-FJB;b>ra(`}oo|BncKpH>( z*tSeY;rTw+k9VjG!@PmPWw#lDP!q`r$yv zN0IsKnJQEeH!_XkazF(54ZtVCKez62&rPPHM8RQB-yWu`LH(gvtg7*g46GK_f#7#q157yt}p z=g;lJ$QfB!@fs2iPl85s$>oV7jyVMFT#&Z50Ih-Fw!^Q$bM06OJ03XOz1PC3{{YSu z$tjSrUAr4-01#MUZ6E^0uycNo=BKsHnCji&fudMCp>=t0FFL5D9o<8<&}eN zI5=bAka3J2Kl|Mj#iY*m$N(=n9~*Iz@P0@j{=?5rE-HoXRr+_ohhLrm4U=bnpIZ5K z>0EDzFSu7n+NLnb*zj}kd}A3W$;Y0PncvY7F5Ct!xb4aJZUu5UVnz;fF@ONiD9Z%` zGUPVgZq9Lo&jkE`bN$Cj-k|O{J7XWE!Ckon$r%Ng;~auW;A1@{manDpy@PvpplDv# z@x!pGoSsQ$lX1&7GD*%@oT$g`o_t{S$!;5QC6s~)@}Y+dfsFX_PsjJ@g6onQk1M@Y z`+#CFTo4Wc7}}>K?#4G`q|GCvZXt^UhGXMyI2(p=%1H-yQtbS)`5xWN-aOh?1k{epH-f zvtV?C)Ls>vb{hl|H((s?pK`(bdS zYc3hN$RMcW9&$!K-aj8aapZKX>JbrOg%oU4!6cmH@>{_f3{L|c5g;xXa~0Y^%90Q2 z7y*Ic5ymmjdGdNS0b?WkeV`UDM&b(v!VfvY$UblnBZJcQ{r&>1?Z3Trz&-cD%o-+8 zOoc)H1@Mi){{ZcK0apZ-$t(^A2S!L@^u{)No11~VBftc0iPKo+^EDB3(gsb0G#8DV}qaB`|c?3-=LrcbtDg+f$wb_ z{J+@mU2lE1I5HQKMFn3Bq^pgmARzWQe;8zPqyd0eoSdGVBfwSXa2#hRoFC5z`AH7dV2Y%Eg=B2wD#S6!!33Y%J#~`6M*#zp3ml!Tm279=l5vrd&N^_~?$0}s zTL3GX{eAv8Tduz!j>C=n{JwZRu`b0x#xTR&TgE+rags>fFhRg1A3YeXNcRj9p_Adc z#@+bv;BLt90UsTFP{cMBLD~a0Kp?Lr!1?DSXU;xx(1-?i$<9+b7(VQ6BmaPf z;|Dz^!+O|lw&wjHbJzTRR|bh#u~3-#;}~3H+;i}J3}k`{;P_V)la0jiJQ8pZ10Np) z^Y|Z*ie2Lek3K-dW1NG|G0y;V!2S9(`?0{lhpN4NWrzwv_ydE+1gcK|Rs z9H0J-et*A4B%a@M;1PnLo>UA4{BS>S?}O1eP^XN8j~+na{Qh{){RcgL*g--7VV?&W zI3t7O`W{AlOc*%1c2gR&GiNzI+zxO+$ARFI2=Rl`i1woTj=PRZ@^AwJc;k-%{{T^w z&qTwWvh7kOEBw8U>8xv?aV$LX@=u<-ia8DojDj+QpVhoDkORRa3}v&yJadp>!Qwz2 zFiA;II41zH$D~O8T;TG50~p6jFz(q_3a2}UNnm)u+kl`F4l&Q3dMjquKC7q-QR7{w zZhuY)7|*+JJ~R2~@e3q~6cdH_upo@`Fmv)x;Ql{;j2QY~(~Oo)%o_xOjs{3z2Ll7o z`{&_QPp~Tym0(Uj3ERgb_H13D5d`ao0;8R1M0k$JiUdBRn_H zKLhYOFk_*U$>_m_Q4IP204T^|{!E^JIU~u=eDtNnYymi7 zAqp{`3E)2m0H{AW&*1p!EF?DIxC-bHXM$T8Vg`N=ar<&do{orMHqUH$;rzK_jGd&B zjt)Jb{>M4!!GqvOj4%zAAx6@x7>{?c@XCxw zaGP5y3FmGX9&_>e!0A!~6+-}hxd%A?{AV2GoD6?K(`9AS-DrP{t|+_uvV6|hxG z!PP-SAc!2`k>o<=>o7E2$v3(aT9!7?KK) zWbtK}d}oGIRE7b-!5QQneDz%Fp3Q0PNNF`DpQ&En>-{$j64-V1nmDb|QYAE@%oq6M zFvV3zBCtoAXIT{BGdeRVudY8;y_vQ^V>hey%I@J>mrYUW%H+CN%D@PsjizYA2}=!x z5L!NVs}Q|b(&{ee_w3hGYv`ox4`OTqWxokldM!h&k(e}eUadl{Wki(`M3PiPP8u3? zNgX43N~xhfb1L9L9-QQ*{{Zbkb%>os>Y8P=%V_-C-I4Y_P?Ak3Y)1^Lb+It5S!bYF z5;jC?G81)52>$?43uHj4`>Clf`m0k?OWE0bg?`d|?SJ^Q*$HkI2dtKm%TZTwuc~@l zn@w6WGPJENBtQB%E>wo-y)&qOs6M2$rlivr`k3rpxS_3D4M9^@lvcaus8Z}2(r#4; z?Q5$eiY78NYLWV+dd?Zt9YLfmt*&(JdS^kU%eCErwaC<|M{ap&H7{`LQP14hRJmlR zhK8ePH8amSYK_YRsYD2u-KN_^YPQ?#c1lRC_IqSLg%t!K`Y|cTsUvR7Nj%OA%{!Kw zS0&xgC#uPi%uEnZo|)k+?JO~biDeD}Nc`y0CupMwPPTnhfD3F+xf?MW5>f;YKr0ei zl#k5COEh7aivS8kuoqQ=s(TY?(2-MKyESm{hiSFN9VR5FxYI+ZH0|182$G&@Y!QiL z6+uu+8Y!R%GT}iOL2>%Q?skHqlTG(;KvY^ac#1l^W~imLv~<^+XxYpSTWqLk<3*@0 z160#X6ooc}8Elj2sghb$sgfZx7~yt!VI&!FxO5BUi?#x&{Y-X@XB|^oh+liVZlSj> zhNYy_G!^vKLbF~&4LwD|DpqzhCW@Y#qUHQ1qF`pINU9=dk7!M~=2r025~=XXzv=9^ zap+mHjyC++Rw}4=*`R2clj|-QP8hk6eVvgK4G`-s>0y)?A55UnI4mRv^JIYyAlG&tT6Wsr%6gzn8;Hk-UQzVCKQnj6(^ zRc)J3%V*U!dX~vkbYfzfasf8>27t zTPdTS&13D=WcoH6l~vA3#XJ!xqL#L;DP<^2GDHM1sNI53Sf5sDM6v4`?|NfT>TMZn zw@Cn^tDv~ae3ILErBr#Pj_n#iBvCIQBZq*6!#9(coX>dPL1ULQ23Io!OB(6RoX%cQ zpb+v%rDlaj#ekDDq#Z5k1nIX789B=&PbxT4!_4xX3ANG{fk!9ZW3nu6Mm=An?pCDM zIy6~3m)f4=L0e?6sTOYK>6-+SQA2T{0MOs5ERw?=-i|7`%8KX~LmcSkmNj#M5$#`c zsr$E6->oI7rq)~9@Q0W6&7dI(%3C6NcB`vTv{n3tgMQLl6R$dZS5qAsN`d+ zBemaDzgBb>adK@Xb?+vWrXo1+wRS6nw>TOoOibY}oUBm!9Vsw%P2_YWu z&=~E?ZcrJ3U_ik+83Y0eC1gff5t$iS)^uo!t5F03jt`~RVW~-?cd$iRWh&G` z7XQiA!L zdzVO=OPxUh?u`y}tBn<@V3F%D*9hXC7^tC8Q_wXs!mWpukgEH<((F&x z)|l;HnAKLBo}Ry7t`(Jc8-|~=P}LW+Lwcy0+3JNv(zNhf>fOxq(?tU_GN@gkk__$7 z)SrHJ%=(&#vc0;hx%YclNi%CM;?*PEt`>_NnU03TW=e?Gi%!~TV;=dqo~l(=k?@F% zkp4U2^D3lSp)~VGNKBk^%_wanQpXraB2i?jN&rx-@_H2Nv@%(QB(z!)7y@Nq*rD^Ly^({JP-&a)> zbc;rg)bduwj=4aP6D#R1wXsO}08jn_{ zM_{NJghe};g(UUo<(KFuxgElkYVW9C^4t!ktl(Si6%*p!8M#&+*dPkOy-{a2`OHPm&M>kTfTs;9Ku1;TWaL3N&VGRoA}s6tOA zG7{Aiy2hgf9-NbStcnI-!(xoE{#)lWpUka*d839Yj-s|%MCFex;NB6FET-hlGgayk z#p(DXJ0{n#IsojaY({&l^`Cd|{+HCRMRh$@>f;3*?(qH87W!&r zr?u47!ooC~Ss29>j;C{w%SHDC=})*lzwL&Z)*n#X)+;=g(`mM7Zq+1{-gOkVN~)Hv zuZbg}6H(crrHSgMb*PZK%*9?T@M1xs4= zm8(NoC@R{b^>nUhj%T+6BvVBm(G0uL=1B}l(v2(Fj{N;v*6JO5-G1W@6Qrwk4QRDT zZKA5Ed&5zy(>%I*-sYYtY{?E`ig%tQm(&KKB0rRck)q>Z?Yw)|%T?R_RXRT)R)Ds4e&Vg$1&Pg3p>5Dr;$AREnAkIyfbt zbiSYpkqH?QNjFD^OPJ3>{wU>u$||7A`I%?~M=DKHk(qhqRdTuxsI@d~&Zw$|;W?F# z2N`7p`J|sXEU!$OJtNBzf>z1ds4xJMNEol`V!PGq9I~APA3)*$`^|rg* z^};k!J)X}bshoS*ase(eKB?#`Sgi!)4F$2YASoo9pkmqt=b9{cww>Y zT3Q&cmfLK^mT9Jj3aRKNKglx9xlwX~y7Wegz((BpC9(ku8w3yXBuGbD}-nWVQ}ev zZ)McF3f0_)tG8RMH+xMz+NR?);)35nGc!kDOEk3&8pky?TvNo*1Han1U9uq_jTT-k zu3i`+j6{&HlBh0*nyze;bpULVPUm(P&bz#>?&ni6)KACY1p!-ht%n%2XyO%ha8iOm znp8qb*g}#$R>{uM8fA+dfsFIlpPx;dhEDB$S^ZOYo?0oXt=2kgH*7S-vXMF@7Rh6w zngpqMw(c}m#i*GfU_Cj6ZMhileD3$uZmiUL3%QVeJlkvD)uwcP>g%lg(Qu-giqm7a zQ@mE$Et)oWkJPwbZgrIr&_i1kU&<1-L}eHGi5>p{4E3FUneG<}cS%=#?#8OFuBny% zTAIme?N&I&O-W(uh7BvI4$X$#;4b63jM4|sWncjMR(#1c3XvF&0*37G_@Mg=1~E-x zfSDIe63N`ggRkZ#@35~fyVD)2uhD>@Dn53!oT~y=nE51Nk8XZHPI$*1I?_oIjEV4E zIBmrH+XRqF7$<4tC(j=M0LcgQ5UUbKRDyXc=k)x52*?@7_373a7D*LdjzS>k8{gV6 zd}AI@ARc~s>d6#p?!UmVzic9#0R8qo{0I&DY zNl^JdvK7#=BnhPfiEF zaf1rBN>qAY!H@_igN$W{Fw4lsGB8KZM@qrm$0IDPr1>LqfXaCo;G7Kk@%waGZIH&^ zLlQaia86GgXFuBq&&NyQd|`5`4ssoGANmoGA0>(W0gj=;gK1rh5ZPrsl5@sL9AoE` z@Ib))W2XdJBsfqCf;N-EADzP?eE7)51`qB`J90+A*$0@%9ta%Z5d{p!DJ*5HjodHMluHg zAC1`k$4)8+0VrG4#`BU!K_>-sw{qhIkHH*{l0yTZ<(VArIdY__Y!Uj0jA!GHPab-9 zL?8eagGPL0GBOs*wnhkVIRyNWIT_u(1)K2^Tk=F22LgZpJCB{qO z0HAnXq+v>d@_8qAeln&=T~vB%%p)Y1AP{l}K=5!s1P}G=m4c(*QbCLWa84Kn@BmYi z2b`WyBc6{zDGZ^GNcR#zIZ=$`j(Gs_&(29=TW7eTSJRs2{&oHOKEJlz1$MzPL%Kn| z0go90fWRji7&-aK9G{QQI$11A(X3!$O96$zz~u3eK>YaVmsSXi{KPRfcjSAs{Es6) z1u}*hfBih<{9xdMbK`~hIUgi+;eBi6g9&Db(U1Z|D*)R;@CgTL`TT&~@$-?x1cFH%94c?OD9nkzKonui6$_s{;DS70afA5r7uFi1N_PJMN#6DT zw!1~A^lqA_YTK>asEEM`g~bgLwoOHSSpu4t1PoqD5U~hPK)yG-t~uk5dAjf04dY>5 z_b20gZ@)Y3w|r3FR)19bC+Rb`H9E54QuW=y)Rya|4{WSaK{Sw6UZX=#HQK(Y#MJRq z+04<@dJQ3Iq}YKn#g_yB0EUm!zNFLEnqRA(Tdb<>`lq@}sG_CPU&EuG3$Bp7JgrrA zxz;gRsOl=N0y?@O0g*~X45fWRwz#6Q>TmH<`iE_0e51PQKcz0x$}RS~X(nj>dQ!#B z4HVl96W_HAuo>&6MkYFRRe3;;Fy7eP?KVpdp2?>)^|mWMn$uRBeTu_wgEFNBw%tz^ zJv}>uSeB6xJgiACGc#^E3}8THm1a6jagXF3n^QWGB*$$vr1@|V4Wmma^ve?$5)n!Q zLoph_6+jV4DBbF|am|HNEf`^Nh{A~!G6e)~X$d)UMgbYf#xarzBLh6=qISepijWF> znL)rZe1-FcBgd1GjQ#}EZOf_Mk_HH6RR95n2mMYs$>}<{Rg*vG!T$dM{C~e!4Q){fES9Cj#x{Kf1zs3^DGj3)%EY3(>#1!CicmS^L*f{gxagLL-;~{`K zIoZY(lb_g~*#zSl{{U{j%n8h>c~PI(s3iP;$Mb{HQaovynMN>#IL=F-gUR3l&mIWy zPf`zsZT3D`W(t;d+(QBvX+j9)P8b|u6P4tQAC588Or)6#!MW2JV8o9H3Py8`=aJ9u z0qI22q=ey1Zf(R2@s`O0ARL}R@#oJ-jO`jI5xHp{mpB2i8-O8#JzyK~uE6+YLkDQZ{1*K~OK{x#xlR z_qGt4{fET;@9l!rO;b8UO%ux`*b#*o_W5RP;ZYTG@;jA8MJ~r;@#8P}mHk+08R*F46XOb3GlvBv>_tOS=1}#31gzAFD*S?dU|qI&aS9^1y+3B^bPcNP2Y=+ z$GhFmdZg`+m%11!saVPPI^R^q>D9??ibABxOH7Rn*BQ6vM977Mxa*zq9}#@q=fS)% zgFLFsn#>Y3W#QQ*7A&-yTS*m2%n@#8{#ER}3le@aG7g0x#UEFFitWaW7706nsQLx8 zkLbtzKSy$CEgjnLRCTt_-&C*N>CG(*Bo|#=A}o-}R`LNQzRdGR&m_Bk=B5?d4$oRS zhqZ8NT`OtRc6}de(mHC7N9pIKtFqXmw9%V&zU4xo!*q-~Jwx1s5hRt;Ow&l`1%|=Y zjzbE;Nl8gh4HXT(l_;&WP^Y0uM@a-r3>1{mCe(%)krXPRmT-U?hgl z3m!_S85twSe0-nA&xd$sSHoafU_cE6B!-NVxc;YZ{girA$Up_%EXHPB%a(T9&XpgP zLFfl>db2>ak$_#~Q6s9J18x`uovPH+Gi{f7gNv@u^F4?o)@kAa>* zBmV%Nt3K>$t$V6;bhhr;Yszli>iDj7bH{zIp_;amYi`-1tfY`Z9MeSK%vn*=CS$aL z)s%P)Mghk;&M-ebkB|52A*yv|p3*c`S6xkfwAihXLX%5Tb*zq=6ng0lQY2%2M8&3( zFjgp^YUSI(Qo2J1QdkC3307ok{-PNOWgrtw2qTa|78DvF>_{T40xzY5VDHd^4+Igm zF@;5s{6aJ|k)^8p+K%v2LZFE1V56d~s)uU0S6cIFs3#eW;mm=uGI;CFPp#hN_XD^( zmqt_fOSCcevs>v~6t$vquiI#e{M(Nq5bHWhekXNl0E4S+iL+TC-v z>KklVTNTpRs4b5PoW}m||QNfv=kCv_ENXs(G z<+?~0%$Zv-9OxQImv;1(A&xI(vj~}(nd3pepD}eIT|lm)6oeyxP$|aXipEd+zPH(R zuhG}i{{V69)5kN|?KGM~q(sXoMK<(?q9*|Fr+RyZwxTl&4Wv5A1{f2J{)@GRr$hZm zcJA|iy4&owGhbhCyWH-wm@V{lHw$f5B$L(1rZTaiky!q}a9?BomP1MP6<<&E*?IbN zuCdcrQBSRCb&ZcwG|aV@mWDYas<64G%h?tJNg8FUI*3RYqS<+i|-J*w6 zTgBg0UGJ8q^&z#_$!eyos*xB*>f)8EBU7_@W{d=8Qq0|Z9ol~CY2M^^dd02mw4+by z`du4$j-tg(@vRM(vrkznVydA-3vCeZf;o`Pf~BLCB$1>$ocTBODOhIuo1Wq7My%FN zX)>@);lAREt9TwiQa&;_Hza}AbK>fmjOXy`w2M4*=X~`54=K_()zpMHVS@rS7b95! z(*Q9tnvx$7AxbhrBQ{Q;S&ET-*rRnqz_DN)dvRr?rM6q+v{|U=?3Q{}%ocl1I#5tX z2J9-q2GCTNVoRABn4QOVI#@uJK#&w<2Y4q0#xR6}d;*@)fsnaT=K;2!wm6|_n3c*Y zAeQaf9a_by`jAI`kh7`_)%C%)No{ zU#@_tsjvkt#Xd9KxG8NAuj!5zj-a*Q+@(;px ze4XqYlYpZEj&XtVG64R=JaN)fQLxGw63WU#;1X4eu0hBL8OwM84}s7H@Ah{Bzg}=% z5I5fc08aSMo$dNz?N51VDrTC`MWc1=K`Yz!U6Pnm(pA+cXJ6ygQ0__Dn+x|esT98D zVyqB@ge)5C>Ko{~{{StIUfL^lpKYs{Qq$AdR!>=FnFbyz{XKC>9WB+7qc{p>ISt`zG% zJ2uuHr8y)?Njh!@De20(xcqL;c5lK`X$Eg6E97(PY-S<@OuzVMq9aCPJ^ui!)&*&C zRA-AeQGBVDW`O?yLmk(R<6&(XHPh3`WjmZk`*+-}C*3_UZ`L|0v`=cd32Cb-XHoaI zy66x!O`^2}WoLv+8D&t3Q5jic!jhtMJx(H#lnu=xV9Sw^N%96yjP4o6?*s8&Xq^e7 z`)y>CPUuSNY_xt|WdvF~cw<91y?`4iAyZAJpTiaUa9%;7cHl9hm$a z{G9&)q2vReyqWs{0J<%Ia5N>FE`HBS(w1LvaXrTAS1uSIZ@Cp2b|?g}7|&j+&r%Qt z3F-hqB;={iMm@es{ByuRCyyNduI|+L@2VN?ur~N?wR%HOZeSG*^svw+PQY{Q_2iK` z18@O|8RMG%Ep0v!V!Ao3&RPZcxmH3dyCFRE+Zuinx0}{R(MKeQ;1^H-0NuB9`ufqP zsVb=SzLTI}v6>w#r)b?;Mv;`kX{BFHh7}fEvED#CN|eV0^!PXBkhuf}4e(TQSg7H4 zs2MBM!axuQ+L_$~k>f&m#g9|t2R z&%!cJ23I>yRP7sq{{ZTqG2?-rh>}91AgVaaDrfbof?wpE0r1pjV+Z`9FG=0{p+h0DayF*BA0`o^fBDF=SPa=+HgPfHs%)h{HxX(K z>z8>RAtZ?;h7uA}6a+~B0L<9Jj1gjK^&pH$0d-PNEoB*!Ln5lNRVtyuE3N$_)BR*w zaFk1F*b)H78op?o)_}RuU#6?NOQm%U*0R%X)ioCRDJQ!@MLI=QaG+Yi3o14lC01op zygo-$%H0*M5}v!cb~}>y8rsr`F4s$;l2^CYMhaT0CwZoVT8ii*iA+;0GDQrF>27ci zH1BGAQK>tlcheoo?oq4%0D$!E3e)I4AAXivnXb{&(=ejAwYhdvQ`;n{^y(fk$sD8k zKuUn-^VJ=P?Ut&zwQXIZw@=GgMzpo*rK{((P)jUw?~c8#aQ^`0q^eL@G(l1+2pIv% zW6WhghfI-XC4pp*F7t_eJ!H&H4AHPbt2Cj6@ra~y;y80KNim3*X;GZsl-?nwqge{H zfi&g{#*U0E5gDTy)SwMb9EzI20Z1EXKGgj|cRyS~Po`Rzw|48Ty4ck<7u{QNsk42> zG-F~&AT=l}s&=BV6u|BZPSc*Gx5{qoYD)SILvhts3pKk<+^n<}I=e{e>Fk%Pm~NAb zS)SEjSdmRr9W+%UIcsGIk~1j<(2`^wzwQ2jmQ8osU1MaRzuh!#^oxF=MKpJ6%`I^# z_SvDhMd{3qMC_2tSW61L#anX)Q0c4m-*Yskle^ipNQ902nB1zy#1Xlbi!w4ubNP(UY$}l?u*m5myiCF4mK?ZNeGY+I zSmc%5hAgOroKlgZGLZ^L6_8XqhEf;;8Cp$10;I533IHQ=Xk#9IUuaz~p{_bQn$cBu zx!-RVYTL%7x?e7a<#Va3mbgVt>lIas1oUHR5+vP#;Fdl*L)rZxJD;Rzv=uFu$hCrA8xV*1hbgbFH#?9!&MqA6T(T=#Z*z5Ifh`dzMTPvdO%D?+{PIM(U%;oyJcoJHoCg zd9SSlwxH#t0`<5!)n<@*QWa+WMqK%>q@OVXmP8I$ohwa1`an^(k%+#u`eE*8YSv9{ zqOPrTp|-r!wDxJIhVg8siX|^KZ8C)-7A2Q3$s*wn@;K?wv|m-4sA~#Z9_;D~E;>@O z7N)GKsHgQRC?{1ZO;Zn|q0YuQl}`+TfynF9hA$S=Bx=#rL_z1XgiFcyNFzOC`9CfNRZ`E{~y6CibjX!DAdU}c) zs;xERHZomuawl3Fe zU4qwHe$-buEcP2zW_yi&P{PI>sEr|0?x?7h+iXrouH>rLMVM1q>z#Ku)u8~IQRqiVnjBvEX@`Vy#yYb!9) zU81n|_eZXu(6#>n!!=E86oUT%uHKC&yWFYjg1yd$-z3%8i?}*^7KZU?L1xt^-UM=9G_6~y#dZ$j)SFr-nl*CqO&D?ft<68vl@ywm zzRg!kqN2g4toD|*7hyF#Rkd_5v3Of(R+g3$^sMTj0+}Q-fNWaI8Y=kbqPQTEmgP@1 zzO7mi=xHjH!zze@8QL5&9PZwT!x+a@H)DS0iqWcc#Z1vPK8@BlT|aGg4kl_bE6o?& z0;3{4VI(`4CQ*1C)$*4s;%vYZABaV%lp9pcWo(8ER0Pqzxf=(8Nw#uvA!8%}8oawu zzDi45UtJ6ak=e-LV?fT*2=~NL1Iso>bDVHb2cA6f{W?UFNQlm{oG{oJjDW|HjNoSg z<2fCCE~X%g-srOG#ehCqF|REn0!pBE8cyLsV%k(KvslugQ6!Tp9XN(+m9By1Il0uRhK~`1@K%(KOf_Eek zr9skG!M6|ruA`m77wubZu;lS~&>jhJ$_d5`43UylZ3hSNILDvuj)*E%hn(jmVCNYg zN1yASzO&$}H!N3kNT4DRq<@qWRhVS$1o%B9^TV;{Xefs%Z7d1$VA9*aUqZHqW}->&(8yt=LHEv zf(Xv-! z+=@VTKwE)=I3SVx61g0XcMdqmJu&JEcxSdv6tTwMn0kokWyH|PiU?%SyUsAV$T&Ik z(|`aSJM{wjI}yJlpx>t;^+Id(@89qH;qXYT8JU>7V5Z;GgZi5w6T2tifB+c%zBa%Q z1OR|z7&!m{FfrtRul4G?r_?t)ExwiSR27x9#Y|?df|%5)7~a2hipeY`7D12$hE)uw zoC6nMY1d;DT$Tw`=169Sq6dIC5$|?`XviRAb2&Kyc+X7pqEZ7oqZ;(N2zM3$vH>;G zN#Oh7rmG5Dozz&NR%~9|in{4|oJPu2zs~K)a2W@Tft(IPfI0sF+YAzRg z$S5fwhI+YuS5%U9f->ePqE-_~%tELUD==mm#z##PYbz2fMMqrsV#6{m1szP@^MGPO zEO4nIv$@XI0AwE>X3q2L8cjgfjWbyQ5b0QKpDF$_i%oN^8ijGl9j4?c5_JdTmYf&t0S zFxmO|AJ75detF}i3PD1kVYZWkFnQ0%gUYY_1Ta|k~lxt_wmo|$Hz$hOh2SI1uEnNjDfr=mc~Hc$;M6x7~_MJfr0G{ zz`@|-;~yS#{@pc}zWR6I3%b~MNR$nXq_cjIa#_!~{{W~2=f~rvB<>i-(!^xv7~_I}VaI}cX%*k*D+Ufs zl{}1|pWnba zKRtclfJWRtNiUPT2mGW1v@STo9E12grVKd(pl)mr2S1-2{>Pqi^Up#i*owp!_XZ?$ z!jt6Z`wo-&RRypB@sKz^G0*z({dzSWz}bzT4x|uBKL8((IUn2lm@vI!iM`>NnKH^s zfK;C<4o@8NNgf6OJ#>sCRaY&)Era9{=NTX7Ab=EddE+_jmyr<1OvttfrjVW2_TMffHTp94jFHUBOn3^IAlDKN67>NGx|<=$j3)- zR#2oI_{aq9&Q5X&AdFyO5Pv@%BwQXtHcyop+6cfWK7Ks&ljHN!gvW*h2ZD2){znJ! zelhs-(Srsq6mm-v2>f6iZv8{?w>oo7bSq)0NMt5CnV>dFmOLl7$A%z+DRBb ze;MFo$n){|@%YDG9kGn^$2lXBz!=-kKREux{B&T#+(v!s?nj-306z>lBW`){oPU=% z2d>~N>g^<9)T)8tCe?jfCr3u z{@i?gbb6`)B0$~0$s$M@P_9B8u-I^NPdsF2oP7TPQc#k9y%~##FbFWq@1bVNEl);R4*szCnuco(2Qh| z837~wz+)dHb6_Dkz+imfcsc1EZGEoUPHOJAOJ$;w24$_fR>4C|iU8e*sAWcET(baA z^&MyXpLj2t`m*VzdlhGj^CS$E_fF>BeR%YphxyFLY9>estdW&Mt2{EPB3+R>jm8PH z5ko^%rKYS^*aReem#qVV;Np2!rVmSal47CR4N$>Cm04rTF*qukIE9)+| zeK|qcZ6{q(6(eb#G_lur2IWN!I@7tTyj96lEsxa%tcw(I5hSnw0G4GQ>kmf#JZUQ} z`E|Cnx!yaA+&He(mzcFJ!lGJQS}KZo-1-z$Nh1SHwJao4Dysn$VG#i<)y;a<7F!#7 z*SoznEY*^kBd4gSLs?fNGe}BP4bsb!r!o+r<0SrQu2Njgtv+cM6$MflV=83O38OUX zf z)W36PRCUz4lDew#dTNmnT4=55Eby&O(yCQoMk;!9wr1Qh8j`PicE={ayf1XSrEQYB z^KghJjncK#Jx!xbSQ(^}no7%if@Zu_tHnD@G>6gyX-NS9Fk8OMyw|8MH)~~5=nWTn z^{m$0gfC4lqSQ316|1C)f&*@&F{s+?Oy$RsoL^)a3rQmekhXuI-R%P>fS`aekTHO9 z)r5v5AV(Z&5T{g(1qIIK%_tYJs@R(*&XOW$eoHeq1hFK50H7?BUmk+Cwg;%uI79(d zZ2?dKp$0-IMHp022vkr20{~~Gfg>BXZe|JyAmfsMqMVPP+c+7=MGUVzWw3V~7Qo0J zJPv;u>$v1tnHfPV!#cPevG4{n?dO5V{{2gc@N`Z;m>V(~HttLk3ui2@4gm~&{s;tk z1X6mRTk8(mUj0p9Y?oVUy+wSgrPI~AGSyd6cd#sR$2?ZMg{c{mT5|!-Jwov1W>#{_ z5pC+~>S`!17dpA=sVJ!9dYX#5xnrlLf;^BtSzLrb&x8b!cQE58m9$lq;UKD{og|87 zN{FVWmvU4gUtx-&GO{k$Asra*MkkHOrm!S>NDMeNb;a1RV2+kMjm8|i5LgnwPTPY- zcIoYm)^&extaY~yK_6$kgw?v1s!Cl)eV0jGqc+=pTumKaLzyL>T4+oXPGwqH<8W9N zlz3@aZ5dsoZ8}%BwN~4;hAO5?8x=g+fvP6;JzAUPERscVFBoYmCz7y6#E8PNMJi;S z!S7~{?Sk4aDm^BeWg{WkMr%H52pzT0 zmez$s#`2;%83MNZmbncwrj=(V!MZq=V|P^nB%@?7Mk?BN(Mx`}{oI@CDy_8}sjD7pb*N||9-CAws~RH)+SHz` z(0YIBUK@4CSXid4)z-M@r_|RT-%?Q9b=?(XM(IENSEBA_DeKabqBn0=+@Q>TL+UO< zt!1Tjr`C;DpsBoe?$v$Kt3h0nQfa%r@}-gseKd<#O%+uo+F7BJ5VAuNX$rHkC;{iH zkG|U1xiM;OL38duZktZ`j%a8rzvGP)e6FGUI4EOSmTIeQuBuyMTBKBZiQQwDc@9oo z^^KqLEV+hrn(+L?WeR}N=JJyWB~>iS(K5p$M*K1^<$zf$#}PS+p=BLv{2KoX=}Bvt81KELqO?6sc!!Oe-u(f z1;bEY?ypH3%H~oQlA5Amv6AlTBVZrfT_f2|8CheKy&b&n9ip-wSwl2uQzc~?r>vO;tp{VG42PUVoXhEM|yB*&;}0rw=FNv~hx8{Yb~ zYekbz=#4vc`;!A!+AS4#3g?|<3PlmDudIPgk}25HMn(YG*gZnES8RTzyMs-pHOF`( z)we1=X5-OBDi zc{Fy9)7Oi2pHZ7Og0oR9RaU!gw$p11J?;t`&s8U?x>c$BQz}gGd**L>M(WJ%H9v4Q zo}#~Zm%6q}iyiK!YOOV(G`+$Xi0IuZMJl6IQd5+QI$FD8#nfqZgIS#}fcGJNl&5 zd06!l$_C)D-i3Ne7Qxtmr4HM6Zp&_|ylLw;q}SCEMRB-ZF7%6E4UVd+5bJ2Q(oU~V zT7o$mDvHTtl*v+C(*Q)Ltubk_S~T=`SuGaZU6C%OCb`RRp`^7(ShVoJrzL5piWQY0 zi*bxT6#;fUk-1N&6A)k2+|0X+5K4v_S7OAC!yufK?eN$jbzWbzhN;!`x};sT6HzU~ z8k=UGp|?9NwuX(+)4hE}Y9nfz%7{I_n;nrUX2@fK(`EATz>5qi91x%YDlU~A4V6aZ z^2F|Fl1m-)o!!{87Ir+6clw?OVe}P-yZ3uEy{@_~H>7R%uHgtRmoYfRHqBGb!r zzSb;MG1S!viI%QN6{oIk?JS5xNaO}1sGhXAYF!80%QtF!Zyi0$ySj?WQAKEqdE<^M zKfM{$8kV|ek<0{4(j_UJh2G04D5=Yw6BLvj6M71N+yPeElpjkn-KM20tOG=@8mH8^ zT`V`{+<`{70Pl2euX;Ga-Nm+6-n9)iH)CmTUBhWrc3%(h)uc= zvYwC7w$nz`i%nXRER^%CMmW?ojPf(NU8eNcY`ZaJv)E&#p{KsutW{QOt96m3tGe87 z7l;t*dF81Yj-6`jy+b8UQ^d6B0z{%X`16mwm+sT{_e$!UXKg#{s=IGjS{kGO00^}8 z-sh?k<#nD>_f2-a)5%Y6v!veXnkrhFsZ_a%&@yAHQ%U~-PmWCN&aE3RsS;^pjz2Ie zg&A)!#3_^=W#yv4x~{in#K^vTEGQ^~0+mK)(Y2WZhC36m3$Qv#p^N_jR{czOKSXx| z_WFZOXnQ=i3u@VxpRlVQ8 z`kuQ^)oE)T4Go@(<19^ISOm9A&0feBo6{F7si>NnWjmfxN$4}P?Q+T#bn~S?pK4k= zZR5LIl8d%B4MU@KMyk_S3&1sX7n;j86qDNRO+`)W)zZm*s}Vyndy9Cls-}WrQCCYnzTHCx%an*rQ962! zGH;cFM$$a0su-`9zem~zzU!-Rm*njHz1Le-ov&L>1x3yqMXKLlT}x37KB28y%Dr?{ zh$NDlGzCRMqm##8qjq<N)&33_rtlieJQQ#se27sWYtxA zk5b!HxfHc_dzH^YXw5@zseuNkHyT*!=?lf`qg-KvN{EB2G-ac3y;gRu8Qu#0Tip#= zeTPK%_fP4aSN89qBD`EJ8Zu2mSq&w8w;L6*%U2Z)#)>zHybUCf)Wjv;tYaYhQ(Z%$ zJ5!=giqjf8-&<>_vRz@O(v)_{YAWw6)H6d@aJ|-;{b}T@mPR#obrL*`%BC?A#S*4f z?Y4}Y>Dtz`nwI@-rl;51tXt(v-EF?lY|#lEH1|r&l~mG7l20euNc0aRt2IFTSmQ-4 zGOt~6jpQNZl3H6TM1d3qLZ;AAlGT{AN+nRrl%RkHNMM4MR?PxR>L%Gu0)H;xP+ca8 zzHt3_)IHGee{DOdq`Q@;U+K58ou<&nw^dT<=u&#US6dY$RM~7+iE2XAQd*6DJs9*+ zH-(lh^Gv}{QJ?VByHvs1`~HQyQ_pR>+BKDSuC?0kQOi$Xa?%>A+iglK%{)>f`qbZZ zZe@CiO9feCVgeA|Q{Ps(Xss+625(Xp6sW?i9K!U-stBY15ik`tdtjt{QsRO-~5Z z`i7DS+DeOkQHocNSB6GGQ0j1}a_7b(n>*$tnuHNFVo(!Hwq=q=M=Fb}$!JwWFB*tq zUN<PU2z{{Xn^#cbFS3bh4|Yt~IR+X6Oa#oq!V#h7yPa51#|cMuqO!5|KC;D2M% z+EM7X_KEh8F(%gbslXWcD~uj8a5&FY=9BL|x$g%>_a@y3ZM%;Xh?dJ;P#VXn2qk2= zX-lKIO3H1)B#sH%I)M!5ZvOyDfW7JCC3Z1mBA+?-9!T~CKADWEQn>gVhXj*p)s)i% z(1UgeAP_@vMG!$9=;5kC0=jKoM@l1+^T*y;`eSe|q~&pt6pUn^MnTBnkAsdnF;o+@ zvE6_Nf-}IzbLXFro{m`KR>*ARbND#MdE>z&jQ-s$j+JIqbpVj~BOnc`S3W;x@t++0 z09s9Rg~t&^EM-YnBO6XY!B3F5KL`2`@1C5|8X^R29x#Tfu8_pKktF@`TS$3OB2n0zvtui!H#1rtT@{v##E3& z-nbjc#(d;*agcoUx|pgySn@$#gkX|zRDL-l9P#5kXB~u7Dwa@4P!xc0S7#Z=0|2jq z=Q-)gA&fVLQ?#~rf%!yHySbeW#opdB#7dOX=gm zUtl-@l|CGS%Kka$pZDrAc&&)4uY&V`PPR7qo0}f{`&Ywn)8UR%J>?gHwBdO;1Hk_P zuOs&9$I)>bj1!%z4h}L4A191+kL}mUAZIGgl_2s?0LPJzM>+F>$j2kkPO*mC5=g_T zKE_oG?L2};?oK%^kWb@1Mo&&_rSLoN@%HBuD6XGBry};>_WF?(1ge4Xpr6;s%JK#X z@;K!D@z2H;CB2(t`q;+r)4Pm;@Ntu$Jc05v(%2wqgRmR2;~+LbLICH_IVX?Xjt5R2 zlC#DYl@*f#cD6DbEX0A10U7!J{B;>~(Egw1@a#1u5~GG`8SpqH5syDPBZJNfA3S{Y zYg35|fPt{!0>o!I##iyr=NaIRo=hbN=*n^np9O|E#t7Y#I6t@J6$sr@ouCMG>mho#xQAvAW48+R#O$ zjk`%X$-p?^^i+2L09Ht&i5^*H;UYj7lh5IN{N#88k^nt<@2$VZ6X~N*O(h0~w(E}U z-c3P<3R@kqZMONHF_two3~JgT%C^c@-Ms7|4Z{`cPp;ps{`qU;p!*TqnLBj%xRQ?5 zLrY?M>*cnVq#yptSKe;a<|-18k4tDIU|#Mmq8`iXQfVil=c}w*2=V)O{)FdibM?(@teXxwSqv!4k>@ zH*G;#6Nzf7O0_izl~F**Sv8+xf5RtESnhFmH|m#C)_0@1)8@WgEoEg*Zj`oMotJD^ z8k&X`H@`%)qsFSVOu>Q&O{Kjpq_tXX^mMk%Ewa^Swo)!>t#(UoEvnrC3aSirbZC)e zB83jhT&nwt&PyA51lrXUpmhoxGXhkn`lCR~+%(d}S~Bhpfk$EuovaPOpmh$8Xo?hy zz%Z@!Zidnww9*zX+;;lQPp5QVoPs!LC}WL8m2)U2Yn8@C3->kEQWufsVs`J^qwyl1 z1atmYRl@=X-bX$LN5JrZ>7JxhQO4s6fD+u58%YH2Y#ecn{QPh+@`73{JNjqXISS0f zBg;fdjhk(E9^6u13VvHsmR zPfZiM#zq*abqBy9TWQb6PXix}W8AHN%c^!vOr1R>Gf;gxUzgN4WTl+h zN1q-D&zubO zE6FK!BMcOC@qvS%{*3hCK^Z3=amF#9+xGteVe`^DktS5foE3F!5DMgbSbUNXkH`A; zASU)8dz>>2tP7L;zH^ew4nJT3@s4nMLnJ zVmKe4$ov94#NGjPOS|9&?e$ zo-&R}B^hOqq2LrG5Xuh(U}v11{Np1&dS}&ovrK5(S}M&`f3<1oE>-YasOqk@29}m< zg;wDOFqMOoWF^I>g zzO0CGoGHgnqgTK^PQ!CUbGJKucEMwd-?j>h8LDdOX`_Zo{dti@P%Au*mI21a1h=%Y z2LVvwn2vMcU)Cqr57ZSGaJ#43n;q`Kqx6-!<#y5&N2FSswz9g<9ZD;t`i3c|c_*oc zAsus5JV28qSX2d0sruCa01yigZ)}%t)^;xU4f9=IDCeNmoxrx#M=iTfP*pC;?V5gg z^0M4#jBTl|j{+26kT&*mFyGNv(S?81E%ILD_f_uJ&e%}NEo@a1MJcN81=%VQCALu2 zyDr*fkml!Hu1qPI5!-Kw7DQb)kk)Q!v^UPrW_3&^l+dx)#mb%@GxB8dAYE!lK(x za-Axw(p!~4o@r_-BZd(y&+Qo~HlPC;B=sfJ8e2{19Wg_p^c{wePH8J`O-)4&s*R>1 zIV#GT=ayQD9!ckupHgWZ;ZR<6lD8Y5C(i_{Rlos z95)b0oc`ZGIsX8u&-eZM)WuwMWPFy+4h}JafsX)yFh9_KM@b}*vI2vDxQ4+8^yhNt z!NCM)@;|3vCv^1Lw*nPQU>t&Qcp-VmBhMWsbLrEoAlhF9?I3^ZFDH;e#!G(Wc=#_> zz55&ekJ7$)Fm%!)0CRu~5LAJj0Ju|;&Q55kg4oiHHhxE2TY~(MW*a4oT17a-iSMSE&;LyAnrFBPPv^8kC+%z;3_TN@i zQPef6;iN8gc571IQlI|-DJ^ZSy;>sz)rDyi7~oy9GjaeOVGij1HvL}rGFwiPz4vab zRoS4@)c0$pUF!NRI(8ep)iOlZ8fsu;dfJ#rrX-$9e@&P%-L#=Tr_@g>s{!et$YAZp zM&-)j@;C&agU(6L25Zzk&Aw>f&E(+DMdi-Z2|;5qCqi(IXxpeL;OUYVW7YjWJ29>+E$^x}wn~;utLV2&;t@DODvp$52q0 zMsXNmN`!SeLO|-j?5}HXedg{~m+i%#vX_7zdYkgpMev`bN<-XqR#g3Y@MN6i%^SdiOO}5Vvrdrly!hh!ESE#_w(BVlW z7BK$8>fKS=p5bYpAI>&YUvhZNoJs!xsGdTp2C%9$!hmQ1ojys7u_GAsO6ii8 zX;D&a`>4_ek>$p!#!V#MyItL0yRGr2^SCmC0aJ|Rc?TH)XC4kSjE;I9vn)&;<(2)b zz$7Wkuo>hWaDFp`(kEw0iBq&lrH&YU6SchL{s$g2o`{xbDg)%QE*ea2$RzFXFzmpC zl|S1juI{hu2;*)({&>O%NhfWrd`*ko{{Y6uh7>(hF$549fy(gM!#3RGJ4hd#5=L>z z9TL@S*+(a7Rs+uB!E=@%^T_3MgX8C#)QAKY}bNU$&L zf1D;ej-p89uFjsjP+USPTFZrV|R}As15RJ%6dhkrjCyLaJNuIs_h_|si|2O zSwWGMw&TV)C#5P#1p<@luvme)8ja~<2vSHDxfQTCg%#A1@E5;MqwCYL#gJ=cBoYW< z8)z{ytAYqtZQSrjobAp5Ad%8RRU=@g8&6pb=R81x0N+^+oek0>5^B}>#zI2rY7Yh{f>N4dmsl1@kmg8nX>FPzQze~00@q0K%q~wMM$BqYtiv>b>6yM~W%)8VN3AhBC{r3~l5jgJ__JHL=rH zO$>Vr+Z$JKG|igVW7jt;J=RM_6cm*8_TRfTbF2(uQE_UZL&~w01*2dIQNaV7U{(_u z%P3=#k9{Rg&e1u0F zl?c()7-wZ8GAP@FmACHk_V&RnbT596_j{E=io>R1p80ZeT}P&V)<3n4)HZg#N|MK)t#P8XbHlDWqqW6Jm_BG?K`XtYe;7s05G? z$5b3z6!KJu+{qZSxEw(dyP$+(dx4W4HdrIGPk5d$g#xRTWMX`+k(-UX)o~byn}Egmh$lu zHmh|r5&r;^Lg;H|!kEJU0Nik=Z%Y3FG3eI&5S$yL;QL}@tu;4oDQz|PjbU-qms?(y z2Kd&gZg%>~t1IpD14B+IW1dN8Ggb)D!l3&L$ttWsvGaqs^%os+uWWao;AwqHQ`?y? zwRgX0_TwH78arLG5yDH&B(l4(>D(kMd$vMIR0ceh}`>NP`7+J@1k?){d$wLQB} z>l)gMWr`UnDKy1hH`s{E!%aY@p;Dd&L_rKn10u$uhB@gqH*@OblA*5JA6QtUXOL3; z)w!!3>DTnlD5NraGhjC8RWPFmljg;Gnb5mDtbJ)cNy&BsM*!jFE6=x*4hRDuJapK% zI4bIDDdKkZDO^Q5<$+h)u8Wr1UjdbiV2!LX!2_;@B)bzJIzh0pg;F-F1(~-00L8#J zbwaT~m8uKPQ7vRwAW#E+`3A9(osQ5v-9^i5fN=<&BXT@G;f(r|vrV)ll5;ZKQ3MWTdXHt&SP%XQ`&AYG!J9r>dxA zhBT5H1IZ!)gDuW|y)$=9MN@YlOiO32yGd+lD&e`sT9C&py+s^zMGSL0uJcX|rKMGH z+f)z<98&$P?(khHO{O)4rsS2@RBLrjfAIQ?tp(Q3(@vDN(;}ltBJ@L2%$}P@(ISv@ zxlVFCnQZ*A<|HB<+WFaXsuCeAK^A!0%d)c|jzCMQNPOB&R!xEgkSikk;yNU=ZdHw= z4TXS1DWFP?AeuX7{Y7G@)t&zUwP~K-R$8g5>n^nu!FrBF7V4k6cB>K9Nl)q^jT3z| z?Uur`7T|SL_sY?8wf8pj9NKv_)y`>Qse4thKiS18h!&`|JXzmEP!sMTbaJ~KGLX0e z=I*7^%AM2FS1!%PM@M#wtzl{DX(hJBQ(odX3bb`76=6t$k9my)HgcXBqq?_VT04W^ zn;p)&dzA$oR5oomDrsrrsH%qVNoczn9m@682dzf}f0 zWFUE9-pblS(*n`jZ9&?LsB2esZrbY8boB_N)RcOHp{>gTrX!@OqBONL#882f0@kvc0g>5#8d{R=9uSeOhW~xyxhHw38WFRL+spt5(;@k%I#(xB?Vn z8HpKRyV^%fK|^+3Pi&t_Ys)E)Iy#FbtJTvw<~g!rtA){`irG`??RixY#Q7uBg@Fb; z+V0_MZ>NnxRcY0_a;7Ujp{ApfHCc~!0%C1iMvt^Ca%WU;inN+Om8&8W=f%$|Dc zX!5c!F_r;Ie7g_>stqrsSk+3wcT=V5J9S6c>*k-Lr;^*OduQA$ifN5aMXBhJrM~X_ zg&oEcj#`#)MDC`ZIYDOiBVo4yR^L$FfY91cPgQG;J9V1HEcMV)Q)x=1^@Vjz?m`vE|^JEZj#k;nI>!J{^|{D;lC2n$c+;S^9nX>!;}1|v>(kQ(?-Otq9(1#BNQfx?|*Z^#qPtQr} z&{}V_Q&JRyR^F9#HBcIQ#RP+~gs&3}f{XwiB-I`9ymt#$Sam(??QQg$Mrs|M|JwK?q$OBbe26kqV&xqa05>Y@1(Q|*=Q}4 zsG$~G%7>IHk7}ZqbF~nWq^*60?G2bti=>+APdqUoj_+`&l2v%q21J^e!6ar!%dl1> z9^Zl19!JAGd&FWfWPD7?;Bd?rCnkGPe8=Imgme+3OZa%_N{wDY9V+@523%d6F_Fu- zX|mdLtd}yuy2s{GD%#j5n9-k63R~2DRzbzBXV*GUR?|ap)A#FDdsjjCuR^uZM_F%K zaU`(SK~V8LZA~P;lgXA=3alBq#3t$9ogEIQwrHz7_1dEORahx%(!&X?ptU1N6V{%r zZdn2y&p)K5IO718I6YRnkLiQAb!^gUo2BzgRZSN5**D$MM8tr~<>iilNFI3Hz-KB* z4b%s-HmW|(>y2S$)bLh+9gYa;;l5LZmfH52*hrO&xCz!8ps2Fd3>a12NGF5WNuKez z^BEkrXDO4)#XQ<3@d)R6;b9sXJfw-^h2oN6jH=QWMcmsk2N_ESO{1Pj<(5W7w1uNs z-_%ugGX`+Vgn~j*G&mdMTiz>f^;PLhYOSY+dIY7co##(lDvjn(LXJZo)=1=7*vLQx z0tbP{e6`%Jy{GOC?(wT=Dj?CF!mO5imEc7zw)-XGqG?(QR(SW3Os$2Kn9PP2B;~rl zXlre?GR<(e$pooZlBmih81D1yHQfq6YvIzi2y%>t8#TY2%J)AIr?;SkIShEQS2Cr6gMy9I>&E zO(j~JT9C@5)rLh@Wnrp0DI{IN3#m?}{{YEI3<yK}(RhIfuLw1T!s*fvITf)V7q{k&I=${EXpk)ayJ28+p8}#)S zN?EfIVpvTo0{M=Oks5><)8CjfGIAOZ8>qLO8e(H=;VrUjv2Q9Vf` zUulzJZTlIrt07fFz^bu6(V8zE@44Jaq0!n>>jgH}6&LI50tPVMZ3%&Nc=7!})&0opymalixvw1Pq4 z^;s?7Q(Nocq`7J8=@P1Cf;)w^4MjY1U_1KWucb5*ss=3iVZj6)z=?BJxleXWlauAR zJhGGW4sn7{7#4rvZo{WR6Za&p16KdZY*>e{d@65DIt)&hk8hd=JMM9Q4@r4)PW%0obXu z9tb$)&%opN{2nq1D=~=e-q>|r`Bh-29PJq(kVg%{E#!gI_`^$^+m4s}{C`Y1{pek+ z013PTp;!h4jGjgTBY=M+o(6gqv!zsfCslNj+j4~&b#lQ&jPe2y2qf-d`)8(qTWQ(} zDo)}K6l5F%8_4tdsjD+x&gm!?|G4I)JMlKH_|w40+&V9(qGra7rkonc{h4i5h7YSRvTH=XNc?R0>&%JGeMso{)jb>1TeM zZ~9;a@HsR+`4m2&eFhwqBwLm?Wu--yS(OkeWQrz|Od`6ba<~P~Ip+lRk2OVPeZlSx zZB1<~)RdN+P_4AU5W_7>(iN5zsU(zH<$@`G*-pUn1lb$!3fJzS)O0r+M6@>PjmED~ z(~4V7B_x3i?KU0f^;OlOf|*oHJ273M8AvL6irgt^duOC1rmi$s?OS}SiD+rz+{ss7 zNrHtF)Ke?dTQ?RgRHTw^IAsC4=e%StZDWn3L6OT=Yc}*Gjf#QfKvZtd?8@<~79{B` zq!d{+GFKI_QfH9)P_N}-WNUr)3IHm_sB$lox{NTu_mzC$H-_A&%VZT9&TxDj zeti6o9dtFdbJur*6CaJ;oOfLZO(Q`-x&(4Vt9JT`ocU0N@9CW%lij_ig0192QTR#E0 z9&?=VG1EAlOOoIa!9#f5pc9;U!90L}2mN_kg3Ph0aP`%Mt)A!A3AfG5}r_?$5ylbb3#}p9BI( z9yre&lb`*+W79BZaz^$Dm?hFoM7$N=Y@?FY^X&(B9j z`$=#zGCilu5sa>UmCyGoeDr`wiowYncB;N);P zI6sbY`}5OS5O(14@9qBpJN3fhd~+i(Q2S2dynq?PobaHJBR@ZYFnTbur-J7=W#{0N z$KxPz{=R$$vQ#;2HsxHg85>E)Re{D>F4A$}5IQlO@Wq0u0hATmPCz5cBoUr`e2?3t zuiLLvw!*IY+uH^nW1Ap`UCKuBpVXuSwCBlC4snk>j1IoScNQD)2?V|d;1?wGjEv-i z{XPI7p;^kLW7;qn7WrVrGJ<)|-g!C5!2P=U>pGG{3?B>*)5y=xGx9P?KF69AyJ78sw?BFQ}9z5fmG>(f!Q^ns~LJaBH9w87QstqkWZvCyeZc?r$th zEX>AL^-!oQ869ZreI>HfM@wh1+UV?dTVz5jWv1H~r$tKw?0lt8-{o)RF6GdBKrM6J&*1I{kl|GeNCZMqx%L*uK@;54is%ZN1WuI zNhAyu(;_zIB;E z00;nc$tO8HXB{`kG$-6RNk{gAl=^DjdMJbX$UO43vtZyVw9IA~XDPoc< zV0m2Usy^r0O>JnrSgqZu?zQi?{kW;6lfobn3!$&)9XiQq|&S#N0}Qd=p=4|sDf;6aP*OriX(qZ0Lx@iI$GB2gH|zE>7L8>^2svX zYb^3>9ZGZS>OE^zH4S5y;zp*Vo*%NKX>c5@aWg9(9~d1vUavi}(0A)S!m8D$DfO)t zB=PB5J2jR!)RT#&UD49h+oC2Z%$WZG%~VGbiCy+M0DzwBq4foQ#-gr+xtfaCO<7iI zD`-|5bwa~TNn=H8k>N+CS36N;CEH;;iO4-k>{>5PSZ1fLx7(noyTHxZpooQox!7nQ9H8}$Qzxu9XoNy zZVn?AkoOO`)a?eQsi@GpM!FDZw9(YO+NSRlMnrK}*RwiMLn<(N6*E#DmvG9F*W2}* zw>`JeS1mng(NuEM>f=wPX{-^`HGOsd<#=OH8(nVo9;IYZmXOrcPLsxp>Yksb0L8iK z#`P*B_aOiy0=Ns7!O0DR3i1z}@t>1KNc&rAO&E~6hlwQg-2e$9v0cj|{-Gj};{b2~ z9R*aIDz`*_QNgPn$T~%f-wFxf5=HZUcHg+7Y!Sy$aa(pvwia&8Xvj3qoDv$!%F2tS z-oBz5N18gCl#dqbN~NbVH5Cy@Se(n2XJ$q!M(Zn6&qZ0I^<5sSjytW2r%zu00EkoE z6)I4OtyL07JO*`kO1K>oN@Ec~vMR0$mQuDgj4%TQ_U;4{Lu8O}8HvE;VDf(-io?AX zQ`BioW{Agh_rdw@Pb#(}oQBXBAAuC2{YKh+FMV})BA#Q5^+kHl8x*Dp^-gm|>CU@&JIN|p^d++BI2sOe2DvZ|KHtSuDs zkYoFLs9w)-G``ltB=is$+Smp1z!QUYL61nRYaT%XnVEe=jDiWkWf`y zI*T={>L;?deH~9Q33%=vpK6PyoROyywKR=S3f03J2<2b7VN}xsth+;o>se{-Ph!=U zT3tbZ}d8u zu9Vd}uTEOG)OM2R5~1~yhAN7dscDvQC19}%U}ceDF$k0znVi`0xXih{%E^}S)IMu`D<=qkMX8sV=pbPUzd( zl7%a5eXg^^bkvGvSYx!_^)g13Rn;4qiR7ZRIhzJl5Q$nt79(u={{Y`#tGnik*LBZm zq|(u923q|)cB|7h?^ScDuv1mDQqs$JNh%|uO1=Br?A>Q&3|W&11~jPe-+X(IReRC; zMr*A+y~?{qHR8#q1yuE#f~8Z_r=v1R^H#MLJZtGgM;w9_i9(eib-(_ef5XntW=n3j z@9Qn*_PFFD^Y0(zQGP06L-6<=hmdfQa&@Y8SaYFDUxyjHO zB+ke*p%FyuA(kS@<=J8}q*RIOmE?}RlFITN)SjmjXo(o<5U#{(b8DZ5s5c>DwclO1)|uY*kxhPq?Uv)U9;Q zy`HU)s^FFj4z&GH_EWLiX5*wUclxbQsC3?>)KnJTC8Oc~FLb#}HO8W975nHGYfU6F zNmU#y;oP$$2$6`$^4GmKKd9>kT|Si6kjn<0(AO)y+TW#gmGAhh8cN-$ZX#OiT`k6z zX{sWkn8%1YXQhw@M(o zTVAqw=eX0yO<6LM&d>=x5h+IjPg?Nir=91^M+@bIVmA+*jzxJ8h5_>NjUq_H7S!!B z71W@mkfNK%8U&EAkg*`FETuyNq=#c=ScAYu2Y*(?Wm$5p)>#ouE*HtA*tb3k~vn71M?@@B1qmF{UDape$ z=~GO_z1aY$B!IY0-aT0Nyj4~zdce=U zC1rYLX_X<7TW~`L00E+nlG}z|0RU6Jmj%wQ0b1h9xDoT|w$#>6_f|bSb-TOR?>$MR zbiT2sii1|^`%a*tMUX<5DoEy@k=&m^lTO*akN*XgLblqD)U8A1dmQtl$8u5H=Ua8YQNj9_lqUc zit%Q;(nnuxyHLy}q_3lyOT|15=MDxounev3U>Fh8(ll-zCyFYXcZuPeo^)Aasi&0; za#PP6Wn_v-$wpES2lfO#T&~91I-%p-i~NsU1{6nI8(=C9<73f>_wGH9%8vN^X}Mc( zG&Ggg*`cnt)j}$0t6*Z(^>p&8?U@b(1|w$VEtETyfWYDU2-SH^Dv^vY$vDsI-T3qK z!TgT0tqszvu-(C>(f2xgjQy0?&G#BlP@$5d4%+H9c1d*Q>S=}`vD}_g)KyH!?atMd zY}(7K;M?h_#sC=@V8Mnm3bsm=ZVEE+%E5ra07D|_HVG)yRGZvTBpwE(CYTEV_7!TT z#^Q+Nee^txD2^6jPb6hWJAO_$z#M$@pU!%6F{if(qiHz613%aPzt{VYlPv2TV<46% zg&#Q?^N)_5siF_L+mNITe3F0qKlb>~P@erq9QF8pj&P&&Jp3;PK}crFRUQEZf=K7U z1D^vV5s|^j@LXc0C3eUaa5k%ecSr%*)wat1i# z`}rrQN_9y~BYUG#N@bYrUHBn9eysDr&rq>FZ*9H)9W4H*>4{fy+i|x|t9`5ddtog- zBS_mY6JR+Q!so{zWce5vJRF0bo~bDUoIWxLP*iY1^O8nRKd>L$gVHdkKG2(20Y)1G zIS2N^;~qKVo}AW}Sd-M2H;O3~D#*yeFysYnkTMDIMsj+DxjS$^{{DDyP&oSk0F(6p z0GuU?2MD|ppaGv5AGUu#zvtw1;N{1iEL2BDX@nl7SxTV;WQdJ|H`Q5MK0r69&C>Z^!=BxMHj$08weISakG0EHn- z0Y#R{q3N(dw&6|!Ko_wjfEMVRAYTV<`QrBHW9!^dI=dvW$fS^DPfdfa0LQc`VVo%d zsm@2WdWrWVxm~yH^_DG1-2Gi>(RQW(0Me4>BO2PR>zKtAwgr01nH`1|V~w(SC2)H4 zCO+E#0E?yW!7WvPb+qNSqB>*g+hM5F@!skRMS!wT4XMM;l-i}GBs&%Z-H|iVf8mQ) zuWeCkzpI|=>#pGU3g-&W)~GKt&u`PJ^8Lh=?KJMbw7@e*vYII1jY$f-SBH6VEi}1= z197G%S7Lj5OR(nkXk`OpL84SM5lI=dM6-gUYCUTE02p`NULl>q`swcP)E=g`cFX8r zLtUh81NP^l zo{KUcQ9~6x5(x>w1b*4&zkWE#&rlrHr2hciVeYiM-$0-RzILwFi9EC%C_Oz^cI$U{ zw-<^VNOoJb-M^=fJrmn)7pCQoKTOYW)AVuGqMfDjRVv9*>OR~wrdDRj=N(NWrkb8w zx#?Cqd8*YTsh*ym7-}YtH1yGCs7TgFRY0+YXU4?~jl3HH=oJX{RanT!Y4;2uAOLyi z8T0$&r1RU;Zq))ZdC18JAD(~j&&NzN79_JX6Uky)=!3o4wW5u z+jH9$>(feDhE2gUgWxttIUtM=A3q*>>9($oieMIukVs@ahQ}P`fl=of{QlXWH8aKn zn8{O-fsui`+;Du1XU79RMmlJyr%=xkLxupW41S(+ym>pnw*-&gReL)QHyn2#=l8=3 zc0XUg-mwh`#JCCzZ2|HRxq#qgkN_Fy=g*IZikfK&E~*z8AOL^O!S<4Kk_LGPl74!c zH8dhN3ix#=cc?b)86*-%pP%>09A%}DuOQ`ffIuTZ>N=5IN#g!zr^d(W`fZ5Fu}7{U zRWyW<$S~sos|+E=a(Nzp0r?;d0(S=5m|Uv^fN(urjuaeVfH+*`bCTFO9Q8P=q((c5 z3P}WHjgfoSDZwMy>yd${FJeSmUXBzzAYOs{px-s_WMxcb)r z08B7~0qeDHM!=7Lm(%v%;cZFa43+m4*m-8-+Dig3K0hBPrq+$b=OBQJKpt{(OCRi` z10TPi0#Q_p4nmy9p_nf@!>Mcnc{udW3HT$N`DT%T-?S<9RP86q;~5{+e%SG!fz;rV z39XMG5Ar(xmxd8Q9{&K~AJ+a@kIJm%vBun&P(c}Pe^KWk1CfF`^O4hQ#OSS(K*=6( zTO^!k7$c5x$B&Mr62J=knMhdn~xlul-*&QvmqR`DErHCbIKcT}*(JUX4mke+Nc<1O(<2K=(S*!q*hwk^ zNQezh94ZN*Ar8TfYiBKFs6Y(#=4Js~RB_s&HEsDpem|_JAaJTGtdd$Kjfp!+0RB#P zlEWl}K@IT^=}IPv5c0!bEV4%>D5e{Q%i$0QX9NjPHT3ntUh`fj;X`g0~1o=+IYcqcg+9FRIfL?IQhW-{#<{E ze|auCcHLp^Ricj79D179{C@p$sEsPFs|l%iXelYTmX6&U#}mx*#H&$J6p9*8OpxA{ z>MP}!Md{5!uJs!vHeD-fp6y(Y@x&@x81W4p3p2(fsHmNiB#B=qcH@N|erbEv-7C*} zdy#+F7h@rs@msRrL>RhITVf)f-*2ZGDkFvg9AGF5xMvw8_00bO6?mWEd^wbK#k0ReboI5db?}u}& znq_I_8g`PZ3zn_8AqyS8!A~@8SnVd(3oPh;7!(F(m6R%w3G3b+U)y^YptNayIj3l? zdQQ=%^`+ab1E>8Zq&+G0~2RMqAv#I;gZQ4Av`O?hn%DFS(OszN##`6mkz2P zn3s`sBxwjGNT~crIN7QF1o=^tkqzjbiGE2s>zW5hTcQp;4ex%Ewp@Oy^7X{*UzSAN>L$IB~-QmT;s0_yF>RK*ZQZ^cPV9LOTTdD)YUVEX&M?>t~1>;wQ>&F zl~fGv+(6y)*Ss#Fr>G%cV@WTk?Fs~btcEo!pB@VUGC%CpVVB zP%+2rPzL}HIGf~>LHwWxc&TL>I9TrJ_z~o@;WJ)fHs0a z;~%;F{(swn!1?H@B@nLiR2**#i+!Gu+%6SRP|$>uW~{HCI!Zu`y`*6@%&Jv( zoNe641#y+ZqA&gZvZemtWzp7sN8CxS2$l+{&2IZKN01BWMV`L41!<8A$C@1s-;!OebIKHQrCtb0V>I3tRHsf(4fsvdJ zJ^=7~K`O;ChMVo8s+T)d%?eHFs~y=MqOzjy$z~&HATS(pQBmry?$pXY%eFKYhgViF zs`2^Lx}pBF_3oS0I;Iy;o4t zMF6S3)z27~nP!Iqt{OPvSmTk49mYZ%oOLzTI;XRiKc}rHpsjWBUNuD`(_Lhzwp*SG zs$D>j6>VgcLlja@%N$$~NFylF_Rh9$^ilTG`Ck73cP6VAD~-mPq@Ggi zQc`M&818m=#^r8sNGE`L^{&C%-rniU0_i9;#j>v76cW=^)?6s*s;?Cl3|(cdmf+ES z$E)KJhxF3}0OKc$@Mye8#k0OWo{=)ycbuONV=@`q0TQaT2^zX9Qs^>B&!otz%8aCe zvzu(bQVfJB(n=Du9+TyX3y?#WAd$W4P%HyQhQ}GY!AWrMjsE~gPu$ye+V!OdpEn8% zU82=rV6j?jmN5dwU3aLa^(&?{kVh-c1mzsGYaEOf)2Yqws!ylt325}C1q2oiPc)XR zPNa&KB)#eCisnX|p1P$N%TpaHu$r2sm4ikAV5OLKWG`-JNT})Q_3pW)q_wBp!AQ4N z`xT@IFjGfO=@>@E#7Lf*+@xp6RKr$1$GHh%{{W9GQpIDUYI}9k`)syW+NyOuR@m!l z5_uz9SC*CrT5q^;N=Sw3_v;AnIaj&k+iIIE}-S))FJ^IkT_NJh{ByC z8Ad}PulI(~(-O%v)XR4K3EL8obZK+ zpePn3U8;~MoJM;U+sU-6=qmy-&o59Tr~+>_jefHirn=kL`4#^8kyQK8v|>p zQb9Wvj@_;uNF$BDNMH^=PE`Ek7|80h(lFvt0fKf|q2P5X9)^-RZud`L( z4LxJWEOJxZCoO!~iX@T>c&UWbE0o>4DufOT4so8fmaEbBI<=#$()y3MH!H$}YSNm9 z=R9c8#JqY7z94J;K?f?UDIX1*709n*c3f~%UQR(U}Z>K73(^QqFs|wKEZS_E!XWX(y zSZ1ek3=zH=)rby<3`Tm+`eNZfZ?0Ccd)78qmrGaFXp5~Ce3Z#mSEnjuskz%Oan-{n z$&3?B(F~o@M(D2Fa~OhJ`vcs)NlPVl?^ma9EcM>3)cQ)>S9PnFf*u+w8KPGZ#Ou9B zrt`b`GIBbUMfAI%XswdZd%9|y?ZK%To~X=`GSw(71TZs9CO{X{K_Lvx*c(6xtY)9Z zGjgV5FW~-5s_7GE^S_4@Aa!s&h@z5k8P!+`qlv<_k+4GTi(xX+AxSfOfgqHMA26vS zNhU{SQa~hn8G#@WO$<>z>eiZiPv>iO+je$8&wQ`kR;)78svhHH#+RplH@G9xgoYEtXDfh#6+ARuQl&n-@z z(Ny|VN9yVwXG^QBP+avcih_o&v{-8*f$C~&$pnfxGr?oad*7(+RygMsx)V#;Q&Qg1V3pQ=O?iW51*%z5uo9hd zyDqrdDLbS&>Mz|b2QpY`>9rL-Zm`kRutQ5~zoW)AMuLRM@kK>E(r%8v%@dVojz!#v zV%YH=!K<&OE48+mYP~gAS}8A8HFQ<9w38UoD&V7vXr)DGbuTP_uyl=gZcW^;2d$l1 zH7zwAWlhl1EtU#dp7SMZC)%w6!p^dzk?I#7#YF_~Dgjo(>!|S9;PKB0Io!aBXU_Sb zh%~Pn2;0kCyr|-yDA5p2*h$>zM2FQOeDSr)9?z+)njL@{D%g@T|f zhXASa`&Qfazh|ed(kXnY8fR2c!CJFhowDnR(1aPTHfg_l|*jaV{ zw>O*Iw>x)g>29*vZFSA}Q&C%EmF1|0iV0lFBoF}7&m2UsM{uMSB#6&)^fg~= z0&7A2Db~+Gy3a~nV3wA)2`$%1p^z1oRpyQtS499g3oK89eYnbjk~-NwvM@}6w;(CV z1dIT1Fi1JT$H&h+b?4V>yM%7t=BK?<(?dl1w%YW!Dhf#1DQN0qg&YVHLnC@o%Sy5? zU9gxL9y;EwGRq7_o738G#4Z_z)gugXpLr+p4u9Hzl| zL;0{V9SMe5>`*Ff5C|g}9xASxrgu#bG;zwy&^ZAd3p{I9Anpy__gT9>PFwu{0D?{r z0~t~KWaNKNki8|n>&4PqDp{^V14Nf5iCUmhuu}BQ?~u?rPtzi~10XQ*(ZW%Nk#Na{ z!tksxNICtFk^cZu(iWYJjxb*>!N~Tif-o`02_%pEJ#@qaRso}8z%)Sw5quCv#A7(U zaCyI{OW&ya`*Dcn*F$N`oa7;xO+6Ug#7_ymGa zjP#t#>IVRGw+u*fNy?QO4i_7_ZOYjP{J$07CzX&ecq3r{0GJg3HHtO`U5;;?z$cVZ z4#18movU$M*z3i9_|5u@Kv#C^4LwoYZ9`LGH%ql0hW539R8q+$W2d2Zkq9XpF)tp$ z?glZm=RH{mKwK-~&ZO>Eu)TV+I?G8wVY5*>s+iUB5Rz|C0fsJT{L zs->OPhx6nnr4-8C1_m$)+zNw})W(j}VzwX_s|BKokUB*rH3T9^5>j433n6^I3Wj1> z0gR9rYNc`k1KpnskUyqRIUrFBCZtY+!$~%&+U`P_4(^k9G+7z{{Ukx zmxp_};f)R5*(#uud)?jd&MLgqN%`fG{{Z=UkFu9EGLzWM>;F}A0 zB|PcZqkjEm1 zM*PZ0BcKP7L<3`es|`nFA(W8AgV1-|gJWvM4^CKRx5H6eL#QuxFv~2DM@>~*_ZIYw zOM)VXMP|!v3+`nhdF1od>f2c?)UnA?3&A*NSBb$=8YbJhSm!F>tEtbt9E@P}j*6a+ z*-9xX6Kq0BW?20~=!RD=Rxre}s3h%N@yGAdmXNBKTmYmn8-_^Fz~KJ?UVMIfNMTrG zR7D5?Hi}CwqHK^`)mL;j6nNNCBbQ=HEJ+l^0B8yTh1-hydz>pTf>0b5Z2Op&Wh0Tv z$pi6{IOE1T8?sv-6qP4F8F*kv9vBcu$Bvs!?9vC2u;3IR0CU0G2lV!q8O{$G>zArv zSf6Ne1C#D%XW;I}4(7&70i2)CI-3l_$8qX2xyH~(rMM8@MsbcZIrE+eT(pYFSe&cl zE9AF1JmVj}2=ULyP&=)@>k8CdELEagfeSm^>xTF%6$67EIYO-juBAo~^4Wpp6N2k& zyTx*(imCuWn=s81o$pUHK$+lRef#5OU;*WnXLmhBvfPFyMn?lu-4&5;iAEfi+ggwr zbuPpZOUimf0vH{L9IJLC-+DY6IFU6(VG5*$SZzB&<|pj3102I2jrF5S?kLZ1%fk z)E5|}ma6YfJryM+0hGv+Q{rl=YBCZismzMb(m2T@0hM2R zERTjyJi4StiWtcH=}A*H&G$^cC__(F$ut58OLbTV!l{l_)1NnI&cn zz_uI`r+!s%`=`4BY_-{6Poyg5{T-ZE4P0N637nrRzi}ys)A56Z9D_QL6-h2g|bP{vmTfH^8K zH~<26fC_+d$H5&lnt;a`QO61ZRq^Kl56{o`^Vd++1kbxWauoMv#%r*_IFb^D@3=_EI07x7WkWN26eM*4Mo$MQHZ5v6z0~ug_zb9@v{GS7$@A`g* z@ZjU1`q2CP;9=EdjU^kOfC0+}0kg){$nr_}@xeYgHDp$E8>?YhDUc}(l0i7mKcQf8 z@$!0TH9`}L!;Qf~V3_1FMchF-BP=pA(imlwA9#;oC-*-fXXBOs078CnG6aFjs0C3D z(c>;b(Fs~d`C|H+dBC7@6XQ*R!?!*rBnqg&$Q>p2*@gM zFh+R(-5ME`D-fVEmtdJ+c|PI^=l03`e}0jf2qi!VaXc^_XCI^kh4aT42f!V547uC#ID(W9B;6->vlCwyVP7+||g?qN^xS0)kYPRs;dN z9(X4J<2d~F@e5-N1~>rZWZ-$oI2k^Eanp2V95dvFk+&je+7NOAk0f#b05QS&IqU58 z46)^1mkoinM(m7*Q=E=?&qnqEH^$Ys1L`*4;eBvn)ud7a;~4j|1_zYnFBm=;(B;=A#PZ-8Y@_6y%pfTTr-iJZdk@|DV_QF?Uc%jsE{{S2R0G;sql}tyt1%1jl z4DBdR2w*e%N6&-TUvity@=D+$a(KZW@(&&c21Y>gI%xIWl?n@cfN}u91CmZi&m$P{ zN6vH6>z7a)0fEa9MmG4$=gH@V{{UQL9VjDkIohw-j-sojZ(MaJ4fSot!~G$4% z!`xLyM)aL_k-#|PAPfxW9tl1%`;Q%UB=MmLz#X|D0C9|DjZ;~ezRizI){ z-VQ(&&Tii{-2JHO16qwH=pGxAb2X=Wm|DP zaz=Q`9!DAKHY$;JGv#*<26$Xxd$Z0n;DOHsfzqUwHrfdUHb5bX$s;5a&$s|jjxn6{ znn>r`z&rl{&g1GZUH<<7Tu9cbn0kPs@sOt^kTZZ7a5J2eNbnEs*U!Ch6`TCZcP}H1 z;OFuegOQMaJoLd7p}_(`5GmV|Fg)NB{lBru=NRj^td1z8l5$o!ppsXWq)5^*8F)MK zg(G$jKs!!<9U&BJoEVe|z}TRW@+oB)$RrOZcNhd@?)H$p@y}F)+^M^t+<0JuRjttd zsH<9_n9Ih^gdo%8eq+>M(ESfzuV=S`Osa)@VN8R?HSCm z@No8gk$!5yBZufd&eV}r12I2`l z9~{b(`k$;G2yCA}=J0X*0q}o4M;+T}ExRCKU>3+61sLa(z#r6fsyW$WW&Z#=NK*&S zK0q1C+H$0hIOES(aTX*3tz(yZ$B&G8;E#eqBOicI<34&;)jTU8*`~(_5-8@m!}jO8Sd+95%WMZW6~N zQ7uDFQ4BxLSOjggSwSSLo7Dpb}^TN#Frw{Dv)ctVY^g;FIp* zxBzfQ0nd(k&pjGyqih`E2H;5^HjMmoax!=v0g?xvsv9S9^q!%e;GwZ2$$dW4n0C>ql<91jaWMp6hIu(_Ls|Fle zkVTF~iyL7GBalbOY)w5yV4HS>@WB3~B>w<@I!ST7(_1L2u2qsORP->tO+??k-N2b>%ZncA>N1WE`TmIX;CE&6al&j4V7&z`HU>QO`7y!b2d9ByECSfsc|g&`3~N>;NR4_8gyom&&jKX1nc+(i@C2 zM-4<1q|r?jQ$r%<*7sVa=5kQLUcN}|Q`|tZ=RSiULjrxRufT}?tgOQSd z85kcvNFI9XI=MYpZHlNis{zRNV}JQzf!R*E9@c#0H=098mG zRe4ihmSBk;w2st^VO05gn2Yqf$aL5NH$RwSRaVki0!vU(H$2cF0C=q+9(8Tdo9_2D zG+oZncPPVs#chLC>B+VX$YWUP?v!PYLp(9cvoTdF$`7z99WU;mc{EpJ^sIWTTvWK0 zbdhXYeg}{Eo%*UBtO7^N$3|odCaQ6;GL%D*apnhhez&bxyZyB34I@z0dS3TcUunD7 zT_vWdxEUapn9n3MUXxR!?^y(EP|CqpHUk8-Be$KC?+?|r(rtIIbrp4^NvUdjZ9{n# zHE}-8#Vz`NiOBn zN`zt@&i8w04GotxghB@jtxKGU#^bm-}M!$f$jQg zdgW`C&Z?#8G-i;rKoKHI>gwi7W}cpvS8OWpS65My8oNF^zasi*`ZevEMNh9g$$Rc5 zs->l>`>i>lsYJ0)bNhB^=_31DYUu*2@M>WvXr+ukMYvw!ceVx9$D@^=^SG zwWBqatA?GcmQ{wDg0ECfG?i%HnPXcit5UTR6(tz~T2S~pW!LduDH>-p(>fQDb!_W2 zu2$m9WaC9q5^h$BbwqY;F{ukP=Nd!hWnH3ycvK<~6aY2LGZSn;qqS-(0cJbbx|Z#4 z?pBo1`ZKb>PMY^m_j9+j_R75>uIzS!rlh8VfW-Av-P(8-d!k5R*891qSyoqP^?f1f zm>+n)uYRO-06nnoc9O7J`+;eSBXrcRCz|JRhNb`@sAy^HUeNVz2`bgGLA|6<;e)AT zcTD28LQ(x0;k;M$oYZ;^|Q6!QWRGqFPk)z7~n*J*< ziA1u=;fbG$a|xDdL>YXxOhXX$m5xPsGop}+b)@AL1Ywa#56Z4tiY{fKbk-FYT#`$z zw17(uBSAJura;8m3`OUwZJ%2AYg}8c7V0{yzNgkVHI9l5$XcSJszb<geYv!==AUnijvd+B(7YXIb|bsq9+zpGjDBr5x0vqUCL?w^q{E6lph@D@A1V zX-yKx>O5~O#I7UVwmzElRGOAs_kDGQHP-IvYK?iUTI(9rn4yZ>Pb7A_OI1WXqeVtU z%O(~!^&*W4cr{U3H~we~G`WV~vA=IZN)m^59a(A6B_ZsIRPwy#Zp*kSy+Z-xA#&pCFRG&dbtueBu=MWUWq5>sWjnq-F8OI~Fx zuGHZkwym5wl(cv#Une=~{{W<$C6~JOT4K?z^)GMrokfW2Ejg>KGshfG#e_E)t`^9j zeN7;|6sV|(GI}%&Q$Pd8u~W58J$s`hYRw<0?~nnOMT&E#R7P)6 zjhRa{ZozcChEiutOG!euTcK4d&5qR?@qbx?xv#cr_}8&w#js= z3r(cE!);R9D_V$vj*%|a5V)tcTxJ7o^%96coR3;4!xlOw>D=87VYk#>E;^FXVWrG* z$4hgesjIk8w=q*&;)+>brdoyytLdu+-WjkDRS$W!zia9AEnbn=wD#Rv`noD=OD>WW zNn2f0S8$Jgs^tT~TB_Xa8aZLAM}^EPoG9RbJZ=2D-KA-9g=Jg_BbEQq@Op(sucxylGzA&nT-8 zQql^FJMN{BaV1bihH5$$5r`rvBv8eH(oj^&?^Eln64KSdEiFwWBE2P5BdCr_IUr(V zFijaTI!L8LjODj;OlXZoUo5qHPg1F-)w*&hW3P?dbXPlR0cdZQ#~2e)R3V93$Obpc zun&%{I%&e}MN;HvaojWG{rLGLar+GPN*e260HB~!g(p^^N#6M^Nha>?rNiis|yaWm@`;J@jd<>;fybYW+R;dhJy~EiJ*4qHfx2cZy1id1(mP2A8ZYvPyWO z4@jFxW3+GEG_%vx#ZOyDSx;X{Sqya)b(B-bQA1Y@si*!iQp^NS#k*TNJ>=Jm4b1r{b9cCImN(oukkhWsyQ5Y;LD1U` zm1@8n4XXN)wF(>>v9im>01X@7$=~}9ckkP-+?tk-^Fvi_xza&#p{<3Yxl&Jq6;xT~ zIb&c$9fX8%GKbuxFa%aQDlKiJb&X$d8r@r}J94(fzG+=^RZ+6G!AkP1Qt11};swR% zUHvOvL}+CDG*d7<6tLlCW-P272qg$%wnZdtZZHUB!+!bdMF4g5z&nBsp-BM-NF;0? z;&7l2dGd3U(+Se0XcceiH$eXYs8QICHlRTvf!cyBgTWuD>JP{2I$`D)LR2Jqeg7uT!Xm-4WtG<5sq`g!EF5UGt(#yyawCJ_NxPs zK?F8IAF~tVoN_vMiV3hxkB8xtEHGtt>`J*%nBnkP!03%&v=q3xWHdyhiW-r253{C)Cv^Y`Y!a z?PcCe-nF*Dsi)Gl)~Z{Sb{Ot8Q$qU3$r+bvI6j+wMSVx< zPp2I)lQY4oJF}>jEj_pG{S%3HhKB z`&It{xgF1`{yX2^?$oZK*VoFBlGIrss$`y*NZaZah=Q7dd6p`FO=OvjX9)yA3VgVo z+QPPwfB+fT6(oW~dIFLSf{m){P+N6sV5`Wo$9f7ybpEU2h#-PEEm?Z)^l9~n^%+G= zPxU$V0cz2jdUT3v&fMr4Q1tZjdU$B6qN8JPmZ~=^>Uz^opu26z!8^<8bLnG1eJ<$h zhM4XBO?ASy^*j|<`~7qj(Oj-I5XI@bi6K>*Dn|e(+U_x__Z26t9}OaB4T94j<}l~6b#s1vEc zECC=ko8GZ1#(?S?i3gHTYUxT%b==YS!4&jc7Bk8+0hKIH)&LLGS0o-u86X4wx_6Eg z!n^Y10LOBJh46Nta}nfV9G@JLIzAY|8DY3N000SZ)q}=Aq2u6m`yCu51ME`3WMwkM zfsx7Nd|+dask7Z)+tB!)pAWNmmkp57hQl(*S0IC)N0Z=SjF3Ezo~h_Ti=J3>?f|w2 z7{TOzc^sUN*f`U|stDQSfHw{};{!Z#pZmv4R-Lk2Xi|KVeDj}-{&UnN&rQF4C=MDV5xU%*sJrd;-7?ya9oOoa4_=vPQ~PRB}S( z;~=*=0Pr~jj(l^`qM3-vARKrYBlhP%Khvh`BCP#>?Ec;M!s$0v$KO9ZMJJ&?h$x5J zNjchZK?9Ol;1h$-$o%wysU;t-F^~C)LNVtcmc~D!&+VS2(^G?#U{vv+m0_HYIP>}Q z{SQfIrY#vzcYrVui~>K@{{W^&e?2@u7vJGu@xST58;ED52LOigxs%{3;} zY!RQ-M+!~}@H5C6$2dIxdXZbGzJB=WgAqFDQN1{kKqXi^1^k79 z$K(5TGM<;X7kAgM(EFSr+vZ2>L%-i_Lh9)vmvD7*#B=GXE=ce)I2gz8`*YJ3WJnj- zfGA){00D!L4?ama9B07Kj;3`GxMA-xk~tgkpE%M0bKt8ZJ_h=bMiW6smnqK>Thu8 z&ke?L`vd*6j;tXgVc+5IK0F`O5U{a`)l5k+1UM&+%2)t#xMK$&RB$_henO3XN$J7oYQ%jk{41|b`tkuEw%BfRNnm_r@y0NJZypc+-7?g$NmxVy z$Yo*w0MC>wz&IX2JdAV5=i?`ix@j4?eC}g| zv;(^tIUz=K;1i4-4hA|wR8c^aBhF7b;~a7LIR5=^rz4+lm2L2?tKSrx@}HIc_u~oK z(B*cJ`CWg&gQ9Bu@TbJKL}**U-~<0RzZuHbnbh68Rh$B+pfOgI;aam4cn03AT$ zzaEp9U7+k&O{W9Guv~^G7!86vWZ)ChCy?ML3=VlG^zFd|8OYtpAPs4gkgg80orFjQRD76<|-au-rUzkM6L-^s!I&} zH~1(Rj!OPAcAq^rRY(TrKtLgPfP9iS9G?fs$r%UZj*6+6qqZYuCATrp1dM=59CPD< z2LN(^s9*pjW1ku0A3aE`!Rui1INJ8Vr?(>O1{2E2Lov#zWeS5I zsl31K@VFRX1-uN@9pdihp6srUms#oxTeW=vxzO3#D@7mN7$vS}VKnl)EO4NTDT)F| zsN-m0$0E+Cl^F}Z^-`mRI19A2<3sPeE^_r--vFs0D(> z6k%bdgflr+h9o48ynOnz`pu{AO`_r2ZrM@GOQWZ_MEAWzIB(*bu4+afyQKp@W$vct}M6>)uJE>oD)mm4xnpWvuESB4RZ>lWTsiyQRbq(TQT8@gMD1dsJ zs(LA)fuds|Sy-ZgM^?wvx6z)J?V?(BhjJmI)wV8cmh zR2FKmBpFDf&E{?0&aAuxV8uxOW0S(|U~oqoiJ_do!|O}UN8N2Np zU8;3WU)Qdrs_pGH1I0zAthAlOD%7ys;h}pSwj0vKv9iS+)b$>ma72X}YNJSYd0w|a ztR#pG8~_z}V73*G3l$}DR1Lsn1}p&}b*cP6mrSNb@{#H*mCk12^I3HH+GQ=QbTzBX zde}=Fs2f?S;xaVTtj$2n6i!qd&~zxSr*H!c+^Z?;j?9W<$N?B(Q~~-&94Q0ZF`frW z*|U{mGIHC91e|`ZK=O0v`u_lOWSLQp0}w_)^MD6F2ar$BGyS+N=8f<<+&qkd!NETy zj|0f-a*u3K$I=m$vBu6vy@vxhBa^_$`2D&i)*z&zRmYb?IP>zSoDq@%=`+r(tgOKT z@rF3wbM43Ak0;J>JZC*5lB3wLDB4-e7Gf24rqV|~O9O-hJmWavhlOs2jqW>eZ2p^I z$H!oy)DYXq-68nr%Abx;BgyB_o~o<9y_&mFR%nd{W;%;iTFgs)xm=Oyw8oc;bYjxg zPwi`j>k)Gt5IV1@0+yA)UaYBRRVt;kpNxzSN1jGA=ccIMDs`Qpju@JtqR#Ne6jD^| zC8ISiimgyku?l7`*dP){dULB93i@~T9X3d=hQL#FY=#5^vW5X!rP6;XiP)QuQ!NVR;oQ!!&ApUJQkCP;^##_ORv#3=W zDsotsz~B`HzdaixHV6zul^Hl2al;IJ@N=JzlSUQmD4})(byOK7h2%>a%9h{~2~bZN z!0KE#9$r#9)qQE1b_PM*diRk>ytc`vImiPnSx2}5&NwHpO<+ZN2qcyaN3~njV%g8e z?{67C0rGzyRp_hD9RC1Tg70yuf`W|eYxPx4O>II)Pe}??Roy>)`?+<9rzBUGuMyP?xjOddy(GRW0i)R_wN8Yp(;e}<<; zkHwDfB;GlnWQi!d(!*p~3KRl0I~7H+8G$&}@f2cmgN0m_0hsW+u%lK<_5#m9XyCr; zYpVKJyx6pa@VZ#+m3JL!sNhLnqRA|S?da?lkTVpw%9$kwMGEat8wNXF7^>?QnWKKw z+BDsLshKLQbW>GORHo{+tEgYNdE`K%Nb8+7oAy)`Aa<5yDX&AdTN zK~XHBeIl+3qI*aqVF2V2*G(KRtj#$LS~3h<7~?`gWmaG{DGIuYTV~Wr)1ebMxS*&A zq6j<|HL)OF8@i)FP#fDeY1I^$yM<((tnDtPs+zK{&sqNf8&+J*Hya+4wVH7ZNgc>X zEYw#j#YrMDtGg+fLV(IxBZi8;Qugk_V(s5@X=1TSYySYq*>BTE)9IZ->B?t@rjorQ zWTmZ9C}&ylS!4|Uo8)xq*=t0aYqg%Ork;)Onw{<%imH0olqGDHQ#`hcYn4V`XM&!c zRe)kbJcruM#Fv|m$5~2Ei%|CF*R6Ez*3%sHu-nzE;-tF8>a6ipy;+T^W|2uqr-Rd# zL!naKD4`5epD)B&nmp9;C`d?_Y_w2Iq0$110S47e&YBp?Y=aO;@iQ`wP*5?Wl3&u2 zJFTg3O@pyIQHk{Mb&}YzmKCI{0mj< znn?7O1nW@sRPfc?PNrbNCZV8~o{<)zNg^ftpG{K)p&YAL%y|4UPT5AwNcqqZA}q0_ z1j?a-k>zOK6q*-0Z0_8frAoA(iTrpv#6Q^~( z^IQtM7iBbUqefCgQ#5zZ=3gR8x#Qg1Hd`t-7nW&CDPKs&Sx$5fp$(X?4FWOPZD@gIgSV<$w52)frj|!+kWwG~LKvL3LboDYmjki!! zr6m=*w%Ikdf+dC^itSWG$5lN^QzO;XHtA)Mxxr!upG|h7ucd~2eOy&A&dw589bPF6 zc;!m7WECKWINhACbH&__RtX(56J`@Vn}+Dd${@?L)}anrPKe0{yxA1a%Xc7F(jl5h zP-95UF+EsdOUYG5AT7DJ>;6WKmVX?ZFal zl~`mH2Xc_Wf;V~1_eo0^id{ThZUaO`P!%Fc=JusVfF1z0m!Z)jFOT?ibtEq0oK0shVkQ z`esV04c4xW#$jVlzKk)YKq}8M18~U*M$y&|b2&7*{JvRoF=v_;l$c?d2Z~2eDQC<` z=%X(Hji!tSCP|sY#EugeVu=(Lp9hED?zms1$}OTNHknS0x zwcWzKSdJR%sVOB@kVIl>1x#}+iym7gTsr63)g{@gJySn$ZL{d~ppx%zGu6b`R|!KL z5g|1aOm>nLVG)c9J?gqG-Wxg%D~Qy z(yA=7XqAOG8+6 zbI{V(ifVB+(vDRXaMayrLe=j&fK{DdNh#xW_s1G#A2?x}Dr@w1obOfk32ZkVQKD^D zO07F{p+%a!*v;ZClT=XPk|4KLvo$ZMM#fQ=W(PCfNf*>zz?rSH+AUNt$GzK0O988_ zQ@N@cWUUJ;V94>9)zEEGu?`d(O3^KTjlOC*b#rS=MGmi|Y8#PjBx2!kgi4he^;&3R zMt2MZsC)p$TR7{k@m$I;{W~ibOEHqmRGEv+z(2#HkT9;1!Pw6|P=@s(TUt&`h`DUcwaEWFcLq?Di zWZC7xW+(ia7~E;<+eMRKcZ%6%({w_^W@;)(;G?Q)w<9Ky@^pTeuFSr4ak z>naLrG*07kNF6cgo}JZpeOqlyt&XBvt9wZB3FW4ilYFsb)B-7T$8Plnfg>l+QU+zo z^H6ooBc%_OZ3X+*sjFMwAexu}& z{{SQJU=(2v;0at3qbHt!W5CMi_v_d4?9T))?;MWtBQ%hySe&wgS~V{r2yWCDZL4#R zK2R1%3ao%L0IY44160O^k=J3rOdie-6@A#j#{_=Z1P_up1pa@g23A9m26li`C0wY$ zLZciU;F54a&*0%PbXgWKN2t48gTj%yz`?=!QSfn)d>%V;tnArVKd83R?IXwz1`asM z9!SqqVVJHpt;V*Rn^0S8WsCSt=Sx?^O8}2EE!veHeY?pS62w<%3`g?Y3d{y1T3Vs! z()xa9kQ93*u&b}gT4YUxcYwtHqN*5$laaMcGHWIGTQILRbk*n$q>l-Ol7RDuWuVXUPIRuo6rAn-xt5wRGEPk61< z_X%OSLp4=`d9z1;L?!7xVoK87A&)y&JRP&`8C)|SGt{Oknt6lG9H}&WP_EZ9M!=jB ztTKgLJm8SPe2*N@D3t_l8agr&BA8=kWp67Y6(E2(2OdaJakz^5`K7K=$Sbr(z*}wx zGbEOp*%|Ehh^X>Pqtp)c@{|B7ARL3WgAtmtH2GC`Rean)>hhGY;t@&RW4$Xft&J+| zvH@T;gs2jzj#3nrg{rj>e6}K}uoh6zHbB#RkfP2e*L$@kvLCy+&b0K4I>+}64%Bxb zE^(4kNyFd}stM!4J!)f>MkGc;%HE_-lE&%|Rh7m=E0K^#?TqKDYyKsIYSy&togG&N z%8n@v(o)pPT}4w!6py)r65-wgTmJx3Fj+$ryLTNdq`gvU$~L=E+|uEs6c>^=aQ7P{ zlBpaRnUK#;#aTjoriC&*pgmNN#o~8n)PevAaD2$KIddQV$IL@AM#3eq9h5hfTG*5& zl2*zvP&e}l1a7SyfvZZRpmE$^3BxzJf)j|85U7BWwL>?%o`#3*1!&ebiXBx7q$_EUQdUu` z31nJ!Y|>KI41pY#Ew?C6LL9Kj$6Qa0`2KgsvuWYK!@<0y%taKQCc4lp(vpEpi#I?(wEmO7Yn#*ySu0Uf z*Vf1P7dqU<3}Uu&42XyS08qS)*a)OC^W&|vqqHWP&~*Nlo{=gm!(w~IWMS(ikx`WW zz6cc1mSRGw$pJ%W1eT3sr6#JTg5jpp7;ZM%pqVHX7~`6nnnabUV^slLJ4!}&WpSOy zB=qTG)s~yh38+fycwPteYha#WlF`UGVK)7wDll+ckOHXBIO|iuybmMbxw%&~7JT~! zn=hZtX}MOeQI`xzM~v5+0WyHWi|8N<`RwG`*ptg8AQrMi9r{?&PcVQr1{N1>1cR_) zf;Envwq9WS`~7vnt<*5A)b{#$09h;1@lJg(qjb{Cl~DVO7X2q3Ky?18i%sfV%@(b? z#~sq?JvCf1GjmNGbiybos+od_8aR?Xc~u9VLFvZ*d~J7MPhin;$2``1gmu+=rQTTW zlrloBo}6j4MOiFhxsTOG1&-tcIWLfCEiG-MudBG*qSRLbPc=>2`FNH|43nHRlOW7# z1aXEDq7r?_fmr2C3d4?;LF%!2t6Jk)(4H z#=2sJMVc~Ott1MnC5#qFL%ztZL6|i=(t@A>$3v{%)0Qm5%K`zAfsEiCxj4W8oc{o+ z>$ROifE#i#$pr1k&IlRZf^qwB4?bei)<{n0MJt91S-t4oW8(mU#ypJY9Uhe{n8RlT zwZ8bC5;`dGY(_!Rbhf(Ss6$S{Y+30B}m~4Y%440Fj@^#tHoV^iQg;Rrg?QB?v$Al24xnhFFi1 zKYpVEt(8YC+4m{;9A}TuAKM&sajA2YlAu08B={=B8@b3J;EZEG*MkS&(-MTJ&njF1 zGm_ZPk9W@moa5)m^-{HL%nnG{ecMUL!N%S=JYRkAz=C79$9l0f+f!5 zjGXkLYC^_YnYk(tl324Uj{xHt$v+rA2Sy7$@g@~AJ7*)>02oF-z%a#zdGI+TW694( z$xszatClhx6abLJBME>@0DSv%?f@K&gB^~j6?P>4sKZgPph-ByL>bk;m+Cf2oDkd;RUtemde(v*Ux5Sjh{FU}R?i1;`v{`sd@JBsILJR8M^>x`lktO*lY!BusT4Fr47muWqf1< zxE~Ba^PK0;kU{cHaVpTNDH+<|%Thl{JYrNSM>ii~rdt{C~?$s#q9!=$fK6ZnWS37p+ z1o<4c20tH&;z@^AX+d%u0gtu4x!3`~Rv?p+`iNYUlh-lTx-bsvqmbKjzM}p=8RwF4 zar5V<=p8!M_T*o4)4ms2>}&o%&%}K3DHSIS`~`Igxo^;NPdsPm1b{i`9UN+-18jvr zWDKCFBw&tm4(V=drk zoDO^w!Q;K&&`B4)^xLcx&T;|pS05aV zgV#?X_QoB{2Rl??F3>T#MmKVPc?y0`bJT5WA8M*FI~1IM&9sazN%su?!{CF`sOy?d zypYNc(czT&WjW*)DhMBvamnZ^+gZBp&g6VPKQD$9S3~{w+mDy;cz#q7$QE)KY$O7} z1tj=6{-odzPshkn3ZHUAAm#Fm1Ai=@a!AO|0a5tKErI4dD!${>kdi#(-IpBl2`7R+ zLF9Ai9UNtdJBrJ+g=`)(&pdI+ z!SFov$s$>|2-cg~L+K;}K?1PlW=ktpMOgrmxHhDZOKf)(cc4Y# z-hwJiO*FJNdMaB@Jb)|5M;gRx0-yn=a0AN0S7MhWgisDx5>=#|Net|{!sC(&ACD)T z3=Dbk(+gJMF5o~@!8j~OJH{|r?#U_m{PcR%yw4jmA|#Bb1b;CI3VacP&Nh?491cc0 zeJxO+4`F8Paj@fkxg&nKOh~t~xDE*5GM4j(IRtn-^TZ+13hMVia(Zr3bB4L(1|bEu6CfJYtDhAw@USO<)Mn2 zj_>Lv#%Xqt@w9HvnBS){B=w1%df1+z_4Ac`nf zj#32WBX$K!qa2)Nw4cO6eYaX|Ko#8ozF z<36Ny3%;5{42%e48Nu_13V))FB)~0aaP<_`ZXBA5do3csPXQffn&K*ma1KdC@G={5 z+c?em`h^SO88&ML-F!p{%}^mx^6MhMH(`_!d!ATf$dYe2FdYHQom>jtWGX=R(oYqO zYJy!KpgX?}U3RatvuceQEd^D4ml_YTrL3X3M9{AIS>u8^sUSp6?i{Jk^Ne*m)?L8U zm)I*bMxNLDUXtl>p_Y2hMsGB*+ie!~8>5nzs#zmhu2Yl(I%va4n@C~3f}B^~52tB6 zYo#mht=ydvTV$RWhK8F`TjizHRZ_w|&|1tf)-%l$utt$)jWR}f!RtQh4PmWgwN%k* zp5It5v^0p6^%dtyi^WtDvX%87zG!7+mQCf6B*Nsb6kuaEf8q(UIgyplWDE^BdAztw zW~D5|d4X3fNv3U1B_=P;URfZxu$cs!F(gxo0%=W71WQ7K*^`0?q@dTumfQpAMuGZ- z(6%dSqq=I^`=8lTQo&sucKeOqq8p_n&rNfzS>st1tyNJZHBm8dZ0^XRSH)Z1FRH7C zp}R+C?L5~jm6AfVMe42p0A*QMSkp%96&zHLCBVZb)rLaso}kL@RXcjlnhNpT3pAzm ztygd@6W3H2wJn;7DeV*&OI)1Flrz9Yu}>V0>McC*ig!r1Zv?Mfr|CmWcIt;qRBC-8 zO>4R8JDuA0AgQmbrK!GJt!r1dfn=jHNNFT`X#GZ=Vmo)A=N;JS%J_$gc(;+4gE^4O zmPsU^$So#zB#Gk)1ae5)OX~tpF;SH2txKf2CSNa=4c3PUCC8>lE#klIpTttr~JFa|O!hbP>FiDNaKS?o}knh6q)G-5>eDjX(?kz0RWB`o>l;~ zzDHh~cjM|;PWGO_63=v^)Lp>4Qp&ctXsY6@hRYm+T4%UiriI(nt%rk2O^x9H05(Nk zv4+fFN4=)hcO7os<<_>4)}ak`eTur~5=m?I1k3dUeqNDWO&>2@-*7~qpRG*QPA zkaE$W^1Rtbzzrlcv5sHN)(u$P6NSCG`ZqdrN!|6&cY%iMZlv2 zQ96*&Af{GdwT;BvoNg(!fxPIu&)J$gWxAf#uQWxwPf*6RmfLk5WOS7D5XTt;o(dqI zzo!UNOr|WpJ@P!H^vT}sSwW>cU8*Z9VM^-#O-)s$^!>fq87|kmvU)^E8)iwq&ME%l zbpVuSi#Xg5P+rRYJ$A20=^Z^K^F`Tpey6Oq!(V={zf)CAwDq;|ER)*lpfxeTi9)O* z_1c-GGL|ca0G@*@kxvY0@*WeFgF?h)&SoZN^NSW$gfl7=E6Jv23eJldT3ss2ri8N` z$TQ}plFR6hGy_JEEvOa&0{R7oI*H!MCl5EC^jv$feV4TV08f?Xt!@y<9=Gm^r>KtK zr7cda_lahfM}Rd{u(3p_nFE>s0G9z!zM|hfzR-GOwR&u6oheW1(^Rrm-ftC%jd#>H zJ)lcpbEz43kJM?Jo|k{43Q4;SBQtds?aywsziaLHi)N6bj)Io?cYCEqaU{%SC8DGC zn0khmkPxs$a0WNG^9aS4EmTx+Jk?v|ju>X0k`#Ay95Fo1sFCH|?LtbREXOK2IqLiw zc~ptBOp<0=$MVB@Q7O~>xK)5|gUojI$l}hFSmTbgk}0H!6^wtXi@Dm_>c=-qJu0TC zlFZKWRMS#NB~0~eNkKsrm6i4KNVL#U(bIzOS5+~uYg+TNfqeX@sc`wU%bNjX5&iQLQ z2V!8g$D*vd!nWNFJvF}BS8c7l*(7&pu9q1lQ(S0ef*-q@BFPIfW!C_e)-vclDcBp9 ziHo&V(SPDhx?y024uZcQ~Es&7;(2^uLPr>2L}COKcMOw^Ki z+e?&#%!479m_?qI)#95nZA)cx;ecgAtcFP|RDsqw!B%o^#H*4K%KBe1B5Q>K43Tsa zNk)qT7%J`%sb-_3459SpNnP3xsY_R5yRmhWYgU=mH)@M5rYe}~bnHjufypeZ*3|lb*V;=|_IpigdkDANDeacBx~khuV_0psm|p`( z0<`V4s|~$B!Xr63vpyFhkYWoyMVzw}l9Z_O12H9zT161C;4hK^Jd-rSRF5>IQ=cwy zpaJJC9b{0iF<8HQ*JNV#?gp@ZCtwEL6zVJEt*1=W$OGc*QSJM=1Cbb{pbTf8X_+8R zsvVbix}}@8+Ivapn%k8f)n(U$<43FQ`qWM<9^tAjX&c-rC#Z}609w^?kt%5BNS-!} z)P=uZFe+;LvM^5z<+^$tEu(fT{qBJQCY~WMI zTLUfCyHVR%h0!YQH8W6BOIb%+_OeUcDddfz6-^x@vB;}Pf1MhYS7{3<2RZ11s(=}a zo!Py{z%BcHD{=`o0M8_nXjmH$op0}FfO_v+Vtd)n>|1-Or(?X+P*vJ4RPsqdsH{~g z!b@G!8JZ~>HvsQNQoAOloQyI_=`(uKI5xx6L2Ou=0QkTGDc zr`YbSxNPoG!94YydzDLBqyE>pdOQZymehux>8I(S5mD;@N18emh@Lh&O0$IyQTuyWObV_bWr!SLwU! zy-Aj$=~<_vl7~;%BsJ==$0U|?rD|7%s<{fwoDkL4t=3naDc;M!b!_RV>~;(Fip{5` zqN$*BMX5D4qHjv7p0E z5*XQIsDaf@L%`SzD1t|5OJ)_QgI)`Zp?H85ws>D#3(5Zj%%1g4Ur-0}N>^<%7x28WQr)D0aVl`)ke zqbq<=sQ?4htt|Tv-G!TQCAVXhQVU}Tj2r+-{<-TYcDw2)w)eXhiMDDU;OVPwx2n_B z)b|T5#^kisf5t4tT5DjOyF3)N63tFpI4bH9>Huayc8&U)i*-V*u_2x!71me*c-H+%VO%#L{CnOakAc2hk0B`r{ z>XgSimfq{i0t=QQSAcvE10TMB)2g!f+#Lg?E*ASHuGczKO1986J4Homs=QC!{@%fCrjycpgqpI@&?LbNdO$@{B&C9f zZGtx75=RH93NikcJa7rv_27al*pAq6AQ8CwjkrH9N7sYKE=U1U0!)vT`CguLD8spV>Eof(oPf}v)S*>}zDRgb6& zty_|*v7zc_tvfE@U6Ejrz#T<&+bfiiC<`_RYWSW=t;W^019UK>v3;Do{YUq;ezUv5 zr0R6FqJjzf1u@30*QwM|<=Naj86Bj{ z66~z}^5hN2IRlaNf%DT{9XoA}RD}`5u~Wi;2q~gP5yMXsC`5_~lL;J1p%nlMIlz?B zqm8Sx-H&&sNzMXGtQDGBG(cPNt zkzVG&;9me5-??I3AcbXM#SQ}iK_`KLK|EmRoNx!nJaqX4O4~=kApks&10TNw&U2oU z!wv`X!!|(UZ~Kr3`}HNEqf)BOxncp@KqEUqIQY*1=Q;O&{8M%u-op~$`g%11SRA%+ zzTQSS<0SHbJpTaKr^so6Dmf%_Pr&)l?~gyZ{krO&lz@Y21e1n2Abg+L~(2pJ#T z^x%|?%bb60p#K2wIsD*p)1@5*jum|+3|oSrw(sg#9FK$l0A8P#&mcewjOQF58TrT{ zf3F1Ro~yiq`8@CsZu|ZHP9_4j7>TV2D~2P^M+6c30m%O2&QC?PBcibxJA44AC!dUe zso)Rk)b%XM>4LlS4=aN4kj*DwH;8$rJ`%fJ3Ic=b0=Nx~39W%@x_4m{C z``Dw{;=cQG{FER5R|k%ICQ41r2G&!KFgRiP1deg}9CbXJ$`UN7%V3ff4}eAiK75ZO z2j@LAPi>GWlovpmP+3knKOwjtd~grvBc};F5;_2WUmy100T<37@<98@b>URtf`80M zCkK(ne0V&8^4C*Hgn~u}&`7}}em&SZ9(Xwa08hZ0H7uhAkYk^aM~-uXf8VC5=~R+< z3JE>|0Q18B$M*i;j;BdC?0!^!y?#d#6z#vq5DJ*o2?jt5w>TNcAo$3~?mupsCXXzw z!wikU_ygp(=BkNKN`?0@Cp?k^0^FRO;F0G9cmu(S-4Q8cnrWUGAPUM| z;sLw2fp}Cu-}?8HkN+Oa5`RD`Ym@hQK5NoSYH+=g2&cBXyEu(@k}Ax&1yVieUng4Z0;mB?jvlB5-slZ}Vo zKsW@RxS+dQZpkdxYrU@VPLZVZ8)bbhaE1x9=}JW`vV>N_T#^R_eysIuE3Gj`u0^Q; z_M%6AJ@)4eut^%h<7)@61L;H&)O*}+rDIv0T;OeB0R(539)DtS$iegbbiq**#*!3V zha6|zRPdu|^N>DA8BRfeM86zZ*k}`ADVy)z8*->Q5`M_+G zk>LE`XZn9$1n5nVdb{cV_ptZGM{Da>h}5Wd5bwxrsUw~kFbCk00RZD1_&CXo)FQTB zoxMZ>3lE?3FB#52!14#r1A!==bC=vmQMiUV9AuNp$LBxyn8i$(k-$(@jzKs%APz_w z9C!r(0Kbl{FG@b=<)+8bpRg((gdUwn^?&XM(9!P8Qp6!DJ&L3-2LuD<)*jXtm#QEYQ!aZd8&LtFdW&ix}x_DNH8fPsQMN;Y9C4VONX^t) zqaz~a;B6CT30-4z6icMZFU11|P1O0a#Y_k_BtbzkIJ7}}Znd#Kl=w9g-1=34=8o6; z75aCJ>HD*g+^%p4`YXC67FNPgkIYA&nx9KuFb5R?f;j`99>0$t3P?5j&PF z%*Rt3EO*?WrF5=?jfN3UP?cqWcLM{BqaIE<{@j0lo2QUwMcx}PfyUecf(AZ+9CT|+ z0LuVX26CVs-bv&RPahJCd6ErJNgC5ge#GmuY{{--$TJniZ!<(H7#x!kxT z1fP~X^Usr<AapWE@%1d^E1Z~c z!8~J1K_g+I0S-8 zAGeCX;uGD()xF1}?aiX58SGuSrTa>!rkZIXtkl&(WV=k!z7bxPh@b{F+Iha0sPzFF82*d zdat|OswS$rUF)hVt12aCd1a}ssA*+qW6LpVFbTo<#~2)M@t=r(8z&w@HvVpHwMrE3 zAVLjvAW0^b9T+5l?Tv2-%lWez*bNYh7ykg?4ih2o;+GMv$FZGcbP+_&!nuU3r5PaAmUMyv)XKK)Q~QY=)Kf z$it050$Gt-qQ?FqoR&s9VhqnDhh>f>;BGkzx>Q#BPSg!?^uJXfb$+TJUh0MwRTQ-v zhh4=LMCUTyXoFT;AS9`0jtYq>@_-G|#y~1@k7T2`fm)UGzRyyl?qrn|yDI`+ith|a z$R$H(;~yPo?#}j8Ms{yY+iet9>s@xPf{Jl|)nXF$wKesD8m^j(XJG3?PUw`;ut>~? zH#>GR=G>B}(?h{vRY~XE3uDGGILK}XoR2+T@IMWkA(GLVb$s4pX)}43QOvXGW*2_4 zpOmnmXiyk~JD6GK1~67Q(PNAs^rg|RgK|LLtnP7*zL<0-p|tBR^Y;f))8B2UQ0h9n zeW5O}i2neJ(fT9tR`IKlk}- zl1H6aF2qKCh+O+h@rEiuZ2tcM7ze-|CuxwKtmSq%;G7H`5O~4C@eos2m-$4P)dSG!5jnnK*xYFj(qiQt6{by!=bE9WB^Dcat`k}&VC3Sjz^Ao zJt3O1RE>aEJd=lPFhR%&f9AmBK6n`e!!e#o3wms&lWApqs3EiC#!sAspWm)tqz$TO zUr>Ykh8$y@C^!T!=^MGnBR)DXVPjOTeOJ$pM<<+fmH8v~C*vM^CFP7NsbPm8=kd-7 z$Ir+A07p&FRuB~-ixy(13GU<&ym-!V2mb(nq_q-9kgiLxBxOz%E;s>4fu0EC_T!@l z9wwZz2_uD24%Y-J0B`^#jO1hYIPgj7AFlg0;n_yueapCv@JAqz0F%!d>847?Wo}MY z2q55(7(c8KF`R>pf&myKr0VDk2_!7+icl#dXv*&mkO{%yFbB^E9T+g|^(SK?-H;fP z$CADR=j4DedGr1HK~r^t(v??gmRP9mR26p_AIVjurj~Y=NeSU&bwj|%IKd|&46}fo zNI(Rr1%W4njI$As>&eG}cPeH1(q|1hX63#7J6)a%#E5;zKNv#yNLX75@N{1N6LkT^+ko>m5sT zn!{|ZyVprmS#zE$8fj`-V=~E8G>(X@{+`msiO(6&9Chgb0B$?6taXhAqeeq&(fU&H zW3y3FttG{3=&CEy2o@E%Tdh>j3^K}5M3pLp$nWY%%FNC>&i?>T*F909EH`WIri#Nu zPpf2>mOV+RzU88dI|~V(*GRCzBRx&Zrg$Snh!Vv>kfeLMy?^l6QTIZkEmf{+?OICV zSwgfnnkyx~Snd|;NacEpTGyD%0jHX>W@%bUS>8BYF+!nY93Sw;OEZ>%GtfR}T-S&L zK5Hz|h_dD#MdNkMI%-EM=;z` zdu_erv{KhryV1re=TAt^JvFD6HjE^KG7s|^a^Q5$tYq#WqtvijyPE|)w%O!=f{iae=}mO&&> zBQi-ECA$a3vzKI<=8>U}BqB>G8y{5=ixU9NAU360R0dWjVOWCO^qcEZWwU9zdYahl zu29fwzT({Dns}}kN|%zdN(*~b6$YA?95jVMno0{bD?Y}St~*wT?cEgc!&5xbEHyX# zgo`D8TgsaaWlR*zwAe3~bU_-b9Q17k%U|lc`unYdTPB;)b2(czUG~)VcdGay!o6&C z+u0(goz$3~SJ>f!0Bjvv$arR7Bm>B^$)A`ANXa~rszn%3>mHd9{v9O^bLJVOo?qrW zGdh73*_kHUN{CQ~9&)ReB-kxz-m;W5Mxjw{Kne}EweP)dlj%KQ+wD2rS{H&RYtlS4 zv^B{%-UB>^5h{>_!~zMUaK{BlFe^5d?!w(~Q)xXTL7?bqW=N^h?|v;y1xSu5B}!Q( zkVRWZ7X9rR4e6}g9!48+X;tZMZ#rfk>DAIl>O_^a^pbGgri{2UZAX$qc7mgGi8idzx&qBZcD_~V8&p=R zdmTl-&qql#=`C)htP35sC}lNLO(V$d>PhY(M2xJUkrj=>V2~`1b!IK?Ve2#Wmj!ZihF{?Yv;#v9D2#d!V zsG2y^S!4oth)pA|sL5n2v5-#+pqhXohygP2Mr3d`ZrYftk3ekzFb%N>d_#ME+dVDY zo5e-rTS-x=wW1)YrBAY|x>_x0>f3`(&`6b62nY(qJFPn_ovd+*HmvVeu97*fR#|Fw zB(Nb#t;uPw+YL-oHWsG6qlqF=52g|%00asTAoV!D(%-A1j)KWwPiu~TZ~{&g5ar`Du0 zBV%bVw1a_;rxzPFZ`2jy@2Xni{0mE1=37ROrQ0JUqAa{l0_%fW=q?xqultn>OO(@Q~Yda5aDXkughpIRv9 zD%Ee9z+KC*F&mVOW39|)vUxm|-;2%(;t1)elzG`+qY(iJ4J3t_C}5%4h}3m@v6UQC zO*(l{7~0g(wM$c|wZ6(ISs#>DfCj@LX-kz|4Rv9&rFC|_xLiMnT3tO+B{WQ>WU5IK zh9+T^!{reRF&G_Mi}d%cZgsNU@6~j-JDp)O)W)|6-baux1LRwHuY0(|u+ zZ*`w+Yb;v*U^BEHEAys?B>2X7)dVvz)= zHOr=FG~QuJy=?G^#AQN*dzswq(SexAgm{@k%{q;2jHEA>(8Una3VJ|d#euRhn6$;y zQuZrXi%z1atDehW9AEh(Ci+I;4mk&; z4=9WW9!!}iib9V*0Qe-3MnBh~GlP)CjQg0b2Lmb;1A;K4cNob&PhEC0G4@(o3xzw; zU1{R1ps81iqM7nTqob}!TpXt2%6J>NAdUxD77g(93;S}VLVL4OqLB$Zs42)`Rb~JRbTCziruF*CAyj9xz8%n-|1W>w(<7N;y7bRjRiGb zODt<5Z$h%UBZkjPD{mU6(QvQ0S5wo~>5}MSjs}EWt;rged1ZwaeLxsLsy$4V83d3A zOg_6Ly{YV}&tPvnBqy!^v zMBk*-Y(W6+g*Ql6kGOWbh*gbmRyv9a=Tf88skbsqPD26_q!7l4;lEHH=05JG<=0{K z@LK>gX8{xrNIZhT8~`#0Bj>6|RqAG0^o{n0y4!WJRbHb(EhPJ9p;_r(2~xdShKY+Y zEO=1J59v4-tuI4WK_ejJds0E2Q=W3vAfs#f?0AvtmF0xEEM+H1WN{OX$97!Ly zEbinH?IFGh9Q<`k-+QrNUv_Ob+Z$`&FAwTRCDE7Ep`mb(>PV{U(L8XjWcB7EHQF)` z+;uK{#Il|oi1~>Qsar%4M5bKEVos643R}p;kTx1rk*Sn#hC!8^FvKE&6l!;73W&W+ zu^=wn(cJV03N^oQH02z08kW^_qL%HatA#VsAN;*^w6e3MT{_d$448>h!3Zcx-+)h9 zdr@jj*K{>9(%J3*0Bp6ABoubaBoU(k*jZ{e5RW0tJd(f5F~}GJlU>oh4dQ64ZqVKD zQZbhCB`{W|hPB(@PZY7?WHJ7iD5|@G+AuP0Jt3to-MgjJ9l)w+YR>5U*sz`0CPzFas*-c@i*a7LuKU7@0(uC11IjVb6VD&vuy1eP%yNgmR2GdATQ zu0hWSgVh(Oulh30qGNqaPfu{TUS_SXODt5$Q(sf-yZTakq%+eN00cXOs(^XU4@sQx zytjnra!cWUAUrxaW6Wn=b8ctKYluS%7LAxbxx}uXmuCFNBn^z%b28?ml;(2hFwW7! zrXiwWtXbFw0*a=9cThSxt?^*j_Y+OWPAeAVf{m#wq>){wr>+u512r**Cq+A|7=(k=y>=jb$aiSwk4jV1-^q*`0y1ss2zi)4WyMZi@3wcNZz% zI!GzxvsJjvtLe0D{5rTl>1ZMb1&|GlLE{8v+X4XSg%CkXF%0jjR&M%$_f@VWyO`lhlM z0VGs)acPCa7H?366F0}m3cT0T>XCWW6)@PYFKx75lAFhU7TYBpwu6mm;0YeLB*NL9{aP#y?~cPPZE zW|7+cXbTn8c>&msfw|J8?Eyehlau6^zCnw z4&NY-NG#=oAl&&@;2e2iH)F}?jx&IAPwmhx??fySNEsaDsTmEBHn2aOjAO2}NPF+F zu4tOCZaVyW<0nYwy8Z9cy{iwYQiL-q1ab=&K5|A*Gx;QekB+{jVUr8BP#_sn3EW2; zvUABE2RO*!^M*qq&H%{xIUo_lh3m@wxk0fIYw{Xi5mi#E>@&W0>UvO%# z-s|seh3|yWJ^m-B?T4XQNDfI*m;?pjjogkn;Xxh_K1k=IC8`;Z`K0?}A~eZT9F`lO z7@BlD6z50lZYQG*y!v}0~JVR6aHV~$Uc9FzSzP~(1_SKqho zgwT3_j@)Ud^U&fSc_l2jgW0Kfzg19|duo{WxRg(Cq*;gOBZ!HDF3p@GjJ zagWb2)u?@~8kX8sKrBOYPFN|&0E`THBmMdnQf>;r54esnbBrnD=gxTZ`*5Mg-0$=I z{r$HVnh)Q?{{Y)--|LA)RXbFY%Ar_|%yxiBk_mBC^rMfIevI2 zkPa{pK6;KB@=qjeBu1sU z{{WA#{NVs3f#1LHi5k?gj5h_j3Bf){uA=xWnZ^C3iViT%3>_ zgUCG?Oh1~XGB3D1Wp?1J5*s6dk~W>WAb@j?pd9jWk=}6|F*}rycnE+D@%sUsvB&S{ zsM((ZasF+j^Nj5|7~}K!{9ue8k7|>=63jOoXFuj6z`@`VkW>TsKaPwTlM0xZ#@;Zw zRs@m;K;UPQ&N6-vJsh=wqvT*@Wb$9eKo}q|An-vX9xIj{7!qLwWLXw2y)aL|6t)G7li1}AYGACiAa1f1ZXpWmf%RR#{MLhZ@moRuC= zf-~a)5>NF5qXr+KsdbT^L1k}aG2<#!hfSFv^MbAd{Nu)Y4Oq~);~=nK7zMoJj~V#M z>5e&u!bad!k&VL*k2vIf`*XJ(=dYrxbf^#MU7M8S8;Bfd2a(7)@_F&(!HG)M?cIhu zvI}l1NG;AWoDBQ{jQQuDj7ru+E2#jL;BZFZKw?Kfq#WRZ{d$X~TtvEp13!VB;{^Ep zll_SE(WyEZq}=CdI6FY!$2r_aK+oj=09*mlh1A{7C2&>9@rhbsOMlDbVG37{c_b6G zcsa=D9Vv>wMNedaE>0L^5(xPX{jz*xBa9xRX*g8}cH^{TB#=jdLV^&H;|Iq)@=skw zU%7CjXgJ5X5w`#nji>b%`rm9Qe&e?P0KVJ(^u(zrUr>#~$iZdc=L00; z<0A*~eExb^YU6nrvIbLti@2ykfq?8r00f-2NA5=*LZhmUOm5B)XK)3upq$d*@ z?rV%nQno}`V*!zlK_|k1+1x-S8*%*r7T{+YB!z;#zT<96)s-QWY{a&w-L zt9-cIZMNVOKyBZDh8!pkcGzCuFVenPuJ1Ir?R9gnTDz=~X-jSPl94SI!6h|i)gnVB zb6jedacH2JqDF`SP_94++-8GESSe(*$!oIErCl{_ZYt#|G zuux8V;>$rvVxtr^Tm2+?r!r3=mPx0nm8FtbmBxA9w(ZMyddPg*WNVOdo< zu8y3_(Na*=RWvAKGBGA35by`MnSep(1D>mdiV@~bp1&=F{TGo?NhFFrh%b~r&r!+>~Yj@6p&2P)K^phrd*{mD^xISY!gX@ zX$iv&WMk;QplTKimYnUDo4H^04Nb!1StY`{og}8Gma3<0RUU%0%)*)=zL1|0tK^V+ zo@kECK~o^s9pb8+TI(w0d1AFz)XLVIIUJ(YD0Nzif}dqNBE*~=uD6jrP429U0IL8E<;=8eWuc_k-TBpW>MeC& zDnX+=e`t<5sNWs-IWuyNr^>Ls0muvg!MC zWmXGSJjk)7Qw&Cu2#`dfnl>(Xb#cX65}Z2(#tSJRgPfd(=RR@Cz~BsX)ZQE6s|1qf z%xxRWsud<+G`Yc7}Bn%^xw32HcGo6@GJq@UEqK@ro%>!f7OAP0h5t*s42 zl@b`~(WWXg=lqHQ3|PArTmXEMI39ds5B*hl=78Aidrze+ma?L%t|@h8bs^nLAKJEK zwLwsh45TuvRgI=URaPWt0g0#lK?j4umzTtRLI~b?;xWL&St6QAJxv@@v`&qzw)Q

zvZFQrjbP5Ax+PG_`HG5eN!4mdNyTSa*X;Xxf-`t*)N0R%)bys4Y4xNWzkv zaHalDH8pJX!Kvuz;fVvX1!o}!<{Y_f4Nl+{8tTfex%{M{QHth^P4}B#cXLnbe(TvS_Pr^l z^!3VJEo!vX($-PgZk3U2q!X&oBem8UK$@yY4Iq{=z}lc|8&=DGG*m#lByp@;<^W1e zYO&@(a{i-`Ng;{bwBrq)n4p~@0n4Evsc;VCxBwU_B(Tmgk^RX$^x(Bo5~UQX2iyS! zyAhDg@-f`ou($+aJTDz|nQXGdeB$7!a*(S~;o}gtehiC*5=gvUL&!0I5@zKp)O;1fd*5N#G+ih@9 zaIdJ5(jBY44TwS}V6I<7!b_soW~b zPZ%;fLq$lG^s)tTTh?_~-sJT%?M~mOag^>2CUTGp6*9sBGlFWqrKj{ zk=i?amf3rQN-fjcW0InlD5SVUQ*BA!sL(|uvc%UIL~Hi#x}ZdNDD>9ZPj0o_A+_3Q zD6E#4B959HWvU41E%Czu2^eT8#7R7=pckHRQfU}(c^SRkGt$DeI*PK0(#uz;wS|KD zZPZSEX(Cpwq1zA7Da_+h`_-YF|j37w_3)ItJM*{Kwx&3AbYvS?tVx- z9DHZadh)xqFzPPK_ny!6^{k|)k4;>4RaURk7tdZqrO44%C@imsZ9I*+(y9 zvrw}`n@X=QGJ$->QPmhS$c0H$8=(iYCXdRO(Y#Ir#Cg>l8dJ^c8-^d4Fd&Q-sO;AZ ztb|cjH7rYEzrr0Gar^q%7AjN-Il&3cfPkK%K2&twdeSg`lp2PXulNSFptMrQ1^U+x z^{c6&fgLICR5)6Dl|1sqB9M}<>cj^muTq~`}8|mkzk!ql1-LrUT zONIcBLbfnG`NT6y>s=Mz9XWrSN!@GZx7+TOT6(&%shXB_xKYaljL@sQt5eFV{*EMB z97e^Ja06M_MO2WcjSYho1Zvp+VQepvWL;RpO4uv~)mh%Jk-tJf*!+3J<>q^|c8w#e z?r4zQEfdlk>{MlqFrm9Sqq?MWNJ}Irtqnwoq0x2}B&z4DqDH2zw@pbg64BLDG%^rF zB=FQiu}Fn~Q;8vNc8&`l#yYO=iz{i{ovMNer=FtKC9;YNpagQgOhPo8Y#a|wSV|+~ z9y9VKmI&(YmRedZsXa|Cz9=Fx;H;G~!?9jZYcnZurv+H;#!2(iF|`L^LmC3M78>{5 zQ6{~(H+ThuRnQWB`1$NU?-8EV&{9vMbbCB(wVF4H1^T$;$ZEd%EC53HQ$lyxKI=a;}Q_bqd zQj^t9S?Z?cS5uk5D#HUHDJln6a?Gj}BW-0oH~GAi@%x|8P|9uEw-!hs-pp)#Hz(_X zMFH>^^y`TfV5tEZEJWnS8=h3oWY zJ*aMNB~7mPV5+Bz8k%}QW~qXw(|ox?M#eF-=*d2odpS_jH5C@Lu+h{cW$iX?d8jC@ zs$EMH1tikX_Uggdn0I<=&9i46T~zVGQ?@zcrgEe!e1Hkde#(Hm<-~g;vfdnbirp<$-Qi3k50BW~8;raoxMcol& zjyAKo2Cj}Ny*c!u^z&>fQ#Whu+KRq5XEzODQCX=gr+HIo21|uRs$+}{q6om=c;^|( z-Rb&a>}PR4uzNq+eLbe=H0`$Eq^`Q(yOymh6x5V$Z=;b~*F!8Q&al0| zbAZurq<-4m>1|go`}Z1`)$b>JO!|iXJI?OSfh$4C#Z<1W(yQ# zVFy(tCH054u&hUagn?Z z82+w44nMC_`XybA;CqR|BA+|*kR`meiob4wEf#+Yor|LpW&oQH+*c93PL>=ac$;alpr4WwV(% zMpP<4%*C_MjyCxC1N#1Yvr@$nEZH2N((AYY2PAus1oMygz#VqBL}q1p&?wgLM+&2pfXcjl;~*3G`2c_I8?3XOmXa)yz#}SKAF$`+ z91?NHGsjXa!0&yo{#+iP+W5jWXQ;o2Kj-Q5#V1>9AYlU^VaYl9Cje&)oOuh+=boZf zlnocRWA7xkFi8O9fJgM>oM(*r&sSYtvPicQHy|Kn4{1Lfd0)rlIUPmr7S)w~!aheQBLi^SN6vWXKhvMjS`f-qtE&}Yc4cC$I@qcp zj&}VHE4m6h0yrSn z8ph$>omg^Jk;zsEu?N4nfuoMUB8siR3P%FL6l{BT7|8lBx%z^uQa5corKaQ3ea5G? z%UuNY?8i*&OHDQsYsQzWk&gM)ko9)*(o0VJvc8@OvmB@yARbTkIM0utkNX_;8t>0; zZu;X*TkkqrxA=Cy?e$$ws?k-Hi=KnYR4mJGINVjb1WF|$^zYT0(Xuj*20_XHiy)RMHUj>Ua}vIry$wiprk z}?&BRcecWuc2#eCZN3C zp{OZYXs?_G-^D5}6qNB3sIC-{&rsBMibkm|OwzlxOz=9Qdw84=E+Nv0Y zb6zz(@vN7dtxJp<$*X6IosZ~(D1g9Gk2ijZewuZ*rPOx6tWM`@2@a&YUTzm{F=)8b z3fkMk)Cpm#)K>}SWHf0UlBl)?Ngh(ZsYFFw`pH$kK+I(RV>x*p&UcbaHsXKgB$9lC z&Oyc#Eg5Ef%dIq&u`3FA;7|%HbETwm^2oMnnN-n?0QX=3jZKB!h&CC`SqG}90TlZZ zHf`C(T%+1lZW&O(3=Vz7E-}dRNA>=V6<`?UB(J)%m?>5IPd|;>1|A?2`h|) zji8KkfN;akK*`{8NWl4z)J=?Jg6>YlC-rlZql17)1mOO0p0A)MexJVJ)*yBRZcQJT z-`_Y(H0m}->EI_Tu%CVj9FRZ@@y{Ie*)2j7By51G1cUlad;^2~jGs9?c?J^c-~8Q&$Q+V1W}pG6-xp!T31O!Q;<8OaVN9$Hx(1Ng%-IDgk20 zj&bljbI;G?re~>1o=9lRU> zz=p{j1CCT2Wcc&cerJv3D<(-ez)(vcIa9O}aezqU9(q2qra2e+TLP%sa>TkgDt&0N zjIt5#1Q5zud~z78D?%2TR}vXFMh7Hwzy|{gxX1_RK5}sIE`aKO&JdawdSLpw!5cAv zgq_SVLBYxA7#}?U09yuCbEJ0QA6HD4|8jDlethSVi?iWj?9UU4@!C^HsR3M3EZ}|&>kU1kDe3PjD zu708;?>3{g+N{(wTeP;0TKY;9o>i8n=U-Dk+RLQ7M%cu{7^8+TNl4S&#hBs`^sA_J z2956ZlUjE+D!DYinWnm2_R~_Dpx3Ca^(M<4fU=@9*9b~85(5rFPD(*&_131nx|uEWWtSkXWsRzlinW>{r1Cob=&H84kb(L$=Fttrwf$R4{T zn3H6!UXz+tW4VbqYzM(7B$C|n#1oyw@^CpEj+4tb04KehfycLi2_GH@$j^>E93`Hv z5~p&hkxAU7oT=OfGNfc5Jb51@rnjhHS8@yil>ib`0Aqoio<>Q}M*7^T$6P4_eaP7G;E)e1$i_3AFwR#P=cdVP5C&M34cO-)vIcXIK~cv%AMScCN~L87 zdmIqN41tb#A0I!{@IE>)VZnmB1>i_QAdeh!GC{$>AD$1KbcRV)lXDI1gA54+$R&Jo z3Id?FkU>12kSwQm4j+8F+Ps`h-&&bIqj)|6I6*|os<%S6%PW8for~d%BVloFKBOvt5)kJx6G3`K;sL%5Bc z?E_-R8W(3~z*Rtjn6V%Q1d;&A!CzNh!KS)@!ulrHSshe1pJ$QR znV0Ho#nWA-vhN)5*1gsXds9`iw3N}Bl~sa5J-cI9$-&!$*BAU}pPDZY85p9OTR%GG zgrow7FzCfql(MOijQ}wY${wTBOm+Mo1boMy&V)l5kf`TTQU!xVh2+p8$QO1ou(YP0 zv1#irijFNwZPXPOnhG1u#?x`TI#by$70V65lG|=r{TV8sD-}b@BYV_wwMpvOJ=ChL zf^w1Bty8@_&zj4V+%9h-24s#Z8+=TtWOdq&DOFV39IEBIv0=7YDa2Hi)_Y<@M-?Oy zI#Sbmj%n%RfJ)Ms%Sg=1$1cplNFlMnhSbSPsA}shwpwZ`J6$}CH6`Ynk{IeLnM!8S zOIWcP9y602OUBAUE}0-;^pIrRB@9r)(WNRP#*vGVMv90vGZ_hu6Lu~r7Bm1=T=$pG zc6JQgl1Xj}Yi)oE2`6t)Zlsf)?>64%cV3R)1w9JfY1+0@HAJ*iSg7o7&dSkJKdTw6 zS6E9(QDi1W$T?t4Hcr}V7;A3!E9Re`^*Xcy2Vu#^wZ(3l=RWGrX0&A)ty60 zHo+knDEQiUTeY)JTUKHqrlO))qokmLilaVNAf=^3L6UlwK2b{$U8Kl370!wmT5UnA zs&za=_`UkBj=AZX%dI7(z*d@oNB;n%h87;15~KpGgC`_q&){%NnuE`qF__FvOPGd?y3R{1g@iI zTUkLttn_uFj(BP9@co?})L=mXg3Tl(q^SgGh>L(Fgg890EJ+}+i|W4UP+8j7qBK%g z-0oA-i%luDQ%f~9x{{qf*}l<~2xY2a9Ea8n>l=w3*!xIDV}#sm?iM*Js#e{nE>$Z8 zG_(3bu`6~|C)}z5zMdm1#)wGE?ovk`OW7l~-EA*zrKYB*j-IkPS_mSG(nIO8l#(R` zNbR~d1ge!T%*C6nhK@<%SAo+m?d8KP-dC9;EN&7-j0QzQ8_Yo=4M1uLKvF7eNZOn< zfLp3+(xXy>rHKTa6iSM+YQejM+idk3t*!cQ@uusv{*2Nu6~!oSGQ8EAt5L|JN35!- zRaI&-cFi;ZIA!*3$y{9zRqP@qLXalJjU(9{Q3X{IMHo;7ajK{a1{4oGlhaF7O(SKb zV#)yIpK6nk27C;YoN|6aInTpXBY4L??1ubc`P|1C&x~?1db5_wrdTx-B#uU@Sy5b~ z*orzuRT0F8N+TrDjiOp_r6*?&Ug4bx7XvRB1&sMVUS z>8iCXtnl05hG8`xpP^i+r=t#=e&m*8Ea*vR=W)+0moV<A&Ut%dqKNiq2DZ{Xl=PsxMTtF50B^%oRhz zWXv)=vP!|3nGhw|00Bc}P!R{E6;xIdS(;FQs;G<*s-S=YH(QcP?nxz%>`C7WT4o%R zhWQM5Y;o-)@s4s103`4;)fum^=Um?DJ5{D8s9#n=HnzHm{WvLYu`){3F}6RROU9(W zcD$ulFh@OGwYBj>Pgh-3>rHOA#Pu~(%YcgvYFW0sVN8xPsJnq;4}b~kqwP&Vy#D~j z`ss{OOR8@2QPZqpeMl{oSTIBYP$Tu36`yItZYoL7RQybw#FNcpuF<{X3x zbE>c)pqfU9F3m)gmGqECp*B0F)^!KdEJ}cIzBdwi1e3uy#(BX9f_dnpP|O)v0HB?_yp=fooSt#}j1P{r zQ4%y*<5fgO2#BC6s;H$^17H9E05$_`RAwwoF)YkUB%36i$t3PcIO!v#rBwS`XrSJt zKcxh5mQ3XG6c7l`;-oPdX9mvyRg|L0C0R=*E5>%?+8WK)8-@2=8zo$ zGFd4WLd?U0^N3YcQEFjeV*XGxab`1w(2h2SB6lWfhL8vU02s>>PQz?y5mD)x3ImL7 zbSiebJ`2YpsRV)mEQI6zIi&UHY+{k?HIHwkmcyy&DaCBG6iybB;*qNwwu&s5Ned`t zkC>k_f^&h@i+irGqP5*CXcC@Esv0S3k}8%yo5v14W(on`>ll5chCFASbk$$1t=4N@ z4bG#~s*>pxGumx%E^6+NDyu9AtCRNOvLbdxU3 z#S(11qM2q#0)km2qLA9cn6j;yiPhlWTlsAt=2-^BtcZ3fLFDWxn-oYLyVg=`9X(HW zlha!285V-*6;TW|EH*HjKX0;U4Yzhi*LBVg4N2Q7W2d{Juk0J%I3$Kzq((uHZDLHT zA~^>tvf*$y232J^$?895xL-SKt79U9v7{KLEZa?sA#S)YP`@?fl(zKtCo6I4I3c@JPN=ElaFpBTsGYD&Ej5g@HsPO zlRx2}D7kFsn5`V1Oz=q%%`|QUtXYIGNJ&rwlBBMajX{>sbITPRzGo_Ahe-^j(b2rM zVPLX0wV}~$SR)#JCkY~}63evXAYhS#2>{?9$2jEl8dQ|KdxMMx8C((w7$ooxJcEzx z)DkUqrK^@1DeqK~G=P}}OSC38Y-9|h5&#DrZUZHPo=e0xi(IA?71rM?$RzaAI*(FD zAd!}gV1jX!ECxmogMr#doyyBbJj4zSQCU&Bs^N*f`hn168K9MaG;XJR1y4dpU@MNj z&rCkFs)q&e%st97KpEoz5r9vEeaFX)4vI5|Afs&uBiz2_9(fzGMtA^nc_)LCi!wev zfs$4vHWbT}aI6<4glq$3fN}-~Pl5!>z`A>pNXtgcB8;(KSqT8{-~tEEaC(@?FW7T@ z*HSud@&5Q|Pp`;;ef!_TZ+@iT?9}>>g{{*_(aIfOhNN#_vaF1$g0d`rlCBrj$je8S zY~W%MrZs&%;j47z-J)y76tYoNK_GDr$~6TAMJqA)`ha3Y1TwxxNnzCZO|`=#=Z(nY zfyNHvSaLxa#~_iP1EveTp3QitXzJ)7Ns>b?J!KlD9c?tF$;?#|Y-6~P3dme=F~)P9 znu=dJb6G}+NubA=hE+NUW9ykfeH) z(6M0H3o`dj7z~^8!}BrZmNxzVJ7S{#89Y41hB?BBJrwk9lTn|wGCLk z(bn7M8hUnMDpFP53ddNALpeg*jIF(7Xn-KAoK`vt*KNI5O;fJ!6VYk=R4=G0Emae; z!B}UI?_~wa%#Ncmq84$5B~*jg8Jx~#qwzRX!}7m`@hNiB<)ub-%14o8ktK&QnRtnX zp)r}tfZ%C*&1u?#XcS=%uuo0eHtL?C&sFlEs3#2TDE=m6|vZCj1;Cau*s-sjd+ z(%xp`)8>tZNHY9PSJ_K-iCO#&+cvsO~kFNm*skU9M8m)d!}#Y6#;d zvgTNoWR1pH`kRV^p-EB@@CfQR+%Du)>l(N;)|7$m+IAmKj-HAXNY<#VxJsGAZVFwB zow>pQtMS!~qq{d~w$Vjhs3ex6?;@=6ifXe@9lgfc5bssYk|@J5+Azd&FnY;JJVV6u zS-3nWFf(%%5odphCRT}-HUK_bA~m|f0}xg}DmdhD31So%#im@oUMOEQh9tdEWDtf0 zg%K><0`56-%v2sMio!nE_L?{qwI;HGzU-i=w_56zPcjuNQCS;g<+o)-n|V`^+<|9z z61kz$*I;3aT1KX5DqxfijR@GW8h#m8YGSD@3J4oPRlpz`-oELlTB5qlx~p1LRMSl8 z)YMe*+(Wcya)_O!QtO-rF4#~(ZF%2H3Q)y8Bg15YqF8 zCxh?Jk5NbUo zd9hk(Z*kwvrVE?~K`kp(5@8@VXH>u`ysCl$_h4hJXg?X@z9$B9Y_4O(Ba0-vX23~u zvBt{^O9M?&Duyaifo&+}KQmsZ#mPLJ##y0R6E4j$uP1bsnwf*DTU}UX+fxl%Xz3cB z+U07Buk@JCK$XgBUKf?-^U2fN^n#16Ch)AU`!nroegj+TaM z7!~Vja`eY^wpUpvmQlXNja!Gc1m)3qvC*((yH!opi?}cc^I$8X=YZ3Xj9PJhBQ_0O$k&Tsnj5 z4h<@hSzCfh6(6;>mRoJ&p8al?+j^xUDjHe}i6b>khth~cu(D3yae*NOfsM*I&r%H) zrms4F;a6QpH4)U*^zl_a1?DK{NvLXB3N;;Dw)%P0mJ-Q;$lUSZcW$)MYr2Yx*kqd5 zYqJ>b_DA%JS4%&rWqXZALlPQcxT{D=+!aS1Ce&Jz?WJlh^53aM_0%F*sO#X{8eVPA zr4lNV4r7uDlrapMAf9uAT@+B|mJI%70Lx{LoUVH;f+FM0Ws@;6h-z6;h&fpvAsopW zT^i<90cViB5tHV~Kbr)nR-a0hMAflU2lG@uq-F-`3C4*sk~mO&;dbQ)Km!MY89+H8 z9l+zqU2kFz zz`-9qc9k27;F7@ZIa~$7$jKv9M=5w+FaB$7`AAzVtW2D$dx;bFr%iNNd6bI^gg-tS{yE;qnX^z1&peqDdI9e04iS0}?Z z3E&fh&Uoj?1o8OCM*7^TIKmUbJpTYej03kIa50hr9OI^MS%y&H9E^}~&w-C~VQ3bK-#}es=%%Gt;hU?C`Ehz`*qus zb@IcSvoL4h#|*hRCkunXz~{lo13YurNbS9dRt=m5INOCDbIH$-f=)QV=^IEwlfwhI zX&D#?f(OAQoQ!jk{d)Txqbdn1c{w=91LqjWoD30z{=G;f76tFkox0b(dr{_w!wmcT z`r&g=@E8`{IRr2x1Z~_uJF}ih!1?RyvzBq6(h0#}GIN1}w>dZja(KZc^noN+WsD3G zTWMSY=OZ9sZpL$fGJJ8-pK<`e=Owb>@IBce{{WjMi2+9#>B2xolY7^F=zLDsMDexl zwhF4-eY$k^`1Jnxa59-nvHt)f?H?XE2l|g0@_I0{exMjA+NYC+VVvjpIo;1ba0$ri zuhsk=q49t+F^>nHM~^@Ics(W{@cBMie^5pUIo*&*=Q#wAj-DT}y~jT)zQ3Ea;0{U0Keh?!Lv#e~ zL)dUm)zDDu)b+v@1lj)g({JAX&Kw0>=Oco1xBgYf!3XtVah%|udFfh9{$Y^#B!S2$ z=g*(p_dPMJ`M_X<0Qn#QLHXo-ap3;|)1?U_l^NfX4*U=RO~he%;Gg-io_)R#PYyS~ zzAyE<=iac=pLc&g2fyiuknt7Cell1PNezGrQIF3UBN)$-j<^#EP7s_A`M=6DoRUTq zXXS|*`5iQ*n`Bhlap6Yr%ZStg`c#5W21!2RPdxOa)m1}<+Ce03{qxB_dBGfVNwlOHTU(~{&2oJsMwEl5-<_6Fx>D)Fno-h@y>YZR%%H0k5Gor6}I^K zF6V0C9Gs9&Jd@>^uxt$O%LBbYF5C}j1A+090OTLvr2=4#;J6_`!jc>UI3$CRaDP4z zKRmc^_x}JmO6(8c{QkIe-U1`X`io@b?e<_0K|Fp}gU)gCI_?=lMeI-SHE9u>KhapZDI0|Yi1gCI@Jxm=b(?$`(*9x?`T&PN>n=cSc>NVXPTr23DR!SX!h0$ZH? zpVOW?Fk$dX>4n zShog7+H=6;AY_069C+iO*ujUjtdk@HN9WvmKLm5mG3TWVIcFZO*2Xe9$>8_|@&*Va z^Zj$wa7@sn%Q|{7slb+C(V%aSdw`_lKi8f-^pdYpTBszbhT(Fz(*3PGbyFE?;YNxH z2Js<{k32LPXu?S%oD&;^fR2|Wi-m+6TW>g8~y zvfgWLG-+K~ZMW3iDe2}VU<*nSoXo-FA~j!8o7^%sfN`8%H^^xHgChCD4FQso5+VY(-}%6a~~{BBS

?Ddw%qbyfA>@>cd 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 literal 0 HcwPel00001 diff --git a/data/themes/wallpapers/Dark_Waters.jpg b/data/themes/wallpapers/Dark_Waters.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfe75d2119f6977e1d109320fbf02945b135734d GIT binary patch literal 582897 zcwX$cbySpJ^zb`0A|W8%t#nHxqBMd?&d?z-bTiX-*-N4US9hDw*dHgd7p^!@`>>Y((?(6A-@7o006q6 z|HT{)0AL{*otK}VFB?={>T0oqyFccjrIql|5LASS2o7qdRC+!^ABIFKN$NDzV`>? z{Kpv>|HPv^2>45W=`)ZQ2lB%CU-i!aN{8Zsv{pur(Yw1_B>gI%`jY=^6iu zhyIs6(|>(H&-dFN^>;b^f3rD~1^%!R{G%?RzxkJq@IN^c0O)1@(qr@?_0Rt12_(z@ zZT|?#&;Mp*E%Yz`;=5BM%l)C3|2s}aLIAzOUwV{Xq+aol@|FJZef94g2GDE#%MA3d z|Ilmx!CHTf(ciw>zjY|T1|hx9U;5uRx_{)W_Xh)i*`Q=2+p~)o@L!wr{xLUr{~7DZ zUtY97_^*Ea-Ojw2|EzJ?HoRDW_+tN2=Dk1kg#YysFVVk@%1iu*{^8&D{75GGFJ@lS zKbY(fCjWye{-}%c4?Wc%O#KJb{E-XoA9}h!nEnrD_`{y@4`%wqhWU>eSpLwn{>Q)n z3-O8o0Q^FHd`RX6{C^1=**oO#O8_o&A>axPxwhcM{|}oCl&1hsz#$6CedJu!LJsD> zyIGdIdBEKw#oZdm-FD*L{`B3+?H#=H?j{<5rU}4i{+|{7U->^F&n%p6t?mD({%-1S z7Vz%Z&H@$rMMZv*f`)7M>jY0V>{{)PD zeWPPwBE!MCkKE*-prN6nqhVm6BbO-@zhAF*bV3Xw20j@~;#VeEj7|^v17k9=nVyxk zk!TDbG7FeG2i?OVB_pSxWMO4{^q5^xNcf3}sF>{Y7jp6nib}6FwX}6~^?+vP7H=%A ztZiIe-P}Dqy}X0py$|^i8WtWK_bEOh@pDr0*R1TE+`RmP!t#pBs_L5By87?!9i3g> zJ-vM+qhsR}lT*_(%PXsE>l>R}+dD_cC#PrU7x2p~620lz8nO9gQPQ;A-f!Gh9#blPX-D48aI3zK39>yVM7F=dI`jyh}jQ;l$ z3i|(*(Z31(o6p@002d9p>=L380;B=(aw=m2m5HXNZ#^psk9-J0!V@bC*kZ& zFa*PPc9uY?45M0HdyI6Rmz}zIouRr4EuW+YBcDcIDS2j;rpS9?G!L`F4QIU!c>gJ1 zAjlCIh4jc%37@N}Y}?io3rWe*<-#(7fz*M)!!~oIY2#HGX+ApQ`M|)JNQX|_wl^Z= zMc;sCRkkvg!4b#@HW?a0KkV!KY4vKw`8JSndIG>IIV!@$GhLRdsfDKQ(`XEUWBiLEbvMbLZ0B>l9$SQPg@WA6vIu&0UbbF^U06 zRjCT3D!r1mL;HNr6*}vq;u2owU>)HI_MRE@py41>S7K52Q9$W)D z7iP(eQ=g3~O-y|5CaJTt9u4Btwu53(Ys0Eal{&{bK9xFH{#>bs?H$dOfM&e4*GTJj zIIuK_pXMNKbL`rzQ?z=xyuG#ONIx&(Y`Ce8De(feJ4iiYzz0C5k!s`0L6MRG8*q=M zj5Q=Hc`9hAnnUTnw9Q1wC|Zv3PC|xdyCn?xbNY0p(xhSw0QKY&UDAG8@HH?AIhwR9 zwV$JO+Q?c$#*0YuO2DbeuH zegw``_(v~(?=7av^CG9|)f8>~vXO$6D?PI+Ac!_aN1i54Ua7L$zpF0Q zELRX>XX{t!WD-15|GvD4!(tE<96wn$PpKnn@vYwsGZ#c)voq08Q|MZ;nOP#LBfhGz zjuBOs7hq{m!%+&7Hq*Gzz7p?JFIXHv=LoW-);`NAaZ0u&y%8x1nV1z>X>o}+%v(Xc zOGrRgKn2!6eb}$;FORhY&aSRTsn_N%Wa&@_tDKQEIarSdt5sLGQmoW0RiCevyM?PW zR#$f0Am?fqKRd|B{)K%TIK@f-xL6~%2L=-k1WlZ$isa4CS^~6hs!Fg(26rj*2|+Wa zHFhwu0HuVPS(+mEg-K>7{gSfsT%DTA-jy2q%5IW3_w~)fXKJdEeQK@!M6(Y$y=#a$-54GES0S}Yonkug>?R1Mj*t>DEoeiHU8Le6b1I9F4V zA(e`IF)d?Pc+4{@725bbk~IIS9E=izmmJzuDo(l*GKIMVTXv$`z*lA&RBt;~-B8-(^tImrJ z>E~bZtyFA=w~*vXginW0CO6UKRk=tg4pXv9xTh`VfFMIO_1a_Z8SX`8Gn3S1Y_3+H zW2TRylxh>wH%Y2!O4w&WW``y6q2gK3+d(gbNv!Q8i@fYy!c*;vl2-8ZN6JE~>$cc6 zD|;m<7nSwTNKEYNN-TAE)kV)L_GAh)Mgd0#j5B6cFRK^6{u(sA(ve&AXVf~fV1g=* znvdjX(Cg<*K05p59du!ZZ{BB%!VFj{CE4E>>z2gM@Br66gKlD+XYf;hAZP!n#F08k zCPhcqj-bl;NSHFm8Du49?uMM~{%PZQm6H4%-V3-W`lZBX77A$#i@9L;8S1onyhdat z{hm$`0+OC1`Db6%&}r+CF1}-=N3JV1(63jMRGn0XoXHC~vo$qcB0?mMhU0Y(B+kmD zu3dqgq&FOI?mIzFdzhdNo=rs%-KqcP03hkNGYdot7Ku{i(q}{&YZEmNYq%+8>qaUj@d^> zXtoITWU7Q^($=#;gc&H84|Lw1D;@8Wu!ql)S>>NH2^;C0Lzt+Gfz8)+!`WZTfrLo zB%^O5U(ky+p|qC3e|lH{u1PCT4ho@GcieG8GTExEGznzpLOp%B-t z6zxNY@oMr|+0nDUq~7aJuXB;x_-?UsF>UfI{6#HllBOigZRVR&x+^-O(l}tybM<VV$!PYC9Uw!PR9Hn4L!3t^?$@v zS1P3&Ml;-MlzGbO-P#STPVQ;lX!ccmxP))B=Kpy0Kqpl~1=6!55tYd_Az!+ylQn?_ z^}V1A_oGB6Af4r3wKhb;?9t8BBD+O?7GakB^Mej;)e@m+x`aJR4q2E>RC1&D=U&(!EtU|KXD^A886J(!^ouX}mdq zs~~GK?-B*{rF5lz7I>VsiHT6hB=+#rhIH%ss8*emxfyXrrC1vxz9dw|5Thh{09}qt z!7_-47tO`-y*FV60(>LtI=dA>e*L`K@-!`-@Fyrc!CL62Q*_zeJeq*e@QubN*Ux9* zA383Q4RS(qsAv4!T{xQ+BGI^)N1mzC21Cx^7RwIz;IXsvgm8_6&O<%Hkf(OCoEBw4 zGA{+*3Y?x71T3q9fhncTah~Cd<|a+E%y9>4cYsLcjI*EqGea&H2RiVZ47lO&#u0ug z*!rP`Rzy?;>EJM=P8@VBcys?e{_wm(AU7$$AW}F^Fmzb{xF};MZ1j^&-B>r@ z0fIhw3Md?1dwOr5F>Z^su^eX`S!g(&P)H2b3-or|oL#rf?6x&i51TfOA(V5npQym> z`?+rrv3xabG@=)!?V-}fP#e8*=H~i-YTs`Kw^idW?f~e=W9IiGWi`xFczL_tdY{DU zHZs$O^pkNf23{=&+yOA~4l%z#+l+Pw8vS zK_e2+tmlEJnjUU5_s_YGhQq|r z*${qSm*5o0Sxn*WfR2~N>NEa5^)5_d+(M)=YV+3`Pi}*fhL$ysx!vBBgzI&4&!#se zw;&z{EWZgK;E}L2VR}DDx*%%F)#ZrunBpp}>WBwHY;<0GnEn<)QRL~-SwE&tSzWjC z_y7tW&?t|O73oq56y|y4e?-G^0^ynVknxl4O#tV(^_Wgl6ZGh4W!(-WvwbMl-WXh8 zPe6SLsJ4y+j&@cn(`Vya zCnw3Qt`Nd2;~hR57~0P~{07&2o17r>P=DI4=BNEV3vDvg{)`{FgunY(n=8i< zJ#(DRWWMn~yeM(l!}iN{y#v_wXRB@D1k6UYy3goODz1ntCScACXG)ofcK79Be5i#& zInL(}g)_5WcsH|@1&QjG^cvZQKV{o^nc*}^4x4C6>#V2(S<{LpJ|5j@HM;}&(Y?}M zsi@P!HHGMQtFg`z|?(KuJ2j&VrD?ywn1K$#uGi}Y};s%rl~{QgM7^6dAaZyL=lH? zwOS_)EWf7_cE5w>>zq1TJL zJ%)b!s7vi9s@f$?Em5I~v{W#mhL05|7d6D_<@<_D9r0x`HCRjSyp!sSbFzg1Rh{%| zvS7jaMXMv0U^}|w-hq}YY$3|qSz2sO+y%y9YNz$yG{5S}6Hz-8LHC05DHi=To@6~m zlSLGlsWZuX?d5VG#Z=#(S$DD|Dr~2eSd_B^y*og`DeXx>VCmH)P};l; zy8?bHDoIzftPo%yh5CZ1!4twr^(|aOe#~yACD~3**^~ac;@6KZs1|x3<7rOPupE>E znYnC_^%j5&T^Sj=VXtD+^5`uWbKbyt@Grg~@Dj-;jeZrs?QrevN%Vs4mdJ-MF#WU0 zEm*JR@X+YPa6`cnwzwBoZ#3qW1^6<+PD$L6^7wdgHhQGET!8-$&>F}QalKKUMfL># zMa|9g6Kt;h6S`$S##`xBmw*Cto%6*dS8o0eo^LJ0SMLI5N0;}oI}xv~W?xFF!_spx z2m{)l`qPqsq$7HYEyDilSQ=O7xX`WEwo2Bn#BdrYs+wQw2vMuUsNEf@WIASZqKTiw z*^MoJ`D5{=7lI?^kQ;A%h^HL^dEZqVUnO$OcJ_(~@sN1=MWHD!%y<>cl>`yNuLsU zC->jts2=ui#IqeqyyCRP0p4pi*}V|ioM?%oDr#qD)O`~;e*0oz_`PJkF(E{9=c8)A zp5eqB?f?y7={o?S zrkfF*J+U2+@<(>%B=KJ^BTYs!r6WT@NWVSC5B9c#|Hzv?*L3WP8$NZe%<>48~&ct@J;m!b*?wh z(Q+9g0+e=6?*I{E>q#gM-^5qQFK;-yNuOW*0EO%89Q3`ssyN(;lj=T<>Q)9U!MhgK zn+H2G+-(`^&&MHL5?I%cf;dm!HHEX~W~J}V`n`N{dpy@w zi@@1v5f+S^3D&D@t-r?2aKC;id-TWHl1CJ- zWu(a3E$OMw%C?Fml+zK8TDgaSw^)j9Rp$cFyN`7%3`sI>r~JtQURO_|Z|>=8Mr|5y zXWUNs-*0{n`WR*`6=~PKoxBn+_Hl1+>-7g8jP!Ot4KL{xqZK+L(Bn(d{-m&433Lhm?|Rpp{bL-O;<_wPAKF)W}a>OLGI!P$IoI3WP)eEIK$bK8%G1k$R$-gI-Pe>nf!?Zn$0{{0dP!1m7R;EDTR2`OiOD2*#Zm{Q|9N>`!m0z> z4~)dy%hx~btkdXfkH}p^&PFzf%dL+6b$Y2}m}a+M*+^lG3BKCU*Ej0ODu}SBxO!iz z{b?P`TC)LWHdH{~Yw)Z)WER0wJr=Mggc1L4M>vjTDaxaEzK8CW-ee0VMxiQqVlj{~ zwg2HH>odP*Ig0IR@Xx9uq55ji(o#3CtZ0+yE=O?mx7bysBaB8;ydqU=dN!~u=NGk1 zru`^qf@Q-o8>tT|D_%_rU)J@rz|~HA;zarO&%WJZ^--s~7Hd?zuJshNd|!eO>goLET6c_#$gD1KbgfP%>U^vRGk_q6 z+eO(!!hHs`Rl;nCD_E8%&F=ffsc+x%HQcO9BVBGBq1ktSXamN^LSea?lFGtXq&sBa zqg39Fe4%}OJMs84BBw``Vkxjm`jmRI!djfvobvr`D*Zc}-b(qN&B8K(*`zdZF)3-L zyIWZ5QOht-WF?1PrQ@2yuoMA>cp0MGW*?ekpxsduig+ftm37%X$ZZ_1F0D(qCRdE_0zBG;ZRUAkG2%anHGE#}xBEZT5khqvRQ9VcRGHTNN|58XsnVmrSz zSwBWyLtS+szkk2fcY<8X7u_#w&kGZU6OIPoK%_}#`u(m#~u zc1hTHJga&`=kr9A}2~}%SStUkD6}@{mp8hf=$j*+9W(mLaq(cz?lv#E#b+6 zEC%bNgzfm#w(m>w+M9_&5FO>SO#6;sN-8_Z*>3BoT_wG;bNVx8n)8Bonjck+ai@t2 zQ4`d5PCczXrC3oY2ZJv!b-PAPLahD1>4gxKqBf5-!gU<%Pgo*jUo?3T zeG@2<%3539MeGKT`ICeFY0F{_Xik;!rd(JS&YfoS9P&uAF23`8x_mk0pXo{~{lLbh zJ3aA&J&87ZiTF|*RuWSrRHSO-re|V}-);9^t#e@s`z|yCSCt z-!ssd%e|pZ1A~w+%SDk=3!ASd1V4h-^{ZjPIi8GODLv_DV%mm#9)cIyo=qWnD+*PQ zmdX#;j-Sg(Y(IQH5P%7|)!HJRvCFb~wD73R+9Ep00A?CvdbY+V)m&9nvU52~Zf(eU zINN8$V3IIl3fR5_aFMY^1wbvIgiC1Im-!{CP)68fgqe&cyfFD0t6@uL$WEQ8s$Aj! zB2rCeWZ$0kque;Ri8acM+1u{`i9_MdQ=vYfmAgOfXpWZ=aD1wai*nZYOH=dd84!(tIH!>??a{b1jv?WtDeA>2gBtx5&yK zF5_6O?_TB1#c8RIST8q9csfflJfE?aSAJ=K{Ue&>U8()C$o{%1ihmYK;T?eZRMJPu z>a5`hWm`F}wRKVZkUplha7~_ywob*|xT`eTDG%;EJh`o;k|o5Gj3LQVr3BN9q6hK9 zU`#^Po!zYK1bsNl%bBKm+G*kGqh535S}s_h5R=DGKU2c| zY`)$&$ZHTQZ~3*gDR{OQx)#-2`}VQb7luH|Z%@x?1g>J2S z*yP&fM1HS7foWia(iU@cIHL^&GJ@4Dwr46wUz`10-2#6y*dkyK)W~V)Tl0@sQYAJY zJjQ!tb-PP9SYJd(J`c<%?CFPiPkx@|uhBrc((X`=Fpki9Zay$0Uk>zrJzhLTrMw%8 zm2LmDq+9VOvr#Ks%JvN0NN^zKVkFh!VM&hI*@rlZq2 z6xQZCPeqt=rh(_ju~a(i0t)9NZSrC)TB6XrMqYG)NM4bXV&f5^{wK=Q5 z;OfYqiskj+EyVZi85D>WNYN2e5sn;jKjs$VzFG4RS+qW$Hc-TaHo@vbgQ(xT*>3J9 zp`l$)unZ=7VfxRz6#(OghU^37SE-*-G+uE*$D3C59W$%2;z7+M%F$A9bw03HJr;k-xw{@wZQ0q(1b4Dt(S286 zwMTrCqMB0?adm=i?AKN*Q42S+COydoYYXos%}6wCJw?byV8&~v37nx(B1$5#1IRPGUr*fu0*L@O;GKDwWz^y#KdJXtBlvio zg*CF1?CE^u6jUE*$3I$UT3@_8)ZHNjDGo>X21$19A$MHoOra4~BJ;vgpZA-^;NE?@ zCKHwYsoY+@&&eh-Yv@Yp&o@O%MhFPEuja6~F+UwEM{wu{{eauAG~EWgbK0qHuoyG* z9HIhB^P06VAs5iLMgM-FSs+W`=!kmlLb5HpeDg}{9U$#-;o&}yC3kn!yeH`Sr2V@Z zL)uYp!>3vXr<>XcL>6K+7Kj0w7&})S*IN)I;Q@tI!fnggV!EryvEK16VtWIP9bN zV7tFiL{)iNKAfxdOZ!EAQ#-3%@0sT+0FvTG)q*=NDJC5z_3&-?%IAZ;(Q&y;Tj1kV zkxlkB(k(FpVBsRMgz{Izj}Bytn2C(BnQk=fKJ)|F`z-XEkh9$df}=Cofa$6h<%^XT zimI_UQAf)JHQqB9TQ8tv%abdeRS8((ZamamY2Glsl1eyg%})W>?U{Nte0X>JB zBeBC-=1Iue{ebeDsV^EoF$UCnH@#!k5cktkIkqL$&P|3(gajBpy?^95Rob4cMEa*` znx#WM*IMo)T$V~7=(7edrShNml4F~fkK04_2@yt3PTR9hu7!oOaXq?pSf`8FpVY{} zbOcD@CWy{iGFTU%yF ziEj}y%!CDAd3LWH&hz&hf<>=TB{_Zw1%w$9NT|9qkC!&Lxocu7x+2e2`LPVGR~zp+ z_PbWsXc?;~Dt z=5mvWoLi*|J3IYB3}^aYf3{R#e#D(#EfIp5(6OzDJrp6CQo6}hFi3(SN1T-<~c9i#bc&*a{` z5$%4h=e|fFIP`F;M}nc)^F*$`cBq%VJpT^h_QCK*U=->sZs%@a;utI7{aI`g*rW@ff|{JqbTUPV{Df4OcA10=yaU zz<>vrf45cVWO!npSylX;v{u+)^0OFJzMykXf+dM|oc%)bivsn;u`8O{-I>Fqpx zPf7ChoHqxB!2F5{@@Q;Sx>~($Cz^Q0-o7oH z$(Pr-_QLxxlH<|z33Y5xkL13{>rX(X49xdVEx(CY}?HQ_mY5t6M3Q%3Oq??kFg zQ(Uy?xQ}8iy(n7QHf&R~)7o^>WsFFXFVl0D=D}<9w^%66I%s7yyX7PP^gG_T>y6Sr zLTM|?%%Epc7jnE(Ra^28VAcWGqwvi7yL3~^cnxTi?T0bj89ZFO`CFnff zkQMZZ;f?XrwC_a}q$SEiX?2Yf=!w%60Zr^(6-TZ$0%=`xy-`Ejywrc-10q zQlzscuzD9H!`J+IMN>*ZgFM!m9gjf*lF%JCClb_jc1u(RN{x#a~p^u#Ce;y<0)Tgb~?X??vNNhnZ!v1 zqAENnIG^>EK7{pKUbD}PS6mdI*aV35{CIi?z$+%lc7-W-2s5-f#Ho8Z!F%*?X*fDu z9X`GSN3+e^35n~CVhrnjOF!U`uDy+)RyzuQIcg3v6Y5ChY12|3bXEjOg`Ily%c`v%NrhvSiM-9MMK|iTjs_fC2U+CZq#gNOPQM4aK&FcI*?Hh* zFEluh&#I0dmi3c`RW?XJ4%AVs9GhyNZ#YfBI=4UFo z&hHsDaObVr<+XPXe{5_w8a8G5_<)t~8uf%TRm^ej#K7=l_BPr6L{R`{#?BY5jIjup z$29jeQvsVlb+&Rgk}_X3rBoGtlXl)7Blx=MupFTi0S{i9{D4q(X0ekSxtSDytyvMW zFDO;`kO}P$fC@7xdbkitA;#82mX3Xve*i?jpliB>ckWpPp4lz?932lRAY61|SqQbm zxq+iQf_L>Orx-;)ri=I5 z?*JyA-Fjsft)!E}F>~)%vn)LD{eac4)iSwx>N=<4CoAsBN>Vk;4Rg5f>ff(iZHCaF zofjLJb<^^VWwCWMqaRv^R^ufp%Bh(J4SRHYTOybj9@W&V?cKP1PflA3@Hp2BH_E)v zz_cAc*gW271G;6UC9Y_B7g0KWpi51=Z19j^Fgf<+IronK-iN%pWk%-ye>(rE>X5B!dcYiuqEhoz1u%=V(y|?3 z<*qv}(#dXnqY5~mAh&0?c_uy%$YVNdiva4vXBPRIm*CHpaI+(@oL@abM-%szh8)q( zps0dWt#O+?T<25!vQelZ!F!O>?a=s$gbT5<&5zR_cInq?&9JD|kczL1ie!*eY2vB) z?nGuMp$U;q@LNn?|K@Q#C18Ve;w5En!VKMD{6bW@7v9_VNe~$dK*80K9@)=c>(D7R zLM(AT58P|Yg&+)5=?Z3|sQngnKk-*C#r<~lA76bOkS9m!p1(MkI$L>6BSs8qK1Uevwyrxuo9QW&aI#Gf!>M~}40JDFP0u9B zaj?X$AWBHs1~7k3)AT@yIkT6%ia~kNA9<~5iGFdQ-O)FDKmAjhGru%@9w#Gb0^WLU zpD?V$$4S$)K|sZW$=IEZc^DjiF7}AT7>lsL{W9==OuEUffBZaLpgXzd!%FN=qf6lm z)EwrB9^#gl-GM!&Odr+t$Qdvk{rtd&R6~!uKNA=x^<2>|-qz>$c5bnLs@g|%zMCe-0f z$8A@Js=)Ae7nba}Xn$}n>{pAPZ!$@nKG8720v+^tA#jR`M|#vK;ucaJus87T38U3C z8WHAb$a4A9E`c<5?a}OD_M_(Yo!T}!;AO>fRM(AsE4S(J@S?Y^F+?-CmY2au%xnU3MjwDim<(O@}@C& zE_b50=vFh@)Yi~J-)FPhPCkjckC6G$^}5oULh+LzM4s>~K$5+TP3kGz3 zz~|iI^{4sXuH`OI2_NkmRYT4p-L1jl9KZK91xEHZ#lSSGhzRfSjs1h{sw(UB0dvD_ z)PMvVagNVt*s)f@81^y}bQ5KEd1hK>qs4ARk8mllMq>;l^TMVGL;N{(xiiZ#?p@DBG*R%$Qr+F3`n~JLPh#2$uLqyX0lYU^yoM&4 zQGWUhZP&kRw$H<#%|`d?CpVREp)XwmPcp(=d2r312CZ1&-j7FVHgs9sRve9pu%DFO zqq0+a@%kKG`svt%Th1?(iRt8O0^t#@Fq`f|x_jN#y`Fp-tTMitbUW-IJhh3QyS2EE zR*D`qL;^GlXB~78U!kg*{oWH@D}Qb%cC9HP7JZW)bB23<9$V1I#|B~MKomue*}876 zncCfR8QgGQJuBspT4DKCrTE5ctPa5N{vyb;jeMmV>T5|e(lV9J&r9*h|23@Lv^Foq zX`IHfc<~t|FXyQ#o#{Mr0Xlh17}F7Bt(|4t?#iQc8^wGBSgRtXkhY39?;3LBO$48Z z=1fcQ(2B>zTv_Ir&cjzuT!dmi;-K`(ZNtOYE5CZ=CT&_SpJ!#o)=MZ$FcXKhEudUT z(2eeZSs$BJ#V}T~&a4qEWPIp#FslSChL+0J!UGGG38hSt2YL@yDS}DqzFNQ6+G5|$ zKr(K@?{B8m@qN5CZ7#TUJL8Omhf^mfRd%p%VC`yy@`ueXr)%0Qn-CtFBzwlnT8OZE z*YPl*t>@CW{4>I3av{9{F7>2;J8llx*PU>Jn?)0-4Lj|g$Ol>vKVL8kh0ae%UwT#d zGjtacH>vrrE~GZ#hWL@S*Uxvs)V>Qx@fqWF#$`CWj4QLR-d-O})Ly3weBXtJ22?j1 zW!m@2+vV4K>R$oYf1WSVwKw?@=WZo08raH`S@AIRf%m(tz=)?QZ;VCe1$J6IPL zCl)+GlqX5Fr8Ne3i4@oE{qVw9Ry$k_tGp2-T!OkhZwO&3Gftac={fx_LUZ;00C)$O zUEuin5zq3wyarz^`UK?+Uw5OkT;1kPmZ4W6f-qf<)gi>=qFw-oSC+%yzT+>q=CMSm z71fbW=__50)kUd32K`ELt(|uLy|9uc^au^V936dk?{%Z-$u z$4Vb88KEqTv&bnb54F!sddxE~+JN2c)E zp58br|F$a6so)aVB!auMhrK&is_9DWksYnx#Wsu+@-Y2T?dF!xjbxE#4}U4FMrsS% z|A?x_k_l`3^;7?WV4MDWnL!zGzc#GXA}*XEf65hNY;=44&Ga7a&W)%%tRKaNAiAA* zsbFOTVjuGBAX`qz5@BRkyby5a4Cq3Ozd9Vec|u~dtC09Zrz~EZsP6LE-8(oUy_-a1 zNL4n!P?evvM6ByRTFgOsVr~wZebW2`VCbR*u2XlWNIvDXNz%tPr|8m2l92!twH#1m z=Y+x{g=bqI%I==egl&1h8@8KP%)`KV3Ub(%ynSAkdFnaWyuCr$HHYwLGN-Ar_h>{ClTTVR2oz>`nC{$7|ac?ywU@TpdEJ zZvV?$KX6OUQFEM&i_@mQ4e7!&wkyf;GCc~2hutH5O|z-VK4F)kytgEb?FdLIJ{Fdw zw-ZpllW4k_S4Md1t*B0WVBFxtqo4TW)6~xsu2PP3Nd2<1NsolTP9zA&I;C^J<_%;4 ztgc(mPC{LYx4BH0?Ma2cxDW9RKAT3|0pfi<@~o0eqgcUyv|c@0bLcNSNo0n^A#wtf z8Tsk$&5VclzwThE>k@Xr@K=M}Q-twlmSW(Ozz){ZJ{K`naThv6zpvyL(@u_|yW@%! zMN8Q+h$sr$x=vqf?!t56C!GZArCa2jP+rrMhh&gHx%h5-^AJB!*KXr`+)sk?&U69{atsAnz1ALZ@ zFiVmoJGS#}`sw04?Ik+H+AgE_mOWQft|rSoWo16Li($m)Mc6SLXfhD#hY`d}OVDN$ zM_8i!VYtgZ`MK#_E;cW2aI*4_T19(dP|e(>t|V`Zq$|&YpP|-5 z4$Cu|px!6t95#_1vOhB+Ej-N-Gn;zY`fl~;HvZ5kQrenI?LDQ90lb7G;r-zF^W`;> zo*4qQ?(oF#i`4`n2<1%0fIL-d_rs;$hZl_ZmhX24(ob1j z)5eN=A6WyajRUqMrBc~t?NBcbpF3uRt_4029ophpm&QSOj!L{TP88EW3^iY-$itF; z=~XIQ4G*?o3dotg5r_r5p}V*U`n+SEFE!`ERP1$_N3>i_NJABBS_gKme*UO|)7rk5 z`izF!m`gw*!(?L52y{9>_rTuZqj@`=L1_uE;~G=Tx|Dy&iRG z1A(BNZDJjDKEHy5bDM>OLfh;5I?74eXgmSoZ684={HCT${&a(R21;_t!iqR{qBGB; z{p&El#bY;z96_1g+EvTZC2M1JBmno&9&U^-MZlt;-=j`LxdEr7y=m@=758_7gkz1; zu*c2FSf8krf$Ad)-dD%LVxl(nd2nj#W^rKl_BQ?x!#BqBM$-El@4rj+*HGBHw~r6l zWSS}6Hsk_*d1B4wU~JV3c_A`*)O#7Xe!3}A0#cnYu5n;f=4O5~w_@SUHy7k7ovMhD zt$i^`3|dqpOgZ479(>4mO3@0NJt^hR;jkJ~N>xr3&MJ{7DN^L)%T5ImB+pvJF8i^f z{A4C|xbmA(|1ly4wgh-L1;qvR&U{ouRgn)}59pGmGds+C^9^ZHLP#y7pjE?v(Yn#EQrR-5PGa=tnd% zGy&8TMxm9vy^TrsR8NGbKR0Uljdwp4J0Ij*C>Koi?hz$haO-vSm*qj*!iL^V`9LYa zT(3D6)KKT-Ir;RzYZ58-wn;VLa8SXVR6WfPRx9_BUc;O9wL zy#rWCr!Q-DmItX$K`3O_04|q04>QujsPg8MN4LP_dMTGNrQ(WM6bH$!z}LNX&}iS3 zOY;**OQa_FOOY`xMbKk?N8uy5j!B+p8k$wGCJwW|#CLuwnn>r`URzhzFT5;e)y=Zh zht5kxy}jopN(bMMI)7v}u1noMEHH9PtAY{hT2Cf?lxWB@cBY`lmxfw^&&y{r{KRA# zdunapb`mS zeO3V){jKGt=7R5&1dZw}%BHTRp4pJq^rjxfuJ)bN;qA@WIDRSk9Ebhv+ckWCG0T$!9jj^_09qT?G1S0J-inhxPMM5!lHT_S|LFzZ9bhuMPnEoU zcENh*Fss*r*5jey6thR+w&{fcX6>UB+6YCOtLup$&?eYYm>W%N#`pcplRcCnp*oZ7 zxgFwuVi_Wpz*Mq<<3Ya=ukDeLnXxZCNhA>`TLl8o4jV|!rHnP4y5vT%Mb8VCkIq}N zts>2G77b)97(ZEk{G?3-9~2l8$+vfH_}HMwf|47~_-ro%FWV_rAbk|7Sve+`grb-3 z{+(G}lh^ia=nkMe-dS0Rnb65pP#kK;S5=`PEQX2xq?Se=-~sg$=$cG>5Z1Cx-IRbC z^Gtxl?qE;`T}xHgXn3Eog2Sp;!nR8z8)niq=SqL*?04m)1-yU%)SByAuA1p+#KTh`O{q!2&iaIvY>3ZgJJl)U(KXgZX9? zdF{^}>G7U%E*RUX#UeL;YRi`I+*F@kye>O}oyYLKePoqcjcQe661WPma27u?B15pk z`}`?(MizU%?cyF`HzqM#g)ar&!%!5V`k;b)R)A2vR<;4wL}oRXH`hVBs6OwnRu4W9 zTU{4vGhapjb==nd?0h1={qrQ}nd&jLAw4&Z8E%>B`Q-&z{G)E_ute48u8iQQrpN}D zQ{c$~{%zmwgONS%&iOd~dBfJ9N#<0I{||NN9GqG6J@_ZKJ+YmMZQHhOn-kl%%_sK6 z_Qb}-&cxYy-`(HtclVF2+CR6ey6ZM>pW9V^yU*!U_35Tfdo^6)Jnx`H15VF?rz4Ms zj&Dz)5JwAv#_S8&DTGhW`G;Fliq-dcPu?tUNe}84lU>wrUGWgV&L5#$N$trq(4;v z7kDjrjVI;urFELWiKoqwp;#PoZN(hqcRi~cg!fr)2*hdU*2Nw`+rRVH5}BoKUo=S$ z$g7Qjtoyi~5Nf~b$Ulef(c|j2EuikNUn`=Pb|kEK#~AR4A1iX_vCQ(Fvr%z=o|Z%( zrWjmftUdTTn8EPtItKCtsV5I1>!36fe*Yuq74;0I8pkruE8Q_M;@nh&d=PUIF53UTJUS92`shWoam>c!6sloRegVn;MAiKVU z`HD3@=a#em3aZ;%DvT3B!+?+^T@4Htr?|e_=U*ZA~hhO{}+t__dW0yO!QEU7A40KN#JC$Rx3o;N@x>j z^sS?wyM$Cp_rYpHaqeODk&~ea?erS2Adg%_8EWphEbi%+1c}apgcfyM`y}2O2szv&OKQSa&TXK+{YZ+I~O!oPtE*9r?7Q`r1<9N?s3Th3Fs{oyW{E!SVzy=}SECiXT*)th25AR2ez-k95HbHCR^&~H|CbZ# zNDS5_B`KkZ9$7x}!px^EBGUei(N0+eovx(1KFz?#7|tFA6WgzeJS+X-r^%#qY=Otr2y*GN;yWDPg%LUlDiDt>Q>rX7ra0_ zOxxB_BX$`8CxD)XI)A9B1qP4^-fIICcc<;&L{P3cPjCk6>J@Jpa;vq(Gw;ms_;+Db zM}0kJ5dEsTgrqj-rD_pL4I0~)Y)L=o+U^d|D40RIHY^VWq=y!Lpt7n4lW zCk5&;C_2hyYzT9o+|qsplZEN$z2EB&m-T?hi2M-TZ=5JE6nG*psyb-<(lwn3lLc1_--TC97}1Jvra8 znE8EbEI>&9(XUz)^IBJ%?Gd-KKE5H%q=nUqHJphnr3(dx!7e?4Axw5OVEJlfHaIO8 zZpsrM*XbGOeiLvuY)+3vX0OM6arOto&6KR%W%$VAC|`Bu{5uRomm5Y|nL4IW#5IZI z8y`!^*yHRmZP5(Jg+;mE49n0bQR6%t`5R{D(ImI;9bL9sylzmA+lLL!>+8rHl!oTz z@d$VzGGRze;Mak_|o-Z*981pGWyv=FM(7Jsd?9P zcbNK~%SLme&={rF-%i9O8f!rv?k)@Dl$rLs<8%#@@_SVXUma*i$r z_$(@S?-B@0#H|gH>Cc`6P(*PMVyPE;mz6u#`qbJg4t)Vgm6P5dI*ipK?wU?42F+0VKmkvnK8qiwiyhbT5fxEO!`0!Pw4BaX{;zL!fek zdZ&L}bhd^Del}xHg5|vC#&e${dlDL{J({$x}ywt5;+xo51Bz{Ac zgowidIrezmSsYoB7ZWbdzD($nAHk0w5Y`zNZ&adZRbMd_rW45_nS?Ap-(u7}Mv9N5 z=)K@Sl_j5PaR6b*p|wQMU=~#FqbX0C2(qpgIl%iwyNYbHpZ~1sfrTsqS&f~C9i-Vb z-GP+^nj{Y??-Y03Q{KG`?;{Lc6=aeAL~w&x}VP_j%DuYS}&m%r@b;~p=>`p z@*y{VI3GPfuJJT0wWT%7wC1*_FO3wGzt{fVca^kq_x{{KyFTvWceiksDo3mN*$tFr z=1;8Moa*lfBR(hwXqGO|4kMq`OY}##InKiYs2fGrt$Qx_pn!yv#gL$-Zzmg)zxYu- zAEtLpdOE`u62EbxDp7g1p^m~bjgRBtPkT2VN2L_kPwneAB`GK*zPd-GnXNy0s==Ek z(^VpKK5+_!zo6+qhtaaeh}l@Z^~<`9b5A4%bRG5mRiKhD4KjKOZzUqSg>L1@7aYpc z)@5RMjC!_^#$!^sUc?~*ART-i^?kgQ2PBD72+P46=&H<-#9?>Lz^BSAzhIBWuq9kV-=^MH#o1wvl#zqC{P zBMo3tc|rO|tZsBRgn#tEMZ-UVy{J)8x>QQsZN%IJl)4YnaA$IH6s~M;ty{X!7kGh% zeo`oUpWObYVUau8$P|Jf21HJZ#c;Tp539{i&P6%Rq^fFThI4i$kII>XT0&+Ln#C z*~GTa>Aa3CxD1^oQi_6ect}6*Qyro3&F~KnxR06}$&iw9j+Dtq{Vzb6!b+2YV!l-K z{lmfxp3|72-)(Z%y-xILodxqI585xBng^YjSDsHybbj1Mc1&)wt^qJ)22=wU4?Zb^ zKJ6=3hsZ4ba>GO$cJ)sM5Znr3K9)_NJ09a+jhl(q`l{3p)E9Ee#A4kG>@%Cr#v5zd z(u1BX2s}(CL&7>af`zkLqq_}N@11D#d0QZgSLJ|71@6{@*Hg`HgTt$3NzTcVpI1H3 z?M@Uus;5As-2$CNY%xN}PTu?LO72LA<&(?cdV1D|zcMG_Y1h1oa*p5&AQdGi%$jPV zSXcy}^Y9yj--aBW0_coW@GjT}Y!RsxzMm+E0KkpfayX1FdAAKuOYd9uH31qm5yfY; z`nDjb=`KKW`U;Lqb4+ziQUqkL=W%h7>IgGT@~B8NM+qH zZ#rkagjw5s&Z7!FE%A{672L*0ctnuX_1?Z4q)U)JLPB9Q9hB2Hi=^hOL`F_nY{V~s zP{^f0nz}bW@M<|uJu>LTX(E3VsGTg)IX~tJo``|Ropby6P;*goxg_-{pxAAM6vW0t z8(@8EzR#~#YSL`)6oU#v1b-yS`-yQ+QFxF|2(c~Ci&Q5@+UX#Sj*KWTXcUa-ZJHQz znf20GXZNT_qQxsc{giF4R|+jcl81ynKze`Dj_1OWp5@kTAtjX=Cr&{W`sVR_35)gyO302QIHoA~~n>^y~PqKLMhESKylucIA zmF)dz>u%TZegOQq*P`{dD5JkKR%;^lMSOdCNzTY(-;Nv7N*1+X%Bhg9c@?|qyuy<)axuD)WJBwS2jJ)8!P2y*~+`#$X6X_k9jTYTA!9=;mmjMf&rloL zb!xKcN{Ap=+580gB=|;sl!`Cd;8jF!R zW3!FWar5{mxmt+ouxSkPdFNwA_vF>MVtsvpr6G~P4KJT=_h93lcIkpw#>KetBlvjG zqg^+c1Qz$0Q_F(^3>A`@X)#fU8#A};dFA!V0R@KDrW6)-)RsLYz84Lf^9lrCq86s@ z43ToSdG*-YkX-c+#^JVJaDi9LrCjXTI$6k%ykWzZ%s0W0+qrj?V3h5lhOo)MxnjV9 zBD(U_J2bh{iZ>D*3+3Q#UZ#y}3>*9tW4{lXAKh9XF&69MJ2e=CQqzWyZ*jdyjwvEv z^E?jT6^YdjKCe=#H5P|EC?|Ql-A*Xpk!BfS8` z&N$(d?gE7(%LztwbXw9#^kuzu4=HXruTk)_Pb^~>MK7HJdFxM%xuMOx#jGuRo>eij za=bYj7fa*oCJ4l!47%3usw$P!tIiph;wTIMTKiu(LeT%t@C1M>b8-HY`=1oue`_H@ z{)-C=3HT3|u@?9LVi{`*|0l~B6y(47rCQRU|C7Co9s56|{clX-um9vM{|}z#*9JfY z01XKV1qtyF1Q7-X8WtWM0Uizx9tRZ-2_63%Ap!n3JUk*Y21+6lI#N75Dh_HoMkZEP zRzgZHK2By{1{PN4e>wqyfq{XCgU3cdz-A`KBWC`84*#8xm<$;DPd*}m@c+t3{M!Kd z{~;sspK<+PIf?&_>;HRJ;w|)15(zt#L1C?roVbo7hgtS^GjFgw;21c>ehY1sOySHt z+Vl#$I`u#Zb55xi(6~8L)8z+4QP_10uI@cNoZ^IuVgW^j7q^qDdXrLFZh#hy6JCy8 ztUgz`<#B0DI#=mfOYX zNQ)%4bea5UN`_s0*mk5w|C#XuK_P5U-%^4X08C{A&qB&sdU- z0vh_c*zC0~>{Bs?Rm(vF!8P!0e9EQDFY~ZV^bR6=m8DMmYmN5KDVsgov})y*Dl zpYfv9B|U8WzFAFjiKgu$a;afM@jtqsD+E&w4^i{Y?8`4ZBH`^CSD!vLu8Y$jwI_M# zgSE~{egbO}2j^*y8d&;mQKWjLC1)GD)9x@cAEL88#9!0}g-Cy)zwoLR56OBYi~qpy zBF7$hIIgF!?N6D;EVzPxQR?5&@=mRt9v*Vmmtq#e*%TJ80eRe-y{po#J)?9D7l`&{ zZ@@s)@gSA~(8ewUXW=&Ex3tG7W~bCm+Iat5@n_UEE6uy|{4VzC8Z?f%GBba{pyYT0xQR!6_}`ejuw<7+2!lbu04F~W4|CcV4LM(vtMLX~$)gyc z=+9OP9koka`4h3I271jKe|xZFDXNhmnliVd7xohFRedXWXZ0r*k?$%LWsv4glbE9! zfG%ScPgP}OYg@K4Sh{f+ZQ#8!>iE#36-BqF+oi(7ZaO)4_ld3k3jhN>e~|>ez($lv zu#D&J$PXNtE#F+{%v{l&;2?{M@%a{YrB%1h9K(SKn1LZ^XOpueo0%29^$YFhpj2vz z<6zJdbpk-u@t3&P-AmtMl(iK}vDKJMVMyME!~0c_JiKuvhUn3OQM?mswkOTWT*Fau%NrNVMQQJ4;&Plz&ju~RG%UsS&U4wk?Q`511hLmiE|ng zf2x}wLI2Prm#z$<&Uk(TY$V>{o9*MX$;sDWtY`gQ(5^VRE@Aq;17|5H6jySD>3XGZ z&Qc@s0*ip5vALab)2p#}YpBTLMK$rf^%q(u?{M1cXqT&UAXJ^xvqlVV?YDOb=1rZz zAno5=i7vlY?>CnGXw+P6Y-fwlV|j&wCCNolAc9E2lXwU`t719%(9lv6&#FHnafj{L z?lE$qAUKNOnVMz@i;Hj$ z5QalmcxDY=$+%@rFp&mx8FUM9x346*8#}6Z@>=VmDaSd%r#X+DG{^SMl*oM(GovRK zpTWl9)zGJZ^pij4vFXr^^H(QieEs&jhL_aNf>eqz%Qik0r&sqAZ&|)bCmFk~aY#Jh zf?rp<{>tam4QN)qNmgxnI||#dF9ujitK9owIOB*JoRjCj(mfE+K9mS!OQ@rN3Y`(x zhT@p(t>CzVBT{+Wo_rKoAq-mHB)giuaFKdHr)5om@K)t zpT+4Gcn561JpHHHe6WDQu5phBQ*o5Ll1wocD;)yO%~S(8b@h8k-2pclnrut*x5bzs zeu87OKvmQID;W)T${XNiH63?a+B^#brs^)?=+((xjm|96ww64qWhSYByC5@Cxrl)T zL%D+^doT=NJW0i@l@-a0G3SB22Q`k!Cq|8vLKXS^#cUo!%Uch#&@p~_>!NlRMLM-tWm%1t3?(s#|&2XWi z%g>hPKRiCK2|v6~FNvFhaJHcd0X4C@t^^_csj>0~O}gKgW|IbyE)`nV^u@_k?nRix zW*75l-tTpT<%c;hKhfK`)pMP3r(%6qxHf+TBdrv)0&Of~9QeInL~>T_wlGsO!uu+EPss@La5D}BWH5fQ&tavz{--_bmNt%A zLW!Y08Itw2Ew2yKdc&V!$ydN>OMYd!$DFnscRc$QwYch`-+q5c{9w&+<-qX|rhPFk z2!T3*TJzC;T%Yz&DZ9f_PAG6cT0XZ({6j4>b&y_R!5Kc7LTe-u>i}eJvI`kjGa=;? z$H4}QTdY?pHB`PX_I>PwyZ*6JApLSIa83d~YUnVPHz0qenm_W+j3I?kL`Q5L*FXw2>QJnkUlR zgo}Cyy-l*0{?SG~;ilLz8MHLo9hM?&d_m3Ob4X<<@e|im5eHWTq(os{Y<&xlo9 z9^qmM{LPjf=UY48LO1fqp3dl>CS=nncKoF;K&)slr&~%g7)|2)_r?1fu9nz3;VJ$f z$_PXWER3vKfr}O*PWwDE?e9amY4T_9>Uu}35p>a1xe9tE!2+-|epICJlDJF8#h6ZB zC0(tXcUTMMVhxjGW$pad8!XhnwQd4(F<3p+9Sg){gSI+YmD?|z{nZH6G{;KzJEkQ? zUBh^Dvht%i3!r(cc&qZGbfW;VFly^w2C@&;aOk%DHxFTTIzxi&XBjtELToK(hoB`0 zjSbXVzKeM8_!c)3vL6jQf7&4Jm)`HZE$Py^jeKZEg5QfujYGeyXsD)fjbk;Te*rAf zq7Fajz5v?=o00($i^s-CJPyy2D825;Kr%7a(>K4H^N!;xn$lDPP%y6)V+ zmM=H$7!D7vF^8Ghu%$2iN8cnUI_yqXVoz4`88uH!I$KF|;zuf_+@LuXHGP04*ZeIw zFxL`{noAss)LRW`FH3e69VV#&A9eR@Z@KLU7l>HGRCUV3_K{!{>7UPRMy#0MBfp8^ zH{ueWstoMA0$_}t1-57JYpLEP%48+7$PDy3OAWi2b$*^D0sbHcz78!N6l{PDpQHU& zA)M*d@zW6_g6IJI*cGRFV6jRjOuL2Q>mE>k_|22!tB)JC7vSQq6|S}_C+y3`-GI<- z(Ytk0>)D^7(B#|&fPQ~ArWt~y_hv$zMbsMl?QO9=|u(4X{ z%#O`I&^Xi9!#h3hs<%esEpSn@c95Rc1Z*7# zm0`ZsNu37@)VijB)4fHw5U%_J`5OC_Nd7d-4cWiyDAT+)eO9^`)peCM$g|W~}% z@UKJ+*C97>o{;$c{<5AJsv)oVQJ`%!bzQbcIuX}lpu{1Qa%-$}lr)Sd*WrP{$!&2G z@zjjV#a!4xVjqoDQ;Z2J+GGExTQMCuUd_bb_?c#_0I%{SMgjIcQ9{tjG2E-^!lB5q zdBBr*&aR~22m&(?{awnWBTGM9Ew;H*EBcthZc3a0jj6xihzoo)PCq5xrXSNZUL&Hp zMQ;vDgDL5`!Z&^03WlAlKl;#pwdl^oTR8y}&WbVaCloQuMhTvkCOL&iYQ4bR ziAJh&$Uh~qD=IPIl$_)HrJ6VqO2MlaR>@9<@z#l^Mw^S@*kc>|L#_o09v(plH>JaA zNs$Vx)7FO{yN(!2p~?|$ctNc;oK#6G8*bs7Br%VIl;#o?9_vOR|4z6{)&LKWlr!9X zXMs{LVN(w__w_4DJuOpvKI|xYjt#+%GfIheWpE>St+y!l#MfoGKE&3|Y}I~Vma*B{ z#R80Iqy4T3DTW29-(~Uw1Tb}JlSA{<-&%$--0wt8EjCR^UsTzYAoh)7*^e}v#?(fM zNDuur2`9=u+0=#-sVrx2Qi#L%dje?Ac+a`|oul3p6UR?Z72e3e@ss2Toc8z4|wij_y&`o7+worhK2*%y1}?@-?cJ zFI?3nM5i{j3%w%{$oNxYmtTsc>@CcUO=dVy#(n|T6|pu*qdMuXfLB_-KF85UAWb~WorNBMyJ$6NcgM(#^V&l}>>|Wh(m-gnH>W3mq=Pd4 z{VO?8C0<>tP~_>4Hk=>}Q7!Tr3=dwAP82fetos=*?d2K7E~?`&vD?QE;=UDiEFXpK zZR=pIwZ|4sFuf$WNVD-Fnhj2pIorK04#F6eQO_0Tfxq!LRUG6di9(a^1ihcx^B^l! zZj4hrU!l{2+>P5&liuw|b>XG|?h>2Hq(ItET5A@Qn`k_8HBL*$uArhZ?QqrWqXn5` zoS|WO$d?8*r8m{XSDdbCnj)2#O8-&f$05G^5F}gv#v&&bHP%aZI>WM1@)E8T$FpMZ zM{{QFV!K9auWM2;d!kypnHCwM^7Bniv>m>r7v$+$xp8CUfpRUVs=Y=_>Q=qD#|%OQ z8QU<>J8DYb$3+3&Zy2VbaY3Y34_lPqHwa1)7o*Rlc1&<;0rR}&0BY6e7oe%(x13hk zr{qQ$Df(5U6CVSgvZ(lXmvqi`9QWN1TA}Y-i{a{qUh7WrGu>whP8$|EQG4EK0|Xgt z9Tt^Rj$jZ&Cc!Y{<&&5)ojj~Ph6N0OKWqrYOLZljLCNz$yc+BdC(6NmH3HF20~pL_ zNC`Mdq?AycC8xxdP194WP^OZZd?vO?W4BsJxE&NSmbj$X-~%5tZ~E+lYRb@KoE6hs zzc@(=CRHZpJ!DHJQB>My)DLjYc?sTKlvsN;Y3%VMf8&5TT?f;6flay49L*|236yGJ zwqwIi^=(mRiNKhOM?_+-*pE)V2xPFqo+fYzm?ZK0e>6M2nr6+#acWi>1%X}Vv3z<~ zlq{x^_O4j8I*85)kPg$v4GT03hFDv-(G(Y0#s#QNW3Z;Lmv(stw5Jn}Xx0V5QtQQw zOhcW^UoHggkmN{`9w|xpbM&yjDj%nZJQkQZEu_TzE||E0s%<12CZ2u)C3eMEYy@Pd9<1>7G%>I-D0-GK^aHh!Q26{y3y)k zx)_emoa4hr(LNNYk|q%`M%gh)Hx*=?6Af19-$uB0R`X?7(rujSGMC9OOp~xp-xj-v z44FYl+p*a~?JrPB9m{N8;*QH$m^p=iW5-<1vT2B}Wy^e@?Q%K5XHj4gP!zwNQ$BY zIlG7w&H-EUUR+}NYbG5!r`44qwzsB#E)0Wa(_}A<0MUdnHNJ{Mds_4 zA8I;$J)9TA$dve6``7UR`tR}gKk2`>GJ%8rlS2G+=nV-03Hfh?f`R@Up&%il;hGVdcgf7|enB zJu(*KTP$Z0Z1P}Ml_VU|B3KGlHZc>ICeyzi;{KOM;6DWd{*m~%k{bm83JL-a00#$$ z{96hN3I+lSKmh|sC1ye+5mJIMatcEKD~h!7uaFxIVMyg$77(FLep_yGNi28`EO14%5x$aXW z4AgLhat&9|IfP=`O4S8f3B&P8Mt0FME(;Z1PjH)WMNSVFT?f>7|38~ub%rBz!RdMZdbG@(2xMd}&+BI+I;=XV>>;x7Q>+NJ)( z#2?OG%AGHOBWOf%$k3L~S<-P7c`9##v?uLTSh9DPl0s%=cxxyjO>oDXxPZbEE+*WJ zk@_2SiiOJLEN7;n{W{u2WBv>@04}g<2Td%ypshmM0$Vw>zbS$163y9};WTW`34JIu z#h(OXIVdA)fjbgmAw;%<)Y@KAB|wv0L9>VX*4mOv_mf9^PC*=L!rBUbON+gVrz*>k zRglKEBs$(!)VHiL!`o1A85hM^ZT4+g=vyEadD%poYBqim`DqNsC5@^1PK3`;#Cj^W z^DkC!Kf8%&qn2(JAN1%C660VC>POaeO?64kp4tRawU+gaRFIcc{Ky7slGV0{$is7S z%sX8OVj|qKP5(v~H)tXh4u%YMIG468O6M_HVO3kMS}^Lw+M-P~Qqt^XaQefB_TA=u42d}_@)VW4=e20 zjobo7PIlrgswygm8Q#GTUoDz+5*o9GBaITc1r%pb0fWLvAyvs-Uceaye|punZmF^y zoN^oBE`c|VY<)fQRI1Qs-@CkiTe_VaNZC!B%J-bI431_{f&2%4S+Ahzqy6>H<4v>HUGBg5H^na9~qApmWCVy#~B5x}QfOYLAbQT^;5KR<{bG0lSqf5x`v7F4ps0s=}D zl+2G#PLGDB*a(Sn|K2ctF|+j0EYOfREUSf*+Q$T1d$A`t@)ky^AY@2Z$TNu^b) zsoSOGBC(IzMKR1(Au1VX3UUnbXH!D`k&y_~nOGF+<#>zIb|@$P`VU^kYXGhGK7YcMA9f(ey!O@QkC6HM zN3fNAQn`bjg4F0)=uV@aYA}`<15sDz#uP|KfjzR8=;Pzu;7MwfRO@zY&;WP?>=;o2 zHi;a>LK7?A5=YN&UDnTLYim7vS^kvlidqh^_RD~WFkjoLZ_h!@%1#4WW>~ru#ui4& zm`d-s9it0$cP!{IN5n@>G05n!-`gHy%Jdt_8v8uSiL?YawRbcfkL;)gb>u-)-6?}M zU7(#-uk>69=ydze`M`+Pli|vy$l-c|gz58bcZb0Hhn1Jw%HH_q!&_g0=Byoqm_xVM+1eY|stv~x=2VPhv(ki8qaL9iN0 zTtKmEgc`G?BPs2*vyo?q(*#)vYeFL{*$_OJM%P+T-6UsOSH7RvZ&6n{qcd#d*b51t~l!(2T zJn~x{mub@QOiNkQA{a$mw7N zfX1Kj`$Q4>x3;G8;4}G9w8fUoXQ~Q}inZ{&AY(Ak zPK$Kw*-BEmUIz?e#I7H)xW(fYTBOjv1seji*5Z}QYMNbkspzF(Q@lO@O}IQ2lH!hv zN^HswaX>zby<7TOd;(@`QYj&GY=pqt2Z?&VaGGi-PFBWkN}_A_J^UJsb|BGK`*;=t zzut>$?^@GSHYnF<4L!An#?r8pn91v&z?hN1;Ac@*Llz1%?Q{P{I*k~kl=6kT89cpu5 zGwVIH+u9HI^&3@NSi!@b8-arGy0-7%#nmf{x(6MVJmTc0Wzx0 z42P=yM6*pcsl%N^7O!%?0EuU0vvpVPs!dH>ZE!jIMU_N(h*zTN%%OU zC~Qo^wKLLvY)nFE%$6?WcOl*#z~^0;hbRd}E9LvUvBVPAlc|O;KtxCzH4yf}0 z2^{V5gt1Vjxnu1Iml@SZFlS}van;x_faheOE%qTIxSrW7SD86w*%`CSvEmfXsT~!0 z1J^qTD05z#+M^j;$ajJ7dz|YLuAKD47ver6QB^A?wPP3MlQqxkU4hz9hc2fm)7=6o zbLoSMLBb4Cw91HedBbABsn+0BqLOG_CzH{0l%+LkmgPs4t<23mwM|C|Tml730n3cV zrAYN-(MPA_xjR9vRX|(m^$3qBL0iIt>+5D~S(^9Egus5+-WTA>P^|eHMVn6S{w{8l zio(WKk4e^8t1q!#ISBx+|M6kx`NKV^g3OKN}AeAU6zA-`qIT>GCkpT&<4q$Rv#y1)3F+L;^Q|ay^ z=LZ0beo6jXN;|t}1J+W5K%8p!ae0Su;`Kwt>#>=I8?)G0NV>hyI$*oA^%lA-I zCC$4Q8$Wf!XbW)x8%#8dEpfPDhSV*aBvtG=I)wXiO$5qIJU2>n+42{%KGd`_QS~zf zy3%#ptf*<)8yYwo+7|dS%c^0L3W2h4>#qTD7CATcvnP1#n>JCwIDXXb;4N8ol5$Mt zqWAEWLxQlKDSUM#P~sY{N8CdCWZ9BkKR`%WV4b?olwKKBg6b&6mlJ-*f5J7=_(}nck zm%b@i&rDIbl$Q0O1&KymU~b@=u)=)Hg_zJjLIsPZ#suApe;Z-bcvh&NQa#p?tDaz? zC{0=rPVL@F@NNBUwB=%AyWS_=pB_MMT=FjkmOfe&%C2vwdQpQHeJZO8?mC4$gfru7 zqM;_uO17ATopg>h?4Mvov*g2cw%W)<(hMzgjcQ9LElzcI2ir5yM>{bydYR?EwEit19K{7JRmdi{scDPoTG zsfb})-xeLfD0O&)P=qG?`z(~N+;k8}Nv3R=k|1ZeQ%7iOiaFiDdZh!Lg43DVKv%km z&k2T7Tc)0H=jsL%Rqb)MM3bCQWS}jTHHYkqMsAXv9drFG$Zs>NbNLUOWQmPeFY zcLG9iA57aroI9;bp-`_`uzS|9aJJt#*&k)ED0&rnZdzC;(UkIAYLbFzl5r#BRb5~Wk_ zFe6*O{YhCahUyECpGtz@dAm9p8#daI(fX+(Y9|ELuoGHD2KU_x^Hi_a@zSWy=r_nI znxG8y*EC7K-Dj@n3%-4`BQqmo09^znyyfP zS{c%t*izECAwmVs;6(#yZCp9o_a&f`PjDpokKOgvA=mFitk)+2Q``yPY};oOZdn|{ z(^+rp=w_G8ugp|Z#fx(CTdW* z0NPD~Y>(WFh`7C(lADrvGrnUmrq*M_@G!YVH(vbXT}nH3sBT8`^DxsWumI<^$> z!!Lkp#4;;=PepSY)(h_wtp&fj6BjTat3ov+9RX-ofT#;}t zCViVE9GkdGamsuA=bFIHXE&h2TSN61P!3b+mSO5`B1xpSn&|#nnFke;$A#c3Ua8P- zI49(eWo+4SIj~g2V@bErEndp?Qj&S<^vp#^#g%iZL4GmO$mq{Qlx$p0YJoCANu#{O zFw|$3m0njifIs&@)1{zCY=zY!qk3^C-Nk8h!}*MiwDDl&3y{tvUg67Z!vUnJY~qQK zB6x%?2GXn093Hl2r)4&WcH~Y6=KcZy;PYd_ zuoJ3w12QQCUuA|{!c!I&(mjX;@j^z+yL}wWd-&)4=uaIcXCY(m;X|j|_mg8)x#^XyT`=JKlV?jg9m7q=Kb4#H&N1XV zlU?Nb?-|Q=xT9CN zyMLmh@24=@AI!41{D|4#qvRZ|Z_zh+_FwV#aw`Ofbx}=^cW4- z>qzOsI5k14lt76!1BsKuUz;#$-K&@Vsej|c&uFHjVq%h$`ZN=qDlngs*q6Y+H*q$5 zU)~u*XtdjGQM2`fGRMt7C$mhBi=Hu?o=ZsT4}W?D=30)*xDiA2#)NQeL~MLTXR8`Q zrouN>S@77ZbfQgz5SQs|oOZ7gZanMZBU;cWz^jBh{KdK3R5n5m%(}Isv|I@LI*hcf z;%^)ZwobGZAyG8BXWOYY=o?VEbbpQ0pmnC>652=aKsptC+J0harO}nOSd;Qx{v|uf z@Dpv+w?&`!B0Ba!h}w+2dh<#1V%%?uDU4Y3i}2EtY*b~i_~~%4#Pnw7FIbnJeN%2M z!paq6&Q7!tRAO25N#7rV;Y>M_ld`8TP$()jts-_*t%@g3t2_L+S!Zzts)@XZU8Y*F zJd(R5ekS8Lh$YK22e}QvU*#1a$3e?ibt=|NXbQz+=yu+RsYW8a2a7Gnwr4ozwDf#b zE#%gjLLfNn4jagmN@~>@Fh6=L1MTfWE_eboGf)4>mRB{ouw_ofw3LS!ua`Nv;oTZt zkgg1r43`b+#q3UJ92M+X@l;!w9UItN#fqM)1U}c{_gB2`#vODkA6rzy(PmXoPw`7q z+qrW{UA_*b+@r5y>8eikYtKmw2iIW=ot!>I@mYIL@wp{{27*KA#y<~fDExrD%Ok<> z_fVcKb@QVUZl>wX*{GK(ys3v6MrEu)vRt#;`G&zqH`LkklYWv!$(^p{R3ZWZoc`ez zi%5-FT0*5+H=x%isU=Sjv*{&yS7PWb=3;qs1|h)q`3TBG-5c{zuGq`V7S>(l+cNYv z?j;RgiAK}kh}m(>xMi|bwNjY-U0#7RCD}A^k3T2BMU|qQLQgqZhfFibHp2dVCgq}? zETFAL0y9LeoTsq>t+3f_qUF+!%%Da~T3YErX$m82BfTrm>GcZ`aEe0iPT=G+*3i>q zq%JLZ3(Cbgin6ZZb$3hN&nlayrzdTHgbDfU^;0oAdA7UYR|JYnbU?R6)r7{?iV!KO zJv`OMcWR=`&WN7cXJd>}u#DY6)9B_Ih`=)sN&$ZsJPOd{?h5yY(R27nuM#`uCWr{Y z>r*g9XJ|IuPBNU@FD1zi=FNrRq)<+KTffVIQ>e^*8B@(*!Fxg-(fKjF@ zr2q}VNH9ldS_LX9xCzKoxE`Fr^0D`WZSy5wTT1}jg#%(eEtmu?1%J6nxKRWH{*eyV zTVjHcRFX&*AbRlt{K94wOKRA8#jO~sU5Z@S|w^T_y-1a|6McSKW9!154 zu0KCmg?46Tw3MV02+E8!nV6eRlBEs2`Aj1=?rJjQ=ZP}>^I_0}uoHY|{xb79#+SCH2M77|l#<3F4vsimcMxUlXI5T|o+W(YRf65so6$JhI`*j#QT z{UFcIsbIF1^1s4PBB%RNNVeAiH{$$=1lA_5tFGYpKi(o@uE2~Cbu6ivQr4grPz}hj z!R8bw@j-KVI6JOK5m{=nWE42Nf~?$&e|U#2*0w6^RjzGtYzKbu+koaBhUBEm+ej`b zZU+jm_wVZsrW|hJVF^YoK_B1tVHDPye0Wbh6c>`BdH00o<`C*PrAZ)-BHpJE_2!!>D-Sng&6N!1EWayiH@6}Xum-kX&t z7vdhig(#&xxCixw%V|=qLBBD~YkkTK0;GD|TGhL8&oD<2ppuX-4hi>%FEXUy6SuMS zgiA_CoUY>cvF!>@>oromR796l+IJg(ePFv&Vv;Xo3M{B1+@8nM3RI+<9(_oOI3U6~ z5fvpSz^3+stHdr~+T22S9kT%H4`F`ygf|!)F)tB7SxC=&807>izzmU?;*w2| zB=SUcv0$Dc9$_8SDQ|7ck~8#yQU$TkrMQED1V{{W;UwXH{X z~qqEANBziMh3X?F#XUQO|S@WBZr-5>~=)05LQ zS(Ht)CP^wAR8z^k08|@;CgOw%wpZ&6X}T*c$;t$&3?(~~Y=0=m>-C3f?zkPkz%D^1 zCv`@*otj&6PNQh>hVT+@Pkv&rP+ErKhV9s|&_iZ$!-F;;6#!V$i&A=DCn9A7Yj%*_VVk8Hw#j0=H(LkSOf6q_8! zmBhcKR4-vT$oGX)F}BA2p}1AW%m`i}aSibnQ{`X+zrEneX|(}kpK}OcXT9N6DGC<^ z-VG2Su^geGl-M{k08pWnp74Nr$^aZ+FyXhus0U!Z{UZt;z(I>G*N~C>+n(SUdm%aC zs25jkSX-NQiR7kjse4op? zFqExa{vvUE{o^yDY81-2RO5hvE}hpgFxIJZZNQf1He6VcPBRc=afJiK)2j7qWja+U zW@RLh074WqYkq(65lg7L-qFfjRuk(KTD5er^HU!(R;IwU?t8$!u8h)>pA?l?5N=~~ zA}4qj`AD>*h zijvx{Jw?ByWIB<$H03S%Cf-ACUuaU?1cSSaU;DgzPOnOmou|6fDJno{?j($T0TJeo zvr^^g6HW$N*>#l#6!GWwG2f+a&B302sQ_?KMrN(k>vXD*fU1v~FCCF@RV$?3XlHF;Tpl2SoRNU-|<0DYqSLaWQv65B3KB&>i6io5>+ zcaJ&H_4MUElO-td3nR*vB-@;byXj4I{F>79>$|t}Z@B|Lu(@%S9Lp&bEAKVR;sBX0 zOxwMf)+^_T1|l< zp4Ns`yUga^t}0ZF=!PHpw{hs{c^qJ+;E!h((W6O8lyn4(e}5?MntTE`kUQ>fHK zD|HDe8%QeWBR@#HOTMXwgU&4{9%T+s7Vn757;EGw$Z+g7-DLJRi}sVOxAN&`Wv?+f z3AKn9IKR?1VMmEX*^qAa5=HchiO&gQ!rO@;*blF4_kfo}66s2tx_2A!1&`m4tV#*C zWhIM~((Q~~twSVUDvs&{Q>~_2QKA}21xIy-zfNLmg{;M}7%kkKb5J=?C~2jUxj%~6 z1dh=$N36R#&{7*(EJgA~&AmUf4JI_@J?cn(=MOh6T$>Sp@A8CQHX=BMwHXNj5Ptsv=5Eh?Q&a)}0H>YYt7Ii< zu+P#YD4lxL^#WaTq@?H`NVF>;~Tgp`t7Q>Sqk+M~zm z{*Vq7QPh7P&zR3dQaYtHT}hdnFC>sMzJEy2^rui{T~CJN=s~r?3m7ImwMeW_)Er7B z2ud$yyj9qnU);u-qFI$eOU+I==|J1Kte-F$$KE;L8X3`v=9>@`jM7xReZJ@K7F|EC zpHqQz4_ke%Mfk_0237-@>d42rY;Q`)B4o`rLPk8hZ^8W`S;-b2m`XR0t61$8A9yV< zQA$lED0qTF;3g!MHAZgkOgXTNVBh^=EZj;IIhCr_GFp`{;w{A$Uf^e#Wl5Wza(FGf zmcnsk$LkNZ6#S&}3J~!(9C~y9@Rb5$N}hI~F}1D}{{RtCc8&%$)MEJrb2RgZKiDs4IQ=!1OP4T%u{KV z8jnq-oYVCeT$_@0A+)=T5S(Y8ZyuZ0eJiNy3TtSaLwn`aREHeePv;fy{uZOurHfU` zRIH?AB?&e@xduBIQoa}s)aCp;2RnF~R*Bd06q%Q4tT>dRZ3VUAENwUfzzB0u)EY}x z%S<&_k!Zfstjf!_B-ow>qfc+69Y1c~EhVtwI}qb&N>ne~i$e;hMyXnLmuG3Tq`H?0 zQ4Y3+5sugvjpJe@mAG3Ifk&B7>7J2X)X-aVJ{+M*0kn)BY<&-J$|=2F>9s#iYG!LlS6dq=R5ZvInu^E!7^LQo4gga-CI>OU1^NgSjA) zac=(rSP7{(a@jl>Uk`|Y4#e>dds9ql>d30NrqL-n6SO*{?Ij~3{o+$e^?rW4TMcRU zl!n_I7KXgRL=M*N8^)#o01ujGuBDkbsuPWtoZl>;86+n8H@N#mKS_QFD;+)6sD7#& z5{;~a5K?z5BKZ4uj`OV2HX}yN=S?nj%m*7}Hm{><_h|CMT`p*(7E@htPUwryHY*2c^=a?X|WGj(*+ZKC984B~U?> zeSktq+BT#RKDNYh5J3ZuAmY~?c*u154MNP#fY zNNMD)K!NlM9iuzc8kJffYNyyU`<2aP7Ho=IyWnT9nwx6qJ$HwZl1C8?cAqavQEwjV(#K4746-VcVsW^9~yFU{7SZE9hr zY-8Wlg$Gt#NfjJxMqXIZJ9|Yl;LX)kY(Qaj{l1iyJq!1W&?8g4CqPd12}jZt!v z#g-ijy0|L5HbrfPHL_*xiB?Lt8^Tq2Hfr+iDw^ubfXOO6ex9)RWRA z$5m=7R-YXcPGckkh;1V_6!8r|{{U@1V3G}?Kl3sal}kJg&!NS!%qY?r!?H*S-N{OA zfA@?RXyi;79;CdC`{kgbNC%a12AY^#U@4Qhl03MEEFH}ji>lph=HHYgTn#8KYQ2xV zOba|llC3RA2?qRvAog3gLy0FIx4cHCxY7wikK(>ZA`Y6^3bSNmg=RL=eI}0#n|rRb zo^An#Zc^G05+&}P*W0v_3Nuo5{I1u(Al?l(HseT9!fnRyq+z%k6GO8lCJ+Lp)9x*A zv=U}cK&dKmk>%_RLR9rz(k+swQE)M9j^jMU8=X#(Q^BWakd>SzIm}fsf=wr`l#}T}(_%vQptCU<+RV0C=fW^`nUiJ}|K&)+Qt+HTy0f z3CF;^l6tKDsjDu zOH$<7JB}_h#CdN=d=2$Zo2VM5%=F5z8r(vs)gs|&nQ9SJqTVrAeJq6<{nj z-@IqF?xj>T1JWBjSYowEW6O4~Y)cUdUEvIM{S&>bt zB+RJpXUeh;MsdeHM~!;@@nftiD|{$6Rvjrr>k7g}@q2X1|4>bX6$%ze(6;dt@k3P&^N zbLw(r%V6;|`iEU*-rqYc$YE`#Yh=I3{!wrursr2{)h9y}v&(oTTavrqW_gMn%Z27j z%-#vw552y={{YekSw0c~ZN(BrfEfloEP6dUF%|u1GdUx?WB=Bx7K8Ki{9emVgR7)aopbP9(h3#x&(ULam%)(Il93FGq-W~YLVYH+mTX!Wl z?e&SBJ{*SKdyEKE#}h$+sr9LZY?+!RYT$(fZhKlHrly5a(x+c4aGk{R2)Qv^l%0NI z;DCW+Vs1DeNR*P0b@dgr;aMWcOMLyrI^oBRSQQYzxsTgvsgRUDQc{y~^~d`}leOoH z6)McvlKI%HULt37cC=xnEy`QPrT!I#0zX3f&e*5jI#_cAT5s5uPG> za$v=TyRe}WvgBYFo9bm14-%lsLo#Yw({p5~lB0|Eip9+tv)c>R<2|;T00ZZ?RG}S*d-)b!gW16H!Cu>6593*rC}!4{=|BMmC9Q}5LAW~5(ZY0i(A?q(6qBN(?q=_;?R`)`Hj81#=?(=Jy$}XmPV_U60)y2lA@`m z)Hai!!cC2@&5T@Xy)Ef>k!4M>UY9PkQdw!X30b~Q<6;j#`i9H#EjR;jC*=UcmyRlV zx}~LoeL`MENZWv(-*XJtLU1w?P(r&Wx%4=VUsJV2T}?}sbvwZ%pf*x1`DQEAbXJ>r zDpN<4sUQF@BDgh0fZ}Hgr!wg_uGGHi!#YTvR$>WfH{uEa@>g$$|P&dlq4Z3+yZ>Vi+lUQ5hS&Xf>K8c{bA(V z<-jDU0uL6=poA?;1TN|AYyQ8KN`mzqx3pzDEL(IGx>QKHSFf}SsX`D5&6CaWJ>kKX zX)V~eN`^?!zxVcr(<sydrwR!hLT(A~`okHw zi!K1#w+~JLfOh~cRp}43ic0-H3(~QDzDJLM>-iE^Q z6T7(J@gEtM(sqRaIl1BrW>m1HBE$o18`>k3@`}PO-q`H|hh1bA&`O1~V{3ZEfo8EB zSmHf#VQWg&$vhZLyzbH)SxN122$|5Ol&B7Ie#Qk)9h+5QW6!KB3S+m4sk?%yf)%yW zEo*>%An2NL3fdmHwgvAE7V=eeDcfJU9iZh(2l=g>1Bg@yxYSH{^UjolgJLW_VCbEB z0HtfbFKA}W;#5m(NCx-LAi{OEWjjuJ^?|yHCIwR-B6I+Ekzwf^CX|&0rFTdf9`PRh z^GQhoXUqx2HAP9lvI4Gs6b+#Z3X}_SY3Zvdc!?li2fzG6D^V&WEZZ0vzuxg4YCBLH zabo88HtqI~6-y1Rs1a^YCKR=fOe#5!)|9#q_1kK_Z~p+OVKXR6B`LVR0(0A#5mH#a zmF>iFo45p!phj{1Vq{s41sKuEdwwM<+<*)=cIeA@8L+=1BuY~4kdiNafFU>K22`A< zgO2ecr=c6`BAo=P%2Cg>0cj+Z{{RT>Ys00>p-!9j_QoKIZ)Pvw1P;*?e@MX8WaOfN z1SH$Nlim|@QAsB1QMc<7SGuuX*N39O+Daf`z zz9M9kH4A{W?KdgfLEw&IH5=U6A3+Cjg&q&B;T0Qx5(ymGLO9|u;v0I2B_`nez<7iW z!9?G%f)x%@phu~KFDSM%#e^VY1Rx8BT++90y|cyf1P^bwn2z{?`F9s!0U(ZVXymY< zYz{^&Av=sJ6~`6t=E=TK>jKi%bGwd2C|Nu#=g^n}&_N0XSP-$fhEph3LQXOaC*hTy zruOfcSy$Vz3m;hIOC8rF{fq-wQx2lE$yQ9-5rUFHBK@xyC9@#8R@!o1I~dA9HuvT! z^0MpkJV0y!!TymyO{)g!OJVJbH#Xdhp8enh#YJnojq83rN%X0v2uT)63Af~7!l-Hz z<++4{t7IHzA4st>#DgtdP6zqoOBJ1*b&I@5n=~2s!hnrfQ}S53*Z9{A8Adh z;F6p21)^B6rx`9K1B(Ic45kp_J`g}BmCMlelwuQW|aqpaXaiZ2&XK`ap>CLE>JFFgURvK^@5S`o|;@Vm|O> zgpq50aA2GOS8)TlgJ7@93=)zrZ?0enB~}B70%JKT3RX|v@a|ZRwkoj$5ZwVgGBXF= zbnn_PXgot6N~kH(bDQxK@{?QKZ74P&HY7!6RIN^cn{$pL%}0}Q&8l+>DZQasfim|j zOvp;6PsK}HT-ZqTUl3-XsDJ2oULs_Sj%F;Tx@zA)M6XPCdN}76+R|i3Ve}W>4m@-329%gn zjsgZE5I(EmW9biMW=ml_lZ+2Y1HNG@JteN0FtP#PYjzQ3rqvY4+8zSqA}LhK`+<9c zIpQW{r-1^;>kYVrCqiGTbtMHC3cx(5-zVB7>9r92;!xVi3pu#woMtHUbyWeeC{ZI9 z*%QMH>W>-p zwz3g27!XfgEIQ zmmXnI&gvD@n^ddr5J>KkpKOTFwfu!5yoa2eaY7R%hw^Wex$xEm< z7fNj!ev#`)cVyG9sVx;Gy~|tuhRVnSuDE#OPU*QC#kFEV;nM>(C zI7wBJG=#V{z}8sq4CRFHcW=l}AvxNN;dRK{gj7*V-wuPo(F1y18^mUaHb> zg5%^i7B&&K_U{@NmFn|T^#1^#dZ62AHUPRnPapFhUq++S{{S?~lR9S`Qh)$mJ@~X( zdV|y&ES{J{bQe=95`dRexU38T-XFqJ+yNM~1gYp&ddDX8(<+dgYG9Svt&)-l>l!YT z>a8MjT?Oavq}UQHa(zeV#C-P99cr4Dtu-Y+!7|~{t-#wj^clx!^d_I{JuSLAosdEi zeiXHEIPN?8#G3-Sg)ViTascfSzU=s2{+5i9payZO8qv=-~eG{~|Y}%9f zE%>wQZ|Un84uk4V4!*;4lasBu?(jDxX24`(Js+VpB_^*;X)T3>HhhcTNh%zRetC{e zpyCw08Ejs3vN@Bp0_oV-(bG>SH1X%n#Q1i zNe8P=&7o4yFaFu$_x0zzRBBrGUUp$qAb72~jqTWh-`>XGc$O?I{GOtWzGFv|EjqfU zRVJy)iE z?{2DG6-nIDnGO`Fr_H!x*W>B-iu}}}bfl@kt0-Mb9irbcRHC~kTwKypHr+rE(kQiR zf?1m1B{oV=04E=F{+5X1-rNW>V^m?ZaUL}$+fAvYD+Gg%-|r7(WhNGqlr~gSo@_#I z3}uVcthS<|Yk9W-E;#M?A9%BA#u{j$$M%INT`5rl;?PTN6o1SCS-`0nW@f3bDbkEA z0kqrH@K5^2nbM6?Q!cc;5RKo5#Yh(VMr&D{l{En;F0x8gETwRNyTpYexG9rJnPuWi z2mPQ1Vp&Ci2NIYZCQorUs(m(McWdmrl_c1xB{si%eIf%_$RSf@$$O|F8A5pN@9hzq zAF8uzYrvb82V;AX6tFFedS)KfYv!RgpwnY&?PTt`wGBTp;Z#;pv;P3HI*(q?5u!9*GZV7NcsXw?i5^j&Jz*}b z^s1Lwoia3rZ{nnFKu6&>H#t7=7b-jLCOf7?Ku2amNOi($V5PZvl8}?-QbKJPI%iO3 zs!0upN|vGKRfZywsQN74kdc&Bt^8E8XItNW=J(EjQ3z>mMkw_$FE=h!03miy;r{?r z7@{)Rm=;s9jL_U>pk4~9%vmZYXd@yXIV!1U!;*91YakJ{ivjsWb5)8>K?w@owP(q= z^KZ%|5ml9^x41eARD-mT4ZkrGUL^rQIF4x5`prBzUkY89=3d*L-L06KlGimEnZF6P zi9t35q;reKdSg>l7bILtke5Qi3JLFiVig*(5{(pYPURce0bo6Tzv}~K^H7!nyPE`# zvuaherB03Gk&OPZsydrb5BPsNl&g_qoMtf^&b@i?l*yziKoAg<&mVY&8k(%BuMtiy zWb#6dhp6H()0Pk%>NMkyrI!{qj9d}rh_)g=LRoTyUZ!kMNa?zS(o~m192^pV=jjsZ zl9o)0<&>bL6y*J*6+J^jCxfbdf|4>mqAU#cMTN`VQ~Pnn{{Z4K#@nG86s?%1u+*AA zPR)2Pr~~{!9xi>%OKBdc>1IMop95*hDi-ISc#M;&b$T^%<1mMSQW1UGzdxU7pgXF* zRn;Myh`Lj9tY_2xGaVyLG6@r?WbS&tsn?AyDBxv@w5dutAxI$pu)*%RX;s}W&m(co zg46!-5j9G!s#3m(yR4{5V5tiPgz__J^A?`e#RJ4? z!(+iv?~kwcV*5wcFDgw1O2J43+U7a3VCKZ=Oq^8HTcZ&2&=I(D|Uwi&5us0M9(c>F*XM#UTQsQqRt0?MEHT6Ehs5fm2>ZpyioOj z#C0lSoQ0~s!P#X@G`*oj0g^MGKCyy)No$R5(Y;qOOw&>>C51Rd`|3VWy~hb88{l8l zG3O4l^+Qm%H7Qc1RyMk|fa6VA;@8eC=^mDs;R%!mo_>FbWX9WPvwD&7M@UwanVr*9 z?6QVh19H*<+@}|p;fLifU<~yx##U3r{CtaVB(+i}|)e0tD zutR7^;>fu+77?52Jzc42x|yn-5=C<_q=FJvwIe>Z`bVjc;W&|M=QrY?BkmkewOt0* z^&LkbhospO=wZ#m=}Ag*aC^qPN}f}bshgduFv^mFhSh`hy}#BzbaXG`ds+0uK_YWg zNU0305>nHFN=O9Y`EQ%paUO%{$HgPvUU`aqw3~ssruQYn%B}^8?vHO+@U?#p)CVTG zo~EBwh^SlUdQVmBdO@3Fp+uXz=^!r3NyjI?JtDta){E4&L{p{e9umrY>o(@tKi_zN zC)1S8O0IIFP(x)c?Fk9LZ?F7AKmI?ErUxpL^N1@z^C?5jJ*;?-F*Yfq*qvs}e4_F? zO%)n9%xYzcj|dATHwsYfKuxe>#rt&7^!~=C8ygk12^QQ3sEN zQv@kC0IJ0Iwa0HreWCiFU#-igYNEhXD*!D=l#qF~qoCAv`Q{STirG0^+J-_m=0K^5!=!urgfWYpC{%p z9L=p^h^5QwmK|jT&ZWSzHmcy>5LHOEKDVXUyeU_>7X2bihP@*kmV26{wx^eI;sVsM zVZyLtPEuxB=KN7GE=F#s%VjGv(h`Nh`nN2Rbt>nGnMSgbl$T5Dsx|@;ONdg%&AY;E zjE)Zk%d_q@JmFRsz~<%vYbNE$MAXm$CiXTLjKS`-OL)qc4PCHELz}R#rXi(AsJd!> zp%DtjlUg%2I^9 z0pTQCCaKjzmdDJf=kXZIXqv_S#rlM?LRm>Wfw=s;M3VZoD(x-TB%0r43#fM=ltu8h z(#m7V2PDlJe^ba)#f3p2pTaH)ik7$Qbd?T4Q*TZr0Bk|qagR@4BQ~$~2j^S|=M;iL zErcfuH#iXuL!r%UDZ=Gtx0J$(R@ZO^je+fa6O3~e$D|53KT%F{#+F#v>lJTT)mQs6 zp7f(F@ciRpA=}?67B}Pd5mD-`erk;HoTEB~&6cwJsu|>w#y=>x*EBk0nr?4TPa|k) zDIg~(uo%2nU!t({lMB@IOiQw~0NR`Z!~T}P=N&kP4cnK~(oOt9!RBC9pN#&bX!&<# zDl_Oy);<~~!dy7L{{V*_y*Y`li~LV&-l4cAr*$xu{qnpobqj zCzvu*Nd5E90yg@PlDm$7_Z5%x_epvsCW>^`rXL92;($^vt_T=C#C--lI!w52QrP=X zD=TU-W&?MWAAjvVnIqMTjO`^e6q)IV0NRw5G6}!d+(my-^>bRYGqw8cvr0j*L#jYF z`wO1Y<#})M5vR+f(QBZw!IB+<)VH{o<3Tdikrh1i~7bZ)n^S93T^a z%lqOzeJ8;R8>z{g;#^epRRWtQt)@O$))0o!NtW^7+qEX<*T^RkqSLx5(#=UpD6Y*J zgtT`S{9+QbY>=doZTF8F$aPY`CPd0-*S!F2M%;V$i8@!r#=obwsR=2ER+T7`YYmz8 zu|NBdOE1IqEGZhNpN~EuZPxzs%kcrzeLGH^m~TgD=R(0YLKNbYdtj#LKdfXj{XVQs zw)E9_G}^6Z+3_r^lf}DzBKa@Xyy6r(0VlcjH+g*EVl?GrKXA8N3F3JIq!!$ z+mh`rLWJbHoFFonn>Qbr?qk+nDfn1p_P}zkxp{OclXrg-)Gzo&)qlKfbH5C9nTni@ z%{FP0(^gW9%8%~ABab#sulYxrsQB{Za1{RlY1fP4*<9T4-kkI9vr2tiol9$6 z!6fY<*nmAT`o<|zpy{ckCXq;`hrB>RbHlZP!OuTy$2Ob)03g)la{iyR>do-nD~JGj zo&k5JPSX%unv*JdL?b?Zk4?*<%qYb79GDR_td|` zM@s4RzuOf`2y$iD0b!-gD(SH|@{?nHbH*cLr)j>0=}j9fbu8SYNNtwNlC+g}#1{*3fbM>Qc;N@^2I3R;q5!`JT_Z&iA?qIAt>VzDPqZe%|A zA@-EC6x<&sMsfXP9Iy3t8oFWWuN}**gg13^2=wh}z6~x-Rsg2J?8s)wx_sNH5;z~; zZ@okKoT67=o0g?M+p;?@rVvs*Ea5l5`o<8wM?ln-q%hS*61f{xv%$E|FY6WL(OjHq z(=Ag=Nll8#QT`*|(O9NVGfmYE$iFaLVFYh^DX<3r0PP-@m*Mzvk0j&N>oaCUeNC}O zsZ6GZWoD(SDY-2wT^Cj^d9b;PO>?OFk-67p-BZbQ0+l0fLPfyDLsh!RPt!Fo0*5pd zmNB_w)L!`?SfgqVtO?rFwKkSFD&*U}$tF5*Xx*CFar2NliAqya-7~HABd)lYQu4qb z{{Rn^+x;RIp{gfV1CuIrD3j($$;WtzrFC*`Efy8wl(?G^QZw|#N7c1#v(Kov_(>!J zW7ADJ56S@`O^=*?HL0c)d=}lmt;S3@UZ9#=iESq-P7SY*=@8G=kn`njwYK8q1CRL3 zB;{#oQc{2cDZcLD{UfMiPB?;%NlDq|Igo^dy7snj$@|1~)Xwz>7NKi-f$wkc^@fhr zl)JjJd*lxOu!D}Il`NBBcq6u91qO|@nB~_>rfe2SHVGH}FfKatLt!GrBL4t*U|n>t z#05Zug>AR>jx$qbwRow%?@%CxJ8B+}G24?YIh-X2g2_aGK^8 z75LSQU}hRjyW%VhStMHj0B@vEd0}QUslH$y?~)Bv_;;SDqh{gjy+5=nV3)jl^cv)n+Q%~WF8A_T=4N{*ZSu7d23d zt%t4xyNi==(hysvr4+d4Nx-$BU7jn$Zj0Xc{{UES^XpRc_apxRQJIJn07!}nl9Rba zD|C+=ZGd3lXQ$4-Q(6#_5q32wGP$oA$EOxjd!YulW{&Fy$xjyn?ova#Z7 zHxqqHLU&mH5rG6kmatN*92}Dht&o-99+nVCCCWhn3ywfAg!znbNQ&D{@H6XpXyR5@ zPBJ-%f!nB}--O!aLT@6%!8asx=@4V>C^(FqNk|s$2q=?)h;*h@Rk&mm=>-z%Rmxj8 zy|5uD198C-vaAJ_d-uc<$#PMC-Ha~kKsMQL^n}Lno(LSmF(h*wRBowoqvj|70H^(7 zHxRI*N2Vdll%%HizI#G0t;<;bqD&3KID{ca$R^k4Fa+HIr8YN#$u?4Ul3>9lAOQ*u zbvGg)q$zd^BEy>);cvi|3m!rChYD%6WZvh2Xa&loCmFO%@ytBc#)?8g?VfGg1u5d< z_Q1S263I8Px0`_j^7}{x_RXMQv~Qf`ZEDCVxFY2GLNhZBk+rngTNl8E9V$_^&-=j; z$?q2MJ-&MYqz`kt!X^TCu$Hh=|&-1@Cc@uXiKssG%Dl_vUYtegN~6@JlRrGrDk%T}Y;6^(i8&{x zl*4E{c}N2O&>I=!m=~)Nr5={V!)tl<4aqnp_k?O88&uktfNZQqvqkAy3Y(@vrs|p` zlGr!nCos=cXb0)~v9_!~iXeDA%8*1I=t6ds_P~bjw2}!a0IQ4o!>3m$(eO~; zm|&H9`od2(3Q{>X^?~UK_L-n%WM66gpf(%BmR?x0P;w8XEI@H2yWTvXl)q7k8Ri5J z;vdo$b)=@sLHcGBvW73(2<~VgoRpt?UIY`*ya7qufr#sl0fy*74h_!Yt9s@RQco85 z#3U3!@}JfeWx=>zFg+m=?J`YI%%uq*ShY*D@=buDxZ5WDL3BKnv#urQ5)>>x(I;1u zN*=PXIRYZgNVwOxi4Qe0u%e_a@tnhCO*y#PSst+dc1=4AjRUsF7UCk_X-HQFAlgs<;loK%h_-!TUB<3qnhM+q#g8!VT`LI++J6_U5s6Yj z-f%tP>k`Ut%i3^zK<;k2j$~X={6@sY{Ta2W5)^Ig5i%^5r+tAQ@hu@U;I7RM*EZr9 za3t80IFn3-G?0=qN97W>hFrL~&@-#kPcD^ivMu53mAku6DM#CQ~;LgM7xm?Yd< zz9xgFYg0&H?%UdJ{3PG&h}?QltLqKSGTUKfElDHHY?2gvUNLMHEy|*XVN+}A#LLyTSZaAHz|H+J`DQ%>plOs=<%F^G z;`eY297b87v@5jPCQ9W2DX=%cr*CiXyl8YMOAe$U+spYJM;nmF#O+@%a#yGVm?&>c zB$kM2b|?bea%0CmXQGe5BmfMI+irj2B0vE{t09f@_vY%yinS?hm3#nzzyH9&y zTk^G|#XV~29-*l@KVO}%hQgFq5OHLc-#vlP^p9IW1A6m3Plz!M$n@vsJfYR;eI&a7 z0L!%|kua0K?b$cStYnk#DSDda)Ru2xi{G?c`jpLPyR0XXBO&3YU80clnF{icPg5D1 zC1+)-B{T0P_xvLSN3oF6=5uMs0?e{hY7&&&DF7u%7fKQU07TDAHEgo0jL+1YOMxp2 z33PHn7&(e9O>LExI^szq@RdZakDry1+U6{hHUVrK`@ynIvaNGH#nTyGJFTh6oSH4} zZ7D6cYXsl@BQEQ=!=9&~nN>-N$uhUsu>>hrLT-IVA`4A*dRIy5ma5Y;-WJ3pr~&~v z0C$BXz9o~YWB4y5W3s&hjS2sUdX+m7?+Lsk^ z-_j{smZ4agn0cvLN7kPdg%U23ZyukjY8f3%A!*5$%E|~U0^5h!#9W4!q}19Jx6sp# zDMHC@1tK1v@K_#-+HGyq}2A0 z3&2*?091L!$*_l=H~3w%2z2~QcsYC2|Z z%{iu=W{}j{LJ3y&fJq$kEPDYOvifCNo|r_S3;G&VL7=~&lu;}N1D2w)@mxX zHrh<;*0)}9Ygiaf&F#)3-#V|LdOKW6u1$$AmwCx&5~jk4xhWubj|=rb{5HC|O4kdQ zqrTeEw;gs}!k0EBAd(VDNy!+tW3Ne<1EJb^`N?EQ8GwGPxuSGmsIpJecU2l%(oKtt zKm9zD7CO(wohwRIoTF3Z9(Xn`%ZO}P+yj$;e@MsrIYHLCMpkP|^%G6ZvQq7sD`7yd z2^a(mj2y+jsi*03RRjkZb+IvE1BxJm0JkTc#XL1($eSY@03JOeHE)f&gLCVq%SlW$ z60!(em^tR#y`tgM?}%xgT{?+1rv*cEmnS&I$>TgmN!31p)Eb%nwLp+@#$Id{VM-}g z&p0Evh(4QE9O?d~Zj)JI3YFXdsU&f_iJtkS%Ew?kEaBhWR-VTGNtLd6!s_04qS$zng7EqqW7h zz2g3v{{TqG8s%zOrtyw@m&$vxYCxKmp5YfZUq48hr_G?up)(U}AdzgJZ`0l~dS<+l zmMzJy%6oOdCj0}F7b;C|Ql&5R4$T2?F-5FT*SFp#_}xJjIx*!9-1P5BYYo$wX)91F zQ)6IR!A-yBFVdeWF*GKo5`{0hBK92jk2&%}`&vA_xL7>(6Dk$5WT#jwOi~yVYEWC7PmuQf&lrqerCw^GK4!|i zHFr{de_X>Zymf+z^;9NjP|LF6{{Xbh&!iG@a0jeasG6ox=ET~kMXXNb5p$1W&mWX` zTE!6sTN?5Eu+LV+Nuv>SuBV*%rN~TqBFRZv#T%HYhjZLb_>^l!@ z@evbq6$z(OL)QuXDQ#9H{qYfV-A0jWXtOaeq=gFsWaIC|C05onT61Mj&6KQvJ z+VDbAlp(8wB5NADr7q&qxQ zC=x!G96=|v@|sYW2nRVS1dHSSB9u51T-BLaNu8fdo75DQ{vE{FbNRvPntAr768UT# z-9p#CF&8O)De{tNQAqQHxQ6}n4rM3_bo{?2Hn3Wo;xi*4W zNdz}_0B!l$!7jj`rG$NvD49PS+or`+fwBqbdi?ve@tRiHREJBUP}e8H6wr;xOwe+Ij3mR;yh+mhp`A-F3jU zfA$~%Nx0y{{U=DFQBVqIiEx9xMOMwv`bSFz+he%^#Z3{!%RVB06Ev4lB@C3*njR}w z=N6;_qI|#tZSNmDJ|Mrt3#@uFxjkLdH3>)Qt=zXJ`|An`+nu&<$33z4kFv5=N^HnW zF1m%F3s~Cs5jrUvMzboBF(SgR{KEd;vEQWl#;ZeB$ej7K7Da9pi1K z=yqsID5c93kZu&E6<;^+5=oJ%s0B@eKo>~^u^&j_&G8)hM%~;_jCxd2WK7DrL#j76 zBxI2IO2|u=U*&6Y3bmo8P*W>9w-VUpC3*Ml8ZecYT*wmu8xVIAKUjWgl$n(TDp)OC zjGK0jUmAe8=N%p<9jQJO^oF%A*4U6Jo@vrscoC6|5o<y&K@%4XzdcRH5Ie&pMAg|BN5&OFNh0LCgMHOut6gzU-?+Q>;D9jXdA85qQSL*lRD z;<-Jk-V95)v^wDM)|S)&!UilY>mF{`-{CK)7xj+8hv7M1w|?St?$v>~3j0l$R{U>L<=SmbO_V8P zcICLCU^`&LGx6UfnWp8QaoN;9k202v;QD$00J}$wwLim;#PpgzRsAgTgCM18Z6S8I zJ)6S@=!)$< z4lt)B+$1D4R0417_@Wb0{7F+~swhP+=u*@+xZo#g?ZSbNm@@rT)Cf(RdDP4TPUH)V z_rbvL7p*6#I=!rtgv(B>*?C)uu(|DkbCCpm4-!7%*UmTmhGMln`7QAqsTDjB{OSuz zXq2gxsBN&d&DD?ABqaVUX|fXmnc9NMBI_-Z0QWv`Snv*})V*oYvcDlYHt1#I0SHJt zt!~?I1EKWiTRNtxhpF=OA*NC1TG}J&V3Bjrq+{@WOudQ`PO-(Csq_N3@#jy|%)GVC zCG;&NA+>OQGrB3$AL1!enQTbX(%UYpDQqo7eZW>D$ePdL@2<4UYZaNQG{oGj%Yg_} zC|ZlQ2N7MC(E8qn9A#R5qboL_E2(x>Ng&$b5Jkp2#>Mbm3H1gS_?Dr?3GRv~ z$L&E6qE4{WPK4P(UJ)u5IkDeZjiE5C0&!`%wB_(Sb zZf0XpR9R{8%KSE4Y=m5cv|OKI$E-!VGaZl5l>dYhm13p^@V=$T3^%`up_U2V!KL`WT2`|+)5Wy8H zd3|a(CCgabjx+ruxaraQ;y^nBEX_$(=_R2md6fR_5CQvJ=TO zY14GQIjE}A?V+`!ZXZJ_N=1Op&tr(6t?Eq?q$S*>(kN}INpON@8%mV1>P?0Ck2y|j ziIfuTwDN*g!bS*)xs7{Jb8}0WQnPTPtC7zzt)$-8TZxgYkv%7&^-hC#lPb|91y5ZCj3UH{{U`htbhA;I*F?F zvvms2vYKtO2ty4#u-kV{u$}fDzbKs5KNadtCF(jg6x746qs61mW>&=YJRsNA0fzX`b5HXKjaZMsx)Z|w*wdVJuh=Ohw-u<;U7;Rf6=Qc?j{50r>_D^0B+yKUFb>IcrNN$&9n*=UoB-#~Ua@0FG;7PWsXjvOkdjfXYScp|mB&Wqvg_JY7M&D?!8M$^= zUPJqV{8tyeCiPQ!4mPqyz{uhOWcGw1W89s3aks3E>Bb1`OcD2;LJ|~3fc)YSsq}8i zB}W(*?+y(5mY)nL6q9j#e^^k>RT!Y%#Cm4ao#QqZ$0i#*^JN>ijo@?GW&uh=fZ28y zz6I_fqqo13;O6!bJ^PoKdKVs-&>a`B@`6gZ0ucS$1>GPYKq0R61zk!9>VLaJZax&E zTS*=7elZHICu#4=f;_fJ2?`e`_=e5S5K;&u z(2ygXcwCSTkFBCbh!B8BF+vk_i(1%%t7u=B?+7_Ew4J47--zJqlmQ@&C*iIaW%$DlZi35S%s+<;Fa1Uy2#>lw+sH}O!MZYJY7f~f~Q z+W4?Okc1FyOaQp(IGgRgiOwJv5-wD~yf;b;FVEP*jo+2$F_Itp*JkFVAw zpO%r7l6l23@>JXnaBBi3p#tCX^a)Y~vc zO1RL)>S!5+lP>LV|%F(3x5ngzH%{`dh*x0 z*%lW#gq?KQ1s)HiMu6l;++zue4-I#)$n6N3L|W<~lh|_)*1UqSPCYPT5`?K)z+c?LJ_|(IH_tty3U7Ogn?kB+W3x3d{~crL8@55#Jn&r0<(Mb`au+ue8cpIUIEBZ2GCWok~WnO zXqza8<8&k_-6=eQ=7rg1B;h9=qr44@!cQ23wiFZPH$8+U5$QFLNK-3v5(Wo9lq!i| z1aDQWL;-N0GL{A}g9UliEdeSd_vQxL<`E6Ol&qyHA82taP@0w6_3tB&R$QkS_-kgmWSM=?`zvp z`63Z-bwYk|M{9FoI|GWa78^+)>jYw~^t{qvCg2>}5`F4;AND-Mg%xuNB5ql=gSObX zO}|(SSbELD9ZeTXSLwwmoNy<_O0JuXWD##zHm%j{KH+LTh+$c+J2>e5_3?}Lh8cFO81aBfidUv2=Nw99kZ*r5J-y*HrIuOn+axHAs_?-m zU@WY;Vv&59Z!tDXw;_L&bDO)CF~iNH#84y?esc+_POtFTi`y_p6*Dlci3L_MWuob6 znWp!Klx<=ONib^o5HYUiKj5jg3#S%>sl{z53hfSZadY>C)Rl!3&HZD@uX)jN5a3Y! zFe1v~A52Fmfty;~-@I{Fe5uX3hY-O~Bzb*cyD|ZTg`^u3%yPKBzR|gZg9s2Vama-b zk-Eh5=>picP5b>IQE;%U*mlewBJvEh={e^lC5npe#f(@~^5+^3ItqapCoxZze77fZ zMX_j}(^aI*kCh4n-N^bx$Q2s*81~O41+^x?jMxZaJt)!0PCa7OnLnIt?IQLf_K4ZK zXhQrjpJF4LtEqt=vas~Jn*2Grx1=p6Eb5bRFMODqdWNMkNkzRZI58fnS(!DRg!_nJ zoysjvVJj{Kl@W80L`+D_q$|T%A6Si)3oj*B@4*o>B!KzyjNgEHf;ccWM{QGG4HdU* zUlz0sstYb{SUKRtoiPA4vCP}G`7n&+v1#yCw#4S})Bw1bLO+pG3X+qwsPK@SMT<>J zy7a;eZIW+tIOZ!9wJk5CsV3ZhA9%TG8H6_KNJ%;4?am_-#tv(Vtn{js6+9YnARAyQ zHv=O+@$8O=vq+@LqG86t+`AG-IXE`@caI+Q%}Q=*A)Bd0THB6((doXKxbui=S+b>E zjunn=bC`}qEPhk35dms?vq;qG)fU=q4Ix+<2|2etyM1DAry#{Xm?s;SND02~*FUec zQaV+1%Z8oGw}4M;*kUxwgK~2e-wt8x9fVy<_Kr0mKL%05R~^hZs~W~bPfNKwGvx_w zN;h*j7w$72YwHJCH14FMy-%bqODaJRBod>0i;g{`(j98)bw5#uROI4oj*^#tQQ3G=V3N}ZyyJ2NdM z;f3EED~@=NK21EkH9;j*b+-$t3k9`s4e)LTaTK-gS_>lh7_o(5RMDME>ch%p{corh z3Y|4F2}-u4SlPqv0jBjGMn&7Ckc(iGo5USHl|3}??i(t#@fHm$r`I`9M6ALJ3XS~d z1Y_C(B*sN6H9M}WP_P{-oHg|ziPdTG^5OtO}ew{C*I!v-p(5$2F@&q8`bp&GKktgABg z_8eH0ZAnt>tCN)QJx$}-JvpK2`B2Q<`dKR=3)m7pqrm+jpL0l6lA1${34L~TMK`&+ zZ*DtBuR23edZ#YitC$ukHVzYH;K!A$CipY6PNKN(dLoOe=rWTHDYnw05>v4l7Xr~Q zQ_|E>Z7TSEXv|_Xcr=I>MI(?>`a#n6!8F!fqM~H?A-IR_%#}Px*b8|Xb@XWb0A-2b?Fn|!Qn9&3D&pey{_h^H zC49KTndTj+%)t8dGzxE8X`eh3JksTzN8)Tbb9;{e0C==WYKk79P5eNm1cDM%a((Y? zM~*s=Td3Bl;;*KvDM@wPsVh+dBn%8+7>WLs);fbkaU!%v_ZUZnwv5S?o657FXSre&fE3rR|IQG15 zIxtgYsUJB{eMul4!Nm^bfydS->3Z(3LQ-C4YUNklm0!2|$0y>oMEj3v&@ke>n2n>rP zbIHDVi@uGcRyv2#X_{;G`I#z<<9lx@@*F--u5xXk=pxIndL1pP8YraKoM{8`Fcv^Q zU_kl{Vlw`(D_r!lQeRe7{39hRWF$$YM3a&?Ue*!FhsN5e`J=Ynd(KXe?L6nNJ{vmG zJE^5LTeW$Kw;6be#%5-ASb{91-CkfoI0KRI5Okip)^rBBdqh>F9#WZFljAM@$ttlH z0>puc^jw!*DE)8Ia~hsTkut>GjH}2)Z=?pvvGh^Lm!Ej@-6NtMPU>ZDZlv8kg-)tr zcx@}rPA|0NXVZxGwB>TC@wl!hn~_c@0Xn1imOi6(_NiW5QndFL+wBmfrL}ohK{(ic00XB=(KcJebfhhYru|+RS6)C2Yv(3BRImpB`tLX-{ zEf7-}k}S+Ncy&8`Lwoif(blVgF4@jbK;flAm+_^pDz%0us;QepK%^xuO)kMcpxfRw z>W{?5b5To&Q84gs*9%IN59%!ydF?T#Dtc9VY27^XC*>D(klqQu^IJK*RV67}wthwL z*i^NsHE04z#Vd3ED?vdziFzi=mo>Th&@x#Y~H_f{10)`b#C=Z&M%D!R9;a}H43rM|{D5K7I7DInXQ zSmHWdS!l0P!zsnX9%rely=c-DjW(5;(c-vl*iF^A5pPdX2Gcs(twAa#+q#mGdmMMQ zvN0Y!u65Yes?^B|$z-Jsw3O~Z03?+kQ_s{z`%U~r(R95iw>IOJN|oV)00#H;KiP=C z!`*9Wvnn;}cy0vs)|g?ri7>YIpahT(+l>DJf22xCX_dU`n43~v0^WU@KiASc@6un1 zc6AK0S9Oazq@^V{0D=Di)f@c}Rx>JoDgHlX9HKqqidAJ!(cyKGGT1|(f zrWG#pN+l>H6(;zVic}KF| z>ngRX%4O!UfR`5X} zlbqVoX=-MDy*^(Oigik0k+nGB#t+qptMrPR>u%E=@X~jnZMq4+2h;xmP?&KHjZ&F1 z6kln2oz~R)id3EZoLX*En_JcpZmP_Ll3sb^wEi#!vwU(R1gCYm6$#Pd$^5^H;#(nR z*CgB5`@CyRQ|D`xW~SM5drdM*yujZ5u^kVC!r;iOZx$tpYI#|7-Ir9qHY{xx?H{Ow z=t)b&01hvMnDeb#sjB5FZ^+YR)cRDlB^wY)NxV*U$E+?=C&rxAQc7ZNE(ExcZ)>Xu zCIji1rNX(FeNRfu)tq5vA=Oy%m?Xxi66*+kc)kf-ROTyX>S&&q&H)K0kI2P(e^$u3 zBCnWyjiULm_rEd9xUO`Zl{6u(Bwc%IUj86J&-+8xD+znbx4ferrc}Ox5lNEnt5* zaVsjsyZ->WK(+Eu(lJd7*2ZSq4hf(_oe4R&Bzwk%MAy>ujs+!PqV_7k{KPV0$fScR znURIdEkb|g*JL@LK&W1qP%b!xyr0F*#7DU?BRG)amyQ4st21(vqQKaUZ6YPKRHoq{ z>a86~)J%sI%SFHql%~P-^@eo)0WOI_DKZe^0KiZd{{V<1I)Q~aWrN%jQlDSe5}VYH z)9j_aa8H*!2r4oGLIbgnGQFwv0%%2U$TAYw@TH_!WL)=#Gnxv6SEeO3S!SG4hV8C2 z3AxN!p6X34z$B)K-D6^S9{j@^oAMKsxrwS|!b|qLeAdn4==lH1hVuVdJq$@DpK@ay!OFsJ;|*?@}t0nvMNCNLi>cw798Mm7~gY$2t30M#1q~7=(1|Y z4d~TFx#4PtoMhPEre=CG{3mI8+gVGuGdLt99hh)B5W-y`3y`cRa%?TyJ%gh^!*8a& zE`D00NJO)!4VKo2r4mOV?zPXG%g<<(>E$x7r945TlK$G5!b(`fXG<}1vt>5qdhg|2zY-9gj( zB-5_gc#cyWCf3L|8UFy7n40)s=r2qv39jibmQk5X)49f^X{|Jpq7LhXrrdu>LsIok zjXf&sY&Z~tKX#;yq>Enp?;ddL7sdXq(9<(DJwTTYDGT!avsDNbV&L%~we1wxhThS}vq=0YAQ~W0V?Rbh;!#_$Y6q4li22sh7 zM#-fFg^_&Rk$x;W&7;o!Eb4sER(0B|axybXlKf(2K|Urnk+%01z6te>2dkAWM@7(6 z`m;~WJm{24Lv5=n{8lEwi5HEMrPYpDpHS4YG{C; zERqJ`H(KYvB*%&VAbuINhLvf`jFnlv$bRZ+mJ&RnCgXPF-qB9$7scOKYxRd@+?*`6 zD(beluu`ITA1~rI`U`Ox%p2u^` z)MmikD%4@A|I zi)tHQUi4XN2_;)j!T=k4-Ynk`KLXt=>28m0iVVc-j=17Lb>(kyLdNPoL1BT!dmoO| zrcjv=nsJOS`1dH{c*>H5%)W_tNkU4yCN8vX5Yz2A^6PT)sX}hpnQ2#W_O*w8FT`o` z-wueOQW^gMB~Vp0I_gf@$@N*ZD>gl>e@sOto2443*WYuf3n>z+C1{pigQ~x;)JJOS zF);ETXE6tHu_)CIKU;lE3PQFe1n&mo-nfXV>RXI9hD*v)uaHsx<~B`tt!K4*4Kq$s z<>cktP%2Vd+iVbSQ-8`SbzKu9B+txL>LK@DB(j!;#l`QF$K?-A$vG1e_9Y+8)j6*X5?&30i_e$Qw!iwuFYBeqpeNNmGW_1H3rr z?=ad87{%GuIdE35VR%HVYB#B0Tg0Q9BTy-z@@0It;DSFZh>M%0Psk{uZd{_?xc>N! zYy}f4p=*dLn<~11Bk2R3<@h={p@ZZEj z5(%+3;CewGeXt6XiwuA>7TzfCfDR*vCK81M;t`AhOcir&?cCxo>4;#doB6y%j2w3m zk#lwi?3~&n9G;^p2_m`mtXw2mb}$UgDbFB0 zcN=XDM+`V?+HIranqEWsCvY4ohkuGb+3>({`rL6n>)5{x=6$!B>kZXdXgWs zoG2Xe+w{aDN*dQv|2Oxv)4Q5q-h7=~2fpg^0OD#w3`jIHC!9=GGvb z2<24Pv2&Yan1&NeN%%mVRa-m^y-Xha7!39Z4 z2HZiA<1VLriy(uGn?c-1CIBi-rfd}2-^ImeC@cpNyN$iV5LNuv9Ku^lK`U>~z|Royya)s;*7f2ExG&5|A5Ow2%Ettg8Mtha zm4$PDc!tk-pq;4-y}pqm`3PjRB)s9gq>x> zbnnMvB0<2CZmZav3qlSc1Hj#Ei(`n3C_MVg4biEVD;EG<4C9z9vY_6;Tpq$5rKPQQ zMXVr;X6JfrNH@vg!WH>S15!Q4looc2<_qDfZQ_8 zkp)9JfJ+Zv!~zchLL5vMZP9{d)pAxX>1aBv*ts0>h;XT3k$tBhisvxgwPh73V)?uw zQaX)b#LIvk$vk)e09aiPAs%(A8oZC*6a?5PK^J6;j%{nC#H*g80k}twycCk4tK$Ge zCtOK4xb?sMKq*!P8`jt+x&vo0GwgL**;I>^lNrTxT1vgOPL0 z5hz$y$=WSpZt$HRWBNz3v!D`GGv37W4--&qHkAWxUk33I**sr9rUgYH6ettz%mT;K zF3?PSJ5*Yd0!}?|Yea0z>hUkToE*Td#FW_L++4$VLQtG68=mnp32P=e6e6w71C8V! z)`d|r=R3K~GHt+>06+;R?*>!i{#+796T}VSdyEB%EX4Dc+u{@LeqhO;N^|05-q93? zR8$F8JLUwfSGrBF+q5p?!-zJEl53me_m%`_5Q67yNh$|8&mtHXlry^j07C>?)CT0L z+2$n7ZzaSamj2PeD96`?d#qI zr~`9@_5C5Ma|=0e4tWqI;-r;hn-ShO7sT8})DTJiZQ2SIl6%4>)Sz!9pS&iik10^i z{bFo*hy=W^-iYyyiN_Q1Qk<>2P7>fG<7g)k$W19pvX*QP2doiOVG0;F?}%0e`pgV^wt;K+u3bYI zf+lIERtd2K))_xOw-sbycDaO-RH8{B0sio$8s;>Uny3Y&6eJ6uSWa3+%7MBR30D~X zVUculM}J(xl9R4VKjNh$ix`&PDihZd%}?o-W~9(kA3}F_B!9de{+j%u4X$wyxqEGG z9sdA0ZB5nF?gX;IC$R*7%si-S-`V+XTb}+RN8vx5F$)n(--{5mEF=5g#PMSh8E(NWea^ zb?NOD)Vv&eR1}_WN3;e23YiBsWvfooUUFRsB}(1(yjW=cJAQg~0HsH9!2;1gr1Z)i zLty9c?T3{4f*IG_Kmx|&VL*+}C0?EG^u!q=tkXANG znew!%q}@|x3c|2<+8ooV31EjvB|iMcvZpNSNLPZAm5YvWv9+7U+QUTSp6rH2^Y_1?0 zx{LwhXk9d=7Zw|20h^5QW6<3*m3mkuE?n8n-rycbue@YkJC&7_n<1o&kT&+eylomf zZA`w0Y(J`3(DYlZ8rzJQb`};+%R=qnjDtvVXHrH%o->HsGgfyUQLO*#4tgE_# zYEzA*7SnrN6MPJQu>()nQ#AXs^JM{Qxy^t$^@|+%RQXaFY^e!8Vgbd+zC>24+Ie#* zN<^x!d|3H__rEc5wD4ye23FiXWjCstHks7AB*)LV8dlBaN*5=}ex9-6{KW|@%|5Jh)9+{;-lc=w)K)s(Gc)QPtL0BA7!oOGR}OA~MjK7!oC z$&ZGr=9ia6Ny%lpqi@}zl__4leWP~JTB-JA(My`s(ui_i>0ag&bq+UNeIrz)30*-* zL$q?sOH-C#iDFbTKiV$&LYiP@LKROe@_$b{WjH4lGWD55inGCOX4W_7h}m>^!{<)w z=jLXnP{XMFPpFigqpr10cA#&2KD&b1pZHwf^TTSR;sYlMUEL6ch za)h5Rdqe$ms#|kO%}JSrB`nLVq=cKN7r*HhE{pZVE>+Du%=!wH@_=t)zZ`=K+t&~v zMM1wK0&ZS9eWg_=Sj4jSHlP%e(Xq&nQFLaVD>EPilI4(;u+epbOh^&C8ZR) zY^$3Ka5(pkx1^I3CGD$mTSz2e0tiyM7PtCF znTMatW>3>w{I!jqm9e$%OmsA^9??AB^JaPSF$L{p4wRJvfT2%#7iSsvXH0o(TFFy>3X+t0vET35#_w3^UYgUA%B9pK3Yt=O z%ekK>f3xozM@Mvggp+8Qa3^xGP;GyvF&8~ipeZ#eM7E~W=T*`ak%8^$98aug%Vf_) z>9MXbDtKqAdJc`FYfEm4P!jVq3=iKCfHx2U1zy0#4_sIJhfSfiOJ(r2oBYJXhzQy} zl15|b2BhdNnACC}1kF9a86a(Y!$?v4+A?0Ed?nInsfv)ElyU1NMIVHo#~84V>>AX1 z4cznf8ceDQUZ;GgH)IX&n+!o39(JN7EgP7$FHh2=JlMEwJKg+t&2ic zFsQN@k8IgcszOX20|4P2)vkG~}3f{GC?w|1d+CphHxz4?ouNxG}lO({0r4!@_6 z{Hv2m3VFM&O(c*velF3`sK6P6W2l%j2gY%?Mrv}*>&-i=+oCqwrkHWdf(4RAuWO6N zp{a?qs0XQQWokCty-L8v_{a3bM7z{R=(CL}Q+G?o?5)Ph2H^LxBlC`&>SMw3?4p`j zaCcX4Q5>W;Ks>Z%!+>ZXSvy^?%1JO4;R1vUm2R{~Ryvd=l7vglG?2e22v?Z;TwB}n ziWgP&POGBO(^@i<4!3K%5^hI7%6$O!jQYJ<>VB@$>{RF!@LO8b;;635Wh$`(#Ebo- zs}`6r8;=v8CZLuh(t3+W>en8o3E8Q{sCYvAh#9ap{{V>4GzU>!oLW%ZsBjh9`|MHy z^&|9;8PNK$?ueF`qH1cZzBg zr?mc&mu69-OH6=no12>xbIH6frI(~>^MuOj^fY&6V5naor`9BvhGriQsT;zEZNg0GbYZZVm0gSf1H zr}Q^ZrDPJzlxY$O+Dei<-MxS2Cg?pe(FJLlK$c4>NeD-T03VTxQrc1d;Fxd=0#X%X z2c$_-s;;=fWtY`pNU=N-+dbehbN>Ki04PcF%>MwZ-{H^j$<=*x{${GsW)nK&idvqK zopA{&BolOnTG48d=tocbS*MxPx>HIt%&ekPmQbZFOI3guJC1N7)kf55rp%yCJPNPH zv)V6onx>M}@;)6!XeA_Efu25?hiy)z&~`LFuqK}nL$Cm6m%5vvB&%qfsYwM(IEhuI zrq&4wUfdpjk@DB#A606dAJkfvH&o0$y_x6Gg7S8PH`^bieb=eW=Xq}`X8T9W*NnhJ3wi-p|={0R0w8}U3CiCm}lo_422 zm6$S#@r!Lk`iihS`Oljl34Kkg&eelcbr#gXB`QLdW$r2F{?^QU z-~8xhbgaDdPa%FHll#J;E;F3^S~I?-{{Vq^ReEjI#_E3#^%FHgnhJJds-)Xt)|8@r zsjx`51OEVVvGm9MH+sCq2AsyeQ|ft?9~?PYLycc?KYguLU^4a^yURpnKVFJq6z7n*#%DuXna6gMFXvWiFh@eX=v@Xf6Ba@4}6 zLx~Fg$Aaa8Q)7!BBIi%(4Sl(%7gCf%s9KGJl#_8DCQQgl=6cDDsN_h5xS8qYOv)5I zlmJqjoz{pgM=Lc?sW~?(O;~kgm4v90Z|(PuE?cGa>NN5v(302)0JNJC*xwOmWvw8m zP#vPQgm zf(^=$fC>6y8%}Ak87-x*2b6*?ez85`{ifJR%S_Kwq(lKAv=&R`lX%QtK0rJj(7C`r0WL7q%~M z;x*|Ve#?_7X@^DakWxj5uMsC%t;x;PEi)+FideFDBpc*<{h|K=5ts6}Pz+f4E8NPp zUrTj^Y<}O9O^{tY)2M>Gf^8TYAnzO+1Q=P7fJPwp3IHwY`LTPMbGA z%{a;>AT$O7Px?aAbh;f{k@8g*lHdf9y*DE#)I~Asn;Th^eK=vn@y$D}`l6pO<26=3 zQIrDNGbe6GYY~jw^NNPP>b%uPS^4^NflZ_h%W$29UjG1!*6kk3*1ZJKTAqOXy-QEa zJlns+;U{-Jh!~7-SbQMS&Z(?sS5>OV|5hyc_748){@sRY6lk63UCrOcw=&# zP0hJB&Oa#imr;zht#Lfzr){*?&$OZZIA}h*%30leGTf6(cHSecV#JJF7W>DfG{YLU zit?B`hE>$s?4Vlf0Az!~wlNMgR-c@q)7qD=$&i&fcT}Pc&#nwlRAng4$|j*sNh@V5 zAp-z+z$3md9&WExbL6TYYMt0Hcxot<`pLQnP$wji)jp`|P_2Nidw>Mn>FpLLwKFqP z1@uicKu?)USo(7qmaCYVsi70iEp07B2?{A3^I;5}*HSc^I%ribK;vss30l&%6<^-n zEUw04tnc*0{W4`se&es(MnS!X_(@ zG~il`%_Uq9rDGGNj2!txXiAb|ovh{63iVkC**(_(J%J z)xQwa9WU{g#nKN4fgeP4PfdDhqiC|U zdQV7n#HnSZBs{7kDRFjA+o?e}B-PlMUN+(}Xl)a#*6-;fJrf-hswsI+goXW_#` zO;J}tu1!nNrPH`fIM0`Xf&#x=-!bS~pFlc2T2IZ(Xxd{hg#urelWi+s)P((iGYqFX zTPsbdH8o0MrsY~-1vW*;2)GoC$})T_1T6^&Tdh(*!?@78U8Uo6YK3gF{%+Z{M4{f9t$+` zl_1>bDm-`Z?G=B79*AjboXBRd)059Sv9eu5X+hoqCu*>B&%Aw?pXh#p*6uk@)fyU5 zI@l^%GU!$BaC;C>F_WYGJUVrxb;tR)N1BTP<7LXU<49=aa5jy+f4qH0pZ@?RL4c#! zHNl=Xqu}M-6+B;4Kj_~;>NJ^oYIL}lrqX1Z3MXduI8+Y=oPl6(-ZaPl9JKFJ-4eAq z6;7eGC2hE{rp7yASs5oju{f3GgM^ZpiE3#r<^TBE0Ga`YJn!j~~F)Pj_itlPhen_P(YOLVDs zW)m~xy4vs-Hw&u%xP>OP{+^S2=H@C-gsh7pOS(tch;{hRy>f@%ZYSV0rx8Gccr&U0 z0O3c`x+h5H9r=`|tlI%7s4$h-C|bcOQ>0k>pIgU>G{3@MU8_2RW}idRFR<*k61B2O zQt@jWX9o8d5%#~RY)H)M*_lasR;H46lrrOBf-WpY_=rx7^iqnN@A-dOi&xQ*W>D=6ml z+;UVbN#h>TbJic=&(c=p6QTT6rMAar`^!B6utt&6g=gJn6ucw%f z{;~AhjI`HvB}i(v8k=Emr83R7RHQ98Bk-G$4h4)e*WD87o~w0K8J?UY3jd{p@)XxnU;7tQ-x(3zBVCu&1&aBMGc(mbhOf=hLU{O3@5Ju+ImeP%zj&E}b%(&r6 zT2-`Pff%xhw)wf7W(ra^Icwt?Kl1>$JeN}UXNW|pZKxF_0B#5OconQ619Eajt$#=# zcxs|EFEwzGn;zoE3WwB@v=oaDZOn7z0b$?thVCc?*prcNVHnZ&mQX4^YH+9lW92?o z1MLa8`W7y7PJNgcoU z6R>QKqYh^jH)2Qw?*OKDs_3w|`V$3Na3}X9fI7L{|s z`oN*(Hj}+v6MR88IJE6hvGoz#lBESMIJ;XLTq0+Z)lEitv66tw0DZ~Rkg+PJLb>}9;VrHL`{H`xZ}_m7beh9 z5}cI_8|Kj*hm^FCP0xJ5p+|5kHUse+!Yi?BjkHHI43!e#Q9f_NF_=Uy;^f}h7wrco z#3YhQ0N&^Ffos58tXsKO4UM5eqj9gAg>5$_X#*ns#|Fu4tt$Zfdq*v_fK-EEF>CP! zL#s-xqE75s`WV-I^)%-gTAbZsbz1)bVE~pEkOEQ^eE|JoP*66Ms~^R>6gLP2B{m!% zQFxmv-*Z@~)nz-1QU$$u{`rJfHz3&r0l|lkw3UG7-M2icSb~{iM&{B;w`_<*bOfO4 zF+xJ{dAtq64(pJAiWhN|1$h(pBG>+qnLsP>)}O8-EI9I+y>1-~UF?Md74(5yE+spN z8T;S;p*Ip*0nOvo3qf6;b^M#bGR-*c##=p^P1qWe#je0D72c{JIlzk#WEyv`OK`0PwZ( zxWY3Gv<@r>Y(z4CUIe0^WOAj}rpYKc$gqHMm5UT4*qmpGcCe5zR8MG1{Y2G^v@B{{8Om*re+1PAO25unA zJAtvbJC0zb2uiM%W6}&1&`CRmy+imDMF#qo=XSnNt}jNE;p zHLYp^LnQIH5Qc69Nm5{t0KPkpAu`W~yC|Qyhb_L62-}|bgx^>;vPV2b=vBrLs7qjh zx9JBUDK<)MKCqfy1b`819An-&Wo1Uh;QB`EiG@S0fnY%6u!LM>g%t}}_9uv0mk35p z?k$)w+O=6n{$W@KXhl?PhWmv6Vg*EQx`n;A!s|%LMllJvh3&WlIOYKg1wuqYK`HYR zNbCsa2%@sPDOMJ>j5u0O&%=?}!fI_x2b=OPc!{-<#5`P0OEv?yu!7kaDN3?V2rw@; zy?})G#rr`Pl$(XCZH{?~`a(JGbJrIfi}MMM*|E>2-eGW?qbCE_2(Jk_+jHnlB{76l zNmpJJZEtSyK$4+sdyxlT-xFnsH{imlWCQ`>+}|Sbhp5Ad*TDljM?cE|wn_5s`U}I= zOO3VzK9F%soN+!X8u#Qv6A3YZl~&<&=KbMMmP&xypR7LpoKiPF<&F3P@a9%hS!T;# z(cMIUv;$*_u0lS_l5W~RSV2v$_HiU%y}60G(InD|X*WDrn2noK)~q0H99s~kFgF{C zSB_GGN3;s1W>7ac%F~+(B@5}xWN(5%zyebS{MWbiTC2$oW?5QME>z(6&&7_us2Kq6N!KXl#moN?Zj|CoxP#pmqLjFBKGVd2PKw_ zg#B$EI1=!QBh%}MMoLkqpfFXR3=>#81p|&Q#f!gp@wl8uZQl*6et9{{3 zigMu@`$6@BGI6A>R|z-tv=JWG$@ zLgnX*P)(E+j01l`%vE}y@i$kb%snpI4xp((uH)&(*ch>}VA2`Le0A?LO-%gt9YR`R z)Q4PF;#G@#evv7qwHvFHOuvfTt2P;Pj&o?wHD0%$)wKl8055!t0qgDW68$v!wN=TO zP)ZO1Qjex%rGO`hF$N-!b77H^c6El!>P3yNp?~#qPjetnv9C)Gh zhn4t&+&{7Ph+Xc?R21XQfR!uCK;(MGhFwfDl(*sJ@R8d809czMgL4aIxUC>9OF}j% zdSmqBE}B+BLd$e0WAKiC{?SmTywaQ&H`;D2F&2p}LL^ciQMJb^7_>-L%5Q2ulT*`m zntKkVrd?1V@=R%3Zm?%18}QsxHV_JK0mmM&^@L?4@Hm+X0&bdGxSDd38d_Wm#tqLFbf^cCPEY6B(G#L& zrzac#058fu;Q(yiwIq~*e(>iSga$}HS1h&BjQZ;BZB;ZTj27cTL3@#a@>-qO>CIwxBGa5=F8t+q8KjsnpF% z{;imu)mmi|`%S|9RGz?a4lf>_l&x;|o_7e+W!EQZ9M~WjHyIPu_l{1fU@E^B#T&*K9QhQx((Cb zqSw&u^^#EYDqS~{@0DO zsq&<@l@3lgjJ~a`s!li_RMM27kHRr;XpN@onwwL}s`$k!@eh?N8Hx~g(2j)e-95|G ziklM!EuqV+@eROZh~4^aP)xH3LqwIP#^hu8y<^Bf4Z5Qa zCvE^3F0q-T8*>QzB>^rm2~46T4%HU|I_2j>=zTEo=ZBI|N>G^n}z!?{=54bDCP z0K3La8yjHtly^7cA5YqDx*Mr;ibTJSI?ff8p;sw4`u_lSjZTZN-I{4F?%su3>jY=} z^p6zuldW{gm)Vq^ngPPRr#JjZKdgEur~1BLrUPh7Nx^LQPzJ~8`9}_XM;q;(i2K(5 zQ-7jVQ2SdGWgc>K{p3RRhG!f|aWbhRHydqn?G?QbQ$v$J9u%URf_{ZC!625{6??Toq45eNSc(GsGvFYb8PoNSoCms!yd+3B62^5G8RVeS>@~1Q%^0l=$T5HU6@R$&Th(pGX4ZcXhL^wy;)ZZ|#-=D<$-k}Y$Q zZewHwp-~F34Y=_t{{Rr32Tq}=qgP8NVM}pfgD8@0ob%;2v|YLfOGcMMsnT_i6-=Zd zYAzlI#28*wvDeRU`kR_N!{=Hez5~U4lz_prRCEmqOhk@l5%sOPh7$? zl2oe`>5KdRu^CqCbJbbXI8xz46hT(Y=lyx+JmstUr&81P1sNITxhngX zZEF@O0>aiK+>Sd%nxECGaw#pBCK+|rAb$bLu)pyC09e1^*+tZYYd8A;0KaLj(t5il z#L^{Jr6`ZW0004TpJ=_(b(59pGznx64N1BI79?l${{Wcs%@3*)HBC??kz$K^RDJk<3kNsm24IxsgNVcHj*4ahQ(35ZP-ZZLQlk@VW zGk_M(+pE^z-|-NgQ|aV`I(%28Y!kZ9I0?8mCy)4ziy(g??rexrNfIiJsI?=33zeJP z3a+h$`}1yjiD}A?q?nNnJn1(V@{@1YE1ffyu1!nZ_Da-%Z@DY%3FiL*Xthn(yO5JoRDK{d< z;~w!`rBrDvSN#)-a2saU1}Bk1o0?@$%P1rfj9Mp?X*|bW!DvP5-B_tM(pgDTKu?i3 z!L~cYif3INZp=(A8}3dHZ-1_0yE&)YK_U5o76;+5F;1D55)J6o))`N>?SHpHn03T}+Jcl06>tYJF(ibP zr0xXR1HrNPjo{<%9~H@#%4bnrnQ$55v0jQ_Hi?=?P$^AK>~TO7g$oGIr)lnmCE07- z4=}$F#nvXt@ferfta-N#W;ca=iM&Eg*{T)FC2gR>RFG^42~Y?7%tBO}c1`W_k9i2V z3ONyA6w$ z$%|TBoqAMEr2vo#+LQj#m@}ym?L{eICu$Xa$G<+Yb);(*%rshIM&w%1j0inP4m!Cf zE2?ECl&Wn;L?jFXwBY`5S^Y0dpGaJwQbyZ=f-E93q~cQ8c*`qyV4l~7sk({Qn+S0r z0G@5cZdBNW?Y?Allv$Yx(z5unNVf5AB3_n{9Udc&+>32WP3@o3A*(fYyD}5v6TbQ4 z23DgpNn36y1wmjCA&%x8_b?Pkw41I@RH@RT$u^X1b6`#X04OC6uQf9=g)OawgL`rh z97CE`xuVUd))rhDLlXGj-4!Qb5Kk8alLPR0w^yuh9l-Y!bJTjegHE4J)e&qh#1pwf#WwpN zVHO&1R+T?UZTVSd7UPPtK^RH77q$CGo2Y$Am((=GqD_FStdf&pHugCmSTyHV1ro5$ z7G8a%cxwu}eaPpwF9EciRU3tK*s;|0oTYxg^tvYMjW$(b;gOMVeqhR~JyU54aZRBh z=E}wX@sw$KIm-9n_xH5O1%r3EI+01VqWjx&Xn*%JOD zkSxtgn_qc{lPH$#*}+j9#D{@PsLljV5*KeNO09gv1f^?EwJw6Gkf1;N5**;4cz)KT z)2|>YqqW2U0!cR?oN}-?z?KA66BKtq{Iy8Wu{e(l1udw1dkA*Xl2wqFid{)IUejar zg(US%i|8$_Lcu(Gzzt7LZT|oPEvIhAO zlo7i75PNZR?Glp$kvO32qZ`~;aI8A5~FS~BMKedYObNxFQrz}7ckIm zVK(s_bId-MgdaK*tQAg}rLeUrHoNv0`@pUJ9KwK|nF>(+B&kBsqN$n+ZAN7(NGI_q zx}gVw?*aCeDUAoDG`#70ou}omV|BKWLAA)Sx4Hb{4te*g6D~{B=&mBff}(@K?|jCE zIj3opNkq*$eQ0e7Ke}1ne|wVwEj2`tSZpwbD{q+k#n&k!k1-hmX_!h%R9T!u4u@Xx z6cy!12kUHo{bKJWr8MiZNphmwrNj7;g^OSAA=P(PXvs8`yq1{WaJzpI`$cMNUQtsr zSd^&+Bq(kp7dVFu?l=__YNsYsej_?%UY(<=uc2mE%gltR1*-W9^aHpyir-Hw(@yvk zdeUd)-EFX3M~h_NcWv4IBVbihp<0nBrcw;h+vO(KRzLFk#ue5{9Z^P1({-&7sd-}A zA3ZMM+r{_;9scpzrehq~YjLO;prAPd zqp$elZ8nzhl%38K!M1x}+wzZ755bP>Cz-_G6AC#MHkuzzwC0D@%W^`iH$CSC*tc|GTmO4q8*f%bOfQ< z*|r)a6Jg}JRjv&m_f9wUNBr}z__ z9zgBnL(i>$S>ax-(Y2a3Rm#hXQ)6KQz+Ui+!3WGe z4ax5lRcb>@a3!O(dY;h=`(?EhsXY7f5^c-GvXFTY5whEqNcE0V({e!o4j`6V&d>#t zBbKKL0n1+3wYx-EuoryCCJJ38Rzgob;QQ5Wy~V* zZNc>>0c;^3hQk)WFa|fMHw%a%b|&ru2W(vZV8LkO+zdd5l9dpYbDR3W6kwGL9`}SB zhoox+#ZtQfo1BbTLDCjf70En^K$RiQyDkE7Z)jPa!8cNSVDtWwRa-C34o<1YLZVJdO!?3-%WRQwlbBW@tN?RRfEezg>j6Bx%>7lzGcwH6+VLKBD^js!C>(pkB|MS>lA8w_0 zt0_{-oOVnpgp2rySUCD#@d|{aC3gqV$2+w*(pSnw$3|tal8vJr8}kBc1f->RHWt7Z zFx6KasU!n@!BpZwz<}8pb^NBFM-l2=N`O;p$QLI3m@;ZgY;AF~ZelqzML+h>);P`p zt0>ryc$s2WqjP-82jfT}qTZ!~LN~-%ah>CLGuXJw%i&cc_bj>&yxq2{u{?^v+<< zyDSD;x%$FxJlVL|ao*-6TWRhw7C4Hj@c=M*y9jmMcLB;Z|20%SpxC`ce! zo_(Oc3VBh_Z&B=DeN6Z^5|C0sHn0$OP~w!7fx-L5hO5(kM@vGc+mLm}0I+w%Bl8)wB}AjR8df5epD z{6n|&%^p@y#ceMFuIo*Sjc#v6(CGAqc=K(z{?!t~t~2N|NA!&QRaK;zZ)~7p3P`bN zAgF`im<+0&_G74b=2RaNh;35r)6UBs#Ys1anb`v}t+Fil?Gq2w%PlPkYR0~&V9m@uve!uT{{Yl4 zC8TDj=KfWd)CKHL(`d0vQ|B9A(I`Sfa_JW2#)Y6Xl3pGoQsGKFNhh_$D8?@4XEn!h z9*}%Dy*z+%xGC>XA`Tgp_lD zZ^So69%O|QtPF#5nD9ZV>H6^_mdIJQ%inB}9hyR)Rf=pqZwv%log$P@wl3aMFhI$PDG3!y ztS#gMgOLs8Xs=5+9zv~SYv(a$qtV-`ww9d)Bzoh#0zmFKCb*Xli_#gWPnXWyR`i-koBc{Q7K+WTq0inS#BfZAw7Nj8*_|xvGr@f}ryb zEkm+E;w34XF;5ay!-Uul*80S5l-5-`wKci9cFrxiN>FB z{NfA?9wA}05i0c!IB3i%_g+I*9Fj5lL}gx9sANBAOS`?G0a-$#%T=OPbv(nZ%=k-a zs_D70Hy*>@98>6$)QNOc=350e$_e!C4ym+R7bZ(or0KnDRDE6)q`QuU8xwnuJ>yl; z^|_ChZEI0W%0G*5zAX?`87fLmLAtM-j&oHs7y61^U5ku;s-W1A86HUx{*2-LRM)mr3iJv6s?ydoL}e%yl1^5 z(-I4*OFqim+LWtsO8CI{$8X9nonn@fs_A1ZEaG<-_JjlYaC6*8AqaBO>RH(M7Ne0V zx|^wT)hXhc8PxfO)^Y*kwahP~HCCpUskZE*fI(R*S`Jh!VxL9n@>*?4bT`giRbZ&EbWyzIcJQUa2Ns^A5Z4ZVKxNULeJx|J#Ug`|!MO|5@l z{ljVh0E9sYxzDH#kd|-dD19%f)^uy=kfyL~qNNd&agTpv9+2sUYG!fPW@cTol$4be zU-`X6WHc=xX9|qqK_$*WIylh&!r2`;4SfBEqn9CdGF%C;eJmMoJ!oXQNQqxBiuh68ZwJkpMJ43N=hc1X~L&=6e8X*of`DTF8$q0OX#2R1)Q(E3@arDvq2{8vYu1tm&d?{VuF{ZmV#R-}V+?I~(; zBwumG!Oi%OFAitK-&svYFA;Zo&mqaZPpQ>j({y@-(-RD!*$pJ^S2q|Kz>LeNUl96} zNYm;XI-@$UCErtM3vqWKW7gac&OLU$DykJ^Ri!Cc@Rm}qCHEYN@!$BBOVebkl0~Xr zrkt{zag^U`Nne!uXR(iSOv#mvjwhR#HXywB#HRGmt+NKM&xrE8iU)d0+&tam+`kH4 zRjF4Um6Diky}lT-_nq#fB%7T3Uh(q#LYC#{Q8<~B6rcXZ-%Cmf&Fi zvEc;+E!R`ha7H>=<&L0Hx`NeOXIReDTvVr+sIt3@5^Z$fJo-nRJ|Vs&l!|xxW>Li< zqynjynrUDGWeZr2Bk1JDmYAKH{gwFSmfgrIy{>O)ru84->q_elJv4z$!;O~E&{-Rl zZf|=No5!`L)?f}iLC?x~ne_URYMig{K1H6T&P`TQx+zj-995CwgU`Pav*^EupNVdy z=_TroApZc)G?XP@Ca3n5DAKGf#;vK!u~_issx6I0CFf zg^47K{cEUd*+yv8NfkQk zQ@Q6@QAzFGobevh>$ZcZ>pqXvJl)K*nMzLE zj&T?Hexgw;Gp#b@st~Yjq9w>6acjq$DBloOYI6-b*jwXhN=Jr+<+cP}wD(ser)DLp z>OxsdqyiQ|Qbp}=(ibkDaV9!AEkJSp{U@fnZn_+`M9ovDCQvMprtWrwz&w3o->Rq+ z)j4#$Wt(v+vbQYQo_{#=3x5)WPE?v^kx^)b4X!5Xz5cOy(%o{bR^^Pcsv#jty3LYy zkIU~IIW(Eow-GxRK0JxA4u5DJX`@mr)W_w~EYoum%_yNvpbs~1t^H%oTFa|7O)j@6 zwf74XX;N0xsNIBK*0{%G8<$r)<3-brnMp}yO-;Dn_cYikD#eK-i+)jsbyG%5^*W4o z6;h7MW{Zg_S{+xI6%V&_9;TH_3)3r)I zQ{TR0(Oo*xRcVKm%Z)x+K+lXfD!_XmSgU*$yQB1$nQB@2MjDtY9wNf90o&?(TlJ4i z>9aBM(K{W$a0*QTX8C~!iY}O zj>auLJ2fV2tjtbHq2^RJ6(C(fcNyo{!(C6MX9Z*CX>#gYZY+{PDoMV16l6FFE ziMNnKgP*-?lWYF~v~xM~PK-c?zNX6~Ai$GCM6gcO3#bbV+xyHsZb6Cp1xQRuHsfJe z2yp9@alq4mCAQCf8<`BsxKtjn7O_ZPW5Vm0^CFEXwB(lK&(5EG8^OzQN5 zlR8CjF({d!(hlH*k;X(<3liewGJq9?#X411Qi%z4SP%hDN7K{ZHXS#vB`TECznlf#qRH~uAGBLK8?q+F zlGB6#0Ldw;Bq}dW_>$wx>u?7?gZ*NuRivSp6lR?vUbenF{bI@faSBP5K37zbE={f? z2UIyU^9$J8itJT#pJSg-NSbdDxJ|vpDRUB@C~dvT_6fK8n4MyFQJuGSM0%B9wnSv@ zOxGr+pGyuZ=}=DdkZ}$XSFchKOybnwNgHh4hds#=V}|`?*CPNX(A32_ZKVz^A$J>- zY})YlMnatNDNTxTagX+lUX!h-3jA4#prB2xK*h0)Munt0hfQ+9PTgRm&5mL(jhC5K zbs)ROjv0wrv;?Q{g{J}{ z>U61zNo6WyYRW(fDNhjzDb#1TcrMLuzA~HNF*hfvSe}(5#JM9Q7|d@l;LJ`l>nXL# zx$1n@>11vfy07*6#FYnH%}WraxT_QVd%sM?wEZkhOR8i_74B965m~9xU-8u7mmu1} zXPBic(CSDt4rYNy*Nncu2&k;>;Xs_j)z#aZbnS5P016fnm(kpqm6#2!TS)#KTx9yi zt*MgIlC>W(NH{PKIx)slMfL6=M0kNmd-A&&U@g-ckxlunFfP{k@{O zLV1b3seNFOZJyCBB_$<3uJY zsL7S7A95~Yv0Bm-$SS9RUq6W(LFV{}nqyDu32AW5O%zVkGp$EFqgoFJeyQn@KI!~%!a%QDN-0O%b-Yf_{qY&j9x%4PJ zx4R!fZ_*so^;F1K*IXqe9N2NrF$||VatuPa$f}-x)}I9(OVahXYu!1oCHX>|wUkAI@2H9H`(l&N7! zBk+uSn1g17r(j>agXu9hS3JT00NT^6wA7)e(scX2 zF3b2Uc>tVagJ|=-kQ`b-fm5R$-UJt+4AMNm_0Vw*o;NUnV}F%`r7AFkh$B zma@K8Ym1nzbq7vORjJR()v1!x45^iZ+S|Se&5fd%J}T(vdfmz8(4kSZ)lU@7^=)#M zG>2PD4Yw+i0uVw$?|U0_6P+8^RV{a3Z91B`<5c#DQ%RL|N%2#TdB1ZUxR%E!*^u zT`}R$hjP`<2h8}|m~lPdrxB)=A|0jFol+9!)d$=qUvftxTR_q7yeqSreWmrj}VX77w;IK zP@mE@0J+)eSDbaUsm7g4r*GizWq+ZFeGROrwB}oHOvx#^t^QRl-z~{K#ru0kT_APb zCVbSx*v)leXplNdz+GS-ZWe#NUc;EOkbwCewwN6dFQ_1!RG5qk_hkdC{{J_ZGcDEEby*+MPm4A95j< zpz0=ysH#&@w={?5Hz*)CFpq%&-^sN|3+jEZCgDR-(rKjgA?IKZ0AT-DdPzQ{d#l9kR zr%p9Cj+>>SnTh$?t;uiY+$Cu{4Tu3*htp~BzEQgV&^}zDe3d*m@k!P_I?ZNorPC?5 z8~LXkO47m#Qjk;+79RcMSNI&(nr~C|_D-|Znrfc;S&x@#>FHwP1HlQ}5>yYG#Qma= zE7JvN3eU|}GyyHFs5EDpQu|paYVbMy{(>x1T|=qqSs6-d82NPH#8L2oPTl|<0fG7m z`_P!b3*jKYpY)$9?UnT#*i}!UdSg~;nM!*yGDRy^!R8sUIr~ILxzO+GZ4hb_s;sSp8!k_>tbR zARCYPjI&=o@iAVgE^?Ei(uoxf#pe{1yx_MW6<++{k4Uk6KGAeUtfsp zBi^lmW)LlBw08UqAMA>n(;%!LsfGv^OS~{HL(X}FOuYM#E^6N#j?Faqm zne$_<8sfh~`H3pr!cjW49~HGU0^83R;{yKxc=PQ-tnAZ4h0X$9UAClPCp>07neo}u z{+aa}erH~2HAzd&Hi7djwK==QJ|QOQ+-!W^hx^BfwM`OYnD|V*s`nLJ!$L{@BkKMY zs7$y4sy@@p)#LErXg6N5jeeZ-6FZu5Y8yd2PI!hNKI3TcoCgG8oz9Bs8e$_mgiaof@yvjwp*1Bh9P^!UL@M(d2<))>zzmsC?^ z+yHQ&qzkRM)4M<@u)g9C(hyT=+j8K(Y!w{mBM<-*t6UKh*pjO!^yUcTX;MxON31Gc z3Ai1H5I!n47Rqi;Z}0yAs7K&jt&k%}7*bV!Jqa*Nrq-3MAZl(v%}|jqWUQi@_w3%)x|c zhSW(&PaHys+}H_F0|NFDHz}a?1kAXaO(pW#H}W*1c=|#!R2kWKQroi5AgF+n>ttv0 zfE9NNd3xGZg2L8(9uHdt18?J z*uyn16-Fq?JtSh}-DrfUbKVnEDhfV(-+Lm3Z*Tlb_PA6RZFQi1q6E@<`G+IZAQrQ+nCgL-3a$)6+_HQFO%s4 zoyoS;`HylrfNXQLm{}oQDHp#Oi0xo~<6Ut90l=@r+c|@fr3(+r6_l1!?p!z$Jr6M< zD@>Gi)U>IQa54@fZ3Iz+aJd@GLvTu#Q}62zrKLP~wxsz2eBQA!C8gx2s&0Ig!UHX& z5T{jdOWW2LmYAecsv)_#VEPcE2uiFE_lU|s;i9uxH7p%Ft*(?;EhQ+(T9SOPC-Hsa z8&-7_P)rp`wK$}uK3%CK0e(fqBdYZqQ>shU<`XWSHYV7?&SJSaP<6!lQZxr7sFB^YYi*?|KF0~Vk!lgj0sYLt2Wq`4{C+eQ@4qMh& zfFfpNc>yOMNGjG9<*^>{D@Y2kBpQD%?0J$*_pGmzcuGa8m1}Y#9ERgQ4g1zqhA&MMzz@3)`HCIRzkq4avba z#7lXN6fZ5cT}c<@UzkuVEkk(&K9Jb0S1qkz-?$KDgrptm0Yqmxv?DWD5vs*SOR8Fk zx#yTsrh|@oxwXE~)u&REw4Z;ZKafw12G<5{dzg>rgwl>8%u`x)SR{{24q?>20V&Qs zfE+@yva@Wyg#`IdZUyoAM5}U&a9pa^$pG^m8$cCOWuqxwF3iuJCz0*UbxT2%E5&K0 zDLwe()+8m|3_3i<;YZEHS>-2E^I)h85J50lCeEPV!KP_5rQAx0N;v!@5gR)|o@qoD zN{65^us5dZ6YE=xLPD@fxwZ4}9Nv(WabzW}!qyu>Bt#0J7G+hMVs1#hFcNS(2uI~r ze>zCDtZ(|puV2wfQ;JNyu`1n?pnW30QPDH4ppheR1&x6*J%raXo9aL(qtAaGjtvyf~b>4%NCRgI0P7)s-{hDC?%%Jza+zfr)rKQIGHuu`LB4|v=2w=3Vo*a z41s;MI0K1oL==K^+;)#q^gH3dqBT_oQs~Ym=pQnNmZb|=*aB2+Z=Np$F2wxbw2$I^ z^rQPvpLDGqU8y=+k&toKBxC`bM8zYedZwW~+^dw=j`f5Adkgy*`d20J)1|b$`>E2D ziAECf++1-^D3g4Q@Hpev46ce#GcvCRNuL<2&19=;P5nr@G0pg#0Ey63H5#5Y(;o+& zNt~qo+1sN!*x$jS?yw`KOwv}fj9+0t?;gX{Jshjo zC0mrJya;aA4LC;8aqK@>iJJIgm10e~l}ZOxmD~lBxL8{L@IMx$4o9@d1A)LK_dIP( z=^=Kuxru5t%j}_P2?oR{ed7MEg3@YK(p3bl^I zVcz!{izY=Nku&)Xd&=zXX0Y`+4Ngt07aJeCZ23U?MR)%Ijpg2(MC{7jmuwx!YhV&@ z?H6&P=4F@TOCrsM8v}B9?TD3{(Y0#34Yt)C#p4O^$pDXdPZJsFKrXh%QWWhz{JgtT zub?>FU@I6(}3GV6U=GxHNvC*+t37IYx+ zPXhk{Pu4cm@b9N|?w@bLkd{k{3GrN7mAH_Rl1_VZ5zDB>iSGN4i^OxaM_#_u$U5&v zRzGB_VGM*6qs&5f?fRI_C;C-fnv^veN_&rzZnps#KX~^RtLcQgsQ@WJ*1wY3E~h^q8?BwT6lkgk*(ar^^U4VsUjW6Ee^<#q)XswB^*P6$>9X8I1>|ohOj0 zOCj3al9G+XZp8v{P5onQsOh;nWWlAVc&KqE$OAr?_5Q?2=#42#r?|Q1kfE_ap@K!P z&GQ*qSDKMxTe+T8^bIFW_;NJI9Bp$++}h2CJ!}Bg1B8UgUre7wy^?ZIN*S1Iu!xjW;7aw6!-h5P-3LsTRatbnPLOu3no+T2k7G z@ti;an+$gP{;{9xDtyqK@syRe8@A+}cK-lacS_W=5;BYZ?!b0ir~rUL_vRwHfmzaMrl}HA$OCC1K?4HW;6_PK>U;9abyG7&;Upn= z5z`$azD{1d>7FVR# zQALvI8%eOXVT0OoX#|IuBKEPwcp&Z*upfCAs&uQMZE#%k?+xZC3P@9}5$%YRQ$H&B zNpBvoch-W&-Twf?i$MksJC&s;V!YzY-Rlk+sUlwOl-zbcu_T>BLbnN-mx%G;4yI@@lC!Rs#Cp7fp>F+k8 z1(HX9cpi~}7d-``rqabQ3+y2R#FLy6-{}m7iq^cZgJ!G}Yh77tz zfFWORtTokTwX&(1c7l|yQ~ba236H)+o^D#^cU`BMxdSlDz)(rtEt3!r(A;WNEK7h_ zkZ*Xnu4Yw4%edW@jN1kkn30ikRUo_O+mN6mq!2rkJaZ_5ivG`-aohuu3?|S5$WvQE z;6<{i$U@AsAcXd}F$qzZC1&RK8BMsvYZC)<8K(EVerTpaC zac`A?eBNvm4~UWu=@%PF+r)LJHIb=TQ9HdTK><8|7~ExpHHj1|QPdT>EQfall-mN{ zvFBYgq|CIzb-AVNCm>|s^0ay%rV_1BP}yi9K}`@GQ2brZ;(1txxn!b*RJ`=IsWGHy z%&W77N^sx9*@A2Z?`&}s9YNP~Y@{id6Jka#53jUC$;(jXEGHDTEF=xXk?qH*u< ziq$NJWs;>g_)4sMeLuUzX?NL-`@(IxM02S#Qj?ZHyirxchBMEkPSU!pW*zZnP>?{! zn~#1XrKzZim8>BxvXlThBcJ_45*Fj>ZIz@q!5#1HZD?j%qb82umTRl(D(4wd4y1xC zlvrcih(=a@`ofcNl-k0?0y*u);-5p3a-S>XEk|XpH>)QnK9OUgRvNkzgtkaIH^}GG z2GSOU!NF=LsVzS(Hz>5BhW`K%{v5=XgkY+=!e)|4Qq#E`h_Sfu{@$<@>Rfj1>-xEbdo-W95_@9Zjc4N zJ)-Yf)iepT23IhPWCVnhds;BsZCQyLv2Z*}RIU=c9((5B(j9A!QB$PR{{U*!l-f&b zy2!Z&IVZo;A>omdhjXLE35NR-mtJ})q4k`@bF*?Nc$6p*r4TqAAlf?4134+eS-!l`L(^490u+rt5ON#L>x0_wZK9`Gxo{3JNmz1ti zC6MV$hr}Z#M~)91MOR4DXXP~srdDj?mW#AjoxqEaSi9(Y#Qu)1{>*ikK3UQVP!c?s zxw!Pnj?9b|OH>$@OADK~O_5%Zr%Iu=Ni88D1rf*`eZSH*x*oL?(rvRi%9&bCh}&S1 z-yi#mUr%SH>hz`_kZdJEyKdMy+j2}-br!Ijr&OjGGmAlCB}+qB2G+l=uO2?Y=6Vm4 z!W2b`zEJ7(skFH3^9eZ$DLJ=)v|v9Loe0x9@}?S|nMA+LTJr_1^pO3Agky=>97MiXy&qlw;3|f#>W zQnDO(#Lpg|t?w6vbni^+Ng-Bg2~+7vC`w5O`uDtNl!`qHr&jT$+6|Q+FgC`sq@i2q%(fd^M}#+SDJJ&C?SE+dl3CO9wAW-;Gqp<|Wgr22 z{{ZgMh5SbRAHAp@r|S(9CdBb&#invrVF5u%SQ$-|&%f3^Z-r~I;9`%_o>sp~;wVj%KNfYh)oI##nEE88TXij_R!{d#vVyySgaePD?qku_d_dz{!U6jABd61@Rs$!m zw8;AX{uw=I=$}p=>WVc|D#B49)gx$Vq-QP4V*ru|saqe<808lP%rStyxqX|${^<2$c@NQ^V69|)RfrIi&i z)1c(Mv(JYR+ML{kD#UEQ+wcMAIdJ@3=EJrB05F%ypzyQU{HOH>d9I!CgHoMo-9uiV zX~j5=Bd->mrB(x+DZ}tEhgFeM;>hD!Ku}c5KlGKEel0TQ|bv_Lu;)B zf|V55gXxHyn(5^jwz`Ca!KDO}EZHNDa($ungsG^u6u#I<5i3m%OVifW+_18N1fDY- zo7h(}g+btnN@hlKp2=;ux08SX3BWhR1dQa<^Ga0HAt}z)8(jJbx;H0Dd7qZ>T29p9 zr6L$rbo{eR`GkZG=)nmY5CZ~vg^5xO2}!ovms4*gL?~Pkz96DqGr@9>$QKz>2}(`^ zk37Y1RL$3bqZwA#Is|?TRUxlNh${RJREa~SEjm!6Rsj|nK&Fm-2rJS$jRcsAr>bePseQyu%{8>34a+CgdUob4Gn8>NFLHoDNd+o409*US zRrJjLVX9bM?LBEw7b(d-ha7&fJ5H^xr0ON-mMjhcHumoxV_MHc%eJHh#+YuH;@)Wh zsb}y6;C4KpNQ|%1CT3+zOh~26kHwo35B2tqMn;KEskz}T{!M`!ZO7BvI;qo^n{^8n z1o$T<8^-U-(M8O+$>u1*xOY73Ri)Nt8X;&~L9>N~f(Y-9(A!T|>Mc#7YI@2GASj#L z9+rVBMQ+4>u)adukJQXEJ~An|@9HJ|B2G7`@}DKNDXuPTkW`z9>8QO5#uoG*;k z!ceu8=Y*D%G89q(BWU)yxe+}lU#tfay(I4=Cf5F#ihUkgx)lEafl_fvPz2xVN3>X_ z>(s@Bwuyoi6Lg$h{opeBx|iNf4yB#VQ8LV>mhwQg@#eAm#WKICD(h{G@rOc2)lX4Y7R2OnW&ZD?1rhnAO#W<^Wk$^KxyUrXpue z>X%)3CCS?;EO}Bn7CqsOT7Z>0wJiZD-~^0kK9KK9=y%_9#zGfjK`OcI4+h@xVpfd_ z6d3{LU#OKt&L}OzYj?K>F4P&OS$QobV)!Il_8(hCK98d+NS7*0X-Vt}Bfrz$Ca4Wg z)29NatdNxVCo#n87#f{;$Wk{=SuZlpC={eATSq61LkT%VR9)EfB{w$QVkTEnvEX0|WV%)OuVMj+*T$T#t;q@bCWB!IhSPAbztqE~WB&kYiV@VP zX}ar=FMP6r;a1(uTQs$0#k`|7lG=C{7xn)DXpWK4dVY-InUbG;tCb|FBmw9KAv)c9 zUX;l}mNwuLk@>+auhau_c4fY!Av)~1osygl5H3o9H--w-OQyJ#PEMt32KP#T;vl5@ zg4Fc5m38IqANh0o`@+*R)S0%>TSdva+@LRrU8Hs+2J-M_!kw#RXVKvlV2cr->1Y8+ zrcd~rWfCuIq_3E!BCe?eX>b9*Fy>QO&PkBs+$sR~SJ&PXVY?6vi_w!BgGf629u&N| z8&YhNsLvhNm5L2Tbc(Ek+YKy$r2%3GrG`Xlw4G;5tEX(hC?^3xaeur*bvB<*YL04- zO8nYz3u#E+MUNM>Qxk1%tRZo^ZDBO_qpMCzkt|zjE}({r$X0%k%5z!IX!)S#rgHML> zuZdOM0Fs@{jXSC=&NMz*ZMX=%!mWsO{;*+IaY;zrfw-PC9!j3-jbBSB$+0H*@>mO~ ztDbq{-_jgup1*3&rMb41Ei~MtO@z5L+D_7MZ|2V*tY7{)m~I_O4N`8~e9uu#YDzj- zGfc47@G?Q?Jn@Libq~bnN0&J00x2Ipsbj+-w4} z6fbdmo5!0zF8UGGI#Y8R*G02Y@w{RPL#D$DJAea$VcspH(BsRSW3_upXVkJ|+!p=i z=c;mD1d-Ngty1KLB|%5Tb+;UKF7CCg2|G_cp^ToTr_5E&GK*JrWmiimOGJl1)88kw zc#f&9ekL^Tvua0D&aQn;4aEuzSqQgt-qGs6g?)dgsn1I;u`HRnxvj1(1pxR;*e()D z#zcJ{O#|t$f?sg-o>0|d&69=OE?U#4-B)f?Yf@85Ds5gS=F+r*Z&d#PNX;6nbw5Sc z#HC6|__k^Tc~Li?4L;N?XFHKjJd@QamP-l1V2CRn3ertI&E$DKMw1 zlq5`9Cf_p3N>hQyc=NG*K%u8echfs^jm+}}OX9iBJb|X%ea7d!VY=RbWBfne;rx!S zs`VCVNNNVtH7Psgb+X@@#~fh$M&7**@a3v&rhV>_(H@*iE%QIKkXLK-b$8Eb3apn# zD9(w^DW^koO{@OO`Vj9TGWzaOV~`Kj@vHKQrDMl|X)X%xoz@+(2Kac@+EYsC8ESnhQeBtb3rxh@%%r+}%H>~Q(l)IJQjo7t zH7P4K;U5gGPO_jeYm0ZhQ{rC`%K6xVLQg@X+MZ)%%qFGq^R4T(W@l)%>ZLhJXeMn7 zmK#ezo7qZL@7wJfPfRG9XGFG*J6xcF%I{k$ zlhnNe>Ckl*psgUGE~qbOm|R^$BG|w6h|ZT&=9$v6v&_gMp;C3CW|aGxWbQZ@#{-yY zGbLYYl;t9`CiAFDid%RR07%Cs*vF(VrfRxpO%pdtT~RJx@1V?r*EhHq{QmJ|#zrEe zn=xIND}!}HX8m#L*HyJGbSAErnx&~^%F8msH}Wn?PH~Udp4e|zG?jlyS7fyG)z*jD zJ`$cAK(Qjg=XO2&N3}H%QmD1+I@>^PPBmiNqwyz;f^WySw0Zvkt+W~+Q08T1YP0W! zGUtfdmUIgzBX!O}_xeYrpwu{|WuQH-b84}xF<{1dZ>V&BsOZ^OCaE;XT$k{PQ|u`U z2u-iSxrjcM)^$~KqL-@GV3vUaZ72X#EKgzmW7+c>8>aP56f~BUWomTGEe$&`;tGg9 z;C(%_^^Aw89|RivM$;UvXz7_5@jYh)Ev&ZdNw_2dZN2?_a3kKq@eBl&ZV#a|#(gGN zOJ07HK&EJV^q!qXL#FzZ<_l=M><0HKM>om1;@zSo{7XvFT27tUROLyj^eLh@kP1oK ztnJPT<1o+RR;jD{VXmgM?R9UZp(qseyzp5dm2y3;f4MPV`0bg~8rEgmx@!$LGbYJe z9aAB-1q6%|511QwjwV%YPRxSA_4b`OH;hDsw2w)Kb$3$Ms69rUV@=eQ^(uMdxjd>1r=b5mIz&DQ_MB00aa*WqEPzEy;=nKTzsAdkUMWmgeOF1uZE7 zLiWca2R)2V(DgjFx0*#fu+*AVKza7l&#=sWCOj#J2t_||d8y{)XUKOngX(Wj=AYD` zK9IE1MgCpX0B$S=u07*FnWjpvr0kn2Q+HjONjE(HvFP1K&XH@U>(lcA#~e2BUhxLx z0H9BPPjT%SmaC)F*q=*Mh3^>_{o%H9eIod?1LbZ+#8}=%Lg~((q3U>@sHH^<1tGxa z2L6D=l~<(C$?5kiRNA3&robyePDRKa%uDHsh8HO-O#SFWZe0OAuX28wi#1)zMl{p% z%s8Z_O{FcBBX5eG*UvXGOqtmR)rgC@%o=)}=Zd8|0RUVAJ9dbvnqpAdb)?xNAxc&6 z>lcdqB2H{N;zq?M%#obm=@4@ird@exEG;M}$eu0l1d!vN<$(%iTjjSa$N>r%xAcLR zlAM@uA%+fnlNKiFGK{zT$#Q}$H>6(w0HiNMmz9_CoN=P!5`3dzC)mV>JN(^DTu2Yt zl_t2O&1vB$Crf3ZwO9avE=RloHhG6}8j0trp;kKCM0%XnGM7YZR3((9!qTi% zf1B{*?G?RCH>avH$wJq?M1qrZj6sfqoGVPiWEo!YY}!e`B0yq!G+nbCT`t zakheNEq-9FPlP3F3b`iSLv;rovQ$mIJz-Q!-JlCUZM?z|N#;KQM-tUX*-0#dk?0NJ z(#e^5ek-5>=%Z`hh5CFd(@S1|txTtsZgDurGn-=-+ z1thBqz`jqcNxO_8GJK@=^@0$RY!&o@d1LUS*PmETWPlt>K|icWfDCXd9?k69P4So^ zYhkie#~FnZgq^uD7Hk3U{UEPz$TzjQ`$GOz3n*UQ zE5m2QE5=FVA zIzn=3AG~ebkzl25=GTe3OvKZuD?kKejAzyu)9EX9UNTTZK{+SvVse*`rq;cfdXFP+%t{pxw)blu!_+OTgnJvpxT4<=}1zpE` z#*@>Yfyq!A2XBPx{{SA<8!HF3?fJ%;OrgjoLAMn0hddEso;b+FIYV;t7g}5j+zrBx zMtet_ms^#*r1L!-IviDDc$M0JO=RUB@g@)y6Zm%?VM@+|W%9YFT(AIHAvp%#pyz?a zPs~?oi9kcFsBIn5#~t$#m5o(OOo>w~aVkK6E%%W z+V@MpI?HL!;L@(5F`w2bTG4Eobv`PKDG9mUp>geh$}fqU?3j$ItyLp64I#Z$!kn4f z6b*_}n;VhE#l2#kP|yjZZ%6F%u(CE48}M(*;uC+W!L^xbDTh)@z(a!O#@@S!q*`>v zSyjq$OWeIdYR%LSGgoK4#3^XHo%xr#SYky1($ig4PZuvS!& zo_%=wMAX)`LgkQVCe~HE%(SbF`<^in)opb{c4UFM#iRhD;>RQJ@5eFB3sAY)vl}U@ zl&x0W?8^&ez5>Dy_Uti>a(Zp5N1t zXpftakzznME~FJH7gp>MVRA1WsgjcFb9n~~F`C|&ZO4;5CW(Cs^CchyVbAM+(OjO? zQ`Cxqmt}?cYrs(!+AZ2OT|-4embJ@xAuCA+$rnnq-}T}%U0o|S%9+1OORBJS;lqHA5iCS`^v-B}Wu|^;aOzIsOC}|T<1-9asWhs0P z*Z%-cJHTq1El!-*?FxL$PNhim6p?e2jF{<-MK?1m@{erAt+h7$#X7%HtT3gAX51|x zl8Y#lZ%AXu7Xm0#xX6uFTJfp{6OxJiIUw5j`b93H>w#tIRHUZn=~0UnLbj@ko^knG zr3fGujDv5iQYWV7ADh^RJc(Jxc!fS*qyA!kQD-L5`Zmla#`YyXo{;n9lQ}Gc+ul^C z%8u~d%FDYey~kC!C-9{62~z%LN>hPl2|&G*{82uP+f7-WO_o4XU0Zu>oZOfi+L?Vw z47gMhG7^8KDNP+0a#s5mZH0WncIy^ zx%;~Uec~3XkbqchgJXaX5p=ETDuW4Eg4rU+@R5J(n5>#3>v3!;CwHL{PHF)_$mSkt zyC|Cr*vCBcFFH2oHa|~zR&t2zL^P&Ul`D%v20_VFgahhLp}LF!JjC6UWlFk1u-J(ZJxcvH+E@iaX&!wk2$tlZcoH-)Ox z?8*(#6V3=%=@FWKZ3T}N)p2d(?FO#Qw>FV18c71jHur;I#cmHWCaW;RvpeMxeTM1X z1$p+IX5JY>?Q%)Mfo-LwM5GMx3@(WjuF6m)N{TNLC=R-eWMmaM=^hU7tR+L%9a8#h zSE)Ru{H2mk0+Mg~M7)f|oSAK=+s6Cf-ZWh-1F}p`vdAHQt@v_bGUeMSiXYZe=$$l{ zrn-c`Pa*W5GL>;`a~B;ork34JGfyR?vVnBxlX$Y3G?q--+euacILG_LCMVL^vxy*u zWbt^5IcbK~U}W3Xd4$TURkuJGupPfk`bA!C*N%OoS+5>m>K7Ipt!qTCo2>lgxKz>!+MD^0F>`8^AOtru?WB^4S1q#H12L&+%F_~$ zhGoz~RB#ro-skg-QjMw9{MeS2VId;e2akLR)3l7|fwe>?<#;BZZ`Qi&_LSBGJcJtFg^9hhxR zc$Oo0AQa=bG0&018;}uNtyX@cO|oeJ%(d0(o8z-PyV*{B$cEndPdLI z7pCT@>sx3$64J+&SWX9TsEh%6y{UP{GT8|xQm|s{o*)Pb1qAq|j>e@3Mv+ zeAwE_B%7Xp+7X+Il*SYSYq_N88f>VQ34Y6PB-?R6+2$_q(WP3ZsUl=HQj4E9RIcA& zq-IndM8!KPc-w8Q=shCQPS$Ny8vXm}Nl9zvbD<=K-COWREfh-5sSdc86SRwv*b7mx`;SOUkyeh!s%D-zVu+Lxad zH%Q5_d1QZoEfyp z0j|XJ?@e^{rFLbx+2tj-8D7*SM)xAzTetg0guaGJYALi<8bT20{3%c)+WcpTj+fB# zG^W1p~fKEqY?-_=X>YC96r z@+U5rAz$Dzm(Hrobz4hQR{PAEgl^oFu#MY}+t?>=PozM6J#~9nQ96R9>ODO?#H7lJ znE9Das!qW3CM=R9PX*1C159z%&zrpPN+P))$*=l&y$J|*U-UL4>1 zPgqG;#ML#qqVNZ1TPElAh81bKSm3=@tp@ zp;p||u2Lnc3T<1rq06L>#@MuBZ|b(HwPkpVaFS1&=bx-0tE&}_EkRvIT4rHHw_u+f zq=0RnbJ{84?rQatY`ajBIGS|NTj<(mqbDNmd?xRW%r>A&_OXjB*I#u_Nm8xp8lqlS z<9QXJC2oOh0F#@6bM}v#+Na{l?IAfZ=B1Y_Al}$xGB~M}Z11+s3#FsrtxWCXxq?q<7Ti{L|?ACVjPx@!m z4}t34LccWIs(E{SG$~hCmxE#b`bVer8#1$KM1$q06i87eMb zeTNoCji&BkqriDF^IR2`F=0ck<73OtO(u11)e!V;-RcH0}24axlP+ADS5oNKmb z%=%qq%Xr7c{qEDU)&|*vtXtM*AsR+hW!q^XRQAx?lbc%He_|&zy;^A!p}EJfMt2PT zu@KcKS!MqK3ALMx?OE^Nh+s8Ll#Aae>!*I+0kxoV&;SQNZYIB{ClDD6OP3srcl*S< zjUsKZ5T0^Q=+1PetzpK{$|eGdNIQc4xQo=4MJ}+AUb#ug0PzSrs71^*UUDP1S2!#NH+8^NF693k%!k1sQ?6jv?E{O4{i% z((a{~jrJ>YlCELQ^)0l6I>U{Wqyj-#VcXIiYKn8JpZUZ;U~)yikqIwYk_=3$a(7}% zEEH9MuHURRl5PN}vnahr)pG4rQ!e`o*uVRi0E?apza8S2KU|?m%s5#}P;Iy^Dg@uQ zZx;<-_K%sT%sn$%ZAvYuBFQJso+CJ>(C9UJd4Vrb-0GA z4I@~gEr%PJ3kKzB1C#0fAzGy(wOo?P#wbcvAjLh33? zfFOM@>)X6%l7A6Zx-ETF*%35aWkD`)TEalTa!1}Sm6Y;B-|2Wec9HTmTWxPQ))O>>_!Ls z#a?EsPJIbf#Nt^PJ4lH-W~S0_N(ouYicatX6bgsw5+JJ&X#I|PsTZrXy)v~^W#%12 zgsaX<#elyDzk7Y+GhTF>sUViB)G1QxRBn6)6Y0(|XgjpYJw07jQjc3NH8QQDUBwk8 z3MX~}K9-Am`iO-FsmnkCBn2ks-<7Qt4V6gSCQ35V;L2qyPPXKp>B@T9d;k_6Ad;_d zOvGfoi}b052bKa#xCf8v8gZSaRi)h6QXEI{gy-{$^!|oi^IH%sqA%OipLofT6YUFQ zqs*_%wr3s++6q;)1RP)3#lC>K8e>Tc8*Xw5{{VlaMAN7Sj+Hj~Kq$6I10(MZ>e{N2 zD6*AJr}skE2PFPq>lv+w5mi7QVa(Aa^>sCrnQ*j=b99d9h(e)Nl$ixm&R*jrTlyHx zm8qp3TBZ|FMS=A;8H-ksGIP>iG^@cwZ{oSJH$CBeAg1LB+$y@0l!D29PP(#Hd?xt< zE%XYr4V0w1q@aQU^vR0NHkB;mRHr6>mj3{Fku=v!AM_0qpD%CHB;I3F3qVZ2NxdZc zQlvf!wr;P=5SXMPb82&Tl5N&LCF+)v8y-c1;CKBL6zaeOwl+|A`HL>DTWbu1| zG5-KCn^<)#xiSu9g&u7z&umh5FLjDmV$)F4l>JvuOKU9dDFpem+tZFCD%J8e*Q%+j zQYtD5LEP#AK6_i=5IRe!6^eaCu{|)g?KU@ACf`VMjz;B(jJ34MO;^)e_MUYv$}&{Z zR(vv5_dk?IJyLp<8E#-KT;*1&nDP$OU;xTm!gVW9>E|PJzO^$KeAHP|XewLPNlrZ+j_L8iU zJ#P)PUonGm#|C8euZX%;Hm>aDSeB$hcFY&n&}~N;N!&cv?GHMGJ4@<5oRXH(;m1p^ z2T+AMWQ3I5WD{YI-}=pdDY{jpwe>mmX)3~`)PP)STqezUfuaDlzy|%|d*ND(s3o)- zWY(A5RJ^iM)Xc+yN?M1M+b8*bd&i~V;#?yt9!H^^XFfxlVIO&K>0d$etvpvsl^T) zH@6<7#j=w15=8=5VX(ctkcobT_LVMWUT6~5>C#XG55 zep+`;&dC>3;W;R@6g(~k!5RGj07%hgYI;?-f*O-e$hkW&{*W4zN6pE8lOh# z^flL*)W5WyW?kB99S)KLQnHdtNWMAz@gGI2KLz~=)s>lw-D6M6JnZW!MA=M>Y4LW8 z4aV0#*Su$1i~K1%XE9JS`WIPFQyU07WVZN;UneA}Tc6TCt$sV8d@GFFkUOiNKHm-2 zE^XifFWz|ekMVV0pz6V;l9j4)6YQblgq_5cm4c!O$0s~uJt5Ez zlTYDl0ARoGdV7SRcxQ=w*R5}zTaG@R1hKp+IRpl&#~c)+@k z)6TtVx^vZCrg_c)CkNF(%&9K3-jrhElKQ+h8y6^p8RQJ*Ufr zqhlccvw(afQkg>sn6*M~W|=J0G|I|nCR{~?x=KpQta1l&45sRu{z3K}sz|)sd(Vg^ z?4=QIY&f;!MCunoHB6g=v7$7S^KQ1@-Hk0RJG~? zO^HEqK}i?%za|^jdc)H*F6^B;VYz3LtS!VU*f|5s?ZjgJQ~0oZL24;_9Mt2#FEF9< z>utp;BwFU=4_N8Jr_?#DVu|;hxpJa0Y@G?MO?1~rQYYP+l$%I#WnLmv+?*Q%bIfD9 z_oP~OmtIuQ?5XF~G^G~aXT(qmH#WCph?nUHQ&nBm6I#N)+MJbfR*_4JxKa(tHUk(S zsVE+K(QY@Qi9*f)KWa|t=*+ozB#?~`bGuS3U;fWqb1EtQfgtu zSt3=EN!ocNi*~eoyQ=>H;n7vA)Yz_2H5);NSUAGk3R*C772*r_#6(s;3E!l6x{8}h zLyZ<}+jEjh3POTF+)m;Sa~_V9;yN5uL*Lia^_;o1+Qv1vulMUdY|NUIGHavCune-D z7DC82#xwRE;=$888LC#<(~Z$k)2^%n>2k@*1CwidM&Z7-3^3{&LcAw@p+e*;{%$+>@9iF2>t{{%2Bx2FRR)sVjU&oZ zkfXP8^d84Ik2^#0R?C)%6+1HNietWd{U%ZH@k`MaTFZ3JUrw5uXeB|mrQHbg6(o6; zabN}i0NONPh~9?jYFvz!K8+_eC*upr%+3V_s97f01dZ1G?jqOFQ>65@LRAlF`Ddq6 zr6$j$8y&!d_)X*0bCk}Qb@!uWQSqe7USY&fz~{u?U~8|u@x+hAWag!(P1R(z3KV69(=OvhDp|j4 zUjG23D6fTHu(KqGDE&67O{LMp5^GwA)gtQe=^K4RqI$1K>$j;g(^GN}m)2Wl=7~$9 zB;dW8w)cle$DU2g~iWke7_XSfj6N982GfOBa}Q5JO$KW zhmNjvy;9>;=()*sOt-x*wxBviKX--_&q!g)08L+?JJn{bk+P9`_#$vst=*v{3!^-g7X_E4r zD$Tq!iouqMmTJcoY-{I3l z)O9`cwb@A}GOyktnJblCad3ZJedDA4Z$!CBCWpPwaiY|^SyOY#oiUlK)M`yoDAh!^ zw@QjPix5CK2E_J>UZQB~r-s_K3S4>njiupYe7)`85w~>L;kmAibzPOSOBIP$ipm`g zSmi26xH$v9evxPE*TXMTb^S7HUgoy%eVD1}_VedR^GoaR_7nndHT(*Kq{H+ZY(Y~QiwyFA7k)N8AwjE+wN(1YN-MW3y zo~7z4(M1zT7yJc()V85cn`HCkX5-JQcZ?U z!MTfP*6bcnG5HvXj>m1#^*__=JT*6`YI0kQCN)-?>T2b-Hm4q9r%q7cjO|iw+;<$S>mFz7cS&_OPbvzLtT2KSqL$rlNhw$d zkz#)=K*6rVov4~V(yymwO~aAzGxVUkzYL69Hy9AC#Sx^-2c=&dh&zR|aSxr6L(Bwi zAm1Ia3CO8ZuPLQ~q^i~`&e-pu!lVHsxf;`RNKi{;l@$wsu3>5VeQHu&Gcz&{rMuZq zlwkT;n0FA$5Qj_jI;j&7SGDkOuYFb@R!rp(ZHE;yntroYmNVmC;IfheVetq0_1`${( z$RAt5gUzEG?~W}6Q;8&vpqu4J5!;Sq0BRHF6p?~?whVGgltIb4f-U4E>_T|&9GQTS z6rqpG(LKPQoM0lQTW+9D$EbrOUd1OILTP!u*9qitm|eDA3EZ>*FPLA;%r#;lwtPW# z6L3wgW1N?;J3+DhM3Q0boWIUE8%hr&aUG%j=AM`hZk8cn@=~5ZSc$SO5P6mV00^{# zLCw3Hg9+@~te?ok=czO7sX@tel-}0Jgaop!ZHI67kz8<327g^#>y+6sw9nQ1cB31l?-5=t6dS0sWh7Z0_0JkEDF z(240OMpaKwk1kSHl@x`aQxnW-M<&}^@}6?Oqh&N${g;>*iwaW193?e5x2co_bXV3Z<#L*;5k2|l+co*^>fT!JDUjluoq z(MZ?ys+CY7=Jyp4P5TeAzqb*qXeqrq+i0A5Xv%Qda@Y46829#%F;eCwsB&tVdTy^e zSg%wy>e!j^MBzzVh$#vgx73f)Jo!lYkzuA#mCvne2FC7_d!Irf?7v(o)kV2=;H&=P z)yW_qOc>xgCl5q%I>x0oP%~+$>gOhib;qx?1ci;eO})fLPU?2tlv9a$B&9b>66J~a z$7s)Kn$ljR;9^NhLez`y-E4vMiB}z_%*ZWI)WKfgGf5d9x%xu3m}6c*}oRoXVuZbt)i|+6XrE_0RQ*4NqHQQccvgFy)XeEpT#2w-HX1 zlcmkD1k>Il=<^l$B#=M%7srW0fF|*F6K18BT1KZ`bW|OjEu<_GlABoHxx7bfT1{EW zMF|PdGLjQzsMzNJ0MZndufIo@QW};kLV*eaSWhsLb-NEc;7m&uG=Yt(y}9ID+9(yO z)eKikgzOO zdk#M=!%B{snwpqQ#H6F48;Bqshtt1kZxfj#iFWsL=SG|pt)hKO-n1gyyPFShtVpq6 zTk`^4r}h;p`>liY<1o&HLwTBea!5;KauTHzVo9(tdY+8h`%?~8RFyX1H}LXpo+FWh zuNOKnvmAdoN%>uBpk1WSA=Ikm>>!`$Z4pefsHUD%wE`Pb)IbgZDL~f0rq@2+(P4R) zohfEn;Nrm{J{SO>t^WYl7IQ^wnRdTv2^BaAx>39wat|;!D4_rjPbc?{DQ*0eqQt|= zB=fXh);_TxP}CCa&4%79JGX980>{&V7HvDCrs}gx6`EAky4IjTDY8&FIpD-5z3G{e ze9P13Ld%O%kMP)E0Grw-4mD~9RAU4h?pEqk(gkXK-^ShLLe>GkZQqZiQT3f#n9`Q} z&Fyh1x$x|7fsS%w;a2JGSyJI8_Q)h%OFx6#2O=V0(iGJt*(cgVj)hsfGC|1y0Lwhu zI#jOvxg(c=Ihd7mQ`9D_HWLd(xk=$5dW@LqS>(>F$(GcmB_Ot&V&1=;XeT9ti*wo_#$(GZ6J1Cbrr{+Z6U#+vZipiM9PA;lp~#l=E@ipj2fh)ZkHQf(`<4 z2C8Y9w6#vPyt$O50!o zwhf|Hsiq{;w9KU>i-Ef%xA*mr1Dc%$mNL}R3KvYfmi~K=NBYHPr%NpU`AG8+E}%Hf zT$fI#)D#{wyb>&&-VBW?An+;h6>Yv^E`H}QRj9=a>obal9V<$v(t~x3f-(K#ASx0` zT2$F`t5?&EG@{(OQ6Pc^qBS}`LU1ip3P@7ZlYdC4brr-~H!=0fHXl{hf^CR% zCnDbPP?3HQtXro#RQl$fb+EMpvQRccsp;Q^Ex*GptR$P*_J-WI+#%{jQ@6I?gp}Jh z8-x;NZz)@W7rlW}aSnb)eo|w@EI6PEvD#teoQsn{sWQqW55N#_^@1!-!*e4glKPit zRdpwlB3e~|q*)8|5IH|X4eJ!?i8Ofa%Pz?o^7}+{HA$8e&L~xgQMjLWC0OOpY% zJn0s>9lfJ<(X>y)E>O20@1u zz$ic+l6^k^0CUa9PXL=*Jh#+6KQk+=+)RV&Qa7mCLn9_VFR5jio(WXb!(uK) zv439qibY~aPfE-<>$1V+cDlG1j?64oNSrwkwrlhgAdqTqMqoIPwC2vWe7^rg`M~F3+BQzN@Yp# z{g*L?UcoB4i&mdkjOv0NxgCmt``^50N|ncy-Bi`7b5k`263SLkf#y}yWn1(0ygAkM zIEl)y{wQU@P@z1yS?+&W9MxT*(Qf7Iyr)QZ9UCGb6 zjgK1=45mUtRr*RDPf{hBXIhW|H)0pK-r)ZL#i5>u)D;R{Z7;Vnkt(xwBolr=E=)t} z0?SV+w9TbVy62g@3=do17!bu3w%m4Fizd)YRHOUEs^lbR`p0g<>0Xo1$CRc}-m`pE z-5R$i;m!Ff=C=zbZ(AraT4mfVR=D=Kx4`_|2>v=jm2$X7dqEokV zE(?ri_xeL=y?EtvXtO0c3Q51?Nx9ECiQ_pjH^|ClRLIxalKNrETKh<%%o2w%lB`^w z4t~)yt0@xH`X7NQa8Y5oyBqm_p5rl}wL^ARu$r{g`utQlRNDMIf31%(dD3+@Do9&( zMR>a#x;()=argfKXralsxsw|*@xl9ZBy=rh`Fb~jQkdPm6rH!Q^Jd@D8|w<2Q_^dq z2TtT51{8~3H}(5kC7q@wZl0NmbtiVhN)eI`&u?F7s#a+822pE$E9V|Xb~wR=1UDef zky$vYQK``u^x}wdXTwpk3GeIg&7(o-y!6#M08FTpdk_z6oAVW^6mES=E^YvS67guW zX_{QSlV#xfQ41baWMChBa|x6wPz*R}SX8vvwdG!!DqWOdIxXb@*r)5nX4=!K+O~Cp zJ0U*G7vgLwQcgj*F*VdJLMZI~oSP~m!>|g^tYDQ5LsgooI<{ws0_VdcZg0*z!sEmO z?wRugl85t~)|S@u)cSjWGcXH^IW3RF-u%S1V_XeYN^?(#k`}hYe|U1M5Pv_kdH#j0 z>Xdu8G~sy!?j_7;`!QytYWa$gGmWIB#JPQ&^Ys||LWC;U9kPd7Cgv0IKhX-}Cnl=Y z)FDlkiz9i*m+2TY6sq+CqL8#HwYG1YjK`)rk=0qHOiT&41B(c_Zs1(o5s7OpWhk;9 zsLPuzW%kg@crhzh7wA zwDz*6zS2{=<$1UQtbRz<==?|(?X>3N3bTJYC(C?pjt*N^y)Qc0EoDB@aYB#}KP zw*t6Iim%vrj6SRibl}to^+)6Y6jk6p4R3zcIy(X%ake9fUs@}7C+tN#~&TK zPg6c>!6tV&g9gPt_WK4$Vwjk^f?jW5Hm4Y|4E<<)M_{5~hv z%?t5eO?Hsl=VZJ`R1gn_Q)`~tS1}9LTFn7ETBE7tsf8C!I0 zRcXbPRvU3eWT>b*0=TfnxQ&ldd|^^)R7q+%24PN2B_&F6Ilc05c*Ftl^M@#8nYB%o zX@t>qzg%QyT2u5TEFc}85)+Zl@q2pn8g`1;GO3qs*@osql$-4ZI5r<>@P4b;dPh-f zBx*WL`*M#=IZk>At?B zR4Hw)cB+BB7aQIJ#~gEh_Khx;t#tOpHm4C~3tPnmk>9*{`Bk@7PfZ6Ga&~TJUZ|g( zkwTkNQhY!F7QQe2Vq%Pjr(}buKuJj;kdfQ%6)E48a!tvaWaw`B0c!+gj`xcGlh^2_ z)!w4b)Z23DQEk%dKs;lfVg((SiCxOAwa0TwpU@PoLr!%Q4=j+{z}m2z5iN~3HgBPGW|Y#~}lU-Zy@GUl@`l&L?v zb#EkvW4Esm_}f#Dshu?JIrW}*>NiUIjiV_uPf6EPIJQ$}b}~sPZSHTt?GaiV;s;rD z(@cEktC0xYt*BATRbqI^_3eoDtG!B;thA|F33*qRv=F2%#GCqKv|>LHvl<6d(q^>Q zxTMQVHtK*|sVTVNk`yvH7!lovGG(O5p1sa2m~vw08}aO9w@-d1X?mKFikn2OO0fwl zu^7FMV?)xtZ(?c0v|Ca@!NBDm69fePHX2N=&T{NI39O+lwq4+>fuJ zjd!N=Z#_KI&Z*Dd5(#$z0o#m!ez4iJc&wC%7JQB0_nxMc)UtKt`4%>%Am5XoKcqcw zc9PplOK2;>{6oBB3D)woFdK5D(gm-%O9J-yJj5od_<_<=R8sHl`F7vA2?}@&fqz)w zI2gStor5Bkn`-qeqv34JJNR*EtX6dtr8#A9wQva`ML$UMeuem|Y1#J}e^E<#PPh|w zyn(b{**1*}QuT{Yy+904zRR1Cm8EHTTG%AqeWL#Wh02XYNqCEpZn?Si`>Cuubd)G& z--g)7uV}h8TV|xBtiRT1YS zBWdzH4UO}Eye3^1Rr3)JElRS9=|d|-oRv(SU8Jci{3^C>+9|s0r1Z8Wrs}$4r7(w! zC--i+HrOZGH|8@fL-7GCLY43(YV4`&k{c^YAl!SA15fLN8qtN*MyZrS%YVFNO*T{k z#z3(GBDi%6$m&tDU~|uMLWe)AX%lF6YH62PN!p-E@}51S=_#tb8C0p~TUb&>$+faL z?G@cGp{1rJTz%@|pK4)y)YA$DAc2bzeWA^FrZUwDCX-C7EtXP{7Q)lGgKx#p5XWIO zVh!PXkUdwG&=Z<2vofl3+*y-biAk|e;MoIhxIgb6X82q9(y7vQ4QE5uCD7Xv6RJfu zMY5H6etZyB?e~pSsd{Tx&?ToS^$NNc(^85<1xVUmB^R~t^%3JufAIaPD^;g;r2x&Q zuC%zO+LK_o7DdRljg5i)HZk-c57XexjF}CC)bllZhQ#W~DEiN%+9Rq}EnI^8GmR1k z^(Vw2fsCB`#o9+&NmC`y%)7a2%8)t!vGarBD^PWoty`$kbsYw;FEY?p>8Yj^+DcQf z1OQS1B$9i5BhWM{%}nwG6>5akvy8eBww!ET2{|O-cFb|=eim`L0Et{W<;psqv8U^5 zWb*Eo#`0}oKjsvw>uH)?!)cn{TX2g6q}YDEMjNDSw0Snr#IQtSZh$I4geqQnCHkgjNor{<-=ZUQ+T+cq>4FEXUqMkT0Jw>lgrLz3g z*4_cI?durTGhItKyD;if4s4}}oJO%_ND4yIPCxr4;thm#Qmd3rVZB8~o>^jMprd>e zk_GV;okgo>I!jejsmKn<%|4~9FOXH9-s*^nYMip$L*om*!78?5qwx(}u2lMUIU`S% zQ^g5NiAuKI1q<0jgTaG~0673BgBh|~SoE9Tjq05%Qc0kpVL?a*M;PPZ-Xv$_H1y-) z*IaSc1qB3e7Qfm&d+^`Y=~Pfegv`=gm}wykmvU?=Y>)scSE&crnA;@!infAK+rdgB z_*Mx&PgpthO@ko~U)}!zNR{S6w)l_y7dA&S zy(wRMUGXf6QtxzV~pORb2WPje5 zX`pUBVrqiNq+;|e%)76@;nha!3Y@R>(^Z)ll#8ODFxV}H6_RXHE-<4WWY(Vw+NxG+ zc7?5|6DgaJ*tI&eZcB~Wf7?(NCdT$YoulY}mYomDq2?cV#oKMDu^`xTI~>D${aq67 zsz*^$(J?OSHahB+w&06@NcMEU7S?IVQg;FR&ofc*-6o)xsx#)zer7{XOUr3We5$3K zmS+LcVs4+rPpy(+DmPF1->&77trR6x(!xWpO*#>@WN>UP^}ifPramD)1vJN6D-2dN zMMbJtfw->hDdai0pDKWHB|gL++;bTBP5vIb{ibzn-j&rNb((yV+)Sj?k}7S7_N*m4 z749+yc;-HXPpreA32?)As58jTfwcJo5O(!qSv0>#>U3IjZ7OL$G{_2>eqf&ocDb@h zAMF<^6>3OK{IH%(!wis_g_g$4+dO915jWR9lqIQF@|?Q>W@E z32Xw%Q+rTVj%{<^DAnCT)a@xU%#Nm;kakhPP)kcvf`PU76Kiu0=5!ZVw4RbwPI3j8`hAwTPaGDk;uOs#oC1Kp4MJkV+diU+$()4NC8T>Y;%~*`ctK8nx=IV zbtws{YFjDT7Qj+c;I+loi*}7>kc|UKXZBW=)7uU9lH9>viN(%w9GbowfitH7+@R2@ zPwLHGojMmTD1j~bcyS21U4V}|^`A#EUZO8jQZ(GdiI`CfOKn*0D$Tz;^T+G#`i6uR z`ci|_&8_W(ww-`;+V{>qqQ2&lc85<@HOVI)VMq6l+_Kh z=3|;$R?;S3q*L_ZWcHd@G{c4X9s*#>$#O`q{g5odeN)9`B zkE8zpl}y-)Wv`s^KjWJQP7m5udOg+ohcxQt<^g3buL)9aq>B$z^@}R?4PISsGa*zj zNUHZKKnoWp_qD-1#WPrR8>n=hP_d#YQ!>)CI9sTfDne7Z{#*=3@6s-u=_*|q)3rOs za(BbnUKc>QCc|h^&k@0>T_|4^9{oF=c%M)o!z24l53KSXKGw~%EmV@36HFB;iKdgA z<8_arx1?3&dQ&q*pe|}ca%N^(N=cYaMS*gT=}oO{3?F#)%~Pa0Qd*|gp=LwI@YlP* zC?z%`#Pg1C_Jrpsblp)hB&jm)N;VO+tL68hIp?*8VN+Ze7)9iI%AG#!yU6SHo))cq zH`4VrQfjj)OqpS&dAvmxabON@VaI4BrC&?vc{V9@eL+x_m}#SOm%#yGTZ>yZk8En* zmTDPk6-rX84Zpo6%qCo9W89PZ`$l$-fmJ89VrORbFm7BVA=lh(ZKX%K$2Y&B`o~@$ zh%2oV$G86gWHV_>o#0zcx1zmPt!f$c%Gc^mnPs3wQN>1V2c z^wR}9+-YNQH|=}dF;%JjE$EFoAyE?Ue5Z}MV6nMGD%elr`{VM8jI`}1rPN0!=2qN5(xn0*qh*b#Ivp)LA*x3-NUEx@N<}5{Q8?68{xx2Nu@Q-A5xi9i~j)Z zlc6plK=!amiOPd@jVmhqvJ`~wcv;Igv@JHV_F)=^tk23hxEDfhkW@|YfPHOpeIm@p zwOux2_T@Rm&lRrTRD~1+i{k#VX46{pPHHJ-%hu*vQ`sezI1}mq@o}3rB^x^uZi|(O zZbZnnr^3xnp73#sseYYprM0|NK*jO^_lhR2_%YBrx`#5ujJ}mPFXDKBC}#LOPp5eF z`+}V~^4gQCskU5eX=JPrlgD%EpS)AGy)vOL+EptsN)z~iXb`N3t}SMJ?u?n!;`>jU zU1|7At@QGs;^}JfC43^Z+}%KC_p(6k7`0DH&r?*iEwTa$xiR$8%uN#lt* z$%z!~LU#aviXJ~lRCO)RoQo2LJ}FdNeR!?#8m#Wnwpzj(%n_p$+!H% z6H@CLEfPS%yfAV}&E7;Ck$xhj2SO;T=1VtL69aObJBm(VRb36Y^6Db})ow@jA^~12 zYuo`%j!oe0lAw1kzz*X#gdj6ia4V^4a-An!kh^Y#zA{M|Fkg@+)2 zf8C+x<*ZmI{{YE@CX+WXEZb#7jFLarCP6W}5rG~Z#fZSovS7(~cG6L6aqAA1MwyjX z`H*98)3y+V3IpTtd%{fw@}JhUz-3WJ?|1!dTgAs z%c&RK2=fTE(jU<=Us+5^+u&`8>t7%u#<|ZrYpgAew(BzQY2}k|U6NOy& z9K>HRRH5q<*^fL*``SvARdEtB62ZBIfC(SOPq^(BU3JqMjX7@2Ow$5F4oX3~v&h75 zT_@AD`DvFb6Amo}^dtuqExe2R_Tv!0P_*qnW!DsG!PQ^)YIS$U@8KYO97i^6p(u7` z@RHs1Czz$E6o(rj$yd-v00GQ9T4h*inPf1esRso@{{Tqes9Ix6yG3mUPRwJZ=6N$ zyP%#`Sxi%iL#a0>aUn+-3;D?)e`#3nKkk%d2gVm#HqX3 zgU=q&K^bZ~><{y(qc!O_TyY*XwhkR2XWKB7HMS;JB$oZRn{P<;F<;b_dFg2q6)dou zl@qY}y}t1gMVXk9{{XA~@|2a`EtKG97%2u~_1E&66zsgyOl;g0bct_2vWO@xeE)9sdZ%~ zLQIeXu%pgx>l2eNluCuuKn`4RkO9y9#W2%kTv}X~n8E%hVK=1P#er zhacVG8}@>>o2ff6&ZB-vyeAnz-}}oGel9+p;;}gN(Q$1qZAD4v#8wIW2zaWz{M!CX zp4*N%ob72BD*AfF7N;7KnU4kPJo9T-NK~?cIp>c^Qh0@1(k&$AR$7Kcn zZcMPsoN>k*C8tr8gn$LDY~n8ZQhQly3c6|&jlRoBUzM@|E3vn6e8&!d5d5XEvh23* zY)7U#S&A~`U6pmhq6=AknBWv%70;xq>OaB8oA)y<_L87gRFkh3(M6OTne)H*aVT!Z)h308l1vX!zy4X z;chrj7qx}C`bC1LqutZ3x?HJ;f}A8EBFFOwF%+~pPhbSespl1YCS zSZD7QeN$L=aVmAU%ZeYwq>`a~aoW(N-%jc(Wpi#kvJwu~%()=`M-f|{ofO@)*^;1E zFhSeL80{Sii4us5x!U(hYHZMMRZmS#Cw9|xn-UMKN7rkJltYL^+ZAF{wIhpvScRyw zGW6JChSa`IkWM}BVYPCTGdCip)h%U!Y?l@0y|K2#)*6och@{c8A*cF*H7z~z?#%+? zRCX!E8++d|+LKTyO0HU>!v^RJ@{(>p-XJSlBDUuL01lHf39#MfAdB{f4ryAt+Ye35 zt&oguQhyM)u07(ktS&0K=WL3u%}9kgcfT6aR-0f0>H0-KQ_0YoP@GF@Dq4K0Q68~; zMvj%J%_n-mA$x+{7$@2SZ>Q31&!%Q#Z7%Fd0kMDu{cq_GTy$cqZ9RYXdHYeZIZ<(8 zqy$}789C-5AL;F8Wo5@~lyYryf24XwtE2R!y2pbil@$?V*(NI*x>`a?U9>RTPV0pp zEo(w-QwNFWp)sjFEZsSKUq<2uf{4UBWye&a!V-{_4?2LqKa%9PyHx0UCXc(5k@{i4G!T~xCGIF#6= zcIW%FG?A#uyr9{?7$pAy#5tXmOR}mm*%rn#kMGh5GJZ7GuO-Re<1!+I!F z&y>uubNn~W`GyQvUY2v@W|EWHAtOJWPSGb&r3XAT4fnATtW?Ui-$pLdY4WQdGSWr; zbGGA%Z!pC^sW7Ic)8!VhNdS6rZ+L%Dl9j16p)#RKe&ZgyQL0O5O1 ze=!jAYpcnvZLOsgf^14i`^6LhZZ73Ki9ID;VohbVxKu|e7cnH}rgMT`bt=3WCMZ{dqR*5YZY=ztyyv4R+SNQe4ymxzqCZ9#62*V7L?<) zxPf`Ol!9GKu0{b(pptCvR`<^%h;c#y0OU*7f^Z4+s$SOsTqI&WOVUPDF-C2ljcpWd&i}^IjH5>VGK>VwLw7S{c#+6fp=Zb-8+h_nxj(dWd7ll zpbiQ#-`nzpt203jtvl2RNf$rT7pK07!k-Py6yI=3+ku0AIEK|<47ahET;DWlADoiW81t|{0fBYt5e8PNIq-Z*WNAjiK%In%QUno@srQeEI@813>wQz$keRKN+E=K)w7MK1}pV> z=c-Fnhk&7u)`t>O6ZHn0+=U(K^CcqSdqXW)>L^mby$CAXo8uNZv`H44lueO=jwwx72Vlh^fIlP`waXq2M%0CSwfxjkZJ+DhgY zlVjyc9DlS~v64K|S1pVvRKib(y6VO_hFm0mS&l-+m+nDY8irnTLdTru{iv$W0NMFs3!QG2=+yHJz=Ev>Ou^X7(r5j7qQ$t z$AUhv^HNnsRiQ6*?outcf-)m6>9os|Z8r4#iUCPKi6Y?MERyrU)C9>`vQB$)a&a6% zNODBG7jIbdrAHDHo;p8o(&(Bnl`X3%Cs#(0LvyO30xvo9h~bvma`UPDcbw`C|M`Mt>&&-@6% zCK;4PdE~XhAIoi`_P_Ouezn)snc8&18g%%9K3lA2%8Zq*TJsYwzcBI=**6LP%vC(8 zMn#A5HwfciY8jd`*2JXn+7d0g`L($8iWHAtt8y zqKMv-W>NJ`%(4PPj^dABQGVHlBy@KZstT(ln&&^qLaL3rFsXO0YK`I{}EwDSE{G>$B4(J|a%^ zwm*!H2e)Xh>#m{IHB`g0ud<~#zSan_!TZ4$j7XTa^#j@i9Yd=qtxB3I+<93y{;_4! zT}rFWG~}vZDIqo+6%{E>C!LrU1ZMZg`@&>j5LHG-*xxDj$E96NsJl!w7iFyz53n5scrJtOaN+r_Tb}7MdEo|r7Hr)}{ z{U=e>(sUWhic<5<0^O80l6!L=JK`!$iRuiB!fg7dS=5tVVp2}zEzp+;Rknk~Dd zCoNg0w=+?cOXF?)$-RyNynP`qCJ6ge>5dQ!a9)#((G(Y*1NomoptF) z8}Mfe>{O)fP*7HJ&98pZMVHnTmL$}|QR7WGf;W?UD>?c{&}|kjaj%(40!3BpbMh5s z%uCLwx4XzvvxvCqo~GAXpe^O8FQ8kkV?h9&t^|rG=fKxHmXSABQ>jj!y`-W+X*yomX?vw2z5>BOx()8q+_zNd3x! zfJQ~djxQ3`5AhYzl!lio&0(u;uyew5aUk}O7E%5f`mbD={i4Lrg42pO+=ZKPMgZ^Y z#45+bPN8?H6dfT`tO<41ro(Q{JPJ_JBv|BQ2i_*y3{EZmC09Kipz}RipYcX!Rp%vB zTXZs165Fme=|(y7kM9C2)$j2fBXvoNn<{;TZkG(U=kE@1NjJ6Pjqz3RiBRaqg{PuU zc@+edg%_DoS_twB6R{;HC)WPahd-nz^)$cAQ>gb1t81Su(YQa%dBD6^7Kch!&|Sqk zr#v@edi$lH6xxTal?2Gtb+Zh*=|V~!TDGrowT62L^-hiWe6MSbEX2(ZUHFR@I|137 z3V8MEW2o`EvH+3B>4(RHy*L|FW^V1nr>r7NhMl?bi)m#J!=$$;e(QU zCmSiGP@<`DN0Ft{qk~ZgF5Ok|WaE>#JI6T3yD!%xpKYDh-6KJBa|B4&?hr z3g1v@l~!L&oWlw)665=S73@IzaUO1!i?@hWT)t%~<=$)OJeSgKQ`Fk;QKxBWo>Mce zI-@d|Tp=MTRfq&C+@3EVLi!HIj+>{jimge>=e#Se{l>uV7y{QEN6)(EvTCdGN}4{W zuCpghD5;tEg@e4*#}-u&`W7^Evt^hKH0or9Yg5evzV(Qc9hc(w15ChZ=otV zBwplS(}?tKPF|YBZze@$I}{6RFJ9wzZT5ZM;U_6dn@YB*@^5jEOvjn0 z%IJH)tnSp~T%MIYqpv<6`kPjD6S`MN_>(>%TWzy8+eleWtO-(+&$%CHr_`&T6m{Ct zI$>DT49Pnx-p7mch*}#>zlfpI58=SPZQW_=?52^T&r(&XP?@J0S|uKxBX06Be1bmR zqXN=D6mmLW=LWEwr9zu96N0IE~9j{AkfME|Qs~%vILH*2&MIJJ)c_zdR zU$Bn6qaI=WM5wsiDljT<_Wp2b9~KR3xzS3LtUQUA60>zWph~QJsMuT5@d5CM)SC4J ztTWTvyI45jBf^IZi5c-|=oX1CRKMV8y3o+O^30#cYlVCxdhBN5ihV)76bW zhAFjjra-zDH(hs9&!lJ*+KsfRrcQLM17(0nH}sE@eGvZu63U-XY7J5~g%`qMfA$2{LGt9$q~5Cy1j)UWjVkdx%Z8a z25f1u)Q_~AN#BrIzO8 zSWQi~HoT@=NL}q@-0eGtBg(xb>ehj*Promus-ec+N%@30_}p?hw?FW48?6SjK+*J} zQ<8N`b7|Ppj^%FT3k!NjE~gemu20Ha5l26iO5UXD?M8u8Q`Gq+rd74&k^)Ht@&M-e zF-WP`=4JIvvq)w3%2odWao0H)%0_z&esHJ6-(72Rscjl=g7KJfv^Zu`&y@!G2Itf1 z%w#nWh-6IEHqNLS$wYX8w6qPt$Q=5U=^eUUIr6A1vN>{M!23gWJqtwB-C(b}X6Twy zW$7d&sWlWjgrRutxnQ6D!`Vv0sB^n@O-1QvLawy5_lODi3BP#3`XljGs@~O)Q{`Pp z$tC2Z%Di?e#0%JNAd8Z38wdXY63%KG#KxzgY6Cg*Dl2wOOeI9AS37NM;{Ls%a^N^} z703V{hHQD)D*pfvlPt4YOgsC~ovZNo z0Dx?7?~BAnqtQC%l({zQj{JiHWj-=x@S;2IDi#Oc(Tn^^$m?#JO^s)wwPQ09Ye7`> zrB-AWsNEnG6r^X&Nx$m{Pou+=D5Lb7CTzIVpXDpPEb2V=f$B|OXHx1Cgv`v{#JsE| z?jMHO{{VlqdizTCw@SY!D>&svjmjHT>PoTbZO^29#@8PZnul4f#u=wbwK|M7HMek5 zK|WG%pI@|7ss8{JeOlAi6H1<%Xtd)+3JtbEv9mL4JgtoB(=!xd(wSEJ(?rwd) z)7?(fPt%#1m8r7g{49pme_!wWHk_yRHEA2r_$wm`NjJ5l3Gb<)%Je zw2zQ^#3(khZY|pQ?jzdzPvTpr^qDl%>h3;W*h-#J7r5t@f24f=x8S)n%}1ZK^z{D# z5=_@zRP_ZvRtlnwoYeb`1=tO)8>jCMXKU20IP-IcXgC9VR`cFtc=EK@#m`M=E3&k@ zR;HJ6$DIHXw~sHs`}d7APW4|&R^(AE`-m-A6qOX%s@~`C9%JaTBH0{$CveoGSi3)2 zw6oNCB+3bzRJ(2{s^p~>$KD%N_0tom2orxU<*W_PZ|*K4j=rJOMHzpy*4Qasjg$$! zyO3fLzO~3mRFh4qxY`_Azje5NA#9PH^AY?z6JSRfs8O0#4z%o$TkcG#IHi)3+OT-B z#v)2$pysTUT{^i%T1idYe#3fCZ08YC(>lIJtkQ&%T3QruzjohD0eH1(R%f4o$9inE z$`o#utISRz9SZg%Bi~1fV(HF{qtdBf9Mj5L_Y0-f-)*tpBy|@}w8o@tCT4DFtDh>R z-2&%6pym)1id@vqkyKhq1dFTyJNiR}Rw>kJQz(@eN=<@+z0a@d9IoxU!Inf?+C(|& zy*_?~x(wY#*_0`zAc>`g6<+??<}%lMV^8T7RaL3kE6XM0;WM{-QVF%d9C9N`lAf+l zJM$8W+Jyjaw8Zk{#X?Wz>P5AMBn9Fqxw7Frp8JZ}@#GclDVjr8>3w3&w-%-3L!gDo%+wprx;Ri;e?x`9c$P`mGTl zt?mA*3cZiKZOX^U(1Bu@M!i7k-A0?G=3CKp?bOB!cQA(?j-VwRgqQjzPl5s26Xk|Y>Y(({RQBwUT+ z;v%M9a-JE>FRZf2XS<-S^BfE!y2K~W0sO^FBUE+OScqb(-qhb1tH zW}itnEs ztN2r*>N(+8ZlwAhKqZAV;M#C36q|4@+ukU3oeQiwWl~aCPX#Gjf+iH%*tGUHwW6vt z`B#I?i=5couPnS)I#$N3LQ>U`NV<@v1n$qMiltZKB895oaf;NGqim=E+lxY0v=MBe zkHeAq7=+T@O{~-xFv8z)mm0V}DYo3?h_g^SvgILdiu}_`87Wa%y}KTMkmK=KKPj5< z<(buQ;2yiAXCA5ODZwz>kV$FnwyQ)x-YC8g24IFj*^o!5A|BT1NYpZ)D*Z9Fc%X&<0OAe|TOY+WSkLj7aQVr$ zg9ESd&flc@$*uMEH$g3#IcoI6Q!%-@mYzz2lA&t^p2MEqq2ErmPMFp;mRU7PgtE(O z@f~cb30kp^GlPH1Jw?`EfsUW`l0?#KPCX#DR#b;&5|CApZcfw1y&|L1AMo^Vr1S36 zW%Yrcr1*+)l)jt1m7Z=u2_nOrUOh}2?}xSny{V@LZ7#7$7}nIts+})K)8!FYny5@P z5Ny+laQW7KZt>Ti>$(9Hcic>VGl zQLwN#z~h*Cr>Hu+<&?K%XQdF(0EZY-P(buiPqn#@Bj?9z-|zFCK<$6aRS>K6wvSzD zTc}O4@Xv_a5G0&)$ z`!v@lQYU9;SaAqR2wGM_0CqOVXivoDLr17v4mTDDGX~dR4K%G}+KlZ1w_7RUZ6x}e zaUOo^Klpp;EkdVNN2Mu+Zm}()vD@e)-`aw=O`=j@WJESCT%7r$8E&$bzl5BXfi=YadW{|0Xtkk z7ykhAOjYWC;n!QAo3#wMmPx>MXx$%02(`O_ZX-AU z0N@Q`nWaff(nG2S$7{&J_c!*Bv-)u9s_tCVEs3+1M z$b2e>Cq1^2fA)&* zzW6rL)ik>^D#A?0&nlZuf{n4lVaNVUg!*?TzYEm*`cIG54uv-TRLIfiFh$eikOB7M zBBpv1ubOet)vs61akYwBN)DA%=-`}Kl4N7DH`bagP=4D!Mr^3HF z)S7m>R-}M}K*=N5>&$KXOW>nKYI#PcCZ?w(pS_%IrJ$#S&y;}-q>&H}oB%ho&fwQY#6Qd8N8g;!?D(#3Y=@wZz=Fylm*fVddWK=q7s zsGT6CX}QNL6zTQ2U2uNwz!F9YxZ?5W;?-r|RsCmgf|(P^+{yK>lYN&NsYoRSY6O;n z7Cd&x`owIbb(R2Oa)<$6jO`p->&$EP8b*(qY_~k6hxxjl001LE+`n$NMq#$Fr)gJZ z(N2~wBH)6yvz+7fi#AZLKz`9^vhpfsbq#G;l5b-(y9-CikfUMg6B=Jr)T^WCCW_o% z(3ITWDJSY+)!vZMpJlp~iJVX>JCkf1THS~l5h0~zX;KcNkvT5pyJ`b-j^Ka?srMF! z;G1Zf2mn`7udDTIG-;oPDMBG8#~o`ubNOvZ4IF1J4q?W)ZRLot>yI-rP;!U%Vxo8 zN2j;m@f|N*>D%=OKWI@D5~~tMM;}-TnY{%pqU9-o+EjejcQ*9L5hM$IaV}iB;!W2y zxu~biE)YPu!S86S)HDR-?3&z_ZK6jZ00YhpJa?#c2Ie=pGcX%S770pJ0)GAA zjrCtd&L0UAE+IjA+(K`j`Tqb|Z~*nV1LRsDedIiy627NRK7O1mkT%@|>E0ue)4fAd znp0BL!LTc7aIGW1*XtT}2U%%(mPtg*ciuAFqtHXvbqs#JnaW!;E;ibZ^K@M}!0t?46Y%Z6Ov}pCrJI=w%76+SdszN(N>^TV&YYF- z*?Qg>Dn>yj{{VdP4=6tt4WKxwNp{>_tc4WY1pR)I!KYEUOXjwJ0n z67wn~D#qTCagaH(d5Ej95g7DVda%U8QsqIt$U!bNvz1_DCei90BdFxxlVSInmqNg~ zLv0X9A5XM-&rNjY#33q8W?c&-l|BGh7|dweCa*}*lc9RrXXY7b0uv}gfj;9Mk2i(P zs`$n6BaAX-Ej<~fI-N(QJ||Y#Xe9#0DucY%c-e4xI)$2?Gd0x2$EfKA}q2Cy*tnGfpn) zQ(M@#e`6Qgai}`46v}uDLhew%rM)AC@v`_e(`NdRB)+8VKv>~z$z-;m%DVf^+X|=7DB`GPgMe* z^xZ|xveIn@3yrC3@n?c9>|zF`pmdz`iCpfUl|F2#O{8Z308eN}h^oAk0k=a+Rz;Az z_qBu_Pu3i5P8QOF1-#1^x2$2fbY#UIYxa!l-7(ThP<5FGfe6}^qyP`pMOLGyw3MXT zOzeYASX$w+a7UquioIpl6S`s4k`Lex*mv|XO4Pcs=jMxSORS6A&UbP3nrzn#W#J02%ZV~{^<2LFhn3ZZ}C5Br|L0JeE3K_@i4=1W_GUDb1MW)F-DPUOV z82<4P+O~djp(0l=QEuTmSWx7D?mID~2IfpxH~PwTVVPzn%e2;zf{YN9WnP?Pyj7=b z?#Vo}Hk9okf}jt+Z4x@uP*2E6CAoE>PK1!9SR3cme|e0bRqE-&w-%(7sHbi$ZZ2b| zXjvC3dy<-`Ur0-~Lr$nE3IiAP=H9WHYQCh-t<@zHM2pyD;CPhM0xf2UF7d~&-m}X{X_Sn69i(4?lVfGkNOMhZj2uw|| z5)_9nN8-##u_u{;x#@)mWXF+yPTBA4Xl|8C%^^Zzyad|{$%(0&I@K;F6xhA5d=QX$ zh}Bb&-PQp%HUQc_aa)R=1QQrFAtDvMlX3=A#s1KPm4_shr5AjlnBO6XRg0ya?JBKC(R7%dWhmIV+Nd$hdoh$Z?w9#bTpn+fr z%tFr9Cgl`~Nw$=Ys^wgNShH#RguKIPON;^(oT)$)4#tH{yNcM7(i0_Z_%jSF=kXFP z$E-(H*p>OT%*wKEEIj;uVp-V~p-3{S1uEqvfoMumz*9FKnWnK#G6_kYANOTO*yfbg?FYBGi;XbMUng_@p_|9NjT#{z>qIsl&3j~HyM<1NOdSkDo_gYgKt=W5T~pj z5M##^4jmgZyWF2))iem&Py8HmARVAe(Axnt-Ki?F2IG5r#^F0JEbO5#FxWxH5I>|= zs~SR1tp5Or%66qA0>dZrij0ayp1!deU1mF}X$xBdVo4j8qxb>fas6TfU6e~NY|vOy z&8{O`)Y>YeOOs5*vmw-_S5OKZXMx@+x`5J>g)Gz1mj(eXj>kWEvXH_^5I7MkJ93gL zL&$6rGlg(_Mzzx_%AT4+iiq6c%8vr(G3rY*vn~{+0avzd`bN2+sIE&glJiPR!M%_N zsrHCw+jZ+Yah@jcr0cTo$~N01+@i`+PD1gEed0=|E}+;5O}s&3H(Tu)){Uvmu{g_0 zDzZM~XK`J&LBD3mwij7vKHt1K2Hl-48ZTGY`B`QgqGd55Mpo>?v187>ztHczObrHe8 zYejNnSk#t(e(AaVJ3z7hAqtajx=CVbz)2+8T*NHHvkbjtwg%gbW-P75kQ`LM>3R8A zWp+%cdB>QO&P+^FwH+#u>6Mdy`-V_XFK*WyMsG~iszQ{K=l~+;2Er1j)~3FH_Ja%D z8*}j-i$&2u6C1wfi>}|R))`W%&nyQ~Wmt<09?_6gG-X}tldQOs6pNgJ=8Yy_sWkUx zl(43f;%{NtpGd6LH5i|s69_^|iRB{K{bI`BDJEKeB{q#h+dfxPm@Rl^SyFHM4|tJc zO}C#*?A1ey-DM+T{Nl?|q0=gi3FH8ml8_dZV&~u1BBdy)q$O1+Wx+d!(Yzn8A4nr> zb1-5JA4zo4QmU!bzDf1?k0mMCRK2%8k)`N;B;7ausIZ?iV|YN$WBnx8D>O`g4WhHAn0!@-t zffPM!sOPCO4k?L(l!Y4$pD-5w{{T3rg-i2_*;u%^$6ZwCWM9XCumS$ zBrEcas!pydj~&L}`3w#sZTd3`l1jwM@fMPBco+IW*}U9mYF-3VrKp+IbrDXIPlTP@ zK_>)%W7Z|A8cN)9IA_K*1D#=kK z!w^*QAb%u=s8FS-)dyN~$_W?V4X!!$iu}}vjXJlPbIZv3 z3*3Hu!+I?d$=S33vXG@^A$W&i(a`(J%@-w0s?8yar6SD}WGcjvZxVe>=+yNbxnHAF zfst_lwBktT0E=Gy#fMMnX$hu2LS1E-fx27**EaSMZLCd9RWw?3l&X)I%O%S-C-t_9Z|7$R!%eYg1E-&6E<2~i|AgqYke-;vr^5hHsTVIU@Sm4 z9gJT3dGT$k7p)~Hr$dW%E~EkzVhs`Vr+Vr+$_(hy)Em&)S7Zxl*|RPq}kAg8{arS zw#;26^`ylGrBBjW+7?d5m1JAe{j(lO_;sC~Z%JF%FXmpYtoE_})V02g0? zZAH-zzCEfsZ%3McPU+0wl!@du>X(>lhQqb?dtiEtq|ZCw8V5H|FW75sny0EO;|nD~FFYu=ku0;}|r zsmC2>Vnd9y($ut(+?x*f#C>jq;$(5q_yIcSmS5N0ygMBMF#WjS%XVEpdK8xQ}pe_TqB6PeU#(YyOp0_@}{S?G(W@~mXnfdmm^F|jx^5K-*wz1 zqydYMKn5Zwtle#rnyzX6X2iQ|os*jn%q4`~B_N>M_OQUVJ!8sr-CsDl;`K&t;@QfA zTvku#9)|c!(z>s%I>_nXm~_r#QZ1w**|wbU{5FzJuC+Q+5}bP95i+=x?mS;`lyUQ( zshjGan)s;bYjX7Y6|*%WhT3$xe5)iU83XxG7yEY~hwp;!sTz0rrm50q>CC)2RMToM zpnyYwZn(Zj9ivj{wI8H^4SEuzQtD+Ah}B8eG_gwvZRvIvoRp{~Hd=uo43I6!hk6g= zN};KBgp|cEQ_8ALJeHl1ZKWXv8;9_dY+l?E9wYokuqjLe!2bYvsoI($nYZQQ{fG0p z<)4YKfX93@zp9j4oke^G1FNt>Cd?CLO zDBUSHHa5OT-uaKAvl?rs-D0CTJ4SWXPO3>n9f=52n`{8OeMWQnM~D6@s8W;E>b*9i z(=`Q2EykxMW*tg`3KmAhg?b*|qAR5Mm*ZF?jy+^EXx~T4H|;!s)sKuC$5D{X)e@mG zD1&-Fs`FBF+s1)%Lzov zfV&2oK2eL?2Z*f8R%V%;4>vNTulSUO5gx+gMHHY^nDdTI*B|OnQnfaR zi=TTKEXKL4%&jYaprt7$bgS-6;{&WWGc#V zoNe{D^omzkekSy$gQKc$lJCy1fPhtwY(N0ti+$tfZkg)-y`@soQj@7Z8$v=*w7RPT zJ97@Ez9aSD?MB~frlmC9f}3*WD0jF~{_h-#@XT1+{XcnQsmSX?xvhLed`nL2>Z?6M@@XF1F{KnnL9RC2cM(U|vwe%{s?Mjs_iE4AH2V$RT+W>$_#r;qF-ZPyY zP}EfBnVONPPI!s@WtYlPd}hMk?GCkXRC$tW2=`s#r>Wf{r50GP6^Q zAH3%S*5t_eo7MC6a?I4i(%Y6QLt!B92KNTo;w|;Rih7+-Wf-etP9Y*^aW_4VHrpf9 z=^k&IsR2B?l|Es_60%4J!6cqB1e>bQRjM90?Gw0>Wq5>J9ic)XJPu`wk|(5O80aRh z)97{2x zQfkd;?Kxc`GOF7k@t53CcLf31pE2%Z(6t_(^-`tNwaL*L6`@lp4oifF*T_4LNKdah zj|u6D^V)K3>X#+Qh(b$9ST+j5xv>}GH!hX`0Eq6O(dtf@sMV0vyP#pTtQ4sr+xU;S zKJme<)8^l~1(@1)LG>TXmL|xmJ-eNloiU##LVnXgt7x4eu4LSD zvsqg$vQiv%^sfMB`!G+ZJ>v%JuSZ>@nVG(pYUzKOn3qz6LP#M_5DC53vu+3F74D?< zS5oQO3Y|K4T+|PU4}zEG*X03N7r(LK$DR7c@h7ip)tMQWDlf|!X*95s+shl<1$V!g z-usSw!|3#yrEpY=lgX&Tm>XX=zx#5}(-w%$W`d8W%^!9WlcFKqoI$X^y+BGeVxdDo?7R^)+i{-KF-Hze60 zZ6#P20OB;gC-L3Wsx2LgJ!Q7#3YaQVTT;}N1KR%p^A-N3d`4)_rD!^p7Mj`%bAc@( z#%`69yZ};r82QZ-YV_I1kk!v)R=9Iv;p*p^I$8b}J#XsWAN=)4ZHB4jrE+pkJc6e| z0NkDTP6*^h`S0+V)XSH7>hDiy8`{aV>vO0es1C>uU$yx3k5haV>#bp>XiRCHZ(LzZ zXxg6JYO=mq2GWlb#>G~_IFD9Rx{#+EN>-Lsg%0CC);jf{`3}ENn`(hyDaEJwP8`_7 zyEXjh$qI)-`km78C8Vf&8M>oVgsM#`Np5Er3c5ff+ti-lXrc9ktNOc7G@U=KDDzZV zx6)iedQi5tn-Do18z0I(+rL}V(=!duyG)Sr?U#OCB~~`Y?Rcp5ui=Z~`{F}Ozag$V zZAqv)v~5Jg)b^C?cpxbYDY^*UY(WPxB>w=&@w~2GP8AFZ>cU z(lwmymq^@dS4|}ixhFSMm`dgf%14Nkv;sxRwgxOO8P1~r00Ex9I{K>A-A^GgESCXX zl-$@tmT!_Q2m?3=(mtE#;mSxxC*%o^x<~#bbX`+6WM>*#LWxp& zImLy7d*7J#4@7A#b;3oBYPlt$Xi9@p&nOL~+#KTA1N4s>R(=iiw?OOiI!CE(J*MW> zJkerqST^B!5^cDpBoTC<{{SZ4?;fb=9R9G=>zC5{cTvkv(t!yREw)2}B$5=M72Mnm zVm!Zy>9k9WewV+0Nz;QqrSk2}D1ABq0DjZcT0cliH6)5sm`tn8D)$bbY;$jDw$kbI zG=_W!rd0VOE|pvFVG$Hv1F34Xxk>qX;)1r)r8wg33Bfl9KX|^eOs3M?L-XiMfTqeS zP4nv?8=D}$P0ymmj0&M4*mj`t+?Um0Eyp9;C8^A?+_-+EnZKTemtta*ZH5>Y6C$`os<(d0EgNxH58SO;3*&MP-MSe87wQTG1(|wCvMKORmo+X%|paU=VMg z&LSn|SX*eHWZhQ^<+zClnq5jN3H?5tyLgq@m#MxKk{{UE(q_!&R4zP`>D!Pa^ z5EmOLe>p2SgbQCTafXR-JE4%b_0+OKcsbGd~DunEQrds zB$l1(ROI4B<1Vb^l&08MwqjC$R?;<8fuhvq(Dw0bEBHwN0GO}O=?1iGLUNkxjxdzn zEiG37TIMTKRr)ioOx4(%aj?lLa3z0*W0=PhGg{pU6|*W^cPd>&>3Z}9DsrVSP+aqq zPFXB4jk`fNJX?m8|>yoa?Z>pofNFRwAwe1aQ)w(j9 zDwLWkZ9m4MMg6RKh*@oGMw*wp18$`LAmTV5cxLzP%GpXOO)Z5sq8tp8k@p;WM?TYh z%kKuHomz64IN^Qpf#GFoMf2Xq(B5BBNzJ67N+G5SLQ;*{Be1u4hf8yMc}_7`X-btK z7UmsI*V_2|#d}=o&3jcsDt$j8#Ujhw;)Dex@yX`VRX|7=CQk&P_vtN_O&Ox47G~un zQWjB`cUuSED>X?22MouiR)+~)n zvo9y&O$4dMfKXiR>z>hlkBnP2{_-axF`y`!A6{lvi5F#1>$4s~cN1U+L}1-UI#zX; zD2_{nyl@Is0XGL1wmIfENvTPsIG|?I5aBlou>%};{>)Q#Z%C;%h5YMu)FEg)yi_GA z-C^E4bh#B9lOdH|)PXWxFQ;TQT!1oF1t=&Iu-Zu~QMt{(tY;eYt6e~ttv^JPc(|6Y z;oY=_1NH*L^o_EuqAHY0r>14yOu|rt10utpbARkb7PU^Lw^MP(X{tom4sL7$FN*_i zKREWVwj7UaE_wNeOgL$Hm7Oov?M+Q-wzWc%`dTVepswVq_>+;JZ7L5b zDnnjY#|gp3?U=;%W|n4cl{Uf>ThEB%6}H&)x1fr}Es;U1Are#Wq$0@o`u z^muh5K{a{siZj`4^`UD%5+++ygyan3|3I&FDE1&f36}@BA-8-mO>Sc-CQMTL9uQ@U1wz~fMUsEmC)`eQuQ;M*# zwk%?Lm)EMKyWz>2u~K*EbE+V5>aJs({y$NPfm2f7jKW0$%!unJMW-~>^4~&JFoFpt z_TX?u{rg5ascBO5rd)nzL@=O?1S_9#d;Me5HGZbZ>bXT3rOUWfEL5SpoN!5uZ>p=L zzL!`;s3;?9Kx+vA@%l%hr^%IR8bdN+;e{FJ-C5KEUv5HLo~BflB$q)xW9ecsoc*Ff zI<`u3S-F&;xZ_~{?4%1{7lkzjk*7(%W@Z^_NF1#|c~4{M#8Ne6?6oPtDbEtgzV{Gv zpFx4^9^!@D$8*dhd7vhTrh3Cn)3YXD#x2=JYPm_WyYdMi(jhvp)|ytTWG z3mXw`IQm9>RN+3d+8o{?Vy)^I2)?e6l6$1qs@q5~lJt zfCha`MV_pQiexMTjv_rprs;arfTg)cGNBgO@FbMjAI=%{vrAIgo-NE*H#CcETGQ{v zqft#arW&@4>uG&OMFfWvVViN075Yy_bnLxZQ*t%897{_|klAzr&#=r%H33C5ClPe# z)6!bn(3)7Xn^%jbdmz504RZ5evfTG?A&N)5eLsKzPq|!?g z6%DIRyf)V6Eq`xl&#Kz0w@sHbFQL?p!sBwSo8y?CCVY*1r4BR16?CV^bxM9=g)*!u zAe-_2;wzO7oVg=9WhB(%g0EwHjlY~r(>47?QES2wZMF|Q>xVZQJ^BCky;E3v^tjxd9Z&Ouv z=G2X+DL?v$61`cPQj2SySSlj}7tBG|=+3yY^Ad_}#Nj}Wa~1cbCYa9DlXHE?kECtt zO_*C4^qNX~kcSYJ7K?{u>ajw35ksY|3ffUuF< zb}tQ`nVf&|DMIJ5{a`bWgiwG9y-xf{QRbQw4zQ-ua8eEl{Gp_u!~}&s&k6M@_6V{< zi5ADDqYypIX8B+Egz*s>c*7B>4v=g=w2Hm9ik#MG|W1`1Sek@$ULSpanM&U57a=k)4& zi%NADPS8Utrc(ErE>@hq zg!cej+aScvCt6K4BojR@8d|S?>jK}9{*eP!>NOHsBs8gXfNzHL-w~ba{CABGVoa_xfT{D>;C{Bc!heDl%JSX+Db*mlk53L zDzAtNeKuUJn$ves1a4aKe_;u);u3lJGV3)05p{W#R1LA1bEM28c*qAo&T7*-0g9Z_ zaL%YDV3dG8@61NbXk^GKTQxEeQmx=A0N)n%jLnX+%uY5QO>MvwpC~I;^J`l$gwIeO znRCTmS;denz0N3;pR72=k$kLV-zFZ`U+34VDb4J5zRHq+?d?!E`r`S&c&_ShrD_^X zsh0V~s05Udn_ue`+09=v`>R*&M@H*y-042t-Yb*(xwc$ObCa9FBoeSqhvybd7s==C zBr?(Ri9J!*^*2!b-0eUSu$uvG#>cc#>-}y0p7U)wvZ3N+1p)mAA-<*68ewiFiCLZH zLd&^6{{ZeHqgbM8+MKwX3R!aI!3qNB*hSY6p<*qtsyxeB*Q{64xrNEh1TQLDRfO2y z{_$MZokpHWDUk~;Cl5GJ8tP4a;+qo!aD#JUxmF*PRjRt~ zVf7yuVFXy+Cf0={0aGo)Pt~U%1tq|Jec_U-kEK2u$iVc7=jzIR&8*xD1JhJ#RLVbliO-pO{jXqu7()8m-NQs3>RFCTcbDJ-zcN zQcG^9X&?{@u!wo7r&*W*EfNVC9fz;d6`ewzuuF#Uf4oSyau51Lm*m~4AQa-) z9RC2c6?Q$CD0U@3RMF*XG}NoXY`7E-PE0VNX^Dwu((J0hQcs%awsHE!nztbP6CMy2 zKmj0o_J;I!l%*B;mrd|3YsHH;*@5N+yVH^&OU)3wA0kqaQa?z3+L?A=YE!Un#ruy) z2W6B9Thf>&=~dy|a!HzLUK#?5b6}s>FqQ#>zGO1n`B|SGL@fZH!`dHw(x)U_63(i? z=EsafR|;jP47BS6AgI`LdtcHW(*9LwP-Q1!QMJ>-`@`Q+0*2~0X~pkSo?36f7yRR< zCIq-k%&9h4sWAR>fa9%v%S>LwkdR@doQZYs0cj%mR^f}o56#5HnxZ6}m0b->Z9;%i zRs7aDv^il6%(5HY6jl5sJP41Kqf4Zy1=}P8Y@cYBrb)=lJGE&l+HJMNm|$kxy>3Ih zc{!5Rh#-r4^Zx*-l%~~CZiSU7fpnhmmZ74#F#4U9N_TDY**@^rk*6xDP;uw%6@U*n zFnwYZzD=s2CW0A2BopQe=iBQFu*1kZ{{RYh+S_mU%rknB?7LybsDO<5ZT(=<^|o6| zo18%%f!%+n^@CTyip4>r+;o|Qy>_MvQf*?D0gqlj@mlIWo0F|HiCSV1g%W(^d&A$` z(yMi041zDTsNA1!(bCl)8N#sGaVbrQn#0;14$~2>gs4gATBRT$AwZ-XZBWJS^ovfH zsLjg+r7SG12a(0E6I5X2Ikt<_uliaLUYjd?Zt&AyUAHtOkkEBLTYd0xG%B-x|{{RrTc(F}V zmi+I`$*3m(0EmHrxTU7E){XN@b-jNl?gAv-!aY zRM;>xE1Re@(`ZxVZu4$D5o<#?8YW zJ-xleQ2e1#J>=8ZDk!iPz&D2!-8!m?E-45gCfVlr{{VQcBBd~;3lc(s?|8H68jI|_ zH>qks2I&UZHiZX@mVZdk03rMgRHc`Acnds$Wmm;OgPod8fK3kl2((VST z66*nH$e<06_h@4&+gQO*a5rs$JQ$nZkJY<0Ke0`UGzOQ$;&NeK7=S*Frz@lKbGSvg%MA-mYQzH_!cJ+ z<4yF|tua00B3(mqx>aMJv|k$2iBs(&XK1*_FWxjhoax$s?FN>$g=`i|3Prdg{QW;D zvnr^u)RGe1ET&L;YpLn)u(^pvB`Qz>I}Ofx$o*o&S?Q$m8u5Q+5|yL(fdHF<+ZZwF z866i*tkOfjve{5Vu7%k*9)jW+>bhMHUX+Ojm9UR5ik9wDLA|Zs6*URb5IVV9Gsc>m zr|mOX-j<4Ne66V_sVYhe+pz$j&e1ulv}%issiBomwv&}9 z0T}%6U`#`F*Gg7umFYoSxT<exrs#?c z%)MRq9P!#hKn-zjdmm5MC8~Owp6t>aXTxa;#?*Hi?gt*x)QS z>5VxdC#EF+Riv%OxJAmAr7GibH^t9x(Wi9wjJ-WdTBgR=QWN2+1l)}A8ElVKTxs;t zr5w9V+UrWVz0agwbnd%L()V!+Swcnvx%c8Z9a_1aSea~8k=4`E+J>5{66M`X&OKzU z!)sg+6>;^3x-UmFrKiA_bw9hZ*0mB!#jnY@z}k$C#W4MZN=G@rOTdpus=v3w#tT=#IZN66R7D^%%Yz-!&{0-aH&H$Ht)n% z^@UE3+|5dhKeA#FIS0`4QZGJd2 z4XMJW{G?!lK<)nk>v0(NyJ})$b(gfVi%iM3mL3WG0D?ik=O168$XP)zWc_E$>Qz;W zg`hh1o)YVZm#iaJP9j>Kua{}Zh71Mbpo7QO5?v zDYZNlpTwJ=FX&^)UlZR2{Y$9)Vrq$61kBU49Y^BS%|X;S+_a;Pyy}ZfbSKNkEpwcV zgC6bpSL@e8<#dd_5{q1ArLfrXL2Qz+NjdWN%y?h?UA{9q$ywG@`a_{CDngSW%3GLr zN?{0F&L!nt!fcfbq$eG{^Bzyb^;z)h8^T+;->uW*Y%Ah535jd3@EhuGx|Nupr+h~A z>8grW6qaA8P5ih<(~{~~BrA*rp8o)R=Dq&_?D_m=NXt1lqqSa#)Q+^;l&M-ZT4_ph z!r(SnERdpdGi;2;bEiH%df81&R7tH}Q%gz~SrrE^ypChkzYG5W;`^(*Pp6edo2Sf9 zxx6?g9-LCvn_s@tZEN?BS^g{WMdYfrdR2c}%(^`x6s||szqIkB@AzPRe$wVDE2(@a zYo^(ymHf-cO-$@sQfyS;lI|zaq#MO^P5eDBa!y`)b%#=;GqvW{l>&g0cN-CY#y^?dX$su) z&wtcTJ*Juuyh=dcrIv1@EHX{_%svnNgjwH!{ki_pb9^r?d2$cGAKrO4;h&(L9O{)~ zi_-l+q!&=A)MadxI+gfsDGe1UuE)?5dtk-SSAY9Ey>`~K!mXrwi=gQ3JC@`sbxE!0 z=LDgJXZyTq(%%~Y00vz=)uOr59*)zr-9at@)a5Zjw=$I_K<#Udrq;Yz>mTB2q^Y{D zn@eK1Hqdw>*Pd~1TwMMT0!P*ce~xQTLfUb`{{YxQgW-5V+m)z~WBqD)+u|Gi5B@a% z7&J{ssPc_bb(JcO`}x#qM`jy+fl5&92T#X34US&`SZy2RCQPij;<^9gk-w6ahT6xzp{;Dw$*1SZhdrKP{ZqpqGc ze^GQ>M@qe@(3C$=nbYVlJfN=-0Iv)dhT)y1H@%I-HlP0hBBiZLeb=wjY`+W2tWE>F z zng0On?(1@%rqim`zSnahbmhXNVHHXIw}r-jlUN8z>ud9{!(QrqqkYkQ?;A ze@^F{lM|zV5lWw*_v&P`D4av;mVGJ!T!2&lu$-+m_gzxjY^iBY$hVl|(iUoK#(lQu zrjFgAA#2TqY8rQ@9X_qdsB)El16_K7f9+BQE=*c_yV$8-T{AOPuf)qbP z4|M*ksZeGS^3DVhe-_b`jQ){f*IIeGDaDxy*5?~S?ehqi2|n1oR$Y-ua5*yI8Ne;r z7{y2;rUhJ2L3Fp`6Q}8xYLnCrE~=YJK4iAiLQ&=h_X-`M9=A#SKh{_}i$T+cIpwQz z<%G#mB#?M2KE1u;4r+MQ>E*d8g0(F~8z$EGg32>fsw}Pfm84$^S-$9?1mxrVMF^l= z-g;rxtjufb0 z>Hh!`n`((VeSIpc$h_mrLGl6S00G7^{{Xn7&~)8KwKsWELJ2u^`A60)m04<)7Kmoo zQe_BBn^MDT{8;>7fAou@A_%)cYZ7lt^`lzoiDgPtE1O#h+Li{;M>w^!%x`@$_>9q- zn@KZ8)-5JluBm?wiP?tHv<;&tBj2~Ac?Fr;qmxKmQbB8U-6=M?$I>L3t7=ucB-Jdo z*3w8Hys=0fhx|geoig)W`^NH)C!zXf(mDNit6g5I>Jx3swn#1|#6-w#4x>l{%STiNNT;n8+V2I|`>GL%OU?< zZ7cEYq@&iv+mJh75wdg(;>KrHTA48Oq0mj7SwKkui`d`RJXJvWeb%+gW3v_RuP%+d zDNtc2I*nY9&=lFIUfs~L> zr0l_}+Cf|I+I>GANtd1>64gHy(2eB@a1|e11I%4IP1iXUml{=FC08jswvSA6A0c{i z@!6^-x{kM4s7;0}q@^ZdMJC{m;x~N_@iy{`4uu0xiwOqt5>ThsvjcJ3k+caDQp&UbXxw zxA7|JqiQK97RV^@X2Xl}*zx7!#NYFcE2Eza-8cAu(bDufB`7WSll#|0s#=t8Pw^hx zzetJcA6X@86h@ULIHldII&@Kq|z$ze9~i|{Y$5sy}CW=RbqYjRsVf>xZ7o5n+{dgRmEja1r9&+ing zC@FZo&Bvz^FCnX{-zt}$s-UT9HckGR_vR33-)LebTPO{-X-{i(OHrSLMOH#{~&zBi0znE_H>`&VF zjP9IzZ`I94Bc5`8)Z|$3^Q} zp1!8DHBP0>O0?j!rA-}%rmY zLS}KRp#T&m2KK&iE(ApNhp8*1X=i7&!mRodQk1UgLe+HgZI1r{SdLAnJz^Y2#2>;3 zDU{Bazb7qLc0zifR)wbN@c=#T-!bSdKdbabB2BQ+1svR5-*4nZX7sO%`5jfL8hcdJOsbNUAuLTNcZ=p3xK24gltT~0 zUAa+UO6As|UQK&XQORo=xu%H@?mIN~L53i`du^pQWS7zY@O~dZLrm33E?Egp!&nc@0bvwR_cXC`KcAB?5v-H&)O= z3H5P^4D64(4U zE|V=04wG4rI*<&!QJa;YK-{D#p6J9~Y4wRp1fmcWLbxQ3e>lrzX|wuSYnf_oQ&Q?T zL0gvEe)sf;vt31&txBdsq&yc;E|r20C)8WgJmyAz0pfI_0NI*@HHmuK_CM!EyW{nS zCr3<6rE|=>5QXu)l6W^6iZ+|nS9ib@%2JYWE_}nW{_htRYA2m+H0sKc$OXum#>v#E z%B*P0uC}XJXiueyDS+s4BzOu?&(q!wHKVFd=>SAPyT7%*+?!-R*7C{+n{lzuIrYp+ z2^s|DMO6vrlIxq3;RO%DU~dxP`KEt);H0oH2L9HD3>62wURnNA#~RB`bqoCBihiS_ z%rh*vKyG2Se4ut4t#AEBW@f9Yv{tecja3%?JH*^kyZ4AG79fBuGH=fj>)xWvQL7Y} z+mLCd-BM21RctEW@tPeOBS_NoY);eIpP79(LY`<7dz<|Re@OOp+SJ+sUcY(ApGjod z@7LN_)A3QIzh|`|+{y&XlAYUBlVw`Q_BP`X;ayLsB?_Ju88;>tEbA$m+@f#jIE>0~ z;a5;fu{*9P#k4MZWo{M%e6r{`z`l9(?Ghal=(?zNlxiJesG6NfN|K3R4BGpFxhLsp z= zH@~cT*%29c5klu`F-G??=E`QZq>k3>4TO_rI7lFl_WMIRjT%=@puCycg`qerY?72) z)c*jyKr=G*m=3OW^rJpjZjo6FcwzTINCl#E$MXFmt&Nod0w(n@%!Pf5M3~%{ z+X&h&0k}MS!#8X6S(a4OLg+RGj>6f#VdX=oRVLq6W?FSl%Q)wV+I&C45AfRjeZS(J zs%Xe@YnhU&DGC?d)ri3N?-a%qnkFL_^b!4APHAcB1+6E;Bz`nFN9q0dj6bM)K59my z?9{8F#@lf4c}>s!MT1c4hvmbPCba8h000XR=)kzCFsh|37MwMklHV|V6h_>z%lf?WJLfO z;b-%?GVedt>P32ROU%zO<7iFLm2KRSY>0@|dj6)_TXgr^`E(2?0>&}Ao|M#jc`K^b zXH?pJsn~;)eBYcxRQ+dB8|4Eb>sYDF*<5#y)1$?=gMTR{EO`@B)7tuR#62qXv(Koe z<7-#9IgY8;b@Oa|%(Ul*)(+L6To0|ktYuU6`kc8F64h0-4pxoaXNwQ(1efX-p=C&I zbr;szBXIFei0^|7;D)LKQrjQpGf8i&+LnwH^A$2w%8H!W0k<~4=@PPiab~A3rBBxp z;}m&9wt=724r3m!>gjo@H`LqX#Bm-}9_H5O(OHq7om9Db#tN)(OO_n*6FP9@gHe^3 z3lr1YM^x$hjV;G!CQ###B&A48i6=eziY~vK)ACd5LlWUlhc1;Q3tRKg{6=gTSliQ|Sec^Mr6y-g+l6J)1-9T5`ge;x8{ulZAI?@|(e&ydO3cnmH z5qG8hAl8{vX>O?613)WsS=Wh+(jwf zPS}xB5h#?ecbPkVquKR8gEqCCnU|b;SuZBQI2j(k|%mcpgdO|Ef!n?|9~?}R-Gr7KNW6)J=+4%|233nv2* zudUJJLfyn{dbeGwD9o=({0{X){Jrzi4w4ImD{@!4U?%t*dA+Ug8#h6J!?L9_DAi|P z$V`-_;HHqdhguw*;@6K+>H2LxRo3NEDZQjDD1%}!a&s2>-AhlEl|yM-Qj{YW;C+C^ ze7>XN*^TW2disBbt0)dn&*w0zr@*d*b(L*l2yg%bi;FqOB$zDE!QPXWrJ&5|`g?)0 z6oj|9Q1e7|*f{bSb()D(*Q zeh`+Ixi>dRH{kaeh#gDO_BEmwnq5&ci7E4KXnlQR`1SdKqGCRq4c{N6@x=2pw5j#T zB!phTB`FFwKV0VhqpICGUZbQG&!B~r0+P1LxIFM9YX2OlLZR9sR}vv?cP1_s(NuK!rqscKykGuL3>MOi z6o7qjahUB^#>8!$r3!*co=sMto{~aTTX8Bm+N2R^knyC%pi8o@orDDvqm%i@pVbT3NtWE*h_Uqdi*}3Z zeC-9}F1fAgRtnOg=@d%5!n|cECj@da+9QglULZ8-PIH@E^^Cb(n}xBd;LY&$hC$ge zF6*Vsk$bFQMN+q{WM6N`QMweb!flL3Y{`9S4K8&_R%}9vu!78{tt?6s`FRI|R3PtW z9YPn0V40ny%uN@OJeGGXr~lV*BbOMG2w)jr!#R@bpOJAyKA?H77C#Ekt)eJ{+; zt!v%*a0-rnBgph;8ek>XowdIbZG8Gf^*>%$C{qF19#i;NcuK}OVIJ~&Pgd(LwN=`u zH!&$onQ$xSvk-D+E7H^xCY?G()|*4n#(3Z%1w#^rnQ z+tfonf3NBFc~zlO;Hg0FSvOGQy|Wl1k1&?;8TgMX8m~#N>Q!K)b%;xjq!Ie@9M4;1 z>FxZgYhl&^%1+x1aTpe@nsCmoQnRib93wa8A{w2jOw1txYqj_)IfOY$u~38ql4q;5 z=Uge-VJc^D)wPjuFCd-!M|? z2wKKK?`&Ev^rTalEn-2j!mK&QKfhSUX*!l+3Q1D(EG&{PIg4c*R?QF+r@^uBkFT;~|TZ39$YciKyvGw5sx?k`sFr#Y65KNEIPsGEcEM+h}=|-u5;F7|nr+ zPuMb!GqIKIO|rC`dPEeRI;kk(TBRHui=`(Yc#xBusg(wvQ3%Oa4oq#wi05HWc#JCg zd1-Jtk~a`RP5%6G3>MGIARt^{H?^YJ?As-+ulnC^dk@wSO*Wl0+W!FQ#m@jD#tCr8 zn5Q1oLPM!+l+6GX8gOHElnx--VbojQ%#&3~)XaFuQi@bFbHq5N%m&>qsl|CR zpbfyc_v;W+^KM@1Y+Mmyq~aVZZOd7!r7KAmO1u7WPQYRl(ULRO#*_jTxTgJwXlGEG zmYrcC4FnOAr1F2h@eeQ^LXrx|P&XK~I+k#@KvIU=Se(Nt<^s3ZaWg||W%ApusW&$y zn^?r1H&3QW2U(m^1X)N~!Q_45jLWG`lAE}aZ@E4H0NNa- z5%s;cN1iO(cFo4eo*)mr8c(&{{XRr&JP0SUcFAs zULS_F0xg^ZudSlRL3)Fz5o!4ZZa4+hB<=6sBKo1wZF8e4YI(gqH1v*CCYhHiLO=tO z2f6&Bxlf&(rwyoD!ofF6lVf{&M?nOrBdIlHYX|g~8jRz*USz*dSXy^^HZJ5JPo^T< zpfyarLP-4ds3qK3wiRQLNx95rE>2F)HVR+cxmRBJm(z38()&uM6qZ37ibvv&LvS#z z+M*@bQ*>IFsAgQArA#HF@Vde{3MTvk-tmvuG{W>&r*ef{muc4l2{+BR07o|UjmJ)F zCS|4=lyoP;-T00>dfFno@t~lV6~NhN7ibWJ?8PY0F`;%-na&uGuJr8=*q=38c} z!dJOBZNe>#LG<5L=j9$mtBWdR5D3MGzY$AyG-7~`IGTMXo2SIOY0W4sSfeeEFVOyR zQmp7{W@lfSlbtC*Ss?`59QKQi3ZJL-t7d(<{{RikV79SxZ*JCzeSJ%Eg?en;oA)S| z+y>Vk@S%^q%z;lLRBPHzn!|0eOQ|@QP^>A{cJ%UyTAKZKk2Hx_)|G7`E(DWh4`^#s zmz$#Oc20Q?5`4)xAG)F)=mK~pKd(u@Jy zF-NFOElSu8$vxwFpVD;7oQnKeH7RLDiAXm6BR-z#*fT_>l^Y9`r6%BBJlu#GtxW1i z+xdi~Q`~Vb0da$YZ_*_Yr(Q}*&IrlweW7Zmm3E&vP{I@ivE?|&ct%*wC1O=g+nkYc z5emwAl@1tKi?-5&ER>z2g0AqhEf7ZAox_C)QJHnENlJmX;ky_SBD!6h-pYSSa0!Y? zzGFt4yJVCF5^OR0K~X0(rClhpQ_aDL@=Pp{msrPZ;{NuD=}AW3XTw7lUAY1nDIy_n zUr5e{CuO6=BzC~&G(9Ah$}K1(Z<^{2rzBz^Bxq(?uu69VQa0_e5n-deOu%5aLO|q? zv{iAn$r=*vF*4ejLy1AXhHcxM{{Tpy(6xz5eNC}2;tzgqq0gy`#U*Yy!B|#p$A7F0 z%H~=j$wZrw2}lIrwV~S`fFc4Ftj|{HUZF_8NnIA7zr}T9VNz}rdkd3%AGBRG{*G$9 zI@qnrvh#MwhCw&=B;d!IIyb22L+!NbzU&ZrNW^+8L~3=@Wm58|0)kOqq((y>>zni zdHZo1M!DAwR8sGUVRe7_zv`$bxaxzeQAoihKz;W{OCea0o^x{M+w%+ULamlf;=fZ%x+PjEX@mk2*-~;iwaD-J#J->FjKzL+9yH2E zI&b6aief6QxKp?Upp$ZllVR8aJx5%w zO&(0$XnKY8(!|1DNecv@KHmMvjH6ifc6yyyo0e{8#BB`j49h5&ILNi*N6>l}a(a@v z6x39es^i2dzCAgN)2qJ>GkP;uOX|%#QE~6yq_{%{#}~KaH^|~Iq!=3~HT~puc`}7k zqG8&5QEHuOUev#|O<66n<7QO~cz}?gcm-DM57s-Sx()e>+Jz#$Q+c^ZR7$rIyqkfz zW0Gxuc=Z;V(^Pt$8IRhssWU1E#0eJr+W!DZs%vhOA*!mUDRgk>ih@+wNecEiyn16? zys8TS0DjZWZ7xto{(h6dKNVjNO?0BXtxZ9$KJ#-fpA9K?<)dqh*d%uU0ElJqqwwpm zej=;WbuCTQ7bzNkn3Vj@Rm82ug{=8dlw5ATkAA{EeboN|hfPD)+M?+V$~RAKhQW2| zge%Uiwg6m@U(zXhqKcn~9-q5Gru70!WywV(O;Y|{KfYezn}q^MweQE}9;nwAzz8FM z`}UB>g!q);g`TMRLDQWx=+>4-p3~ZbuUK9iU0SMAmr6iL{o7$hEvJLr-1BI4@nNIs z9bwXsQ?$E^Y1GTDESG{tQ~SVjLADBmqgefjMTtbNZZS8+(`NvHE0EjtHezV;NPS|`treW3Yom6^RtDcan zKXta^kV+i5Q3l?h-Qp&TTbPucYGz((EgjbZOCrYj?-cEO*7}c7H50XZ!{~KNc}pQ= z5&<{#5Xp^P%hN2d+i59Hjmo|G`bTd2go_)o!ZG5Z;y4s+J2t4}mbGT{rGW zBRp{vldnu_y-4f2fohpE4U|ke>z7K8DmOR3-aP%&uB6kbbyQ5(Dy%gs(M6?+2`eYi zjM_HpFHv;9t1U?B<+b4#2aB~=&4IZmjyV3Y%;izTD3(B70B(fKy2tS2)4B@&eupo8 zhj=dSHn6@i`b32H!wk)Hq}1(Or1bkuPIwATz-Geatk|0mNY{Fa((MzdbjeL#pb*=N z7EpI;?Qh|+^uNFLgnBWk=$$2}&eA?`xg^_z!EyP6gxdEzy~+HbekAR_{oq^)x`*5S zx#f*rL)V%nPFjUGJoJE5K}(kpuWHD~>thDqk&rvoJxIjT+?J@!HoI*qLewwq%z8uO z!&_3d?^fk%GWwN~Pp8vB-7e^JdGQoV1&9~SAEep`qkT(#47n#MB-8H;rOA&mUtj?s zo0y`$CKgRX7ce#44}{K)X%48+rgi5~bxl>5DT`@Kl}pG7m=0VI#0lp({Ug#f=Q14ik7+fd#UM~bhEk_P^MLv*fv^{lG;cD!_0Bd zF^2WusC{qIl*)4y%7cNanNlWZ9FTd+wNwax|1d4ov&S8Dp~tCB*j_(Y>=Orr(G zY(j6?ZpYd@{{XJ_9TijP_%-i`AI$DuwvQ45uKE; z27LhdasL1n-n?{`a@sDDTU+$mndBE3nR#kAAt^Q?c)%UGk92%v^dDG%iI@0g*QIol zWT$l{G5LD+4HJt}on_V%;+&UhR#8HoMcW;TP`R+j#N8oMQ&V5GAABIRL2Wp_?mc7a zfB0Sh0Eq=7p!z1KM%OQVFUOuq(Rgd&4qqvl=E^R+I#r6FMl7gAd!UiLgklzudS!sp_v;3!C*u2LzLIz>pS zGCG@0O*u0n;*+<^R<_$yYCFLRT2f7ouVWu)b?3#O!w*$y3~3tgS!r_94oxN2oTt=T zOUY2U1xi;VH?i~?9iHiJWux^7N5f}a>U7Olq&3wlWtL{vLrO~tNeSKfl2i`W1tmaT zKV#FU{{YGLo;K{D74`y%A0zAcgD1g|WAYLYxvD>JPqh5tqE>0;kfhqz$QisR{{T{j z?AUH>1`q2Vl=%Gk59*)5pIejD8m(Q*^*VY*6I5+WD@;=?PPSB}s9SQtT1tG$3N{K! z{vj3anRJ_9&(R*#Q(7{5eIi*(mkra_q<}67B_iFwNc*iOOnQtXA|4O>?>>Js94lADkdbzoK!vvvxwZR}umK9 z6j>k}XVhQs7YzqJr6lTzcBYihB%6UU&{fG8<|(>QMlV@-lC;gvO{856C8DCClW+$( z5WO0aSEp7LPI0GOQ%@8-y35p;{zaV#=|jtw+Tx}{ulSRG zppS3&iJ0`J zi_*FdmR(A%CJjnql$MmX(o1+ZH{=|}15_-Q|5B#wtGf@t8}W_T7P3Y+wGC(TPJx*^fu!W(p7RfVb97k6l$XBrhi~auqDA&3**9u0pttxj}Og>x+SlHUaci^43zZW=+ zR-w?{YAHyr%F<`55^ki~=}9H13k>iNq5Pt=ASQJ5;+vRLlI}FS7TrlovFvjWaAPWW z4r2_SCjif@UkyJJ`g)9)*p!{9OsqBHHkp@#gM3^8yPL(1Sex44Xw*7e@jW{=s2h5sP}190(fissT0U2%@{CT?X60F7PHhVZYlNGd*kgg}W5L~R{{RyXsZUe}jnH&9 z>CHEEyjD`-U5NZPPB=ODhrKrIKT^7jD%PdyF0B&s3^V|yc*sumi&;uG3Iy?N@f@k} z-D|Gy6@9@bp5AGS`#fdr)1of zcFI#hprTKq?H&s0pTy(!>E))JqQGtRwzYVPQjLwXj`qe+XunoIFPx{kiZZI9DscoY z*PICn3HP@+{{Y;1x&9Za3;>;Y_1a>l{{Y{-_r9FhbeUEJi?Xu*0TxOW0UxP?&*>hY zRa#h=l|w4YU^LnQ1p0s@<^4zeK+K& zZHDFoLR5vmk(>jLV*5$z9RsOq32J6lNeKbfG_a%3^?{_;YQ7tj^4KtHH25`m=rtMg zGpLjvx^$wiD?6xX=MhVo3-B5XU!2$tw!p%UK=mBPR(c!p9o5ZiF*!-lvy8~C)f7zB zrQL0jl0}q3=05CHX_`H$AlfO6OsxQ2ZdpgS5gj=$iiE0V7^H1t)&V1GN4_l{&Y%AP zB}`(*9)7$}Gbh3Go;*q)OFzzhHPe%QPUvp0R-URzyCpKp^2&h#e6b%cv;QN4&Av*==_tNMAUrRLdwib`Z&Su6ROf)>#BvQNJ@j}df# z{6KXkgpx}Wx^eLS+dQS4f<>;Y?8p4arTQE3zOJ!NBAm)wSB#{9guE0|llY2;&~alP zPJe~#G>%zCiRfe3Y4V^9YWkP?T`#P(cBGW96~8ki>Q%V~X&LEDU8@3hh>`n6L@F4MqU&R>#Et@Vd%)f$pXC3Sg~DUt=QdK2p^<$Vbg40Ru{{Cm^!ns6Iwb|Q&kydC9;q_ z7Qs+XeJ(r3cd7c%C0_}qX%`)2zM!YJd3KYGSpNXLUn;U1DRjpZsuIg(!Mg6KCqGa0 zk0)#W6|OYCyP2zL+N*+3#|mU_x?66;1mD=4i0;y9@aD)zNA@$5QK-w06^_4uto090 zsD78v&Y6~|GgVlZAb3deJgG+9M}erX>Lpeg z{{S{r9hjC{kCnHLg|Z5)amV+>dK*Ud8JdiP8goSjwA{41Lflv?NwBduCt{GK5EP+fw)Vf)9ivXUDiX9UWjHrby0CfrMrTdc zw7NTT@^h7RJo;0&E`f7#z#j2?)7r|VGRjoTfZTwqoA$?O@bcqiCv5c-BINl?lL%#P z_%jl0x`Th-Jl)9r;;UTI5=~XbO_>sut-z%wTnig_BHiN2PJVi6H+_`^-?+i|{bEvG zx>Av14)qW(za}}6*$s)%LbBC&Db<>#VosQ{-qMfLVOnKMnUi^dFau~!hhRHf*Va7G)b6WFXnNb)a-jPg+ZWw1qi#sBx%$V@8r2R? zxVKdN$`+hm9w!`e-?Vw7;(Ot%LiI(5=+jI$CZfIV&LZTcc^BvOk7q%uOAC^4>a^hb zfd2q~lgn=FO&uk+w6?dQYr6a$s|0rdU)cU|6)kI|^=s0HPOilu`10-mFLCG&EojZU z&+z@K`XsOVI@{AtCB&iUTb597BI5ZV7|-Qrs`4)?c%UuBon&5Nm23Fj#0eKf|VSVMq5gps?yn%4To9;cv@H97NiHcC>oovBbESGNYj38(tG zUZhJZOr#+S{2^-Y2c@Ak^+KyFGThv#X)6l9l{vSe5kQWd2$TKkSrzK>P z;B(BB-CKwv{*gecQ7hEvRNUJOZD=-7SRjtk=suEsQ@ui%TN;K{wWUc)L0f=hB>wcnj54QI-BWBv#4jyWs98H@x*SOKja0t%0S5XIl#ZP8LB+h4rO6;4z|h;*0*Q3zxSBq&8^+#R+%xi zhGAgK(;6C;Q;?UFGiym^#J<|BMX~5_8qFh2QfX8rFqEaogL_t|5|T;xJm5w_(~Vn6 zm2FI=^r^%opdo7J_Rs4ZW|;<|EFRdEB)4KxNe4Nxj|)^z+CN$AX@V2iTuRK9CS}^1 zlPZ;>>d0BLdHP15qH2xH(iblEH6=piy z3ARW|u2wb^Z|fdjS7sD{-{n0VYN7WL5L!?s-*NOOYL#%STqgej-!VBZxoJ68n6qU| zDcX{c#0kgNDs_sS)STK{YRW=|n;?D@+~e#20H~d%N!9C4u{irn4I}`S7Ks4u_WOQu zC$~UuTGd~fqv`d&;!w4(WyaN8Hoc5Rbq;!FT3CF%!P;-XX*lE30!iAymn<1_l!aU< z9C7VaHGt}CHiz;?`)Sv<7C-D!?GDqD7X?aeB?LI($p5D;4HoRqBDK6f? zl%n=O`i2Ude9#`I_}@`l3f$w4FL1C5%7Ebahjkgr3WS;_5c-HI1nwgdj7e&tbT-i^ za;!lk9=~X{(QC6oy?`Z1Q(%=W*bIJs#7yHGc$8eG`H!cx?KSl;!D&RM=H*GcN91uC zpH}pnGW7SR4hHD^5($JbbAP%P4?B=gWUy@!`!`FRS#N)XI~k=A^?e5VR>Ig#Mgy z9{!IyF`jOt0YtDQEnla4hH9eKI%)hmqC%EUtUl2bsk&uVrZ$v2FoG;LEIEKbFKC~n zbvk8L6bhOOOJ>6Tt~1&u>sq#-swIsoVYckBFs0a%JwGV)2vR6dG&wKNQ#g_7+Y|Dk z#jUdGHp-2^r?ew0(V6-A<;o&mO{qD$Ma90r#=E7YsFb>5Sf7zfR)t&UHxc)@tX(Mb zI%pl_;Sl3f?u|`ydEkx2603889*Nig00<1oN`BUqmrHM*#ZpbElB4J@ ztVL5!{5xxD8h{hDr*?7@8B&Sk(gJ`;5WDSLh-n=mr5crOgD9z|2^*HS(xH3)o#54- z3q+TwDr!+Kr8{mKBwKWP3q@!e2AQF>iH$myI_hqs603~&xiJyc9+=bTP^!H?Rn)C1 zu|kuB_q-g9jG7U2;E+lG05i^2%5>_|8<44#1OsHKn;(0{Pf;qfCgNLuVI%?OP$b5s zsA=e@Oe$J(owY?&~3Rz zIUc;k4Pk6ayd9>XHDkg~Eeh2)CB-UTYEOF;e(?_cYVEkdO9*xL1p z>`XFHTZY4rq$;H#8*I0v6}Q3$2^9dpSk>gX!h92B{{YfqA06bV+zVgQCgmy=r`Kt< z01t8@d5T3LP0Jk)xZ^LS zUob_8xIb9DP_-*aY$?T+`dA!)yk%0gMwE88=6m1tiK=y5WsnhM{{S{Kj$sHr$_lD8 zT1K~)QqU0I@}bWb_BI(1Y02t~`&N`<_exN!Ttz=m)L3w(M1rIn+-CWUQLuvX%)2*v& zNdqHq2Z*Y(u@jnzBoiR!sfd_Tmnwh`Nl3`=k7!`;%*d#v@RAa)LU<8iqqMf?LvJvn zdym7+SlQBvthwTNN=g13iyQkxZUw9NgJqCbXHJIZEJ8>&&A_mP)Z&_7hNTmWkAG;g zYW)#4Nk@#+E3p1GB z;#tenr`=J=wzMTNTAHW7;Y=k~Cu&aYePRinR@+3Sl>vN=fJ7a7mR4m=CSky> zhRLx6f=Iv88jVFD*cZgJn&*WneaCS~xg(MJK-2XL4-W~(MZo~yIQrTeN+z2-A{$%g z!yttKPxp9=nn&OW=y_IYK0HB53+o9MCe5G=Grjx8R321q& zRlz;|Vj`uX9F%CQ!YL&AK(W8&8l^I~Eiw?7nhp#U-qr`}5)#z;3AOmoODvto_h=r% z8^+xO;AOfq0sWIXOPW(l-L+R%-$?43+f2eti)uDdJl@f+^%F-(xX_wml(sLDc^No2 z?-U72r8Yx!v$B3NzX(!5H}r>R-Yj~^f=Q`k(KJe4u8~7)m$Rr!N^afrXur@jZDUNj zW~q-Y#3>_iuofroeIhHPQ*xBhmkTyhl!6odqTSZE6PTH|Ft^b*JIsnfdoCxbNcZSGa7lvW|SXc(RFPuAtZx;XnY!v4A?v$td4vhCq_Xzx3iAQRKFh;yB}BNgGhK*kk&~v$bDJ+ONtf$+|LJOBX0oo53J+ z$GM6lT`Q2PpweqhmXgYd9vA=+dt^syYH_zSkYdWuw29|Q$7U5SB^#YDe^C1wUd%#&^n{xCrM4AH41Fgw+(}_HnGpJid|dbo%vVVc3IaJ5_fD- zuqV>xJVg#{EIWvNRXmO+Z>iX(Yie2rSxaTd8v&~{P48o1eIq#3T0we!ZYD{!sQ}x= z*_-FIY+CZPtu9edosuk>a#3|Ri-HC}D9?2svU;ZAa3x7j;ketMf23J+GKy#ds|~}6 zThcn(euXlIotj!&3IwGqwr>+%LDkg_ROGasG(MxY>U6klIEw9ZPHK7IoNAo65ZNU~ zv|Lzsiw90>B56tpr|e2d3R=bo(kP6jO~y7wdq#{&R8rz)st&C|U&N(-qUS+MDbju% zu}C0f?y)2jZ|e%bM$?r57MhCC@m0bJ03Ww7g-V*mF|@v^l(^sj0A&S2!`>$BNZ`P` zf#yn6tCKmESxSQMY>UJ3LrP?qKFq2L_LVFW1}u9;0;8>|)W)waH!KoGls#b?POiSw zyAY)9Kg_SwnBv|QsLp|o#Yu|AEvlU9SYS4=ZF^WAIP`>-qGVR#X|$nASAPtDU-^T% zsHF8AyDhYow&5hGrx}TgWUK5XtT0xR2bm{`V&R%7#6(70rE@OJIP)n^@-UE*{_sgI zo7ARU5@Z0Oeo`&OU-X?pw3YnX1o(Eb$9sCi>h*h0(P>T^V#?+nQ7YP?cIUU|U@1%X zFJNw9-eAoQqqynCggsRMWA5;fD&g%^sc{HZ8Ngepz?Nw6z)%Pj!Y$1>Bgp}%%~X) zAQCqV3mg4oRnc0qTS!X=1iOlLU?7EoVgMtH-w}4xC}v^RF0SiNreF=X?*9#mEq*e4KX}MWMl_*(60!gqRPs{U(9Z9dG&;ln!2>|w$98r3RQ7+9zNHN*H&nNw%uDzl9H8gJ%)SOMjO;hA(g1B!6iv- z<9FUF6)(DEi0l_Sx^f%J;9m|VjD0CwI% z?sUZq^TtLr`z7Lrm_eZ8a7eHH3GB9Tl>37E1< z(_jHkbH#`Cj|NezQ`&XJl#mEeD=8g?zuGR^d#uwm^d&bLH&^A`F*n2t)S~18te$7m zeJ|IlO(I#gjN(q!9oud$Jxzo-)qQ=Esvt1a?X9uqC0EC`M120Fb;_YJWS5c?ZM%my zx3T+i-YgVut;{y!STB{_;EP`;>m1`sD|f81)v@x__B@wU>Byc-^5leHl#Y9PdquvL zsz#%5DZe2J?R%eoJI9x_9->`DGOg{T43#9_;QHF}wDkI_scBofw4oL$1gn(TSaT9} zE6A3_*3?90@h#L^w@);y`huA(QX4@o7T05Kr_g&x&t9hWl^TkpHC3CfIO@ypEy;O; zO^H>&{{YLYudw5e z7FP-(8qrAtlFSGi#z+Q5Q8 z;ylr+>kdy$PE0Oo)wq=qEKP{@F{Eg^qjG&VOqQdrze`-S!AcOeY?a+2;F52QcQ^TGCr`>Egig z73r0_(DS5R_P#_tr%mkIqhfbt!~=6WO7XiS>$hu?2^E!#CSBP$8 z5zYw25B~rlOthsm+rPUa(JBF~MYLQcOr)&+9jR&Nn<#bm5n#KV6LlX?NYj23HQtuc^qS_Q)O5)S zmSqbmc@9gZ$(NgVdrC`pAO!7E+AGJ`)?80dS)5fOXl`m|WkF~cz5>z!xEAvABQLI0P}_b3 zkM7!{Q?v+jc;X`1X}amZhzf?2U(D0BEYjO4vQgu#0gFPfd{Nis<&?p%%(#`R#R`3A zo=#)U4_97fZ3^Sm+VD|bd6v%QayyujE9)o$^)t{(_>7&Swz|zGvoOT!O~RU5!kjm^ z;_YF0uWG-FeP65AgjMUa%JBInVMLo>lj)O={Kg`>+s+#WUJ`b2D5cK!$h;duV~Yzz ziF~T{M!zvV`$kf;GTM?sNNwdN*5Jpj{s2BVH4pifo}cw2P)^Rtzu~t{a%O2uGG!q~ z$SV8+Rsf5E9utvm$5xdF&AmtW{oXc@hD`}Mt9pY>qev`xlP-WPtdA;>`~FbNg)*I| z)=jfEF<{TO-w>2ekac(AB5PQ6x`8h??wxL7$qJm>cddm6!h%K#7tRN*Qb?rJLGaKd&=QrP+Uc-J#z>9-0Q^+h)}0vmCDUCxdZ94WRo!f{I{I&Cn`TWa z4XE5*C29&7w~+B@`KKo;)U4}sAG82SvX#8^p1{Ys@C_SyEFGz5H#2?17r64^Znx*mQTp}panWsYCpD@1XRVbkQ7^r^ zaFz;5K4l%MxIMt{9(<>Dwpqy}&}XEcc@4CbhfsiafyaI^67AeXkB_%75oyWvO z3LvKTHUttsNcKhy*q+lNuVcubYN7=ey!(k;UrDR|C)5)9f=Z*~G=fSBJc=X>5NvVG zIi9J_Pf@07jOnJBTGm{4U^<=2y^jYb64hNtZ&$4o(sMzOf-ccF9{&K-^@eKKe<InCr`I<)<<@b$9&9WJ%VV zLAr`X&C;kS47!s<*Hb~_k{xB#C>vj~A43o{$D3-R?2=w>l)7`c6%KRSGe9qv>@MSwkh4_ddoZ#_(V$0!+JntGAyTjixeHJPpJ-jB z+Wlf|MPPZ2Byrlkj#8@g+%7pbPb4{nj zKqQr?_)k3l0Hjr_GZh8?>1hc{II?UEQm(j+3BKdyYAN(5_s=OyBQ7a-C*O#$$@N-p zL8VL2OgX({%HmdTk9+ruC(Z1#eXMN>J1`b4v|Mp+@U2d@8i|+juH~0BiPk38>%#lg zvV7P2#I}~|(rNF$%*^AZw*e)xwOaT3TK@5nng0L{TTjrKIv#py^eHRaEo=5LLnTpw zs3Pa4v?pApsWl|c%T$#rg{cIg+nwV5$oiO_>W5y?>nWa*s-1-aC<5Z=7w!GtJpTZq zrX>J3K*+zIn`x=lscovrDoDa^ZQl_wtZ9=nYD}9m30rQGTNxx<*4#$Rro`KFSM!ob z^AKckuTARRPJT*l#{6&L3M5)R4W)Y9)g2Q+YfLJqKKc}$vgTvy%FjcD+90lC-HZqITgx-1EDeo+H`64xLr1X?-HZ(~}cPGf!RhJusyx9C>YP z*js^)W6D1b9dYTcUarj>RZA_FP0NipvwD}ekW_F#+C3uvx9P1inEg*rRi1WYS(4&g zTZmA&9NOUhe*L57ekQ0>!P)bjnj@$=cb4n@^`3)wuQL*|LV5O_M7@D=#XGcqR=hr! z_?M$p6xtGqE*v(**rH6g7=;_1?^r9~=nAsg{~dAaSxR%<^NJs;53 zmwI&BdU3}>EM%JxtqKO#J5^+if5doS@k;0NoAwjgU2~94_3C(@=Klcgj?r@$m6)jq zFK|>hE4{hfXv})OtTbl5q)k#2DBG>N+S9f60SJJmj_YQX-HdXFH) z!AcM&9$Hk9U

xM?RmFYJEA;3Db(%)#~i8f?7@2P28lLU%QDH?0AP?gk#fy<*565 z#BYjtr^8j<^Br^bluc#uJE<$uFO3hXWLOh!65w^UB&O#4-yNcf)31l0jGufPkT9(~Ml-KVH$>kK%fi8wv&lS0K(-(PK5|qu;0d`^?9q-x8I^rrMIK z&N^QJB)2f?fpFW=L+|=Wtom30J@GvJmsEtVqSHE>R$8S@ zDq0&3jl+3P;4BGHuraE158@&1H9}PFYNEv3a@$B2a1bF z+BPib9$=15A6ce#=iqZ+>s?|sUW1)OOL+k+ZB3v6LO=%l$9wjSXIgw8d}VaRIa;PR z8}^g<-EOfnElUNmxrb8T#E&wRO{@m&o1PO07dg2cjI;XGz*adA34<8O*W$@DAoBYjWD6z zt5U*}5`UFIftb5!Z;bb~eyf+zI$8CqW?8jveQuPbCfD39J&)%ewD_I)WTo}1OiyX) zx_ga0@x;(%hZ`Xz0(_?e{{YfFW1zkQH5W-bkeQ8I(3z0=r2=Wiej?kk;FJveePi3v zYJMHAUpU%F&$+>>#i`QUC!5fBJpm=F<@Gunp;Qpm?8!k&-Ajof9`-l>uuA7b=PG(g z%CAxf+;-{;@V1u0?R(xW9S8Ubqfuohb>eCjd6Pdjw`HWQnw5fL-3W;Eql@0@Md z7LW$s~AMpvz^(_@A5%Y4cp$-cL5;JS_oJWn5E~7aY)b$eDA3+q#Ox&yFxTew(bLLuwz06KhCYc8EvteJ(cU*VI zBazT7vcEqmXySa7_87F3XT4@2!47OwbW>AdlJeoC0+n%!7Z(=Mc? zB-|bpoOj|q{WryN*3t@}k)9@_;n_JUN9#O;s=g9Bbzh~oQqvDK6qS^jWyys!}Jl694&oxT~uMt!mA8P=}pm2QyO6I)zR zP_SN4_x|zPeju4viJZqrkbY?4b#L2rgg#G#gruFJ8-Tuf_qXd6NzFpKWb;BwV`5Nj zptRT$am~NK(k|Ktzb8eOc2cm0$accO-6Fu;5Kp{IS2V7N){6;jw=UsN@GK;&-ozN> zY=ag`uPmx#eU#ESK<0l0y|85t3->hFhY%~p5uTnqjJnRyJ)O9?^01 z_2=`CGhL}nAzKeOJ2aSEE_PQG0R83zp}rg{G{vT7X-+NS_=3_6z{jt*>l-ec(X$lL z5jckuk$aT0j(wv?rnx56w#M5|(3~h*@bmV?IZYvxBBgoxCyU3EsMqGn-1P8#IWe0O zpmchkZ4McQ6e%}Cc8vZ<(hydblag)6EZ{o`1xEeHc)6KX&MgX+78e&u%qY~H?}(t| z7s7!6awCXjGqB=L1jnT`PNABsH!!(PC~2}t{{H~h z4W=|7P-kU9nxw6*=ISbGVB6P-bO~2;9tP7aETT$sgxs4XS=2TN1Qdck*!26w@#Nj>{G>AD0LsNKp*bY*byFiG1zBU( z_wN_IH>y;2+3>B%ABjgFNTSzt)ln=h=8K6{iTpObzR?+{r)p9UY<&tM$7bbr$K@3% zxp*=GyfJfWb6U&DvJm^KvXy(}?fY66rB)GBajB_CkhHHmE=9QnXZpq~T+}rbv*878 z+>ledpZ!EmlGVC~g*2LA>nlVg7`e%wMXCuv_8iR(Ek4w-tCKWZ?Nm8R}CP%KVA zyG2J-{5yO+>iIY6Q<_?tXK?6Tnr>D8yojO7b>aD`WJ^!9Qo9u33!Gcl{{W}jE83^1 zGe|+2Y4Lrw2FAyqf1vHmMN=~5;MAzgfURAb7u0X?sp+1qeRT~bRBo7CH*Kcm(xjd* zak)6=GK!b@UuzmAY(FDYYHnGZ+9oihdu7+k-q+PU-HfmsZNOjn(S65=R_Zc8O_SIjNj=GV@fe zs1^uYZX*`-u?9UyRck=ipDCP{*sn{cCqBPl(h8j^q?<`xnp*(jAyyz@#Qy*u&N&~> zI_Rr_dH0@md!oPQR>O`-o%vSh05`v(JVQo$6Hul;XC|NgBMsW%=j$GXsj}TEl&YSD z>>!102PXcXoKkf(%SvHE>uoBq2tJ=qV}2_mbsO+X1@|$nLHjzJGG*MBXrNy9Y-b*z zAMC{^TG#1FmwBlaY*BCUr5*mZjT2tc<(x=$N+TsnJIM(i*o?bU(97;9wzUi42ZA&7 zj_fSC5ECN9!}Q`}n%RRlGNt^gRFFRvx#zKrpIIgO$+gS=%}QHM(iD^fc=QKRD69!@ z+`3$KSGA5Z4euE?pkjJSL6kPJbmG8}2jzI|Q|USKTA7RLig}c6NlFO^fCgqe;mKSebyu?@=Hze_X?v zh8}E?w5#t4Cva8Bz~bHFRqq?VVvR|<`AXC_Axa=PMlXwx)P8X7T5fedcJ`6lsCxn~InY5o;v0RZqI#wX6vL!#b*rDm z3i2V^v^z?&kyUL1{%z*~dk`ULkqID5(~X1p1+HB0yFJk@LaAXnEk7o-D3OO%blbTbeLXJ?q-HqEj=#^db*nHSc8w6-j@>`799x%;1` z{Vx~UE|k>Fy4;vk?V-W3MqMg9g~74M7XatbLm9r3*5zhY+9nxrB#=TDZY|mpkEFnf zb#|chZU7cfmzxMGCmbu>r#S38!P6?YTq5L~@?a52n=9Vx2m43Q4rgFHW7=%cQNH4p z6O8?0!%UlPE!}Q{q>gXT5nO6b#?IaLu@<<%iAr$UWvx7)HJ~4O>P7J^(v=yoKwuPr zleadoiRvS>vrF*ZbLgcf2bix)O-rzVE^sdsRJ#14UGgAUD%S&#NKyrGAmENg%e4wp zaI^v(*g(2e4sH5Fn$<1Yw1ky{E&;jwLl&))SBe6TcJ96i z@0dlhZaXTtp~OXW1tCFBpzXNYkdu6UzL7nrH1o=F3GvVW07w?JLJdza+LH5tD1R4} z+S$fpN|~=1NV;4~cOF3CdUF`5sHzlj(#xnQbu&#OSxO)v*c99!(-D|zN)DrDa3o8s zYL>0VBH6z&qe^R!+B=yq1f8dDF>~7x^%Tiks!~cDKg>WFyf!9O?knTmcPyppFvPL> zX`oW28;!&a`tcSzj>SsaSqWbv=p19$yeC)Fa`LZ*r57WWAY1M45)_xIra&XWZs|8A zXul>68;19(1WL<6a*hYwU6p&-jGSlE(Ph$Fg{G#wHv$4~Ma!19e!r|OHKpYylj5?{ zN|Y{=6U0|$q^2nkDZrHl1A)5({r-?>H%4GaHuFs->SY^HNEW8bR2TSFxMMc;&k;_o z^wD(Z7d0ZvmfC?KCWuQ6(CsS?IQ&j!@$Q)GpLNB7JW zY>UUF83sJ5V9}V3dXO8dsLjc(K4EfiYe5sHDK4m%%9GD)=d@q-Z1$e5H1kW8ZHcgM zl_Xgw2GK~Fq|_u7A8Znn_(kwzrCXaEPIblQr!W`RRTrD(~tFpCTHbCgKCt54tWtx)GiPK5h;N&Np&bmQ>~QSa!r6Z z{{Uz^RTRvqDq$dkY%Vzd{{Yq`sH{s=UQ#EJt*JXgh2iV^I$B@`q$Ns87YcDg#KKs< zAUlvoQq$5+IE5(}Q739rcu>4cuG5mE_lgK9Cn&YEdtNH~lSpcHIGivn6;?M<>TVGg3X?hxUP4#c-f)?K8|hFefj94L|N7rG9slWJA5u_|y9SDgNz zc+F{bDM^W7%gr`NA!Q)uBx#F8s;-xm0auhP-7567BcR)2GBq_YxqYgz-mP7nP(nrU zM}M#0Am=(QAuORb+o5Yb4VE8XZw~2oW~3CCR;}BtLP<9I*l`vKZBZ`r#IEoO9(#j< z0CeraA9SOkR|-op_hpaD_&%ES{c zl!xbM7&4PnfoLFw-4-Bm6|HGNev>|#i79nD(t+HBB&a0&n4F}pp3;Z?N|$wc0C1a+ zOn>SmYV#DiigG*`iVo}BBKaKu0K^<*hN01l$<6wS2SBL&!dVj%1-sccT21gd;Qbu*I>R#UQ}hTa9m5TMH+3X*7c0EoY{UuX&_qYAX+QBkEt`&G?ck9wAhWHi(13l z5!JNi(^fn(q>=$3o?@dkvh#|vjqE^$$jm)qL|62SPHGwDxO_*{Mr;ZFVDdFb9Caxw zB$LhIguI)R4xQ;cLABy)k3$nPC@5~gC|uloM==b><;YPjT3K^0HiuHPWUBuFiZtyB zQe5ogaw`j6?ra72;xks|42uaeZkr2lAlOB-L)DmKvct~Ime7zwmX#5mr|A^hv?2yG zSay;cN=u|RwHsRk=QfJ9W=yp{u%)dwQ3|-d{{Tq38OmKoQ7$($RO4yfl%(3{w`fXH z6nTnj(>o&BcK$`K*W*7}pk?4xgCPyvfTroTCZy8zyC^Fn+ii2lCM>!pWA-E4*eFR- zY~i)8Ju?F$)ecrvu%}gZq-7%`9jraSSdVS_2A$Z6)s4h>ib{ySZ{IhE4y0AZH@Hjl zb%t4JPpY0AQT`O1pKt~37MdoddDjs#Ql@sM!3yWGjL%L~*;M*kT)|ROpp+6YMtc-?yIPc=pt${E$#wW_tIL6NZuyKpwpvY8 zu0;tcQ311TNo#FGEjp!GeXk9rE8*|nrTeK?Aa1w>{{X~3Hgr;? z@e?Q^gG*D|=5CbQWu=yzZMGB$x8?PMOKNHAii?YNBq=u9Y;W|6U0SXjR`wPy5AQHd z`M=s0(^ciE;FY_8atcYu(g9ykIE%EOTAGHQrYfSOx|D*Qpjike!=7UMMs>L~rM;%; zx!jvv-!|eXI!jYD%&=2d-M9qpxBy$)(P@*P`H+>8q#W+DxXuTE?0dv=a(+^PktVA% zt-mI;B_%2d#{hqM?jsiJ4G9Zz)exT(_|!h9*ZM}YI1==?fVZv+3CX``$~Eky$(eag zt8i0>>fLWxZ95Q6N#q+pvgn;GYSSf`8z#uQlsogpI+oJ~ zQ;no03PP22k_Wxw^Q1KNyt1s#zXiy**3r;dpt5GhFR4-18V!nU=Yy~jx5{nbIEu5H zUEw|(WUVPG&zFeXYV>(I`C=5cDdd1rWP^k2e)qgqX7u#39NDn$3$m`8X849yS6h%I zt92?;RF%_Mx)P$Ks}>i$J)zCde$Yx=y|-sJ?jqAELM}12ds3o{Z2(+|cyvMo$Wtd} z@}*%U{ZFJ~p7E8)X`ysRr84X6w((IOAq7~@3~wJZJu4uGrJb?bk_G@HkMHRiZ%OGX zl2dLJ-)gs5+dTgO#v@;Lsvn}IxnzyR4jixp^Nt+A9G!7HlXGJP8j^KgK}xJp%!OK} z81YF!1;m1qZb!U%t4vZIGc&ap5W#dC zAwwAUy}w9-ocM;QOE8%hrUE4btQ=C5O}HKV!{Xhi9C9M$RmywhN_WIBL-eHINo49% za*fJQsVH31H=ioXNl^F9c*?6;ou@u2j!k&7={8DK1&HsM_J3Boi6yFZsgQBhEtI0? zax$fn&UqG(6!jjE?1f9q{{U+tBKZfHv*bAtG)!2$H#B%MJ6A}u+|y6XgzRxUf)V^Y zVj~=ROtbRFMogzDxu1-n2d3VVJ@d7!5 zRjP=ccgHIQN*D8E?GY}|1h`31IJ7l-ePr1ndtL?2YwH}$&2BdibBIspiA9R7h-l=} zoloHacQ8~t#$jyD%y@}{a#hX^#1>*;sBOQogi__jfW#GKgMZ33@x&K?kg2xf0fo?Z z5p`cZj5k5tq5$B*%c9r*k%ZjI>I;f!{KoWwem!F4r*+iUpLH`b&IIwfB#S6|5P6L1 zLUc1=4+`VfC8gd>+B~MkHY48gRdG{LCz^A=R(tE z3v2;DQRc@nkJW3G3D;EPAbS$K6X}l8pH0jym269f!?7@F8TX5T7YV;NCLBACF5-A- zO@Yj@&bWmFq$m)0_J&KED)Nk5i^oeo>pr>8Z=t(KJV~?y3NrSEc1N6=63)_YCqy%nhX zfvM>UeHwm6siF|yok%JuUA=-zlz;kTr4$Tg`p#$b5C^=d{{V_t$K@m9SF23)`h}-j zYe;FPQkfE$w|LWH=~Lf?TInG>ds;lG{QjNP6%@Gh05x%D8zT3xzHNBBd~kJZqMcOL zXw-cq(y|o8^NSA}T$<(CbQ_YQ+JLbp*%rlxu^9ylW@$@GY%HPzRC^BQKD*&KlLnb_ zt%38Neyy7(QqBk3P1hV^S@jt?BAbv9hVD&)?}&xef=lL_dA85sy26xA&Cjn9e9^iR zm07AWHB_p+(|7&jfC~!?-yq&D(ti&^19sx57mvu8}M6|oU5!-=&ec{UK^(jeGxn+k9vXmz0>)te~$HSFEiCOTZ>Qb|E zDOd=bLVzS5EIB6rks&wmt*suHGn9!*ms$*m48u+&Au04A=k)F&z{FG=9Q@*(%BR#! zLZ-6%(pHstfDDt#^@c8?(PSxLgqzsg5p$i2vDp! zjrW9^DcOYpt_dCCl4smS!b!>e%sOsfV63OYQ7P@|=?&kP2mtI+xxhJvZQb<;5XzWQ zJNJ-5zu|{6RX5vlDs|&9=|f21G#a$&PAa@zKzEh^-* za{!^xcL8knyhF~_Uz=T)qBDVbj$7u}0^a`6nVBkGlu6Hcqc|TafE66LrL9)o+mL(5 z9l<~YdwX&31xwcV8PjdnMFFHr7HuG$KDrVmfQSEwYajO z6g_ja0dhZwpS&GQu-vQQeW8G%F&ErC=A@jN>OEZX1! zYhKY?Q{h&zzZ`nNwovVwBR;3OgW_^1!L@6tbN#vEKAMsj`{fK+@;;F%HLa>u7B;%H zsYpeVrrJm#Ti9ps6jtWe!{OVjYEz7x2vSkwoVvJ7@n*v&Cl|4}- zQB6XhI;IwtZr%m08m@=Q=Op(6Y~I+N`wtUuxmB6sgAYEJd;mV!Af1 zPyxs18d7IwW;e{d;(YtNfpPC_MR%uNS*kfcfl-+Sgf>#7xS~J+8(_wSjxRc7gO^aiVx7t-U2Q7Z{e@6SH|@krP7$@H0eq^pW; z$&_8hseGJX=hr>rO@j_xhjQH5+@RXCc&L0&P^$V?MqZHeX;bW}Dx7{@Ng?BJHN}7z zKhiZV1*xU_*8GN^ezCevX~x6O%AgXFxLlGr$9V94J46OdU1J0q3P9Cui9M_MPeJ* zv)>Z-#TKbL1GP{Jw%yA$Z%?6yGukP^PrE0Vey(NH+E{5lrgRs!B>4oGMGA z*SP=>&z>S(8oo`}mV)RiN#LBG_>T|xsn-+Q0~SvCks6f~+CUH3^p_PV!aUnbjfWiD z(kc3@L1|vGQ|0SPagw$jOXzP4D%yBC;KrT)bED0+xk=e%Eh;4|O41JN4kDpanCZ@( zm~vW+P%N(3OK1dN+W=x47DBJPo!;^Jtd}7Ly=1?KG*>YWRD`i1B=C@ zr0dnKNUBn~P2VhUvS($2@GXmXil5BMt-(=gkC;N2b$Ds~Ha`CVXtc@odP-JN6!&*9 zwE0_YZJV2S$1!&~8BK!3$toaVsz3r=XS6R*>I|v$(-~@Hk1~nBoAZp9ti3IEn?rWD zrlb_(>=L9(w1RwZFc|c~C%jzgT8s9s>9aKAKs*H-f6PwF&eCd(XCtBgIcQN_8ThnIO$opOu)n-oo6n!f|{Ndqj-~Qoh{kzh%!i;2RYMk&E*e z&ZB%N&^5gBC#lJQa+9~lY0#SssMzs-Vxy@37In{0q}4yB9GR%fHrkZqX>=DG09^8~ zFz2=7(_H#|i+9QQoGzKwg4K_CFGkd|lha-ZnL~?8tfCYRvlhB-a#fMxt=5l}d6K(@ zW;}sg>Rz|gvrkFLA;#S^e}&7XX|l381aNLSiw8~qBIiz|`5jv5X$9X50#-%tEO|LO zhiwC}+_GPc$Bn6vGt~~cCptr-#BR;OzxRlYs!qwYHXEq!vD&U85{s*;lX5?_B_|TJ z1n>bC`i^1ri@&rF%(S$s>9`rVH~03BKWS4&c35THIf}DYQ*9RCLQqO=xn{)ngepmp zm`8@)K`B_dAf8Xs@Zx@q)2ZDu;2>M^8`$&Mdc}KEX<3vssfuk1a)@G?w zE0nLT4Fz30oWQ;DpS)BxjMTkqU_DHpL&Zlb-UuGxL$0P#G{sV7Yotu>QQi2I2vyDa zw>+52D_Xx$XbHfCFjmk9Y7)DH&MkZ#N2!MnHXE0@=4Q#55~T6(8f$4MWGB?QSCXeW zTWz0T{lYpsT**jJDT=(V*BQb*MSl;ZI&WU+4OKWJ0!Z?rjdoBea%JFQf0$SQES7xI@{9;&9)X4;#lAq={;B&{IbNXY*HXx+4a zqNh0`+tTxhE+GIYq^7`|^XV8~g6Sr#VU|T!g6m6B1H?#8iQFs+1QG4bdJm-?1*kVn za&~LPFFKHvG~&U%uiN|LJl$g83*S?-O7FN3IhWlxsrO3ROA8JQgBFP?X}R{xfh9=6 zN|HE+T34hMHf2(mT?w!oP;-y&@p`6dW+?I(e)r6L=4L>|uT$N^*&DeE%1jHl@g*NnAn+_f^tWiQS2Pt;UBx`}>+sWH z6}Sw21af&C&ZB6&Npn?^W}c@XQ+^_HR6zXV3I3`|)276_nrN#esJK7%5LK6|t*5|f zt$Rk*jo2UW6_rt^Tzt7Y0`8(xLH_`lu*MkjV!Q1WMA9j}L#575c&lNxt9O+ofJYH5 zuBcL_&w{yR+zcfv{{W1}eMXg{KIoQzYcAg4+S$d25j6gjl44lC8&Oe6vA7n1$&Go6 ztn4nOj!&yp5ix0o8A!Rqiy!L&JFc{SU20|NrcurV$h>2`}ib@vg)l-K$U1E4mPx&;c38%WqVXHs z3aW46m6a2ls=yqQFk`14BD~IgnN+8gT)IqDWgk#NtfZui?l#EwA6PpJrpvwJEZiLK zO0T;a828_(G!{I+Nk$ZrZD){XW+|{XhVdXz{ z72!Kh+eQGBMmFJGaVKgM4K!3`oXOy%*b93>s5+{8nKqS6ym%y)E4F*~h%{7|;VKFQ zBzb)@Jt4(CY`oxUOSvf|06W|Chx3=C(Ta|w5IdS~oYzmxK8D23({XZBU=A(c`o@hZ zt)|4gY)yjVF}}+7_4`IEOD$73I8vdv@cFZTZ|xR}exYh^+w!zy)Vts=^h)B*t|uSgy`M8`rMwV>Zyj>@ygmZxhM50(`J_ApjuEtFMMRs6`b9C~-|JIk z$ko7sttXyhWP-AwqigyP>o1kNFw%i1De~M{;wk!{PEi)= zFF1e{aDYa5zHbd!tg_)Mn5sIoi<7Zf`^0Xis5LDrnZ>%bh1|4KzIeoSpaYRPjk_6G z)!HVAw+oG`#`v=CIr_$BtEiI91tps(r;-P>UG*h$UVYUim)vX-lj0btRv2NKa^tfq zaGnxZd;b8uD^*k|Kr=k3Q{7t6hSK>sDTXFZ=9P7_euXxRO#ND((iFC>yEaX*A_8V@ z9zTn}auv@w{{Wbc2~lPpFQ1p%>Pi$ig`_C1Ra6^7_mZoEQIYM5~kywr;D=`1ZEvQIY_7x#}q=#HsYAEqu| zVYC+xEamrJ`3Jr@`o?;$2QmP=8fLGg#cO{BPRUCdxoXN1@l}If1&IFu^}g4)Xs7B= zg^gV*ps6XK_!(dBt&aB3JYqd7sP%Nx<@{->a+M^TDHq7czt%I|QLO81vbD;vwKA05 zN@-U5-VlOEB6V#b1_ogBT@crlxv<={o36SDuq=^(%pU%~>kg#4LDdPFr3v~=lF3rk zLK51J)SfNt&MtdqHOd!SC=E?D`$a)#JN!n?!2`ZA8V-!=CWEhqIKmrJh$%?gNgeTs z3;Qc-u=ylY&l{VWKDL+elLpiz%oSaP4vg&9RTw9Th^I8PBsX*TbBpKFC1qw7mI_}2*S1s4eBiM=K~^R z_-Je@!vq*^nMdW;6|&z*e5uJsoCs5yABW9*L6O4fOZtg<9<}oC7F;P|wXw#D$ zzwTb?zZf4_ePpZ&#kC@lg|$-e{$cAB7WT|_Uo2<_fA6VzK5Qr2oMn-wFD6MlaG z0F*asb)-C0rI4GP@%{e*%vOJHys{D|3Ab)94<%;{>A7({EP87@TJ4$Vv1M7TWgUn|2`i#V_S!|)glq7y0GJAe;pi0*zAE&7^ zGXSc^K4Ne^ZQtn`{;`v7b4#0LV5oAtbLoQ!hjHh)nNHTTE?O40+S@{AoXJ)Yq1xTA z7S|{;6=Zmz1zg_bn-lhoUXN3nlzAXHr0!T4?msBibfr>da*0&IP$d=v@9Fu#EK#_X z0~@b0xvg|c71qv5Ug1P!&pUTlAP?e?1DW$E0 zWquHDE(d;l!ua0t+Y0TbJj{iSC#mHEJY|%&2n3-w?~KINGJ{uXJ}Yyi5HH}a{$L|j zr^r!ivX*990_MkcjfncgiA^&{nso^*q;>~s$-ig=A_#mJQQ!BOJl3myk@AyiS}$;| z;~6&`k9aKyO;P8Ho|=_I#dj)R;!m#vG<|K-7G_Iprmz%HN`WcnzT5? z{{V=Pl4bd_iP<+wk-<_4weink#AI|WQuOS}l|#Fb39^W`{Cy)y)7pXRM50u?cxg@2 zo8X-NV1~0$?b^3;+2X%XVJ|wXBx8EWwom)S{+HFQTf~?l2Ry9@dUzr#9bofp8k=EGpSKAGMA-aQuf#sB>w=n`o)r&);U^wlPNbelx+M& zB$L}5MA=w%%(A*rvqo!eH1vV+-*g};Bly7o0Nhu4ldt9Uy)yp*Fq9{1d{;LPKeHM3 zuj_l#l+{&{HWjfKLq#A0GH?Be#k!Bx>gK$8Az!#kMp7-FE!cWSOlHAuqU3Pg3!B|D zt5iwi6va;AR|*@(VzbqbtIWtCwMM9vK6p?_^gg_Hk374sYPxl@8n`#PB>ucZWOWjD zsQMnO9~6aH0;_*P6;LtqM2lN~Q#5*?Rx4H6U;gO2`^#kcTyP6py@W;2>pFD9o;^)z zQ3(kMU5DQh0Pdit%gBdzfK;Esa&7+co$B3DJuy19GVurs@{D@Lg9QMIHU}e7mpaa; zk(hL}&`ECi=EXt)o#?$;i~D{F^Gj>l}$TxRbzo+4(27=n^D}06$}`6N0LI;8dE*)F$0z{!2x5s zRW?}?#cn8z4Ck0$Ql~2{?}nQu*iG&J@Dp;2mSbR;Bih&z4L9Pp^|oIy#2vK}X`1EI zTD>e<3UDZc&7krX32zuJv>dB9Hi~?z=G_613BM*RbQTdSuuRz86P)&d1Cc^0RR-qW zpyZ}!vD3SWC9pXgyjfZI<-Gh^I^)bc$lVydc1wIJgB zLE;ip4m~|PMKZHntgzu*WlC>2N=1k17K+}8)G~^7F0r(S3T?O>AJ4Q_T%pg07xN5S z=LXz!7gXb!4eCvZn>x0vOKvqV=HNxrK+H=nuU@M*Q9UqJENn>Q?-0`Tm(bu++EKE* z_KA9I${$kOcm=LM4a-X^Su0RVuVZ1K&KIH8 zN}uvB!6M+3$cCxY?#wb=+qX6Vo^koYO-MZ^<}@ydvNOZz%PIZQikt z&Afj}qpD;XQExJWatC;%>M2n_JhsxJY@@Tw*b|;kB1=x{RaDpvJe|7$Kmk}IzH9_K z{gov2$$EK7N|pFZlugIhHYeE8G6T3@tf{$5a#7S3HFLD{e8jAUQes`koM;4;qiNg; zAKx)GSEfkLBsV6MZYi))Uw+@LX4N|7Qh`xaoXdrFSqUjmVe|$qyj6kRP$<<@ze>~| zsk~+hQg38{Qb-=~&UTu&XVm+Sr6}EURIW(&v_>u?~b*c;l{v?Z>c)ROG@ z)WNwb+PHyiYRoF6pLi%oA-rvRYg&?iNprXKXgPN<{QG}>pY7b;EEJU2YstZ+cJqXO32x_+dVrD<=Fjl`6M zi}Eq+#9Vc>@|}|KC#Q-~a+Z`cdvk&P^BDf7)GVT|B%4;id2nX_y`qM(iZClV^GP-8 zw`3B0TCKuGl!B0MeWNJq4Q;x`OuWlwv64Z($*_rSQ#Rz9gY3+e_=C-H$I>a)mjuWC zNOy5oG9qMyF1BMQW|UMC6hA0oH8t}Jx`?>v5P8-3Ltp~qyf9YesFd;E@T}LwU$mcg-UeYI z1e{z#H$hd%`bLI?c`Tr8RAR}eY4Q`+Ov|AmDbJeGRF@@cxIA}>ntao(HWJI0u!^Gv zfQaU<(^Br1+jDpy#1H8R$nOf=e-9_vUL+;yYMw^tpYM@qPGX!Jc}=ip}7LWm~|?*;oh>O+SXOZZY(i>JEc-8XtglOO3A?_;K$kM^5Z&n zd~IXj`OhmNki;;fENIrhwHz|@>%g*ZkN~jA%voo3%XC^hvXmKb0d6AYNmch_)ZQtS znnZ&rFFM1DNf!=;l0M=c%~mDcVJ*1E>l=cbi~f<_wv%nhf^Ni-km?q%n2~KWi%~#d zl!n1Kx%Q7_d@!@DH7`$Pmd$0UiPE1Wy3z{53RC4E3xEOik0H|au9#+$({mI?oOQE> zrAh}E=FxBI$HZQ<(Z%&>xzQ{hQQnYv7`V9@z>aLmzX?Pf{Q8(H7PG|kms0)_wXH)= zxi2r%mnR=j?+Rq53V{|Nl#G9*WOR>%1?&2g)EQbeLWfgrHd<;*C}}3#sI1vH0^>O* zEL}AC!0JUcQ%kE?o^*Vo(j9eRl%7Wk&-}xcd`ap}e=p)UDoUJCM9aZpJHR-xDfEtf zd43^?lqw<1ivjZ^5I&VMUZVUQ>i(72j-Q>G`H7zltfVxwg|~BO5^ZH5?KV)jF@ZNS(BeMlEStW$M7{H;yx&N2#;KN1sfUr6=$P`(ekIp9rBX?0IH z%%c}BA(aC0+y+P^Z*v}Q>c2!LdVMa;%q)ol5 z*fq!r%`-UCiW0%FH#WJrh7+`TnN{6Q5PMi0#MfCIpMFKG1_w0L#p^bt#i?NaP*9R|Wk6#7Vx8 zQIrK92Cj7vrUC^zedw}4GQAZwp z+V~L23fY(&Jj4XL5KEk2i=H5UTFKm^6}y`Q2R;kf3cbe{{*WnXqxidH5b6aGCax+5 z-!|e72dMu5cm$}FkW*p@bC^{{Doxa(#zml^w5)7W2flfX0IGw58z>UtO3p?G;Rj1r zbT}+PIUwd8CRGZz9At9@TWH;Jf^qbWQiXR2;8a#g^s+A6t()5Y;zmlK;YWg(?5 zElO7mjHe(|YvYQ0+O9J$i6lZHk{Sa|bG zQ6R3?1a3DZagIGL52*hD4^kTEO)prnR$=*;SPKp90Ftgn_W(QcK9Luu^{sPD0i4R3*i zVx^zndYeG}Ug$|#S7x;;<}A`kXbUMgBabzY1}qvAuX;nPb%}-P{Y5b*hDh+!Fre7r z@ndes^N$_qN(uf=#IC^p%-O0C6!$mTgU+HskKVih_xIT#<}5=V1wsZ%Jk z&VSO?ep+Eagoiw?Ufr+#-VZ^jyCSz`miTa{z^E%2=eA=Y=)Y5^wWOMyuehe2l~yZE|K-Iqw$;<^UNxGZ_jQu0c%ZDZtv8Q@wOybgL^c{H2n|=wJ zM&p!=i*|+QHKNk!-1g+Jk^nfwW9h9<)TacyXiE;E)RnC(zU2P^NSAw3vZ;@gLi|vR zWGIcN`~H#0Z~|^vX0GJktoUu|M^bBv)wLQU3YsY)OH-<`-Fuq@ZvLOrGg_a(!&Hj< zwf!)b6)YM3+^XGiN*r)=bB_N2q-k``c-)&tS^dc(!)XWe;wEW&=4NTafbk#;5^OP# zZ+N~vR<8#Nc&RtjY4aO?%=4D4(i*2nOo~pNqfUnb^XzF$N$;E+cZ;5q)4ffflb2}{ zE)C88@GXJ>IR5~~@wrQXmTC$$3WYtQ>PB3#x`(6|Yg1F?LH&y=6OslC<46-jhB zg&s-2)3?;cPh0fMN^2>1UZ+kfP4cUxvZInuaeTy6GP6?(lsI;eDY}(8+08jqPs`8C zF#2}zt6=+HC_3Y&8YfUP=w?8$q6yzFZQGpv;?@5E+V8L04ml&M8YGip-~dOp%8&Qn zIqr^Y*=C21+GcERxG5>VezE9d$>FyT#N<01d6d|mSL!cBH3cGJF_nDdLIxD~s}*ttu)TbDNGvBi%ax0HxZo5~Tjd+_b0nb|Bg@9;323l_6nv?R=5_n9sVWCq#L-suIXls?gfciiHtlZU`sVF-d)4 zQJ1R`F)*hR+Ptpr+H4Ln{{Xo4ihd<4{i)~LrLhz0HjeApNh*l>BUhJE$CXZ`5Pva` zc++(LxRjqQe#WUZ@(Mv78A-LT#jhVI=zUJ4mUm0lzE)@eTwcpfbISFkDJe@ zC~big+r^(7jtnHOvzU{aTd0`Y0*(0Wevu%0#I~CZ%`ErE#MqqMv{I__VJh7&>Ocng z7#xn#82qEo-78pFNhJg;^tUih6eF3LoE|2HPt-bUt8%4W9Dt?qo5ShJ-7c2IyvvAA z;c;`1>lr+%T#K#={O2W zxBTWRwK_F&MQVB0RtO*z1Rq{=Z_YMZH<@T|m~9qU;wwhe-!RIzPoqw>qJ$s=f|70z zKi~IwvgO;@oF^0Q+6>1Knu&0(ZdpmV{6_XR`eGDvO|>w)whrPv+ex*)xQjJ$x;mXu zVNI2BWD;y5zWeQ!DWHH54U|$ZalknjitgSlNv1Ho`pTthm-6g|_+eQWJNV?pLzJdx zZrjarE&xsT_P#!XE%laHIFAo#QU$i>0Qy_$5o1qGHd6RW2IL!?eeHkJD6Ge$Hbn!= zC|ZL=%}T9qFvw6OG6-Br3#UllHf?Yssdm^mslI+LL7-_wNujy)`Jb zSWAGNx6XTKz2e6w6iklAQ({u3HC*ci6(vDDX2AadNU~71qbgf&ld)gQ2erLD;Wo5O z6YS-K-s0yx`^05eMNZSl{U}YX{3h1p)-fr#4@r?+f@Xx)u#|RCA*YB3uieZkv;P-?V1${@JIH0U^AQNZ<~8K_1lAQVVNI76RGNe8LPM^kqC#w{8Bj zY117-l|=FpF#gby{KIL-8I1y))EzT4t%by-k&s*%{bR|i)%6C{rJLL*_(y+S2vt2t ztEIIhyl|W#BfqW(^)QX6END%OCf4S9k5OtWE6jq_!$hPLambWdGL1o5VGp@VW=NTZli}FoxU^I1 zI+C+Zb!<*4O@w2^BOqJp54B}xZbH17l%*^1#mP!}NawOs7wVaL}ou_^-S2^@ee z+B$dbSSaow$NHOHOQaM8*q_B~W-7B$|PXq)10Ity8eq~)>q!mt;17zDB;Xf4b^KuWQ0!0W(qa5sX zSwTGd#kZ##W_GDlXs%ga8Bn`~k++zqu48BgDz&)8Su~cdotAMD?N0b-1COi_7WtCN zyKM>UewWbnKAMm&tH*KR2GpkG($>#E?G{&G(oWsq*y{^Qu9c|U{bL5wdgi3tNkqG$ z#V)~1-HT(fjT=o!Rkb=0hy)AYoMRDt9V4ea!W%WD_S|<~!|8ZZe@as5(mn_6 zWK1@2w$h7V9=Cn6A`1J8fQ{E8<2g*+6(>RTGUPZj2_UeHj9WT zQLpPYEg|twr6(U$n=BBWpeUfE{-sy@#gO&NQA;yYQ|;{_T_Hh#RLeZZIx>rxB zFU;1JJiWeQwMhJcSL+wHdMBr)LvFC}M$`*5;WtgYUw8UPAviC-XF?o>co3D2tV>Rz zPD@XdaeFC97e1rp}!V6FnNR!c=VRZC(^X0=H}VCiF$8`GU{4NFMHx&+7xTa+k+l$!Xdec7ocH4YOfy`HKBXWrl!GZHt}^Nl$8Ko^xYw zDBAV{$Ngdsr98{+pWfW^PUv*q>n6Z*1nDrBcQ{VbehI`()0;{_^C?y~#jzFnIn?e? zisz7ixQU56i$NfV08Q=^NX#n^c)QXn5alvH|!k#UAliDKd zI@(=VTGA8+#@&b5dc|U5q^BDQLxdCMu;Ykq>pO^1^C;sSo*|V*S%j8K84V!^-5B}pWrpT>srsUaOug7?CQk6?glqLIs4UfEH10H7I zv{0Hm9a5E?oZdogNgH@0*4h5^7V0*$p+7D2Q%tF03B{5L&AH5ZncAe(q{u@Gx21*$ zv`o;oRa_u8k6WkKUzD zB&8(=!vKuLCX=eLr6KvW7dH&w2mK=1D^{jcPmIH;LWTbT6~9CM^8h_A*aDleER>l# zgv`oYEGuekE(agiv575JKuq+yT~b%MH!0wrKjI-N-A$4zDSmAz8?AL(0`9i5BuBLR_hnQMS*`Z7=GY@V+1bJ0^ae_N>+9hbZj()20#HWCiGB*NL zZhu(CH5Rz5y-{0k&M3B`ae>_WLb4js>R}BtI;5dOQ#UHDCs}e3EUG$}8JCaa;2)_m@lO1B0l&2X)&Umh?BIJINMb+I_pD9~Y z4!B80fKMP?!{f$P?oUuduG{;{rE^m~M4NRgR{g8mo16OPEA#rAX0+%9)dXJvsQuzU zQC3q?pK}GI`Sk740id%&aJfZ;?7!YawR@IKh5-)4w@wZWmQu&sO&a#}S zOL$XrDk%fXl5js*gLbsjNH&D0z2R~Rg7*O zlH;tT6VI2>#QRb*>>!p|2{z?M&@-~quOJ&IBP1BO>P!$!sZ`dff^BPG0@&swnWuci z=|KTm{UXqvB$>&QgeL_@BKAGvK^g*jPIW3v1;8vwKqfZQOdEp6RE-qTkolEv-VOk^ z1V~D0q&YApUI1UXiDpC06w5T94P=0Kj1SH%x=x2RGT>R04jYoAw3`wlyF!5_<}6R7 zkEdyws(VOv1Q1j?N%hXbYR99qjO}PA{O`Ga-x{-l1 zJ2vC07YVr-$Lqv%Bjv@A*|9H|9u`2uxerpIOVXQmWo#u#2Fdbdi`$+ez9<3L6){dD zDX|JXcl3#=>Z8?_p^~>Yc!t}KIsX7?wrI@;in;lhW)Pf_VzY2D%ye%gf@eR3swm9m zoe5Q$nOxiLBzbSJ?)UbH@k6MwI8eg~xV`{AiH}5`4J?@uhmse#5JHL0eIf>Pr?V|o zd{$%;v>!vk@A~^i4opOG6T@`wW%RuxsHe8N^C(IR>^3JS{h->5ONv_sYeRQ!K4EP0 z+}b@6r}TqMX$?0jyX?py`u_mxD&0%y@+!)5b(vraMbxCJR!GK7Q8Hs=UcXo}tElRE z*XG<}Z^dfCH#pBfXt2|@L*NEV)q8NDdHmulT~egQ`RYaldEBM8T+wT_5H#aJVi7t=|fhq6a zF>)^B0xO8)Ri;Xu@}}Bo?YSp#1Pt&vu!`+kWG+?8q`bn$)OlLCu_LreYT2Y3a@IEx zMXX3Ck(keGTDSHTz?FSh1Pj}P-@GmKOu#E~B`DgSxiLDVtgC3Y^xoFK2Y9#B^$Swz z+OkT3+yFnPXwBp`lM>SieqlS1;oXa7-iPlJGTPmViM71af?Ehsu(o3>AUp_mmh8!$ zeW{aDX%gaK-75;X`ea5=t)^xXQAEVDf|8I(HaE0NR<(Nyn{mQ`yn%ZRVj~=?(n;_!gO)D<{Nj^Dl@s`HL; zAs-+3ZE@Q0pjlEbRB~?sl3=QUl;`nqePHeF2I?@GK4G7vcZe-wZho+~V+iq}m0xr$ z7D{XY;}-1<+j8U5&~ot#2qb-P4R8vHPBgm}9sz_vQ8@!1f*vh<+aTr|JZx=mq#O2{ zqRfP)KJg(Ww#~DH%tW@bKMJkuh+Vgc8@F5B!3!Oh6{HFt>a{tLKP? zOZQ2-yFrrAl_$pDy z07HhFTJ-HlJK; zF^cQfOJ|$=OBT7E(3*=)NIkB)drYj)$c1kpW<=r zu;div3-|TgI{)FvvDX_jG@ljpHo5=P^kU(z+Mt$&Aq z#3x9M#LZ%b;z~>0{NqVqgy_All2gZ}?Rd**jZVm2gwmXM#8r@xo80?eKHD2Ji&6;r zb3B_z>-$9)r0MFFZ7x;XY1N|TBp!Vt8Fc#WlGQ6H=H!A++g~ClrZlFY)DtN~G}o9~ zh$%~{Abk(z60#j6s!SnHOw7mS3+?SYXvb9eoWD)_kZcncr?HE?2(o;2B+WtdM z&$#-KNnEU|)SF+h9iY-$KT%Ul67uPFw-o3boK1i}_lY)(2|K-J8NE3BPhDtTSJXN^ zHCkp=$ke3floSy(g)IxY!BDq3@5D}Z7vaNLbyrFkH5Q)I&8ZFS36YoZ-ar>8HXx5T zuQ843JzcAMai*Giq{XP+HQT3P=;?1Qm_9Hpghn-W4*#05@@m))*LW+mn5yV)KJD3nfi0)yDrV^JH$qDUY%t+C6l}fx*^1Bnf?ImjC z>w^rKs=kST4GiAK_an4gv{tK@eZ)!4zN9wd_N^g6V3EX8JTn!yfy9=rd_8Mg4w`FJ z%d*7OvfJFE)zqQKx4cm2DUL8maf7`i?*wE=pk?)xjWS)i8fKxH4m5$WhZA&?MTM+Q z@pwXRwNKQKmj;q?bErp|LRTsR_crH~=>R&L75#s-nwPFm>%{ZXWhu%LYaChv`+zD* z1dif1nm0vcaTdBI?f@sfhyJ1ys=p8V(?y|EZ)m!c3>9C-T$=nKE-W`% zz~&ediaGDnGUi>|Ov}ZTaNWhMK@e~au0RLg4E((0o5h)?6oqZLO2v)7@TwS?TS3z- zppknlgJ?jdrAZMatb|#12X(F>$!HHaH@~bZWTw>6f8`h9kK-ve{NW;!;00Ijgu~q% zfDsi$xUeP59&mr887+d4RG*RAWapO#>U6J((++i~^gJjmT;^qUo(pjg___D;I<3MHqB2eM*WG}v9Y4h=+B zDL2g}t0=UfDzxyaXWk0&3RPs13AP8PV;U_#s8tH)nhjMbQj<<00STR$K`U`Mu-$zA zQRJpI4C9CZ%__-O z{b!`QL9FUJN|N-3k)t;-wWO``rhx^!=EQm*Sg}a;cTi8%rrdgl(w3E>4WI&@peH}X zZa$Gs>1R>;Z==~mQ&KB^#58s}yx5E19$|j*c&BQH>lAl2MvK#aL^z_7>l?{8u^)*4 z0Ogzaj}K6)a*|Y^oVEd#aZn&x`^_dtTTQd0kzB9S<^jQ6pl~Z_z`8*^WSd{H`bIfd z>nBhvI?YtN6$(inA@Vmi(ug9!Ug=QIeZ*$HLh6@PHU6Z3NVQ6GURaHdJcJOItfFjf zoZIz@T5m!%B}RblUbj5#?DI?=j6Cy+8`JnoPB$pqzpQLJ1ykZ=pbtXj^Xi5mF`?Xj zO->Rm7!FqH#;wk$ZV;uRwicZ_`@FrCgGi ztW&EAait^~l%$l};BlW{SjM#Wq|y%b^-@%c6q2SF^AeAnC=BD1gKo$5iN2Ba;sL~YHnQmbI z@z?p>Nx2uWwS-x^WAPhV*3*d7HCEK(2@TAxJ4qni5CM9k-p~V9K(59TAW_wO(`Q7#klr}O6=3_q)f{=ZZU(Oyfu;5&eB{6n^;nR zTz%lGxEBi*1A#7+EKbQF1v;exkW#L32>koaI0#uH*Rqc|hSXheMX9W=W@!L++@Wj! zaPn@eM42bSoMlAwWn99W4anwdB>bX(x25J^`DuxE){||(qmljIA+?`Ow7#~ITTMyJ zC=`_VZnP{3@5C0e8(3V-tjS7~_^hlEpUNT=szi%~E^BC30NsK1CLIY@wLFNgjZb1` z`u_mn!>3a+MRR&iO>UHuLL|_nsDLfXY<}^M>kopyo4lX?;Al!~Gn+sgWST%pzHUNI zqu25k^-Y8}@`}fPGwlVe(kWAomjh)k00MTK5uZUF_`V~o#N4r*Z=llU28T1}?N|IX zg=(a!%8sIHRW=2GD4n;*{{T;+jLTj88&rBzQB>t3vSu6KW&@|pgNxqD1HWS*N$MJA zeqC-Mw+fI32^@?bZT%vHt8|?zsaQ<3%(@ir>o%4D001K7=kkwF55{#qDBO6Qt?=A? zOrxhwskx6jhp7)DYFGo##EszqCi{cQp*i4a-R`S&&DF+szcKZzkBeyhBy08kevxZ9b6c zhnb|SGZgBKxI<-rCega!=kqZOUYT}933^S{kcd9YAt7YgTK&J*-Y7b{i0p*Qf|8sM zAxe%8KfC)twLC^(!^{OsHk{PK#*I1U*(BMsy7&EJKC0X1Xe2nIGszbg@7^c~sZL4G z7ZCcaR6hY3IsW}(ZbwwQ>PUUkcPNC9P9qhFGOF>^nyMvENg>I56##NhPA~qE3n@`~ zlC;hGcjS+5(DkZ`m`H6?AbGeV_8&+sPLSl}uZ`e%qhR1#{?ULcd5+8qij@lG0ZM!4 zr503$5S#9`vB#`3nvzLKOKQj&NF4G0(V)oEn@SA4+eX71kEOfkm>G>XDzJPIl8`fe zfzSKHZ>c{C*{q@3( zO(_5pl>^83>lMkGLklWZw&vT)jlQs=}E46}+kA0&##1+1pHty$v z@}A1ZewMUqH4QXfR`hKtxFJV2N$vH6J*Sk!uZEqeQnBKH$@;~{YU(M*2NDNN(dBg8 zXqXHDu#vQe_%^qt(X7{b7-he z%DqpSF9)_1w}7i3?(wU{o6C)O5$3SdadWrF`SD3AJm(Q{syfMSQi)Dn&fs|&ij`Jdgr;fNs`+X3pb?$@p$d+kewXK2Ly0^TWPYMLMy}IuhUO5Wp4$zCE&EPl zW&6umAtK{-uNa;p0zu|PDIf)JXpHk{Y~eS#IPILotwv?lq$g#`{8qMNGG^;uQ(^BD zVaG9#P@Xw9xHr5WR&{djB}gEtCgTvFgjBI`NQ1W00rLzV1-;`y1mp^!cwOia>R|^71DmciI$xr`LJwOo61{;=|)*Gl^3jH5+oegRn|`g+ACwN7ST z1^Q}BSo}7>=wP~TvrluxMM)dfk>$V^jn@-j7u>cEw(6D*rjWIR{CkN9^@|3M_>rBK zbV|+2+V{4^+W7j#K9?h;H3C%R)X8CBjfHBkx99B*>KZPJf?SlXFs%7WU5siZ4`?V6 zHz_}eX~$FxVJ)k%DLMUOc2BO=d8X3Sj)fIk$2a@tJf`Xr)Y=g(I<=In5;t1WZqe1` zrmV_eQ^25rk`M}g&%7X1zN3a@7dP6!TIXe$+dV3!1tfx`i`-kjVzS>`<IFrh`z5G}Ixa)C~p zV_*siHy1vneprSTKMrw401FXdPjeON9YkI`R7V)RNXt%_fC%$?l5-y{R;Qvx!o5R7 zWCG|)hbbZ=CuP>dss$ihzuqiiva~3nU|$096I5r&q6ks%XmMsI7a|2ka)dc!j1o*4 zT8-7&NpOL4e8Mg;N{A^V&9{=^uZXo^Q?L6ZBUwlbV%I5=(~m z^)U}R9zn=9;{q7H;#$POs6`oO8k)c-es=SCaV@IUe4B`}adky8PdWe>w{CfXMB|BB zDmSplID!^wpi65fwf)itDn#JeBe|FoSy9XcB_uz~LQ{K^c@ddOYj;t!v~r#Z_WQ-2fvkLXkf)Rp z<-zwpu)9ofq={;ssXZeuUVXxo{0Sf5v{%h`uIu(p+o=Hl9mgUQoYm|pNkhsix0qud zm-<>GhM@V0rzR50Nx-p4!S=K`3so0s28>d(R8+eBSLX>f7D@WV6;D~b;P7{;DM-1p zq14+#qCRGA%aW`hdS3Bgt;)(U%A6`T9gldT1q4);kSK^B=T{nZD5+jmTph%L`a-k1 z#!8_oPVgPr02lX)6=Jfqx}-FaEDeN3ip$%|$prer>!|9MC7NNyEz@?%3hoRtt2CK& zcLCdu35fRV(+###6aeptYd>CFsVPtgur`LiA=y#uHI|xp!|?8(a||bH4Lad*qipjL zGc)ThTrBf}+8Zi;M3n=dSW;t9z9h%(5|T##KUj3tebj#M#UuX!zA;%7iaFf}M9S0V zD*FgtVV1VF7Qk-h{{T2DwHa~Eryaq+5m^&yDggbU$(u?}&@G-ojk^1rXzp55TJr1! z-2211DWLLzy^nm~5mRPtg_R`4l$A|Po8PuA8s^#zyhym+fl;;1u2U8|RGgd5c!6m+ z^I|jE8oG*t(xZLZ#7;<6*5Y;{SN$QCxrkHVSr<-~Q^g6|Kqli5-e!UGCe1RFV{XL4 zbf@2#T3cQr&0MC2kw%PHz`CM@?x9S+7sGu{;qCmx80bzAQ5nGFMrNG z7uF7o%4vpN)HJE`nGlg;ZD?&Ku9rqm#(z*t5n$sf}aYp2?sYmwv4w=RUDcrb%l8XtWrjA7QH1UHsyVp z)?8YAH2?}l@MD;+<6?CH7J-^&Gv=jd<(r>q1UX;)TEcW-Az)lo9`{MrqNZy>pBg;l?a{9tram~IUK_?bg z54DH)h_zB#r_Uf4{KSiuoY+U4)2&(Bg-eBbe-SyokJsxKoi)|UoiQz`1+}(D5pQ2y z;wIg3EQB6R^kq6mKs(?{O@1&*NFA{iZlcRoC~P}4#EF<>1LP_fH}Btwr|90cE^=)_ z_RtD)l8^>)2Ydej?jP2AyEjoOm0Kh>qDgkyP{%p61Y)MY#LkLWgUs{qRB6+ChOD=n zkqwosjAv-Q?Gy@>oYfj*!g&OeZDjT*=^OU0uTiF|PNYliDgY9cj&FZh%r(@!oW#Q0 zLID6@a85WK;uU9ZZT|qMhpHiLxV5yd50o5R z{o#vq?j=D*WmZ>V6E`Wrm-$+|PAD=RJle-F^|l;&l`SBU1`JeaFRAr_QgWlaFU z=x$vyyK!I=d*iez4?x^u)l_Ke5`q@s1Ohh*Ij#zODOw&?lx_+^97Ffy4DbqNTP%P` zDZ-*RS4gHxNtB@@bBQ1k+twXv_$EvOroffz&s1BRsfi>7Hk4fk?h|`^Th=Q2jSp3( zQ#az3g^{!aoMIYlDkR-0^v`&pg(Tna{{XmaMXi+V-sP3MXasupjk|9KKjs%Eq-NP- zM`Y7udQX%Qo_%4=)XbTtZ)j~=lYOAWNtO)DYMXNbBwoVakiuf5+r@3P;2UsvK__m?r&!gU^*d={_P-3CT<}nnOXdN{PpKk*MGZ(rTjP zswr_rV{L`ZN53xPhk8jM@Oiu`H?_A3K)B?@trBLIN*R5%-}BAj4i7S&jwNP!l7w#C zVll);%x20bk=(`lqb)_7ms5{Eu(sAh5ZDIbV=)5n?1ldAxpiNQsEfjyxqv2ClVWa9 zcvUwk1RVA;WTHcdO_HPPAzzeIbI-IUrq+RVCj>)5 zVg~gQVo%UPgX9bD$D|}pk3V4neZtq|#<`-w(xZZYw}+A{vVzIBa11eIXBLNY`MKua zu;7`9lI*w?pe{0EQKxq?ZPpwB2N4G=fGkDtoJ6dWTy+4FNVSYrOkN0+x^3erG~50m zvK4T6?;e==arl;~=odp@IP!{uK-}`I4UMggN0+7CQ&w12fCLDXrB|Mkcskmwp~oJP z(5{40=177~&#HYI_|1{3>SklH1|1um<2qmi_*{O85Ae;_m8xvsq3QXOnPGD1SlZfKaiMYLBXyTxMq}s|W8qFld6QSA z)+QvT9zZ8*@%a>+7$%$Pooh;${ zL=p3!7WKEl_rxBTrT*2UQc*gF#oh>*X|*;j*(!46;PDmym-SyrX&K-0*HI`;rfyx* zJZG8x;)uE1aFRe65%!a-e+_zLsv2@?obukMR9}@_VfNB2tE8j_c}>O0KWO<+@umJ2 zpAo$%)(vV&DK<3?Dt&iidY+}JO_8)&)D(h_MUBn%au#k-1#k5h>HJh+dy)`SB**4r#R^vW55zC&_E` zbq`usfG>APtH=GgpKi*A7F2CnFB7$T=glb&%)@fMQOLxflY6jghDCyq81}dPM+Q&) zgqv1c2kZRhSK!)!HwFjg$MUK1+u}Bc$5i#Z5_%&;u}+=Z8#3%{KvCSI<^TbIF#NfU zmtOQ!s9iU#8YZyQ&Pz-zT_8A>r9;_CBpzez4_*HN!|$b?M19)zCZdXEQMS&`Q9`Sgf(=}&Q zW$H6#v9(U^GgQihDRNoQHWDw33uBvDdqH$Yi=Wh5O{$$vuKemJC9I~@1=~Db9$azy zMCP6Ne4s7jiY}(ANxa*8op2PEmDr^~=NYw!c<}OMq35d~C{&i=Y=hm`_>{h>`~zv7 zcPlMYVnvEYK%-$2&Y?+gT#&0K-nRRGP|`mK-8Jd-m-%B{>#AduK!V#d6!Mh0dlCT~ zhkIWU3)kMDYkr$onKIS%%*(pSQ!cWit0wBjv15Z6X141-s@1ItDXH7G(}1G}Iuq*pE+0I8q!J3%!S79Q{4UiBM3+AtHj>K~cEBZqUTB9P=N( zqoxXXZ&AIw2vv0HhZ1H3eo{Si4G`kVu{IX;_lImg=)gSQ$B3rj-$)2Ph9D9UY;Z`w z5T5q;0H*A3p77#fmp2EzME%ZTBrf+0Rmp@bMGAxwQAT_;sFb;HQXyom7W1a$ahO2~ zZ6_pge<|+{SeHYj6dPNCd=vihK*~XiKrrk)w5cvBR=MKiF)vKild={Jtw{jf4aWVu z!VFT2td~hh0Av+p{h@hUM6>c_I+sg)wBRRj z-EQE<>!p4ns2WMfX|1#ykYsLHVbTJ(3-FZoG2?kT@7QhFw8<#|8!G1fgAQpm`jt(^ zNlK~Jp~YLnPw<=e5yz?0A{&D{0T@KUlK6*4#s+C^Wsmkf1SZ4_MW7 zH$Z8g19H+PX@xk0;;Cs*hEhlb18e;+9515Np#CGCIH>EZ1llJj)>_{9k)urM$;Q8B zA!#HbhZlc6{fck?(dW%)tg0rnF{))|9cc@3TT+!O-TPP=(Rz>2`u>k?bs7y#54SG% z^I}r05!fcg-{};&v8{T6NlgxMaxC}`Sq{H+DPq>KHa@Yi;m3QB+$Sd0rT_@@PW8`F zX}6PCZ7NZ9Ax<=@yZE-p);&4!>+vi8b8QX2RD`m^RO3i+otUv7hdlm~;N5MbH7<*F z38}CG9Z|E1DpC!t!mI~)chlaa>aLsBlT)TV2?rq{ka6|*ifVKiv*RR8xt|yt4EkNK zv`rhWh?h*X`IMPR+54$&#X~;$=a``B-ivh)q}rL;sd~c8O}HE?T5fiX`ovGdKgCs7 zs52~4=2>kMX>!5h50y9`vAuN?a$3?`611lQShdflf7(84A=GGJ!(qYq z=6bl-7PHPzBid7RuD;c^+1Z(Qn|Ek+Kqx*^4ljIuksVdk6+Jnr+h&zonNW3Lt(P8A z+B@LH)fY_biY*~dp`;e~Zdn)HR7bxYh;dSKn^%-WYmsSFa>+Jv^kgg4d;U?+NV#|s zx4Fkx&)#|;qCI1sozSf*Y!To$w5+@Mh1Knd9ckAZ9Ufg@v=?_uw|HdQ!_$oM9(t(t z5^GNB0ZyPcmLGW_DZts-6@E@{>lwzgd#N?5ND}j+Vc!%f!{#I;jzzuCym_tg;h#BS zz`5w-)|?u34auIx(w$GH>Z)^YON5|04%W)A>3d?(rDkG6WgZ!1g#&~nWFKQ_zMmbH+&)B!WN#k#XyeBTCfThJJ>o6FoS|AlO{kFSYZYVmgg5!;@;X zrk_&Uj8;}yrkQp{J|w%!xv(WFwTwZ2->*r}dFEHQ9z?6~#$&VqtTQw{MsUxxV5>?f&q95y|FaNIOCMLe#ay>Y3P?wS}Z`S9{$1h>SXwPpkKn zHrjh0Om?oLH9t&S^x2@x;WtW%@|)(yF)4nkJ1Jaxk6uCph)GgiXcCoX*5{sLnDKar z$R!<^C?~1u%@?gDlAx77o0l$co15|V{{VQs)2kBIC&9Ie9$WCNUOcrz>a43s6C&wA z$g#Kcdj0%fCoN zsZvdpw*j#A;Kh=gHz6}6z2)6R3#1%F**R%hl82rpNOSl_kAJLZ$>!utiMJUel4dVb z=~krF73OQMQxJyPaY_sa6SY8`8(t=+sm7Y%`KngL1e~KF=e?s&tkP*-2mLTo729bU z5m1`Y(cmlV~kUJe}QvK{op1Fw$zQS#dX2 zz{-dO1NQvlTT^uEMs3vmgYGir{Ge^JPj1lKUqA^hs#Mnf#zfWkOV0e>cKzh58)critm$ASBy^wEy$I$1rP0Q(; ziwP~tB}x|H9D$fxLYAfqm~t+{#*t6)SWmOr*ohn+XW<2|)wc=bxlCsd!T}NpetcP$UpLIY;Lv6E!y@!)+_Z10Q>GZ zvf7eXNZsBhtE?gAqFL1x-9rgidt0OILGYaz3_&9rqE`6{_l1$I3M0 ziFqxQZ%_%fuV8-tx#A-$6YL^cZL;E%u{I=qvH3-ns>Gm>T*{=ubc1%BNXWKN>-pL# zl?kR_o>Px8WT^6zF>8A99azINP!R$EyQED{c5TK$Wt-gCuJ*P2X3?7U26CxPm;^pn zf|~}yw&yXc*C(myk#<-*0*~TWFa2W->Wh-oZS0erThoI3Q){G)pFz%JvkL;mL^#M6 z$GKS4TC!o9YFVCfDnj=HlCIs&`^TR8qMBMNuS`>>R*lNOz)gpk;vMxbTk2X>MagQ5 z1tegUT#HynbEq|3#Y*aTxV7!?9d5yg&PXoNP`|euY0D^{a7wTCi2B6yQ!3or&zqEk zh>m%{Rg~NV2`SYT6Mk`M0DDE?8P2<6N=5SzBxfbsM#s_=qs`1QHdaZ&<_waHjF33@ zg&cDSW;%LlwJesKwaKvchVxFPX63xcILbp~YR&xwCZKJ!tDi#{v@t!--rFn>Cijjh zQ6V8>@UwEue+a+Q@gYyr&&?1@(UFXp!&QhKr?Z~%H3NK2McKNI@VHv482S>~_>y3gk zn~X*`7Q~UIy+oJ&e!W@TYZk=PhsBB+fwVrRN69bO{@fr3yWg$NSm5<_4s}|73RW)#s07u z`%9nzNeWJ-bpR#I+qp3@C#sSZ0$dijznUq3DL&3iEBv5ZFXcgM2er(2I|1f&Z<<85 zsN4qGfp2sDA#_#Rm^)TMxc(#BGgj(vvtV3S4o>KIFQ{e!xqR3QUogHKM%*j8e^MG! zLefFM9>xmvqCo{>GP3Qe*uZHN^{0tl3)Qvyk~#ksiR z5^|hSjp?|#^owNO1tZGM$s;!$LuJtvP%&^0dq6$IyO~s6x|73qJ?{e9d8;8UsQpAv zKTS%MPl0dd7{qf_RJ!0mPd`X_L6OYPIE8|?&*I66DM`Ri)H((E{P=~{ra}nZKO@=% z&_h>oC?okoP9Y%OM~M1O{njaWoLccF!Vp{Dk_I`7=GWL?h8J&dSWs5x7)_Q&3>D%v zgG9%*a`MztE=Q%JH-6UuOP4&rzgzJ^E-R6EYx9Y{)0iQTtXiWUu{1@ltOJq6JeR7z z&QiM%P+}Rm=8!z9umg@EX6H~v(n!8}jm1X4X)>DZ!c?HAZ;tA`8~nns2k#CAjzmGO zX*_58@E5!|f`HY4pCYmVjJ+MrT7#64lva!x$~i1rWZ4&~OOZbmymGhZ@FS@nw)sERKU>D*ROwi$NfxA}+gKPX2m-`= z`a~T^r0AwLB#|xx%DF)U(%)FN^kwc#@}6XFoY(cre2S>$f>7eT!9Zf&vJa$P>3XVh z63UW(mKsXDiU94fJ@d{#q*kaJZgy612V_v_QuctN0l4=k97VTPu*9^6#+Bi?qLJla z;lcj^n1(=rfl`Xh+>cL`2mb)d=$1k!!W;1pRHv+aaBqlwwz8kaeg`P-aPNu&XrPXQ%o~VnL~&Kq17O61B~;F$E$ilCqve{ zb*e>1o4v&}Q@tkMa%=!Ue^|si{n6f_Xzf_H=`t@FCmeIb@m&Q;&4&glqi{)CJ!w^N z%scg-Nv=@;0Lj{c=^14evGm`hk_iRO#L zP{=8ng#xRaT|?KrQE1bXRBF;3lyITOodqDCGkB&@%6zeLI=a!Gg|2Bw=V|Ggeo)Je zpT^y{40k3o8oNf5I<$DB!x&AI8VwJs5>?$O7}OO4hnYfBQ({VuyGC8qTHK$`EHe49 zPn2Ac4q?1a;wxixZAj{Kz%P1 zjbls7m35?%f2Xud=qbP3v)?7+DZ)>Do;_kyTj{BGUL_5$aLV^A4&Jd`M9zGnK@28A zJxRD)j^XQ!{jCwEm>YL;P;xjR-tla%$|bkRLI43r9;4Rdn2PX{=^$Sx%6(zan}HM% zIfbN4>>;$LVf9yNv&b^0*bV}000P3+gmmQ<*M-+Fdti$W55MIS&PgeR6p#QS!r*;l z6`{<*tnm;;)5}+kr@Y9>P52(M6hH&@+SLtcK-hW))B5%6Cm1>T_WJ^9OtxC zs=BRUse6sBo1bXby+$a+@fzzH_oqVJE_o7pJ>sCbp9RGR{G?_ks&&apiEX7h!jgpCsBy@EMKs)jCus{qbP|b_?%tA=gZGN_(aYMUX5fLF2qnl(hJE02V_aCipqvYf zc7g>Et)%7wvvk;=3>jz&PZ@y+tTGBpyvGBWaD<(>&GQYJ7dBAsz=uZ3MU~zNFcHK8 z;0EC~^@JvzZ)JvW?+Ut7M&zX1=?!1!&2e+-h+s*Agl@Z=8^EM)How*Zdx6j89E1M= zjBcQdA+(Ww-%LXCuKx33y}RBUp=l|xC)y6vgT&siSYT!{WrU<45P9Pe>RG~tjfU36 zz=(Dx&GGh!vd<}AYsCX`7PzS}-0H{)7r-Z;(aD`w@U7gO3&U2Fr;}t1+lc9e7St}h zk=Vs=m`@^Fbhe^)n>LlD?1TK)?;fG)Z(fm3(=5x;90q-MO04iXx!P@G+{ccjUny{8 z-_$FJz4Yd$@+!<-^`!yS+@zmawkIU*^pMD^IjQu6;d!k>`)jDxH6Gc=-7fC{SpiA8 zO}M`!);^s47wB3{ww3rv<8K!OACw_6No6j0s3OGv5+HnMC0afrjfJfVe$h%V;wz8RJPtvg?+{T;mYRH~ zW}1R8g()UFb4$>lV6^2u3O2rTeBKmpwue$q@r(eimnlE^fP*V4k|%&NlW5VZN078RQu z+ulBx5QmQ7*gp1#)3hpWL6tV-vv)iakshXx;`*H-;F3M3o2mF-pEx7{54aQOS4;l@ z!yiKF2LP{V{{Whom`POoi+R;4!<$~q^*oPQ&weF33!=UrpKW?WNzPK*eqPPZ%DUo` zbCezBLimrU{{ZD08f=2uLcrvIULup#--k*cQz+?_nL=F%UBX^MNX7j}ym~mkKbt0C za~of8N}LVwTzIh^g4_3>C};w$Q>L+~be^p(ID(~3wYz$dkfW6(+Q6kG``_B}plGdM zU8+hVi7nL1YiPJxNo*y1utm=9ac@jVs`ZCVG`~nfsT#jVNX|%4l8+G*2vUHs3Iu`Z zNxi=~#Wfeh&%*5OMARsAGcqP^)e>dqQqXNgpDxhe;s;@$ta_jF8eKpjtq((2{HG`2 z^;mq@_6ld##)cq*!t77y4&cAEePaXZrr=0F*_`SbfvAaxJm@2NWGMq#Rci(ILE`6Q-gl$3=7g>E2R zcDNSDv|w&@FXJz#)hW6&pAMB-i7yRFQ{s|cVPJr6l@wT>csCLCS50flt#>G=>1&sq zPxBxUM{&>A5Ph9#FqJVoB9@y-@;iHvdyM!4(5%n{lFTxO?E7$)3>Ik11 zdV|uAy-ZB4RgQ$#8wgUo0@W?i;oOW~*|bFHPMl6IVcA_*q+gkRnUJN(%!Ra2E-mP9 z$orp2`p?xyADod}HJJt-O9?4klHj3xNdO=GxQ{dHPJ`*QR)1Q&s-j$4${Q>q`>vv( z7i22q-rsR(_Vm9VT-W5=_a=Fn{vVSF{J`JJzpQbjwO*6b)Cx^Ko}M_-65(rkl`Tmb z;DSznK4DE@-B(aJP*sm&VIEzL13(L+fHx)2-#ZLCP|U?a@dY8L|sYqRc8^_`l0W!J*T zR6bwYeAle>4^DLwxT;L_y!^DuPW8+srygkL*V+IH=j~{7QU3rBB*@dAsxeeeT3HGT zLrqf&J8js7d9Uec`U2;{_f6bk>Qb4WW9EVJgD)kqyVTeVn49UR!tDo0G}NLhbCao; zRon633RgGDwU7Sc*W=?BD#rElB24@zBfp#;XUizN7la$?&ZDYyjg+uVc^XXU3K#KWIJTIF&72sVPmAe$b?rlANl|H!mW> z))#=irw7o-(M>!43>95EK3=KwQxj6|t9qM#ptUCWwegFKj%}EfSNLOS%{=<56BRm) zq{C!~zb3?M8cbx2ypTas;%dq*_QfK!V&;aAV4qDop#`Jkd(3IJl~CKPT-TS@Se z2_Kv|QoY3vdJ(c4a$Nz&oxvpD@F{Y2_W|6YYy-CuKc_SWe^elfJcx5|H(FC;_dngD zc9rn?)e5xl?AmsfdC8>$TWJM8a58gyUfu-~ciF!zqt4ysyCvXLQ><6b9i%lEimsrxVN2nz$ zN%E3GzkUzAVM=Xsq@m`>vcC_1yh%}1q$n)_5(UM?CQKNzIr7F15OFsbz9MzLq;Nk_ zo+LP{IN1Yf_uxdt-nG*+nt3x52w`)fK5ft0TyeJc<}+@U()A{}thc8qdSp&aDBZN7 z0_wrXBJt^-n*0~_W^FzdW1&|Lrs2t@Gj;L!LYHf1C7TWm2tVpR(l4neCq85CJi(~- zeBD*mATq7Jw24ER3wy=w&q)yZ9yp{ZSoPgTr1z|d59;(G)loY zSJ$ZD#&NrE69wpJRMDX-o&=&0-t}BMS7UQwlj(@|hd}z{FIk_IX1^@ctlcAcc!Bt= z4n@B&NboItrrP5}YG&wlYEz9)DbSXXwF@fbgy#Lv+ATVJtNm2z{Z%?{W?9y}H6%LH zRIAwf5N+QdSe~~;y0isopHKGXaON0Wy7v?7t8Mh>RmimTuEe-dlBUrya8KD^q&1^- z)1{LS8jCdcWu_d;w#*wFAFew`hdL*&z98z3HC59z`R6HtV7}pbMM+hL04mRJJ!8|o zDC*?~O0t?KQ)iu)nLAS2R?@OchbF{+vGLly2D3;=E&b=Yk6EGB(uKN~Eo;&lS*n>; z9cc}KR5uODI2>o!F-D%$^L;U>8eXMCO_y!*rN+WS(|iyQBOLojqubFMKUT`OP^DE~ zNC^eCH0BNcK^f!LDq7p&(w$pg+Q62bVJo^3JlJp~=Zo?G05Rv|)h`Q>@%zs~@E^>g zRB0Vama0<2OItG6Nd&g)Kv(JYv`#li(b}3?S-Op7y~#igms}YZ9Om3aTK*q;cTbZt z>zbTorCWe*VAv6U#`ymLcyA@smnG)XDRa&ck197id{|r4u!b#&y`xlB@s&pPp)D_T zUr)BnW>wUs2wnF!k;u9jp)%$V?0T|zD8 zQ%vO4a&Z5(;0Xr|bmo7spx`KeU?P!R|&y#C4%M56u)p?$3*BxW({X|SXN7H}w zve!zOWP;-Eaph3NVRKs1iK^3&>gv1l&Vjf#SOfD0$J9rvwT(a}rLInf%W7T8M$nQo z&HH_$E7d&`(|te=Oialoxr89ya?1!e1M}}5-i`G5+m)}Mtn+mzJEb#N_8dy)lGfTC z;)#h(Sj#1_Hzmiw-<$#ox_{;_b5%_fHzuj2&9g8U<_>(qRGj)7;9s;*74T`Q>Xi={ zPch(2EkLDiz7FhXpQKr;y%CtunsQoNq#r9`Ax@OMiwxU6^KQ}AmmV7oxjx>rjWRXu z@Xx=kLeq7|gVXb7e@;AF7SyDSXVdK-b*<0Q z*D~WXa*Rqef(UT53Wh&BK_08oY5H8$DHEaDgs#pKNdR9S{6KvgWM4IzOnI9Vc|a4} zT2rgft*_d%HknI}ll!*?hqu?5vC4JISqz8fCm6b%+M(iswEqC=JSm|%`7ONvnhf(IY^jvYtBSe_PkVfczDovxtsgAU-;Ynza0)B*MH99<` z#d>Sx#M0Pd4SAev1giXdN1FO?2zySo)o*G%{Uz?3K8fVGu$2WT@mz!SJmV45jv>YQ z9&C^>2O=U`k)_GYB1TGWPZ(P)(Yh!q2QNVQj`<_0H5X~m60!r(~os?6RU)m zk>Jb(tPjA0a&mKP{UH}75iEq22T-K&IrQctD$P{%>8(LU2!Qp0L_5rq%e5=Lj|lfwR$xHi5y{cm_})-Ii;TwXbRuLzpN16(D*}W6(A|d z60QQNLZGv2sW>0=668vy0WD5ja!2mT3jH_u|>3Q{75N){n z+qZZQZ<~r#V>Ry*tI(Y*QuW4ELP_@j{)wLNzsS2^bKa^Y)%94Ow zR^;CoJe%Y6iH56^?b25$sbn3S6<)W=`uhsRvNotv|Hb0vg;nwk>FN zF8x_9{xv8Z4X2;X#qBk@N_!qW)QfL6KND{?xDjsH#0XxNs;x6}k|C^L!?o}Fd&b@g z{{VQ6;j4=sN>ej)a#nI?QP7Rp^Wy&i-eN@7+GzuGN+CkyYU~Ct&S3Sa_GPMpj|n~% z$VfTOxe&)xvI|YBMI@}Y70rP#cW@@!1^UQ}hk|AmGTn&)*k6Hfq(RjuYO}Myxp84B zxVT6laciGgl@y8hUk(XX1f-4Rs`!IfW&To6!lbkVisI(iwTHK?Q9u)%ZgOjnc?&Aj z67ugVp!k?t)JDRbryt+v6g@*ln3oS!)wwoRye+2V9{lkZxv6T|bTps;00=FW5Vcql ze(_Az^IEAdyD3w2p`h8gXkg=?);ci;FT`D{J2oXhS!-%^w5r)se+WB~zirRcykR=3 zytz8Z&$NZh0*~Fcq}eJt;GSc9o}ft9q=Jh(${X@4XeT^gFix!Lx~8Cb)1< zB?mE;7Gn6G@vZVSQYQC8T$JH0F*65FKRv=j6f zi*p(s$(CGFS}9sZz}z^5#*%rD-mRsij&^|?X_&Z`Q!MT5agGUv62WW$K_L1IgBk{x z>6K=-znMiOzKi2^fg(4Ki+nEVO-S1_wXHegCf;_`q@3T<*MqW!o+O`8snEIQ-6y2y zH8n*NQtUXOPC`&mG3Y%D@F7ptG!#`T702Zkw2L7!g?G3I`Nyn!7f*CUq#7NxJ0V4t zWoW&Mm;{nAb8LTn!{ya9-61AQQ&6EGn+A#%VQ>%na|l|vQD!Y>$ai!;Q_j_YgQ{+b z24Y&eiIKFFc#ITw{{ZTW?59oTY4hu}t8XkD76MJl7rc6_Rp=*m1w9k;Q=8PVt*Bdo zgK!7hGfJ;VYI3t?ZE{LsWkScrN``)r*w`@hM|DuQb1u{p4(Y~;`Av)#$RSN;{p}St z=aPWyw1&x2{{Zd~P2;C`|POS9PPHFjtBuVWS+_VdG z`C8D&&DW$M2wo;_DMhN+_Y;&ceH&NHuS%lc`$e{N*YmZ-_~>RclpQ`ihkMV4$n;sD5!abpnKg& zx<@2f`u6nX#0wcwRm6{*m~H0N)D zLtyy|h14zWj^fth8Kk;`q&ARuTv+EGkt?`nn3e-8*tW5M<%sI^jXrU(;#>((#e`g5 zl3_?8l-$^yp3xCg((;pyAC^8E!1e7O8a?wm8BesPJ3^Kcs#$jG0_h;cVqY@KwiW9Z zD(w!XO>ISYT6Ui@N3>QPWkp9P?-o;WOi*^DKsAz6nq^k1HB`&()H{>4htJ8AR3I&o8ZV1d(sWThEY_y=HfC=U%<(W}Z zO4YX+H;I)q6Jk1Mp4#2qrvcn>PY~u_is4@L0rl)*#XghcChA|@W+i3m>tH8pcY)h< zCh8EU*E=Lt|yI10G?Ln^%vr1YARD)=NH z!T^A*3|0nIC)z`4J|X>L8gz!&Z$O7M8CMlnWbr7zEEL z7f$1Aav_J!ts?5<(gibH`(7~QL&TPDqH}4ESa0`)+%BhpPpQI)MS=d3hyhu8jW4&Hy9IsGj0Sfg$og6ONbdj~ zQV;-udxTjLV{)7yv5ra4^@0aN#z^(G;6lmo-_|!~Zldih18{r(aOzz~*oJ7ZBL1Qs zGC@z5F})#=SyjLWA4@uvi;gXf#A-P5lWx%AwYWuz;v)bR!$G3 zVzgaC^sA{@R&SeHEcC5hpi7G&5}a`Y_@fvK;VI{oFGDYglXx1ybM)EYtW1ruvqYf?k0 z2Gan+KEAu@d5Tjr_4(b(bOZ9PHciK=AXtA`t!jN+)A{Lnnb~R24PFV^u_SNCIsX7? zvM?viD9AP!RjaWwZm))(np-WCy(e%9xfuhK3G}(gQ8e0IVXq>N?-lkkhQ4(E&Pw6hO+Z4>4%#SIkm)cft>OG05R5Edd_@cBlA5mqI!)brHURz%R%6f zP?ehycY0z2t)CH^UYVnJ&(xOW`?o1=rvbkli`-iA=G{ltsr0Q*$v%Xs2I*c8Z%aiJ zSM>s`sGs?&tl@Cq$SejwDCQVO{l;{*V(V2N>#nv`H7!L>%x_p12`+X`&M$v>qs~`T zF+OJy*-Gv*Jz=dy^vpOy)Bq%(tTBA}V{#HLYx5TjM^Za%$?0ubI@%Zj|3;#rr@{%{KhFO2?Rc;x&o55sgZ#bcCxUahP{NCFP{0StRG$ z(FHbKdCjR2Ev8G2ttBhq-~uB9QOM$5>2l4>*<~tONVv33OBN88+))E|4V4vN+H(z% zq$u%|*h7gLqpx{O+j01z_j5ue3g&8hVzem_H&K;x#UjN@1JWI84yQFXf{B-sO}_}m zvCd;R8ky;7a@rJB0l~j`gL-~yVc!vN3zL{qr@5#VAj|q@(^h<;qH;;O0OBPm^ci<% zEbGW@BwZ>}t$cs(GpcT=nWYYR7#1F|;-l2(_UvWyox>-;1{gW$#5l=o6IOFj(51A(R_b|ezsU=yK`L7)*D;%XmKi%SoL7r7v@n7< zLR4-+;skC73gQ-ZC_;85oA)<_+eOF#{h;44QHo3RWP{IWke0qKd*d+DU7&?rfqURX z*;1f#EHA_`Fc~dIKfJS-u}QowQDLtaYf8s!!$~Qnpl~b!{NYK5mg0db0_6U2P)8FR zs1ofdYOp5WgVr=&m}qMDpnN$?l6ByPBofsyw159ZiyR$h>_5{{Rea3#6)( zYot~wEzKF3nST^+AwfITE-lTnOmyHl!7SYmY00T#vg_NbR-r>maZ@dshSn^h;+><^UoCS9UN7oSK zRb`iDm4dH8d-_Fna#M<%19?{8#7cO~NEu0X8r-maPDviWXwXRoRGD;yDXU;}h$);Q z8(Vn*dK20p=cXG@-0nyQ#XQ;~oYZVEyEgGqNxF}rh63YB?MbC5+OD3t3cCT;>}&uR z5tP(E8}#g^rbPWRQ63+QzRsi+-#9qtHEIoMna0C&3Qr&l;vUs0%3C|-8bZ^1;a{v< z7NagM0pde0pB8RdOs=cZs_gYi6$dJfiC`1Grq%EN0Mij&PUt-oTj^<NfHa4itJl7#Cr3Y(Kzm{M+{f~#?8qG~d31aVPL3}AZCBXr+K zbtmCr$(l`mqw_TX0Gd+d=KL~HmWkSwm3c+{zpr@NbhlrotIsL6C0cPP0_nGGT#V)$ zbsAAUQq!}V2T?L5CFa}k^0T=l8-fVWYw{yE(fSIp(1*oVwNX`KmoK?OX5k7*zT!$j zB;xVv9h#xPB?k8QoGRHg#3BMz`uk01QK8LIP~9ms+8H`Vn9sS?e!9=QoNCxA%?4R)f$Cu zfXux{MFC0O;k-yz>;71ZtrxFa&V@eJI(*8_vyc}q()TAIoZiG|+98pvG~H^NidMVQ z>tV%!ovm;3jAO_EzvUXYMmilV+=Fw~8Dzec8%r%ily1I3Kl2B{)8SLRaT&E4o`QCN z-edhY)S0@pt7=+&a^_M(2~uz{q1gLGx9v?!yXUByVQ)H|r6_EIPq01Waa}fgMGHj= zhc1GnxG%&P2mWKFsl7=<;k3wxHr%CQX*NEwz}^-42k$PemyPG2p)!f9YFhVIGMT36 zGg4FX=>bW3gSElwa85vscUb9;xYw07%K1qCGA9?@(WlMhG_-X=wSoNxW7#ZQP{pzGh6osre; ze#)sbv*SuPD7Kb-ox+bM{{Yf4dN!=3(<(@*YPlzt(h_#9_DCwY>`o6oyVq_7REo&-^3wk5Rf*-j~y&QbMsQE|$;$DoV&H#_i(V zU%Y*%!~Q++q{HU&o~O?1ejlzmzb@tX{{R&}MD>`h`h0?UdROd@`kA~R(Hx-Lx z5vg?7O?1{msHf^OlQYA>Qc@h5LJ|qLn&1nO+nC5?D(*6N6kR>`;xBzTo0Oe(uiCPX z33a>>UPHuf7ahCBvK*mK(^5>TN1K_g&?Yoik*S%QAzLeWU2V)w0LlRFqiccsM!V7; zsc8Ayy9~UkR$W^p4WtB>Z6086lgwQ{7wg{*)SU|L8(wJ1X||?PTYbs3mwaL7=NP!{ z8*Yv17s3T{n$mQqOQaOjt?xn*w+6tg5G+lH+TVEjO@G8Oqqa8;Yt#?(J2bjYMnw)4 zN64Okl%TG-y2PPolUtB|lrwa;(zmU9eQ1LaC;w>`D)Cx~!6pR}W>lnAh4@0zWxT;KQ+GQ~BZJp1S z)=DN*WThuzK2i#8kGybcbK*HiVSnG8^s?Z{F&hJS>-{H_HP^$fBE2l+-ksG_iw_W{ z(BsJ@9o$?FeWHSnmsO>za{5}QP-TQE=@;#9(+;hz*{X(^(i8I3 z`Bm8}NU8s|exps8E=s8?SyBKgwny60^_ZJb$;Tpi;NTo?=k470 zzrm)E>9Pt=O*%^-u!vNXDT!KIH`rbB9nS4a`rjw;vqUzV3r-qb&ex}=5+AVAOZ|ZT) zBiewWwu9a&8XnviA0trl8J0SN@y+UFca zik+t@k_{K>FSe8{?(ml7fWC1aZ1`lJ)cS^%EmeO|35hb;v%f45Tsw{N+mA~|*E=;= zmu)F+d(muLw`lm?RtLeCXle9%Y`C=u8oz0s{7U>1^!KmR3~Gky?Mqc;NC;lwpA`w+ zRWC4T37N9%Kj3Qw3N6Ml58wKnU8cDjbdHE=$hJsFbY7w zw-KFn`=<1cqfnl8sk1LsQ!5P>D(Q7aAOVagfIjilqxhDuPe@zK{G|0C4$^8He&00m z29@g_Z%i^YT&*|4ag_kl(2dM23}0{}TDL9AfzQ_K#C&4x82-64PpZGKxY+{j+<3eF^^n zc=fe@2*bP{PptDWhB-Vc@~@>$7EKM(me`SPmXZGe_V5S#2#}hs)7LL*lI(60n-P;0 z$@*1xMNO?MGbtH1u_?z98&jw|G{?x!f|UhaC-{H|>HXS1c&`3T_lDFRdPyq%E|%ry zRWuy~gl`1i-j?Db*HM?Fwq@j~t_7^zFT*zPZa9w8^xCCTeKLkrl%NFog;o~0KGA({ zflj7N6;%LP#%-IxVlj^~g8WDFiCUoRIlq@%YLZq>&y;{hJ?{^vYDlR|1{`1nT=_}A z*ZO+G^%+`98Yp5_2`93BfQW_)q+alxWRT!DUAy)+?e>WT2U`ZHdYdnY@iAH18-p$HL~^mMx9bZNx3N&1fNs&gGyMWndIxJpz&1RgJOej-(hAzI76I#!(6gU8rLY|gK``I{aL zdp6YY_Ne$8m8e$PtJ7MUWeHGIjTBf~_prKsqbKU$!evgKT=A%>o!Fofr8h2A4S>NR zIFF`PjX6nqpO+yGyKlwV5)F?&v72gcpIWS^90_%|J0Uz^XWsGZVEDdk0lE`|H^VUy z&FemQH_&ZiNe(J%jW&evx1O-y#!^7B2l`qjoYT4inmclA(p_SEa0T|%kiJj+eo^eL zQ_{LUUR&fTpfXz^xXQ-s;QQh-YVX2)gq1~8GDX)A0Xs^GBLLu)bN7!`J}fedV^hq3 zhj>QobjY;)>%Bf@H9w#6le8B6Tqp~Df#>s$D@uGv{?w6FjFKNxu$8SX6R!}C|=biEHeWZTp)%qc3|vh25%dtV2%42K4x z3ptLtGik`!r=BOLbVYWA-5sf!)i^(Qym-mmi=HE^JwvC|L6f1nzYt&yX5UWHQ>Qat zn{8C7Id)5S*|{qLAvxd?c$3q*IZaoYL#s$@Wt419mFbVS;x)Tm2zvZ96QLw=h$+Y!Fi6 zHn|lW$-7jk1T7LUR4( zZndaBQftCyp0VN^c%y;OFh?u$b3P2a&kq$z^KDqYy+1ggsr2#r^bGp5m2=rB#UJr(ETNvN>ZIrSYlFTJ5oi-Ug7kG z=4ld41pKV%D;e4k1fOWmG{&jablp$;Ca%yz9d#*7sTsY+xZ|F07xk$=I$IBwI*=|( zyW_R(+lUT~hUUg`z59q-cAcutDN?Ni#m|vIE7bl__HvqdouH9%#&Pr!1~nq82@@{KsHH~f8*p*`{!s(D*wB{>6>Xzws$wUQmaecfVQeJ- z0Dsma9n;h7JW`heQ^~l;Ki&p?qIN=Yxw)hi%W_SVy4UiY-DT_8SxLCO2knz7KjF?i2siR^ zarV8Tm1NVW72>c`Qb(5R{WA}22<8Aq9lg|jEmxL$S*6V@a5w=Y9K$K8d3UCkWE>mG zJ3%-B?91dW)sJvo9@`gDh-$BeL@ zsKQ0?KHqrj$Db0OIGoI;sLwcR{)kYj60EU5EZfLRKXz8TD*pgozR^w8zY8vEbdf|) zfP;jSb6^js9)dkJS?Qa;8*5Q<)dEx!@-R5Zzt`FsqLomkpv$!_ux_^Wr;lqGy6R{i zZgZ{?y6Sm~oAAv3ou;i0(-!ecij<_^cLMepzXS7#YQIgUB<2fj(H;ssA@)=at@Mvt zPp|+4N~uaWD@v?>_=G03l@_@u6H%upa)8|71pfd}pzju4Q40~Y)NN*4&<>JHOUa7l z)RWSa2I&ZK9$OJ|ay|b5NZ2K)a`dK@nOb8>Qj=}SxaYs9hZr8qFHs~01a z?HKP+^v;>9)dbYJa#i#y=@tWV_r7oWMzLPiEKIYB#?V4=77ea`(LmMu_fOLpBBxAX z?okO^Rd7ytAVXkdQ=y0i$a;NGRLDpKOjH?kAlkvp;C&%>bw7lk`h=G^_b1DEqgS-6`IXpfP-R<~u6IaXI#)@C=gG+J<#4 zsWOttONBfoKw{il@tJCBon~d{0;bT10sI^uIE6J$O1&!E^AodncHTsy*yprYDDt%} zQ8WtY6sNa~n}K}$!&y_rF7yGAPRME(Y6=sQ>slOEcBhf`fqP0)q!3(n@_-KDmAEdG z?TFAT8fK$Qr*18+O0Z4Ppl#`R&b1vLsPn5YsY%)op8dTo3cysu%q*IX>NUCwWs@u6 zmmFKq3 z{{XB^f_a#*97;iar^*INxxaW`MJ@QG%pIfJEzfkGY1xksSd^@bqj1HdQ%dwodZjv% zQF%#eD+OdE0c)H802kI1o91G|qqI#_jd!A$F)ztSpTXe5IRF$1cL%b1T-Ya$bG_F@DLP*F0*^3=l zr?nblRQf?$0J=&^itO7n>K+Xr|yG-BGNiTfzqe+8(!8mRn&Z!U-N@Xp5cG zwTTb=@@pv{#FUc_%WgJ;7j*qW8I3^m4&c&xsl_%6vhM&%_lJ^o_3r)Z!NB}P#bFap zAzKvY4qpI*_D{NvQe0cr9rk}ngq zy>PaI7N-ffCd2*WZHBpw9Y~sNq?EFfmt0{gAbu|?hIOh`oa<{!rCS@aE|HPn^@s{q zy^(w+Dwr3)wfjYmn^=>1l%)=&k76;HojC3WK;TMsS4Bysv;P1@f)5xGNYoltwkA)6 z!2{C*H+h*_GxB+H1y&i|#(h0vyHwKBQ!DZm-}#F3{b7~(<|Csa;7l%Zi2ErjN>4D+ zw%lmk`o_6Z(ILdyrmvh}h_2N%6X{+4Sc?Ng!-63FAc!rr+R7cFyQHL854eS# z2~U@pNx+hus~>nB%mtXy)Fi6spQJOIWd`JeJ>o)Po;I69S6U|HpQHiI)gs+OLaq8j zN9CsEb(h+VE7%6|x?YWbCZaiWXOV_}LfhizZeRB&oN=F^z8KcQ%Y*DumYvl`RQZZ>IUw9dY|GBe*n?yA<{!$=ElUbZ zhjH%*b(uC7+}P;as&2IE0@b-FJ3%DcE)^MeWvO2>?BWoMSb}fB^|WD>T}u5mDN8Su zk#cMSH}#3xy+=J%V#}LWz;ZWWeW8O7K^2#d<+fv4NmKTwlCk0fLYJKWR=h*jbuwl` zo$=JA@}*qj@e@j&r+Gup607p4Z(ey%s?xuLz*_l&w^C(DJw_ExO0~=s_@|!N;uuX< zLxDF}n%KC7CaCHxE@^VhvPMY+W-D{kibLB-wT=KB2x36$I0W@3pPWkD-L*F(lM&9$ zI;8}aU>{S&MH-rr;o75&U$iOnsy5$y0m-x|EgUS83vDS03b5{P4W``Pti;uCsm_egMa-qF6WZ9TzxDZb%*-!?F{I%&pE=1sPrSY+$lhbQh}S$RW}IPV11 zYL?n{SWOQN(l5pb(j?{C+S-(ba4r<16q#y*lD{LCK7d61KTx5$GKB)A0f7v!Cd6m+r1_VK$cm#*>$oK zT{iJlMGeoyVKQXXjaMt;=1_yu;EW=W4~okW@$p*2H3bvuzS~kE<#)SNth? zrxJt8Le76LtXpZ0&gxQyf?QDs;>W)+m`YAv^njsYadE_G9X{6*+Hz?QJ#~Tw(f}g> zz*Yd<%%t@k>rEX}qaiOm&4P!QF-x77d855axQzo>^%;uuKQ5M3Gv&a(+i?`SoZ@^k zr!Qblfr`GyPWJa~KgcYAMgW@KH_E zo7loLGU#nZ0Al=F9{$)_CPOx?ga(vQKhj5-OmgV;Po$7Iu%cCJ>NrqAw0! zZ7VszhWk_&ZP@xoJV8W6+&4BSJ?{l6H@QeY@GqYcSm41Bl0~uzfyG7;-6ix6&Q4E|M?Lv>BOYC=N}zi7I@E-*+1$93JpM zf;MWNm8QU6<1m|yrL(gh_KDQW1t)L-dApv_)@qS-oB~PoF#BK}%KX{_PnYiqEo7$1 z^vJwQyF;3B(u6dlZfpq<-hPtgvI0sij6%_xsWP)| zw>Iqtxqz4mAe;>Tkn&6toc?jr@(E|mq=W4W4Z{gWFNkl;+#SVIu#h&3Vh)!S;>G^} zq$jgz+Hd!RHg9AE$t-=TJIYW=3LJzySm; zA#1uwvADp*03JZ$zkI0Dl*)?SORbAs_xnfC&+z){?K7oxQYw{Y1g%J0jfJPpw5Z!B z-rc#2TMSK7MO5Wpc%O4W&H7reNM%&_n?=xsr3gtJ4k99QY)vP_Wn%aK`^H1?)lfY~ z=~^{qImM`9XlrQ5ARgYEzeuyrRo|6(Ch9>4fyj>wVN*xB>u*!kx2Cl9HQlIjSr!@M zEP8)aDaOEc7*6cOU2yoV9|80PsN@njhE^cO zBZ$^orBJ3k7MYNtadHXIr+BmJ{aWFFe>DfG7G)!#Pv`ofg@g)F>M?$tKow!)i_$|%(>MB;DzwJ2?| zHu}VSI?7s2LBo54<_Z9RTtEuMOw6*))V_{WwPd2EX-s%3Bow&GN)&<>e<`*-BhP;j zojlcS>CvaC(`s$7=w@YVQ7QpRH{gIUPHbb*T4$=1xyDg0xsVlZHx43ducP$Vr9x^= zga-%&l6^jgIDm>?ykf&3!f?nZMO z-78aSiYlCHacwx&?%IQdl0QFa)@mASPRlmsHnAv@+or{Bn_kBEz9NUNdIbBbPNC3M zgfy_P-ZwI(EhJo<=JC~+R+_w)^OFXZ^oRoU^#1@d&89Uxy+U0NIOzyj1xM@kFl|vw zq)f7AoSIQ>e~2Z0uwuPLtI{cqHAU1;w26eICD0XQliJt%!dk^n$w)k;FLb#cRiNA@ zIOaI(&*d|@e=W3)uj#5YO8KdIId>UCK}kzO_r7=$d(rjTG*jA4yw1dIw%g=q+B}1; z`r*|26=k^{Gf$YRGO|$WrRDeRPIH1w&CWtZ}yKnWu7Ny{i51mW_5*WhRc%c3IJb& zf9nV*sWl0);FPCv!5(fvF;$^er=6Tai+1kFCrOmeF+LDzNf=NH~8)^>X zjE>)yF7~)}3KH%-611Dz#6&#ypsS*&ii%c}(FXo=lWcd1mS?m^rEP7@OtMYxoyr*P z>lF=uq4hfy$7eK}gXshoT4Y^Zjv%6;Jbv(&VfniGN4oc?x-+XZWSX1)6v{si#Gr+! z1ISuPJfHWE3H)<>CDZ7dS96*QMs`TJd})O+*;_aSl-kzLa3j(T(|XHwmCXqWpl6$^O%|aE zV@KT267_H3Vna*l$z5wiedIMX*N@?qCd~x|ovIeN{8)-#NqRG^>e7>`p#bEwM$V~z zYZGhWXYXjbbr<4WUo~EvrPS+RJtStFA1oP4LQ}ZiDzNVxH^WY#r)n1v)}NyW1m+$= zPzkXj#^>q>t|Ra9>a}TspCW_p{_#FTKA#pQR7{u8H~l-6?}o32`n>H$aMDR=>!Jm z3W9BWi}GVgp;H~CG$*OjZcU-Zn}*Yri(5B8sE?KSkHp(MRS%@~v|0j>xUnbP&oyf* ze!ZWlDU&Gc!Ix9D=G-^6ugUzPYffn$ZrwCYGfNHypEE0XDN4z`jr)J3dS$suCYn^t zofWlt4(6~*hjHz}{Njx>)J}>}H5%nBlv%1&;*>5QPQGopNKvXX(@0VX2vG`9z48bq`2LYqUrMMllL>Z1!F5dmbUAea+$lM|#k=~L zY&!N<^$~OEl#VFOg}$9>>OCyIElyxb=J*yE{G&q9-E4LFHl*e2>2aBa z4-KH=NnS28Gk;j(&!o$j%)|AaxU*rzyAaSGf_k-cQf@Lr9c|;nM<)Hah)Ih5E}ZEz zvW&XIg_MU8y56}zSfpqQw4B1q9a`FO6SUZrlix9Lp3std)?E_MK0ze@^$X`bpG-%X zaQH@voueu+x{>;tQ$p2CRr)0=Rn^O;&a{?5BlP!+Hj|-9)Mb$D{GgX3C=H}19)>D2 zy$949c6n7Q6<@?b0VNmW*Y^8GYfx&gr06+^9;~WmscFy|OvJ-_Q zF6TY)V9m-`9oqZur*JqH7ssSKa(+}w?3j25cKN}z@AQQ(!}CT0$CSn>b#Ki0DVf~6 z@TFej@OjB(&$MM#C2J&&$QU0_P9h$451EkkvXqr4fqqBaL&|+<1P0zx)3o`Ass8{- zW)?V#%mExs^IlM^bjp#KmZvtR$nvjtNe6@9yiqkSy{$?ia%{?>1Su&>T5zh^&9ia; z05Q30Ik_s7w}mp0Q*mHO^o(a&bjF`hsV;CyEf#PPwiZD)**G)In$~W(`lM|ZD>-`LW@ZkKU)hQp~tik^m3Uu zHtUqx-wood?|7Siw;La%PifAJR%F~$-?bWg?pn?~pg`|ykED0DV3_z}JkyPzCz(nA z0Ds?kElbc6H0j`J)djc|Ky)mG-#)-Z{GNsR8j5F;I%l+Hq5D zl%W<0ON5(x=jje**{M%Huy%x|$w_mQ91WP3yPd-rQOJ$zRLO*ecoRy$iE;be3*Ul2 zzR?p^W>Tjrxk=hsQi67=(O{(Cz5AHC)AX9A-Al91BWSq^Nh2QTn0+y&>GJJ_p~jX- z2V$Kdl0R6M^&QI~cJ6t0yH3_!GptO`PSaB5HE#HgJcaHc5FP{r@G#aU1h3- ztl(3NAAk}77thu;$^9cQQ}Jb|X{mXI{w9_%O~1d&Gb-=H<8pO|>N;)2$S{Hx^2u6{ z9FJQ^K-FT*0B#SwgJ8*s?p}TW0K~K+y*lDTW%jKg+=2*(RmLj1g|{VXhzWFqac({D zXqnO4ZkbAuS|s`%{fl~q1y(iZc zmW5hHr=N8S1xP^$?|b&fA@-i7YWAe1=c?5AM)SGnROjH&dz|sx-Zl!3wUL)`P0P$B zNCQJFGQ(rZ~9mj3_< z&QGP_)0G)XLfW5cu$5eFSmXY4+AdO>X{p&C5|vE|X5zsqJlm7&5OqBpB)1E*uBimz z6$@Cx?n2(s(Ibdz9Ni{uLG(%`AvfHng{*iH39PEKa!xK?#EptZTvCn?=h`gNh-ONa z^0FyOC0I}wyi~P=F3vWRgm8;z&;!IF8?scQ0vF9FwHMbnG^HS@SlucL#~kzP29;AR zGr7r?s@`3@@!HT@jWThf;*`>q-Nm+oZT;dPCtr0*45doBO^)PxTKtdiF?B=KhV#+q znK^Orn_O8%%qHhKip-{>5>5i)a2?iIQ0F+k;@w8o z8h))R8+O}*MYoRj1`flF-=t8^(JVc&QpHu7W%o&PYl*0c2>gC1__Ji6Q(OP<4>v-TdVYvj`kJQBLPD;4Dt@gkp z%gwpw_s@6%nQTTNvAG^})d@~1ZZz5s)3B`^k4%jHqCTslq#r_?M6+N4l!PaP?`W1Y zEv+G-h3&}%ch6!WCc>FtB z%rcnLG}=Rc12RZRHnAy5zt%4ARjK|LgX3;+5>!*cA6xw*4!1bVg-T{+Dgb39@#%P zC}5!oMYk&9MBCOft#zp6Ce)zIn~>V9w!&}@Zfs-I_1=}r)G3K+Y@`IF-~uiA3;nYg z_fUEVqve$3!rJh6ICm`%Ecvs3PZzv*V$F`~bCtMkWflejHkmoS%7s0!1MshTZJDS>;TN+nzlLG2WG*-cl6BeVCW0E4 z7WF5eY{jcaJwHsDNti>eET~@W?n(Rhf*cbfY|EuydG=|6v9-l00;H{7{-0Q;)~Gd2 zLZT&+uo23!?f$WOb466O42REC>8?1n4=ag5IR5~6h(}5FqqANWMq$QwoNo$G*y1K% zj^m5;GLC*7>h*ADW>(ut-DIh^5O4k39npRsYE<{a(M9p?f8LUdSa*%@rQJ2A%hObf zq{ioxp|p6aDOb}rx6(9P4wjc{P{~T91e0}?wsU^N&|}g$pE@U9!lB&Pq{C<(8Fa~p zCTOje^~imM{~Fpxj8XFnV6Sb1tCBJ01D(7&$XR7 zdU9uba(7pz?{gYPm#rqD{{Z1hQQd1Fygk-BE|sbzwv+(o(Y0UzdHO@6?KEQLLZC42 zW0G2_ZnL$~Vw>O|B0`s{nQ>xSzyble1b@UWInxIv9dcEqfKYItuKxIl*R*9uQI%OF zuJ#LV{{Zb4B?zG=Ux8v-WhJQ9L|I`c2FbKW*Lq7zs=OSNDsLlp%l`npSLG&kB^qF* zz&tQ*o_?`or0Z)qP#2IhasL1@y!iTrqBymc8t+Lfvh(Vfp~|V|$8{(tKXVYZO(Uu3 zw-fZmpdR3YKS9vYP5Ts!0p1er@k*5cC65vdaBBtm6d6i3UFIU8MZq{aZ%BAN@K(a5};H< zcBtOplvx=ZNroWuBdLQYG}v@IV{fcCO56!og7D*rZn{-XGQr?UP3%B9hK@Th!LcM; zk$7#fgDsIJ>1!zvb4QYws<@HA&3-~MVfmxfRxFedeMsUVbiT8foM|q+un5YoIm!2n zgtdBIb|Y`$$R3}ZayOL9QDNM!sj7^##6HEqHtiA&OVQ^LK5Tim@I{B_B1kzeJNxHa z9^iq`5yqV+@^-e)z&RjV6r1&!jlGMNN|utOO)MpgSdQ2K0CDx|bSzwdL`ge<> z=w*|*DDC8ZVf>vcTw%n5qroE=^@i~re8gR=yNQxdbk=g@hVOHG4*vkGL(k|Lq^$;%U4a+G*KwS49@f0i%QA-deVDk>NNma4LBocd! z5f}QePh4>-3^q4f_O?HyRjRsvW<}E5jo7F8pn?ow;K+i~R=?Rw3{G?;Jj7^G-+>2C+2WdtAkX2I2HVEw#3J6NJsW9eQmL3;M004SgFsir( z)UPI#;UdWA+7604m?bvP7mE_4rGjpRruOaY1x%?@#gGqpBnU1-B8;MtMa&ARFCY~Z z5Isy;rR3U9NCXkwLClQ1%Gw*YIkq5hd4L`zLCG=!BwF8iLCHcDbc1-b&e0KdC=B+7 zE>Q{;N#@<4l@QpFqE%SE{b6RM)Nlvq4;3tw5;qcU>E0A&2}-VZ@xc%Xj4tBz$t9Hw zqZh%6R7nz`TNyCYPGtpX3c$YtCaJG7qh%DIKty9ud5ctJ^&R4k%f2|o5vCqOhm-&h zsEPjo7Fm8(0b%@J@ZM%!l_&%OpVBu`4anwDL!o3}2Ns9Mwi-cZ{PJP6#JOxKV1b_T z6+bvovtn+0gAH{E=ZP!(anP$a?X7G96Iyxa=cZ5zzHCV`N0fJb$Xb*+#m6yv(GRp8 zLdt*_IX$2o2ICbITBmg4MysUUaVRB9VR^Y3&UyBaK5Hs$#U8Nqqo9us)h71zCOsLY z>(XhEQYPn=+d(!;5^#RGjEk2z^(zzW0Dz>KDE(oWpMyowoYg0ZL!+n_e^msyk|7L195wgS#}Pd4jBM$E-3# zg&EpDu&Pv5$miY#P0)@Tn{*6Y9D-rVo+}|PbLt_8M(ia1aB<>pxg26O39dcyP*b%k zymA0o+L3Qt!(|}0prCmiLE2i!CkF>GE~ffJtps5_dS8fa@;N)Za|;EelYjj}ZX~H( z4||B$a~qAf1o932U{Zpv2Ry=xYUaf~yYmV#z-(NSePGd;TtqOdd!E7tnRiQ;DZt_+ zCFPQ#y+i*1P~oXo%7Th*cp!SfFVZVamRojO({M&F5~*M*KY!L6wl*XJ6UHwOTi&6< zNCO0O4kjSf742mKqu7413?Wkvcw}7W!u-LWWGOecMeKdxWp6G5!a-0LAdAKV+AYZ$ zNfa=ZT^CZ*VeJu>S{svZD1l*YL)NN=YYpDup8cWRtotZCrYx@AkNU%KMBZQ}Rn0WA zfw{c*fOee3l8Fu6Tb#v~X-rHn#7VKXM{Z%O)ZZNiN=X(22fz1dAPcbo;L7aFXj6Ne zA8`pwNWSp^B%a{=MUtPVlJZr#ut7MuhqAO5rIIX^Za5>_2vgaBw=$sYyMbE@6fNrx z>2%Wk$ngciIroXTs13`P3jDL2#+s+y-KtWGtWED8kN8&5!&K@?Mp|Ll9uo}|6eJLnyB)o` zj=V#6q~*xL0W;|T0KunUwI+hla@uL5bhBioANZ7k&5ihvLQZNWPEMwDj}LxUjzBzf zZ)o#RNVJ-$Ey~lU8A_chPUi*h!NIt{);5Z*LTz)6J1XiD+HJV3@o#Wr$<2ryq=8e= z!I{P|4^u#rS|5;6-UWd<`oJP($rHVmfPs{Qad@Irb@Qz(%LN|Z2=Phn zyLLaU3p(NVTu5zc7YEF<&$lp#3lr2MG8M5ligjHwi3;(z0-F(jAt}lB=jHG_rTvj z#$j~nC!9epOsQk|achW%rE4)Lkfpq=ryWnf3?qXWPiTpN z*+M1{;W!EH`NT}EJ#?p3iygy|a6i^BshSTkZsmo!5e-z6Vco#6m3L7DcY>{47z%pG zxv7R{7$i0Yxw^fgCVo~ysdWW32~f%8+8%^5Ql&QG0B{%U5Vg8>NpG&l%5AU=j@SA{ zRk`j>f_jMxX>}P{pBh#5?F+I}lWbq>8fJ^sbw(sxVrk-~1Xu+tzvb^4^QxPaX-%rc zp!u?HG9c95V>eDHT962^2~GGPoL$F=pj3+5HIp`#(vw$~@#i+&18b8EkQ9&Im7TV= zuNl=ttW)et1f>cD^X9#{;>U=T(tS{ut1=SvWSoqQ_V+>lIha>Li#UVnb1wcDd<1_Jd2cc{x-*wb@Rh#90FO?m>*R zsC{#w)HGbnG})AyrX>`9R5@~uqt|csk6uaC*sn@CFR1CvC@EGcErK(DSn^NAcfwU^ zy8T9frt-|orlQKxEEJn04S*D@Xco`f#ywpYTzT?@&B6Vro2Xa7o+dGJtWadR6y2NVb=XagV*%d~HL8NF!POvLRhmQ=7?3O|ev`N-qEe9P3;{-yLASFc9u z8AnqxiO(4dRn*&=DY>~H%X>$?z8gL=*y;rxmDeeyr)3gD=-4x0GtPOBU*dlbd^ko- zYheEXX~Uw{9GSc}diu@gpQ)x>{{W(LRc$RJ%#xsg(i5%2<8 zqaS#tn>*?9ij&o18L?6S0DoEY?pNWrPgd%#CtLLTS+vbux!}x)Mo0jKB;44M>FXNz zOa1{DqH7FKQg!M-W+`a#B-JK2Y&O4`s{9LDG%7zsYVKA)ZA(remYOQ@rQH`pS+bIp zf$fh=52R|^W2aO(c~#A#vr}J)Hux?)2p8@!2r=|ppNwjJDi8ML&!55YyjgM`%6_7R zZ9(bAmC`iC%dt=nEud7AwJBNj^Ap}3&^2_brmai5kST%KS=N-b!$_wu}Mm zecsV7?y+O3`gqRBQ=bcN+ZK~zZhu=^(Oh`*;isrFz84!e3z!zK>1S2CRa;$ar8?j<^iF$|E8QGf5^K{86nKqO%>uVut8*)y0kE7Bn>v7W{ zzj~fFYQSw=)%9cl0JG@z1LA9@Q|L<~tt{eH5}yrMP01bnq9Juj>2FbI%*2+U4Jm(* z!rYsSoOb;Eqvmd#)!OE%P-zqmQuqbJHkVbwy{}^%MuOK>y(d#{Yf(+kyi+bvrW$zc zR&u)%GxzTd-vT&%!RY%y-xgEk+J9N=<#gAj)&0`-d9gg>U<9gRJ59J2wSm9A;gdZ* z_;}MZE17y@!kL#i4ZN@cxwzYVbL}2yt^8O?(WK2#N=&H^rCS!K)Js49wk;I;*Ti}? zth=sK+*)TZ`_TG=0*O6{Rlh%Il4!NeXgLBo$)nmyTl>#m(z=IIOz@ZK#;cc}Xe5y? z@=})x^#q@!YJD;4o~~sszgu7Lk^pj8Tg%RFImCG9;Lkv74yISpIX7NvRSZnp&CDq- zsXkMYk+k3XN4KfnGLq7i#WuOuW}YpQ3!y4L!uGl6*U~t?A*aKoAzXsryrz#+lT((l zf)swAuX4>N)lgC$YT)207bFw;d&N(wJy4UZQD2p+OSbC>PUR)l5J20__WDEw?v}57 z`F+=ma_S_dK~^cbzHw;C`t?-SbU=zF0oE4&@RHk#U7Q4D0uAHN#iYj0D9=r`G_AOG zH9nYCG>q_4Y4YqP3n$8jkVqH$W8O7dGALdhrGiTDa5Im;7LT7O>X%V;G~1HyP}MAx za-~ZZY+13ru6^Ut-wVBXq;)Dm$qAYN019$hJ6vR(q>ZDwJGgVS zhiz9g(aE6F=2RMdq&aI6FOvmJE@_8D%X7qKUY)%^tW{>~FTAlXiG>v@K1B|D=Mctw zQ&lArCFiIgb;LmRwdNA zd4wq|#lY>)r!hp3*Q`>Ba#7X1g}L~GbNBm1{WDRS%a>RlV{4QVyPjd25)VjxQVm}+ z+bgf;8gw}`Dy^I-l??uoBQdG8)k&SxQfM|j+>3jR2+wszW5AM9r4mY#kU$&=s7vd5 zg4`|#)wCNCxaW_4VFnQ2mN9LBZuOfa+}mxC?L8rFf=1G9{bIXUn`x<)zUoM|?YU;w zCy1`dYxn#et~{_5qAU)0Jm={VwcT2|zuqNFNH!V4Ifh&aV%1`q&)awtSAKW zdlC1C%Wb)|>_|@QcTpGaGa21FVy5KsW+fJ+kbLS{H@DmVV&P7yDb`Wq6(rj#?0)d< zg;$8Fl~~0pl$yMvl2G5wG@*N*Q_a4=Sb*2Mh6P+14a zdoJfW`#@AB*jj9kaA}!d6+e%_eE|lmT{t^52j3geq9j5{tC+b40sHI~to9?0?=6no3fYIPA#Xk_h@n zZ%^u6sVGF$!-(F!iEU~CgM)rYx91P1HDX=C2H%u2;9@z7?i5Xg%TX&5n<-T$)?7#+kNJu=uhE*Op7WDZ?|7{(Ln%^&scO#Iz3c9TF@@!4cKsJDyBX@klbx0I#98Yu4=~|qdLRv}x03CtKl8^}W z?|6@?Y11mo%)kLb8;BMc;}*PPJu3Lyn39oVM^u}y0ZUlzpZtz-8wdXYCs4J#vL_@S zw}^lMwSgxB*}tT7(bE!bRyoR9APqdl+4s!%CJ4Zx2K zj`t%U*o*$IU6dBVP4Y+CzjwJ~fC|4VN$x=7))jA0 zG?WFQ1v$FaU<6~rV4N9)h%dIV3007l3k0N#TNXZ%Uyw_)2rGMS$Q+CCcsGu9>4dsd z;-x4_z7(qyZ}0LkA}al0T|;ndxi0cvOIs4)1oO0B(G6AbUR|AZ;@}XIo*~?oW>x!m z&H`^@gU`QwL8{c*Ife_e&jdK5VQ>y{m{80QGRzg%sZp=V&!weJ$xebS2GtA!eE$Gg zVf%IVtt#8sSRQq483z8=?Gjb`bj3M^x@Hidtb$4VlZei1I+|8aV`&dKuyPY^ruR6= z{G+u9VI`4vfND(FbpqtdmhuosnDPg?;6`86Ir(b36zr zUS;*R4hvub>)SC@)besO5{0=5>jJETach2&*@a1wXW((f!FroToS3P&Q6yd|1y@P2 z;CfgXsZ*$R3Vh%*vOXI|-c?>Vr|EPlJGAcgD1rOMS|RItdRC~?n{rqbsD3pNPCJZ8 za3-eW`hW0i-pvGII zsr8yf`d*iPzX>YYEbIOg7>XwCqXBv%$`9_c70xcor%I19cu| zho*W@L8Qy2s(Xn_O}3#oAY<$Q0JuV-((OAvP%O>7g{ed&1IakYFoSxDa!3G@f)W8C zR>$5VCbfE=cuaWY5Ui-If-T#h^^Qw(I+SBkz?Z5AO>~~0U@P`}Y6V3u6scJBvAOk! z3YF5bDs;BptVlc5NxlBxoKPL=1x+%;!=F)0m)c8!f%@Jm^}S)K9#WKvrwz#jgZ=RY zVt4G(mRy(-ZA8+llhnF$MBI$hK?6IFdvl-ph)S1ITzS@*lns?DcJsJe!zVTu$K@Ff zOH^vGrKWadsl2ahRBUneh$*df!W=^-J=p+Kv_$^RgN!l_c59~ucqZ!Gcek` zR}g|*Ui;sU#E*EaR<-4Jb)v5gwYD26Qj>9Eea898?SD%MvMQkB


dm1mr)I?7TK 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 z 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%0DufF3lchNzmem?wgeY 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

>P-vtbNhsU?L38}Zn24rQmM-eeG?d*;wou^qzJ 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 At^fc4 literal 0 HcwPel00001 diff --git a/data/themes/wallpapers/Fiord.jpg b/data/themes/wallpapers/Fiord.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6022f5a0ff68f0e6d1bebafbbc309ec4d7db9e6d GIT binary patch literal 515520 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ΜSVwwr!q9d`K;J+=47Irt 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

1>_jiDA8Wd~)7ram>B`#o>CN%m&^M?4D-P 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¬Y|Gf8PT3~;rWcEyUgV=g1Z>0m2v`%ZyhHG*CWuq~~G5eSb~ z_=fKL9T}5@T_5_ABrILpy?;~#r^}Bi@U$`Z;!F~~l|`H=vQk2@*aP6yG7UHc8)M~j z%z6Uq#(ibXK#NJWcPn(APb6iIKU-Agu1lq|07ev2W2B{fMQ~MO243IcHkFRNrSE$$ zRRn-*!fTEYJ@_6F`1C4`dP|=xalpy{^XKoLtf_MB0R?Fak(%3&BYaE)v)}?k04CJv zXyadi*D?49`(S)1o#!$QrG`cRcgefpdGa>P_r{*v8OWVS(mL(>b^%(+$6g*&YsrL# z1E-JUrguJFDV;~Jtz0)E(Y!8sRd*CUQxbn=P=4;}UF(Q@GIzqI^&M!-QRO5U5}gczBokb{QsRcK%y`I_0;MNyuhLjlW;O`pqdA% z+WRE(c^{-5EwkK4uBYLrD@0lt-6s67=fO}=Te&sXp6u~CdC*wjwU74N?N+~qSUX1YwJ>&dT z64J2}U&h|@zZRSk9%ObEHne#BBTq2+Ll22hapYN!AR|KWA)L%3&-^GNCqE!{13pSu zYcps%OG%A9WD4^fA{n9{C7q=4^~zVFcaZ;i8B}}xcCAf9dPKMr>_;uqmIY@V=Yk?H zK4~y_%n~>2nl}xaN7uX9DRS^KeNxeFt)mb9DO@i+nzxIj| z{iCtk&emb?8KC_!qg?s7Gj^ZCrl#ZGxo7ACb<*R+5|twV=?rKOy1?rc=; zJD173Q=XQuCvP;Rkc2!0TDzu-d!`*uN*HavG_E;DLhw7n0RyVpQ0f5xLC_u(jZz4}VCxwE1B zi2r}poSxMs5cinjJZC&;^dt6169|z=?8X1sQkG+9-u&We*5fD&WbVXFVR&rc?XR$1 zNyP|#S68#ZYiI^5l$^Auvfrj(JIc+dFWt8KNOEB;k@JsRE@g@2hyaOP; z6kDux(oG-R^SnzkOjUv|tbnv!MNzm?{2ny9e`&ThT5>xq^J}P*-B#|lr|#LOy@%az zB@Sw_j8#2eB(FpX{wB!DlyeM`=^vHJ>##<#-VL7$dBxGH^?J708Gok0R{~LeY$j&! z%Ikt8Swm@qB^5kR)~PK6(iA2v1cZ%~_0;nDD@lxTTRnKB!s@Om$}nCe+g*-OC5$Oj z#CI$@KRvFjBpAs3?BKgp|KUL2p|Mt^JRo2ExV!sZ|Hrk*_aOO7yG?Tb6|D%Mz;-fk z4%;?nRwi0<*(zbiwOIeoeXf2pjc~z8i9{Av?&&VRC}~P)uR*}iS2MwM@Tqmmo%c@) z`acE-$HwH+_zKgWfsB&KU)!eg?G(v;cgsxfeG;@Xc%jx$z451 zCa|cn<;{*zOom+TM}j=oEkc!KpI)+ORhwd*O`P1}A=P@-?Sb)DQyQtllaIujWzY#_ z2F|aS!bS%I?>3QMtjXP-<5$jy!T|5wdkJGDLeI>`{QaXv}E<>mcRiE{ym zE4~=nBONm1DijzbaP(&@qe^RSh2=b@kKJo==M)$nTXk;w_mqOuAAj9>2E zX42f)3y%G0Fe&(NJ?V24)OGbS{dr?=+h75S<8qRDk6U~;7@(eMdbCT}iC`&nth5L1 zMA(=7fx9)GHM0lTeKf{|^Vum;XD#+^mR!GzT#LTb)0SS3D4_`p9EiF8cRs}+mOjjM zPp`fE=oeBy98siwQR7?V8$_g!1x?quzaz^bj4{@I6ZH}~D?%`me;D_@brm_m;QH_q zhAmEk&wY$9%RP03P;UmT%EXlWa0n|#!!K!yj@2UAteruG%8sn4PHp%y7%boGRONhx zOW+V4^9z1zX!xsYqL|yb-z+oa)IU}6OBM%acK|3KSaH<(3&SmWl+eB!d+W!jZ$+48 zw8j8?OeQI%Qyg!iR1@Kwh<2Q@zmxor$|||n8ck*dCibx82sVrKT?22PZ+26*(|zU! z+ZKPn%4r)!qQWQ=K0dtImgy5>v?op(!k=j1&kIC5q}WtQ<{boG{G$qsx6a?`5(&%x zRdWAIex^fUUF{a({9O-w(N>Dg_y18}LCgNHaDh9oW;VMr#AOrW`I~VkU?eikU8@NT zexE&GH}Sp00&&haAY^@XiYVPH7HVsCCWWI9Ys4i^o@*Z*5ajVk(Dk=t6!;SQ^K7ml z$*52-wG{cI&N?FN8Ja^o4xLu@0sZn}_FYYXR(E|yON&|FCfX^eG;rbBG9FUY~}~D6as2rA%*5o1=hd$rFkyV3y0QIK-Pr4(fA9 z5D1!%&UY5jwS9I9k*K!|sH|hd^$dqH*RYPZ;yd)FVNcD9BK)gVBN~w=_$pRy<6!nP z)YHh0`na@0`<=%h-SY;8=*hdLMYcvlGO)g$322oTP!9$(o`FYpIYicPWrj7Iw@pV~ z5?@01;SZ^OTyhj#o6@y{==^Yfbk+4DjMcXl*c2**@3XAr;kI8Lq2d5z$2F88>2KFX z5AQsb>Yu9f3l(J%x|SB)hDb<5YKVaPp}pgxImP;;Ki<8{7&)rhQmB2{!vj(%VxA!R zk2?X^x|M`e6E-)Ka`z+X2T+TFz#CU99bgYAfF0O%WFztE7V#Upv}f{`3EsR4@0SXt zUXH4gb;~yewqKrwfNGO|#(?uFo^f0G$b>3)A=+tYad0FKIxGtbI9|!MYSze^QPCi+ zLAlb%fBu%ZQDk~KSWCfG51m4d1j+W1@%kZzeU3Yx_u{Gvo-zE`7D*dVNHsVSy8aUj zu985%LNR6DHUem7Tx9BwB=xpcr)x{%cTPbuMZpN{K!G-{M~2&{oIlG(g@OSxCuAZ< zgMPM2E^IAM@?Wc~ySkq;x$j{7x@M16BJf(Zco z;%|h^@!vO;hO<`FW^-%*imT`>D4MC(6Sa~l(EAyoKP)|H>l|T%G_=R1R=|Q*OB!LR z;M7)A6W=^cR!E})rnM7)z{0VEKJYodnXyPPr~rdsU;PJErHNZga!_I>iqmZa>{LJ8 z>z46%@J#aXK1iLT<1V?I!XBRK9@sf5qMxq*bfjh1(?DtVW-=carZQK{o^I5xAt4=- z%;9l}=FN%xl}umCWz#YFD?VM{vZyH4lBHsI)pq%5bF1z_Fxx@Q!qzLE|D({X-KMf`D{f37FzY?R8FDyfrnbVz^g=X4#XSZ_ASZw z*`a@SR8}gGZTzuab>w8*hGFdvc~gX~=G)xVp4WYCX?)z%CV7JOj+#Gl^s?^rV0HDF zzgePzv~Pf2POZXZwLH}ONM~?iNNnFBZ#BY+Raek%vUf>|!#S&nK5UHhMcseJ=FiK& zTP46MU|Qx0_Cvsy;$61zXR^8wo|J~uQ1@=#JQDrd*!Np_0`PW!@Ud}VP6Gy(x(JV^C&+#B4+0-R+tJ+D>R9HDC8H`SvGwn zBl=x&S;yZtOSZ37Qz0wFFxRas zC;bnUA%MwD-o=MjAMq_Fw6@(u>({3Ls3a0^iOJcARc$NJ!tuwFg-`k|$JhR3jC!Ve zeSEtfgRgo-Zl&Y9A?q7cFNPb&c7|4Tq$wnf)zH^<$kG75sCmR~fR;M1tM{c9eE=5t z66>RY7FUud5p`_CWnI>bG?hjuA#Ji+=*$)eTDQP+HgCeRm z6^a9V>Ndai1#ZKFeRkcOlQ;nH2N9q8+?nkIkJ-!bOx?OZdJ()AdFFU6*a-b!>kodyn9zXfv z&j#vzR=b{Iry5~2g;u`;5ah>NQofZ88yG~kb=HcdH4aXKE|aZtW^V>3sd`K3yJQtR zrO`~}W1Tif3{($iL^TFSPAw;!BWi4Bzc0s0-mTyVClLL%si}4jmqbU;Hx1CJo4c7I+D3%F&R>$}_5z`Le)CyL#_>T`#+LAR_HI zfdw1?EZ%0ip-dJG?ycCNSI{?WCzm5M)19+~{gntxk+!C(cT%5S;kdH7i;x4tOKrRE z9Gc{jv&Id}!K&G4^k}UBjYcKWK*0cjos-yG6`sb1KuGp&hCHGAeTNIS#7If2eE=Gy zMoX%hR*pPSoL|o4mmLt#<8zimU~0;1>E7;XR%b+-9qhp~20~W;Xziv>CJnN?q#Nb% z6=}D~Trg@nNO8@tg%?*FK0Zq(j`DSqDz%9C0|Dw$m%)Lmpr z`cV2Yt`P@$UK@RGE51VLT}Y&iGo$sE0;hzZEuf9Gs40&7^65P^0moGnz02K9x3{sT zM_qNzOsVd5~+xgh;4C*l4mmN}?U^x#@wP{4~wxblEh|b#YjV>DI$?w+@ z!|ecxVY5(!f~YQzRweOKIzoY6Zl4H;q~(-W{cJj#jKD83VMT3-TeE$(SOh^lCfxw% z=#p7069cZvofd|JCfdPtgja>hEtJys^YIc74N|{Na3WJwg-&d_AEwqjsY+02ZC(&^ z_U@K{kp?xB1M|59B|b^@i99kjy`L-5nZdf32rI-*R7|+$rJWnsy&i>8gI_~@>d$s> zP;SxM_k~>QZVqZxgcdzf`{T2WM}nU1N!6eim^DF}~%sI?d_J|i+ zVVN?!#{1w;G4Qds5A`tG7UTm7U?RTEja%s8wMG1|Jd7BFbXi4A^UKvsIrbO4Bxhc$2_h{Z=?nrAnR$AxNuRA)9@ecp(I2z6mDV5J;rHZ|= zPCZ#q3bfP5?nX$NAr=D<^#axl{C`gxXZ=7Yrr3BZBK_bgVReC1m91br9&^Iw6Wx6m zII46v_wb%IqrTweUdA}H!50gyBN*A-%2{Ru7-+;HtH_XPldFy?KT}}PU0Gs;mP)Db zRQ*Y>HoP&GANwgObayQJKf$N?4aSm-wppR>zBlyeh|#YHQYoqos|oeHywDp{SG*<$)+j zz%h+Nxe#FY9o0P?FbpR~DG{D^e`I0O*0<_=mBTrC#pqWMY%^?ELsks2JBZ^fKksGG7B4Z$i`$g z-MzVw#7X^XNd9{plW#i}WM|vq);l>sPUV@%b;@lj7dunaXmfw7bCj2eZ+1)6VbaoZ z-GX(=Eo~`eN+m`rqQ1Tf6u@v6y^jE78Tz7}j`^p4shCd@pYHK$wsfSjTrV!nF>l#& z^83Zd36HzZ#xbuLpLII^Gs`%+P1ol4CIHcPVvLS67cvO)bey)x-WD2utT&-pB~nv~ zPc1@S^#GyyiPs?9bqO z0=7PkD-5B2gt04>dl4#>|KYww8*E1*Eh8(DPPS33yydfCh(+Mzb@z| z)=<+}i+i|zQ<&uWd*MVKow~)y^5Cx z4xSeN`2Y=PyKu@@zc$x}@m@5@kRgF>&5uv)?#@PMh0pcS6XH@u@e1fVI0>dv2go%! zRO_xJ3w5}Oy0m|4E?PA(^?5`cmM-*jn2MDrEENnspx6>Ux*i^oTR(0c^S#})(T)%L zqqo0PM@RN@QzUo;_5o|5wEeI>e1?XWKvt(W|Jb4DHUk|31G>v3b1o zqM)FBf1y?w^tNx<*t7l)y~t&XH-CzVF>XAxb=Yp-qrBZ}=3p^>=)p}}Pyj_g--n5q z;}Y>4y&#NIE%g;b&hA^Z&{NB>llP<^#Y(R~73=3!>F)v@MA&&MzJ7QfatM&LuxLsC z%izNhRbb#9EEuOVcC30$)!U(I=Xq*v@SMiIbX8*?*r^?p6_TEFmPV3s$r}EnPxd*_ z80w)S5m7;>@YL4!5fsW6;`+q^s%)6Dh5zQEe3ty0-qsT@N%;J`JMCe2&K^Me?@Joz z3Lb-%!-p2B)LZ?Pk#~+)4B70_%?QRqy{5<+)|(alS?e~fdh#nKckZY&WhLu6C=3`Zk#O8SCmbnO5(^xM#A$_eXGGIit|Bm9M9PtVD-&HPQJ6EuCV6L#<+-;}^a1 z^gb*zec}?Y9$U%F{%gWaA-2uqMEB_v-9aF zkNN3``MwuwZpr7t%VxpF3|A@?7Q|QcN%>Sgm6m=+&o<5C1o#7-{bO0;VpN&Ilsg`e zPyN)a&mH}uhx!#$NAWE+c26e?m(ShBi6-pacG$ntB2;>IuxgX)M8 z7kB6kuC??MH~ZlEH#OmNb(=YNIIxI3M7fpVomcV7F7M$qCsYCQ-p5tj#biK`>)rLa zos+N0oVL>To2kpGT7z<&UrV>t{&(;t8+aj{w9RSenhNzTl1^6X+5MH?G!6Opb}$EB z92>|vy~8K5eGGw95JTSck+=J@9f$eLidthm6N~c1D9*OsR_+Qf6&>NT8s&VZH07o{dI!9(RAvExZK`qN; z@}}nVMH^AC9LLw4?2qSqCS**!9n9;iRTe!f+jN^>AK3(|WlXJ}zjOAT<1CJz*#V^- z+k&laZMN>~svhwSO*GzLyiMVt8mngrc$ZeNw{&ys(?nZy47R_uu{Ce6LOFG=n1KzoDQMjt2gDKDT#9RIshp+vVPhOSn8F$ z`s|wN3VR!grkZms_53T=(i#!b%|)u5mS5{gHk`c`dsX*zB;{INZ0>0sirM)#$3Bs4 z9njMEl^5XAqC11K$ck?tHHpqPSx+%1`e(I=EM9$etZdN|HM7v$tG0{)LIrEPRXP>e zk?DOAdAlceysHDjAnJ)`WLjqBCdPKYObU^a(2zP*=uLQOJ^T3Cwe~L})cOzl#@Wp9 z&_$`iCeO3nEMN^f;YzM#tDHUM5_Yxfes?sEPR%ugWtECbEXqWk#iK%h`^~*brOu>N zuJ}uZh6bz6d*Yv8$#qyZK+#|lEEQ>0)`E0CV&JTC!K=sPeC|RqBe}}z(Sc9wxo~Oy zq0k}Z%Xrt-@>`~gWma(kKg7QBI>!Yq(R!Ka-ys*;f;hR)y)=V(_F2)QdfR!!f`$1$ z7CW8hW3JD#38xvRByBew#A|A5QoNv|{eW??BANhT>ia#d$fkJTJ~>$hAWJnhQX^EV z%l$Lst?TW`j`ispe}(kIE7waI>S;mv*X7rBp^_Z0nzOVI>1z?+zL9=kE#EpPn4-W2~Dk+Xapy&ZVUX)MZao9`!0ikZ>ZL!HX z>frS&!#qcEjfgNqxT2?Nf#8WAVGZ8y07Y(tuye^Q*^V-jqTf(^iav|aOyl#>wm%}YA zU^{!xn-6fHhMe1nb@6dQJ>l+YYldjM&9?H=o5tL`Xma952Q@>0BhLeu_bl7NYLCvJ z)RQ)eXIBFDv{Us#QnHkgv{6I0-_U36Hk9AuR!%|R_t^osG#GF@+^R9Yv;E*7RU%e@J7ky*^5iV>X1-VBM@cBKyW&~Ow=^MQ+EB&XcgK@Xgri?nCpt3mAS)s>WfNTKdX-5&@fLCa6#|mSPQa} zJ4(x3F4~H%mptTbe;zGZ;rfloiaoU^_kHRrXlb0;<^_-{$sU5CXVUKW7u0SY?~T%C z#T(Rh4$=J};R}oB{y^O&>m-_Y8houtt4Z%y2-(rKa(}UCGuXtfx9WWk>Gq6icFvzI z(L<*)BN*DezXI(`TMfXrk+WwiDo`G-FKG_avDhN57yntW`R;@^+`o$aQ>V(eM)Lfh zTdN9Hdz_6-vHQp;;8c>&*Z@8ut~}#i4SoTFvDe=5Kg|2EXGVTD=SCX`HLH5GjCtA2 zFfO8I^P$CYE21&UH`{a2)YQ(b6$sN6E^IjrtLIH+pQ+Mj)6dE+{!@gqBHC8V{wUe4 zI_d;t*J|tQYri(_0pDC(97SpU6(vXr-~l}2GlMyfFyL}jro17`;D-+>9q=c;d2F{| zz8kInA@+}|NByp(B#t7R30x@=3qm0Qbc$7cri%xl<2> z6nBSLK%5)BOZ`h2E!;;38oua%RA!UFOU6S1bgq1`vPc4!YtnmX?ZvmRlA8h{skd`- z;=!oD^Gj5?{At8gzdEBT&6DX*B)iSCzbpr1rvdCa%pkw0S53MB)S2>#T?ovb`w&Ct zOwHTYAzo}8UHggUhwji~5igG0OmGjk)~nYoF9B~aaE%}r)~*j8do^`BxHPr|SwF(j zT?sLt8Obah;X6YD8Jeu5wW@PyO}SMA}JN$d}h|3^K_Ld6jo@ZDGCvu(=f32 zCv1HYbV{M}f{P<&q}0^3VW%Jg3JY!r!o5$IY1LDyMR+mr%y!9BhBj0n=v5EWFzhZQ<)&g9yX`%sTH%@hPbj=h!`1_ z=d9G>3uM-7i@Z~sO^q?pxiTa$5!d-GPhaQfX)vk$ej(Z=y?{lj=VphldH*Yyvecf+ zugI+;;TZTNwz!)e^n|z(Z4qK)-L>ao7Q@1Esr?`+a1DNjgxgeLJBuT%9|&4qS)Tu> zAdym?`~K1$#@50CAHmQ%Ve+16{K(z%Sw&gZ>*0vr-pbZ5R4GN{|3jNmFFBE(R1?D1 zPfalp8j81^z5B{X5?rJ5JeV%Y^0APHgpyc*!;9gMp&|P19#XIlamT6!5*tDY+uS(K zOQgtK2}by9AfEY?8Vd?8O`Q+!7Dg}*K+C=_4EZ)DgVQk=XN-Er{TK`fz*_Fi*+b)q zME9TTxI0*;M+x!{r8%0@syTz2Ag2C`A;3XPu)^7O(=zK(>j~ZYa$;mvAYoB{w_^19 z&`Ej{(%#$B^xS#%IN0T=$ov48cd2a9t^=+VIX2iV8Eu3AHPwATT-Q>k#(It?=mgQL zm=mPf#`xYe;qqyiz1;d*LB}$$t}{#ARnDNQpNwRbH)TGx;4E994HL*v!@Q{=l?3U0 zsL_XocvI;PSn^&Pm{}RBI7H*l^z*N1=hWJz>cLR?mQ8v=6QJ+rA|%2&;JP=c zyDi{8?9wuY(y~RVG=t6$7)^>?&X3z~eML6N*&~NwKzCa{m!*OFg?dX1%QI8Z=0@6c z-E*d8tv1AQU)$FNZ($3BsL95eNrY=o2166=fSCrvD>Lq#hp+)C`CJ=({(6+@e0vBH z?j<1twY&3u3&F*sk?GA!CThKl#N<8<+6$jG3Du?)rOTiBMw%V^b3qt|F}9vx;0Bc` z7;8_qXW}!@-;Rp^PZpp0>-?;Z)IU_4Aag}Y4R+t{(5RDu2#q%!?TUoDt);dj!c2O7V(WzT+_Y=1 znUS1(x$%z*dnLN@WPNDh4a4`v#Ra(@XpnH3pbYHczO*4Kr}<^(WsZ<#=7jjG?OfzQ zXTDWrl>d=~E{y#XUb8jKDkj0uSq93BJQCAnjnb#B)WYaXiWPqYCygL0y741Nf z`lXWWvlC@%ONg{qbL!UL#I7}_?P&53j@ZoC{iAw~{^4tF)pUd|nQonQ{nVE9cg}!- zy_kPdmAKCns59%m%O_c-y5af+bDoJN>bcw*xg#X#WE^Uytw(4{ufXUn0%#r@M{eECIaGdI@~nx)UN+! zOiW=Y=DEMZ&h-aUPoT&LH$TdO5wp!NarU^83fICEsVETr}x67_=TpX1Ovi&D*4Bm&2cI+ctz0H-W}*6#9{&&;AVm2HQiFe%(s zdqM4kdsi|mr!8IJ_8Mya;2bhQ-wxZP4vDICOZzb%EwmVYJ5$>CSz6A!N__Vzbnu|Q ztb$B_;bK+VHdnXzT(0Q@lIbyhw88iOw;$a%qcuG@d8y*WAr06ei= zN!_M5)~u#=qO?jy6K6~WXhPTr>~Jv7F1-Hp5KW+~VLr%?IA?hNrn_Ag|Ar{8eNb31 zYybEhMv17|Hs%h=4QAE#pKbn0wwul}^cZFuxNj)S#C}K3s1Lc>0jRqYJsd=kA5Q+F zB&tdQah=oKt|1*DK}>Ru(@u@x4H>>yvCWYKm?031aq;_~8tVg}MC=-aSN4CM?K2+v&PAhRtHo_bs3*xJ=4yY!}$d>&dWu#}t?!5iRR%d*RCzuCkgls!ym z-1#v>?_t6qc%0OjH*cWFS>7hq$JLS-1YNvAH?C~Zz*F5oq$5NoIceP25@fl@$DOhY zyeOkI%wOBnC4{O*t->T{C)egto;F1#uGDhaQrFzwc7&W~lU(y}S>R;Dybh`jd zPf?=prVF&cuYj6S2_W_6zy{GpMG~(xD|z`dP91I-<8eOqJ%2~v;XBY^Yx{z%$G-3VOJ&Ep++R7W zY6aKA(0J$O0B9(uhtf{Zv|QW|V|{!#d6maaR3L{xU;m)L$r>wE`g}u|x6vQ|g6nM) zt-iV2V=A_Rz{!3IZkyi28{*)_Se*c2xcyc6mffRM9Bx)Wpr{mW@1OeehMp(D#;B_) z7z=|c3fD!{pN6PEYf!swQ)n*5cb-U5zdLkCKEx&v3X71R>;N%nwIvCO(L5dGFZ1KU zACS7^x}@>OFvy{lRqNX=g|-+)<_XR)+C z#~cdu)xqj)&z*;S?fKEag;HaXzlE?~85|TVZ}Uk$kx0K6A}&sPkG`;+48>iEE_X9; z&H+&8?fqv87ISKzg(j2;@$bgHivtWTX)`o<8GX*MMETDp?0FM@@zt-taz@w>MBQya zyaj5T&e`z6guXW`HY}18Qy$t_&Ks}oXp8dF8A7scq8)H#hormNwjZz|zEA9(>dRFp+Vi&^uFY8< zKKn;Ck1t}Ic1PUMbxT^=gZb1tzoV;L$K>W9_&+?P+u$)gT}~s;4*rEP*>^Yp&wxXd zR{*B^m%#Qfc`ZqcM4dY};u0xO69v^=GOu-u{(j~&|BuRT=G~N$kG$R-=R`>**`clc z9g#II>|>k`iAzuazu2S5Sr?&d+OKiEJRqyFE{@3{`e%e6m(qqTovBS&#b$9Y=V<`o z@3c^&v2o{OwU@WR1Pk3?gmCJsBd4lyqlEM|4 z|6yTcv1yXN!&_5e={5J??+$dp7>Txx)|Jr&V5c5wMU@RdwRsdO+M$B}exbl%3$d9u1$ME%XvZ}+PdVwrcuk!1BkLZ9q}&k6 zO!Yfx`0VqV%$3|n7MMlja99Le%Rx@tkVlcgrAxHT`s!n} zz>smF=&Kq6{PoUHi|m>5)$;YndM3?=VPIHz&`Q$+Otd~{ywSVx)?_6l8&15*uN zXtl)s==)v3G;jZ>#ObI63lm{_gA_Q*EZ;W}%Uql(>_hQ6=&x0uxOK7wwdq17@) zJleg0(^PFx3TB+zRIn}Q{W4XEcA$%qtW!F>+8fH7`RmVhSz%1ZGm$ctc6|}5{^vd> zAlW}IVH&LC-g5{zh}-kopNyvj^vl(fxPgNi>s}TyCrHGL9BmV1O_V?omvV3jXt8;7 znut^N=~|_C4jE-7G$Xq5x4TVG5Tk>fEd2<^;mXC$Z#{P$^y%n@rk+fJOCtyRWZt>J zb{SN828M*u__@ICczWTws2?DSRI#rTG`!zg8rKIfv@t5Z7)c712=L;0(4|_WE@1`w zhWX0ia2*w!J!!Xjii}hYzghOAFrN<8B`mY}iPW;FT1D-3eQf02hmhERRFHeL9+u$^ z@g0Ufhc^d%odH9!SDJTotDudLgD8YfJu78)LdkkvrWRa^IGV;hknSiJonv`7>@MbD zHt?-Vc=`c88N~~Ee53`G5*ph(@x>?2X$9H~X^!|7z}QqCZ+nndK-(m(b|2?o7WB@# zMbj6`B>>qzW|R~DsML>Z`zc^X;gN6PK}+MS>}*@(Kk zf9IqVS?KGsCu94B|NB~fE_GUT(A9ktrIuAo++xjo&O;xUGsod zF8AZl&Z9wVfqgN4OvW|On?IaWnv;T&ukFm@WVprLiLkDzH%G z1guvy+({_tXz-LEKSmPvq?vEP*Qc-5apE;$|EPLTCihMjjbXTH=!zdV+p$`_45Gg| z^ORk9N@{1)$2C)?Eh1q3i-yZ%{;v1pE4IT<(oYlg9hq ztinudKu&Df(;&vAv?jRT)>(7@pL=WKFTY)>{??v9*%qh>jq{M)bDVXV7R)thfq6(U zJ-=JX(*&%FChJG1^Ylp$_cM|9OW9J)P{AYX;IP(DDa&yTv;=M!!*5%Yu@)e{v4tW_b#;5$`N9|pe&rE zx0SK%3X*Y5FkA@lKdQ)3#t3n)e^k_)mZwPXDtE{7tz6{9?98sy3;+ldx(2>U*n8NH zKS~j&I}pHnzw2+*^Ezmw0lI=}LS0icchd$|_e+wr^#9O7P%sp2xw5UBDHX zI)pQBHjXSVt`fTX3ETDw`r*gBjWCfn*^yj_a<&f4|EN5L5t*B3f8AoykU3ThM-Qcb`g0NIiaGT$@p8ixT2@xr!u~HML$$>zx&fkp@J3Gx{xx<*LVq=D1qaK4$Pv*uzk4tVDC0`ADib60_ajfw0zVR4YWLw`aPC2$ zcE?O)1f`RA)Z`FI?yR{|;f%}iL!CR@efYkal`qtoD%cno!N>A5egrQj%d!^G;jhLt z{g-pGq2K3Lq(;Zwen(J=epLNtm!PKd2|%c@7Q#=jJfiE|V&(3hvE|E+Mwkt(Q$ar* zco+J&-Af4aVcoLXoty^J;GS?U%InwY*M&(?jH6&Y*hy)b&C_UwFzeu2i6-uP`p8+Y zYG>2bjmzD4>06JUAOC z*X>MxKZgBiZl0=xeZ;5HYf|!XTuvf+qdjy}GBILTm;+27UJZC?ksskq0o{8_=y={x zUr3>UV>4UpJh>WggoA^Gl>}wA1>aRbty}@zjvbx#E6fb@p(Kl`E2#*`%FUL8kn~91 zQoDat9$!}sY3zqy$v>cf@~59^X*1+oRQ0gWtt{cX|FL^ev-LW)cwx6d;)(=yBi0`o zYCYROVlrr6^~k)>O}cM*y38W=WgoIoEHoU*Wtdsb|Y1+f} zk*d>WBdbD>tmpMHV14MX-)ZUz@2#3I*%DNBqy9JkN#S0}8~2-4szeaJ#2MmSB5`ub z$BiIHlSMMaw{-HZEf5!n9?V_w9YXNU2x2VumiD(m zF5&m!=vf-rY9nIe2>6awr9sgs%P0ck5+=B?8=!ffgAU!YQvFZref>t)WNlC^!3R4G z+uH|VFFDFnwW^&$lD72omE1b5T@rw+I!86|F=$WMqjSRn%um{t;<(rJ@1OJXPOm7( zwZSZPr?1R`AqJ@I|jl9s1&r_w7HOdd*2HG)(}Zgx4mjArP|;p#qT(WPRO&Vh_hqU$xI-r zf26ujnGv-s;F*ywC~6Kj`}4hg2F2nMkzy}?uvha+K1v4XbN&LyURQ#dkqTl506TeA zeE7qF^D`p=vUh(YvB!0N{6m*r`Fra*@}qe3LqK8YS+b-z?jIG4>L*B-aK|*`zS&I4 z)UH$3^R|vym+s=1!ogFo0-1*R9-;_rcSa9H;;ux30>b=)D0Th^P&UjEPu(C&vW&Z# zVdyke5JLb^AlM6_TjJ#3DbCN%5eYM^ZbZXxuO-i&SBm5DMcjv{={4ugW^Ly_3K>$4 z5@~^dw9TinSz(e@D*cnAfXtShQifaB(-LYj;Gf9XFM5WUz+r;Y?&2!^rEs+@n~b{i6N~a%^k=PGH7e6L{!VRUcR`KwKl&! z<)Zkgz2^Jx_7z-n|Ds|)ak_{FLD30HtgFK%EcG{4WI4iuQ2HSuQ9jG_HXfxN&`QA$ zkS3#IYYP@9QR@uq+V-PFSsF|MaO&)#&z@-aPSzSjWkdB;q6AD48*`xPK-@I{j2ljW z8>DZU6robHsMf=6@97t5m+XZqxQQZz8Lv5md?PNkyd23+d$-ZZb zS{zdDO_#DmL7%?#3+fHosB?w>=tI~rci$^#vngu+6U}%V;Fbrp4pic$sgwMH)oLRM zP8Qm10jC)~cx}BBv%S>pi-e|kPoy4%l1$hPDKK@r*t($n1XyY6-j2Pas{|aI@m*VJ znrTEh*;6q~nDzkVtA3DoPSHO($j)WU<+RVF1RW}rRi4}aN!tL48%-LZVKmcqA9TgG zEOT#p#>4yBXAl;jMK(Qr7mh`p)G+!q;9KwO#=$fxRZ1(J$UZ`iMYgk=yS@AmRrxZD z@=fzP;}P5J8nGbJtKB;RDPqdG=EAGWS!i9Y1|fLGMeAN`D>&;{u)1D{-(fK&m$VnD zOJTttkTc!nxBFHuPa6+!CRQn+O04k}gnTz_J7-KTr_=D=CSvFUWsC6!juLyAekU^c z;BT2@NCaoBP*xp&E>Yca5Y>O`E>e9 zt{#fitV4$SZ$P8;HIfcMlBKi9P&UoFk#cLzxIJByXQY?D2^`!9n*M9ASzaB^zZT9> z73NGisJU77{Q5I1PW^iv>QI9^B@m_Nky((?u9@fYpmC16-;~erpwpo@OCiUEzd84` z!#-1RTt<3Z2`zNAny|Z#-ul&@uErLM8L(j~Le+Sp%^Qz#;+;ak1nt_O)B^nQlm@;>!3?YKK6%?KbOg@K0n;QM_YKXi`L-y6t4G zaM~WJA?~?U&&_kLJ`rW#tQ7v%g~yjXf3MLIa3X zbJA_{nNhp+0Pqw1G_;Sn2d4(r(NL+qYCSK3sabf1OXiya1VnveCJzi=*}7u{2J^81X3|=9->iWBb7%F)h|A z&R?Qc!=jRwH`Yew#vkEKn`aiOF#cg5x~zo>MwL9F;I1^c?v_U;cEd+gs?fu!A>?9rd|*E9 zD5-tB8v_Zq!%b9B_H}ZlB+KZed-)Uja>sm{bOoCXW&cstNJWdswI0OBtC3d38yMw@ zzXrx(*(O30(3`#=P zH8C`tBgj_srKYFZigg2Q)FOxdDB^LC89c=kCw@Ht;_8e=xodt9CuC4g3anNl7jhO1 z5AJGPK5iurTcaWZgrk&7uOiP&9GA;GrX>ZYKgOF*eIvXn%C!h z@_`{ZDwANO>%EMAUWcAHTqo-EJO)es$R}wfsL*)(sUi!)uP5$0S$cM@@MZAkSuonH zy~vVLLv>$JCc~WarrnCO7LSZeEe-YQL4KRrah(Fvj$VRw;6yU*W9Jy%^6hjg4W8KS z64$nved|b6n@N4N`Iq`8PcxTmBNN!vvc1j=cQf-hnBOa3bqa zheDpqjpI@}UR^MsM+gP_;T$u2WBh_p4h-5fkCq$FHmB-WWB#`-&wTR-w8p3O3OUS! zc*;Um((wq%B=j!&k*ThEw(H|wCOswtPt~rY=rgXi$?d@KTM1HLLF0j*i4?nF!lmBf z%io3Ms{3G_v|KfmKan@DatxEuus0CfnH*J@%UXYZL6bAOZgcjpET-7>V4@R%YC7LI zww&|6vZT014{q<)MUo^y7XkclJQhe=l9DAkc|!lFY@el;c1+l@P7Nr_*+EV-LSK)+ zJe%}%T0s(5HX4hd5yEk@0&oXqB4q&#ljAcoOL-gFu3K!E+sDhFG_puu(w~tC*`kri zWw0SHZGH`7CR`**)-7{}>t2}>ZO%o} zUehw>>Xk*C#+qN2BJ6E}x$?H)V%JC(8#C9(!uzHq>tTo~Le!urbqc9l?-SNCqBnB( z1T)AheK2B38UE$NxTWl#62y+#Sb)&gZe^v8 zOCsVa*M?z&nowBKAFh$MX~2@NvD06OLD_#fRX7*<9HStf*ze5TCS4t@!y~ zx-fBlIs9ZY-eNi76sZ`ihud8LwR&fw)5^H)RzeoiH^=PYJV8(1_3II6Qy7;{l(EOrc)KWv}*FI&?FWmaT&h_WkYnZgX zsB7Shfz3GRms-_LjZ8_@eW!&X!Qj6kx#Foua0ujgS~}%Is|IB|9`2|kFb$AwU;qLX zh=)HCnT(Q0^Em!m-x2ih&f+Rn7`)K#|NW0@5ZcXc2X)rLwl)1FVp>`|FsyK}20ejR z^VQ^p+NhW2v|p|NGu2g5Q||Wbq_o zvy*v7Wu~`ujbeGjj*q{^W3oMkQS7KF(^S%&Mb^*Pu?r4coI&4Hz>9-vxvY)a5fQ-N zA)bDFBLw^OFt^wXF$+F!dn>Unn^*t&&x>68+bwv5w1^yga9YxAD&SO=A^F2Kmy4rc zMCl*!#~U5VpXZv1-SP4f|EQFIm>?*$HJ6DElMj(WEz^>zCCKNO%`G0QsfkpowaZ^h zKHNEp5(~~X>IhC+b^{2-x33EeJiZiONRT~ zi0a9uxK^C{Y~ULY4Qcdgk`NpQupzdvVbe&wpSPZDch}|s8o;tHh#>xwI3;Y!s-de{ z@|LlMc`)F02>OM+xeh~-)v}WyUwKC1s-O6m`XqoSS;@lV7YFcB0$3|Y!uzVq$>{Wq zp%*{?7*Z-}!BKIiR!b{vFh1@_M;eg^$OjReJ1ch2q@;4rdSq8x=GC*unnzy5T#JYN zh=$D0+L(pt$|GwAny(7{1Pk=tCZ?RwPeB@LbM2WK0Xt3 zzkvN~OarQ%?xYI^U}agO>cZ9p!OzN1NAiww5jGa>K^-c!t?$>h&? zTl-^NK!uCSF%`A6dn7TK*4h>zlFRsIlzLfjqC~?bJ18jShB2-U?>C6_Qtcb2uE#CqMRHRCzAr)-z*{YomWc4=Cl zNM{(@R`YbU^2YdBkqaV&fAmAgM+!7C@KSmy%*9bTqks9XoNm>*-^a`Fe^kBNetzzP zM%WB{cBw_;qaG&qU|w1+RH^yJ!c{Bf)5?K&GIwzFKDbp%Zb$%x{tu>_>vM-IK!W<# z*X(D2?)#cw#BN_}M(O2{vStAAMQq0o&c>(ncbU@qfoZM~94o{Q+<#UMnTpw<9akG%)NTiO!EjD|GVNeZ|y4tffPH zYwTX#L-2P)q(F1aG?^^^fm3y4R$+=9IU=dqn(3s(aE<*)Ccf(V-9lHWtE11GAXo_C zgb{Gu7q;edpP(uwe}j3XUg!2RR?`BySpkLrqu9Lvsc`&1s$E91x5{3Z>`jq*v-h>P z>vqW|tGB)7;>ymr_I1M@w(OO?uazs}nwLUI-_Q4dcs^d|oF86kA9n*`OE%Jdj43VF z{$idZ>^jN~bfZ7C-mwadlHH9HN8@yNW66DStqT*4`d6Z(hmx5;s*OuioQ2g_leUaA z&wR2v?2yR7hABHD29 zk~v&8m8(!dpBl}=Y{^Md2X?pNiGEV%vTu8tnBIBjnSG#pm@EP09md|)Ozh?jV!yzw z-o_J`>{gxHPn{bXzrFq0`5Go;2(_9*B#d-l|6NSgCR)B=J+|G|uYwO(=3WmS99CdF z+~D2QMp87kC8?zVRan(aO-lXyeo4D$zGch;tt1O$)jFVK%LhR9@mV~p6YCk8+Hm= z@#Xwn#+lwuR&0wki9963(i-i<`_)@!a?G=qy}$6s8xgGsN@-Ms47TP*Su3U4TPy&+ zLevAWSkkbqBKi=bMIDQ-)r7^G&zv=6n&=9K)|gK#3W~NVKIOfr-LUV!YD@TiAZ&9? zolqxwWaWk4qkh8H2JeXNW8xy!I~02Vu;Ho$(v@V1B#ASqBd#ScO6Uy!R+oyvU)W`w z35Tmtfv(wN7RletzYneRX`ocfc8@31+yt}{T~CpD^8Vp=%78i0B1pYrXMxdtA)|5Z zwq5}A3{1mIp*S)gBPr*kFLVWAvcQ$vYJ=cDw?1k|$&0=*8ma%N>l#bTj8O3cc>@^3 z`~FM0G#)4EKdJb#D9}SbRUqJN+Sr(SxMEXm1+ZOyzqpxZ8)qie?<7uLC_hqYb!FKJ zbv*(Bw18DhCrcpPr(=0RQJ4wJS4#1Eb6&hj-`8zbmyV#*#O*CkZ9ui_tAue1!Y27*3!rtwva0l4*& zR@x}n!Yhq2uqot619BV9=dA(hp^R)XF4Yf$?n`+O#Ozv3a@B%HF6!&v>>6 zskFu~6Ypw&80OF6$#D2${`G;X`posMYLMOE_};VD{<(wQ;PM%1s0yU`x6t_`sC0IW zLTsBvya_bykW14^9omiX16L!*>S__zL?+35MMPU!t2T>f+zR^y7z${~aB;n7_3AI_ z`)y|OT}GG5iiG8zocRiZ&NHfVOKQxZ&kM7Fwib`MrLjgOn9c2^Dr^1+4~jYni2Xx^ ziKV8rNTr5QZ_#du8*a=K#N(LrZMfgy9~tF&$!L&YMa73W zqCCKL5u1EB86x16GovNlH-Uk&TA|~;Xac&8aO|97t^!sTcN(!y>YX{b{%+6_~sB7vW+za!~qKESH z{Fq0X{xUbP*4Yo?`A0_n+m;rRJSG(GyNbYeG%=mwuo3Lm+CLsM_hYU7!dWaEo+rXX z%sTzfJ)x?b{QdvP;s*wn)n)_4=s8rTN}}}?-ooLqrPjpf7PBt2HlF+Z#vu8_iq$A! z0qMv$Ec60Q7-(-+p}3jSRu9RuoiFs|Izf0Ky^dT%FH(}Y)A&4Y`Y|>%Lw7Cw{q3Vw zgqo+fCJ(r#`-Hp_X`gZ3%1L1-fM(hwYc7CyNife1#QqF}gy+io-Q?nV!eh znv&-o3rAK*kTqZjyu7`rQmQO#^A7`0d4V{sv3_kbx}&dHbY5@Gz;&VDUll)cCRYbl z5xVA?1~|jyyi~qc{M0LgEFz!EPJ&xCbAkd+b30x0)UcmUb9jAh`I<;S&m8C8)^%aS zxCtGs+w@Ep7H2ZIiOe?I9~)~SoUa0242^IC`5X&}v3hmNj91@tVk%N&^2%YBT5c|} zhvn1zW!Z}|&#jOf!0OVEg^l-$Z?SaR%?$&uBreQ>iAXe+>`SdYo{%F#A_mw7&xX@@ zK7-_(8pSM^`7vv}Ll#Ne*e%BjnFl;q=ZMO0iZriQb!P}(^_>q0@!tzm>hNZlks>dIH-@Q zwVka0#~rF#OX30y*?&36Zd5)H`sJzMRbyEHsrAIts1}^~lg6Xyd23_tyq-Y!{b*$* zqWpuwSwdO!?Jb&w)NNB}%2#jWrf=(C3xvzl8l z3U2KpP%|o7d59B!A}75Q%K5Y=>qSe2Xv%hrtBCCzD$9X?WK`92l{!^j7%1US=Hd_I zae)D8@lPO{@-0F8J4$ao4d6QXUGqwr!n(p==2MGTT>r>6R0la|wGaI%{*gU+Xs&1` zsS%cE+nf72Pc{y34GcLnqm|3jdN#*nC{x{2Af{2a5*B%E`|Tq!$Br&h)Dd&a(>Wbx zgzETw`dCaBOqs~LJl3++LEBZ(H)Q!!`lKQsOgicgv^dAgGQN0@KF!ydYS)Pjxc!s- z^dFf!dchONNTMzzh*p(HKOrb!5SULHe>d4d#1)UBs@QpT*KSz&8u*K=lG0G`ZGwm63hV2>b*mS@lNw-%GHM9kUnY9sy) zErn}g4Nl!bD`7oW($_KFRC!GSbqJUq^0es@p74gngsaS6A(bEcC zE40pH7=NqYUH<}gr3xV}4L?X$axU@o=8l962cP@y1WpNI%5&o8@mouyYPV9k$p%NV zIfO&iXO!q_6EeR>vhE*v8R6OFpeAP1yidyD;$zBRnwjjOT560x>Z0@(Z9X&nR4WSl zFV&^ix!RBa(I87~pIJq9MJWuH^h3|{m#6h|$&zjbYu#@100ZEx3Vk%i%ONwRf}3BM zoJU_+ZLU)z=6=SsdqWvfJ`%m}8ah$nNR><_V4=8}e=c+4v(_ju+c+luZI|fWvpck& zs?cIoC%c#Ri;hu1BpmmCJA?C!i@nHw4|lx2BKyK;kRHjtmsO+3 zYLGz9qJ^+W-)mQmtgx%wQ=-vLj_@9RQ%j%Dy>Htjaow-ZIyxWe0WqL9fVgfxeRL5u ze<^U{p5H6mH26{ST`Y1^k>>-m8(ej@mJ)XF-LgcVt`PGZP8Ht{Ie~#`-A9Ve`r>)X zAPqF4zFM-=GKoHG%NV^=6PBi1<0T}K;##UZjLg$p0wYJgNl9zN{s#(sUlp(&bwp!) zcio;sddyZw)S^|dlDQx8OQ{yPrd-7*!~xfggLw3Y7~iqWc%1q@@(Et|vMcsl*|pYY zsA0GsjQ7fPrmyw}I}52@cC6G!f}J#mTYwCmRP4YX2`d#3GPFonUt7;$!?nBb&!U^9 z*9w)lQ|tSkmHTKLsfB`{8@io{pNz@bMYxhh8(J?%jN`}4R7z@M z79B7ilc2xFJQI+dA!n&r@)X8rG7xyM{6JnOg~Zo6qX2%P$I`1-8nr#*+vR1t!&lW~ zequ6nJ?%mmV`;Eir7O9o_?aiU9xsc$z4Gi+EdjVZIVOt#H)*wJeFQo61|dIQ};>aQRIuWKxBLgS|`$^86Y2_$xnbc&8NQ;fI64g)<&ESWIojv-{cOcn~7e|29m~dt+6G zNZ5JdUa+{RLl27KbRL@FO;X=h{q)9T>%*>SSOCdWXZs&nOxZ?pth9g98Xg#0XpA3M zY?A|IhpqFiZ6BC3wX_HkDZe?5>prPy+>a0mGcMMj`KEHKJ;!v0--U^j>$vddKZtXu z&h3>kr8mbpjQ_|&aG!EdfPzkC5eBK9Pn*0|P2+nrh>fdDcp@V_<8R~IJs01F*h4jH z@dEZiZ%K(bRY3~SLZyA4VeN-eqS?&H731LUc>Nv+vu_6vCJP@RA5a*i8XMt;)Iy(9#-#@Iq z@_Yta&tMwo;A3rGOdrM@4tC^OXOh}(=}dG$x6dOQlJ#egyxtCwkRgm;?CQ$p`+`Jz z%*}aRHC)w6S{pYNrP|j_8-+m!LX*7P#o#-(B|+4}24`81N3?m=*=v5Pih+h(a2Jv& zkuw$Hi}12tU4Q{`~Ig+$M7dvR2EsaQiaE?3DzAYnnU;756`>|J?#WAKbCe z)Scb$PB&<23JnMKoIEs_x$lo_OEu;v8!&UTEk6)qCVQ_Zy8%aSjL8~=QnM4yX9k6q z!(qdAdP09_1HA>IKj1(2O9iZb2iZSMw%yixUujPyN^>XHss)6U?03YzQ3wqClC7JZ zCy^PiA^Zy)FEXd_ajRBu*kenO*O**)J{j7-_m50;zmvk=)Q727&lMRwf37X>6MBt^e~qiv0E^ff}JVYxan8?{wr$D!P_PKDM3RvmYkeqhrJzePhH|HZaLxLvai$M zWn_KHhP`aB+6A?{dW=Zbm~TfXwf-p22ZN6Wo)lm@n|!;hAz_;_l|s5JH>Xg(Wh0B! zEax-xVF1*nmAkLq;J8V1p&nY=ws7-w@BM2w1P<4A+&@>B#H0AbR(D(M3EJ2uYHPBe zu`t(&np+%~=V{;c7ahpN2vY4u-4C7<*^>O4r&)*qO-Q+!raD0KyJ*+OxbNLfh%K)R zjNf$AYV%a3>}0UFw0RX!;n~WE6lx+eN~|()o$1&x#Ob(L_)xwceu#xxxMaQ!O)BvD za?LXHD-hoMHIh-<;J$_*>k7UZWdH|)_80aVY>i!Aq-ei^@50|Gcyd<@ zlRHF@<00!*O8h<{71o~i=*aFdm0;QMO#Sw#aAtiY2aFEw3o+NmSIvD|MdAgF;}Bx1 z>Q{R-Qw$39)8Jy*o6sc|nc_945AW?Z#sDoLZ6&(so%ze4zJ%Dm zHJ;&!uRls^*%aR;i9sIN zv0Nk`GoA^cIaD|4882&J^P|(PNy(5_*ZMM?Z!g2@=nhk(Cab39&72=yQ%tX9Sn4|X zMs!m8!A*bT#nkb+73qjEz(~i(HBa(g858T`@D)W;G z8?+lP3CKqSRH|bhN>(gMef-tQG#nAVp|Aa5=%#n$+v@|M0!r66b(2zqmDc93n6cFE zuzJ~6lb+p?Gjf|5ZveLn03|6lkNL^%pwopdK+E<3g&VZu#o5%sjG7AT900VEZ9q$8 zf)8v^>Y6j7-fqAo{*j4`AN_aR3*W*rrl;ne*d+Prnq?!MYl$*h$xgZz?ZE=)E8uAW zPY%COduY~@>b%bpFa5_<>%hV<5dZ!Hw?7Om2V_?iis0SPQd8@w>0|!fm720w`0Vl( zW}(*4EnlDCbEEk8^R>jO_1+EboXT^{RidDx^y&X5^P(398>~1eq7&{sAlxBmcPOQa zwwc*bxW<*`ZZ%i8VORs)nFOw|7BF4n3er{-ay5^+^l%Rj(S1@IH!!KUG*_(=D$rKD zrfY#k+1ZcUPaOb3P3VRhm)UlXGKfXc0?)AY-XgKqBQgD>t(3LQazRa7{~cL-jJSNQ zYe^fR;(jaLdl8LQMi2z!e zG+=UNYn~(9s_@gk*SYpJZHuoe;(BfVzohPjlgbUuv+H{aM z?f({*&J*RUR9AQ*-8pgm%dTzFX368;?T{|F$#!v$J=&m#j6=X7t+xJ4ft|Y029^hm z>wTQ^jk6B8oW3;*OdR2v@n&BR2va&H1p6)ug>JeSOSCQdzN7!ivWFg3WxeP*+?BR2 zj%^*!`(K6sFaE1U*DU^<%(Vl?!A!Wz>em4k#xGZx(j>AO^koB#(}i-xaLG_bP2ywm zEZj~VvaJcHC$C{OaCqW55uUl+)PeGrES+xmF7aS`<4C%zuHSqD2SSR;cNk9)Jv5EM zTgRlCwI50$udS0q@Y0IsDfc*Ilw2!9Mpbf99<4=%!F7q15Sb>5C5?%14s-^tkzU-X zW#ThOQr#qlWLzG?t}!h4O=M(G19N`gF?; zO84yIBC(R+&KBk)?nO&eGv@g%}WsCUc=pCuk@977Ckz0789a z|GQ@LAQ1hnm$zrQuGF=26P=2BHS(BZDDS~u-;0xst8ye!U0c)xo*l=2u^bxgiE`sn)=#iB2g0eSlsntjT!st6*tgZgZ$g8{K-x`^bTS@n_ zqH_#u7!q&2{8|^6-h1g^3n3Jfai{`=E%7f%AqzZN3F0@|9y#U*?9qV~8()G4^g@VH z$!CGt-tK2rCu6#2&{y*OGO!)kUZ`XvKvxKe{6|I+H0Rwk#{t+bBk_YCT&ebSQo;pG zM(jYupukHY`xhv-;-vqMgbS92nVsGt1SLmO?Nzq>Y0%Wtdg1C=qZ8sa7Ni>AuC*Bx zCwt0F>yX}W;L65)%;azKT%ObNPO-zZR2S9XD8&i#wTm``>ALd7@`f3X!wsx!O33u6 z2kW*058SBz_~G71JqcCTT|2g{mutcw+CPkZ*^~9tl4^{TP{rp3TDIf(&+R}k`Mb^x zS;BG#@N{MQQ!B`@x#-Ald0`n^^J*We&r3z3#)@jv%Z z`k$s2P5;nPvX7wQJuG}D@;w`*A$rpAv01XXwX>o80%&y{gAXjdTo_Q6m=3;9Kwl{q za`!1nmy7m)w>96hY?~8%t&zQo$GhX%OG6yZnAC4*pT@T)t6)$Uc?MKOiH(i6#*WT8 zsp0rs%24+tHkRi}FDx51_w{ugw7Hdw5((i3`W|Hs3t_68NG|QoN5QR~A7OyR5biY9 z{ZV+DkB9@b`_0B3PAbRLYEa-=W~~t-h!y5%ffLPuor8?0b!_dfmXNz@VjF=rtpE;; zt;r3ldbXF)8{po8xp?c}f;87YI()ls(3}*(2l<5Jo_kBU+tyemE_`}^>$}3{z@W|* zk3xOzeFVbuNp{p>_&vU9G5$M_cg&$$rjYzhHnBqPeh)Sl+B-9avr;U-A)%k@rN(HG zQ`};uM95u>&sy>xW913OuI|~Ej4ARNuXZymEm(t6ekqFrZH0R}IcL$IOnX{6D{JlO z(*${(sPeL#G2%71>(glrRgUj4Y^sTGqqC2AYu9AopB;sR{u-$7@75<;&xJ(rnJ&oW z)mQP)Uh`L3cbygNRqS<=&mI8W&`oJCSRu9H>Sir*P=zf+8ZXX!w6_N+A4|XOe5S-C z_!q^LDost<$CIS!O>+^{+q%|I$tVv%{ZbBa!TrZ98Itov-j`VOAZsbk`*Co@w~0ss zb({*v^l#y+pI0371yI)DzO$s!hv+D42!q-kiqMz@1M#=onupHl^o`UW@ROzBh<{`T ztuXs92Ch}Xo}m9S_Y$dN}WS9XMLqF+fZKc5)T?^>)jaC zh%2hjtkxwpyww{dp!dh5p~A*5s9S z`03{!QoKYVY`JHVVP(K=EnRpGcsp6etM>ZFxK^Ud@=VZy;nnbP|0tx;z}yOnbZ&h1 z$w8KG(ATRJ+QTg&T~;rv)}8Y$-I2Y>7cy4FRXR7Kf3%T>V%TM~vOaFJW>rh!bsfID zUpO0nj!j*+{yk;W;ELF7T|?aN7mM*;TjEXp4b}KvtL*#yA>ZM+V)E*XhnxS%bl62mdGmWF#8HEV|J`encZArZyConDMeVA#Qa<@;{63lL2wB zu~q@L@0FYC=1<0;Pc!Iu65idYH`O#ACi*sV#R7(SHf$~!Z`Nd5AV7E6qd@T4%`v`6@yfKs3D@$*E<{eU|MW)V-;M&?1QgFswF^68T0P8yW}Zhz$r@&lgZ z1F>seHn(cNfPC-Jl+Ex)`i~iphae+nf=Vx}ZDy9=D~xiq%=+hgsZ0ob66UdRR&stu zD_<3HD_Eg-v@>af+Z zam!i@=mYuo1EKjXHxZsjF8p7OUInx(BP7s=eZ1{;8Jn}+_aFW;<|@x;4v;^wX%j$z z;wz3%Fg7!n=e*({F4VWRUF=uO!WyD{G77q|4gUEtKAGrZF`)}n3oZI}No>w;Km}a* zN`+4M*MWcG6=-}d^gZ!>ckApQ*+cVbEAMuIG%jA+sc|TPN=!|r)nEL}+B*IP<^c0m z(@oApRI(uZIgT|VyEY zrg2Ga^iiK4>+Ns7BGg=L)TtoT8m>7NIwIT<-*d8Jw@U@7ZTFL4O4&WVo=}4FIW47R z`Iaw)tKbO9V+S=CbiF5^1JbtMU>p7-sP9HieY0~_&q__W_u)aBp74jd(Z~7UDXc6< zrQU~krbbdBzv4}cB}XjDocfcpDP^fWza#7^Hs zqF!$%GzQYAonHH`;tt{Ml7K+N^}XL*j2+`lLI7S~*HGHTkFoRZg5l*(d!rffdvH19 zRrspelB*S?I-2a=Ku6BYS$~=7gMVZjjPn3#Y0LIKOR<0lnC2%F?9kNndn@paa!Oe& z`3Ikm!l^T1!eG?L*7(??U-|#V!WC=3pDJpqx9h!2u}U8LP(8jsdj5ni&0H z9Amz51hFxa0vKxlt#XWF6ejw3!APG%3xfizcAj>|YeV+p^h|os&#qit?^C2J0)qNL?!DsjRvl?E_&QliCM~HhYFpX7v zpxk-kyF6)7eW=r#&eKE|CmB-XbEO#dSYs8>gztVr)pI@0?;4YmlG9a%lk}{l=HWQt z(&DOaa#I#B#nS2k$y={*Ip`F0wD)UejRmXYnl~c6SYhVV8Lqi~!i<0BI070W%yH=4 zy_NFhu@-3ix4}c=0OVfOj3(@Il5foItRGRdsPRnI-4v3;v+wq-r%lVg^|8`FvR4XF8rtr}Z1&DNl@ZK5K;lYPmm{^)Ze?F$Gd(z9ZHT*(#n&+ zFZ01K^H*Fd=|Ru?R-1&BW1v?$V6LN&>7$M(OIKjs3|H^-k0))GIV{TsK1;&Ayk(xp zYOvjtN0pFK_m2rNK5zg-({uNLXYm6pHV$|44tsqx13qNSYg#5rv|2==OA#)A_fV;d z%X9XAarHV;$N-PA;X@RZ70Pplvn$U1lR=jFl?*a7*Gnd4+Rtjjex{%KxX#hr23$L_=xl@#HP}I}Dei8U*vuxIV|KS)_3} zhwh^*ZB2chS;XDKt*-XvP%P4`w)dNy!6P9v;*@{&f@uw}%re-wR%1}33}+D(fcSO8 zjOMPA$q69{=j+LEi2rnCxfxHJp1x<^9LEr~@fmyC;7>+z-^Kl&SrDbU3m!2y&>{2j zT+dxZ&{5=lY>I)BZ+L^{P{r*a15Pp>W69q_)S(30#2S>f3$;C7m zbb}E*(?=yy-Urr@{GEOOTAk@gv<*dw=oIp2M%n;Qd=Sv>oZ|Itp*7gViX?rW7^Y0J zHX+5I-Mu`RuiW@CEA@|zUXK$Q;u8Y(4s|C`$^2pUDIaC169?G|Bim&&5*@XJ8vHJf zp13TT`cc}sQ;O`>1h^*l&h|Tj`wDVfhQ@`=LkO#k4jP^;Bl<%JnNCq5@}O{U8{- zCOm3|anW4(IsInMM8~yKswvXbKExNaNVe<8W2|{`NoRPhnGW`=@(eP6Z`bzy|GzQe z3#=LysK2-X2k-J`Y`Q6S&cDeC-kRF($1~r6`7!-^N+k4$kj_S!R%vi#KfIVcOujC- zR)3*WK(ETPNH(*N>6|q^PD$dDex3rMUiu1UYl|QI+w`~~YWE=NZ`6&OqTwN>iTcd1 z^#^-J98=O_OuN`3_DmDT)GA_*pLOti{CG(2KBD;*Hz?nqnw@gn*Tq++W#!RL*aSc8 zMf!nK3*lXJ-f^FrC9@-m)-unMQd2Zr=t5|0z{>>AC=E9A7g)&FowMKpH7sbcSkT17 zvOux&W--pfAS5g5BCKsd+#q8;lrOt*y*N0izu{VH#v3E2q`1+14RnQ6EOpj?zEgDp z3m1LleK#nAt9ZOQUVHX!nFn$kV=HG5d0{gQ*urbQolG~Fj1bOOr3sEC?Bn5uLC}f| z$pJa@-8eR2`!$>`>}SrO)Syw_HpXUqs_>8 zPR2$Isi*;5c_C{nae=bT{F>9rMj>JXDPlj~Dri{Wz3fEz666mLrP&qf1xCsjdN}1t z_OaIw2py2#r?k>ko?De}X`BBOg{x$}2fYzY(?75+U#7#Zz|vF(HkroF0;dLd@#?GU zcLo;P%z8sZIH>`fV6#3)fqA&Ih_bHbwPfY*6sV142|J_gBXz0+;y{65^@zWZF-lXf zKa|xU!EBteg$`NO4K5IQ7tm5($n&?{Rw01B+N`YrpK7T%+jIfa<7p{w34@aOzZ%e7 zD1LokpMD(KyT(M?s%UalO*m3wK@nvmXy!za{u@=R%DDLUfwr3o40s;6JjJjdwMJnt zB=^!SvrlS0u`xLGYvYAq?+tsDbuEg1HMqBX4UlPZjDA0!`?u9zXVwYw*V=IETb^a3 z)mR+}Q9iYMtivNq*(hk1JXrMX*gLh8bKNG`Eu6|rOyswl3iCYcwz9Kf2lRPr>Ize$ z7Zk}GV^2{FlrOv$%P6SSdq**hnq&vy*PCD0J+461)Mx%p-`IvwfrwN(h*^ykd;ApJ zGGE%Xb!g~6GW3|2IoB4?l~fGc@@f4$Epn4@@9dX8wYH?nZ;&v=zZTL(l62(s;5n02 z)&}@<(^yV$vkBsWUk$@Nl7sQidvW%YosTt+n>zM$>F#Wb?NeWLwGKw^^wo%vu8*gu z&>;=1b@gf0+I{OI%JpDW|9mH3OLSlBA&&i=>AmuKeB~4}OxcCJXPOw89_o?K(WV2H zcsbcmSMF=`RIpbyV3RtLlj0&nYK@#EmbxFXAK* zU#r%3-XaEpa3!KC!hG@xcPi7ych-mquZlSYHdTEig*AC}i_ zKF!7#9gbDxX-WX)1Km-;7spYUFjGm_RJbIEepZ=g{T=GqZl`0qN>HlQQ>Kk@(w>vX2gr_h5 zBTML%&+7#qZ*?|pi~>6pHBS)mLuFB;`rRAGmZm1{BiN(2h_q3=<`$hg7*8;#n#vS= z+9=oH=1;q+LnUGVb=qqKnb^|h6*ZiRdc_)E<6b!D03llgPDL$=s! z#?$+M_Z4p*%&Lg>67F&`9(ODrAH@dPhKq7(F=1PaQaYUwX@vxU+9O+xwS2|P^ONP) zxRvR?sROwqG&S8t#2s+?MZE1XF0nq$=$(>c)w0#zC335JCP=!?#vc5>8tnha|2$>X zIY4@>J9h&kE>Zh2!Z;@mb5cMhZO(v@bK>MOJ^n=u50vvX%eI=WAkm_Q%bMVyg%mL|xk+|BkDC+B3ll zRuOE{?3}@@Q`uvR8raFxcU(~71D#%kp=jubM&zZe=bcjou z_17+zFxT&e!hP$<3457qYY73u;hO7a7}kQER=`-TCGRizIaK*W^W+EcuhGFIid7jX z$}xzt{NVC^7)SDe>nB~gM4>LD9F@m~!GAT;FPdv6`y4AszqmH^AE$9)A7cb(YTX%J z>0wH$&;&R?-6Q?{iqi63C$L&mYH$@|*ge2{sbAlVBHMO}I8lm<;I%Ejw;CohDGkTY zh6PlCcJtP<2~;){0SsG9tI!(Nvw_?St7WkS-Ev`%oclL;f_#)nl$qPFr&RV6-xIl8 z=6?%Q(0_U1A?(PzlQcG-?k*xbuaMe5Mp!P#(!5R(`H7|Ng#c<&QCxH+i{9kXBX-F9 z>-UxMzy9>!6msmJ=f&ihJPe@XB+iG1gZx6JkUq@8KY;m`UaY|6O!^Pkusgqemmoz7 z-Vc_8%k)Xq@$HHZt#M_MfbBx>@PAaTbKKr<_vD7 zn*y3o;MKF0I&x^jbYojs&PAr4zs&FONFd1~;lQ8e@E1U=Cla3n20Jq%tH&bimOKOJ zThp>t^8aR5*yhL0csXk;Rjp}5zcqwcm*BuWma2_XZD6SPZz%1iHo5_an?DLj)fDb; zZ2I5G9I_tv1s=Sm1tx_3%s`-F<{uBO7+ww^?{`tR--3pdZig1S+vY)y51FMN)|*eg zrPI&-{HHGW4b#jp8MYNpkoXwQoS_?Q&K{Z4?o2?@?pWZ{6WX;xKQDR)zVl>+zc05K zc9q61bYbIW^sq%li!=+y+OsM*puFf^P3_T;U_$TKoDakCqRn054GFwYNenUxdEhZy zn^fyv7s~p?uTb|(^xxl}Nrst8M*1}Rs*<0aoEpAZ8i2`7s!DkBbvcPy&!!uj3W_D( zj|fd)7|11?eTld1nEgKI0Ee0w&H}te_v?}M=wv;9quki+)oCHIGk-XNI9$ZCm`jKQ z(^p}9<=P%J#v9EB06&clG=cAJO8Irnr8cfE4nXO1++f4VdS|{}mUsLuE-!AU#B6)2 zJd5r<71>z`%E71QxpdA$F;=Ddrsl1mfKsh~V**8rkTk*}FNPG3;{)Hrfw5^=YG7;dz)y?ta$s67mY!^u9Y=TClkhKTrcjkGm zfMZn(NY`=dg|65>(&9}^Zbg@*t^Kfz#^;8Qy>#mLHdwS*QzX}3hs_nP=#UEYh5#5e?f^! z_`-L8JVTu~Wh_8y2p@BM>u@`2{L!}_Z&4y)NLWuQDc`IUM-uBTX1u`J&$d7PZmU12 z-*j9Y`&+KU>enr>V`xx~X3hdr&}FYaY)`hx3BR(WQzw!NRua`c`0v#py1vNAzr-jm zBrT7XV_?KJdHC76Y1b@<`Y};P)(Grp4Ol}2aP*_`X|OZ%+RC0$A9}c?ZjRcwCHgcl z-O%vq^wmM8-0H5^6BBm)7g6>`)*T%GX<(asLh#${aW+DrN4#m zLLnkzP~Su!Mmq5ChEHKOq~I_P8=EReLDSlpUV?i}rQoLD8>KJ*$PO?rRju@x;~1eW*uY0T2QRE8o8J8&z~h0xx6kjQ<^juK7sm|00Y*G2`J)1xbNw4 z!A=gG39BMVl1=bWwl+Zbf`h=`B}8#8AIBiXk|wT`wF`?Y>N#|o{k10^j7t@vk$TH~ z!I@7u&|jm*g(LF~Zf06TL>S223*!rTq87Csskjf)1Opw0MqzzPmk-P@LN~fth(!V< zrUcByli+B=;|>`VLELqt8ClP`C5H4LU94x7Nn+MO9{{fPZZG#G)0>wCikpQ|95<=A zT*OxfOaFcpAhzEf;D@>hUZx0fpsAr!*UrOhss{yl)r!!L-up&D=`aGd2Af|MFgj;C zG$tDL>tkhUKJ=(nNFd)T8fUXhOSO0av;C$kY6eo3)GKwRIS|3u;>R4p&7B$tPA!h) zKJ9g754#ly*V;wO&vo}+@2@>gtG|AYw~Iwxxb+1I$b3Awu}kot&?OFGsKRoeR`k_;lX6V8i6>2&$}ktQE4F84=V16(=2__ z1ZKf(OU%_9@|7$Wo}y)=r4*w#tOcdn66!PcGL0sGQPkdTy5c~PXdvlQXZdhz?aJv* zRwpT>K-$Kq>m-e^;c_s|lC_P;``j<>aov@(zbq@Tk)i~_7orZSGmoFEtvRj8Y#G|~ zBcZ)5@H;eFhW+Z)3|3k+3iMlQNF_ZHWzWpyt-9^GfTxKg=9ObY^I6%_+;K1Z42mB6 z1;3w;{!u;heT&MbOkQKc6oz&kY4I-e6%C%z?>Js($3JOl=qj*X zTF4=v7~`^8>YMdHi8-Di=%;S1@|#Ux zTN9KefvxCS3zMn0sKa{hB!YZd-T}H$Wtt)cy8_Z7!(bZ{XQhtVUkt)EQ16e6D)O*7 z?xCeC;PWR$EV#OtrO3K==rwF$Kr*>K;X7QAJC9M5d}xQrVo5zrO&{EPb2K;+C=~uv;4RXQGo-G*{*_Jcj--zDj zVXuQo5t@~de`Gr*y{_y*Ob%SHVZ;1G%u&wRt8rhoyrmhZ77WJHv0))>CNQ>d{&@8p zi)!E_%{WcGTJ*L9nf$oCyvz+7sekp`y7N3ntN{egvh6NW$#zu;NlD~h+sgsc?!wnz zBiWg+fSsF9zr9k)_(w(_YCQ}6^{Ir^nRwRLe57{;j6_;~9XEMDR@%SXlhD2@UnxWXt$PA@2wKbWT^-JcaB9jTf2W)kS{yGaqjS3 zr%XXWT6ubqJ7rAp1>Sy;l1?c+)S+|_=-E+KY+e~=y|z#hIh zd3~~dNw`>zrhD-S!tz#Bn_GTIN%{D%RQc80OXau@Puy)tav~HO@U?Lyo@-uk3~{R2 zpqZuFD4Pw|^A-NDC2*a=n}`LAgbK=H5S?;l?Rta~qi%n%u6a88H7y<|zJ zE-GnA)j{5m_gkG2N7qyZ#)bm}+%uAJL3wxKPunC?Sj zo049iI!?f+z9`!Iq{;16${AIa*%bnZg%JwiS}P1s;oMB)^!bvlMXc3s=L=Fuu-EdxYuV32)N1A-etv|diAH|m6A@wXg#l`=r zyio;23?lbeHoEmrD~$5O^^e$;$L$+P*t2tuH6oKK`fvrU+!f zefz(~=u|&f>0IrS$wS999h$euc~!p46Ax#HOgrA9e5Y+-pc{TGS*G93Ei7|x_lBd( zXWP;P&-m$NLcBfQe9HYK1vbR1g}V}M3Aods4l}*;ab3W${PY~eS6S2N5Un`{K$Yf? zU1_8!z>8hE@TCLOHu&+^o{h1Nooht?XD*J3$W4Vvs@Xbh2Nv7WifSLP=hRQhmdO!n z+lsQ8*5l{H8$s;Z-r;L};Mz(hvRAUlA$wC~935GQJ0qFr9NC+93fVc1IxEgOTev&x zP-Zq~pOrJp-Xo&#=ldtTetAA0&!1k98=DXL#s4Cq7!_U@v|G)!4IOGYUuYR!)0!N= zH%D`}ZXfh(eO)pTwU}z{i6JI$LSp>GW_UH6o~NWc_HO-^D5lsN9Sgr4u|O;(cfpes zwMp^TG!jHjqWx_?q%XU3hG7c8!&&VspY|dYHR_x((`gB&WM|%%*q?H{Vw~jt+`Ejj(?KE{Lx&+TOh+CM`zWieP@cCwauT%}H;Xa} zO$CGtvKuvFY0pa~aJ0P$WdkwkQ;12#`sR*HW$0vV7<-wXLS@E)qoW#vj=e-@L<$M$e@61*l~cFS_1Nr{}$#?icQtrHmx3-*@_RLnH}N7LrZ-Q3TT z$_{7;9fM(yuU*x<*fa&W5Ac_Y*Zfh(eUK1}nKVd%jxE+SXK3Qpx6>R1j!n9`7$H5( zgL&mYM${Z!qPME9)rkq{0=^xcxqhgqD2FJk=@gvCtm;?+gqmx{KtI~>We(n6#qJu< zQ-mOo`Cy}s4++e?b27nf@fKsV1tabd#jwmkMPGMI9;vZP7yKyF>O_J{O0DRid!WUk+rs1L zR@#08u3<~peqx5Fc(kzK|Nj^HTsNW&P8Tkscl&yX#JAy$iHSvuYD$g^QiwtJ$7v#Z zee3w_l+3NdRmN|XX@)eeJ zOMH~6C2&m$Q-G*y4V7Wx$rg*)f0?IdYbY=L<4-|(w%N$poPGbwqjrvaU1i>`C2%xL z0_W2M$a>>WCqmVtHGUQ$MB&uWRSk`EQhnK}WS*2v)_aCid>;lla~tFAQZ$qAKsa#c zVVIYMkRuP5J+H_A$|lG>r1<0dmC}kJk7`jpKgR)sy1DgD2(_<(_tD>%y}W z$HVUTLe&^P`HCAfzDVMGRYI-qa`g5q69ltOjbquAO`~v9uv^SKzQsmjY7+*Ojmo&( z8)j(AfGKFV^uw+U8I9H^=~SElN@9fZpKFHBb=zhxJ5`o(U>mewT!vb(jN zcI^T~=Ye*DBq#6MLkBm@9;NznKBo6IK z3US3cL8(CIie_S20c3_^E3Rg!m_D+wlLVz*UTuz|kIlPxbWdv=q}hHF628^80G)Ry z+CT8ZA2yfzQ6nfO;``Wotmr}O93Fskq6D&HeurnZFFZQjvYU`lIi^UR zX2{yM2QOybdrd(^47OC)UKYor`R2Df*`R`5D1~Yjm&vd8@yApvG3`%uI$2GN7~im;{-3LZ#)`)5vPV`^ z_|ZnaTs=^bv2HY1#G{PzQis)|<}-zj)`SvwCj&Z@LjiJ(<{yez|W&M!#K+3FQ47QwhuY;0n>AiTa6c3Wtvl;n{GUL{`UQ>9|jpiK@E5#5!= zU3eFP7>W*4ms9E2;snpi^0Z=T7<*{<3>z^JAx>&-B8`!r`z0i~ zh=fSvdViqm_F&o#tAiKWa;i zE7SH3zn%&)Br;_TfrWnRehF6OANsHfP^^@-)kW^0_JLjo>>WK5_8A2^9iw%_x0 zHHTfHZBG1j=bKR*M({&^Z#!Ul7~N@g!CXr|?)%==NnMsV%>;oqyxy1FC<_-&rFUielPB&k*iUIJ0ce+&3hcO*S^q)o z-Hjytqv;5B6yO1z`fD`Y=pc7%WQ95hhZZW|LUh*3j}!AHzGQCK3he1W(Lz;l8dH3K zPE;u5g)g;EQx(QN!1~)9Lmio>Q|-4uG9$aXRu|yBPg8%S^)lO9n}^{Zxxyo_wQ!tv zZT8)X^rU138kXsMkR*!wLg50rVT{_Lj?Or{+ZB0y?9#GE@16DKS29~`=%XM9FI6-? zQ#o%#p0Q+wu1?w6EWPgYhG|YYjY=Y1-q-Jgg9VdfWdw5IV%9sf7P05L_KAJf^wbiq z3W#)JVYW*?H-=qkG^}Q()=k{`FAy~Nr0i|?FbQ#cw7tth8IsPFUecJB?zD~NNIxX6 zm8JX9Cu>$O#J@hbjVYlT)BM;=4bAVqKC<>zKP^v8zM-x@25v0SCh*7+&@W_D{Kt2V zsL2|p2}6kemA@#^U|(ZNW2262M({m)WMe3uG*$i)R7UMYthibYbkFb;TxO>_Ji1p? zSR=Y9z3PMc;-?A5qaF&gwl+1tN7qOBHhC}5SnYq^)t{qD5#xpB;Y#%GT`M1V&mx4bQ`5ed+ zrh*Fg(A)!~0sjlj-O0pD>2Bws7O95anBp3U0#2xEu>o*JKA>sai(c1)(whrMyL|(h8Us=kFzzhY6bW6BLg@JZ<3O?d z3C@igPU)_~dkX((7Fm=2Dh3{7?pMJBkV;Xj>|RdI8L&HeI)Ps7`{aK#P0!?#t8Xxb zPkrN=+wD6}Ij!BDv8b!wi~S&<$9$@?wv=f)d~}jvpWDexMBYG1hQFL`N31wIgv&4| zkEEL9fS;Du#qFNoGcB(U_Ee-xSV>&Ju#>~Z9HY3iQBsajlyF666I&6IxV_6|$x&g_ z@v_6=BHNt%#dAjsovsnjfQcOakuKNT#wZw1#xcABP1OP z^;91Ry21!__0W&6qy6z;-Bb7@^S##1wB;E|%#sow<|(o5DS^*XwIfXmG{l}1Fx5pV zt%jaU;zp+SbB{EG`yK7#HxHsos92qZ1jN?`jKDI5-10+#5}pG`TNK!v zT3&|P&QP^F2H?GsxZd~!o~OJ1%qpj02Xs9gC_!2<1}w3UGcv!xDlec7$Ocf|b7IJb zOa)l&aBUIpt0ZP>`i6Y@k4Dp#ZG#&y6VB4&i#_%Fd0E(Ie=Q6+_E)-OPVA53S#xSU z)bu5YNeXd4Un3*6x4#ScQtk6|OXMu-Kpt;T^A}dzTF>Q6!9hAhIVH+wXMap4sF$*NSYY44=vn9w!;!^*Gz_P3qlv08 zRe`}M6L&S83aGWN|Kw+e50K@R_8R=669*NiCt(@bKhFg5bB<>X?r|4h);J6V7fYZJ0WQ^1%CJEFOQA?;0j)x>xx&Ylx-=-X+yftRk`g3B$e>~#1<>< zQ2F&~8`TD#Ac6g&oLUZ)Z?|A^n8LeuFe_x^vYS$IVS0-f)*gkyF7T$l&s;rB%KIm@0{6>9EBFOh=x`tp9#Vh`V&YvHszMZ-M*)@RVu{^1DuBUrK2z&Pj+Z;&(?64&#q z{#Jg)f=2&_j#?dStWP?t7(?V|*}2~~LXYBl`3#)|p9v&$r%pfX zHrvx~+bGsvREKJZOEUJT&;6~S-V>U)0NiMvziHuI)^FoLh>%ptX(T0FgJNx{7U33s&BNuF*Qde_t5aM%^+xUJ zk^Mu+EI{#|dQmHG9^_k`@FRMZb4D3dL8|FG0GReade8kIo7X)R?}QSgwPr^Zcd%ts zrlPIcmM2_2YA@q!rVPw_j(7}NfX>a>5$m)#AAOitsEtulGYMM9Gmk*=*lnGzCUGOcmKzSp)0ehPrU?(B}WHhUaXJ86{41U138=~ zygU6SEm@y*Vbctt=?p!ME;_S%eCQ}`U$_K;kb~)ykt=!h9{o=br5`JK4;5Tf8C@HlTYKIr-~*S3LHxJrhUEBG8x= z`(iII5mAw0^~--ZEYDNHvYcvmqhWM&r}8!MRkEpsV7#c|Ht6l!cFA9LhTN*g8X`60 z+Y$++yxoi(-35ylx0q>6{B;(yz7R&Y3D6qx)+_Q2Rq3VJ_K-2wCqoyp-i}^e$xd0I zy7P&s(4`Tb^fxxIydhJb%}l2fiH1*~aRmm$^5N+px=(}_u>qS=mi4gBALS! zn?}*=;%kBvVHS5;M_9#Nkhdi*s3ts$PlZGj~{EAuK`g80Dm>}=}(G*pAO?IzcFz2l+?R+qHaEXZkqt^um{OhfhjTP?=w zR6OsQm1vnFH1xk40VPS41$#w!VTwxAFk$GyY-f4rF7cP)2yX5^CXfo!T6i|Wukg2{ zPTKBwOc3h9N+lDJLD@m{ntX*8gLx%( z?v3vyL{pHz~W$v=4@$=+Kd*U$3GO&D(){)qpF={w^7wFU82O5Dlx?_U- z9r;$}-?RqZIhZ_+UOJT*Kesje#=%k*sb&gVKCRTG|4j)W14IlaAcC<$v1X*11Df6v z(T(#uP4W8{8MRF4{Y(_U>8ygF$>81~4A`Yv<6t#U`_0xtU7sK#?SqML21PQNhPa*&WgwB?>5i-z(-5HI@cQeLeYqtSI8fKz!6-yBEx;SYLY&64gHm4efw9L zb&3Fre7RSjVQ7qZYXMjt&E1stO!#$6#{FbZyZDDvtoiO?qtp2}!}@J5wWM}S{?1OZ z&;Bp$_#U9fIi@U(%)k?@NP{iPK=a8qj0+(s(p9dWzJkxumm94ip3l#C5Ng#iCa0ji zXu}z|2&LV`RRwWh=kimj&PkOo)-ng|GiISy&r^|4GmUivyY{YL!+VEJe*Z_4ELAvX zSQ>Qly@h*}&pV-6{KdG#b5M<3?d%%51L#r;2E>`Y{LcHJ(AUZ*V*DRX?O>L#xA*N5!`8d-`(*@ZMyI>d12#A+WDx zzKjM`s5#;|1wS7dv;Lmvm~aH56(Vc9sZw{>Oe5i%X;H+J+AREs($6C;jx#}_9rH}V znLwxE!wSd^KnBHvbR594CX%RM&?)JO2B?bl97p9F^6rlz#fQ3F{Dp8^KK<&!%|c7j zICjCJ%b^VKkOiQG2c@QVqkT9XHhk=_-Wk*ilMKbrX4QJN#Lr3jewVxy4%$;nDMjyU)2}I98%O5;Xlm{#$$S#qCx{hft~StsL{f zKrh*O8`wO<*F8{4j7Uzzq;oKC_WP5@80XpJledDeZ(F$a%7(-=FKrm#cYnE-Bo({b z`bnR0(wt-{BCtRFmB>heOZK906q_juKk`a|Z`P&+?iAlnr7wsSZ z4=GMorP>-B3AC7|>MXiuh`f-l+n^O=7)R|Fl=9FuyF{U};BiQ*iLs@`Yy&f~sn&hq zw_hQ36K7<4YGdjR_e_}kqkFQpVz0fI87nYCZ5};huX-I?=IDhz&C+SytvIS^$9?89 z(+=|7DoE|naY$AME3U)OtlH3 zch|urSUvPxi-ut<{&%j*{^fVM#Nl-!4>+IwmDWW8m28dpHOF?Hp7$y({{$&eD|zj{cJQtfFilma~h5j;4FQ7 zgN~z%fw3apzo3HPmxc->R%qk+uxD6ZzP-vEmZn$RuOCu=BMkw*(N3s3eFm4WXuyvD z(>5Cqesn|W>7(y0!lNF9cd#<;mP^%IxNBfJEVIK#hp${=T`<(OS}5)MT*&iq=F|n%e zSK?u}siB0Q2-390~%=O<_B zBYN)S-m-%~Nj_oo0!nlLy_SiiiZ*_-*fN7CO@|VVws$}t$n&$Bl1abPD)$Bnj8CY# zVklyI2H_Fj$%Cm3t{Yjag}t;xL4Dzon7MWzh5a-VMWM7uMv{rON&k%xlky+KEkYhk z58JtM+#w8kOWYd=fml5f?LO=NM-zuCuXC?#N>@V)$>xk7*uC9rdOB*toM(xzK~mcm z{VsG~M~P=j%MD&<4eWa6AISHtV2Zq{le2U$rLv?4kjxvR4#-2y3(E{S!8% zuzS>+q9!ac)~FZvSA0noX8U(ewKHU6?UnA{&A5u6p`53S_wWV!sclTsS6397)2ewy ziP?SdrJd`?bV+h>dMSoD*!Q&spOUIYm5u4e zrkp*2FN=%EC^Bia?mjgnbX_~k5;2FN1SC#eGTq3?&L8qyVe0}_d3PRYG!vSuM%$M_ zH!u73FK_PM*dqR*jq=9+1jR@&H+NVDDlGd=MPsrA>z@9XxZJ)cyogFnUAyGpJvwQh zdkPY*PV2~2QOKxc_z_`WZDZpOE`mYd%<_GBqNUVD=Q^|~MHdvY$~i<&5o=!&>?~Ah z+%7KIR!#Ige_`+b0LU}ZufNNx?9pIzV>RrR*ZjFIYwkUwm9yn2by7{XLL;@90<8~t zV8~av|6#DdN#!Cd0Qkz+#(eh^``CL}FJ831sb?%x#a(p2X$GVi7+yJ_!5* z;@I$Mz`0HZyk{hz3rc{LO9o18Sl)%$+!HDm&zbYc-10`J6HNdN7H$OZ5{LalWnoR$VBa`+<_&p zJEymd(K~jnd;ZuxuQ@yW^^bDprO%&06l#m6D9Tz}b*v2fpL)VKvU533t8l05m!Ufk z^>Aw{5K>%z^REPa64Y|S^NM{|cu`j2x{9yHw-WC5xm&KZbS!s6`QKM@_!h7A3`2A= z3HW6){`EX^&evxS8$i~Nv&{AYC*of`?1s4O9sPcYyF1zPIQB_(yiLMaein%0v?WygacOm?@2B}bw58A z4r#{MxYHu|kx#YR)35Ma2r%=JFlJwOn~xicY-dhEJ8~7KtY0Vmvu4T~gmX9BBD#xu za2L7cP@R2&j39a1s=GerPy=a{Eqv&It9UV~A=V(xsFB>kr{pP7h5r*skzXqRrW455 zJem2X-_{Q3Y4O}~^;!Fy2@J5aF=blVc?eD!fb@vB3yAqQoXctO zk-@7w#!bZB?R`eFGRU;sJl^`sKbn^{pCblW?prWR_J96Cp=T}xgb9~eb$cu1_#z~_ z(MTvsF|{8l@*{qQ*_BB1i(m1EL1L7i@%8#$`A)+AZw=19`TQ?N6Z;^K%#q(`F`4ot znI1lw;%c#x9yX76E3*#9=s#B*XK2;@F`r+wGK7hiL1w1uvXa#C@a1Hh)<)N4RgjU$ zgdn?SqmEs^xv$Omlk`7K#ne)}UWi!f+RWSuI03qL#(`sXA%`HQ*CO}-U@&8TDYPAN zd_`&Z_W$$flbeUk{m>kt*1t6yj9JX{%BW=i^wIo*JBZ(C{P5JD)9V3cO%_(Y?M80v zZ$7LpchZ(1^wdj8uD<$$xbAb4aHadZobU~ZE888OY z+i-7~T=jCq`fbK%02!G-h-MuxTlkr06Sf^U5Lj%}7m&*C8742MNSlK4PgJ|I;w{9C z(fhCV>J!!-aOzn*-0wAE5{|8qW! zBT*WKpTLV^>lp#EGsc|m(lbq8Qk}*5XZcuYQvsV-=Cz_4xWb2`TKKHj17(8(tw)jz zYJolodC|W>cjEDYg5CCnY*5Ce_lHZcK3@>}=`-Fa@xogCh=*X^+m^?tMf05EF?BWg zJ?G}5guY^1AV1rdya>2U8O7(zWdi)w6&>^XfW~3mN-gBYOv4$ZLONkJC)7){Kt5sw zT)`hb{}|277||EN_@K~mYkzK@uFwR2STXNQNHD~zP=JBPs^~xcGXDR7x?#m#pf^NC zR+ij{wH;tB)xL!H(bza4TAoFWtgJ$yZe)U+H{RzyC^Rz0#j0`v*FE-(JX4Kvro#($wVC~lDLot71y!B=aUh8y6pif6EI zU0sfq$;JpBr>%nZhL(3Ry2(~J*P(YNH=`Ba5j6|YpnlhUe$-{ziLd%N5k`5p5LzxF7fhxm1>l{`62N>mGC?Fn&ASi zmD`Sg!EOE#@^3eUWDZY5QIhE|6Au2KNSBS(SzGn=qWuBqr^kG^h4|rj{`_huyCI6# z11ZH5;9pPQ>E}J4WSrYlYnqceCev2z=#(S7z1`Zt$?Jx$NQ;zTb&N`{)O*wdD9a)8 zEhy?7ClEU4E~RQ1RQbQ0h-9+uW|HPSpWf!flZLr$fb1EnQG3DF65r!>cq0(mi_&UG zB8y9=MU2gQAIi%@BVDzc+I7{&Tw|kM7VWYzbb~pIO8e$%$9Rm?@Ye<>X-TDG3mep0 zS0a<}jyT06eFq=~fLKnTR+rfb>S&QDL=EhP&Mzif)bLMQJh{!iFC}i>P{1 z1Ig_^dco&%LOAN$o4uNDQExdt2WBeA{{*PPUlfb^%P_G+;5ODzpx&>P46BfG$-=Eo zjwETD;CKIKY^YVU-+kZ`iSM@y-6-k!P^OfycA*C%>_&WEjO4VoA`mfhFJX{?yo(aP znl&PLV!aKjb}Z(G=HH0eP9jfr^mtudM2m zgc38s;kVA!ZS59L;U*)5b2?Roo;FNPJ($V&`JU9YU=VdoFd3j;bULCIr4SpPq2ohs zxq4Bu>6dcEm|fgJ_P!XR;qf(3 z(_0IV=m-P1Oh&RgRUld7%@B&&8uygEO=V0VL+RyfcoXI^x)v~Y7yyfsNCN#H<@ zuO!-k&-8dq_|D6mY*?p{fe8+#C^2{FZPe!yr0}`wf8oB{Rpq)k)6B2Gr}x1la*>mm z)^U(PuLAALg^_d^3w@via^OCMvy1r*ZjN32K~<8P;m?gB`h`A+;7~{ZplSi~?6*~` z!Zgpd00V0hnfxc7EcIhQhQFjT&1$zU5&z-H(3t5rWIN3tLrB+jMU!C&kF6C3^~5@k z#QO+@Ma2}`$Jv{+{e?FL;e*?iUQR+lPXV-{yuzD|i{JVf*N=Lc0sO0}*-rbFY)+1v zQw=OuUl}_{ERs1PO6a{3lO8SnFJU8eK?!v!*Z`SaDq0^pl&0e>ziW*ESWd1v>@mAJ z77t>uV(Ck!C_@P7`*#ZqSaGG5;=tyZ)A;9i-Xu9`=;e6?L?=q&Zqujj8@mx3o;K$X zl$dq*d29HPZG7wHgGQ%Q4%wnyu|LFAe3ZE+J~XyoRYnx#dF<1=AVs8AfHvXpg zM+ytUwkIs}4z}@cR;~=njK|(A7+#~pwRNqMS9e~b^;h4Len>**Mfie+QcadSL?6d# zuH;f}%~QdP$aMtI8J%vu>=d+5Bg@SJx_Ga)=Z+1~2Y7XUtbBmCKJ7tamds3&gK1Jx zArdrx?0cN*IaXFbda>+Lo-g5q#=p)&U~wP-w95f^yAO#{dsuSEO5ZFhng5=VX`+a_ z=y;C1yTP5U@d`Jr(A;JGY1&VO;fu+zTNP`REZcP+fe|T!x+#c9{;|U-f1F@zGy>=X zona;B1{KIC<{f`Ce=y!2q-BbpjFW%Fu*MNJ<=*IMrR8y$hVZ)A*%SS$sUF&K<#n>o zK_zo!sObEZz|Zh|y9bNE5+wbku1C7TGkjpTzzJGzgpCjRUiX0|Fz5_AI&v4mEXztTstpi@bB8eCq>8PQC+e?ZNpf3 zeuh)LOOjD3ku~G1!N`o^F)BJ?R!8;Xi`XSXQlNcNXy3y~ESc}H%%PO}b*%bMg^GD~ zEs71Ge#b0N9v6evIq1qx4=;39nw6F$aF9!kZzUy)PT)+j$`q9IQT$8abg|y@ah>}C zr6!47)IXI=1@>yzL5*{|yN7?O9R(){30Q zpiq5!bTTWq<)=36RQ3W>Nb<$*ld?fs9pL$gO|@Ug)t+6?n?8FHaE2}>)#Mqzzj8g} zcw$6Nis@ODrw8Mk5KSiN=`*#5j#Ue@knW=2CxI$43D?nnvKQD)(@}g({8fK$v7^Ve z1mw18!85r!#pkm#-2ikl-JePZStj3M!QB8vWo_RnBYA~+8P-Y%7GvMSEG437i zef-_u;}38VP1P4p*d)(9ZkI)cX(*t$5L^U9o&)xg5=(BdT<}JyRd1ueyRK~F1pA;Q z*JW1@O!r}|D(>35hY5s`(-0u=WmOO8uSv9^R!Y+VYahJm=X}Ki7%yhj!aV+0=PoO9 zEyN-(=7{a+!e|28H(on=IFlq}Md|8=M?ch;$hgLpSR{A;yrU5TnK-pv%wq_%Ad?*P zVU}NEdqX_fs?&&33)HscVITAg+yMhSv*;W_6eK!*vC*=6KR|ZJ;@LDi}6t28`xzyIe z(2Q>y{tNOBgcW6l=BRc^znEaXI{$+q6m|^lelURh4AF^yETC8;cAMXU{!>*^utAY6 z3ixV6Wvb6KnMVer2IjnHMhCHqBUp^ScPHtj?1ICfn-7asY1NDChZ3rXA< zniet4c#~wHu~V1e<5PBfv?g7d_oC3Tuis$dDgp7@mWKkpbxBFn#t;8&j>FWFanTmj zD?l#=aggt7Z?!@4e+8Wf4|%&Y;ElK9FS+Kc-bo}f*sTYccKgD7S3CXrfSe#Edbu(+ z@3s%75BQxQ_c>LrpKJVDlFX+H=GhDbkbPRs_~uawk3zI~1<#Hy!?#~Ah(LrZsk$k7 zpB7u!aPGs4Z@YQF{MMaZrCo_%@&0}PXgE(JW`l}W2R0AYIXn7F)td&t0{v^BqhEdG zWMRZl9b7F9hOtYa9*<`7k2&cBa6w&}H^ z-vdln@7Zl#PSU*941QBx`;7nV47;^O`osDZ*Ije8=G(%w@7}+=+ZrozaNaumvF+%(bp~e9g_pn$za3|>q~!?_1sYL0l|hluSCk3Jlo zv*UB17KFN#XJZ5?fB2Wa5__3h8@FTGZtt+VtMfAXCb842N&sCLoAbCYM-Un%G7^-? zQT+8E4LC>VPP(myQI0-1nt7|V(IQ_Gt}_Ns=S0gtnL_WDf$4JJM6Cn&+j~rUN@577af=OlQ7w<{ew!@(_QI~| zuKglTniL-VoLC{bk_mCCFD$|Iu7GDOPv~P#;qAs$`+Evyk^WzTs!T`1q~!mXd)#jl zgyXxuOUWhJ-?#n)7dScVN7q`>04idfZ=6u+lW`bPXMsfUJm??%);L(Y;2VABAcfDUDi{;4~LbdsZ_o7SG z1~ZRypkhx<+8xH8Fg>vfk*gSrs*1&lXmc8+d$TDUSXCh`r}a<1`jr^GNiXU2sdU2$ zGDA2+ja;_MR^!tJ`-V7$n;Tl=%z~cz8PlG+w6|O4a_LPc+5nhld->zche*(7+dv$WU=@^bsih(6|^9$B<*0Abz zbVc5jTob?uY}j=1+-BAYKusJ<&q;)H$ueEg-H7Y^{mPjGwP+V@5#P}_V`TMVtV#`( z59;;Fie?`#8=$p7SE!`oOhtQijVF$kLdM+5$A}W0QItxJ5tdofe!&dG%&Iho&{eDU zG?1;07(|$kT}rG?@bHWfBCnmgoM>knPWZLUFIs^OFEmX?ol?N$pCq@!hC2KOSf1H4PD zelmn&BCpEwfS^1y_IF?zikG~TRgxYtMI{$`_o6#sh1$NZUL_Ts1BLUBpSK~ub-X-# zj^DBFT(`5Dl|1c!7Bl($T^HkgoV-wc@1%Zht#o&Z)r@3`n_OC0jTR_f6lb$4T4^G1 z!2Tlj7hf|6WABr3$Cz(jJM1c-LV~7!U-LsOib@Ro z=G#B{Rb-Ns$^L?ISR+%cY2rg1oB6wUmKIKP)a{B#!8V68n$hTqCY*cYVdLS)pxQPD zZG~0^Ea0}cAogOMLK)!3e!Jn=;3m1$SReO7TfzOatAlmzS_IF#&NH6(ES#W#%QmX& zO>4f4`Qt%b>CSNyxeRZ}B+Ho3`3g0~{nPJA^Zi-)AZF2+(b}EjQc|vd`GG~x9BEsl6xTXA@tn?%Qd{y7Ym(C#8(7oW|V3P(`b9r^2s1GjusaNd-qk#NyPg7Y0h>K8Oye>!Lcftm9PpREo_|D zeHsGOz%&2t7QI~@`oJUAG%7UuJYfFOZbP!>e2>??mhxKbsagA?flOA8=#QVb5dez@ zE3W^(2cKyilP5O5opol{L5?P(oeK?dGc$Ng7T-aMib`ig^AcS$fR}HeYl-!S zj5bq1fFhm8G5lKhC#2fERCQ{ahE|=Vt6ddCN0BLhPZFFg~&}njLJNC z){jHiwmmBl+xh5l6@iZ(!`#1yq93R2@Qb3J3Tj_N5AP;*E~B?9v4uAF)*E@0W5|nY zOou!tu)K;&0(wjlcO{nUgsdH3wGXvPzt(X()o!Er3M@D+r9we`gT1N>jkfNN*tL1F zuSg1z;~$M-@W*F@6bkJthOW(nxv%>fTJ0(twDrj+ogv8$ksfENG%VO(=n^Mp8rf2q zo&F0fDndb*j%8OJnBc_C40sNJ?LY|F`(<%s6V^ni675TvUnpw5_t(C7<4hHvt2m7K zD;0c^Up8aBY}Y(DPK#y=2MA;8y*)eg}mFpE&F>EzQ zi>M@UgB}~IT4zwkwnv074h%BthC4l|-K;uble{)xt`zAENuo@Uz6iKNXA~0+aws+^ zeR=F-Y9Y*OR4ArpfD=e}7*J}nBg_3w^km7(lo0QNQ3~@ED5`6>KZIBwSInUfRU)wPMIgZ%zX8*j^D4Hs zTCjtKB-Yr#SQi{n6;%a|&G^RWxgsN#6`qbdL67Sjldm0oYEZfFxAF2gtTqdr&JEN` zcM!JEkhE{aS7IW9g>OrmQzD#SAZ+^0PM#J7lr}tfcy%r=;(;I-! zDS@G-p8O!|Po+YDY-uac2d4f9+VnG*`~coaO~WySWbVZLka?4}q?A)Vfz+zVa=f_P z6xJ}gd0-jc@%J`inuY>~drm+Dbyu(-YlQAB@K}4BZk>o`~#(?TO zQ=9pEx1mVzYWfnZs0y;FRZ6_Zv(J{LLR}K=I_Ri5!Nr6%BFM9~mHExOl?dzZdMBj6 zuB47-O;%32AdXgIio&|dh{TpRF6d)%RPv9^EB1bou8$QYsoRBLuD!GHa3XI~GxaTZ zbN)_VRYXIN(5q5HuLFLCm92DhRu0KMK^Z1}{w{C2_xXt5JCd3tBRaoHnd@dIVDUbg zB2l8RbK#kv_);7AQ1uSTCmqlHalbq4dM9lXOz)*zi-go@tQ&)*&{z{o->PEnJ>e79Njfg zfK>WA#7hbgi623lU#b4^>hs5%J3|$)6@*k<@o~=SZY?ur3zE#*S9=;*`&4sA?Ag1ODpUjZ4v_+0B|*03 z74f18V8k;irs}EfomElfoUYJpB){j{8aCr>8`aR9Zk~=4D-BFYIQD;yG)-jkoRlO8-Vi?s zEjddjjj8zubGC;T{|19CB_&=XdxK`7+H}f>*qE2UdPF)GHRYz(|4Xxew3~8z23H)z z4{^ZGrmM#wy;eNXAiqCLZr0W~d^5Sj*mHy#EckI7EC%K0OkIb}lvly&-|hHwVuPsF z8vMkDb2;8uPEXTX=zp~Lp*^FOUrXzXr!Wtd6$Z}p#ILUpKaN+YGuXQ~_a)w&D|DML zL0=zdEs$iM6~ox&c<&A#Ax^KAEaaU6U}COIO7jBw1tLM}h?(%auCdv|!eWG3L3T|a zm>JI0NZK?ZJy;pzFO=J|9jA~u$Gcv@`Fku3z`ENWy!@%cOYZ!~b~$EFj2*F(4N$x3<^hnBhjUuguUl>@syLk(io68IasNy;<`)1T zQgR7zM)%S)4uMcBjkkX}eNDC6u zijotMjuFy~F*>EbQqt&vAuTa_&DN7q0hb!GB0t~&)Ph@}7qn|>VkWtp18_&VPCW~-HY)yr?|Hddb z3d|4UEZodtX)as*h0d)|CuF=}uhck|hcu(mA)Sp};mSX<$95MV!U~w8ZX+J1%FOz2 z70FYK@PEmE);4TGJ@&|a4cwqj@XEUz1D2Gs47qtrb~S3 zI5Zc-1e@<7U0&(x@VcnLSSzt*cwwT9-?;Bd>vMOqm$><0-@Waz_g~(W&M(Rw=rQ83 zuL1`{X!?9_mF!yiC%Imym4Mc=zhmSGkBfT0WLUKxpFZ3i~+&G1yRhqRPDo2YW=so3FYm{r9z-t? zt}!E%%E<0JYm#{r;$>T0>wbbWWXp{Ym2xCdK|Z+%gXM^{dzTiZH^*SQ`R!-rbIM;e zi5zJnCKqY>>?wOXcT=hL1pXt0m04Y+L_^)&grA@CkC&gi17TS-P({jW8^|h#d2r>$ zJkg!tkE@QO3oA7ZEu>wv*3QcD%sx1`24WA1R+hn}Jqgbe4`hQLd;!!U^w}0ji#^N9 zGgR`qqYJjg%32(m6n!!kORw0`&qHqQn${->tE#ASTnHDq@8;Wycm6dPA zkiLb9U69Dfb$j#m@Qoo{M^?9>RMKr9IKoe9i!h zu6mrrXS?8sOMI5&N0|%7;Y3Xnf9z)lAuVNf_&TZ@~udQz1o#} z^x?hAfXX@5sv`}7g`Yo4A9c5JtlmZj^`g1 z-+3GB&11KQK39+LO2zSI*>C{|BRtjN;P*JGwa>~`__L5n*_a%YgN`N$LS~4OS?V7d zWGCgU*+PpOJ?T87%-X%O4k-Sggm{j0A0xCDWq(~5W|Z|~bC&C27%jZ-mf&iys?ebd z?4u8RNFxc@&g{jioa2`%dUwR9Qj_<~KyETK+tl!R1V&~xCI8_oTV31nD2#}&514M| zva-4*AQ9O56FZw%IgF+WxFC`5w#?5?>c30jw2=(j7nfbI{IFivZxD6QGPUTxtHK0` zq-Oy-t~`0$TidvyPzTwC_IAcbh-%BUi<-?K{*fVT98Iw3 zrddR7trzrJ0bqXXu(#~tBgcsp42wV%6@F;8vq`NVJOpo?!~zb?d+0+P0E1cmt;&Ak zQ4hTby^1;y@7M?nyaWSti$AtLCD#%TINQAEzR*@m@3<&lBrI3*-qK;1=sT3?!G=WPFoducHUOx#^QFpotbhk8F0#tU_1))s(bV3@4xyY?l_ zKYl7VbP4CkzReJhg%BSO){WQzULoH^ZA`2_N&b+6c24xKKU{CK9ZjvgtrdY-5fv4# z1xOD-DhXRhFm7owu$R`MP~r(70ok@-yux&a8@fBo{BGWY12AW4cz0GhzJpkKF}%YM zaE2%+E}Ln;b`~A!_fF+4c)<@7l0U8NJg9#U2`D5-sJ2(GV4`K#mth`ab2r zds`Ky*VPC%bt66ZT4JKz@cJmp?}YQu_g1D6w-2%9am07H4Ro$XGiv%?dg*wUF<(i@ zvk*!lqIDnt_KK@R@2@Bg3;Ye;NTh4oE6B16P_O>!7iJp}$#Zd3(Y2JF zzhzM2>3b@CALU{6ie#*;D0t@|8O8aysE#M+IM9n_08&aEsc*aka;&v-OP?QZadC~i z`?cggF#hAQXcI2d<3F}-*2=tE9uh~ca?@iMX=YK83t=O&m9xL_0Zwl3xT%%hCV|zw zFuIJuW7qC0eK^~)kiny^extCN+=>zoTZw!HTXBz!;(VybewcmA97 za>0ed4q{Bsr8R=+Qd{$Zgx}rr3jkHAEH;#llo5!O#5NUU^UmqIq9BLDO<#gd+vvxa zfo2++PGS^S*o%OPE;T9;?k%L&d6u3MkWG^d@_74`r)xPOn%mm4JAjZcM>XhW|Eaq-CKl4_f1WjemiwjP zewuQB#r1o5AcHeaLmB16UdXMSmC#5jUMYwcrjuTvd$7V1Tbb_zmB0P%NI8h{m#Ic# z_sZ`FMkm1gjLrE#C?(S?~)!yLo5ErGJx z%`nFhwK)IamGI{_Q!@Mj1Ju0LCSf9Re_w1Pp<|dT$PD+I=6W?UlR?^*)uE;Kwn5^} zbDR)hOlY8h7f)Bng2Irnf7$KbqymLG$)fTvc(rVcyh%z7~%TpgL&(dQ{35QUNw zV}UQELd;Z4`5xaB$!D(85J@oI=xnR;5@OCOvBobMuk6qg(pFsxmq)6f7<93Rb%Ubv zUz@ZFhw?Ql8%|KyWa$G(&AK(ayn$+>=HG%H&k79TT4h&&$@NLxW^;Yv>zUO{=Ra9U zS#(Lc!t*YEfqReVLyUNmIZdl)v9EtgG7q5l{`5?4g9DuEbt-@c%l4sEF4Sje9?Mko zC%GJ3H8%2jhA+!MZhNMzi8%mt+lt_MoAI@ffD~1?b=WCHRz<`M!zLgA+rW*p1Y2sV z1yexvb@o(EI?tsli(1)fWAAzh>WCxkX9GyDErVkW<<2Iv^s(V@8nXG(ty8kHI&`bS ztJ{_9gz^|w$#czzbuuK!{tv?FR-kCg(@j-Db~=On_LRQH z_en|T{V#oTN8{WucH>VXrtZ2%pHvF4nF=PEf87?x&GD&ddp3Kol#wT3n~}K}>W?c$ zb@NyD;E-I9sC=7h=^@K*U{?yXi0o6@Tu z!H%$*NLR0TL)5}p*?%xH_~^u9Mu5-4#fwXb{Ph>)tJ7uqw({f-M@3SDI`2!VyJ@Mz z-khiXdQgTJ#Hn&Gt@uO3LwgTLO5EgGbYh?NK!VSXMvDgNnL4xQeCerw*6A4#Fav+f zO2FPX3E9UqX>e^0pqb~LGjUxZXFbCUvR!jP|G(w`>2Y=2G1N%Z7EJWr z2wbW^%iaBhXCIpntOy)NC|PTWj4-+-eR35keO%vvf1Y&tI!s`uh6$^8aM`QKh*QUy zBbYz8A{|EpMZVZ!3C8ce?x`U!x_N2dDvV}-h$Ou}Q2e`nG=$<}3pP_q3b7hLgWS>S zOxzfLW5JKxb3nJv@IU(u*w>zW2`NgtXGo;Fj2AVkWX~4u^%a<4oho_S=JjIgou`gK zaqJ$d&A`@RH<{mEbFOAfXUNwW##_q6OmdmZ2}G6dmw1`Fq}|4KNM0HISYcOL|2|#g zA>k7I8;fadkK*&~S4xU+B5O@$AiVy24PK*QL(6+0y7_nEfw3Q&KH68$X1_ z%p`8Z?GHILR4L^Q(W>#9C&9F1lOuk0hhyNnP?ZN%cJI(ODLm-RKk-(B>1EsvZZU$~Y<^CDy-<@=kWOA)ElQsxe*8>C_3&;=1PVG+ zRsxXiU(SQN(`SSawaJcURiomK#HKbRbfcZ*0!x}X zRV?f-jQTMFg4kca+z!k-vQ?>`P)icZTyaWfvvVGai4!<3xu=n};edsf(&YRjJM%kF z3xK1`e=Vit{7Ep@M}a&@k^x_3fgz4${O-1VewW!%PjaKlSjZ}64+j!D?q0pY2>>lR zIL={vqM?2wAh(9#{L*BZkDk!|m+vN(Vg<03u1>cAeSiG=G!Vf(--Alyv7lcNeX4Ic z+mN6)QFE3_RfG5+#Om0)j$<#M>Cf;>)#(@5#rGO*e0MczFxJJLop{e&6D2GzVNl=J z4n$c^ewuWF8ZG-(Ggd;9W?kaVf>nLmbHgSbWKK$6-StACYEfjA8b{eQ1eM#Fz^o{LWGwe$96=zAy%t>pk|7xmz!` z_%bu@mkB+Yf`QohPM=XVK(wm3#R1y=!zak=##YBqKGaf0EIsJMhZCP*3QuuIpG+Z_ z`6_(`m~^mRyt*);S#ySJ$Cyk<$ZspU{rCKYdj;{6o=r_n$cDDI?2O^YF(y=$^=^x* zD?vbD)?!w};f_lS5g-{qJN&z!`G)FHrGU2um2QbdVeLUmkX#bW^13vcj?`D6W6)bi4Z_HOW|c6lIW?duri_Ua0PL7d)q0Tb`h|45wYF&6i~S?xk9pEF zSpBL0y;He`ESa)qQ~9n{{1;g!!-*RwInz zqKXi7w|X^=Rj3`R+uWlEFi)1X%*vz~u`$@|37IuH)i=XfW89fVhsqP0z7`AFAG2cV z4)GcV#>HD0a0sYljR3agLmiy1#ZRzj-Z5^aU(mGUfhjvdPVIQn?4CYW%iO6g^ z4_Mv5)ueS$XVezz9N&vx+N?AP>G;RK2d>h1fT+Fe@?| z>iFC>JMPG&f2)(`Kg6B&UmX6qkDP{b^oZ{G zELi{iAH7+tC7b67&)rCo(I$6qMXlz}ELJh>X)y%CD=C<^{?fDYIj;?9t{BFQU;sg5v;t zBi3+f-2c|^!4;2Rg<$sx+HDL8l}>MY=Nv0==#|Es+D`uvI7-D|SPV z_n5xxrq^G%@^o=(_q+3I#x}dnDw%go7-~eMC53<6WJD->J$ab|wd1&;17?x1N;h>= zisWn30RT`D@l)`zJ@Z)iykVnQMH%=og8H$&p&1b5ChLh1@;E#Ay?fsJmZizv*B#-d zf3E>)WU8j&{9V`s9)J6;@YF?CDT$gHdbss!`pr>{vBfTqD8&r4QGqJSU^I1W@yO zAU*(hJawTXY(x5|bKbYXmD9qQ4+7U~im~`EwNI^x-PyK1(n?3`j~KJdaY4y&a0O6h z^a0aqsGk?|u{LGgoxzeE-|2kCpYt~SH^PR9PnArf{gbvchFD0@zGZp21O~YBwDRf5 z&#AnvilfT@8U`z+=6)s-KlhpzkNr>r{-Ww~`OkNfujQ$VTCeYd4)y$*TdVVl)z`)c zcXh;Ct-o{y(yfD-j9xeslYL8MGbOvyKH@QcmPGIu>+QR{Kw!JR4ULPmlgt@NycBX5 z6dk{4AolrI*!x1nmD(?Z+l$YDbp!$&LMgQlaa4yNbf5uR2kqjFCh z6L;gXKhQ}({uyLv`?6VKQ$*1>(1ANA=WIZm5^(c-^!V(kh^gI(k%U<7**x^qy4xQe z44WaYUe+$!j$Vu%Koad^AGOLk_Hn>BE?6hr8j`~^(DBntSuB{TiH?3ZZu!KyUwoy6 zGd5_pqdDiZnL>sWm*qQzvytnW@v6=#-8+9x`tMU9vTHo7qyyRbJ~P!h$KkbS-y^4# zLF6NL#BQS_F4CBi>7y>sPrF8Q3y~f}E0n_jBckP!jCCH|di+^uxvpTQNWnBfc-A;K zrOK#85p7+2oGfCx-f2>hqN4QI|Jkz)dgH2G-I4rS^Kxu!84leFoA7(qb`X*=z6G6X{49Lz$ z)bTQd8smi(ZeRL>AdS&VyhRhBS#sO2 z$TJJ;UnrZKu0s6Y&78hKV4cg{2&9^34EP${#mRe+d_2HdB*Ad$Frw9#%69OsrpY}C z!WT7cB{$TQ{!6llScr*y?|#;rH~I6m4|PYrbIs0kQC-^*NLNEs+tldcrw9DwK3Rso-qJQSz%G7K=_$_XXwTE zx?)wDo4G}*!@WYm6!>|MR{f!9qYiUnrJMPF8H;up9_qIDJBRRM&&dbk$uxt>5_=}y z$+&ITxRF@EIxSmzsPs^*mi|BFBhi>BNd?nnb8{oTGsu6@qA2QSWifz4if*L?d}z=$ z7bYqe^lT9nh{kw!I$?2FuU#Aq$7Is91g~z(pA|~YqU;3qzl0d>j3R{zvZ=*#+0gMfE`WchjT4nL_`Yc=p35JySNmC?0Cqi2f35 zsycqKj>hN@{jG~Xuo%=VkV^>|+Z%di+$o30sK~)OM`v=dURBq+Tn{~DL@5&j_G1f~ zWZQKFOytcv#4O)V-bq8=@qth!h=!k~hj`EjrH^@k=!_0%m)kHdxnex;c`UbwKQnI( zGYGv_8%O1!1l$`;Op($kcknqCG>C7^PdwGl&T`TD_##Z}k6O=@og`MWqeNvm`JJ|@**9Xkx7ZmkQ_OfPEI$+iM}po zi?fr}&lj154-IC?k~6MSdI@%@n6}s=P8a?P?DrRPfZ1cqvR4g0{>3NN%t{px+(VVT zB1e?+E}B`a&U)G_)<8XC(W7-3q1Z*Ec0SE>lH~s+iw_E8uDF)dXe_LMYQ8@hNRbuS zoG|Dxvd@&cq&Bc~!Wb59 zH6LWmOWPzKSM4MQ3--+DA3hcte9k+9v~NvgbiW}xWJ1)%T>W=j9B!}MKC!a}!sE7= zz}5gC^2PF!*YH;=quUh_(taYN#VC#W-7BJyNdjB9-Uj;IyFibZH#7#8dV`{=nBCM3NIIoQ5{Kuqh~hEOrJ~Etg*Qw$*Qo zu$Z;-lypT|u`LgqLgl}u5Q7a$;aJKweApfB=U#U59+oIWF*E2MNgeUx-1VJe=f@lF zbJ#YeOkA+c;FVFU!)rgLH7PhEKa&KVbN@W@zTX%e8JPUhl+V?P?Bb+xUdH;_d051g zsd6E!d@4_RZ$D^Ci@=Mg%{Fa*$oU9?lmCF>Y7~c4?aSsxx~7)to~0?v9u_3@3nW0|;L#-8Ln& z)l>oYaM52us=qb0oJa6DJ7wu7{xR`F0u)6&122Q}Jx7khzBJGZlN)yZy81`vT5~h? z0jnpOjD6}Q^Sz-bUZUotkeMUnOKIA>G{Y%RrVUimQ1EY*j`;6LS-m>KBV{iS>zzfR zECVd&+<8@!a=x$BozD~^)R%>Mz8AORqXNH4ubi_=c{{J+MZVrPw-w}~Afc{WYN4$q zAu3V4JY>uIwBlIT)cbV7luhje-Fl^2M*dn0@Q+dJOq-C&wt9f$Q?qIjPpPC7UH#nj zjpXo&Kq-jO_)Ko2mvi}##^6GuOZ&FzFfs`*kI{w^ejfzpJcI4=wfyZ*%t{u?8(}Gb82lU_76adLDjM zQ94-8(kp;NNiBJiy*0GOkCBBofPB0JIsy(m^X@2u-{1S>ITNjNr z{C1w=sVoawtxISXIQ=HCQ+8gpH(-Fr00*nZ0?$4)ZTro?q{Mz1Ql`r`@ig7MFJN7p z!n&B@ZW6<2oh5F9^D&x&`Pn8Y*w`Q>LruT^9{f!%gtUgHhqnORuWEvr3;0ntGtC7P zzy2h73QYfgv^3}5IR}BeKRAk}-X@M?n71%g#5alhQ$O<3Y};mvf5=$6{*KFZ_`=tWG-fo`;5IW@ckUiq2QSGE(+}CN#e=0(sr0G(LlWm8t`tu*G{K~soA%sG>A8JN3RD{6> z5et5V7gZ5PG(6kvIDz8n(hcHD%-YS=d;OhH`3reA2dU3SDJwX4lXUOQ8bTnb-RyUm zNb@4j3rxso@rwILcDG7&?-aCISjVdDcX-Dvb?qF#Ow}5Z;>FLvKilz?J!Luqe37Jl z)`9w=v5~w)%>JrqitdJu(y9#IR^$9DFcovbZKNbb99wKUiPF<2h^~m&#z1aCcYz{J z63+MCF@|b=;?H$(MUf1fyZrP$Ao1Q-{rcoA3>V)(NGPOy0c6&=PqmGkfBi67RM>tD zWF@mu^`i@yo8MAte`t!Jd|F0|kIG2@&}NF8aH^s6&h^RHG4|C{XoiF52t%R)=IG7> zM)M^qWnBzLajCn-*zkxq+VJB^^phhoBT;~|D)7M`R8ppCh^qLdLjT@_n672=+=*j@pT>O z`W4aefj4q>XM+|f_%yNzafS1w;hC6i;QV@j8Y!pV#+nDQf8{!ON&B>O&`1As`q?r!MZyD za~i|6rti3F%~YNmKEy*~XvIbO`!+q?llP)^Z zeVMIb_K1|bXk$0KIWCuMWTgyIiauYN7Gp=pG42vSTs7L2G7=fHMD1B;wr_?;&Fp=v z{~-}EAsi(a2XAaIseGsHsT~u z94gY?x0f7SQ7ysjlLf9)LsUV&Z}yIX%Owdj+QiSHlDD>7IV-Eq2L{+DQjtqki;JTN z07%6E^#)ve%|f4)a;myPdoX@1MU9@n?QDxjN>Z!)dc zgeqOR1nYc)qr4=eJxY~R6R|50cil$B`Ze!X1|Ns6ZQMD!aZ@b0) zY55=0)_%U`KX+>f1sqhVX!htg9E2aucg6`#%SzG(XYA*6`!`PuChqM$=$zzB-Co4a ztzJIsnV0R=0(IC5n^kDBe)28VfUbeLEo z?~1b-Q*nlQsIw=(R*l{moInqG7LoakS1+^Ry4rvt*XW+c35y!r5=L?%@t$ zjc`BuN~0X~hhY;07EJfesV3T3gEZKIAs$|?K9AFTYX?2{Of75S&#-G5b?*-GG0OK3 z3wz8JncIGml=?no#aeCK&`cP?F5f0^pZ(xS0^h0Gl9&6VrPtDYDT}%?ehz%osH9sm zayP7`VxDjw3Yh6jEm~okR^SoSE1m->E1FifymEC^ea z7lF4)IgGXYgyvI$-KDB)Lr#v8wrf+C!) zo_kkq!-uOTP1*!Mr@Fnn}ur5j*b|N8R^B<2*PsgIwX9?Eo zCUjOKA?=2HR^GjO>w5Ge17I0=jP{*j1%Va{RrGc74ej}-o_}P_r)~L?>fw<(hpLFG z9ZE>CW!t=l3vnOC?U?BVu&2;=2Hp7>C!jU#)4%A3{xB`~*DD6ACKN4U|AW8aFVSjR z=Ct*YKY6x37ot$C>G)K{#xk3on_DGl zK;4X6jzYEabjrNtyG+)AYAgNROsg?>bjkzMGi2oi?L(7KN||rvBz(`lL}!?Q)ouHw z^Df?JIC=tJf0r&Lwva% zrQD&Z<3nH}wH;yBfSN+4%CJQLktxqTC_=Dkh=p7?2_$S$Xa8+Su{OJU2iB-TPuPC8 zsN<6MAa~ci!FoLQtqwW~#K&Q!QU^fdw=jzGY?y#v5@|XWJuZ ziaOBfxUDnU&-B1z>}H>(N%yAXm;e1$TmIBlM-x1ue@L3COMZ`p4RmqxVlhooCXSpK zr=0NFbbJ1^COX?u8^+po7f6+kCR6{F%(){XIMVn4pXk~dMSy5oLVJuROEKn!Z{M_G z5+n)^zY?sn-(m!rzf6mYaQaqxSN5{`Z@M5|6Jn$+44l~+-MbMK$ZeCN)2c`2F$*@r zBYzTPg)b}1!B;M-G;t!C%KSbSxp**}F;NpClIde~rrXqN-QcHR9OJ4h)oK<9IpY*A z?8)J5FLooCwlCDh;SHJ~zBePr&TVapZl2Cb2Iy&PYvR&3j7zA$Hji9m>Eyn%)b6%e z1iwbr);}`(EWngR&g{*WP--M>Q>%0W4uH?;`GtFNWpWS@o!L(v1fiA^Uoxu5RD;hk z)%j`z-aog^eZd6h{L3tzuR!7*q0gS&=p(*__Xdk}j~#;(nAFjDg_dO-lUG%!{kXk- znN8BK){tFsK}RZwr*#Xml<~lD)EEkmtZM9&ex&N6AST)kd#y#6`RkA=Q@61$4sM%i zshFBkrNv-C4>#8^HLcp}&h;%WVT3k8Hwx-=g0ar`xz3XLA$B>X9KLycR_{_|6-tXY zE>yO3L~YuBp4Kr2yQ?t--|xv0_!M1?om!ibkR?tqSuJ!ylpSONN+y|3I&AiBZTWex zL?sQds%LZOXcyt8tzIi{1O>u~ zeh*DD43C}M!Wa)D6D6+f%dKs;eJtT8g!Co%?m1_zrUGM*A&EjNjUbsae&pOEr|c|8 zVVfROAx9Y9f$U=Cvi6m0opoflwK!tAdFJ%;sd(YLbhE~6kD>y~U`PZ`{PXMekpN}H zon3}J23t>g#WV^>;dQnY_o;5vR6ZvCR68-f51Bp;zjG_&b2F!f^^9Y+asG@M%OCVb z3{~y8J|$OaJ&7$hl96gm0U7(iwV0TTbaZK9`P*=;%XDoi0op#1nX7kjQXn|>>R>jl zA~<4(w;r9|n*&+HpcU=*4V81v+TE1fl3I!rhe6A&7Vjy#GSP!7ls!wd0UzB91X^Zf zM??YOXqMP8xwDAKPoAEOIx^=x+R3*UU)?W!3Vp2F4^!DWu2lM)_VKjt-gZ!6&I!zL z4ovARS18^_uuE$MG72-|A2f<*G!P3FwI{p#_p+54Y)fjxbSGu|4r&W&3MEpU%LiN> zrclDaJDY6Oal5*B^q1x0OU)L3saImI4%7mkB6Ch{#r43L9qdC~hM~G~~?*0<6A(x#kY-qwBVQ z5F z1B!Zni<7N3%;=E3E_F{#S*vboXqm)21!QNN6wI2K)I^jw?QrrS@nOoiuF!jkN`i1J zYR29y>SZHvX#K0>()>CP)Vws3Yldx`qXl0_b;z-osY&+Oi<%*FCwm=drSK*H>oK5o;leBfLLXN=Knq zVK>k5SCXnlm7A^7OJaYdfp%&MGJ0wzZBzRJ*|knUl)T}P7q~(>$WW)u8mO86N@9)< z_GVu7Q zqsMNM-c~hLe+Hj$a;-eBX0GUA-^BMiJevjqDB!{!*8DD8{ii%}S^Fgl!xRAm5+Neq zl}5Qyu%GiKQr(jS4oqyCQJz5=LTpuuhMp$Kro^aq-LWg%vsRmPd&z_d)^nxazhbsB zS=!Sb;+q7q0;wr4PadGu^*3;z~^(<#n)xpi_s z?kdu?8btULCj-$uTAA@*5Vbh$_)HL!t1b(UvM~bk{bzw+P^5yC0P(y)So+eyy+Z0M zbKX0*N64s;Y|_r!XZ|G04ta6U{Fri3D(b1tLAayVI}8^%IS!N`q* zLdy+D2&R=Rn`_fP=_Q&?7_mn{n8kCIaA6m<0AurKC%^2|$n@NW+= z@lK76Kf*Mei?-zyV@G{tH>y|K#soJ@v(oFqxj+~6D{>5h34vQE4RsL6`&~cjA%68r zqU^wWQDcSG>pwYF4;D;7U^Ng*W8}RsD4TLSJD9AA-$5?b%}IMiawNUq7`{FcCqwcw z(+e`T2z&m%|EwGQ8vZlbVR7Xqv>(&V8jFzNVMZv67=CL`8+)IE?tEVURiAYxu5!1k zLU@8j*TPclO?xIS_%)M3e&|ynR$;%65600*;g*VV)mp(+M*yu^2PX}^cUb114LcWQ zgm`XPbs1*n=f%FxK}TlQ+nk`(lW;AAX;J`@@=r(N$}EK9@5UK_A}uOGe8a5ywU_H! zKcDuJe!lGjm1}@U@W`(kPT6UHJ?4#-rMHLqd*zPe>t_YkG|_%*#6tdeNEIF{wE6|5RgTx6UMcye2%6<$#H4cH?% zria*_N6mg^tL0o&sI_@X*;#81OzCkr_?q~$s)Zqy9u=&Pyja#Ob+eL)V@EEjve)v6 z1aQw+j_bzenZ7_aJ{ENR+Vz?x)~~j@TVmWW#R5g~+#A1-bY zu+l_Zl_rakfa>$a3y%Omv-kq1S?EYLKo+eTNBY)~;Oe5i`bubAjV|oB-x6=`RiX>>k1X9H?1!BvDuO%DKeC0CHE#YAk>pTh-}4uln{M zS&YE|7o%*CTuZ53X4Q2W-l*XtYtN$wh=43hix|J#O7x{v!LmRKnj`uy_ou`T$4^Hy zVpGpXeS){HwH`DCKU{I${V%WDfnK~TiruiYsH*IH&1P$q?8u5Qk#xPgDjf1+I1F0_ zm)lsu^E(Du9nShTo0`9GP3<^sW@W4ce1?%n2x z4ny9K_Sr0leE<2X?h#&@+_`26+-L!o20lQN)Qm3aFhtqY(V%*b>q58PkNkwocy)dZS6&G*7;(){C5 zaGroWgMM0%LjUBtkzrDFQX+|U!7?bL0AqIWM92z@I_O*aRMM8Ejh8`B%eItG(Ls{ybkhO6M4HcM? zaYNXnnK7IYR7X)|9~C}m7S_mh67yE`abov*>^JZ%nr<70IWh<;Cn7qk8M7ETK2ndZ z0-nUKc{d648jd3rxiyd9l`s+6WcEK{I^+(@VNb)F!N$d5xy)r!Zz!zzbG3=5?Jj}gWM&xWSz``)6P2=!Uo2jD{j z*CSBVdD}}|?dcOH|IOMxnRfG@*8WQ7>g5a1@;J-g-BWXvBgC()xL6OunWeHE6};g$ z(Q_#I@(>dxev*5BN=thl{e6)KA7<~RQUjCcWJ@>ffNih*BYVRMKN! z_LSIDE={ge6<;1nk)OB(FYZ*^*II8kf&$H$8x6_?pva?Ua6%B^!Ia}80zY}`R{yk; zw(JE=Fg9$Mb;$7{z z$zk29V+un{P@nY-1>+f=h$F)pxsEB=_UIp_GzN<$5TUj;pjxy-82}2D73VT)DOd!D zYj!Oe;v_t3cO6)CK0H~Ss^#u{*6Z4l`Y@Zc_-lsRb--%rQ*MvWazM0Aq79cG-KNn% zNYz%*EIX=cegxv@z>kR|nl(0m%vlWOp(>i*6#^NLZK|>&kG!~BkXe@$vx`aum*F#Vv(;avk>Bo~!;y`uA5idUNKtOlI3>6Z|UAqq`=GdqRrlw&)SC_5gc+-=R`s ze-$hzZtek8CTI4yQLLa+rcl7U*ATw3as!E;l`R}dQO41>B*j*H@{G$ow_LwCS|9$V zgxwdsgstq~^G&&CzX&V;1T`r!Y|)T^A#7_@$qE--fFcWU0Knob@6#7{n%TEhm$geRu9YGzW3Ui>PP$XJDL9n&W z4Fbsm_b0hJQYu$i40E3MiQd&F@-%s}o$Ta`YNzg-96srX`tNXvOTo-T6U02slpf?L z5KMT%O28Lo8Ep>*T=Vu6y3Th7xHu8WLXI8wyEk+#7XAxX;rE2g4pXZ=I~~ye=@Y4} z3#O%^UeXs|Z^sHsd0x+iv@p|@1sT%;By%cHgNJ?NGJfkrE2fQ&b0G`9M1N8^?O0P- z8k25~+iS_R79;(c-vC%K6#Kro$bj5}J+8cwk+B|KBeKBcsIKLVd0bHeFn2`&N`?(1h*&8zFp z%YC$;{wkXNt_kziG4cfy4@Cw1;P3WouPxn=D|32xX=`vK0T9T3Wdk~!m9vT~0y!-I z*Jq)x{92+Cr!=K?+%r2%jYJ(~20~Yr!DB=1#y6N*T-R@Dt9h};H>J-)pz4hDx-d#^ z3bKbV>-F;H8Gba=8t8y#QXOD00}SGX|NVO;Ig4Sq_=z;YL12kSW<{ zviE?BQ@f3hA-e!q!5X5Ka zF=I0@P`U04s%9(5Y&ms*(OK|r(WO$Hv?bUo{Dh{dtBsrX>D{!E&ruE;&e~?ie^%P3 zJ4UEWjR?U)B#b%Y?8Q1J(|(SoS7#;LQwRgohzfGWWO+0%5`8!*rYup}*_{ph$|{v8 zRF%N`n&Mk|v-$y%d1X7-kMIP>?qdJUxZ{t^>w`??jcfXPQ%M=d=B?J)A)6oo`0Ui9 zzW|ibI|6%F?Vk=AXGr(c5n%0q=mlYic>Wa-EQD*;k33mKlxvT8{_zEl5nxDpb1OLXf_jDU52 zyqDSD?J`>~_syEQ6>%o(VLE%cX;cGmtI)*0oQ(3aZLk)7T_D3h=n($ppAs@32r0Tx zW(E_h#Rp$ikDQonLMyNqFy$WQKyRb%J{hA-L9Un13jS)YG%`NE=#u*$qeY;^(54N8 zyp=;8x8vR-fkNKA-LK)a^Ba)w(w@S^`_&bgW~EQ`O7#_I(r7oWG!~*dCsnvcNwgOP zZyb+)nlpJRL0W3T8A}AVa6FC^o)=)s`A37vVuo>Aw@kM@9qw|}&!=}yJYXX&A>LX$ zD#f%oSKES{qOd*FchVENCbh@>`L)EPayR?Q+D+Lmf5P9W-H9GLrDH8OodKhZgmM4-DP5M*Eqi9_x^}DRx zc7bj{c3-Hv!a&x)R@={n`F##rH^_$U9|IBK!wrd;Y=eLChxSoXI(WjA+5lLgPinnL_kCeP01K)o(J{!S~ZRZ~MB z7KU$T*K^NQvZ_dm1DR1u=&Pb(C72VJn4;DIcDtgmEg!RLCO%WX4X_asjes*x=YjnVOd@gsP^xn5CgQS@9- z7sMGdUXOWLYc)LPo41(^Rc^qe9WB0gDhE{*J|DIIr|(uftbN2i{b#V3Q}(})V%-+U zg4HtWcJPuTn((#w^i8+i^>mo;iL$s*q+yQ>sa` zB=Og}1O%oEAlMc=ae2U{|w!p$(U3o4y~_tFk1P_oQ*z9(?TK~(W2hMkuPSP<}iP$ znCi0u1$_bTI834b_^EjOzqEc0T#al;{Cd)#SK3Go@sd&-UByGEAbY0US-p73)A2*c zH%Q6!yVyuMxyi2r>BihY$={Io1qJ9Ru%7;9WrG=j*Iz0EUF?gt7G0;vqX}?p_9?AD zU;*HcX|q^;khaP6ZljlqKl2$Kw2#d2qNgWC)myWxYs#e+)7mlz3 zz(IU0EOQUC9NFpd>=7@N*B&3f>nfdpuAfGu^OQH%e!?gTxY%iex| zn4MVfxxzcy02+orj$+MQMs;-tN)LyQs%7~c+ivY=^UbL98B^tlHe;>c_5{c%-*dQ4$tOEIC^`Go zawm+_m+<`7PR^Nyjap?1qQm$&v=%&OFhEkto`3q0+5S0$p?8%XvNhK@lgSd3Tgv(6 z_pkcj4iA5waln#SBT=F1K@!OoT6L75zEMe3eHn1XNUr_c*t8z~T=B#1VI;stZfV>O7IgN=#kMj(VTMhn_MF85V82w@pfqNZkK zw!F^IJ(3<(TH~WyAfRWjTzmMw!oY%feRt^~2*s>ynpA#RzC^?|pE(P%K03D({)tt+ z4^xtqdNuo`n{+3?%GS7|q8MI*h#kmjG6+cdKKP=2lDn=&|9_Dcs4#E8@8+7KuRWtz zqb?)Vaw|s5f4yDpyJC9TlCA9F+|47znA#zc<{8dMW@&US@1q?wkt|JF*?jgn&TqJ| zoSc({zM!oQGw!!kg5yLZ2M;yh>&;+-K`W9O;2(NIr~ruruOufqca1wolXtwRh2zkP zL<#tFmP^ev~beg|&WLg{H+JNQy(dR_C%CZ(n(l z4GnggOCIeV8cAnF?}x|(ptZ-^J6HFUsdw4UAPOB-(-k-`QE_ZV{Yqzicfz#F*KqD7 z$XSM`Wsw{us{(JpX;?Q}P9e_i?guuF&^0enyiI27(3?CVa1Ovfx1WD%sH~>K)_hg#m>R{n9w@RWQ{F>=Ng|&%#Cm})W}s=L#74* zY3pInERH1sMuk%G=vq|`@nGIU8ps)z{6_*yW+Wemc-%0v5DD_C`W?Z9xG=?{4e}de z%vX8g^|-fgB{s431Zb*es+CXV7z&2)8SC!xXfk>>`8rWoICj z)cVB&UP!}1zgLN!!TD$A%Xx~P8@W!fkw`eyEK9dqEQ_BeTW@%H#_tRj*jCqu-a~Ar zku(W^sp7mUI8-=_vQ+%;B9J5BW8pwqtSLUIMMHkOBjSLM{i_{LwGe9Zo-Y zdYURy{i|YA`y=Sh>_*&Df&)6PXtv)4TK}cO@Y!ki_D*lRerq*A=$C)(cX(oZzS8yy z(J(0K8+0EDtyn75*F7kIKOpBsTOL<`W@i}C&}_33wG=*b2B=t5&Ri6_`y76uM#-_y zJ~P8o%GS+Vo0`(8QQ32}9rDmvn#RPe6nZgpnKqA?+Q9VN$B&-y>X_5*bSb64pZ$2f zE~22HtZzDSG$JZnsP6+=(W~^(TCG`dIy(2ts~|Dg807~R($qYtLV8)Ujr#^}Ec@$K z+sUQeIa?E_=;I%?Qbq~IpC1dNrUwW6>~Uz^7JHzMZ&9A8lC-sLD*xMd3FJzNx){o-rT9c z?GQD2TiZxetvXik?}j9HESk+0ld^R8rw8d7k$QyJrz2s$6I4;I)zXtm)~%?x(kYTP=Fz#^BP{E&)P z0aq=Dp;n};mVvlc>rsxnMq{@ppCbhrX!ILSA!d!Q9~#pGTlSml45Us&9cV9AnLjfY zf)+t@|7oGq7qclz1KD;vQteEL67_Rdpx(A`v<-X94vA#Sb9id^kp{IYXHV zP|CbrTZ%7TO1oWUoWx!l2dm;kZhetimY0gW<|Xq1-ZvMbMl@qWgurvOMQ;AIxgv2f~d=ZGe?JaWi-$j)PBV5b~^}SUcJ9QMvcz*1elfL z4O<8Fl@`I)Dm6OFm8^ztY#tUMw4>6qgz7svlE}AXLRa$ui^9CAAM0Kb9^UWsc07)E zS7}h8Kwy9IHj{%V4*+XD`THBR|UMZ@1R z9a{VdD(5u9f6KHSpVH#$cBBm}*WK)bmPK$~#OBI=vv>sh{$R~A!ImO#FzJSEeowg0 zfD=Yp)ofpRDixK;lp8*Y5#>uDUXK$A|FG#=Eik{5V-I(>*wvWCna;S9diJiMRjalO zxk-6}JrLI*p~E6)`kqBzO<7aEjE879r$Dr4xXobqUH&04pS}nWka3<_`jDxQWv25z z{X&}$$(-uqgU^bkdh1J*A;vPj1Eb8ww?%Cp7T7}lT88h+!`Uyi#_`74c_9mSWjpsy zietNF;RdOUzc@O(Z4+JJ=2;ZNWJWn9dmHej`NnN+mRe#T#%Q!@UG#PTDeI=FlP0Wj zpKvF%&rlN|E3yV#!jPU8*c{266zSXjqg*=QC9gmK)0o8Q!$};4l<1arc2Fd1AbCj) zl6}_s$(DvQ@6k;XjbBbJCT<-*iH|}$gBsq+RV#c}lk0vTFgI_{Lw1kB$hJQ0&PPcO z2V%6%BLzEK(R!`gA`M4?K>;s*{)r;ZTwL*`(7LoqKz>HW?qnV)x$sYkedx~I**dij z+B?u&hbhPCxPBW~36j?X=>zB+qJOQU&bv&0N5u8GKBw|bUj$?|Txv{7?pJ2Zc3{XX zSwv{aBdghWNjvd(N=~g4`fI(WhH20)D(}UNKdgq2=|h(%~p%!TjlpW=pEj|1s6KD;BPhc z<=$*3Pm6bpc)TW|0Oc#%|G*V|twLkEYO1y63!K^QO$_VJa-`(( zCWo~+gIZ@w?Wy}LkeY=v^`B5a^7EWWFaUC`4IV+g(<1ZKK_+5vlza*i(tA`br}46c zF-keb7uMt2^B8i9QsJ15jY5xFSigaVnpUmY>$ryjtWlEn5ubnmLB-j{C`RqFzh+U6 zTzh(c)A*|H@-f`Y9`=-8gE3MWQRMNebpO~&u96GF^~p6`^4g{LL$JWSZ|S8Q1xlpX zJ3N&1-pccs)~$!_ZFVNGVM9qvf^}OS%EsR(Tj_g0h|Wy3Hf7pzP(+UGw?pJD0G5U$ zPxA{PgCR#>Mf|qe%G+Kvg|?TORwjCuZg|SN8YLAC4;reEKwazd4IT1BEGX~Z zr=#U7jd-)2zSHhB?8T$8iL>rW7};FzZ2iHUy#gxU*)o$6zlv6CB&CA$HeqT96aRM2 z{KU3>T=2xV#GZsy=9zBXZT@)g=`Kd#s7$a){flxe^b-YY+=^)r(=guOmxI_2-RTHo z{w?ooNOLa{J#{Cl=5r$7zx}NI1?%}&uhZwbvrW@IpZ=_jj=l@8HOem&lWB%kf?jo@ zO7%DlZpc>BAZn(oCtS$S3f<5N$(s!#Ul+>L->%p!uWm$9w%7A7L>kZ$6fKpA&rau( zO85xc9hMq$=+S^Tt!H}xN}AK9#m?}De*A_`jI-sNa3zYo1v+nN!0!j;;eyQyTc}3* z@)$hyS0fO)=VztP)`E8l7Cr_rdGu8&OjLV1G;j53RvDrYAz#n(T#iQt$JQwhR#p*+ ze~%^YslSs2yr!BDk{Ca7x#qCtwS0ZfuoP?xrUV(aV5~lBLF*T+p}4PVt1{+AFS40@ zC3`EF%S`xWqaGlbJD*9U=H;1@&G-i|-;D>12*@?XG3*)ndXK9@~F z;087RQd#v8+Wy!En=NhYS*zRF56`^Me6ztWu!I4bO#QiqEv7`cy9xFeC;@D^w=hP-YFu43h2$T!0S`cf zYXX_;1y|lKs)G6tifnTw+>6)i+Q$Xk$`M9N}!(3VvVZX~XwN$}?x> zNu=cI`uBu82`^^ct;_s{X44)iy&FxsbGK9>=|zd5<1^hE-*nh)W?Zx_FMyi;ZBIvWCjX`SlJg%RcuiP> zYdO;-AP|^$wTI=Nf!KEk!x>30S3N$7(PuWC9X|aqkdrnOgdW+v;5MC(sA=9?v@WUEJ%qCy1(07^W=X?yQ_9~OI3w8fZEsJC>`FP(q z4kiZqA)=YGPPc=3Gvp42lx@>^7gMPD+etb5P_pq$1MsUNj-EVSl@3hLBzDz4?#Dyn z#eknT5w@{Xw8i<#F^0bDM|HSITM1S#o675^QN{~XwSosDCZ;BZ`I$i(Raw~Prg`dw zlIUb5#({D1>}O^*)%x^R?$=%er$n#_CgXrMtE9&sd%24jMo_P3Qs`uG8bV2`6XYcN{ z;F{u9F6#?_Uy$l|9Uyq=MvVaCBX%i#p6ndr$ zeblCW1z3HCf|(xN-_ZMKYePe^zE6izMq(IbJ;sDM8stPgYN~>SOv`^6fkuSMa^_^1r{IB5@oGSQ zCpZYgKhO$(IfVv%@4v4tJ{ds(A(Sn#EjgN`?ku9N6hC6EZTeD=W+(f@(!ciXCF$&C zOwpNM9(k-9J^a<$e4U2_kLfXB1L#jQX}qVxZlPSxr%#Xw=_PA^xz`E<3>$dev&~FX zw^b>Y7Ha$DTvPAymkQ!6I&M)Zvi`_zy3>Bv)2ykxT9{TZV5w3gSw1Kh$r^4olDQ$O zHy~;c+Vs>zNuV&Du?(?2jG@flTcL9KuO{n1MQVpV*kMgu82lmr{M4%q5+b&EH=~@P zrp_b-v*z6yTKZr9lv2oRZf#R1T4_?S<*E8k!~4Z3U}tTb#6#P}z@P+>L290x>ucJM z&>?ln2oF`h&6D5OK*`%M^F0Dw4^DgI_Ln;duksXNyPodd;Tbv{i{H(fr1eTn2L)BX zh-rwIyc9%j2Tcue4^*beCi4uLHTRfuh(qQ-UuC>1TKU=PA26-^Gb78XQY~6V@X=NM z>!yMLfpvL{6Mh@{pZYQz_9Flz%jSZ7Y<8frd~)Whq~d(ZsCQsM+o#e@Q+GIa9QW3B7QfxD6LV=^p%dgahY#xqQNkgwLEloVw0n1?fNCBV2>l2D zK4Tg~0EhN)_4sX$tp0P?6!b6~CVi#%$|Yqy;%Rnky48Bd)#H(2>&LH!Q=TRK_Ly9& zp~TJfZ)Db(y^joVSJY1T&RNyJ&zP>yYJcerdox#}Vg%RE%;rq*5~gmQ$qaTmC=*85 zlbch+U`;{pjwRPiHVyH!Fkl3$A*pC*(@N4l_>$L|n0z;=uv>XIe^G%EQDF&7tx-#9 zj%(ahuE}Yr2w0R#P?}2sbV?FaWB*bycPgvY1`BAuBn@H+qluepu%*Dcr<}V#00OYO zsR7mUpKBlPKa5b`yvomzf86sqg&;d>d7--Wt}P@stt{$JI<*0VL@eCG>MPxs_d}}A zq*P+%dyI3~+HU?b^T3SX5WM{AGpeii^NoAhq;zLDDqR5|vx7JHyJMtcDNuGp1Mz;x zrau)MdyTTc%=_d8AC<9Jp5XPwF@m6SaFd>As$4ca|Mh0gy3cW5R;FvLWhQe@k4Q%) zcVLq@bm>Z^nSxuNxS6=!2_cQJp(zRACE;iad3Tj5Rcx!ufHkj#06BlL8D@*V?3(ACS0N9o zC6W%mrY6`hH_oeZQ4aff1RJ|X?3NJ5{kt4xx*dCK`7iPe)t^bphzaNyWWD|<)aGmL z8d{oO`F`BjDnx&#dXr62%hY#c%QUmJG{Z}5X~hTt*ey-rD*`kee$GfwPx4fe&95HW z=Lz_<+y?U625c|2RbA3k$mOHKNCcQ@`9C=AzLJSIdk4wospnZBEo@T<7E~=*mySXE z_Jb7MyV_e~e=hoV4k804Vk5ZMNOc?&aRCw0f2kgZsv<}EZ9SMMzV#}aT)SerpgDNt zbBus%E^1)WSg?9EZq{M5Er?8eT20D)ub)8}ED4;GURqw-WqAe;E7A=(F_q4&?$lj~ zENEA)8!F{Hc;e#GgNa_rtzEPWRVStP)AOvg%3E@<)a^d{U%9o)&uI);qnWRs#gzFA ztn~-gU~q}bU#bP6k_@LMXGKxMdQ@__bx6zm(&}+$;X`eeF?1oS{q69EAIzlRX{|(9 z+oXPDl-*v&ej09?Zio!1D08hilmG8!926GXFnsLZ6`57NBX1fCt?pD_OIAg}McmsT zj-cR`Hi9#0LmS_bdGv%=QUyQEjcrJ%mOhw+0i!j=0YvJ=UfXP+r!+gOu=s#)r?1Gy zNNNwlae&gaR6I4S=7f~bSNS(DDbL?HybBjKVS=7-MV~kTP2A^YYvWv)atg7ilZtiV{HajWe}YV70{CX2y=hX zLlxg9*$|D^zQ;x5;%;UT4P)UkA9JRREHd+!ah5>Y$VN;OOwwkf0XQX)0qvlVEHkPJ zU%hD!WOy58k-Rg56djX8)#xejwoQ2O&{5t3X_XZ=Nc)85Yy^5tgWhx6&T_xSgcos= z+4(sOKrB2R^O_pql5UFX2S=vl&94nbt>> z_(wj7p)Jo!D%)-8)gW_1@r$1PwVWjMH}}t^?pze!SXN4D8*g4%(d>K*+A#%T;%rv5 zHzKQOp;CD_)ZG1lUJG93cXLyQD`r*h5+@ib&-+Y+%(e2B0opG*-%G2RX-Rm zunOSFf|rGMeugRgTdOX&R}0jiE*(Y?3e;{P618#+X1h6dm0U+_WbOGA`-0xSHMn&g zUv|vXA8a`isFZ2VBS5qq%C6|l?|BG`*{AYt%bT(b{+I90bcjy zK$X`|uco6#!cPprgyi3E5xU_|!Y6w?9~jWF%v}pi@4aw+@Zk8bg^PKQoww0hwdCSS0^|s0=l}q@7_0gQKEakh zz1JgF2ID>ARUNuFZt>N!PULUPJ?0934EbygQMz?57*h;`(j&VITIQY(I3fkUtKlHb zOKD?t{awhaSl`*rAg3*ki%0lf9jwBZ)?sh-;!gZy zvH7>**^SG!t+!CU4;H=%T3Le2u2&<_f@NQ!#8K+aDVR5aU>H6kDR0`|+*nwWCUHF> ziKh2;zJ)z#wvCkHjV~NJm`OOVy8gDpFn6F`D|wc%k#I2Zsomoc*)j!q?3gMiul2f} z_34^|9_qc&4Nmfey!QoLs0eAl!!z%0++irBN>rMX+7~YPmnte|ocq2{@7j3F9Gl+U zE0oi;G41V;sGM8>b9hOq{U3SeFBM*ON{2m{ zW3zu!v2oA5zFKj799|ttJ(MjvROp8+H3q{&>bUu@X;K0IW3D1UQe*9jIbcVX^i0>~ zS?>kE8}bbnAO88}7fPb80rS18>fOPB$G~5z+aB|Ka4=_>FyS2;UiL_vOn19{5sb^E70guMu7 z=D`fwU_;Yw%0)-z=SbMI_I|g!t&|(;NmLXI(Pws*cqA%m7FO^p%+4&|1}_u(mx{h1 zH=x;G^2=-{KZjSssb|v9>iMg6Pa{wiL6A)lfh8V_E1*v=XxIKy?Jtyu8sX}J+!2He zijE0ulRE4_&Mao3{b7EJ8p zN%itnyj;1W+Lb4{65%|+VMGV{InV%UGT=cz5eziG`A}$0ee{8>WaZVT{ZQ)DK6nY` zh*PKIbMtg(#3$f<(r-jz)bSsDdUAa;BT!6RiTnpb*9i@5{Z z(n+A-P4h;pWm^L*PDE9&h!~S*8BOO>#C-4Z4@8DeXJbLB1gmI;oek7R`fBaY$m!tq za=4qWD|>Rs1--oH{9)b6t})F5*sf1)sunyNT(Kj5>f-U5aY64khN$fQdc?^#CmDR@ z>3$UPwdb(_X?8X?24ft>;Sl3Cy;om3hnzY|Wu$nC7uwwWpi{riVP8J#>S_Kw{B*?C z1(DJpdi%M_r2^#-;gB6N^-Jma2UIRz)~vujt1P0vk>d1qC!3NNb~*I*p(LpY%JOL#y}8NDILnMtvJM=R7nAVCwj zvxLO!3XFW4LYwf03Z#D$YC^YRP;ZvN+Yt`{zz(QFy(3vDI=IvZ?5PAFD7!1&HF}lq z5u}~eSPM30tjFE%d$Cqb1C$+o4kpu^q)mStvM8_8Iiy z_s=6^5I?DUM*NFB7DaPgJDq-qhoRDMRCEZ3i5&Jw!mq=Iz4FFX?Hmx9Duy;&MqRM> zTT9a9w_!R~Z{_xW{k46*&Kh<#UahZ0UWpeu2g{aw)0@y7yog4bh0WU&O#V)hP$Dg;4mjBE(R8uV@0SANv(t7 zR2z8;lP*Iu?Qn$Gmdlk@>ICpJ2+YkpxaUnDhj={&qF<)8x;T})+X9%FBZmmV1Pd9f zIMLpuKW#SY9htU|ro9c&g})n_cT5^$8XlFHgs?B-HGJl?#fheR-No6zuDJtrd5Z>j z4wR!)&5kyrOFUc=UV_1b)GDCcB9VON@Oy_Yn<_GEWQ5uZ9{Z)IOYJV3f-$7Q)| zF7Dz}nasWz>}5Y!(hc)YPC)EwE@4)n`-0<#y|N=EBRpfFp* z38zedD-rs2SsS#qm8V}CwbxY;&{@X0n3HXnVN+C0?fA3@G%B!bmbpC{#cQaiLm%Hi zSg06+0GjBVyE3ziwb-B5h`UZgSkGNoazZM0s)J8I9=vXAjKPbn6%h?E>54p?e@Y9q z+-d$uJyKQ|Xxd8n-4J6VAL{}&fcaV19W>NSeS*El=2mX^F6@#7Rv_R1-UIE5udN8zA&>(3r>V znf(=ngg@@*p~rPv62=~@chA7Vg3u0jI7|;-?WKal>N4-Wo|b&Wj=G*u(Vf0GqJmOb z#zd%&H=6mR)oQ@E-d84|j55XBKU6Z?`%F*Qiiivh0>unhbMlmimHoo|H)4>neNMh` zcSWV9f-FTN+r}hEPCa>{B8LKjEQk!jK6(x46*4a40f)$n(en+D|M;;6kt72!`zIn)AXG%5R4kCDE@@v=o5y=hz6td zzf@n;_(`kDMDkg5sBy@rl^;69!skXQBdVaeI~kz4HYV-> z-Xbk)*=N$i7~#I$DK6nOX*+1aOXs^J5yU%fX{NC??KO91G^<@*ZTtB1b`ySw!+bew zy|={yF9&lE@%E|Z(Eb365PxWrmtuzaWM308FwG1Y>)F&-Su z>A~3p+|nVx|5B-<7Zscm#_Y$HU$?NzlLa#3oG`j8GHwuOg}WqnvYPeBKFLg9(`e6+ zo|$BJc&Mr?7Z%_PhY%_W>XcN1DhR)>K|Za$$~raVIVEmCxw@2^a;K^97fj z&qUj0pl^_QeZTZEmW`MyX(A)DZ#f6gH9jg zM%EWPR~bmiDS6c*((=Pp*VBH+RpwI#y|Enh+5Ss)qsO@?*`BU#N}|&+xMoM5$x2VC z0e-vOo(FegRo^|eIZ$(zp?5ujP1&5rj~FYt`#+i<|F&ly0Vnk&94*x{B=@}{be^#n zjNUZmOm~$o6y0bmVpPzd^>q4tQc!(m1V9Jdsc7^AN7=OtwoC*G#_?fYdW3BWaHSY} z=XF=KHAdy7C&0tJ5@4mBm0?uw)$VaHAxvSqP^5$mbpP{T`!Cv)J(Hb5WVKxGY-Gvm z%F3^~_P1a|$B6PBmU$&u=N!Ifm-F6e9w(=E{fCuqi}qvFU$|$ z)+0mFG{Z~-Z+GHg7?IM(^uhDB@N17J=}h6UUSqC~Io}&gO#9E{dzeBQh<4z?Zk|cF z8>YG4PT3qfK|9P7dG3}9M{4G6!t3qsowIq0$iBEsrjYX;`mBjZGst5vS;*@5P4OxsO}MdPNKPBBN^ zeka%JYxHMU4tS!c9({G9(GdWnT6=nCO-u={A3a>L{%JMx-ez7VRI$bQVIhb(@xqX; zFi3|~8H>l`4Qk`32v7s-EdB>g`YonQHhn>i2LJU<{Ifgah3-T{rhz=6lIorI@O=5$ zlWo`c29xRAI5SaqHcM#!M>h!}c(!A(*uBV+KRk|NvnL6mtu$uUucev3Xmp8TYStlx zNNXqPD1!xamEQ1R1wa;Jo>$GvhO0mtnq&V`sb{+4${Rl>Fe2h+ODiq%(mjnVk`;FA z91#mz_9hwa7LBB>ez3?E`C+O-%9)u*{Z?~p_U}Pb{tscqk1snLhBbRG7C}K*i;m0x z{^L!(t+afp_GCH$e6t3TW0Q>Lq_yMHoi3NrG^j$4a$0+RioDa3yl#-;H_90-M0CBMvK9sSZv72qe1Dt6;hm&F zY+rQ{1m(%%9mKtyKk6F1*`$5O^KzIEh5;Pu2rt|A|El|v<`8z>^_q}9UGl!n@}UjS z_#=X~$gzGBK~d~L^2ju)gva$B{#EL!hDu`=)g_9k+~v?8*lcYh(PuP`Q8duw@|JCx;GM zg+z&;E*Yb(GWCs>wWwW6NHTL-FE_^psk(+btfQ2IWuctEyk+y_FuE9Srx29V24ElX zfnUGKQ^3Zj{ndvTjo$=COf+J`N|V%-Vz?uEIkFSle;-4zWH2DUa)GwC{6g}JMf$LO zu-gInED0|V_i|b{kuEw;XOPr6`AZ4bo$mrrZ$!7w)yu~Lid6OQ6{f#V*Cwy@VQ6(A zPdJO+%zgBC94Hy)Mao?^lgp58csX9Dc4gaFz0#m&=?XjX3JX)`%Vw|R3r3YuS?On# ziS(-2JIU*RB``w<6~q7qSvCNanyvgC*S1Ba(n+<}#7Z?g(jcqe>S&OwHqW4p`CYYs z61S+yO}*#r?iRX3nl9)HcxAcv`xfH_ro;-K@+8m^*_^J$-HL0hONEL)u7^Ze7tI z(iU;!a3J5#Xukh16~hU=8icct$-(o`+rNqu3!2@NI0%55nl+^#1z=M3mHfZfEd97w zbRLrUqF|@KZm#c_cu(v#4<)g(zL+TP{RpvT6G3r_C2982Od--|04YwI;{md() zs$)uP=8^~(oi7V5S;aCx5p))YDgL|Yl7vbyt%-i2o)R!35GiUFnWJQo2jmCko%-tA z_{+^pAK5iTt`g8WxMf7sU#fxjz@D0gh+b9aPoC}O1xnW$?!ijxwZk=9z*%grf9Zg4 zh(FRezr$d0U&r;g)3SzC-S!G68PK?9c#qO_9-=C5GF39mJ9P+?*oWJB_t{vKMYz{W z7XD-@9kMJENOMe?je79XWm&S{qmSq7dPM9sJH>&Z%5h-m1q(66)sLNN_ov(Ccz#xqE77q`3e<=DV$9&WYy&P2GFI6)-16uLp zKazc@bE~}!@=A}++RD9|)nEhtAh^cng_9lh`1@{Z4e@EKirG_)^o)DL!0_hp&*9@} zz&gwZ}j3K`j4z(|t1D=U9P+kwJ!vBEU$Tog) zW3maRzcp!~+KKyG`OziENdvPpv#t_I%kaPNM@i#Zwrb)c-qL+e)%rkDvj&!BrA)DL zb7`|>D?tn6Y%@?&rYrNIGgp=Y(>?t{U46EiG~a~jItai4KA>RNA}Sna+O+iNkYJQr zqfYkz3ZgvMjkTRo(Q=2B?wq|HI9bPQcnNlMxRpix2g-i1dcu2y)&w64=3Q6M!B_qB zA>v`*>Z75xD-Q2?o*VN442(;Nk)M#4-8{GzoHZ`g1=|9$HVC?XY>&4BL)ziLSu*hD zjroZoi0kRl?aQLO19+oc(zyag^fqdF=skSKz_j#hr5)rDP@)?1`AtPT78C8I0i0b+ z&h^48)H@|8@~in(P8O4zfD!SmkLfQ(R-UzYqC=z@@$L5gj?@3Ix82S8%4VF}3;~sg zzXHH+l`{Oc@_u1)QF=@h$`f4dOlFTUFI@YK?nY^3^A!nm+9-S@E=zE8{HSVx8IEV! zfO=;lleizheVF7NWMs~Y)0Fsh^xe%N&bK-)TTIN#{T{wh>|@@;Oz-j%CAjEl)|A6SQ(x2*SQWK{X4_*tCW1>rT)2s3hd)r+v zk9N9QrcQVvP*}wxTfksK@0lr-HW=pUvEl(cD18@h3|YC|NOtQWLKhlj9Ued|R^J#t zHwm-DAN1m-mGvrYCp=G&416nAM|jgfy3Tnnda!I=8;I#%!$LkWdbMv%V~a2puO^1b z!(R|1BE7nq5l|4hJE?uEuje1Jv4{}ot7-yokmtG2j90yD&n$*p$QAdJc(Z0ZC+C5- z&>yJ>YHj^&TBh{*7AZlI$r4&2j=TPreHSz*o&>ilagkS*igW!&0avv#9I{=74p5Vt z;cD|&y&vs$GeK}K>LXe3ai*0du1G+AFv&-1O+V8cS{*Jq=|9+p+l zL}J7}d&Dzsa(3ig#^TMqIUZPe9`98lsB^-M0@Lw9wCqR zqbt@TRmk@oB^(X^cqv8TW+H~yl6r^Ko2To38%pn=(9U$v-=4^a6ZTEDT5)^*mKI9J z@qF{Jfd2%!i1r;0DA53pp(jYQE2xsiU3}{Q;Hh`4l($>1`FbWh9YW8P3`ce>&p?Ix zgU~ze+2gCm9qIUU0!p^^P3BHcBHSl^|2X3~g@dTFJz!Fu+VA9?Gma>rDKpJrpi_A| zo)9gpZ}qll8m?L-REiYXdhE6{2uc+@4;?{RzZN#?q5C*;lgI zX|XMVf64N2F~Z9#)*9t4oFMwG6~dc(zKMLM)Ki+Rp?z`lGH#E18EaggGd}y zDtOxvAI^!W8QcuXx4YSAc{WzPq6PdOBzM~4w9`uqws5A)0qO4h`o|tyN4#0v!*Qnc z_tEA$ODil`j8~Z=KehvR9IG6CAA$;vy>I<&d{jcM!z4NaD&(m5*~$`T{$uYL)kkoQ zN9h-~Jq3z^Dy>Crkc!%we>kD*iJhi;c6yka=W6bhSZF=vLft@B``F+bZ}kQ!san5v zQ@=TeeGRIYPL$}K$IhAP$^4ss@EM``2b67oo?}c2@8+91p+)hqA5Mor0&dRRfg{OgR5DB-nM36-J*37HV+ilgW>{NC>hVExz}=khY(ZqWSNPw^YDm#vk^^wTnPjO6^x!rR_U;ir~UnlqAIP)U#xI z_WG5@ML}m?q4rB$fgss3qbSaN&~#JArhD&epJxp;)3qWqU0NuGV~xC~9Led;POiM_ z0IY4tv*VjY;rAueaN0y}Q;qH!+1=4vP85ydbJJKu45P8+X`2825|y-PV?p%$UCVWR zdJn)lZ?;07So2Ujk>9M`^S)^u?Cl*aoP=?p`E_ph-6Agv|I+>eI9b!UvtefhC6Mt1a2TpPEU z5aRr~42YRsZ+`M_x$BpuOxxWqQcrI~>{$`#OsGu}Kj|-396DsEV_JxGa=tuPgPc8& z_rjn!_PzK!|G}B%dB_q!%hWaf5mKCTJ-UwJ0;|+YeUX@8uzyym!dYewLMZ_o?JTP#^P6~ z6agmQpJy2xs!lLKeb}9!A0~b+zDoD^6 z_ZYUt-CLy17%ekK6`0}O7*ABWuZDW5vio{jqBqM{TTCoVcRWTWnnSuAY0_dO>%Pye z(C%NYsNn}njDE3BtWzmCd|xIu<0y*Tgbiia2?pJ(Xb{K*XFxn#=Iz<>r(2+zPMe$+ z&e%SG&v^@*Iu6yPvtx>xjnx>P$lRf52%FlJN8X)%^|Auvr=nY|!O*vh138{KdFT}$ zG7}#l}`9a+$k1H_73|AQK}1^ThacA4ct3~agX(==GH!qRf75iKb+K~nYZ2uSdg?g>$vcJ|VW8PPeYJe~hL&FXw!{sB4 z8xd93)DhU7y@I76YnLfDIyh7*nw7(lxP59Vk4>8>-8ntr9qW6IYF7CUkbK=5Z$o7L z*O}(P`Hwq@Vl12z>R-9wc|H@^evN##!-1NsO2UTdqinHuBZl4-eb4kcgiJxBAU-#duB z6_$T0zW$f0SE>eKF#)m*(z%e2`(6F}FBSC)zP@5UdyZw$00$hNDIH(bZpB6y>B{#< z@o7xM{0goAkD~JmWP@wtxcBW;)Tljc&ro~wwq~SO5S18JGf5-0snx2zT0yjC?HP*1 zrnPI=CJ18Gu2oW_{rX*phA$&!) zC#{Q&3cS*k1MRBaS4HwEo<0z@e5_~&KA*e}My8FJuLJd@W9M)l1g$dsw@{Yg+XqG1 zq*^3rVooA5$WJijCD7%Nm!KH=mdH9|8oq%H5^8Iz2Swv;1d?Wr<$I)R4R`E$ma7x2 zLsbvs-HA(4)hFs)*>XQ@YC|N=MFv1E0qK5ee(8IF-eMQbqv?0CdoMP-WoU9x!P3%# zwdoeh4*@=x45K(+8;km6yq? zy`TTqpQ^DW$mWY3p;snQ9$?J}<#INo3MPYoqOu&)y5rP$YHQZMXy`#XD$9-P1G6Uc z)FuzT5Lso@Y3}BQd3U_mQAYU{qLNilN-yOe|Kbk2<^1#TuGOa#vECL$<#*O?;GCr~ zP}Bq7BUxHicBZ*xeXtkVn^F!N*2HVOXN@|iv=Xg)Dr{@N=wgK1^N`G0{4RcW!#RN> zpP=d?BI=qFy7-BGg^Pd!wi#%ghTL#Utn^Rz^-qMPTTEh!BCjottmV?c$mEGo@kL7Q zZ|dTMJT&bN8|!(%@E#CLLJKW~^tp0V>(J5n+?f;%NNE{Z(W=1riMwhg3jssb5^e6 zw;OpqVBL9?;i`b@9wjx0=xUq~9jm5^pl6^^y4i5Wd><{y>#W)v(0c)K6jK_Luc+L1 ze*BKDLraK4p6NO7ZpM{FuaBJ|sZdfr&PT)D*xyEdH-=YUvujQb?ga`&!5!^iuW3Xa zyxdL~liBy#i4TH_>H8<3ryL{?T#3jjuEZJg&Do%u4f= z%io$Pfz1u%u=+9u$BHZ()gyD=d#{LYZz2aiy|=ZKNIe)NI(+DVIN+;fVzT|s7=O}& z9R|$I5lKzn-rg)5(WPn#i5%Ay`dO)GV{bZc4CCK*coMXF)8X8ij4NUz&xE2RLAQ#(tUw zZqJmbB38duKLLK}t=DqYfDTgo@~zLpBGpO_znoeiRw}exEjF+Nn_nc1Z-(3`*&;4x z(JMgwpi}s1am{Ymt(=YTj*e>vu5QXQZFhB(f0+Mm^+$~I)0`!v#G7q}zyke`AsCd& z0D5rSbCdl7H4)kzTVocY|Ls%|e%a2urFW&ItnTXOKbEcibR zV-p~;Zl1mKRYkb>Ce88>CgT#4LdNHC-zxzh8^_jYqlss&iED2iBleQ^ ze~T5R&Em}+`kw34^j4KxVEO2H)m8Qt2KP7zHdMp6U%(rFtfV$z6wx_{`7kE*(-LS%y$y+ zwg}QoFLl#7mOojL=p5x{LdYUm!{+FP`xY`llCRi=*RMZ|eI{<=`6Nqsr^8FE+?NZ} z8kmjaXgjHm2ev)0Z?@biH#;Y=o0T^ee}^RM0ehvDit|j<&r(dbttVg=v&+_y1N$cK z88zNI-!hm=&cLZAm+_2fGob-KwgTJXXw?#Kd_6M^Ut%b9V`r)|_9c2A=oc|I{Gp0~ zL7S8Kg{G^O(#rlD8|G=WtM}~t=&&&jc{(QCIUiW40FGh!RZukP^Ogh7dM1NDlr)+6 zNv9?$E1i~yIQN1s!jF2Ll6Cu82&YvE`w(|)vv-CGPS;u4ds@dew8`p;YU)dg`n~JZ zH?gw|0d)r0>AepThnX?0rkWqaMPy^b=imK^^wC2Nl&gXLqNlAy{n^;9tF{W$Qd3`? z*e)r~1Gn*{nel8Xo%IT+Lba9t-E1}U0&0@Ex##Koj5^PR?6t*AYa{8^<%vCkhDMkS zHR2DId)(agci3e9#Pj@P#T)-&AIvYfzy4~@U=^q6A-5;i!Sb!RscN_wT4~QmNTTud z7J3=njDa60mCy>v0#tg@?mvA#)8>R+2`R=3k1Y@r>K!u_Td6jT=Gb zkDV8edx~V@_wiv3jZ&@*TYjgzYj09|yqXm?OI$$cHe6{+}`nESr7Ml+<(%+54|gCfR&h$0kMKi zn{m8dn4y4r1SnorgR*WZClz~iIjETU^K*?};4T2*=MGsDsuOd)_2TAF^!iA zpETf&UEOkb=W97m-{dMx%4pY4kDm^9Ixt-FBYDFTuRv}fq;v~=qVnISmoQcFe(?yhxJs722Jo@BWd6U?9He^+}NEzXK zFU|yPRaWARscQuz_HvpW1&gv{r?u`;B7LH#dWMqYW7E)UNW2r;S%D_#Lh)VAtXsVy zW~*K2#W)ipZCCqle$d6D>B`N<`Xdgh@jp~OYPiLs_Du1VJ<(kvq!Qb3Y<#DiKT68j zO^~T~LzP6z{%t zTNX8rq73biLJ<$K>OlflOFv0(uhxr-02x z-$*W3Bu?2g4gaHPN!Krwjq>AAz5CPLLdQy`HgiBop5@rdS4G49zmUBV^bVkiqU)Ko zmP*F6CL?%xCqrM{SU9-v$|e&kynPg#2|mcF3G{{2env*k>yE7--YCL#{|-(;KwTB- zM6ELZk(}2li;=D+_?Kwb8<-}0K0g_bz#Ce5}U z$TP~EgC4xyL;NQdvF6ZpaD~l7SJELn+HW^RjePxXeUQ^o1xFX{8+PkC9`u%x?U=*4 zUM$io(+%ncEXmDW|HR>`&bRFms@`z*VO1oUELy_$2tz-_= za?_C_%oy2~>js0+OLU$=Wc+!CT%Jun<6pz6;L)sb_Z-uRcJ^Y7-Vi75DwgnW0q89S z{xV@hK|;Qbb8zTS1w`P!Gfl|z+aiBT)hcXD_=*(maTb>hMyERUvlnOUuEJF+?39%Q zB~_KSbL8(y#EzuGg?Vj`rcQIlf8@wdxlc`vhyLioy|rqOx5Ln>Luw9B6K`9-?f>hY z3bQC*8t_naVn&x+)otnh=MSbkgG97^R=Ng6Wl(&=N}pFwvBQ_f)i#-#Hd#^?D>Uih zK%sh!DgafDhwC1LS_}G7o~|;hPxn;xA(*<8*w%+d8xs$|1Ry6JnHxb)vr%oD&7{pVjbRyMfdSCWRKD|lEePT6MN+rsDl4w zRS|G7r(jI~e9&spx6r=bgV^GMESgRyBSps*G+iPfb+*E(r+%HoK25GbQJ_Z-os)eo zU}IfyQel{c*bAWgwNqGsKp%b-S;AFYnBU^B{su*oIdpV73^VSLqXmD)DB$eCQatuHMuZS&A*+kU^7IZ(oT z#3$>#a1|`BF8Qdya)E1mar!OHMn3;<$a6Ao01*z}#wY+4J`{%|{dk2Brbwx_wZG18 zhPXX`WxEnH$MYHc5lgKwpISf&yM6hnrWSK-a47Ren#JQ9{0|lJ_igz7jBQ;{DW#Wb zv2FFjlaH9dtmFTMJ{fCZEepKRG_8Ou9dD8(YMa_~n6clxNFw9tXOmKEO$nwcIGZ+H zN9;qUK5lG-?3Xezx_hcjhcD5)Glw)rk*x-(LmKcw$k(vCMLzm~xXmY|lI(Q@K?M_x z?xWBn5nrY~7bbzj_g&MSupAqL8iG?TU`XS;IIyK1fht~{z^ARc=A@$}@J&~<%N0jk z@Nbdg;Dm`5gw@9_NxkBUv!+aQ>$&FiE_Ceg`&_Mh@RdY0(37?1oMT;Hu6U5&>+8?a z&qXj~ml&*Y`$W;aJi`+sh6-K@^xR)Uo_%P9iTlQ^rV9D&s>(uKPwALxn@li^FwW;rVO%7e7kZRW_xPS<8B@KgCnvipmTteNIsOR+FhKH zu=$qS@q*7c@EgUYv`-Qgvf60BBGN=iS_Rb};94O&oNT6hDkt&L=@vKE#D!*L6u)$_ zuj%tg<06M7^ad2_xbNkshGaysG30&j#(0@S>S}ADLNBKBOtgkaBH>!_BmBoAVK(*# zp)4nV=c{>X6b7O(*sXml7{tAYETZuBG|0}uDnFwzLXu&s zzLzzw=ONDaK1hYlu&eue%geC+h7@ZZQZ zV0C_G2Okp(m2Upcmq!v(+Z@v`b19I4&Bvrc4Cfp`EuXPOpwQ9$bBP4nq^>t{NvD0Q z3jXiT)z;%0de+gmu_ZIMuzk;?zWVy(^^lL=oW?)XesIBisf(Oy~{ zgpjgJ5zq_xS^A6xsMrop(mFVw*WorQcWqDk%_Qb0Rn^g2Pe>VhbO+0y8swUI2wE+d z$smbQOsjhCb*Mii1MC+NT#nAMMK<>CkC$YI_Ry;Of2gpJ*OKjMD9XJPi^f4^6s-0& zLx5m-Ac60ed-LxPZ13Zn1l&(r8X2AVy<8extkB7n=WBY)XugnlJ(U4$%S%1k0tV>X zCAj%!4%4Be&RSvesAK8oc?f=5+53YTh#^Ve&8}8TGFnr*{TBPj8q3-~F_Kc~uwszH z)`ex653nlKb${xoZ1lAF@BK7e%d&oPy(9ZmxV`aMwK&jdOWV0^%K2nw*2f{=>*B64&`nhr7C<`q}={*^Xof=3voD zvY*=9s7nhnFtdwore?zsuuI@OImr;c^DGDS0R_Cyloz_sTDL+m*IFd=-K9k9yD$XW ziyv^g=SWXfWvpD2I*WY1_Z_1mL^}~5A1kPLUrx=V>K5jygh^%TGhrhuX6E|^w+pKa z%#C}IFoKb>FtTb9%>hwx6>)l6lxDzks91n$IJ?BOn7skF+T3!A7l;9Q6t&Sge9-^*F{$BLL=ef{f7dLmQ zYN5s`ah-kvW57_sKz(X>pEFpUVdds+ZDyUoLqXGt-Q7#!LyHcQ*qAg}J?2t!RT9NY zGpO`o;kL)e$z{Xcfxut@VP5(!1MO?`?VM|e{DipUZlxJ}x}3BAX3*$$7zqir`}V;e z$hVteJd#(e$Mk-Y+wf2yc#W(6&G6Ohn8FqMJwuCx+~!G%AYg?9sX*IJDJ=)zG@WR_ z6@40cXWRUgWy(I3D0D{xRVfqMvJUgRcCpS1`!@DkGTV^tKEhr`*lUH#vRIj;eNx3uFQo z(urII={DlMJ!A>QeIm)s^AqE-b;2yAx+j#ImG#^pNdrXYkz*Hr!aw0W<&$XCZ=nU| zqBEC%zE{QAm9@3Q9Aq%eouEUn^Vc`rgD%{{iISh0!rT`?cZ8SX_fS7jJwpg9$M&4T zU2Ah)itt7Q_NM0>iN{Do$GRcOgcq|*m3sT>no5|lWnP zrT2*St10UoT4Quj325n@fTugm{gvA{GCq4IW5Ss4pvh$nSL7>w=r#;gNNAAYPmm?e z8`UdSC_50WSHE{FFxZhO^qtM8F|ULd|4>Ey0ub}&vaukIdinZ1AM9yg`3*v>;4P_` zCc(0Ap=ts2Pt1IOPAMSU9>nC;P7#dh%@Q8tHp(~?TWJCjr^k^#8C#ft@c40wsH#h8 zROZtX&XmqawWc;JlKqojevs5>^AIG-1OV`ZHdx$>s-P}sA+Jrs+Qd4GhN9*+FM@iS5FXV28<@SiAa zWxVZx32+{JA-QDH@3TZq>3umz z&{98eedE(0Vx0@Co!GzM-Vo;^#1%D$t{i(76TSqGO#MrskLx?LCz_yTw}F*L5da9*Ddn{*>W4xA#n!^VHvrRWtp2IPHnJ!CX+8iM)x% zw{&?gBFH7by=5=D$CbfErCe)1x#BbY`Y)*c<O1vC;!9R9@z4hUOm=o(fBH?$mx z_RP5fSF@fxB#ZN|8fHmy`A>W%tTqwwjYpQZNxc@*6|T&>=ZIznC)}a-mp@eWMeC8j z)60-Ajeq_u?6S>#oJc?h*z;dxzQ;*dOF@4a)9OeB^7@qC<`24jlFrA{s#t1Q9oZV< zOXgwqHwNBs2|qf_zvH(NaN?_!V%yyn?DaUpp)Yp!=DX4p964pHkJ0A*Da#Qy=hfk z%@?6G^}}?I7>rXdzS;sprFTysuwM$4sHl*i&O3Ai3)l97ipS&HmeO*Qx85w9CRD$7 zAHTG%YhRLT@X`^DtQ=loeIRaFG~ux^IYv_T`uEEym!QWn;4~@l!(ZYtQtYb#9&Euz zQws6M;#$7ibU(%R_nyXnGf+P5eRT}jY@%WbSZPYgO>N)nY;)^aBFJ>&Y|!{ormLJF z_`b%kJ(L31*P$ADcH;W;;KJ6(@H{z#VpDIykoDO4`!7Rd>0bp~NZJN#Qu?Ziq=i1g zEqjjoDcCNye&!(t#udVQ4zn}i3j8-BNOf(I!`eR~v9q-=!*y1Cs^o*ql=wIE1n%iO z5^^oj@(LRBK4XhD_*{eY9R5@4wu)s@ytjv!2UD(wbu)e~4vd5q;z>l?BkdcPjucJB z`pkUFn{H)$K`hCUZoTFJ+fsy_-xtUblM%wV5(p{ax;VM;_{r~8j7Vr>CBfiQp4yMdwGa&HeYcv=^NGWss&qqxSy#i4hJl)(09kb zm9SIRKlmI2mi!>xlD&)Wi^Z+g+4ik3K}Xee5W7Pgq{Y2jlGC26pXm4a*o}S|B zppQfyCKe^-jLH;PG$_^?!~U#=5Vs*7kk$3)eNWvK4QtEmf47uNKUbaHW_XAZ;g>g28K?w8H4F49CzFN zzPe2))JaNxH=U{y@$vb6-o#Z&EiM zt5vqkdkF~n!t5+uzd}Y@)k%6+QGHk$>Bb+bsK{@qJ=h~kSzf>&D!pX>jPvRJ3%x`1 zoJ*r#P`qf%!PPX*Texi@OhcCC;^7UuaYZ19Cf9{UH?rDphnN4rIzq9c!Z*jI6=Y{b z+8-7%6R2^?7%Deik2Nl9sz2gb6{oEndHsiqIavE6f~ZwZM~bbWyzM%MZ)w!v89tDo z)=E_{G3mA7242He+LFNaLl<}TCAZ(+{{1bNGnoEv_RU29JW8Em%@p?^DwoTLmS%zS~*gyV@RGdFVe@uK>z66HQw%vM0P0WjpPg6-7rDPjr%o3Yv6d|01(5Z!|z z0m<~yq3RQ~DB9+F+}$Mbut0kTyHjKR6lxiW{bt)-&NeYIDB$~|R!~8Q3>GZR+uI;sS}n*2q7|F}(IOS9%2tn%Ut~Q@ zcbwu(=`$-5byJzd%HJJ-d1PrjnbrWdZI-sg`CTC#%&TpVE^aAudTm7SuLlYjlGj~- zpoP&2KAfhzI7hc~(l+mPO2g`VvMfxaSu+Rc7RYT8IY)=fo)|7h{Ogmf>uhU>YcXUN zPrhqfqWAwdWiX-DLB>gT=cr<6KDf9Za?;5_8}JX98yYZ2z3?-=Nc9GUcQLst+3od) znsRh2DrgP%@Z;i>j%U&eJDc_>oo@T*o+AzBtuN;h4{ind{#Q(AMW8N7c+GgjAM!h` zgi>vKc(>#a)$Ko2aU%E>hJ~JDUEhTngck1xZz zXA1Sq)5r5JW1Iyd;jj2s8K|0-Fn^a6`TqYe{U+Q9kwr#X1!DTG+*znV%PiL)EvFd2 zx5i9%DAZ}I!vWU{IvzhK?NNM~+cj(zi8t?U7p|RjjM^$-YO9(rX(axqEok(uHcx`v z<36Q5@j}gAO{;H4bjJClkscdGGsu;9BlGor#t{))Ne{C-b)k3v% z+fRT}-Q?L4E%NidOU;$(u}ek&qhM_7K1xkUkW z(Rks~LHVZ+mya7J29%TbJX&P~S?4`(W}GKg=KT~E^|Obul~KpP+)u%_WQ9s0#cUUC+V&AsoS?8>HJ3&!G4 zYb>H9Z#?5&+uJAcb`G6>_uRiWkG%G!!fg3;*4DIh`LzxFXSL=7G3)2L|FmRHX!#dm=}oYz z<^o&#A!&BlQ^<=ZQSBE#_UAPVI23cc3A;88I#mjmHskRVq*qhSE~& zZgI8olqi8a3AVyWBRQ|L>=X0#x?1ZQlb2aplUw~gI#>y4$&dP`{Jo%}qUqDNMD=WK z-6YTtdWwJF^m%CBUHp;p@(*^zw{1frWG(6Znrk{MTi%n}_xme>PWX2v#NY-Woo}!J z7;MY~P!+7r7oiBaD_OcWN9$%f`TXQZU2iorG_9>T@3hAK+prMZzlLiqHg@ba*Lgo1 zja_P&k%)-%{j_3-ChJ$*_qHIUh`j&EGR<1E}>Ztsqk&Nb7N6&#!AzlbnDyww?# zEHHJcOg45iO%jcWY6>zoy$2iIm?MQ?H%0O^TrJWcY?rmMKvqYu#td`ZOo{pt--Q;* ziy)N&Xh`G9m_pU=B_3whA>QjNcw41sb9t{g?i7ymZD|fMf>_&25o)KBFNIgKO_qo6 z>7hKyhJv3y*Lu0VS_1jrAWTKPKUx|!R(raeP^s;o5-{Ii9(rMZz?+aiKIdVKOOHF* zX#<0P3C@YmPQ$n)C5w(_X_dvxa9#5Zd;fl#v$xU8URBR!UC<)~u32+}w$8k45$D$% z9;QqjGJHlkV!|<9rX@fGkmlL;)}EIw=j*jntqOd2-i@Sr@u|K52@c4 zaS+f~i%f`heDRS{s{Ek+M+@7_GH~2_mLQ9$YZ0~je97;RMYwPxD5!>2yp@J|s zpQZv|5BG*<7{RrF4lb4~9|9IQX@IyO%KAz(B*5c!=CAw6NA_ zTL>uHcu(XYa^WMop>p@fzQUp^{s*rE=@;wR;vigpZmSmB6|f~`EzbQC(a-F)Kbzc` zAu#X^_Wu1FJ5u#ZJZw+#`OiUjLMB%x#0sqjFK%keVSUigGhBE&^I`#73U|4X)Ms;D z9(o=5lA`g4iYMJNp~&7NRggW1MH_A`Hg6-|vz^l3@Y!k!TXl;jrsSg8HceFA#ERQe z6}Bjp(>Aj>dnw*@_3;lCeDpQ3W%Haq#>4H~sz1i~UXRjFDdnlcL?BoI-kd$Pt2BCd zxD;?1Yt5gpw;nzHhw54w!htr}s;TB6x7#5azWj%ZcPQn1xBd0caWd4~b+#&o5zV1B z{%*V}ibDfm`bF}SjlBhE0%l%7&(M6K!x<)dEX{vi8D$;p%~cWK7WAai%9HU(FzUPc zq)-r7#QO@5tX6*SXwrYx(M4C8mmwtxYtCl)G%wf0NkGw5esmApX>;3YjRx32Vhb`O zYqKPlYWZG)=;KzZga#HlmLD{7cgiN@y^T~cE8DYF6%-#yF)_pV zr3&99K9$-OW$c%~J+F|`?*7vN@!KR8kT zL~*k|oY;wyGR?bz+}b-7iu`$F>?aQ~WO_FJYjXoAvn(#HiFIQtqEER88Wyi;%z;Jj zJsa6ZsygF8Ytg~z9w|y0HKrKUh7VHnF+Pfab#sxj(dx7uwr3sagxkvDJj|(E0qEG^ z!(E%k#zZHvVteL9_LCjT?=f$r4>p~sYecxvPyao1dB_U#ZIHMgw%bUP!Vh8*rh1N z;L$Vz{<-etui<$tdSvO)CQC($Ic1Q^{|yZQkJ1_Q*GZ4co1RH-nlex#3l3P5m-~P6 zcxbb9mA0M5?xLku!-a2hq3hz~-zcQtvwg_SkS`}uYUWRs#V0^ z^BV2K81jZGP_%#!=I zCN=#6qw@PV!KHClqu97SQ;j=+sPyZM&}{FGC(lbheHmcS(loTRC;BefiB$BO&grMZ zLihH!4YDuAt92s9^aGw}?6BNnNK`S&ZG-q^iBEX?Oi7q|S_!h_D<@FBXRRjDAV!ub zn)si!fugRk_vA$h@!4X2aoT(v=I{iiqoRi#t0!zLlXR%%M&Uz9TiK>sYtEf%fC8G{ zBqMZwPl?9=-8Rzg9yL_R=5lV@74%_H_3gg%r4I5LdgGwKX1plMSZl#y+p8?eC4)p0 z9VnyMQeMkW23v90wvS&seqBV?W<{#ylwFlMYEBg`ju-VeVXPb7KQ2rQ2&x!qH|YSOCt3#gCMzswmi z**SwUiyNgq*F+F7shj%DD|(YSC_@CoC`)v2#V9K?H8txh1G5fB^$4u5pHsZNOXxJz z#DV5M7ay!-gxmf#TyGK^uleV_e*J)7!i^VCxPRA&4u`Q=^yY9zcPcy3{A8W+z3mg- zI8!pl%fkozLlyCoMZTz5Fi9!he4LE!0^cZnktZzKn#xCY$xLy9uWA~ATMj*PabFMM z4gNVkFX@J-(uz)$w){&RG}H2bolUDMB@EmSbZ$!oE57>meeXwP7_)+;HtW_)NET-jdQmDsvq6y|D_KcA)jZ$AsZc7thi%OX?Do53GHR*3fZn-fH?-qfZxS$J9-xy_xA#%q9Z3l601j1WIAlcixT!Fl*<@0+G|gLuvchpm?Hp}UOU)t(@kpMeo&$A)k7i~`zs&_7q69eQ9cSe(s%5!ul4)!LH31{CiX?L!D}%!( zPx#(K9g?bk(wY3B0)A7fY-joeQVo_-tkre3(a^V*lJqVZUSC>?CKfuo@A+XxnoNne zPGb*5`!q!+dNW9QE9#&YO`wJ%&(bXI%hwb8P?Z$RhVU(|K|r{vZ_tgde6Cv5KQ|sp z2hW^l9Ms1iH1u+6CFWCdmTcpDSzqQR1cP|rr4y5Kix;*bWj8-a7r{fr#jr=}8x74M z^(|?EaK%7C>GymxJ=?L@R4^1z`=?Pp5%woo*rvcf(1^odX%V4TZ+ASVvQ~@FbfQVv>tVeCI%tT~wlVY?MGm9-o^; z5{sScbY}Tx6*@G{=tbmYK}7Fz>4k=-_(Z{NaF>a%uezU&r^56+AK~$lXE`BZiD|IIh5wS%@^aA{4JUaSseVFWrnUm^9 zeI>euViW$82ZVU%?S!$m-wj~v;=Ak6p-pR2SL8r~E2+sZE+St3t~(9d%Fndmv`b(E zBbaP$7Y9qYD%efus>VD-^b#BB<9{o=FEL!IpmA;oRwYrv628<+cGwZornv9j=YwJH z!zir=pZW>g)Ex0~(l7)RAdrY*^P$OYSxKy@Q^e z%C?!vC^Mf59iE65k&vqpwL;?aYIie?kf ztj*@uaoinWeu!-FHWP4O#&-HrvBDM!t;)rUAa^y5!|Hs3kU{+g_3gD2 zRSGSdtN^8-9{VVdwMgk|th-~_&v%{4go#hQPRmad_{zu{6?9RZD-RSZjO>X7*Cw>+ zL$f>yS^JR;^EE5UM}UzB5ik#M+=koc2VN})NbexMQ6V>C#mO{H#>sBr*h9ufZ^F!j z(ZVwowa1lGdxip8zj<7f)c3fB?Lqe0nYG*^`*K}9fw5yl_zSP|*L@lTL`+A4%R;O7 zx|Sj(z8E$?$C?pzrGEt1_*rjArYWke(>;xQq+mEmSfg7H?@zmq5&vXM6v-=~IOu(l z@tM6;6&?eAc&4WJb7=aYa3+1m8Xz^^K3C(x{_lZ^6Sp;n^4ezy&9*shuQpMQ&!yh6 zmi=*P4qI;xQrTZ^m{g?G3NT;J0fi)$U7IHvpt%azXB$Tc)@-#Su+mwGPF&z47SCY( z-p}$Ar=cY!-hGp5p?j8_6-MGl`${S2wEC(RomM?oxqzjqRJYJ4lR#i!c9rG+Zt-H( z!o6m=Lp`OWU6-Kl_qV`5laAS!4gV~N%*K8hHeLyO zg3qNx2n1Bl0c@c2sD%c9Hq6%}g-D~lsGIL-(26cxGuK|ID8?#f7Y>p^SEgSwm|*Vb zJUO*v#>msFN8~f$M6o-d74-59i&JnwGIiF8#R}SFr6vj8DZq{WzE5%A%E-yAq^Par z`@vm5HB2toW?ot9ufiHyl@9+<6^h4u!89IM8k#r0Y1x)-46x{G4)mjE+M32ic9X>h z+8M3$z*fHsQ$q>`S;UMAv$c^{7T~orVdUlXKag&dfV7wbiJwl;L?agQN&A6>KxVgL ztAQzTeI-oz8;@;AwXp|XOMsRM92c`j&pj05Z!oxO-YcCsjRT-DBut!b^yx7_CEKZjx5GkoOXG2dV%Urk9d=`ZXvI8_kyYeGj z0R6M>V~V`)m}AzWosc<#O%D2?i8UcP?Lv2ur=|h3CL~)k3rfEq@@AF(UrPQ3_+YN0fI~-;OXdV&Pz2-;6%iR0e%l5Ou~w+g#0x*NOx=A&qD7bXWAqMok;V?R2Oc9x;} z>8mgo$7uU{N}s!~r~M|8%MJ!VRbu_Sdn!4Xq6^=cx7Ho&Vu=Y5UaR4s3($~qlZ<#V ze&=^>VN3z|!v&c>mV@IYrZhumw5$(Od^#_oxKzS-tNF=$lZZSAJ`NN4!e2~fkgTF% z6Nb0jS%C1o_>QNZGC2&H*@{rcD`Ew;S{#e8vHPz;rbG}Zhsnz}QPtZtZ!3&LA-;v4 zW0R;+UzP_qx9bwJ=quH$-WF;vatYLI^+>mPLM<))?@D-Ua&Og|vvo(PDh1_K7%(h- zl4xpPhp%Zc7Bync-zFJ4z+myJLPJ9?H9(ii?BK7R8s6f1FAgx;`WiAXNo-TCI%Tt( zc28nw{9BlI4}%6lmd9VecV zQk2J~4sL_1XEkUw(wzp+^I}R|=JGSx(|BwhS)$u?;!58YrHt96d$r=jyYj zCCGC?x7V*T*$v``b9367J6V$I*V0=(3cAd03#pt?6|9INmnpUY!n&Z`=u*x7*b?Np zJ*cFk6ydk~Oe6?K6JOiQlpu|J?r}{SyB+%Spsy!e8+e$?M;|Jv!!tEINr1`F1z@(9 zU?BqEK@q!S3S~bThv;|;m91IRBlq>T92p?*dlR=q6;Q~P=2>gP!x6(jg(! z7F*Eah8PW36zS~oME+zr;df^7S4Efz(yPK>vDQ#H@j=N7ooJVZJDa@##S^y#Z+?D; znMb~Kb|4;q`OQ5=*wcfK&{>%4C5;bPyJil5X#F*$q?!W)X6VJWuO0A5cau~p-pexg z0@6W~ia{tE@S#?d(@HKQ5$ObKJ{Wi?++OERhFK^UPFvT7;GX;7RF=AY&OX{*cL?I!YskfNMWnL3L)TBH zt`1fwzr8zLX;m*?z@+ijVb}10!5&BUeZnk z>#W*HU&rxP0`s>$JHfVHd}F+{4gcvViN2uADXfY#Q!Uhn+WV7cxMFJxKax zcXOjUG8jhAzPUs`ie7NEd8 z8j_yOvLohpT3Lc-l*pn@s7JCB8Pw+MJRThjSWc3hY7Xi`JNj46hq)~**dmIaZ$MgD z4+jHzvZMupF4CVa4cPurA+7tK%3Ikyg&?sja56fo%K%fDXFge>p=l&Z7ay@XQ)1+u zfHe0`)UxsJl;HWL``}aOqk9opNvR&AM74wRUkLrmGNUvjkIJh8vlpr4ymMFA+fs$qNW`WB-un zFyp9@@XqPO<>R>IT+~&#E5-5fM~?$xAYjJ)P_M1JbCkc+HavugN*GN!*Rv< zibTlaUTd}oO;Ava;YNLP+k2ZWStz@7q2azrb9Bw&_XvVaB#C>*_Yc)SeU(J_^ZGaB zor`&7Vo>L~eu?*KlVYHTELpwG`Ztq}Z%TPOVeCd#?2Bq|C*<8S?;ylcZOM9C5h$9H zR6_Uch0mrd`^!M7yr{DW?*pc)Q&$dC5)OSW%a>S8@Urs7S@0%ef{P52y&78hiKCd0 zv&<4_-$tvc7t>p6aZW(^BFa=&0-e_(mfLp5rO-?(E`(>M1GafIK3KR~r!YXWhgWPo zj35{dn^0I(>lbdr!qALxV3ECnH{(O3Ca%z0+~+uPyi@A3{!Zo8%HLSjsk$8Wchw=J z&fTIFSaN#5l0X_`4i7!ATj)962^3fzO7?Ig1o1ZkRxx7K0Q?M|5>9_-(ftLb#ait} z>w(hel?ni4RiD!)4tAwa3JSmh_A@w8tgE*2^Ro-3o@jCB55{F;&ezx)fAwqgx}FE7Aqd;M&xSv+pjKE`iw;#L6-Jp)!8~c_=md zPiCe3&V0D#@Aiy8)uw?Hkh^rOJPx`Czp)s1bZJ1YLF06*q;~X1 z#4IKBJFw-6G~M1{ug1l!&*omne`BARE^}pjxfV6y10)`!5yKLE zB7RX3O#D^s6I&P;SlK?Ff26KDC7PieVe;))?T$Sq6L@&+u4dP^kYNiYq|#r{z~a!{ z&Ca!%F&?OWG(aGZ9jdMn5t6alrQWu{nD(nSOlg?XqBbh}2A3E;eK3hID%`d|?i%?i z8e8}=Re}HkET!plA9?^(C666dUb3^Vh9v44d7*RCPAbHDrSIIeC!2$Fy9%1yuI7Wq zalsFa!@8L0l;$5#KG`Dnv`39CfZF$a)dw#!cR>GftX>Flwrv#h62ZpJzfhd}*ZHXG zKOLTR0W>y=t$RTwNJ!^uXFYiKD;lM+M6k76g4rzgCW|a8u4VY%!v;lWbKIRh(0+L7 zxSYIFAw!GMx-*Fl(sb)(JM3{Qou^?9@12Dux@t;q+|#TjE{;st_xnw=F~MXqz+720 zuh&AQC>Hdw`QNHMo=sLNT=AR4yKo}B5NAXWg6BWUH>zsi30Xkr?W7LuJmRLFIssa1 zwbRzEx8`oKcYxER{3PlB2PZ(-zlzFn*oxfH#L#tdl&aA7?v*tPvW%(JmLd?00@F}`wV^WVmb#U*kql*_xwOBuF@VbT)_fSyyg8?Mj>E(HwdS#R z1;^WU2{ca<=`&br78i49@UELBo~dbUBGfG5os4p<=GB_u#>L!XDE(jl5RVV)_TDav z=F0Zzd_8BVcy=8&JFA7(yf!X{oK}{%$#E2t&1)vD9ku+PRlMk}B%VyG7`8_E?AwVW zg3NJPc{#j0cvJ zODgPenIA4WucG`>;q6yP@D`QhUj$oAb*=as<4LjcmXW7EpL1`m_(ph^(@>Jf%*2|5 zMWvv;vza7<>6Sh0;JL>I@zYF;QPaFNsA!1}n{geL?}|R(bri5msJ5XqLv42|NhJ30 znJlANW@y;PW3`k7M}?ic@Z3dHFvQ`x@wEP}imzJ*QTtgs^ef;YPOKq~r3RW)jZ8ix z4_QV~w>Ko*snmo%a~Xr48ZJpms%o4f{hN$x#;%T}F0Hg$YBq7@yp&XwpU&sQIxX$J zyj~%&vedjgHKB=bE@$$ubeSW%y@N=(p6N_eU1@iZJ-xj05|UWUZE1KIq*4RtJ}U5T ztE+rIw$U+vCZ}iPJ#lWQ^KRc!(fm1cq}v;P3s$+A)uogBYI~cTQFD_WvW1PC1lO+J zctgcjw(@JYP-xoDkoGnaYPvm+r)fNzm5s@PE#BJ3Nzzh^W|Dc~g5^BRQ*j^w!?<6% z&^%S*ZEM7qJ{IvVx2Wro>6TiZy6P9U*VcN|>9%keifE%mw~~0RWGk_m=DAo{iIuot z(Xd(dTrz~?m|@&uC{5L=dEucrO+n64SClHkIE&S(7{yL7pzSqIuP=(Q>C|cv=97N~ znrYcSWaXn$dMMrM{L(zz!4`&33rpd-TJ~)=%ShDiQ^Z=Wly5DJ38`v#SDIqoNWfmm zY_B1`j^Z4~zI;)~x>zOy=Q!=G^?w!KX}3{%LJM`*`B9%&TsTC)>coM-p7#LSYF#(_+A|<7-L-l zrGrjaRgXoU-&MGIZ&FR0O3c4xOQn%Vo-SEobFgB$4Npy$>RXQrCH<2};(rd$X9lM+ zcl%cD9vit7#^yyg0{+@amDf8O+TpMoClzDFI;V-eA*e^;onukeFMKtpYOMqocJ>zX zUg_6TPaJmtS(J;U_uN{pKc> zN{X*7da|Wexw=qONlI~cZWi)!DiyI+C@HlE$qLlDsi^X}LX%g6Y87OAkp>0EY$_Q+%sJ)+h??e2rU%RCf&&qd3@J93L!jWp6(wG_`||aZLI2d zcDkpBbqQNdp61mJ^Xb+vD#>9sp$u6vjq;+ILBt@HBo{gL9YQ@Ge-Z1~Gu~?2rkmky zI&Bj6BJ=&C-F0hIW&N>b6rNhkCCgkon@y72+sU#sF6m<<%KT5MYCaIMmg`5?)?=hJ zmRg60?k(qn^5z-tE#2pPB{vqgvB#TLnGxW4+^P(K%s%rEnqxC(hod;sol5j5#}P)Q z8A6+>T9T6&*=FR;Ly3q~d(uH!6-75h}Fg{;fDaV<=8O(kaR|j9}!W zJ)CCsoM5Evq@r1~-9Lwav32tzUfGFTK)w=2WWLkwXO-i%l1Tx0pb%P%coH-Fx07U; zSu$rNq)&N2$*(sg;45 z?Una#R;;3(7gALcsOqITT8}%R?LJuE^!cZP_PBLc zr8-q<)PBbN_pFpv-Ct)WnrWpQPAN9smC`(}ixkXs2mzqm5cvl*nDc5=-Kr41Kz58_yGH ze`dIQ`-rZr^#1@5h@-h!)LZ$2+fTH)Xzp7ZS|tQ9!HDh{`Je3SD#_55RV68@!jvuU z>en?&GjdUSKXJvq6s@WG)bY5;Q-w!W!FyQH=c`sqP02W@$`Ppu#m-G7B`C!vn|9_$ zr%mx2Te!A+Wbw_WqL8E~?O*V$ptHJ`Nf}hBx{XAOv=GcT5w{?6a%o@Pc#lx?W7KtD z4r`iP+rnXv@4-&t#KE+v*k<0wJF`&mY+J18_U- zkz;Op^UozoQp419RHII5w52R8Vz0gQrF-ib?RBP?>BH5<<7q;pon=WoMk=jH zt66)|o5WOei`LsGx^J#kkB6EO7P94%y1&T)y9)|HlJkV`I~L+8||@a%_MeL#uph z(yza>b)SYhq|B^J8($7Za<;QFf#n@a*2h-0j@CwzTrrV?$`H6!B(5;8Im&W#!dH}U zD7T4)(pQtT9OK&VGSf>nx_yzu`wBFYm1+udQr1qXGn?Uhjg>2E5eM?aBUV$d7 z8Is^z!xXmjYWJn)aKH$rf;qt(p^`-T&xwt%h^JCjs9~K)3p$X(-d^OT%lnzqsVKQ? zXBjlwO(ml~lMjT2T2OMWMbD9|RIN%fZL23bal^SOcWqrgWaF~(TVIE|W~|MAG}yc` zXz)m6xKE3cTG(5m`C~EZ?Ii0wWc;rJI0y+*fyG6o{5jFA?5-ic@b81Q{{XUyZf)Dc ze-ZV6wp@k7!uM9&qqQ=~*_PrMX9N~1yn|l5f201y*KYD!>Kd+%s~ghor@MHYQL}VJ z!HyX%KGkf$Xk)oiV`xJ*6Ka4e{ojTBE23!&uY5n!qPoyDsAkq~Z|=1n6T;f9f~y-f zwvy|`4QC=5W?jfyCItvPPIFw-&uh*qjX37ir&7>@#ZbiI;+ns^8u7)`jGS+1w^A^Y zNu_r0kM>H0V5(EXdr#gudpu1V)1Ny@b5e~7wRr1pMJ1|g_D7gWq5LqpvN~GYc*n!q z@0Ri0Tt(vDUsusA^&4xXxYOn~t)|@FJFd-_KfQ2Nw$OSMu<(4g>3L_QYBzo*XkC|3 zlf(WpwY`Dx5ZI#lXH$nxypBlA;#Y+uX&eMP5ORD(*7 zO4W5pZRKMXkds^RrPZI?uPoWT!E*vLyC}pBz^;ws_!p)4W&C5{*!7KfP<4?8jpI8j z+2>nWcc_-vP}DRT|lYVt+3Lw@=arzqJ1w3^_ZQ)Q>bTU|DL`+Hlz z?7NHEd`A*V9>^Y8XVipih}GBUF*Jx2tFdr#v7-LczYV-m9gl>3L*TpkH61v?4UOK9 z;+-Qy-6A)c8I#PBE!KIN1-IGnZ{m(}PSXkbYp8u=!z*((u)htYT|tYi$z|aCyWL|= zNu+_{ztvYxzn*WiI%QW_jw_8m;iDmEMb6yiEM+RGW3sB4I<BbE!7;%nK<;!SMya=MYgYX1NZd}y)T-QR20+J%Id z4DRi1p&By;aLQUB-Cx7{PK|c+c#_xRNVb;V{P=%X)%-cBY0zBQ zTg|5BwF9>Mct{_?f8qcf~h|uV<@V+v*m& zDM;9vWYTqC4QcPCYK{wea$QZTv~4IwjyW7OL$Zz!6JI^b>Hh!{d_L)M8Y*kPFwwM$ zwPA?NF4n#xw78DxqhO+Z+*?8Nvd1iJS9#^HmD7W9r&kk)QiK%fRilr=#Y)lVl62!< zE0$7P#(H$u+F!-5 z1tVXXA=0#mzI`g%;g(Yri6!o%6`G5ZsTYt?v#SPkm1P6Z7ftcBiD#i*d|&u+s9j!p zu{>A53hsPSWqSe`Lq|5XqQj_7B#|tL(d|WG(rgN+HOpOmD$uprCWJ@fsh?54NbaYx z_;c|CL2En9U$m8$#?M{wtdw7%#O;FBZ?M-aG#Qtcl~3O|`nVwP_VvDVB9p=5QT==jJU7 z;dYm#*|ppnuZtkPvY0*6cx%In;LvRDiH7F-{tp*VHnn(wGE2V4Oun*_LdLVkyI5-5 z_-@YD&i41h{y+H1U}c=etlQ~&ZV~0RwvtPEukXAuqg`qy-I)~ml3E3EFUun1C(Wso z<+W=!JY%VOxUX-7trXuirOOzoR8Q?jNwn81c01vj;%MR2of$$7Fq=-LK6}YUu4^ds zdAP+z>tvHX+Fy#--XgY+{{Thsz_$?Hv`;RP;~h?0yQ_mXpU0lcCRHc`=j7n%h*? zbnECOLM`XGM+kL%L#EGjp-raW>OLmClELG6G`py@KN)F_E0t%0<4e~(Palc2m3YHI z`fFcDbrThMmSBywODM~5^*LcygkveFQJa&l+*6OeIYrKHQfl0>ojEx-tYc>TY35U} zNmZOG`*_8^R+SjOsoJbLZL75XoTAn2nd|nS47HtF&fmmNy1#~Ow8v_8d(}U&02MY2}=z& z;U}}ckS^6=;WuOjY~re5g zirUiV%Jm8I{{XV@&ex0|AO(m?*nh$;tm(~eG~XTk5Ajck#M3%xI)8;U+dWS9Nen_C zDkwEozn|ntdNO9qs6YY}s5Ep`6@ z2I>*b7nq9i%CmiuBY{`}xJ7#9GC?W^;p3XFtMMY+eWtN{AAI5qF2;sw~YoikN_N>p1-s_dZn{?E$qH8SX$~&_BYY>T{BnIgiNE( zG3pv!<-WWlBXGu{W`HQlmm`{?lvA%teD!b`d8bjv)uBaBQ*m%osOdU(N-e0**ruh- zt#g*XXBr&5%NbHp_h(h%>eZ(PoLg!!acNFX?55I=%V+fc-Oq_UK`o4rr)V<6WfBpo z_$yzZ!dJEeGctL9W7V1T`>7+4?~x^wGPckd7FxER8u+Vef2d5q8}yx5!)Y4Gmfj`O z>~#%7&=AO4;#*{rG3Cn305K$tL1tMQcPa4L{vmvFS#R{q?}tASU|1xXwJSRd2(Rw6 z$*s~il=+eA^GNF+-Sa_m*Nt%jWs*44dkVH*G5D`(XD5hk{sUcjhfBG8oiZ(ZLeOP^VIzq`6y*ii|4C61rBY8%E9PcYmnumrS?P zR_gx%$69{3=0_>l&5Bsb6}!I0iWqGze9PtDA&_CLV+*-A5sJ>d_-o*Q7{wgk8`Q7v zt)rbFEv9Q)CZ9AfB7`$bY{f3&V89}i3dy}j; z>WgC(DI8))hG|BwbYBpmX$u)1DcGujOk{z%n&rNWdwyS4@R&h7R`WIXh2kxG&f*4b&F8j0rP0&GSr7^)DvXHRVeysY0rZYvL%&S$j@QJ!)}oNwk$J{>?4b+@j*_ zq^_B?Yf{8QGmI4BXUgq0c&#qgPFdeX-S>C4mcOe_@cUlV7FE!!kBVf|6LRVPCK2m# zyhJii(9F_Gf@c{}u_}Sd02-*?AMyQ@U&*Fvo)qwc+k_LX?z4FnvkTM-a}d(vxM)|) zS1hX0s3#zin(=vjKV_!eTI&{m5BQ&>Tr8+zx$w7)?Yu`F#oUB2d9)o?*23c4FvA#H z;&{P0Gm~Ad&xrhcX>F-RZQvh>cQ&aCl)Zq9Sq$bSefqAOs##yf9OSqNkhI~*8#gNj zu9@L+DioY?SbR&n(xqTEaKut~rsAU&@TUgvZqJqUwyFLn zL92W{zt_Zf-X-{N;2#<*4U4JxUi$Xd{$z|uLx}CA+GLAxc@|BlVo1n$U{)+16xRGC zZ6)|`sCbV5JeYQ)O?n+3kuA5X0;{?|!rhHHFaG5VIz6|O% zp(ax&iF_rhH;478*%Zbl)S|bNZ6@e~K)8%qCgo@ImIU1*cXq!OzSksjYIizY+azwS zq}=#^+g{c{iCMnX%i&2bvvuZeLS3z$iyi*}G2*M!&8VnTlp`uB-km2>HDM=Yxg!d5 zsG#?>pCj$@Ypn@kXU^%uE=_ZLOG+(X$!jE)m9J*n*4F59x~J_Kt7*+QhCU>CPU}n5 zAa#`McKTd1OBT{pO?PI?Zf>O9g_p}?xftyobI;!VZ1E)dm&2M5gMJ`rS&m7y6!5IJ zw-7+`0;1wrQfaj7mF6=v@(8zNfrDPLfALGh9xKx{`%O>be~&z4eW%JKwvs=F651q- zF(%e1()i7A5VHu-T+6mip@>}JbZkB-Y1$0;T2`0vi&4;KHp11dwL{?V1I;vH)@k7o zYBxG`chi03Fr@b^NWfRg1ELaCsq2$ejwK|eP2!-bO71FC<(#8BX+f*rqE~I(RM$GE zh?P{9D-SAd?>I(I-tOr^-p@<#=c(m({yp&CuRW6LIwy%f6V3jTAn_lD?BwxYg*=xQ z*im_LV;s`htdgHD;@<65z&|R2DlK1K@ST`_C&nHj&^$`hBr|z3{5!bQrkWO!W8Rnc zX$8leL3U)B2yLWy#d+g22@VDgORM~z z9m1@*652B45l$5)PB?t49Y!fhRCFpvv{Sr2oT%1RCs8>yB`AAW8>MG!r>mhVYF^T= z7NcpWPuu$lRfV-qE>Mf)T`ZdBeRVvF-VY9G`u(k^fxK_=Pr&vfNv@@a9TQNV+hL5O z$8TllsoA#^zEhFIKboA*^W@_kI`gW`U>b+MLUOsm1XJ#d__oyJs|@mp1mk6*`f% zksWrjT+L^5GydvW5EjJ=Y@)r>qg?{eO_&+37F}ma)jV6K!>T~7_DL=s_0I)swsE9I zy!X1FQH7*bJ6VeattHEdaD`kwwvAb0sZym|Mw*huO-6dTS#s37dONMPge6IPNZt*` z@TW?wrA299y&g|`U--$j9)TLI_2gN-djEdTo)`uqjE=Z*@IR4qvwFHq` z1qu>WfHB%PDHzRl(ELV|H&Z0AmgKwZ)M9zPBY;JVO(2!J0!wpxD zgf$IHTYFn?hL%D{I36MJ_ryIR{5JSNmiG60?E13l5$X|@*&IdSxM>u}ADY9=F1}BK zil-M+tv_U+yINFv)SKqgPOtAHXLTsKCakv-#WdQKVC6nlc|x@0^o{Sy7OteNeG*GU z>REm!K@v+G-wmg^3haxl!*StlCsxxGNWy*EeZ0p0^4KTt;(1ukpbT@xThsm|_)Ac< zwziW@iVdD(+>8GJ2;AP^SWkAYs%E^N&2A2!NsOC-WiW*-$C~(mSkg6pCg3ND{3+t- zVYr4umyH$1r93GK+OE2$op@G601QdyT`kDOfyiLThPcaNlHCt=|ah8m6jqo|7y3f|m99jt$8 z)1%O}7LrJ0neJ{3R@X3I+e;w%LU~IxO@okfE7QC^@Q+LJ9gO#I-bbux9(3Q?iFFKG zcZ_^7sV-$d**e9Ck#zA}#-s@5xB^uHF`t>g9wyZq-s(%uCs<2sp@*AP@WWo)+}^2q z3p?Uio_T{XUnSHj*~2btsPIq4FNyjU^GV?U03YcZmD=A$CB>G%sL!Qp7r|J%$9ZRa z_I)bsnHiC{$t!%v%#uaGqZ`5*mLi1eU~`E=v|T&>dCD}EG`U)ZNVzIWd^c_i&ug}m z!RELMbrY*e#?JodE4N0{Uh{VBn$umG`pc#3I^V;qr_p8CZFQTQnBD9jThxBXtQ2Mk zOkp+LFxry}J0$SmOC!hubexs|b+$V0qvBQ4*T$X^wbU%_ZYOy!w96S9>r1#o40ixp zOL=W~ZE{ZMn$}`gZ#R4(f-CcHPW`t2Jq=xLyl>!t2wz!5?;I-HYYoua245}>M$D`; zEKEs`M3&@a7{o>}fO?jL`&sx)QNPq|ym{bT?+@DR5y31P=Y~8(f1_Bzc2+gEo?So9 z{{Tk2fNkHXTTiAe&ZcQ#kUMYr3~vYL_$AHtY&B|%KGvouF2vKDlv_}8jAO{|x#KpY zIn7w*L=B_{;hy|wst-(&5s6?iAXo-np%@cqiB zu^GL$bEBj-HQbqHY2w7 z?R2RSMJnZ@jM+W4#-rqrRoBaAC4N)Id$)l+MQ5nm-dy;9;wOsl8heIo7<@x6i{jYt zR^V+@4gQ5-_p;k0J9pel@t9dh+9gRhEqYa*o~Ey;*z31iZliH56T?1MYf%-qmd|f3 zsK2(61G8nM^6mn^QM3XNgGVvOWYyg&m7RD(QEgRohcowE*2%8C%1u71`m?&O9}S9w z_HUAMi%{f@XBT*@IXzTT($}@_-nzB8GWnsZX_|Roh!!P8`7_*Q{Z0{L2o3PU&NbPR4U0+a*jyIF%Xj0r;?{H4$m11nBRxSt;>2m7&tRH1x z_(FVNqB&@FSbQ(y6-{Q@2y9$h=@<5PSBrH4iBfAji@1PiR%yD5`zkz7hpR=pm^URj z$D5NAR-28|mE+8mUDB1Wbl!^1-S}|It5U0fX$IV+mFU_JORKoX+u5h3-Im+@C*mD@ z;J1vm3n^iXQ}Ax4{{qmN1Yt)i>mfbCNt0%p=OY%fY*4H*R*ANGHRl1f~I z(_8Rog)H=W)-h%O00{=2;(bQRMz3P{X!Sn~>rfj8j{XI2GC0kwal1Q2(>XDVr^T5^ zEO2zOd5#(rrzk3Ts&K?oQk#pET;(`UH2v0+O{SiZyKT3Y;^kRYt%addFqB-~Dzm3j zr8q4tqY1+IcGX7z0L`VJn_a=Hh#0G|gL3w1n9WYfkY+_l6ek(FiMbHI0pg zX*9~GXWAt5)W)G&PI>5b4SV9}fhM)_7yKtWeY9GG#QLM@m)c&htzTO<=wP~n=It#e zl+BQ15=1hvz>-RE9ZMV+c{?Fy2v&qNqz3fRn2?&kEQNWjE~=trrMQD75bu+!E2N zB-z*XjD0z&P2)Y3E$sO!Dv?e$X-Y~?T01FhmbYtT-0%J^_@OSesjd8ZGTz(kgHDj^ z&8X??tHk66BE~EK0PO3wmRAwU1g=$I=EI=luG73t{gte0^6Iy`Rju^VJhoQ}2Ct-O z)_08pzu5JQyD3hbv0li3cPsgbO}v3jY{a+2Ut;*Xq+4BEY8t1DJVT~jK_gfn565TX zZ3=ndbdi!hQpV53dSdx2gLS8Bf7n-11ddqcU|uTabe(rx(>06DLrasyntjVNM|75J zbD>M;1P>*?qo&Uz_;&Bec~p5@nB2i|!)>z=D`@bxUs9S>YvC!V({fUy7%q8AQA#&X zE-_1*F4tF5Qnjqbo7br)?NwQF%F$ACc1gzS*0ZwJU3P0!t@?%GKN)y4RT?$;n^B*| z_mNE3_F7+zY~|53=}d1Nm;M}GKw6Dp%*zaO>B)N1Ir7T;=;>b z@p4>VT3Z#wt!=1W+zZXmmfId)Bb8uS5WWsKfH0Wqu61)9MiO!6_Hu?Am3%glv}HL$ zv=n2kR?1!DyFE-d5-dC}u#u}x{_b4$YA$E)x6MsbgR{5u&NtCtb^9yv8{zfc{2_b` z;jaVh`i-0rt-hh*pBDcBXX~0|kxs6VTU_b406o;!yPE=NgNYVjErJz4EcnmHUluft zEp5C*;Lna0kYB-fE#h3?Xqv60?`A?<+h4+#cT!xc-6gw2e1$F*c1Y@3OOKL12z+3; z_;Uol2z?v-6u*ieT9zw~X5&rqJ6&oK+CpX14cvlz+w`}BRkg zC1-UdLKPn@Zq?MHwN0z*rG!bXeXe_3SR#>R5x^paAyR~h zAtDW)Se0ZXve(`|6!@{Lc!x`~i&W5VuCC{CJExm8rza@Mt#swR{nXn@Yi+IfbvR8j zUjxfwX{GBh+SzIsv9_E2p*_{iS8Hi{W>~_J4XFDp(#V1ob1OqTBgKHc$)#ypK7j*E zqUru37Sdl2vRh9q_qN5YkJ*~)$UM@7^P!ShZnsLLd4TL4E2`9%+2z#6kK=y=>Xz_F zrpcz;_|r(U`z$_e5UI6oS4*_M7FuInA(kCdIV~cKdGe->;|?lCpzAh}J>~6{vU5CtZtE(c-?Ac$Q0O;pB=~`y!ZNa3{(RYk0C&LGc1~&DlWV#$zAhGGg`%@ zw9@Itt#7TC?#-KF^ABk+XHqRCWWD9q+u7>8@3FgXmwJp^t*(n~x^$!wc$$+*_A8KM zS1~e&W?jUC^13!uj9}up6X2D*y@tn7(3?_+&%gU*$oCeuHn1{FC)wDU;gRjq2VkB^ zAh1%|Bxes>(`?gQw32;m#5TSmxVJYpRyN}0-sUKHGczfQ)@GCvs%{LZRZC$UDvUj6 z;w7est4F76niju!_m>!1;U`l!5i~Bvq=-sQp+=8wzz1SR-e;DQj8@?B{* z`mM$MI)Y3RX=KzOy@llxPi_K&k}9Gwh^Q(}eIKHD<3^s^-fs=t+}_?@eU4krCsDYA zNrKAVBu_TdJs|m4b27%k{@npU-)q;#AB!ytSfco+L@A9BG>_vKpa*b1Kp>SCz8riSnD{eV)Ni#L)2-fEY8IB- zRi(_a+bhd>u$@lk`Zi`}on>}uO0zGP8n~74zlALhtFGT_A8(IGowUnYuMNn9Rn{T5 zkL@ocw(*;oZ6k5FPkC^&Y%1U>IR47ZXl3+s?CNxLDdreYX)G;#wiqgKrCzm8S4PuQ zNySuEA?+;b)QXcysLp4r!&0e&sYlpi?f%ONR;4EDO0;Z~g)eBO6*_IHH5*F$Peo&s zi(I?9)`DDJHko06G)Z)}5l3wEEYbsV&keFc1WL+ekVh0~fpDDiPo;P>P0~C>-X+jw z)a_SNg>46hueEX`g7U)N?V94+NBcmI#z~2Ztv4;fd7Q>1L|wzmbsaxgx4x6@dPJIR zqTBmoCA(I&L8n~Crqb@+W!m#3u(srN1U_=U`q~@3Gsme%EvrO)xE-EUUCYixL`LR9 z6_n@hsV=`ZE9mj~c+|qFQIse*N}nU5pyH~+aHyo^1!*ZkI&w+!IJt7h`mf&dOmu3y zDJLn_b>mX3XF0+Xpx~*=w&3GJy_9{LwUkvx(rEh!;r{@IJXx#w@4&ttGq$4~S99BH zdP~2Ew2gAlPL?<&8dc7w*H%`S7BE^vZ!}lh4a|~8FD1A0m^OKYUuUqf*mw;KG= zL1i0RhVvO*vV9F{CxzhsoBkqS_*Y%<4yCO86Z;jHi1cj}Qbg4C$Gx@^MHYu|4dj*+ zPY0bKH#V2C!+7>{v;%=|eqz%#?*@EQ)nCP0_lPww2k726Xzq2`^;MHz8cSNubqm|s zSlg^u5w-bidwWAK?qPYFTgLL$Gx5*HQ>19W68vST_y@w8lz$2v#G=y6PP>y)x6$vW z)2ysyX1$gt`#r#WnOfn|T*++=s*ALYo=h(XLyGe#VRIUo%)c9fsg~pCf{h$J@~KzL zs$r<&GU{r*T20RrPPR6abn7ZJuH}xkAKlZd^BI;&gw7Td5t}@9EXJiM;wt+zvAOFO4sR_Iy^s98&3^W zA*$%t!_=cJniIrMaifC8VsK8Ru(Yeh#$tkznGq{1ImnJS8 zM9qb+?@`wqM)4)*ikjzG@fE4Cwzs&_EUxBuw~1tq_IT&L1MKZ+mp2Io!bAZfJoekP z#(rb_MYLMnP}$u{BzMdK(u-|QE-{OgT5a=sxEyRA3cs?a$yWo4l{#{wqgIq>Cq|trk)=bH zGlZ#5vv8`X$pHX2-4ej>HGmq4<=w2tdbj_xVtzm!jTaAB1d zBaNUFt1`go97Q2;gSyt=MASSr7Ng<|Uk_eE;2SA)Zw|?=?z_0vuJ7;U)EL>LNgnMd zOSqcpuH}xgTp#y(*26?-`WWuPPma87;N;HCg@w>xVZ)( z8aY_*Vn`nyI&^V)g&ajX(8JTJ=Ot4QQig+5tJP2!|RZrw1gvRb4pj`f4Xr{lU%2j__M@Un$L>v?rkE| zKY5|WrnR<_Vl+E-vb|#W7O>etaUeGGGKnAU6I?Wk$loRcin>;teR*?dpy~Q$&Yh`? zbhFiT{YCC3wAC${_rW)xGXZHiht6o>h&nQ;Z!nRzuj!r-@V2ox_SgI*_s^(bc(t^q zf;(rpg2uvYXqv_a!X%_3iQ*YmVJsnVMooM7kGw;tcxLlS(qZv_o8lcO#C{pFw>rVm zZKCl;jWw*&!5*7_wydoM#AxCxX^Iznc>$D?q#vNgB2~(ZDw47k0PEJerF6v2n*cx8e`Hf06aL$%4wKWw|ol14wDpdA$WmcPN5w9Le zQ&kkyqUG&X?$?FuNqH;UTxe0-+G(0(u|~R7zh%2N_xfoIJ+YCHtdKZaCrKoY1F;HG zT~({ewUMed?00&K!4TACxEAXqmi|O)<(Nd#EM+4*jzClcgMz(J(Z3D!9Vf;29wgF6 zq-=EKEv=;Yml2n^w~Bd`NJ~IjrLu%6mPyr4&DoGH(T;E8Kf#63br?pGDAxQwY$v$1 z*6kWetdu|=Nh6iHD#kMmib{suc3`PBreB<3u(^z~+)Sei)ZxzuR)f2RN>u90nyjY; zsyR>Lah&F&<#%?2AB4tF1@+o-jGcAuW%YSRFr!h{gk2X1(sP_46;=DPjVP(4lCor< zvks?WW%0M+0>^rq9;+Y3eHYHxBD(t`TU#51is}ZCVPaXKVilK(iSmeDz>n(_M}p1m zZEXBSsL2P3d^N0Sv3PFxO}2{0ZA!z$%(i-?>L%vyV%K_X^Iz&0liFRtZ0+V!>2M%b zZ{o{Ky^BxOt?m(~ORGzxEK|d_DPntR1H~+Ivkxv+nk0OYoCQ7W`bhXa`&MZG021`S z1!xzodcGrlKFY@XP=ea-eLl;?_i%}g<=2Rfw6?aEbGl6o?{?^Bnn^9qtb66Iu6#e^UlI5V##-DKI>pzB zY}><+s%q(}O{{n-8=Lr7T=4s&K?@@4vcqw7jdvWd$p*rXSZA{Mqv05Dt{}M8Wz)55 zy$-}_{{Uz41+12EUCnP}awE2}j@hTTcjl3d91wAT+NBW&%jK-4}A_*?dX(5^IJ z66uyJs(5q5y0zY)dTwR0)n&S}i_L>svAhWpitfu$x{iA|p_Of~RHJzg!I^m3{57du zHm%|R02ykL>Aok|FZ?}i;KBW>x{jl)8*LLzM!bU2ky;e9wT9`gmQ{*vO77v|jY}dq z{yC?ZU~x4tnEVZDxD3YyNvzie?Bgm?j9wm`akv`PXDmfpHSo^8TvZ1dO9>?@s*;S< zsQ#G>E|p1O@sw6F6OyTiuA>e|PNuw-l#_&OQGdJTP<)C z{jRxVb1Gchz3KE2`iFq81mfFRRonw0pi1SH^5gY_#r{{R_yXeGU^o{^&KJ{+;suWjVJv%R%_Rts;iU89oTZLRI%%@i2R zTE{KIVPPa;d@S&tvqaW6PocHD2(>*DC|46|b`~~UWs2H+gpKbtD5Ac(eX+=9g>t9l z;C_I(ivv?G!sl3wH7b~_65$lXi&WF@w8*ZmZgmMJhfdS& zBeAlxR@-*R!kgROV@K6>>w7C38;NvFnRT_c@Z{PDi0-^at4?IsH9bB}Iij0I`v|s% z%5<`i?0SxsJ6k*~gvxzyD`gOFr zlv#?`QP6ce*BYgij`Gh6UO_P4tB*hMjjp%-sc{w6-SXdQx(hRE7I(6}%h_K&sJ0r! z%L%rGU0OVHT?SJcu3+;Lb=rQCIn6A`g{f7;;yLj3t70lsl<`=MO>Djq#?*L>4Bja@ zHG0@ek%c;vjviIjN@{hgKWFMrrAj!g!x4!3#4#?d2}cbIG~r6EWkxPIh|8K@#m&N{ z;-N`Y_D<==`~4?}zAE?{ho267Z)_}eO+!M`MdywDEuovM9Y;d&(XeY@ z>hA3ry5RI zjVV=Jk#ngP7^%uh!b?@}b6ewY*wgl`@E7c5@r&ctt@)c<(!Mud+2~rIhttHf+UnXq zfvf1ZI)=HfXpm|va@v*u0Eq4`AP zHu?sMsOvhHfwpTBYiVz!ThDv_li|H{MAL?meWu()99H@^sRR>3k7*pYq9hUstLk5l zKMXtz;tz^`DDe)dqG_7%hjiUf!e14&3vDXbPSLzWsajg-dbNc98q=q749{s3KA(Lh zy{w5P#K?^rGZhts;V;>z!#6%A@ehlp_&uREnQec2b!&Gnv#H6g_>NsmO?_57XqhKV zn@g(`br89ft46ZI6rJ}w8;ZlldvB-J*50(WYJ}RQXjRcjt=O?@iwL!&)~&tOND!+= z?3fw0TeB#Ngo+)jwot05`+nbl;XKb7pPvqV&51ABaKD9dt~Y16h}ZQ@3hsH#|8X6R zwd;J-b~n~7YUB`MBekVUezI>i%~AG*T+G92CO#%#mj|u_t;$+T4Iov6U3povm)YdS zbU6(fPJTGba{JYr*E)gGF?z>gALp&6Jwp3JCgh^cIx?@N&wwYYOYuLTry6+rB;Y( zRb(U;pj&8}-Gh~Tf58L*Nf2UJ(`1MC-BPSrlxXTC2(+Wc>VbwMN4GDJw99+L+zEg- zr3}mauWSEe--&2mLrdqb@|$Rqyr}I&Rrr3fOpMgNw8O;SG_V6tgrNdH6C01}U2rM6 z;C08W4}9MRo^zk2Yp?yTS%!fBeOX8^frtn9nbk;fsG8cT=6mR1lqF6o=q9QXYsUH1 zL<|a48?r290>qEw_rU#bB!tACX)=>WwKjzri(s8K1>ZmgV zL6y?viUdo&fG0>SS0RS9FlCoaPs;-F3Srv5By42Q~B>2U1}!g%xk32cc+b`D7XUTjoC)|CMBt? z&6E()`=22`K`=k~O3VHx@o(|Bs-dnN!R1mGxwM(6zCsoO<_R}qtF4MkL1quf2V&!rU{M zc1YO!#W^Ex)>81f7xMZKIe&k@)7D{GWUxLYe zWtIMDTg&ngyLqaE_kbs7mt1-fSRm!;t;F$4-C+8x->EHX<4-E=?-{V*89AiQHpow> z(+F9`b_E_C9k_};S%ERO-=@L~x-#!&Lkr=dZHXB3`^h%jA{yqDtkPTcZ0nMXMt&Y+ zJE)=U`sHamQ4(&PCG^RmQX_S){{A*vAgb~#q%Xk_%CtbnBP)_zGz3U@KXHqpDRf>k zfK3AW70@LE*wHiGkoJZqnpD5_@yy%q(5!92{!Hh>h9>f-uC&f(OEtWzcspDaIk|W_ z$QI-)GK$I6EzivWW<+Di8jOU^p@4y*2$4;Aecel%P;xt{7zk%1a8jI-c z?W9JpbR&kHN6~#IR;d;$@^mb&sav5Hs(sQcQ|J^^d4-MdHO1(m%YHk7^Gn&8+}l-j zFe`fdL^=2^|M^T6gAdLk8r`HSBL+SFLgd{M-IuLD3l(Mxs6inWW4|nSh9lKnX6LOHEg}$ zO5!%3QpwU~?|J~`oiA@pshKR>2EBQOSDlHia|#hgF@SdH$kOGnCiVpuFnv01S-I~zt#U&c-EZVe2T;;yG^ z?wj4e@f6Zz#z*~wy(s~%Fn+wlRwP%R@5Ejc6scF*nfFdZ;jFX_dPKmK&uUdHiOm84 zxDXnkZ^k?wSlL_5ODB?*z^iX{|IMV%gNP;@1&@jQ1D%}zW>U^#ohoVr?RaQGaeH+? zN7C*kz@>J}aQZOA)Q66auh$7JKvD1J&c0tSVJc1p`8uk{f7g;uitfOO0uK%=r=+m> zP6o57pL2ONoT;Dpd-E#IsVr~u9Dy~0!NQD=mc!0E1{=ZoiI9M(vy`^xmJ%%$|_{b|LCJ#UXfdoZ3|@qNHDO(b zzvD>3sAJt5P&XZxE&*IElp;mL1l1=zh>iar`*Ki>|e;hH=+zAg3jC%G#H zrpsyjPY=V{qaE%%k*U0tC4~zkG6wt4Inyp#rI-z~c!sfQRWN zIU_-CH=~>W6h5e>JrehmlAxB%Y6Qs`QgF zJoMqyF{W7(rY0q8Q(0()Cm|LVU%9B1D#)ZKQC2-2J^fI0mAi5zyI_o|tf*H++TYR8ljXyt+-tKJc$H8c2) zviLGx5#&(ve=K3unc!J>BB_64%Yvo9a!`bbe76PIWjf8vPWLK_oQ=%fBs5q1CRV5|{BymaeP^YJtK>Bc}rr7P3&5xy9??WRf;MqAFc$R{^ z^L5eH4dT-EdjGRfi}Ew`Q*~X_i4G?!!-8VnPZNxlrgxc#Dz>X2!l`;hBCp+gM-nE2 zUVJ($+U**BzcJIke7Pl#&hVaE9=8F?EWX&}UJB;flwL9>vCkMvPIlAF&xcN!wYuo> zWdH{)!b4YM*o$+Px5xQ)Y)D~cNL@PMQxSGHvaYx&$xLAi*e>`4(Yi4sLL{ZTP3$Q; z`BlJ(=i0NRicV0@>OEN1cf)`Ok>b(-^wsd&M_*5?D~5!8mM@>JSnJUCD=tRm7JDyX zX3r^*ECKDMxLI7gTkOW;y$n-QG3u3h%f$=H8x0LFV%O2_SkcARH;1E>qqnS$+L{j+ z#>#%wxM9wUjIXAwLjcBt%FM%zx46VoI$BaO9Z~o@Kh&PNc^rR%lNJptx8A2>!)_27 z0jqPbzM}#kpk%8-?6Hpqe($*nzw`OkIA}4_@Dy$8BJuH5@m&_i5ak8RNL~om*D+() zQ=lRrlWM#yd*srZ^H*g)j5hdpHQ(Ib_M1F4sp4p5$ zbjU6rFhh^FDcXg(4v#Fk@s^$QYjdyd31FzUe=qgg z-6hrIev}ZKGkU*HI&~1-Px5%PplfXe=9hg7kWsF4WgozH6B)=@T)zRV0v&H&~07xMV}M7KUP`IV~w(k8?A3~W5Nm~8vgU>w%`MbY-2 zQG07=Gmj0S1|A&BLla5bqu&Zx>lgWjK9Dlc4%~%5xSxC9MjQFjn^EmYiqq@qV$x6b zmtoJ%Cr)m4HMS=#GGJA=Cj-r_Y}E$h0#`ToJ|0Ak>5SzUL20$T!l?565fVpQ=-yN5DY!#*?>CNd{mri{00mjFA_f2M^~(>6am~{OiKCMg9Ao8eb0wQ!zB% zn4bl25JA*8*%k&m^*6$mv(3K!Z{4_}8EDWl+pQ@%O~oDzx#hytQ8B|Z@rjG`oHxG* zC&$Xqr&o^^q23VULGbF za&;3>A-n+3rMcme5RcP_C2SugS&mC2WnUz6*&0M&lTstx!u5COU8ay8fd`TzMTvGG zQ)0)(-LxRT%CKt5)^Z1#O#YP&uF@d-&rz-L!KV+d(}D}{5;z5uQr<8H=oMHi@PhT?2xKay}ODJsM!)JmPbQ+SG%pkxbA|^ z7okox*EpwB?Kah}{7HqXAZly2-7zZQ;~zB4!Sxg-Cu@(kDph;Tm-=wx>XGdtDELni z^^f-}5`^8dd*$y#V)UhIla^XtZBnhBmg25w;$NO`a>f^*j`}SM9{!4P>af13XI`?L ze+K>a9$Rn$)Iio)QCeGCa4AknBZ-!PiOp6dQh>o(-nX?rzpf)RRI?iK|JT{~c2juf z>}=&hxTZF@kQz&ekLvTD7M_Q1zExNLrDOlVwdI|aio0-ZCR!YsrNp&(Y zMOqKHR<_hJ6_b~29oXQKqx$`XCqRg8($~0hN!|#Qw^+XFPw)yV_?g)`-sD93`A6qq z?@Ec5-KYNkoC1B&qFIVv?1H( zG{d}wpddx@vDZag8#~mK%1cxIJ%D;X72FdQ^hQRRz~TIN`z)Jj ziU%Xkzx0m<3f^?HYRwmLw|v%bk(jK}a1r!bG%5I0mMy2RF=}mCBHVr!P=`}$GsqJy zu8!hmu!RkTi!~udViNyku+{-Z@bw2loJC`n-v>W%EyWbqA?)qitg$Z)R|@1d9B#1a z)*)c8XlHG)%8$7BD9>!QS3}&L{<2w9>CLz^ia;f;!j(3yNte7Uuu*Ao1uN;|#ACC6 zKyH5P@zzEuF3usXUP6U#?xpQ7n{Gb4^^&~hG~-!^=L(Qv{}=82NZ3m1LFB4Fr}@Dh z*fS8u1=a6m`eoMamD87@TP^D-$A+93aZ&-@!2PP5i7}89kz3T&ak}dCRKnV3oE+4n zAmezQYbvwCguyt(j5hEj*}O`bo&e52sLjZPnUm|i26}socoa+mp2sPs#k{{Nf;kBj zd2GpDABsJEtzWNHgxGT5imRMAWZ^iPo=9#uEcN+Z*IHMn7!w6P?8*)+^JtvwLvIk> zoT#v8){o2GmtzzG!1b1fRsw2|!e#y^^b5uY=qLMUg_;dH>~oZazdQwvC=ox#6}{GX z+!vJ15&ORXs5S9)qE~5mu+{mRlInHkxU$#*hJw4}RGFl`-Gkgu{ivisDKf|FI!AnW zEbxPL#;vc%x=7@k#N9r0zG+zJQ&NpVw8v+?$%@!Q0Y&7ix{V(_)%j52vXZUdJpa57 zgLwd#rcSncaE}2kf1Tmmnz3HKO}5-=o}XmPPW7vgJK=v3@H2ZSDxOnT6BLzc*zY}D z@WH(OD|8Ib$nwWK$eX?E?Gj0`p8x#Kw}A^)_o0sD+Kv2cGPgb57IUUdNzJR#^sV=t z5LOL~`N`?i0q1*)+}qb~tIx|gL>d`v#)m#TJho~Jj5?x7!Mtnb}P zxJ+lW-}?J0WFdLX*xD6%8-=w|e8aaRVVPiFF(jtNY@p~aVm!e2&AYZ_j;}c(l`N@;!=w)!k3O(h7Kd zd8+(gd!bL&bLN&~4hakS7W4aULXNtpCarW3=v{3EBi=u2Hb{NypO<8{e7q=Z!Avn^ zsC~H=S|-<5I?8CYKLE=ocE*{?E>X@hub68>U{}uw`^uJ|BA^uQvKd;HeV)4l;a7wn6lm928IYj#P6mDJBtm4j7483et zX^rt|Q)Pa3r??;R2)F-dFK8y|RTqIn`QsV-*8tC}=_fDRyc(;a_dyjplS4vQ+30h` za>mQ=F5r|%`M)z8gQPBj90@ldZx73nWpfOrN~ND*OWxBztrN^2B`M}KlXkJSp_5kj zMiZ-3Ub8^|mX!I{<7t|59K3##Nw=S37SlH)r_g5Fv^YP%G^(a|UAkB}&;0d})jzSq z$u)2n*PY32_=>H(DbD$TvV-j2?z_NPfm@j_fyE42QbypFS&OdDXh^My*kL7^xH zLXY!kAxG92RFHQt;C!W04?jx#ESQUyFV2zFUH3XbfPr4t;1>4mnx3x$6l7WA{;OiGn zr((f_#@&-@nk6tLeU`zb=j>;G`faa``~GIfbuuq-?Ux22?hiMyr`;AqQ<6Vn-008z zNiJ48ogSucUrFAaR(i7f&q98!2buqHlJGVC?Z)E)P`pt&X?Fy?m`~qmG7o_@$+NEh z`k(;U0NrES5>S}jm44LC(~JnU+Pd=3Y~l^p^598r4t8Ud_$$@gH6iwzY?rAhJT5Jq z4`zNe=tpy+nq@WgdvB)Lu902wkw3~Tm~V!J2q!8C?J<8HRT2JjQpPC`xgDXG<;0i_!x%-C5XC_&&si+Nu&-0bw^TVFSpSPO;JspK%bZNZ0Al-jfeXLGE`Vx~H`!YEo{*$axF10Ub^TA;e zp9N$(8#qKFQHJ;xAbfF)%i7U22Jf_|LuzhuK1@SzOyL2h(L9yu7&1l%>Q}zqJ_-z@FI>{^k zw_YYzzy95I+%N8hbqhP}wM<>4%ENpF@+v{tt=%DRvoO^W(}dC(Y6{B83E=|0W*6-y zo2ez}sTz@TX}t3Mk))N~h|%G%c&yj1YX-ZVoycOg&jVcILS#*|c7wO)<7>==jOAvl zBZ(OOm%e(;G2&AdVjj?^9ZXRD&KU(v9dUYh=e*B-*uT^cvo&!1XS-emv0&oSDI(%L zWlWUNw>At2llQLgDi9%e$A{CyI4SyjroFn^73F#*As1@A24t0|CBhY2U*(j)ir75h79^}FfXLb=5aB%GC$ni;0{Ch9d6 z{S(AjC3gPQ!XhI7XBrP;gOM0_1wg>SorDCby$znLJ)KLvYZ=~6uxSUETpi70S2rlT zLAa(ZCN4okVY~5ja4^+66A_KGXw!-Nv|#foR+l)d=F{7vj}RI{(xv2he~}`OCXLXz zf_;1Z-(}>pi@&tYchLo-aixzZ`=SNUee3=_38+OE{n;gzXQ%Z4Ao)!D^Ne$#swY8;Y1PRqTL@vhmTuWSX=J-Y%`+c=Iyjtj9;B*MI|qbeqaR4Xnob=4?>zD zA{{Sort-Z_G+Z4SeQ^6M;n1%Stv)Yxq#v@fl+;!c|LYMO=PRh+HUW*P+k74QXmM;2 zLijewHPS>I$X>CIo!Gt9rUkud$0hfcEFgMcws$9fl_R`@@ngPn)~vM)N-UH=R{w+0-Zoff#lj zOOr;9&bi?1eENF1SSf9f46*?YtE!yk*&3Fo2kbJaV6$<7(E7;r5Rapt$8Q(7G&}3* zeJUwIp~E&#VfDc1kel7Y{o3Uq z+X-B2{Nqq%=;OnzNdt^CdB5YCV_n+%?+jgq8D(=F-xm+9T<@-}{XGZ|t}EmwCkw^Z z8zQTW{TnALF^}7EE076vR%_X+gx(TEGVvK(wT?7kas!uXgLJ2y`k1d3)YcZYj{qPZ z=TwB(f7d>T0V!s!?2cfHae3}=@^@veIq8X zUFZ7N@4|jOHybK3al#vthPO5Zq{XO#g34_}KRBZ()`IaC4K~dW+<+p;Py$8itvPZq zRf83B2Uk-d$ImzJvu@~C4~38f?jb4coX=fBppocgooy_$X~2*$A0OFUaz(T_!rMo2 zqkGwsMbYwP=_Vr2h}0qT1o534P+|=gZT9=`8sK4@i_nd`$m%juwc+rChWc5+z+Do=>+dUVHiFqeSJYZuvZ z-`2Z7WWZ)M=t#F_iE)^9AYw;Bq4b3F@MhU@Azc28nm z+Zv)HDk`G(T@Rnco-m01_78goiUSiwA04b=`x?9+hIUd_IAg*DA&2XvgTtNGu>^&e ziwN)C6Lo>}O(P<~IRj>$2B?L*0fcmtq^h~u=X`u~2c)xWE`yZLv&`RJO468ygI{zk ziYMt!<4v>W;i)9ssGGf9rqVA#ZJJzadurq-XSJ`Oda+JA`IRH+l0GU%$7alWxWH5W zjwa^uAfyR4WSggh;giajSg9G1OOsJ>C-n)V+S+8Z;1TBaHQ&jG(O1mQZLQ=`Eoyry zoQ@-~4f!kCj=Hh18N3n_^k_r7aOm0x5hY^6gWu@K$B6@ZZ_eDj)gX2;wL9nLO^x0e zGggNhc>xMDHecY|@STs3(x?HK@{}z*l|u*uWJv%aK6Q}H z$@|_$dLlX2OQ4%;lhV|0T2cn15^tRV>9c96=1T8A-zr3}>ISWANzoQ1Je0;^n=eZi zpVgRxoU_A0ZLM$F_@+};lEvOPRK+7RH%cLS6`UnDQ}60(z!|u*jLdc)a1#`KUQ=GJ zW7^7wEbAPy#UZKruINC0#m?M5IZSPXE;XGx3NWX8L?9_x96H%7XbJxt{LSi2>oe<9 z(_l6oVe;PBe=_6Gu45t?Ew_tiA)Q^_)FqBtonO;4?-AejTw3w-?B8sqc<{~M#~kv3 zUb_Of)8_(;%_J5(D=uG8gz7`#w<;CR_8&DPFqx2cd<&_6O?t9lxB=4F_&P>uNJ!gb zm;W}SyfwN!S0gQ`VsWU%cB@GnDncgUhELHPn46<{UtHRF9LpF*Z#}LPifAqb(zXBH zQELaYD13tCHb(mc z4|*!@wqnTR&W!KJCZh{8y@gL3J+9c!5<*U4@!vD(CcOjX-Icul%3oIK4$$$l`(1jL zq@8Wp(K2nZg8kFyQFY_p7K#v*L7D5CDdZg?w?NmAW((*WBNYD%Fcl`xUUGigrWEGg z{eWHAYJxRr2ZdoY`4_H|TGwUgDPf(qQc*Sz!YO~34s5P}F=7NMV}Zj3;lVHIszA&F z9v*6q?@ck#XHeI*)v%0=8MhBn=t6)Rm%NSQy;J z>E>XJbKxSQXT0t#v!~6gRWbQpF)R%Ss##)XTn~qZT)=f1|5RO9qvaq{HTl@B1P3Z2fe*#q)3E;AsX_&oK?>_8mu1R8| z-!TRP@FK@J87>=}Z5{`_jteJ6l+ZnUELE+fpkb}_HCXc>?p5kUxZt)1S4$HK_diN$ z4WRS7Ir^utdF7ACFm!&v5#QE?*MEfgxZRTUsapZ@w`m8VZ zH9voy0m{`wTig=Olt*y`9-bA#j`ljToc(o$0rqe(k(}UtS+6bAPr%5{z++|a^ z?;qMomm;h7yxVOz(uIxP%o?+;r#e7?4{o%wP;#c98oA{9zG#N8+TONwFK$0er!v{- z0{Zs|jdl8m)NN7J)A95Qk5ko@!i4unZ;IsQ#x&Q>Z(a22t8p(c{XG~^MXB%8WNyYS zI3bQac#PT|_-2$j0#VBEM7}<_?w#;y@3;?wtHl>ZqQ8!KE^TZ}h*s>1xlz1`s&!p7vt?1FiUROZLHnb*kh)R!q z;6}FuRExfZIxpViYhGngTZR!Y-#gI0P%0~$HJAw-Fr$@a^YD|L+T-V0ALNI~M+vcY@tsNu-r~yD za2eqbfcoDxy-3rWfO=2zzd7lR^qD4eXR33WN74$mLZGv=#6Jo26}ibB|J!2Xvz!0B#-!7;EkB5CMSK>ND8fEEA_ILoBr;*>yd)Kb zaFiPhA;$EAyZg-*`ATn=6Ywgw?KO|prwQNA^tSEkA>$7Zhetvx=3m7gXps;0KQ+Zd zfy%yHBfdulZV#kw>xPV@S%A%di;;6)5~g*{Qx_i$x!mY_04jbvmwQTK$U0h1^W%OI zFT~Q_jU=BNMasx{Rb zR7!`x+{OHTeN98?>>-VQpUMD|VYGsbA_ks43sc=5fXNHJOo8#KCYY*(a$%Ht)lgin z4{8KUdN*@yK;`RT1-tyQI?=pMqJ+)1JmkmKV~oqD-vBmygb^cQl45DAd}k`FHLO%$ zPp-0Tvcr?aUpEC55W<8)X!Wsm9A9R?d!Up-Uf3$_vMq>4mvExU>%vv5$z?126E>!U z%Fkg^Whl-Ugw>xG(cPZjtY@ygT#71qmD)XODkq*K1qiV8a{LGBJ155(hd0GpZ&CWZj$6t?F;(6erCv6rn1r+kEd-#W~|E}SKc2B4~k}Vr# ze8lZD)X}}>&J*P5Qk3(9FNH=Io(+a252gR*u9JQ^Hj(>s|MvHAzOC^4XGPvhMNU+8 z!@l<)T0-)Cs5N2q7vLC9C>uy(S z>wCF)#XDmAUfte=7Fgizo-Rlsl&c@inqRSU~WIOqWsjr47<^w>d0NYy)y^@-s zlDzA*2O7OG!Bw9E6?&8dIYNLKKruPx@r688Xf=gPfB_@dnlnt;-T z_Q9!LMKA!TFI`$JzD)i9;DR*Q!KC$q3$KmFzj5iUq;?RAu!H@m{-Xc|CuWb?@?KqAMd)>acd4u3j* zIt7CqcK;I^P_ISh6`8)`J|m|C@PhX*RcWcnmC6$YmK*i>BoCA$7G-A@FDaSCmf`O? zB3vY@3TN#-$8@gG185+lNoRtEbs7_5&SX-}uOuvzs^k|@G5^N@H?C3gd9HfG>r`%P z?2)1aFLYag?(iVV|2M~&%wK15Z!(Tx$~mBbiia)^lE8|8j--?yH%YQzXeJkB?f&*V za!ZYHvvumFWVNNl7SIGuVpm7q6>4~EBuC}s<(uMdPj2PfEjYdHG6~;vO6PwaaKqt4 zpYb4Q8__XI;P7AdFz%bIh_5k3o6e=-YDBkfgA$iAQLtjs! zyi~vxE4sWs#O}Hzm+Vho{BjO9WH_5LiB*aNPli7CI`5hPQ))mu0SJV>v3Bmu9JvNsRmR6+YV4Csd#^ zl_8})`bg~n&hTi6ioy7tQP))iD=_i5D=@>mhID5jA4P^X1v==V0| zF0x7*BP=UrK8+14v)Qsxo){dd%*B?+l({ZV@;{{L6-)d}<%7A#(NgziR>*GFGZ01`kjYFBY=} z;)10CLfOHsQ(i*o$7`v~k(SH~!9(WD7V6Zr+3q*pNG~aTryt~7--l*5to7C}s5@WI zDq-5m@?cYw7oKXU8qRE%9eLYDTD0Gx@ouVWs^sJP{R-iZ1>b z<9>{5Eje#U9H^~RCX1U#$Ji)rDO7NajL5i^w1wa!Y=*((&Y@x!Te&-2JKs4`l zV}`i-=9|d_?GrM#CZCmmyKIb5yF2!VC&4!rwD;GCKQc72-MLSq#2YijA{NCjUVZ6X zL)9=!V11DHDdJy_rV*b1(QJ*vW!25v)>;N3*^}JtSKoJjrt(M245(z9_ zX>62&GGE&-6Z7^-fdu!$rCqqxvF`ep*n3Z;XXtx>dS)luR1YY~f(NxBdTb3wDbJhc zDhxWUG(vt<>#@E=?(Wux);VPAC3}oc^f_R7(nHBUSq>xn_~0XwnR+&WM6zu)nLO3t zKJ&TILX`FpgA#n|7wqSHP`bm)oK5}V6tJ4oa$~y9OVXqFF4ylPJdAT~{N!Qgfg^fGg`?k7Axg{j>1?e@Iw=E{^JkUC&N)^86&*MYIxTfI#TazxWt+7Y&yT>3{OHcK)8pxiz)*v6oHYda@ ziKaDRC)hSIMU{zDlc6pMFO;=Kq!lYQVawp$vq64*a#}SKHG3?r-PYf8$#yudOvyIXBf(S~wsu#7BxDgPTNe_9S01=i7Q# zgZ@)7F}i^QOR?cOo5{pBuh9|o{vUsNq}2O94Lu~(Ft;*9&&xm0*2Vc3AsupnNk6}E zppM_O?^kMs{pqaKd4R*46x)f#d+zxsS@B9e>?#P=l=vh&5^&vSKKD^N6%{PR`^H@J zQ%9J6FScxl=M8byDDuB+J)CXfnN)xvm=rz%zd72UmR_;V0k$4)?Dydx#Vm9TxF%rI z4M%_5A6}ehPc2#L3z;1TbbmOpzqc?V1PY_xn$#&`8WGD?of{ryEs*$es2Mdy8cKoAm;_}Tqqb+v4#(=R&yMi5KO(e~bud*J(s|^qz?KGFa{`Ey zt`w$^5>wZGqb=|E4eI0MwxB%b9FACb$aC4uU!FS|x;Y3T zs>X+am7Ei}5H$c_P;0*La%d3`_@Df$0oxzTtpPAUk7;HOWa6Ok80{bWR-43~^0NE_t{l*Q-s!`M^H&^L?&%&ebb z8$FXNk$F$iRM-1oe4-wh`A1}-w!`IOLHRD3XToN9N+~REq73Upj#+KNy%pn zbnyMVtzn-K|ET7Yw68r;Po9yJ=u@k*XGnX}FqAo{Au^>9CiL=Kts1uvc84Q70~p{| z<8Gn+?kocYSJ^9TPmc^knWooi%<`c|VW(~h+(J_HL~WP5xv-KSL8qUV6zY9o{!I{F zSlL$7i|n>&q6JZkgSs;u-vhXN2)2U%N_g4Sscz?77;*1M!5bLIJ#Ixyt{71ch<3i#0xY}k?=+{r)=I7c{*k8vm-fz8m%d(nA<-? zjT^ps z{#;`6koBndn0dcgS^-5%o#zKVv2{Q2lS)@y-{lCpdssSm+dW6ypGSKr3flkvW-8Ie zuVzQ?N81T8HdNdXE36t&j`d@jF7RPN;_)pc|D7SSD9G9-&pOVkQFK;BC+sW9Gt{K& z2WQ=R@dRGxu9lFE%>rbrEwI8n5WM~HyZ|)F-)VcARs$}i=Npzi zuXXRIy2N_`f#N!)6)-&+po)Cc8PI`t`?JO3gCxVlVLb{l=0wH6K+AMW8bY}+#IL;*<>;Gjd~W-qi?pR`vWppBcjS%-0xqTu?a zxru+!OiBZbhYPP<(eEgJk8~PA^vM^`BRfDY)MpFN`U6Eb_~rEp7uPb@*YGrvEDMmZ zvQom+;7>(*9ch0aY3r~)Yl+ZM+qHk*-kQ{7f1l`{fw0>&XeC`nm7SG-NeKY_J!fd1 zzXY46{pmK0-6qv%yv=pC?zwW^aKzL6k8h@p`rUDC+BW(cUNH)$_f4sp#Mnh*RHrjy zAnz)xb!-Ub>&8_&cjfIcZ(Jqs0ab09DhybRs*62N<{|mwRqCd}5rM@uft&59-#&=U zzW34}+hpQOTmHKi9i`umYw0SOCi{Qsko8tU=|49{pX^0T288g*`0(Rpa! z*1E)ZC68F8PP)H$EnWHV+U*}acJVS&{tM4P$2&~PtX+t7G|kU5z(z&_KbF1g`*_R5 z>+6WP+uPnP!DNeWhAwF+k3T_>S;0HbqL6iRIms~IdTyxvEXusKe_+AQzJYiVR)FpM zCIRJW8uVlI5sv&JB!>@8T6tVbv#Y2@SogIp#ntYHK69hq!cG6&g5x@QPTlqFhi87A zT2~bQK|YE+QL7Mfh<`k<5AXHub$a(x9{u}e?}m#14hgHv9@8gfaF-y4lCLuGjZx)l zF*nFBW&ir42QGf`in8|E4W^iE>+bjtza=i3|7eS-m$fdgS3W*F75&>pzg4)^F6EdI zE;QXCggp!C(~!#A{uRzORZD(I!1;%~)7zc%$%MVUT( zK4=lUzkZN?$02rd3FzO3KP6(erl%=k$d84SW5IxTji3mo4qvUdZ+vsyQJo{TUmAm@ z78N?%X&6*RIdod}Q<7zxahx{IztQ8|wQQnNMA1?-gYpcO?qu|Bz~P8$nygF{bfO6k z$RtC^i*Xe&`5zj0Cp>pI{z(zkoWj*JX+moh$3(jDgj8$EXaqK;7Wz1BVotMF!1C4T zFY*yOOV%pfflrCw2@3X2v2t>YN)==%RWtGa?@5(nIv z2L@SVN(~vL)a)BAzZ%d@!_zgeOTRs?6{-a?w$GJVq_!_rxQ0MFN?;;;6DC;c&s`&Vv?UrY{nTvP{82`KmdEmw6Vu&sJ8$cm~Gx8ffo#0$H9K zKb(4N;t0n^G`>xG(`6Zbrms+DG%7#zNSp8BofI~KkUmOW>SaJV1e$5L2*RkHCNPy4 z$QTp{xWI*#lKAL4%VaBuGc=ByTZ10VcyVy!rL^fBB^;p3+cOp5E=gupWDTi854?fl z(o5wx+Vu4>Hl0eI%2taF=SeyCp(v9o=l8F^~P7bB3)u!?*n{+gg z{J#Jyh_4?30n_`2xUB<);catn$H?`ySeNVY&*1Ily*m4zE+$e3P^t|!4z19_%*&kS zpJ!2rDLry~Y_4lx7;7|sI<4#SqQGUlf8**d1^oZ$nI@UEwEPddSDtzyeqBv?rFA8C@oEm&y=)fFlqYdM+@<>IPj&i zuYSu`RjLK&KYb2WQ&{uTfvHIUYCXwc6Q#xmr5R27)A^4pB0^@jQJZrO2%V9BJGMi+ zPNgcw!UyC%VSRg}Rw7!F3|MKEx!KWd6Ym%s^4;!Puopy=&Cwkl%xP!1nPT|k_6rduKJhyAN{WMesROIZ+;A5H0%ZNJ^>dHP>naoe&`d7J*8Hpk_%ch|OFrJ<%`8i7g}NT4!<_ z%d4Y-l2`WWG@-TIf}cn!5(0zlASN)E+imksM0LiRhr&F+YDONOThYb9XdQTjxoL1j zdt&ATlB@cs%1&*nz!Lnq-c7=LHsly6&0FEDeF3 z&Vt4Wv{#mC@{H}K(n60xEsHfssbG5D+N}r{=hn7lM6-Q62i*Oal6C{ zbDT$BDslA2;Yu+PY$NAztQN7dpcKL2{!4@XaE-@v0u-iEqZr>6k^^4`Ik(H>B2Ab& zal<#dyFTW+IPyAq3c$;tayH{4yt8q?G8Ie<5Ktux~4`+UHqLY`5G!Ns-&t z`YSfX`jp`Agf`a!i?P1=YDF)pn*Pgew|F@svHPBy%gQ+4R^!5!#;t6#NrebzMBpiK z9oO7M{yzIZ8q|F7wP%qknM*k^MBF&wTW01n*62NaaX6hIof80fv!!IwrwuFbhXK~W zh7r8h3%n!l9Kh?f=>vdXo0s=<`IE0j3myE=hho&hn1JUTKU4vOac{r*!+CqpNgBc= znE(LD4CswZ*JxG3ir`1yyv@+M5twx9obc9i;)T|+#YW*H^RLgzQa#+Eb{a8i{O`Gu zYOXx&4^I#iK7JL7V0yD)7NZ)2{EY(PJTM&eQ-H450TpsHp@LCB`t1F0Ukq59wcc(r zvj~?|#lvK_X(|*F;yw(;yIdHBdQfg5sog9)SMtFf{3~g!kh36t8b^gNhsEm6&)?H@AE8>(_P`svJ#dKy*zqx7?n z{UU7SUNWAEo?<#No!pz5D|PAca)fe!n?TA+$RCNv%T3=DTI%XKji$y@%C_Fdmt8F(A{Q24ImX|yJIv^D zxf1yAn)!MU()V)DQC^LW7GYNrH&Cl_bM1T8a_fVm{6GN{a7}#w1^r2Rc`3K_>jA#K z*MAHOSugAq*O1zbcO~z|^@Dp!Aa*SZ(10s;F+T%oX|j=sY<14lw>^I&pm4R=JlS!3 zl{cq^mewEUtxLvlsp(Vm07~SO9O-?4*S-R5=pkWh7rw7BV&x_HwH@57>M6A==iDg-}m<~ydSUid}E*w3wlWdU1MnU zI)*(~pFs{}3@-HQMEJ<_7{#bu%4{qP;UPUYF7#(F^n$9u$~@@7;^;D;K46YMT!s$h zE9U@;NEcLtr>LgMenEZ-OLot#sQyNb;e2?&^jV5$@W_#86E0!b0uTXC?(Rm(*9?(I zQTUyJe%njl$HGX><(wZNP-^?GzvBnwjYT)nv zxn$32pm25qC-WPO#gs)slW&pexi4&gvU*25@^&3KpMr8bP#LC(0;`YJ4BLvb30QJ5SC;Z5HhV7Zo2IDpBqVv~QG9Ktq#k3wpDNw5^g^b>I zc6j}W+D+#FCBZ-msID+<+N}|%1}n;$s9OB|x3nHmmgEWf3<)gYq`yMXHnMK++`hlw z{^~4qzWP8UBTCU*x(-FP?c1oS*m|Si8q23yQE1!I(%jv-zX+7@uMzIf-o1O+u~;8( zA93_7lRX}_Ez3pv^Gblzxj}+Aek}N_l!@&iMRXc%&M2Ot(7u)yZ&Hg3PlN@si!E2W zz6?Ho7+0Mf+~1p9M~JH#sTfoVYj+i4Zi|j)wbkM$!@woOwGfAiIGk&> zG1=q%8RxRVSydkZ^=fO&8n0M4Y2C+* zo>)D-8j%oD{R^*O0Wa+9*4%fe_L%RVCPf+6&HXYjhvzfiIb-Xd!izy*0rhqcwTsx6 zvjj{C1R5fo?a^5hqQJ2^Qg3~(BF)ja0wI20_l*l;|A?#YO;@Ys!h7-LDO&(5rw{B@ zEYK!syBSo%K)Y4YdV$^FuPilCp+~d zxVqlgL9T0rzxf|ce>(r__tb9HD2E)AMAL5?>KGs3D_#P}XO00$biE8mq<+b9i8fA; zHjQR}@Pk6m)9b2_x)b*EmQ!n-eG%jDDL$dvbnuj)Rx`&E=~~XOFvzJFt%ywjtjAF*=%twP!f?2!(Qr^ZQMPr^CI0Mt9OgnzaMREKXc+pH@6#PzlbTKb4d9W5 z@SntwEtiH@53|B^3=W|pB?FQghMGSZ<(3xogP;LNq)lNmpVw4o)12o8sL&&*cbyx+ znJ^;u1O9S)!)@P2?m`LlIyeMj1MWDe9!)vfWocEIN_Y0Y9rX$%wyq+nBnzxgImybE zZA()t(k7v7YU&0oYRXhT1Jla9$9$}+_RtlZ{H#(9xXeVJ)+Fd}z{^>OeP~zD8^wf< zCZ04-AuB`W)9gOhLBdAX(7l{Fmkp@kbBzhtK*6jhwil|@NHT9Gt&swFWhVP*TUo88 z26nxf$M8(?&rDfUPdOQMUgiWWQUQ#2<3`9a0$Rtql;KP4b3a4bXz9f_(`eV z-={tM{-yFHy%;38RV@Qq?o6KwfvDTI#$#}xxi!Q$5HEp98Bu+^XbgKa%ui9x2uT_t z$|U*@Hr!-3(3rvMMT$6{0&v>8cc%!Fa0`x;v_@Op58a zQowHPM#f_`&epyL8kqdu!;>u3O`*}qK7Egcqwlw=zP%uM=mGn-7j`x@<_h%8fEXw zsGNC)3vM|zs_7}}(SoBhL;_m1yl4((%OQb01$f=*zQ}hjU3eqmVN(CgR`tzS5B9^8 zb~J=2w-f}(3z)lhRJFqq5Wj?7^FdU2>>y#!X3{@^v8p7imxDy!d6NC(NyaPAe>8C+ zpLs638sIP-a9Rp+xoR{cBmIx2QH1C*xdSD?8H3XhDzNoY|m-HJhDtcMXV9h{&m2a-ru- ztg}qN?Q48WuF=}B05W-O{nX1^oPEpnE-~IT3*KGSA&HW2cD(A|Mp54BG zA%)xj*tBzr_44lM^yKQ4)c>wJ&m~q?{JHuCXX1is zAd8Ceixqlt6*bHB>5v1DgA_KuA%Rto>i@I{F(Y+xrc<%0)@$N3FJ=k@0ZS%Bo9RPo z7fh}z-;;7Sy;KyrfBR_YyN0ll;%3zt|IsAW4$FT#=RJbR8 zT*5h{;Bx!o)}+4%BSnhdasTgSR)hW4<)bOZE!7XR$R7O6?|Ga=vB6n@jOi?N2Pb^) zaTbpa()0HATemJT)}e-w|IwsAZ0nkq2`!cYlsf11{-f~(s70n*&YB;X#e>6X+VQWk zC)vwuPywSw{ZPx*@r(nd+FJ+Hnj6y-SWr&L>M5pOl25l+WQ#nufflFbYkUO-Ga&2J_lD(Luak^iA=nbf`| zu)9eNmTK^b`C5Jsn*5t9q(HOz!OJPVE;vUe`(Ngukb~{ zC;vCIqN{#|KenS5=o2_dS6;rw-ks}L1QSM!H%Q`C;Prz3 z<@@ceZ%nE26iqYZimon?_n!M}KX{yR$a$S0+D3`sL!BVW7Q%fclS5W~wAszLeZ|MB zM5Z}Ise#o4F3G2C0`?)}>1ufqkLUaVep38Uwdwsj7L+BLYYrp_cl7J#&Q3qS;%%YEH~1o2k|_#P$8E4^^JlZ6 zbql8O05o=wp6XBHQq-w!S%`Srii!!iSCdti`6U(p{!MAcc9j~sq3lNd&rP+t_~XA; zPYwkOwwXez2CDRh>+Tc^P9kwXtd@p?VCy&I^!;;&TmBfW7+7sa9bbt#GU{0<0=807Gg7a3msm60(lH&GZcX2?#Uu4ZQSSQ=tH+q(*{Z_v8Uh_n4n>K){IiLC}|jU#<6i!_S_M(MCW0S1R_xk5+O z6!~6@^e7>?O}`Q)({~DP_}uXosx2Q*vAO|7WcgbEd_)?>cwt z7-tAzwOrjf?(N;{RhkZl-_Vj2W`R#o@BD@BbdM?{KK{{*p#2k7N&g)^ed%H-3_?lw z)Oaejjj8wUP=>I7e}mVPB!xgousY*vq21X#(;PTKmBGgXq#iULXs6(fR|=Ca^thTE+nU=tTC&XonkiOG(uEm}vNIy-7T8@Tl zF*SucGuAv&LO67sc|XubG}sp9i>;fkL5cO6pHBZ&F>81mX7MJ?|F~(LFf{Tqc7dc> zTIIvBSzL0^>T8^R?9UtOaJEjAwJK85j8rx~1zlST~{yToU z^h4RjY0He&6~{k*c84JkU%5fTXQ^A@@ZnQz(M4qTS+n*45Zz}H<( z8SRWVIdv&~J}n6{&7EJ`Y?(b(l3N-)d$|a9+ced0E1A*wnSIUgy0DA1H%5>ETUZjX zn<{H5;fuh_(E9>kmXyBwA8`M6G8%?U!lbm^ncv!*6&!Yapj(dI<$fyi@j$uPpp(Zi zEp&oYJ6UoUr@mtbZ`iwjngfY_n(rj?LVC79Dab{EAA(Po7Qvl+PStyIyL?jkN5ja^ zv}GPr-(6be;AKy7|r85%Q0Q&LZxfnA@X@#JDogvHSKdvz=eNC3rLP)$ooV{d2M%kDb8n#^TA# z^?n;wKNYz;tHXDfd@jd`v{k76%TJ^A12GZq;hL9q5U3Yn8MNW>Kb?&Ork*|FvF@n1 zsFBRHQ}WiKuaB7;L2ebhhly}|kOGmY$#QS&ibP2zmcSUzc;EM@5FUG8^Ydlnq5c6z zXgZp4zOOOlcge2z=9;5dw30Z7qVr%`^ri)#?n`1-_J%C-{8|Q5@Bx zpzO`bsAeptY04loA0PFP<~D3hoz0gbSiL-Ku96j&Z27hJPt&X1SgN9wPwxIhC;4>cYH^Nyw6u^2SI-|0@xzm z)01_{)vj;e+R9>Z>Y&ziL8bK*uSoS87UR$vWV*Z-Zm(y~NR)hyjd_2@6{7SijwZU`l_bu)Q;}WA72C8f|VGrsL;|qh{ z=QCMbUNA*OI7kG#<_c=*+DCT~BI`{h!23{c>(+?SIsfoj6Mf-rRtatw#|DmA z6#jtDSmi0L?Y2z$kL)hWqD)}o2JGx=&}lSXP-hj{vNoj(gRkH=aO|AdjGm1NKbRd{ zD7|~3*i88S$9*!&0=;Pei)Z^RN{qd&sVN@XpeWiPkc=Pz!e+GkHygNDv)5H$+X71L z-OCLb9DwN`=o4ou6Cx|qpNXuu9`Qr~?Jtm7?y|C$W{+(%j5PuWPEVq2-R3~X(Zcy? zPr=d+3|n>=u0Me@gBzLP>74=7m#n{*xRP>eX#J4~YiK_Y-gfCO!51fOc%~BT=s5 zLyMY6NZ+;Z69P-5@3P|04m651n`&&X`O5#@>R?I_9q^pQK{SDp#^^mM=x$E*K*9SE zmcJ$Ix84)iN$cz(YfWFS`&|*I!O%6P4b>XRkXw{$QyJ%b>w^+LgZmRbHuoEEel?Vn zCb+AAG_>&``4`qnDxGDL(CCMeNrEZxUH7apY|7o6X(pI;KZCFDZ{tO8UJs?n`LQ6? zEaH8eL)ULH`^{S6&6(htPY!^MG38E+zO8q)3hOrr&hID%zyvW0K&L^P2cDvtbB*!K(+IEs z-n&~q&p9>7L5@-)C0sb|7pUI4C1>BHaqgjBQ{^d_B%PCY+YO#aemGtwa2Uy?ciH#> zmjs?un~N$>F-vBBia0kqt93BFQHsI`K8nuwiPf)k>Yu#E#iGh_mS$-vc+~*>YzQJl z=%&Zxh~?OpZvoKXrm1$9qY>;oXxvWKJJ-yRjRHnVWCJ6)P|fp?7s8Jt+un#Kij#dv zzP1K$z%(~{r_2m~d|Mn=G0df?1*}|IGho zVZbc9@JQ^s4ZzA6szo&2`bWdLQSj?frL8&hIfzehv|Tzm1T09*K@wtrx++1j&BBYa{Y(a}%J5+nmY|-TI1ipbx5=P2FqAt=-h}Bc0g@xm0(285b!f1v4XHOwy zLCSVOMRPi|;pYseJpuZzpb?iV4M(TT_nivCZce{?AQGQDB(yZ&^*>ODh1X!;FSl$( z)Cm4^keXvwGeN((m-LA_*>k^k<9H4hkgzOU+Hdv8WESHZ8pW*k?C1JxE9(w=6$T?9 zs4!`og+A{=vN@xwiB-SFdTf_64`95gJg)-8EN+2hoB4Yx#D)k?@%^b$+fp$~msvc7 z*gt*IkQ1~PoQvq%@me5l?|BmN4{H?YF}^Q*9UDp;afJ|rk1cKI5`*s98_#Aro6R_5 z^7+jnMJ4x2AdiL&_Nz)UjzdU3kkxB%@c>-XDsEEvzy3ikrz%JE-86Qwd&GBSq*6T(ms7N&{ zfR1IIK@*lII0{>90+4oED&L9xHK~zh31f3wfR5$|&CDxBYp=*23rL=6G* z)|#ZFBw@J@WWe#@5w`ud!gDcZ$#1f6J&bOiePs9ec%YvJGIiqZTUMN6AVgGc-i}g* z`TW{SS|)BU{OTkbD{~9vAJ0E0zt6DyX^!^oX7N$j;Ws|GfhZsbEiRY}BkLD_o%%fB zl3g%?)kW64<66|=>$iN=Xn#*@+p75hlTl2Y&{geIHL`Bm5mtuU0ETSrFGeJ}e;2N2 zNADa`Z!DG5g~h9I@g4L{%nbzV2D)4;c@*lcqKp@~slK!|3jdB=PR+B5+q5~ctY9OZ z5YlfAeV@cR1ew?f!yuFQ_-)iqKsT%p65Gl%}jX_3l(%3DhQl7 z%0P=C-evBF7E+&rFwEY!`N_X)gk>*-t>Wy#2Ur_{d)dsu0do6l8ebYtf2tY#jeJe#5(`kqWDm9Ie^X zVnVDhUA#d%4+O$Q-s={+%_@br-n~`SZ!jm71(YfHDsUxIbd)hMrX2>+KT?@NCgi=$ zT|^+_^?`~n%75(m!Xk40iq7uYhyjaiR>elN#zy38$#?w!|BFbzC8m%=%Jn;2-rgYZ z%cM~D7fXaWU)?C^dn*~NIZ%SR?qGq}tz#l#GaENiR~Kl-dw#u*2)q^Nk)|HJ+TShM z+0p@qzPh`-FnGkw-qI{xq4=9wwqP78Z%oKFa@QwK0$3*2;vQPO0j?oiURUs@qLqi7 z?@iXDrQCfIp-ub*c!}M;Irx&Q<3jjkQg8J6k=>yk(%o(Vp@_Rmu_NW ztSX!x_%k=hg*63?Lz0B^?i-KTfDOVziY(JANhuaN7WmaW>6OP_4Wp2QieA~zbeklR z1eQ&1pmG}_^soQoyt*q?`ax{O_J>T!%@phG`860xAj^e89nzET%rVmwi8O|QJ$dR| zze$(X4+Vt|`6+WjYA|TVT=&T6l*1obzfHlc|7dJxGy*6w>;UBAuNa17zDMdwPC0gk z1Ek&eT1dtmb})v)VH9j}T^*mBO)zG=C*ORx_ag8+1SsMCKP+&j2RQIb#9@hw<{aQz z6iR`?!($q~idY7EC3rDUu#cfP-aU+{7qJlRQfPH`mQs+YfRYB9-?ZOk zsce>N=_;q18Xw5y1Uv+<ux^60RQ#m@Ip|9h3U(dHY_imEzE^ZXRknS)xV}L+?{^ zeSf>P;X!lfjN)7tGD7d2H@2g5_Fh&%d&TQOH>-!|x@J6&i{sbJ4#wG{U4|}ssNn~C z2KgL38SyawI2hoG&JFUzbEO;z?S;M3B;k*LOK-i0?6a>y^)+OO%#w<+j>wqCAR;6n zZ-lvT8p)+oS=yKSrl^<%z`m$+6Hs-?6CDKT52}dgR&b6WYJQrCmpjf{I_5V)>og;x z&A1hyI$vGbE@0%@_D*A#1;_oCR@(ZONx?W1elsY@pgo=~msJ?GcI(m&`G&6DmBP>R z-FLVee8!%c>1kAdQCOp(%5mgZ|HDK^Q9|8rX9a)f8rRi5VML$6#vtw+E2 zWCpI`9s2hK)nwPoq9>MX=XcCbA)~)2xkOt*tVD`u!#|rd?^5@XCJ5TQ`RA=%Gr_c%H!Ryxb{SHmkGCx(JA@W&5-})5ndfc_c zQQF&CzKgoq??PV~aSV^*)f^+>mBMDToWa4QFN6oNz_!+pvAoLdU*KP}U+2EXuRsU8 zFiG8Fa5D*?D2o7cWU9pIG(z3UdoXx;ei6kbt1pz_8tr{A{@$&)7K-lYr*&!9(2$i( zPM_X?G$zf|p;ge19Oavnj|2O9<_GGONoRVT!A^kG@t*h;I9=eDlyKYOD8CZzANJW^ zhxM)x0t4C!p>^k8C2$xpaphH>ph>*Ro1ho8ozJ`}!_7tcW;5ztAQ1C-feI>+VHkf|gQML=AGCZ2_>15Y59*GaxWqIp0U{OvWGqJ|I~PExD@XQFpSPpq4P9aO_&_4_R{ zQY<_KIR~#cc=P4!Z%D`LA1TzPJXj)pEsNI32G2OK#k*848AwMX*NpS+m~ zUD744M@D8cQm6XV(&HOp35v#O5xLEm!6S8dL*#W|2aYv1u|-Pfpf60iKNec;Po(~q zg7kX7rzlli`?<~*lq&>~G`nBvSaEq^ z$a&`#M18t0sqDswRd1M><>Y+pcma^57A2-jC9$L{6sFDC|2nNATbfvIK!uPeKAS7w zE(MnH5K1YNZ^zDBaaYGiHnJdo_fhMW!~Bh?d}U>&?I&;fMf4Bfy%qAI-gG$X1xSr` z$i!Y;i#&M-2tiUSo`2KOZUA+TL=APMnoarTgSeJH7JLWCdBo?Fg#Bz&x58s^piNsy zIQ!CN?krt^!oq7L2yFZPL3mRM$g8DTt}>nj!;t2vV8syfqg(V_XgZ{y19&M(Rj0Tx zY=-A&&r2@z&EWnz3?5!C%LZdkG@W1uK5I6@pwPBR?~u1_uT%QgaE+{~sMJ1#w3W5t z|B58q%nmG1#ohKB#3Bj)EKND4dB2laeZEzT_AR&x)(Q!wRNT{6C}~_ni?cg^_gJm# z>@am{f@vrGqglv_I1_oZjotV*tRKKgW_f2VgJxZSbm}nc8@&hx{jzrDq$@fuIT^)-36dLv{6(tLS>j0AY zEC9lWBg}Se<6RmqC&I%fTvz$@1|4Ejq%<%)j3J+5Dd&AJiKw;3+l(3eemjCfkH(e; z$_1O$1;2a^XJBHuFrk9TgV}>jN&jf>ODb&r5Y2D0hriq2^drU(Fm{VQkxIt)`_?0_jnEW*{e!@NXa%&a|bHT-KD0(nYrW8fjl?f zN<{d6ez)9;Ke$sGaAo>ZAj+-%+d97IW5TKlHH5yq7{-%`Eqwmo8CGQ0aHSQP^5oUg z>l}xnE41-;zMFML6+*z=qJ^Ipmbu`X7lP&4DLIxQFXt87BSP}*bg@Bqi-kAFM4h1_ zpXc?5>j!i1VMM&LfuOF;XOov=7vj+-pug9Kdf4!)_3uBN^UWsXg*-9(k-RG|l2cqi z@Fl7?#zx*9?YBUC?ldm}r8~6c(eJTirX~k5$uQ3Di3N1jozPV6kB0ZG=0xA@+D7HJi_Zk&gkzKQW@7$*1I0=o+$F?zI_d5*fR&GCkz z3#X{D5JSYF-B-Q!U>p_#gOzI%M~58DGs+_4r=oPC>y{V0uxd`@i4iPaUvh^6ATc3T z8?(BDs@|aiN^92x^3~6nt3$|JT}u0A2=mw|K8nG}A_?AobjdvCW$OL(NYZ)&Ip&UX z8mtijmv{EvYtmW2+qW(S`uvZE-izqfHXU{4fX}TBW;3lJMTx8kio90e_!y_x{=;wnR`Bgr0QLVlYca(MDOm8 zX}7P~>$E(R*1O@DasafTBWAF2Cn3j1&k@rLjuUY46uh_SsON5o6vEc;WX)MxF3-do zlvV*SV>KRBUWc`N@_8VP2eiYKUv_nmn1be|fTs@orSUkfPB?;B_cyICxR zrSX-uo1i_4@N*!EAXwY!7Vj?H%=PV-rG{6#)Ipr3QgyppOHAM43tv-bz0a;qegqY~-NqKdD z`Z(fY0x8sIjC$K+H+v z{?bKYy>csOc#AU8fR}i?gSaf^x)vwvG!{}l*8SvmhTw*C2JcNS@>)W*Au9t^rCq!+ z{}F3Zf%y7~O+`4Z7?=x70-v`UO|Vpdt?f3pED(pBDz8Q1hfUHJEpc6&8C$Rz_(|L4 zHL3=9Hov8*SAfIz+vDlo`T&G|zL;BUh6+qmX?Fw z97@jW`&lBp2%_0L8ReeLWlz>TzH_N9>c{4R z#W%q{FY~}^unP8(H6dNglWfOMEyHk5h>)mr-^p&x^Sx ztQUDZfI!<6Eda6m`m!T_$5nIu!~WMEFu>ig;B#0cK7C3)2D)tD=6PK%H+@BLho!kb zng8w5h1Nky3Mq<%hc^D)U>!uCF1?|cl#=+?tjDjhqpjubC$@s*bykTY{ky%0^VNQf z<&6TRGr(o$0T$#Sxt&ESmi--``p6Vap3WbfhjD!{E|!J{2xF%`UQ6{ZH^sTHBT910 zH}g+}9N;d4Vj+(l|Iv6mZN5bQ;PD(45O<LMVu({}r|KiOy1*S4^bcmw7Mg5B-UQ}%U)*@d$J_KoDB_kiWrmFE zVxyb;Y2IQj*}?g{8spS^369(SDRiLyNPQ&^Vngx%@aM;S3evvo<6ml6cZ)@ zq0MKaGxgo~qn@T;E>u!OEW4(+2g@KF=nslJ(_u|=i(emQ?Ns6ORhBFS)8GF{u#Fd7 z?0oXal)||U*l!&?`qk>pN2vU^i*t?mTY;k5IYnolKe_7;+EV#8zcENFs1Z(7Ld)j< zk;`J}k5XOXUnrmq^`)jll|kPW%(;KPUE+)#wNJHboequMcXzD;lX5-xwlPSXtoy12 zh`r^?y2?jE7lL*|4~{eOQV{M8@ERQemhcj@FBhHRA`_~ z=NV}CNDAdpy;SY?&Gk0?n{>Fyyj$=h0Q|yp%q$g|l;?X}1;;hr*SpEs?r<3ENDP7w z2yAi)Bv3P$ka+E=y&+xGEp@}%7v$)B|FAVJa(dbamHAR{EJzKk*DZAUk z?JPn?9eeS|%pV-zm%d2zeaSe8VRerER0A)E8R$-;JVi2FsiTy0fESlSD%0JCEsj=} z1%oJM3KRPV@N`y&hKWt-ERAKa#B)jVxvQt-7vLOu;nEzi8=ftT~3i9(3zQm99-Ydm2Zo z%^}8vOpFJ$ehZkE7A(KoMoR3#Nka;U8n5W?VzS*OtUjL`idiJ?`OXl=#7l_G1Pfan zsj0{6Cx1c=rv^Z}5LQkt1T+(H;rWq~^qAE90@IR;Aftf0j;TX4+o4}%q$Pp+`Rb|k z?WbkdhyDVB$jH*zC@4jSV>4&;PQiyQ`bvAr*4fLe2ho`+p`DD%<~Rw>6O4P6nT9*^ ziEYSm1nQUa3F^)o*k0MB=kC(0uS8oluQCb~6FmESKO&7|BOK*(CX=Etc)$=#G6qsi zqxp8W*WW|C!7|$wvHDL+C7F%53rC_vTo0~&dL`95qjev?aLJ7J<$V`=4)A5v32lFr z9o(|#UX%Q#r7h#Zk0rgRsz<4h(!Yz_5`kZuq6SrJsp8Z7xSzDcYFG)2bZ*l;6BEbX zO0e*rYE8>dXi-Ck_Ksw)EH2u+kNLBF#p{1Gx9^m^-LMUMR-56K3+6oO1YU2+2L?Ga zRZ$K55t=`=ZXB4$|D$Qai>)#%m44VN;XUXY>>(%P67)FoAd%sGc(sPi7wHnZZ=Wny@q~s~gZ~+y=!Gz1 zQ36Sq{e7b`HyZRyJ>kAbWwx}%lPJznb4JVhtrzRrKhS_#>UV94Alwco#J|e~zTL_y zI_2NO5{e+Ag$ynhF?olT+09K@t6!(>V_UCyX1dv(mPX6qF%5L7vit1ff zPiOsp*cyK9D2Y}(98^EaBWXAKhQ;#!*VAcN$$d|%XHbT_-yd-Kriu!2e!OH>;QXMm zeG-k=hX~KDH*zYEK(Xh^+^Ha69>IK~Eeq{Aps9REyG$)+5c8VG6f%9m*^Q(S5-H!H4b6l>NR|UV~5T8Ao0D5H!$% z{2Nqu!k%NQpT*%Z>4lg*JsD>YtlvId`7`klqn61w{dq7~zP<#l)|?hm4OA3U)n&0j zsf;|wR)~r09u1>Z?W-egp4FOF!0!RLKL-zsidY&Ci*VKv9UCT0Wr}Ah#BvRl<%c}2 z8F+TGHVfF{#{^8O(pi>3TnE|RZk@sQ?2K`oERPfaxQ+B_oQ2qbvG*eFOMKzy?{kR_ zb5@*zO)wfCFs&TNos|7vG8oZWMcalfm%PkoAry`g>NC6yX?ppE01H$0hUC{R^YX(NP8xQ(`?Y zVAj8^a5M!9G}2JiPNG1SmLNcZQ|(NN$D}ib++_EbCpdb)A4WpM+EM_96XeC8aApiOynO zosp^F&`h>p_aC^h&HZhfL>TSTe&xtNc?%F9Y_O)=e4JcdB$@|D%}zb72GlA;P4r-`aE6+%zPgat9>i7czNV{VV< zwtHCf0am$P_!`&RT1#W?;IxI1G)%ONGM{_6C&l(l@VjsDd(JG@K`>8XMP&uB0)}{5 zZ{D1)Vh}VL8XIQvGlEh|@+R~Bqqz{+{~i_HO;DtdgxB*wg)llvBQ_Z~bLgXW`NZj6 z1ej|w$Q}uHbMK@FpYR#v9gs+;=I1wZ4w%S8>HR19Em;lCFpf;P|LXLqUWimPdaTd! zdT5&3lB_kCtzdx0Zh8ZJfx@0%bYEd#r0*ZiJzmodyw+Jjx`H+XHD-V#r(0lEU{RDXeVlkeoQpY0P%6|WK+X_j6Ll5 zIK6#*{qifWErBcy>)=2j>w$-YdZ!Of_{s*~Yf2jMB&gpURt3g+i@VqiOxg&k^pSea zWQ*J*2F_2zpsis^sJ>lif}Ny+!2HmiZ0lM#&FcTHQMT%v-1-h`kuBjSr`oCt?9Ja4 zWSD-Dy0$r=J8!glk1|M8@Lg?-7XJR+DLMlBS7~*=+>O@^a&}@kbrx&ZSN1+sg4Rrl5sX`*LGk z5@FKY$Dmq}c<}Hkqexch>)x`VsTWPhW@z8(&Dyylpen)AH@Cu+*_7=^ogt$MOlvXMv=*2}_fO<8ZKvSWVR~!kDx-irbQ5(5nVP zUTS1=H!R%?Xpk8-%)JRdvQu`+I!Y5#M_TS~P;hOqn|~(UhUFLw<(M%kh{%)M|L`P8)$&HrCey}mFtNhK z1ZhxfWjwWB$32Pw1W(0-`?3Mf<51xR|2=z|$lG*mtMM2f_Mpf0Kh;kA#(zKFysbY| zVdjekEADUXNqMq0WPZ>PLQ_ljK9k1N$uW1q3%^sNrFVHX4NN2LVeqSJ09tHzgkRNc z)YIL9N1}FD5?7f9NEen1zKOQDDJcyDL_&JyvQYjxej}f_dj#+l_m4Fe$re)fYw~~B z%#ejZg?Lpv&VZhN1cB7&cN!$?rJn&e{a{}nWt`ltt(n6Dfi0d3aeyB;!lXVyLbf>6 zVBJ$Eg|ZRXCjtada@c!5%7YdSSy=W2?R49GM)E!nZX^C&+`q}F;aE+pV}dh*C#-Dr zF^f&7YlF?YOl+;Hr48ZZ%qh7@u3zo8jqluQMI`|y@TBv5QtSreMKfZ9Y2HGXiSmw9 zKk`&s)+T)BTm8K=53UVlQBxh9fFlsor_;`Ss%WUB+s6drf>HVdtZi$&h4LS{o7pzP z#z@KCd0$LqxKe4kdUU+7%iV;3d3O$FJYSQmE~anekJCEf7dj<`5~E-gPgq@R8bxz?y-$U{*O>hQ{VFnE{k5P3gvrJ3P0AwgWvo}i!O?&7@klI zOKDCuHW;@J(pE&L483qN$&;uTY_v>Qv(969=1^@_%9s>|n|X>Fzk@S}a`m<}lE#S| z^a13*dINXu;VtV>dA$xHX+_h}?}|xuhl3V&@mFDp8yIwlBSB!Z4KauJV;9f87f4mxP4ls?7LjQ%vxr5H z0hDI{fOvpW4L+##IZPR>yAIIg$tBfZ_oO@@=>qIxO-=^_pSV!>^sb#^ym!|XAZ3TEqY(@(V9tF=ZkQv z>I|_0gLA7Lg0piskA{UeH91<31K)|Ka$CZUtotnbX9gV7ecA@|Zdup}h!Wv1@Awz1 z>!zk;=VWTGtX0R5$z>OEZ3oWPtAB-0T@KWj`p@K?Swf3#9870AiVI)E=obb3kIJ&b z))ndaGlgd^A8nmoOnt6h`jfA033@cd=BDCDZerDQr7e$NqDAMj;$`)Dn&IAb{59$%Gl90cI#yB!qXff2h=}k=$f` zl{aNVWN>W`ALe<_M*LXbkq2qcYH2NAf6qyX%c{Cyy!<&JG6%(L1u5AW7n2`?OZJg0 zF2{PuT+3{x;P1zOZw_0-cu{phCk<8>X%SPejsm;8^Y-f;r+%l0n0>2EX54K+gP}El zZdjoFdDGJ_y>u6_mTmb@0+|Z3J`FX^4VQ1J`B!*HFr<@5?Ja6!o{JjGV)-r z!$bW@Si6x^iHd;FS_)XulG})1<3cq-%4%Sl4Sy&QOI$vq5RK65q>~#UWzz=)a|Ngj zNo29%AiEA5ARznZw=|~01^#k&fQO@tVg+_{o6^uZ*^0iS`4ZyfwXowwZ&>=Qr&S4f z7?Cyqe-xedUlWe=$8AMGL%qa%&U=uBhr$ zUr*5|bY481J73E-fsDeg+w8BSD6#4$b(W z`4+1`>j#Z}F(u;TKoj25l*dRa-%to6Txc){6!#z3L~q$ zU_Bfk)wDNC<#Z{jOzkbB$V(k9oh1>~N82Vd>KfIn9IMSL@up@gn2?UHfaj^V&UZO? zZ)wApi$-I5hQ+ni)&0MZ0Sdfb*gdZbf?(^&^WTi&%d!NVZgWG48MQ~#%!*3ze?IsQSZz*?VW$h6h zZ1H_7%EJH})2{WT%0pLS{F!+k>h=ThOj)V1Gr_{*7l7oKv^F2~+wA(Dsz6I-F%?N1 zvnCH=&zk+Sf{_}MLSZ2Q2xLM0_OHfpT_)+05|+DMetn0bB(pwv?WIH*X%$O_&4^tb z{N#Fj!53#Db8_@|C0>SBmUjL{$jCy05zs)SlY+Z)e0=)6^ zi!HTE6me~AWB=wmb=~rvO~VfqVzkWruv!;!zlS9lTp3rrTb;xhNnpz7E!r_{EQcEm z^avLX6tYmb(~xsR@4%JROdV`zdz^|_cT1QO%dtNjdF- z_q8B zbWYw$@GIa?dYM_}0vilg+e7?a79C-%m?Y*Rb{_W0OXQs$Bb9-~aLK1BHK#7~a)ocU z%OFBbGZ}iFz)yBA@be2)z^)`iD_&&kaV&!Bk1Kw-VuRoW=_l`os0MvGJz}cC-G8se zA@+?L8VJ~&7C_+E-Z6JZ$;lCfBL~~wg_jQ#_G$+hR;DQ-1Dx2h*ne?ajRiXPbOnmT zSefH-s`B7<;eat2+zig#Z0~e4p=QE<*??9|)W3#K7RBCB%Br;eeaF3FAv5lNEXWQ# zV_bLl;qFYo3LYkj7Ljxq%1o)&Ga8A!80j=EtlGh8hZtF0 z>&pUy{@atyhyOm4V@9DL%0oH++hbM~dIy78GL@KqE-UubcZKTm-S1X74fQUimjq0e zI(0JZcVPz2<3Q?wE~MvrOJKe+}~@s368_*+8(xO;uVx*hq_c zjbk<8^T{cEQVnAbc1w4J;+v35uRp2ky`GpRq&>w79Hv<862fJx%KnakFx*5QFEIH z_osLPd|WX_byp9<0c1k`+A-~p7GpTD<{KO>&t-gUObIC{GrAiW4)Lt@rJ?(}5Mw5* zc1XkeTQg8CG4>}knCai!H^&s{9R_$fdVQD0`UvbpC{h^s((G;ww-MHRS`e{s0+?#v zc|BGAWF4cl8RO4^0N7Wyv^~n8^==?sGOYLBg69kra*~A-+~4>2+{`#1ux(|Z%w}m_ z6A_w)N#;mJ$?oP^&2 zs}D06S1{`2_2VRpRSCFt8Kz2MeR;^sC5=Kc1_4|DR73L`hIa#=-@;4fC%n@q>$F5r zx$af24VEc;Q;W6(UADZ^DE6O@crN{&Im?tCW77<)N|nmv#!DwkeV>Vgu40O3sd-up@DX#D7i@^<_N|;H{+k!QS}R zw?{>l3vjD}d0Bg~CPzEAmwhTRgM;2vAvt#wxzR+lTao`{Uyjd+$lyQuAnmLvNd=Q= z|6WVte%ABOnW6&$Nfv$Y)-`Wx?+R4WrCgQgzAX>D`NGfqb4jR<}iz!>W2XER-k#R83USPkSG z;&w(LleR=MQ>t~O%s{vlo$Z}2AJ2;y%E>pAzKD4}`Dih0?MIWGS8iLbE)eByG*lrW z;#LJLyAWGfDarCRn*EgzlT>!3R~M%!>{-^+1;YX9`mciuRMS6IhXI96<;&SEkWj2C zXlHVM-6iofAzZ@0oEkOwJD7vZ%)A3Hj-AjuuAHmej-yT0AN|7BkQ|okcSz?R_cU4< zx;FVuTT4za%zte;Y;ASG<3jPmJ)`)~XbmR9o}7FZi4Quy?$g6O_fzUVwQlkG9G0WT0j+toKA;HNjv+2u z!cUz<4!IQTQ2td5%gG!e3{cgkFIJy^tLBCa#V_#tcxP1__Xt`GOdY)b7Mg-{N3Db1 zyR#z=tEnk>7^j$^>}EH-S8Pgz|*X#wGpzDdkBP@HAhAhB;wX-|BK2 z;tuO-7E%k@$>yHYP7?*jU4UXjyY@uHxtW5^-c(NR?@vWNe0Xh zBnB9O`9+hr9JPwtIyJS}BgMm=W>2M3X5g82+mB3tu=0l7O$YCGdm^CV@~xacw@N=d0NUSK(%Y{nhy7hZlm zH4#X#0pv0gZaxvx0@>`e2{AkRM* zhZ#CQz9nbCdvECrzp&Z(+rQVSLcq_9KI-mK#c;vj{jA(#PD)1jBNrexIs!K9lJ1rL z>YZschv5OVvJ0R>xzt?^euvdPk zVo+7^n4a7!M|*Gc%IHNI!qBZyEIIL(*h7~oI4((+E-K;8B&$?EsO3(o=(KS;`;(4d zr&v0m1}Gp^L6p@{x|MGVfcb{^Y!2dESyE zr@6B=Qx+$-Z2vC;z zIZ`)z@!G-nm($`{;6uLi#^zGWmyOfog(q;_=U+Ehm%mXR20*yp1eWc?u%Bb^AArH$ zL9oMMt0$Nw3MLM}0R6{~ez5RMoSpajF#|Pi<$S2{$^YhGbd?!TbbT47arUy8&m1p* zs5}AjE)^_=yq@xtKYZ414_X0_Xj&R84q2Tc;SX5WwIImNOh4JtXUS=h)8~5%PF4l% z$|vO<|0H3;n%BA3z}_>wJl@d4u09?$@R(LV>)>0aBOfe=Kn|I)Po$1#epvRj7_scBq`pUJe%)sr4Mw^gKuL?M@lE?Y z4w8h;qx{JM-7T_Hsqz~UB%XED@^y2mon>$ z{Hw;#B_$+n$}ZG3?fY}tEGL?~hLqp_7@8e0V-VTQt+n?5A4At5r0DkW19REnKOkm& zsbx^L8%lY)Mu>g(ayGG9e0Bx*H5qNMgT1H!E??wpzrH1IG^hj*p0l>9u}~5?WMYSj zy^@NL6eUN!?|DWA+EGl=B#|z&^4$*2B9c?UAHf_a7NmF;0hyXdgTCCs}f<4>8iB!8<+y0S=Ie}Ehca1+_oiD^Jz0{M}GRH3f{dJJ1+(O*;xVj z=C?k5lw*g%rf)Z8Eq!w&j)}k8cx#&dTk%qYy1s6I+Dk**o;UP1^*pIddwm&V%LoVJ z6n{lvTXH+-kFtvwBYGqNRy{`bn^@0a04?o1zh{_snfE-DDI8B?jth%q-QR0#Toi^u zwWwHbZt^xxi`l-e2=)jY}ag1G%!km=+Vhb&KRgb(?fegEybdj+)s+K5;TQJ#- z0>6$6%ll0;S3|S8;OGy}@0Bm$lyJljRW?;d7lVSI=`!f|KtNCIT`5dEow|2fbr`wK^aXTd_EJHhLgdPE!u9^|?o}$dn@4 zSYk(o45^0370(7wcBoo10OCg83rolxbRCX z%xm(%hX<9UP=I>4A4xM=U^Nb#C~j*}zJJDEQBbx|e2^1v>F@`nMjb>xfk_E8OzVy@ z*QO7(3QdHIP~whXP+-XUw-ZzEergErZHYm`sCC#PEXag^*rKVcEp(Z4zBRNpNveSD z0P6KT6|q8;=P7yFc9+q#dAupy=7pqZ&I~$kT)Zc}4)i~7-KWMc6vx@prU2SpJ(6x`RD~7iz6YmGa0L4k`F#F*{GrCJP zO3V8-hY9HIoW$%dqe>ozy+SURCgKkJN66i)KYvjAAw3KzoysjHv@FJ>H8PRuwn* z+Xltqg1r=$^eV_cxs~LcyzWA~L-~_8z)rt$Muf)ZBi=&mib)(}_-rZ3il(NvcLyDU zO%h&!KRPQ5&wLzf9?V@a`}QbOf?A3E$a^yis8?P8v;u!9l(!_W)3eY5&|duP`BK55 zp5gWGm7tXc13%ADDI!VcCZxTqZM`yM`?OJ|g*V1spIOGdHv7eG8&%BC@Lp~$v#)tj zcZz6)7bRtvgtpN)g|6;MtAyO-$Q;{KsA;t=X9J>C`b&x}uQrVpRFyx;qWz^@HYq@NTGzK@TTnGSd1 z7b#u^H=EQsWyc@9kdpB8LueRS8rAb_b0QGrhKEb8B^bl?Bti3HR&PCOYM?+x(VB>R zYX{|NSRPt`+tOqe64zH5rv{J`DAkL$Y0KC)@6O}dm3FAsw`WQDA@csAWhK%xx5GyI zB37ByX!lluRgkSe3*X4J1j`oDt1?m&8Z^oP-Vx^$UCi+b&8S#9^ zhpo1L))~&Hr#@$9iL8Z>5k}kX_La>}UMmV+&CO{tD1+PR0f>+7qVEJ}+4At~qx;Ry zhVvZRxxn20s|Qpo(!P`G*|AZwF@6QGI8ys_VZ}riPSDSQvPo=9_IRy>lAxepRo*y`1qxbdT zj*y(Su~fj-BU+J)wyp^6;v|PK+Vt0we*7)5Y?TQ-Piaw-=aajfvh|bJKVCA2SI4pE z`@=7pP)aD?h=AMng$gc2DfLk5CW24i>AfoQELC@vRBT z1KzYF;j5V(8RjU98K}p!2bt2++cxuk=IP9(hO1(M0OsZDvd|fJ%s?&o^m^2WL73== zn}%%o(dmphIdv!F!2e-J+5k?r-_7YQ_L*pU?Atbv>S0FV*#O5m0oz!?k_&Gm(-Vu$ z49Yf6!QWKjWf4EhS+#0NK_$ajqij7)?A7rSRhQ(A)9}WDg#J^vQT!ND(pSHGhHPj+ z+-^=&+i@>A;!pba$kicFv93j*kTY zBa-GEZf|`|fYzahHg77|e~o%Vbz2>{;wc<N|%nRrsM2pDM)d9gM)ogF8?Ahp; zXSQW|IimR&Zw(5cyzp{31mlYj1&k%FQiDZ=OlkDmT3J~wCw>brYlbHxDox%yc>9OzkhEHDRUQE-V{9sbHy@2&2x|dgn zNsXU3weMcbh(u`JkCfddc4t7i8St<=g$XTKip1fwt|q{stW%VyZ#uEqqszyZG$vi$ z;q*jDbBo?ZZ3Pu!a}ZwE(i=w!r+QN;m3+>*2c+*E!H#_Ilr7o$LYF}%~|d~ zZo8&T{&t)mHunPx9JvJx;KHV`2bLR|$dq!nL8JO4iN$Qe@DaE8J;3ymB3e zb)IpXMCB#v6J~;eBaHbxDn|2WYiySoS592eCIRb^9F%F^tBS^scf?+bbWSvD2gb(D zedtC?`-xbK@KcvNJ_)NniH$2)Qj@KgeVAR5b_!{55B2qMt8jTPYIIFX6HvN;6n4rZl<| z(2vhi6fIw3a%Zz{;m#H{>NB>;_x`diQnL~{N3>0?O|9WFut+jon=5Y1*t^r(+Lg3t zhc3mY&bcX>Fl7wPy zG+#Aw)@y#MC|@sX#rf5M48Bhoj|wHxi*8#dYm;a96l*6*L?_8}%jTeu_6y~Y7Hg+@ zvXrm6C(rTN%)-jryQtuozalGd&4(b-h2>mFAJV5-zSMp9!N#_JFcKQ$H1$r@zc2H9 z?jlQsFeql4wKJjt?x4hOas&>Fo|Lp_UpQKB?aa-pP=ZUfwXw#Pz4xk<%yQ1tO&`PV zgDbGp#Q9CwyyzZLqkERiY>-v)>>Y?a-M6HBs`b!Z1V6MA72%|p_4*L2S-FzIRF3F z{W+4Py!{o5Rm%hXM!^hI2}6sPX>4ElTAY&0WP@U&mjV^%Bl+5Udlawk6KbLICtvsI zD+kXO9TLB>sTb(uznnAHY={ST%BsMax@OU*X(5l%h+~-&Gs33i)Jk3&FyX`G&*7_J3}jqP&xirnG*MY3KM&x z|L~FB4}3p~^O+@DMAZ@)>oc7tDvvdmG-hJ&0C(7IWkeiDE@?_JIGYxTlB?ElD?JDz z&9{L&XZaMdNDIOKOH=Ss)y~5o& z7YxBp2lL#ezOy2)JG;>ddf>**X7}ft}3O$Vz3h&5WoSH!QW0Z5xq^ zAKSr~+m=|a-YZ9VSAo@U67-welp95IhmkB2m9V8;BDMuE}p9vFD zlTfKUo(t9x8~imtAeL;e@b}s+RAa=Aqp;_*m^^@;Unw?^M$jFhqB%`B{$=-x{ypm^ z=#DZ(fSO&i7eaB~i+nbF3N@wWNH|cST5Bszj1LEm1U{-Y*W(<4Xq-&Q#B$ zd7Iza;oSu?%!--9Db#l9a^}p{r<%T}rn3oq| z@G4ne3^}*T~kXDf@5GDuskeXv$ z7?zjQmbP*=DN^@}#pVKLHIioJ9^z#sgyaxK7ksjDh`5P+{f}$W^RAXm8=s1X&ZZ37 zV%`D%Xm^3U7>@^|rgJ$H=Gwy7Ef>F1T?UbNY62mUs=Y=%Z%&{RD?>H-ZN|& zIV}ML&jVq_k7*h#m9_f3CevHTuD8938S({xv z!BVX=QH5od^jIoDzX6Aa+3!XG@?36UvH1aDO_^EP!Hj&7dD0hLrE-Gw#}?PFNI{W-R|~UdgF6s+m0n_a0Ir$Z$Zd z`Yj#4IXco<4xKrfJ}DM0FLh}$3x;xiwsp^GNh~Y)=apv*q3$EJVh@>nHAO!92(DH` zr2RJQ@$|f7lZ)-iu2}}}i#ICUAr)4p8~DbvQgX9ZW(xF_5*%|fupkA}+@JF?DaaE& z#d^^Iu-L+gTCPpd=KV-qcHfW)(Xyf)%AqiEH)!slwy+asQUTYb?L=iP4%BYFDngzS z!tzJ^%1;jJHsx+qZpxrcHh%o~AuNjeJX|z=_-vozA1G7!Z9)@?xZi3^?u?CUQm^H# zmTjQLE*0}LU&94^)|KOwlCB;&RbQCD2nV(9S2*UDgc?;oUDZkC|6Ef;vjF%v{V3E% z-fbpaM0EsZ4-XyCVKH2-=yqF*m1DhP7+V0ZtJHrDr@j~9|OF)^% zxZFJng}f(NHrTlDfG#~H-sm>TzC9>=%SGnF=68&3(c_-`E{=b%c?!jMng8-==?NzT zYCs%zumQ+Mt+bJN6LI0=O@;pQZ-ttM{Y{zE@wlyrRtWAm8H+3z^>S@DuyG!MIKhv9 zgGhHwM1g)8kG#oEqOw<~__~YC)T>V5{f8qgU#I0Ky+w^EF-LlIFNg`ImEeZBB{2{V zrFjzNzDY2=$U8$>{B}Zabxc>Zu22#4=QV;Xi&^>!&7hHM)#Z!X;INO!80sPPW%^nR za@3A>$^fT>06Z#d7`r=espH_gXI?3-rrrJ#&pTbIy+F`*)7xm5d4W{ z0dwITML9*~fpX;QbY%x13wVv`tfa~Nq;QU!9nhEb@6q(S!1jjT&R|;`!=OXggNiuG zfY$ULwtH@d%$0KyWu6Dp6toi4RyMN^3RtUZ%GW zT|qaSO~PFb?s|kiOG!e^rNuhbL}6AJcIyZMxIntMg7u%8oYWXZY1HK0=<+*xlOA%Lj(e<@F9DCTEOw-UoOD zf8OEd>&_Tmu2tY@<`n#4J*!}%Ir_cU)5g1S*p7Ua&Ag}VGd?5d_;BssEg8?DZqWUF zkpN)D8ta7eq;v}Rq^$E~X_f<&_}Fwp&&8@F-`nOl&@`pJdijTnNJmXN_BMNZ?BVFq z+LM*v_N&FymG}enL}lD1aIK0jn|+12LQ5ZVrNWy@H#59-LFxaP`uy-disOOy-Ob$x z^_1T)W?v8yA4~RrG3lt;d4Banzv>^B%9Yq+ku!n8JVS{yeF4#%UoU(eQr^_Aa73_L zBPHa9<~!)*E?%`hg8Ks6)>B85r=g0`=PXlq5zH;Rx2}ItvwYF$oMTFfA@9XQ_jZDIaEtoOGwjMxoXoHtfqj?GI=AUTzJ%SGrWFv3+58I2;p_8Ph_vCx!qHM zf`=K+;`(>}c@k`oU!*ydHnEj8widEIP4k(Tw7>2aAKyp!X20`&+`Y=*kt;_;lK#iC z9?}3C^)|_dT@2AGjXFa4PevO={pl(%gW%++c6>ytAswkVt3iE3D_$jBfV3<6x#&g!QH zQ)D-tN6WH!H}5BE(7d z(q7kCyfp=HZ6r5Vw@x+oP;oRp>APVgyw@eN0k5Y zOFsz7mG#Ln$jWFpwEW4C`f|jGng($Z3HQzDC=d-@R(+k3`PN}I*m}mcV>5&BORe() zNc`z!i~B8QLd_(N4Jsw%uxs|h9A zEp|>`1mFnTa~7g_u-dAIPe(Ivq^acwJE?+)ENp=E(b9ThOhoTgOkTH{bu)$Vjs$r! zf8ZRFT57k?-aPQmeJYS)!4+T2iShUd-6*s>4_dl0uZ5zn;)tmjTO@H1HS%(16p?wU zLBK+)cw8lm70d*$-$D;$9HvMHpxN50=H)aal0Om)7*;euw&4BH z0C)ZHG@E^Vsj`AsrQ#;Nrq(Np`D<+EX2muZ2{eoOdo8BGlE@Zp#zWOI#NV8pqHj%6 zP(*nB2w^%odfAa`UOyU}^wjy<9;7#Uu=in?xaHL>fGm}$uJML_)n%7LEj7d|aQqIq zsjUu(hzO=Vw%Ag)9R>VrbuAxwmmxm5J|RHs^4ZEgvOp~&Wc0%e`Kq8cq1KoPxX!A&7fEJcP|Be3fY1Gqsp`mvU78d#uzOZqa^p1hO|2LEExF)3VrF$ znfK!Lw~onc3)ks@96&o|t6Er_4A+(?TYAJOk>#pO6I_IBlG$Bfy7Mor z?up;+*;S-u1nHs`{FdvVqTh<&n8&qF{|^SF7~oL@j8nJPEoQoGN>-OUbW&#ILmuyk z5IgusbuqSQtUnAGJ=5gQ&0da_K{iGxlG{M?LArd=0lmCCm(v*|*@3w(72 zqNC-ic7EOf#=A$l$Xe8hnv$loZ;;!(MDblN38ATw43Z0}EEE)Eg!V0Bs;!7#`9)-0 zgK%`K)Mh+S{RGt+c1T2PCbLh*l08Nj9EvUdC`nqzeZ^0-D8&;djDv*V{UFB{hq?_8c6bj zNtW5!NAKya_Ex;ES+gK>yH4dFy_O|UqIWFz+bb+BJ?p^VYd5ci_|N`c^XQq5eCpst zgqO@ban@(~6Dd<-?oNhmHt)2veoXJ_te>NxFDvBtqq^opwMhEcK z1Bz|@D>O=g@OyAnKNi2K4HM;jAOXLnRx{{IF6rbPxG3ZhD^M`#2! zv!Ffeb?GLm?3QkB1FDGoEJ(kULrE*|W4>8Z7siV%*}VN(b!0_>5k8JRj_-akQ#EOS zz2Rz-k|X{H)1A+;1z66s*oGiNva_}I>LXv{CJzHuAJ&MbCr4*-9jtR0?@d_~!Olm2 zP!#6F<3u;|QFI|&Q!IL|cScJ;mFd)(84fqBB78`UtZLrSlAlF?B}YBWWKQ4vKv|7(+^Ctv}k$?P=rvw#YoxT zYhEr61tteS)!>^nj{p&nI;Z7(>HSjKb-Qm1HftXBdWmrq*S%dI)D--R#@;JWUaL=5 zXMYd%L`_6hL*5pYr-&MSqbD@44O4Ct(iP`!s1<|(X55?-YBUDkh;8)4JLam_8s>y2 zt!JDGb=;XYA|iSUhY@=LHB9qT^2E1JWz)NO^D|gk#ixSyPd!}nw#Mocej#fWzlftI z-Uf4+fu3H$tEt-YZ@vNFtz*jSp#0imyd%DD#arRlm! zYICvkaqI0d0V!{Mg<}4g^>zHX&bfZ@fw*ToG`-X@V7ay8&i?>-_{`RZueOPbBBioP z1Z&ZK^XYm1dV<#n6tR`Kj#h;?JA4!KF7drn1GH^L==F`dtquD@{L(n3lq65<*Q}eTW)J&$;V96Sd%5lQ>Dy#}~jcIU-rsLV0 zc}_Hdlz7L+TUvr!_8*B-Z@c|$zTk_@*wk6YL@_d7nz^_as6Z?R$fEOa1P7TQuws$>(Y&x zj*Cyi!Zpe%vk!N0jHd8cCc&b9i)+2{mpoMh`7OX^xVuhsM@LU9 z*yb7HRLCK=Bei^!zIj;D%Ac+{;na_XIyI<-$VrZ>zSL$3)MMv&7NA;H(Aq%>pn5VJ0^i7qMk2i=T$I88CC+PXJlC8YQ3MmwQPi+X##+rLY@};)^*f~6>ODVR;h2l4$c4(>cs>`)vSJnkQ zv-HnwPb}E4Y84~ZR`&_ffD2{XEKX8R$(#FpazXDn&do<=Uzm`{d55*AUVO2yenvzO z(D5b^}3t*lOXZS>PY$ zRq?aQ#51(Q_hG+>&fjYbRrcxODaUcLj%&3Zuc=F&Ts8tOTm}q@!(XfLz~(~URG(Qu zwzK9;ibvjTwus;#^=6gf%~SVx1?=#A364q4sT>+%6jsET6=gAj$;-&UK+Xxyy}b{A-D3wF_8wYJv;}{OF8cjuIs{T~m@wXAtVeAap3_8jT#2)^v;Y#0@4XUw3 zfM^TaBnRT5J8ZO>U7b!;-kn$!m$$FGmC>E|~tAxg(sHnMz;8AGxaH!2@^ zF!LRAUutmQ;DN@E(5lVn?Lk@A1?`Rk;|B$qekM|$!S!oy@Cq6!0qm?Rx#eRJr}N-h zHiF0j=(KclHIQ3cl#^cFY-m|2k{q(UqnS;PI^>}o<3d=Pairsz6@i(T2)KSciOceA z>x{tvJVQjH&hw+EO&;V^s_dt_yDxytT8vuWf9?(tuXiV}<;0(MyAihdBFbpFcr_e= zt%fw22cX#2v#_onu&upocWb-$Nf+?iffhr!4i!k|)0>rqs{51O*LnJ&I$wC-GZMe~ zYVyqcw60;bPTbV)W7-I^wGz#Jvg=#Vv(bgZ_^uJnpl$6+C@_ zn-AxzfgepyDD=igv8hXucv#T+Ev+kb-4s~;S})@s!Ds*WfGRW%#jnXTmtQC8W{CCX&*i7cjuEsVTm^vj}0Yj&F}T2+Y6XI#n%#jDexZ7OY>=gqE9MpzBlo2b~>y%N--7YWPk z2hgS@m1QKKRWoy<2Gz9Qa-uMKK$AZ=P&r-?@_k6YvuKk_0T6;WWle-QF$%Q|$iQZp znx3^P)@;9j1Xm($yKh{8B>fe5)>d5x| zznglZjX?E6lz;V3AaRK&ffyHG?%VkHnzvqAWlBA^Ky%izH9LGP!g$Q)O)x#L&-VK- ztMs@<{r}1Y`kwsOa+>M7x$dOtQ2&7Xk~%a)?>lQm(LkhR?jU<|z=518{GGE{pI3tI zKAt`{>uJHfdfu~jlIL#>Ce`2kmI)WdV|KL~<-4u)3s;m8)TRBmDIuyE;yqyz)%x!& zG=rO3Gx;-gx4$Ge*}hacmF>Dp*Qq~Z;QYK<7UuCe+u5YnrgR&VMTUbV~>5IIo z#W+6c>SZ)WNXkc)dlV~H9=bC#m1L%P>Lc?U$H2ybnmN9UwO0IAjtRNEZXe8_Vj!MQ zL))kBLY%tqWCD@*V@ln06zeF7TVxZ94m6?0)~)(>1pVR~T>RYN!d8AY94+R+0j_Mf z`#EucPvC?vC~jqD+rl6-@K4FkvA3gye)%yV8pg{CcxN zFUoax3}rQ5UM@053o5t6TQ8cUoI8;l+eQ_;BSNDYU6z6VhQDj?h^oXribfkOOjfWk z3$Yo^gr>N20}qZ%EsQ!9v$Jb!l?Kj$sswcCTdD7DVL2_cPcfZdznw542(ta63>=|m zNAS|=*W>@FML^sY_@!{vTIy^0?M-rpZzBlc$uSiskmAo*e+;7|929|N`YXqhY%^A@ zMBE=|Gbi6)`PR_UZ$#sx9wUpBerf(?f;UboTcT53S>0VBuf}O9EBb^4otY5-r&Cq! zi}nhW2diOBl+ewa9IxTSSaz%G;@F%d%5P zAd|9?4`9L+orM;X7aJ1P_K1ym$RBZtjn6ZvPUbR(qzZDV4dRa!7?67t?j4C9;75vS zcFzMGM$1#uBnlsn8@E_p3(;hr3!5gF7?6-W%v- zA%^j%{qrrLE+FRqk5sSepAtaxc-i5NJtgum)6|c}R^rW150w2kTG+Ku8pj0hDv-YK zRN2(WWUJ`8t{;G>H!V`_L?$Z-x!zbqEX`Xbvc%UhMQ!ErrT_Np)E-SJQdFP+ z^99a%bI!T0-mhX|2kCb~8NO1OZ;^-_; zkKH0C_gVoS>LU>6_N4Db@5mn!PLzh->klB$TVplW`8(R$%pQG#9eN)Mw0A}ut=V;5 zWB`56{6Sj0IYPJl_IS+Z>FP%?0$B}UH&E;^XnWcz8AIVcd&e!>j$OE=uSFU!ijw??c#?R1Rs zztXfeahhwU_Ew?QnFsx&0LqLGNj{hQ{oU+brXh}*Gbd@1TI9v;Ke4FjXY-kZTOwt{ zkEru|Y(glk@At<&)>|7nLy0;y%&j}9VfRh@aR|Dm45-j%T&#ki%H+}VoI>XoP#@I8 z?!YkVhm5XDGNiI=%G|B?t8pl)D(9~0s4kNHQzU?5`Q6-2KakBte&27YE}`Apk{iX~ zDFchf%ZP;4ToUIutZak}^+E3i8&WjC-hw+xHrI>^Hgw17q-{ovS1$a?kTSmNonu~B z99DZGW`41$U;nu|OaL3yEv_54^!&9{_MLGdQN6C{FhE!+lzO+c70lj{zKmcMd4D6u zdF;L?h@Nui%~8rth`RXqpcR(Uv+YU7n&BFw5bl@^{PI2iKyY?|a;s&mJ>26TMOcGd zmzR*Q5xvfF#Td|{8hOtUx;K=$_jJ}D<1UsJnis6>5Z!$WGXRCxH`>qpN{kqqOZ>nKeEh!a#r zmj)Z1H(6R%LA=|7E93NwwX@QL|K!n$r;{vOy{jR$2ZfHfUfJCQl@KOI1O z!PSU>tSZY1Rog2HZbkHu2whFARIP$2=C9Z}u)8T*Pq-^(JFs$5@NaQzs)l?gAZ*i|ducY4_kP{IdxNhWB zAjH+RLOZwg?{+Sw&pjE;A|*zV4g`W;R)r9asNY&d=9$x%B62sJa(~#|IvR# zov^xG3;Y+meB+8A*RxM#O_=RZCp&EQo6jCN;U0Iw!@!^AK#u&j|Qatu192IsO$Gf0hEjirigT#gMyGQ}BD;q|48t5;#+d(%5C zZwxD3sqhPX!RQ_2)pOdzp0UkT_D88~hsa#QxGsG@uEa*boxFXfOX{wxA^|kND|k!c z>}`S~90%}{%dE!QzEYoY=Z(vYd*f7it*Y+i<1zPF_g9X!&lhf7$QC|C&s|At#G+1Z zBwV|{bj|;6D^1S3Oo}ite}Ax(CY((>H`gV3)3zgdIc)`gEBz{#;HJczx&6n7o@=jv zFLMVM8>+jcgOafDtl59Kg{>Y6+BJ@esAa4HI*6@2E9Cu(?VCm^E8_}c`hE!1p;C9mHilzqpJQoHoqJX=clbHBY!*tZiT(SzvRMhydQtgFa&TNxXu>@$ zJk8TBolkLMJ6ipO+}1)(QU$hr_xgqTUs*^|Sq){}f^e&dE1&6tA680AalA;@>cCc%UI~#ID#HCp zQU&fLz<`4gF;Dl$6yxqH4KXVRO+5TZ@gdx~VsVe7OPyD#VSqGNoHv+K*4C5aE}~Ys zwHlL*iW>HVp}U0F*W&OFMWr^B{BcM9hS>*uxi;`SNv0MuG10$V81weKJ4*v8ye9{% z&#DNN0;Eh1rMTwM-~R&&6Xas39ho;$o}(sR0q)?pl|s?Xr28e+tYHHC<;^6!23VjL zZnPWN`dk&Z#87*-pEl)UHg!^L0~=PnZ~F{t^C}cf3p{3!2hNtB#xZ3(I<+2#Sq7Qg zyemZO@DAuENNzxFn2z{~LoE~Qhjq6f%A(5RHOVW~BU*#e0G^MWrmbJB zu}dR?-T~>Y-|oHjP#Hq5M>rFEp2IsJYI55)gxk| z0H!jkKIILIWJ9BTcPN@oEU=FtVqWNI3mbVw#AM^DhVP_iseG~NHMCBc4ycN=@HJvG zm8&B$npf+ja670+D1AeP6p!&Y>k6;0A7{u}JD%eW*$=&1; zQ5!oJ&iH4xN)IvG6kS~ZloKNTLYaGgEm02F*3zjMK75hg~ z&5obHy0@NJPwA1XP@e?NTe6pPz#cXG;GF?s_akJ*6{27ESAxbEhvjSIMSezGbN#hY z;~1;{N8!3PTcAS4X2-Nu3S#2OeEq&&2W2CnhGTy^moL!%qrjkRHX|Sa{zvTLzBBRk zM55ZiKsjKlP@&2=BX_{03P4YF;)yIBvz1M)lgWRTRZ%e`6aHVC-pm!K&f^PX*Yk?i zy~0N_d%zuIK66*C-ZIj$ECKV#J)3CD!9SMFKe zacjf5cL%i|pVo-C1uexEnPTgG%hc>0)YxM{V|Pw5IyaaQs$H>>_xCt7V&owO;sf3U zNZ9Y$QD{iR-i~{NairCnjfJ{{0|jc% zniQ5BRgyhbKG_Xo{oIYnzDB)lA<;*1UZSZ#D77dkc_ew**1e{rCY{wrQ}hIFvpCvv zjK3P~^9(7|&8X&dJ;Fd9_hK2#UXd|_W26Am9YF`^yC1%!dAXVScf2off znlK22rwEE=Zoq)pz)erCDus){OMBQD@coY$g*+INMx1mPZzWj80$1S;4s*XVy61GX zd*BmPL+MqVQ}^MWC7Ay)pRBAwEw!lc6_XNy=L^ZmjO0Cu3afS8iJ}aDw8}sn2=K~f zeeVc`AN|(%<&qr>36<<_(srA{JkgD_(0}fERr0qwT#NTZbHP2`&RJ=RE3?mw^z{4F z!w^YS!NkvU>Q8I5AMoo^!UZoIj%<_|IeqYd9sg!D*VBdH{9AY>>F-^w5Z78u7QAvN zQE|&)a6PTf*|yH5_QPJkI>M%D6mjR4gYU}(>K>wnH(;&NmBj7nfKg(Qr}N2?$V7X< z&J-nEEe*Q)5!yP-G_Sfk0&*kX`l-`nE)7f^Una8@q+%_b;=IyQ`0sE8Tc7M~a00iC-*L;6VG1NI~y#Alb z*}6o+!aoY9UT0) zOVbLxo7TdezBg+yhHJKwT)!k?{!!3C@KGOv{?}nqKE27ly(cv+jZXX7@_tv~WN5}KQo9rr6BSfg%)D_s+iY~xG~e%daK3yG zz^rW8%=z4j(`co(`i(M8)9roS_!Fr3Y>M3w;#K%;lYRr1fmYN4--Q^5A7aT`BqcDrS}MTm)ALCOYo( z@OH>7YWd9?Bu`JM0{O=t_C3s}k=XJ3`kfp>`~oE9J3JyO#aA>>OUp+X7*X$#Q!pS%M@-(hWv1(AnTlK%_GykmP67QKPdpB4z1 zfZsa9Hc21r8Y}o=ry~Y&b~YtHNTIKo!yAY=*H;&pz7l$}1}pSdeNN(iiviW}vaI2! zJaQGAYRPVR+%YImkB}^V7BL{Q>x%itpK}&Rk^hfE&tKy~|AzoI9*b#P;HFAV6WHJ8U%9|r|!}n?YRp+tbv>pKt&BUJ1P-9rNNE=oj2{h zc~*ODRK3G;c4VL{RQEcO?T9kDSG?GU!6qlvF_A}9U5WgD!-%cBA^O~O(n#HNXA zv<8OAr`LMOwYM2t2RW2}gsk@545uJBZP4E%cW%_B@a^`{eaCP2U0{gI)M1@VDN#n) z!$Y@(;52bSW6{lvUz^8W-}+j%2BVBe+347QcuC!3P3m|3h|G3fpa-Yqns0x?rHFJq zNHQucSFCSIP0z^ESIL;q1^l%4(h-;IH)NRBN%~EcuA}b!&WQDYtvh&bcIO+5=JJiK`lcR@E4!KS zhbZ*W+jhaG)mUuYc*eVwRP#qJ&hl;GOo~IkEkC= zskF9M$hQS|VmDh8r4O3hy4n&KSesw=8IQ1R1-YzJGRoY3OL4tQjEYCwDfPm*B*PRxYF-(PmVl!1dZxV?WMsy{FlEbS`LhFN9dn8&f2S($8P2gw? zPs$sHA+vsq!VOv zdl;^@4k}QGKn|VO409*1m#tyZHg^^fe@uO!9{8XTXY9zwQh8RuMXfm0_e?7^gnPNgWKuW#Syq`5ccF`{09wKyJ^}wlqcD{qU(c}O z$&mrRxKo!F>bw4_8AxR_Z#Ngzt+Qq_^Q!U7@kYwyu%w(H-3T1PjGCQ4-NN1OZ?IA< zEJUs#e2gh;y?V5^VNT51-5__suuM!$8G7g(pT8gWRNEkbe*(ApcLqfzlP`SrCwFTx zAI;_^FO%g`Dgjgps+y@1OO2_-)|iOf%I`XuCa+65CUh#!sGkwHhkw!Ut5e~wo`zME zYsLso-0C5d@fR2p zF$t>^{jLX9|%!boeQ@r9|M=*@sKwb7yCC)hjQorN8DW@ zl|@o}E1x?rmD`imJYFI8*jUG8A7ACMek2E4h7PK2J&jOP=jeI-gSc>|RrR+x1r=Me zJJ)N~Z&slaPVPY0e~9Hc744Y7A*F)K|B|&-68j=7Q(PzFDhzA?r$S~6CTGo`H?4}Y z>R`i*Rf}KTg@Koi9+&(ZYeV$$8XS>4V|1;=4Ir*d0Du1OO1Q*sx5d3bQjEBY{#zg7 z>+Fo&?V!sOMNilA3=1}kSiV5F>q&m?VN?yjbLkQ}dLdZu7<&5SqD{|J&GtJySYbI!Pk#X1*CQol=RN(mjbrU(^$4;aO%osMN zLz;^9zLp~EUp)gyuoTo8t#3B4j%8Tzo*_D)?P3e4QO zv?Ru=k2g|^4IEvjl_;#BvlzZq-Uzf)m*cMoaVEwHn-;PlSyh<#o}2g2m1+itriiT1 zfdiW3iyu~KNIx5KO|D2PRHBbRldpbVK~=M8lHZ=c@o+`l!Luo)SV^?9BLSONkWE2aZUH$=5b$p>bbDN0|`Fc~P7F}PTjJGlkbUt3)o(aFT zp}|Z}8@OfmagRr=9l#J#w`=RPhj`M5#T9oho4t>R}?=UQYj9)!)nM^5Pd zD_!DUWGM`>W=ga_PpZEXcPCtq6-f7899}8TaPuET+qiekrSoInTVdK}j^vZN`7Q*~ z|7(HYM~kD6g-M2A%3!6|Kt(|PUBRWr{-}yYyV{$Q_K(6u6vPv}N423h*AxgK${Q)K z+X`Y}847;|HgrGuS%^)zwjH?1Q3_kJv+2a~!85DOtPOq_=sWW(n-(dkw1qww?Ryen zl3c8jGvcp&Kqr+#^RQ;Uf&5a_v{>E7IOuQY&ou@8YT1g(b}T2x&b-~cc7A^<8VWQc zXuMZ5s)H@{$$;H0XAiOs=6+wkn8ECKc3Z$7Lra&Z!oWPUe?PtZ(b@_ZPjcyidlZz> zMZO}B5i<;DPA9a69N6Z6qat}ZA+ihPkQW@`!RPDppRCNWWtNy!f%t=SxuqqEhQm-s z502ohTUIGo^kgJK^!JLv(!ez@_WIEROv5N%Kcx;@p3)`r+WXD~q96>D;=y-MParz~-YLeT(mjmI0XI_XkI zEx$!q^ZS~$m9bIGMRe|5j|;aHh#9$K%Rl$lpO7j*lq$@kvqAg-{9Hk}7_@=>ChOP1 z({)qK>%)hcX^Z|`_F3EQ>i49_iN+Uayi}!JuIyn?1GOiQ3#fhEjDHeCi{IW{+h{UXy?{Z00NPG z-!(te9E#{S#RaLdm3B8bdQ>!YvI5=fz$AJ9bjeX5dx3DGLRQ%;f~y~UgcHs&22m(T zjH@A}Q3D0Hy=-!E$wDXap8y!z9a zIQL{B*BI%*>{0IwU>2(m+SKV1v~{$~k`Sx1EfV)MG>H)^`}N1w&W9V9rS{B1RI?1F zS~=>MX`1Z*a3-1XYYd_d5f+&A?YBjDvsyVQH$?z>a59lDDJ7W13;f;d;hb$ux`H@! zN6L7jNfyGqBTB}W;EDjza%#axSI_=Yn2=~E%Z~?{yR^Kov#VHV%h2r|J?;6rmH**g z3wph!Tyh@jwWmkRJtZ7m3&Fw$a_?e-P>k%*ed-mB!)&_bBK!qFVKAqoHC->(HCo@> zZpb3TQiC3A69m#OdKEMfg;_nwh9jLcH>9C(;kpF`dFXXEjxH*^RQzjgweTYZnMoOUA;Dd zZ^Od!YHhi<6Mo*Y)3}LKsI|q~HT}QB^~YvQEh+0G3e@%7Ub7 zv5Y@Rc4Y)AJMNrv)%0%j2N#cTua%|H(eaYSe6t4qo^9*LRr(&RgZ}S{;OoBNIjNus zgFWGig3($r^owudq~LxY6N&IYE)ZtT9)4Qo*ZvQpk;xTtefkovbV1b}zb*8ul!v4Y zo25K6i|KvGSgGLI)9c_@m6vwvu2irCMHQ%^4$@kHc%1CbO6Ljy~^^vIV^?Vs(rddW{hiIv~tO@JO@ly{0vdd*_Yt&ThZ(9_nP5Pbda2`e5-IM zal%a$1L?Fkb0E6CBd8kPC2Y+PPUHXN5@+4IqgTbZlxWOs+gl3(^3;{j_kxZzCXlT!AlnCj5-P}8=IM7Q zWZseblorq*xU!oY3WuoXo!tGLz4MO(ubLxSFVqHVc_0@0OR@{G*LdquD~!l0-|#0B z7GUm2PQaGNqjYICF%Zk3y{?y=2m4z4@(vtj{3B!c%l9i-Hbq8xb~m=dsdae`%BAV! zkPbn1H5HmtlEM!&Kez9RPaq}jRq+#cq;5_vvMWj2W=;V@e`_x|{cj=x=FYUVlYQP1 zL+u|yL+X*1&x>kaG1_d1!`%+fIM}>xP}%&uo)*$`tLJ+cs07S%QO26=J}3WI*D&5> z+Dj;%Ceox)k3q1FProGBRn+&acuN5MR@3H6jhsZ>utN0f06r10g`iJIzt35NIU?rz zBt|MkZj>^uP01PNHN2xj=MiFd=pq)w;F%rLVkWqxO=CsPwPg3_ zW$$Z-Zv(vIw;xJ?pkYukXOheyZp0rG7~WC9VIlIPhOkdSXEmI}92$yMG-ryLWhq(M zdKwrf`Y!5!ySkJe*?Z+N8?$RsQm}h{kr9%Cal_{}b^i%%4oGQTIBHHY`l@vHCftfg zffV&tns&Ug2j0VtwiosBalC(cCu{Pu=D)oIez<~IT8o>1hP7>KDX}EXd?sA09;UbU zU#kqDZiTF6*$5|yCLGiF!NROfvqgTYF}CFLWyIx;3oHCmJkJfTk&I7NyHis1z@uTD z1S{ul-0f&dy2DX{l(k&pda|M<- zYc?kjD4Wg)mhNhJBL-=gbw@5EQ=5iq@UB-$f?d-JO9Mlyp*Q#81Tm)-DtTgij6bb; zmBh2BvllBofR5?#1%1n;V&)0qrz33!QnJ2UCw3Mzqc*Ah)OU1DeDXtG&K{Jy@&cz4LRDZJF=IZVYyySi&eCvj8 zZtzw!6h!}kyocMq)FZnCagwGALbyFPlu(DsBk+&(S8TFulZ0`@koKoBmd@)h>C1}!IO-?R}{qDmdb`0Ql-*0X}Yd;CBT;^5^l z>tsS31OK;x(m~WIFS9MUZ@#ZkhWIPt_k_GYUrT&cpISNdX1X>w zq~eZ-gy&L2!>(e;84jWTbgt;D%4TLjFPH$7bnBdj!uojmXo23F#>I>F==16lyEE$p7F2Y<^< zt#94$KV{7_a`G8d0cM<*U}I4!p4-?190+9^#Y8^hcOfZO5SEl{i_y!+Q@1U%LsUL? z!~ndK#J{bEWFDD+7RUH_OoPBTXU#Bk@~B(D)Talh+zPi~<$&cSH8d~3af0NGs7Va1 zzb~KoNRG2A70%+xf+rMdS|}!G)-3)#zM)hgW6LDFvBrU`qdu4+1?#kAF#LUH3apc_ zj*j$9sGO}a(J>D2l*z!rgTbrwvldmGthw=5e1T(8#S`qrR5YyB7S&z5b+)4~U@8(9 z_OwoN{lrQ3PoFOE65T$j?FrKwd?2`T+LA`t5lA!snkv3ysoG-0pKi&{Xwiw5&KBJo zmI&0j*;ughEO^X;m^dh}vWoW0eYtm$X_7{@bFM?(@Y0RCSg4^ zU0ren0jRbDz8K0WTP;fq7JU4s>!BvdrAB^a~=b zX5L7F#PXiR`F!p(_HIpBrPecyzn&1bBIl?~C)J|SMh&;{P>)8k`*y?)e!l7{f+GX? zB3a3@gRU64tVL7LQU$45<~9|jKRS{;E6|*o)MK!)^|0dm0Zh1>l-mh5z)h=wbA56u ztL+xciy>7lpJxFK47E!8()q@r$3Dq?>6_IoK6H@MIp`F{o+7Jaj}X!Dlf&2U=5a+o z$GvPn{DeS}2S~bUY)i)_NSB5);NyL&0K-i51JhzEvMsD_NGuyuQlQcbH?hNtS|SfY z!6v4K6Sn7iCo=2>j;>0&OjJYxHZab&#hP(4Sy>C2a?F+kmG2um;?$NVUK+3%Vw^gI@jE{ z1tYP9dA>_oy~~!R=DDk2boCL{#}d5{rJgtM_<}pW^bbO3)NWPVfgnuJ2I7VZcVagd z?X|fxjxd;x;8w&pv?PtML~Q!TAIBT|hf?z0OvdP0can7WI-sV~c2&=L4mj6+b@DR( z-kOlr=;N60Mb8#Zuq_+&Ef{2+pMU=tEqni>_E1d2LUrcPC6j^g$=g%x;zM%Y6{8!X za>J>C4qc@>-A1*BT*vwb$yEZGp(qQ@CrPQ3viV4E<~o1V1$!GKme2BI5&n`W_c%$A z!IzF1@6Fa@cp&R1TvM-FL(l1pdK_AGsQnaixu6lIjd0BTsb=gOmpTLvAniir~J|^(Q z>{g_qF;c0b(_IAl%k#kC3uBidAI6vcAH{3(*%I)bO9LAF|Dmk)`a5*7C#=Bg1=bl9 zoM1-nO~a@@n-frJmDNK+WCwHnvLqY*XgioUj@!~&KMQG(6TvFXT%kV{IGe&T5B^b< zHadGoY@)d3^ofT>g^1P*!xX?-OxST^N`m>l_jl#4croj`bcPaWbPzqF? z=_t@{o1)xjkS{Qo3&~McTxy>cgVywAH=E~$K&819-oOp?hfJ$Pdhw##0fXYYI(4Z- zl3{&3vN5}>)Yttk&p_ZKUn~#n&U_sO;54Dq36$PKi+QBeIT=M&1!XZl- zwYdEdXo^wSmk{=pL;Ege?TmSMPI3&d)Qj{d?BV_MT-;xhyV#k!Q<3WhVgyLQPlu)5 zWBhWjs)&)IVzdYQrw2DO#%~4W-^%^fr9^^QH6W-X=!f3)B)PJ%9C3qyj*NKVUBhoJ zp49wHLzIu$DkKtNE3p-73bsLe23bO-PlY)?;Z_W6TVdGZ3DH39vizMB_4?qD*Be|e zglgv}`-qY=%#)0mQX6r_8qJaz@F-J!{H`0v z-KtCpiD1r3T3oxM3aD8eca3%QUtSs-XK87b)u$bZyx-Xvx?!mjZnmo=^Ab7d%3x~) zgQ>xXP&{gV3jrfTd&>p#Mode23D53DnG3kw6Jg${E%OD zjAUiyNVUt>Z_}Yft+d-^p@OpJ{tD|Zw5;n`&OBHS+X(Hf~W(0^U;jqX3`k0 z1s9t!c4bc-C*eZ;E_%^VUGbN$PBt|`un;@aonC}S?D>2! zydtxqpF1|Sf*~EDjo_TU^OH2fW|qUVKEg(sOhxF@A{GnAjaoxlNHl?(w~ct(T4|jo z+HcGLqi_Qm1tev3ue!5+8)mQNR$a%TOPB4qHLM{4Xhc{9=Rin^QsVSm0a4n4X|?2U zwZ$(0Okt)n?#c;4`V7?Ch z<&Xi_m#l|IZHD8)J8veD#4i>}m+I@`(i_yF6*&l1?fKur)_QI?#beuB^xGb>z;#n~ zMn?EEraYtQ!hx?Iw@;($)y{417T;EC*bPCmH7R9t-1%%I3sC`m*?@DRZ>PMv6Uq0xLzEn6B5n9BX2@Nr?kz&He0`2+q=p&-RSi)QH=>p(-sZeUqdKnLo33SyU8^u9Rleb2YG5g(Zx~eaT?gRp<_|Pb%tOeOrVx}oWHI_)jET=+ zIaA=(0K_16fgXKAQzg|{TngOxN3nx7(1>RF-mPoKg!*@cu81y z@z0&luqV@3vLAw8#_M#4O^Mm~Y+zAAfNu_rm1ivgzZTQaleW}rk6u!y0zORVYEN}c z*EWMrv0G?j8GKou(J@Wso2Q)KZ1|;f`eQR8BZ<3HhMv!S*N5VcH@h?le`WP~RxDwd zZ>O{}pI?XzoMp2_Mr5EKEEb*Ud{s|4TFA60ABKgw#YG0p#h zRGurt7Gchyf^3!YnXXSoMFlpYB~7!aDJ^uoC8j{?xA>R%ljYuyy}nQhHQ#lUYS0bY zF*TO#Y!t*dq?J;@5^>hpbo0gDz`Hl6E6dmQzeT7AE0E}a{-%9Zfu5<%vTo|tqMNdYk zS|WsFUREg52T=Mx3;VJpfltcM; z=5|h4m-PuA^Q_54<$Ue?9kcyY=a51RQ5~r1mcLP6PStVe-du*=)r7~|Ox5M{F>r`b z27#7(aLpO~Na=*02DG26uV-F8Qmb2Q2Wh=2n39Oeh4wCG@c(yTA?I&Z87HW7>VCLr zv%T{5#hNWqt>=DMPfJIetghdz$D7o`vzBv4Roa~?_pKq88yutDX$k#=e-wD8_0`-C z-URt1Una29JhfyQyn7sfmLu6Qc-cwM1a`6el*_L5=?H!#mrp78H5Y$9HhhtZ$mXG( zllNtu@ZyF7Cf@kcM|A52FR7Q(rl6YlhGqE&1s6hBb-ibNyl~P&ed}<)Gr5wgDwR)O z&M2Kg)7T0XDswxI&hk@uGHBD%N2i9HWA4$MtyGhzXMRIs!5cCCDuL>b)MLBGt(ZS9 zaDe%g89Is;7$~_N-^1q-$#cAsdN#U7FpBlLVyzjUPLQmtT`%gx=eN{9P>yDg&%SM# zN)P}uOsFoUC2&NRO0>QaYOPuDd_q~LzX%sDMyW)BA!hdb}htY@ZYhJi`78@Y$ z`)N5xO4js<#I(Z*bwDhIz`STNeVVMzQa|#_ff#$1?tGRtg85RPdC!AwhUJ4!(KVnhyf1PwyM$Ob3 z?jrcyg%ngF?C#<3D=4@*sFF@;T@6V2s*dG)3io2E?z;#%iq zgCIOmVAkh~1O@?+5cxU}yOAFgj9aTm7fT!T{hT|5M7&W;MQn2(IL6EuatRsRe`fg; z@L0%(@L@DV?8!~R(L(&#P?~?`B3Om>kbC`agxl!zvjwQeo&9vVB1QRQdFxYJe&ehS z@N4)q=6ADYvWm5~z~nF$-j@eVTQle=5JEizlQ=;Z{9j5|3@x^k{Qq!&$6} z_voHKno)}F;dk66LN1uUL@P))4G~9pGAedd?hN2&o{Pkt9Zv>@*~HZTy8XqeGu67Q z%ryl-LloBOemd0EfJF+d1C^dnO06Djn=!>#fe>eg3rS;jDQh+7m}PtE2qjh%<;hVQ ze{Zv5KrY>gQly1zO=Ds!)YW~1+ZvX89F^?AIjs;O^5VOL4H;z2k+)QqSm%r4mde-z%pL0Y(n#Cb$Bk+GmAX%M;L}R=(;c+icekI^;Pg6p2f_g=% zo%JI444(`TP1!sFGdDB+z704@W{S+MV`Nu z_ux274}Be?SX4*mxV1jvz}q}@b9J~HY~?g>Ia`)PHF6uhF^)Grmh0c)Nc)=S`*670 z7FZ3tA;YHPP-kMR?Jr=)w%yv{ZOZwHMd{}5s`BK4S1(>I)J3+K%Yk2V&<$h0Gm2D* zu?}}t2KM=*G@D;ax*k3r^RWid8i=-z=Yt?Kak5PPubm|nIT=h9`0A?7kqYdiEcq55 zgGlDuP0`UO``$*FND(r%$&63<)0!QQ)#CL-*Ui>1xo5MQMK;9dqk=F`zMg3XqlO6{ zbZL_AD;na05sjDW&k^or%T@-MQmQ%^`5#4pt0IqD7&p&+|M}UWZzy4n(nt|iu~xek zYPw_(7@C15^emvO$JEi#%J?9?!Jpn#?{?34C`st1xkqFfQmI7~I&Q8Wlb4`Cssrcd z+Lui5q&-7)-=0@wb)PU#1*ql}XM-ge`m8>|d z?oeJe5~6KUo#{NrGeOvU)v$UkWL?YJdJfi!FSr=y>&cphDL70)bEgj|FK3 z;ePt~`P^`oGI#qq?-H!~PzQ;`+dm<#-`db_wcBWNDkmOc~Xw&WM)JDnPo; z^vR{K&&c-9GK)*Liyp@dVxp`jtGfQrN=KuW;uI|r&0V_H;lSC$O*Ap&5Ksym1}3=# ztN11dT^8_#Eoob{za61NA@@4W;fwcMwF4_1MwvIL8Xv5KR0pG)D*8dt2&2C1$E4wR zwtGj)KZ)mwlB^brqdy;oaYq4DLELUDMfF(%tPRKRZzV%r4>;ChP<8TAjQekzS2Dd? z&gKa?me#H&WtL-+P74SqhLZqQPV>={BCv%86>>nCy%ZJMa-P<_KH(A&6c$ytvdloS zibHs$Ee{1I2JOy!*O?{ERfV zVfEfCfyCNB!8yqB;tkw>k7K@H(z*8|Xm$A;T37yf_riq%PaV^26TGt2{Vu({J#ilf z>x<|owr>0{R!=?H%K%>(CHm4ig039gkYTxAak@hSh*u79YOj0Vz6p|OnGIyf!J9lVdc895R$dkGoe+8P*=*VitxN@&5sHyH7u)| z%uB%{L0JZtYXQ;;MU+9^kdWllsJLq?lJEszZC zt^XJvq1!L(Nz)~{kZv;EAH~pf-{TEk5gigtTpM8d{%0(_M~Jwc`1{c5nS>5OzxD{T z0?=;61%c*X{&^FOI$H{hy>UC)?(ttYG)^$%5EpWDW5Cu^Z^~5`a0Yy{IwYDobpFPL zu>5lId6w2g!@IaU`ph#E#k(ELAqern1Zhb;U|;Y7XZvBU^0MSg%S(bJ^6l7H_{`7wm>Np$l`8FFUA97=-Yv0`Vh;KC z6>Y^TlN7K8P`t`UUun7m+LI!FO|Sjq{~sIG8-G#C{y&PY!W2z*OoRFz@VRoA__5M2oNaU#xL(ra{%~vEQv>(!Tjc*riP~C zci#<3U5-K)v-WK6={?19<)3i)THtlz0Oa&!6I1NsK|zWZ4OPrauCa@)VOhA2+vHl8 zQj6za4*gkp&HMC?7kE|oP9xBZVes2K6oAdyiVt4eVw`^R-m8}}J;8r}4goK9D!j6q3e>0~>RSwn&oETj6qW1@7S*T1L_0aU5AiwZ zc670}Ry!c@f`4!^V7bQ}=`e}8wLTTnnJ$!XlQqi2F3x!~1gJ4I{<9GbF8uoZ*kQ!( zOzso2tLFr}P@kAg^w}-*nm|Zhx#*qJo}@SOy#GlKH3x-~tY~P2^J!j`jiTgIme=$) z4cqh==>^-Al;T`|S)K7dx^+j`t*&`j`E_hVQa~oozHv)Tyz@l7$(l`*6$lPCUG>e3 zkex0Se}S0X5=$H)9W+cos@xfo09jdis5J$K`UX4)I$$?#G!X;LD-$)&JD8%!K8r-f zWrY(1AG31aw5(5U6R*CBi>}`rZ+gV`-}RJ%BhMg?a!Y@T!2jI`hutG>3W{ex zCf@%-^GbD8W1-ubX~&WpeKCkJ4}|#zt2y`pT!N(~>Lf|-CM~oN^OrWP4Y0Wy?(fH6 z$?0>ZWz3m#mac&=)Mnt%Oafl(Z<`#zCer&Kx9X;)l`OuwqhBUdEBZX1t3JQB6Ct6W zSJl`1wR2O#NVq`yWm%WOzKi6SBFmbjT>nQ2+@&g00mCzSreZ1zE7iC+J*6upo!!_) zs+)Dnz|3=e8LjP$Y~sN9_A?K!64cgmEEV2dnjjY{MSPKP4<_i-ir?9WoKZI|^ zqVAbVP3ljrzFBl_A#7GFJKttf(8M(B8LVA<@!t~_u^WMosElMc-dwflMDK#41aw{1 zT`~D3`F{D#mX9an6aR>U!V2U*v5LR+f4dBmH);~a`^|ijZFIv$v;_N0El=W?>#Lr^ z$nN+19E;7j+8(*+>REm43azar%=H`MM%wXZrTF!||$wbU4x}U9St9{JeVFThM_>pSDS6QI6Sh(YQJwovD)-YNwYct&$orvSkkULnM&N zj!$G<=B0;m?IEqBFkv}Ek^F5x-|BbzmEzwszR(DaO&2_!CoJ!G@#5C=JihfuT^Ign z?<8+}W6w3;XdvLapXam3$mcvNTTR2K=+y?Nb}8YO#-oo8*M-#Ng$xnG6Q9OzL=i?s z+7ftf>)57QZIi{+f_K#VEYFa@!Fm7Kh6(*g!06Rxm@?4PxN%eE$7zaj)4j%{)_j2l zq=rzQ-kpm(QzPk;!EP$!B_iHS0V8wSzdXXE0IP!MXO7kgJfe*2zzqgyY6L-mcYGK3 zn0v-koF_UmoWgeFxup?v}xUdPjE;4plAg!=O-70Xscl0}NY)y{C>6V+AGV&lC+PdKqOS|OD{|$)d_aO%OtZ^RQ zPKyU5#g}qfDHN_=UTiQX=CzeH z!P6K-El16{;^3+TgtVEcag79i)a6f)HBxUa?gzd{aP#(EBedz@L4bxk%dj~UchGK~ zgigFlhef|@zQl#Zld;ti6t|-2Rx573TeSRt8qM1yTerGu=2(}}%K_X| zFF-uMI`YY*rc8$P`;(uAq_5er>t|)%deVRSHv2D)?NQ7S>RzA=vKVRtfeE#B$CJC; z6F}J)Tr$F=CZ~9 zW9xC`^M0~i-m5QaRETRGd3%PQn{Sz@pDx*KWS))Uu&%j%+hTBOoRXO&w-n8Dr^R}W zpT`Vd&ssNLbJsZCLB!`I&wIoM3Cb1XoJ;fI8lPtO*=mIsm{4sfx@6_VpHtU$`v~pY zd(DjN>%EA&b;$81X=B(RbEI6! zLHH!+eroeas?G+N-nK%|9e@ovh-rs6KKmGHHYWiN^X5#{w};ywEx*EISL9o(l2L~QtX0+N0$eS{4BBxIh*klnfgwrBlcnuAfT_m z@`U$+;_Htuwq8%StxPbc4NEsLsgf&-4Y&+A^eloT=Yt?4b0|9b`b{o_rQuzM=unpZ zleBT$&GfMV2R(b z0sLjh=d380)QjtC=Z-Z-VZh?B{W5sT!Ef985+)}st>U;9t#%Jaog(JB~!WDqdWZNl9Z#B}yjZ`aG!laK4X#3Bil*X^kn(%bE ziA?(JvdAAqeX8cS>Y(;l?J9FO6_ZjUrlfRn5d<{0z!2L@Xnv`Xt|6KirlHir;-|Pe zpED{|==f|zwNt!FlB)YLh7olMIiuGdIGfuJIoCXGN!haR&U(>WbRz>lT)ku{Q;6Cu zBE+<%_g6_bWe?5pL~Yhw4Rk5>L95mxd8nySkI+Bqh^e4a<8*iQyv$3Di&PH6w*=Z! zJ%N*roJrejiMhkC_GPZaORR?@S+ZRrh8yqeA7|yl?Gx$? z%KW%~FUEU!CXsu&zmdqL0I-kQTSl2!<16PA3L(LW6$n;&%&YF{*dJs~R7Fz|@*jGy zVE$6Z$$y$_uGn;ukx!^{8!(mu`&Wcu6Mi;lA1(1kg^OaBx)_%=4sO1x>SrOhvmQ** zZ??diMTm71Vtma<23L1akJO)2azkS%X!GRgX}}1gc96uwS(RLy^0d2Cl;ic`W?P3V z8E#l;P5WRh?f1g3y@De#(yzfkA^3qZ)g#BI))`*J^2^}6k=mr0`;cDVUJrKcnI7yw zIF@JklP|k^g@y+vdnR7-_+76&1+O{ivioi6%rbuJh^x%`?wG+NEP^D(-xEFx9)aFau=CA56(wZbl~`#i_@>^YKfTSu-=q3yT4 zCDoVZV9MM7w{KNnOD%_=FZpzxwbhSlo)xlJMEO@!<;SPDo)ccWcf_nNZ*#xV^?>+= zs-e)>>=#4dbBb1*^t+!uO@|~2=4vGyc4xBxC8Mg|5HD6r zSJN$EA!)v``;UuzRV{7kV#^C*0>)-m7g5n(^qjZG8}(jb zDe%{?{^n#Sx<6IDjH^?mLuP}sjb^wt=#2csM@yn$$UYGKm*&OxFAI&3U4|M3Ns6J1 zyB@X-n(!jj>$gJ-HQgUZ`s4K!-@97lWX_%gg98t?_fKi*Wyp}V5krFYUAjg38~CBR z&r`y3J@v+P(ZyF2gwQUpgiGEEB6aQ1u=gl5{`4;m52U5v^Ciz#Z+w; z!JRz}L;`&Sf+e*BiY;N1L5p}w0hi^lTE_!LadN;Ra?BMfya_G~u#$K({yeia$VaEz z%7aJ0q;jFNSlc?7KbcRIf*tYW^0pVgVmq3SZ?=PgdIc$$%8T;U)WKefd0)UD7z7R5 z_kCX`E+eKCs^(bSy=M5ZCmH+iq#A!*3||lq`f*X~erPZLN}!y_JDP58d00*3ku&5x zzA*dz(4b53ju~Id2?C(_tGj8=}iOj^&plu*KwWBB34AB%w7Ykb{y=sxD{ z^Feq@l)9A`|JyG;;gP_o2AesJAKYQ=9#gS0 zhr(3&HQZ_Pi>VGCk{{i>qM#()M-V#a&@v|pIil#wHOCp$Uk$C zvlA7>y~N(lo41`5ex(qNE!w0Sok*LCIWr{=b$#&$B2|ECa*qd(4OqAW1_IA7>0equ zkl~=UWTJcK&y13kOIy&>k86=D<&bP4Jjh@;FkeOTY7%D8wi1JCs0;j~{MUTsXiZib zO;ZQEGFlMJ;F^)t4QofW-N6CY?k;6ZM-@ZiUJQ4j-5ODZ=;bl09ovU?j*Ijo0a!-y zyUkuGM?ij?6!nc+`hE~Vhjz*c1WuQs^~@H}CMXDo-1fOE1QK{9b=oi#eV-70;}S$I zXjocRP6k8+s09Nygx1Xa@N84?VAo)K-?XAPV8E4F^%W8&{x(+uc z=@AUYOMdWMBs9BGRFaKqt{o;LQzlr;aCej1x3_YA(&5{#eiL8X(KH-l;iG`d=PQMe zuA~%9A6cv62d#%jD$l-z!{1$SXGoQme68Tp8;;656!Wza8$X=P+&U!9#MK-fbjlPe z;b5c=SYu5`_Sue7SIKg%a!t*t(^z5~vMo}0^90Pqf zMEf>))lH5Vhi=D;!w&s|Z)FnY{hrxFQK9m1F07 zYr2i_BJyf*vaDe2^fA4w z9Es*qI_R9VX|vrqFJ%<15s3&Ra?2O)lvk*P#^3d7Ozk35*81}Cc8cbODt%+e($Ox5_yIxFz#z<}XxBW|Ion*K7GvkqX6Wh+s3`oRuYpngJ#jR;vAY|}jYtdH zcapsiSzN?F@$>M_uK8XV?C8hiQdOGrfRTidX0dA`e6=F3r7E$6K9aRWS zU{*ahgZ_qBAV%boIAY{ebWffk4X2K*3?;pF022y%hiePNMyf1 zp#ehOf0fFLee~#^^pFI|#rXwX_iI_=Mkb$Fyq1^~HHT#NKUMXus`b`V=nLxoe5pHSp{9&O ze`)9yHKnO-=Dn1>3r9zYT4~+fo^T4l(k7d@GZ4e-0|-_qd+^946yjdjaI>U(a=nhQ zG1<-Z&cp7(&cdMe2&u*iO0TbNIY@d$$#wtn9hg(2cDi$6`1yUyy~eFXlqeD(RAcjX z*V0zfcEwDverUc5_{KNTw@lQwXspl6SVqaJM2I^ZX(kakvO>sl(xdE>3KAkMns&>% z75+ywybzTshLp*&>%;<1T{YV|G3h%3pt9!M>D7S=WWup5BQ>26=7KBJl-Yt~J7az( z0={?g519&qk6;)yneqOzPxPHRz^VA@%r)ql{F*^8;KBmxd%bw-;=FcXj)`FAmne-eT}T>tQ<- zCJSuuU1TP&`B9(ld*#>%O53>JZQSU@=K1dLd!#;utp5`!v;nwwAV3CaTOXOn@4+Gg z8}vfYd&;git@)%^IXggZfnWQ1ky6vIeZMvDG9NQ{%GuPkXHgkz`0qg#m*t2jtDN?7 zSen>>H4idybZn~44F(K51dHbBBILb{UO|;f4S%*e((n4&3_;r%_h`Q&*RB0miXU1g zDlB=@Yj;Ob@Fiu(z!CqpKMQ)s3Ja<#BW=G_E58+;7m#Y(C=&zNUwl#&P%#-=D&#4P^nu2)tV}{ktP_=_q&|6Z}U`KgvCZX-3*1?*_+O;)u1pJ|$!bAnYPQ&Pk z_G9$*g~-PnDB2+>vre+#eX7%yD&3-eX8itPq^wIlpeG=;SY0Yr6BK1)Hs9Fn(!)XT z2FRT?ctC%<^rzUM?9#ga|1YkP$|eS{n2)Y;Me@dwnv?7q<7EJ7>Lrwd9V)76PA1Q5 zJupJ{-$IZkaNJPZt==+69dj%-L{o>bvSu0_pvvpj-*TxZn~(eT>`T7<5dqTQxjmEy`)eWd4*x7X~lrGHp%<>!f^- zXlO9>mAP5%tLn#V7^%uesHyvLj!3>_A*J(e4W7%UMDy>UE{<;1@YRrZx19)%=0*SMxBw>q|M1d6bI8a2InH^+nd{P<>J|2N<`&#+5I7h4gv{bal4Y?kzXR!7%kBl> zBV~iH@2Wk4S|2g*mhs`yr|p!}Z}+F(*CN?lkdV3FHpqh(-LHciF$|)uiu_#ERFee_ zf&cG{V*Ejj+DEUwMo}jQLs3x;yIqUP3d?ahW?i56WMyT4Rs=TVh8AD>6lv5FbQO}K zQ|THE023!ZIphAUs}eKxIvIkEkLjFfcV`D@*wUJHGPSV?Rh7nP0@e}S=oXgBDkD6C zt+lb6C25l4-;lETXOSRcJ>JB^sH|VIF60Byt8Zywo7}u>fd?J#+G7)=??hTtG@LjW zPBR%UWul@F9p)m{imcyI-_TtX}N8W^J)NHMq>kh_ro?ab5Y*hdghM z(vOt_f>ic534r}3a(f$IX0Hk5F^}+iH1;5?fO$o3O}RZKOTgvrbXBwSkD^X?i_{Du zCNS;3@E@FH8o_iZP7gbxZ>vv?Mt=uhmi)=v{H=si~s0} zz5WUT4}D>ua^8IEjLNM;+UzxkncbG}y;dPRG5>kT=b(b^=Fb4@$#<>->f zoX`i#SysLCE}ujX+A3pCoUDec8m4b_?@}{;VEFmN%ybMx**|Wfh#3tEgn0#$y%X*j z$BvcT9W_XD3vG}uX8+qo-N>?b?h<A!Lq_qmTjok%G! z0P-@K|I)-qUNOw0cbAhDZ{wYxCs=rR)U0dVecvd5BO#*t*8eIso*Fga^zQO%Ib?`@eMu0ih+T1@E9LgmX~1hO9{ z=!%|#NK`P@wL&lC(aa8iW2*jOE)Q0$W)ukSC?e}V6mSi^^~*zrSg+EYJ$2O95P$X# zNfvXe(NGejt4NHs?GXd0sf4$sAonGv*>ZVpyC;Zx2-P2(7dE%>)~og^cH{C0F4f~P zy}?59>8T~*?UUN(7KeFQ&?u$R-m}E+y{SIH%Uph0I$)}TR_<21+WSY7tG zHJH1s{b1KagJ!Kh!liSKOz{R7#xhW##fOj7A+}PZ4|YuLY1dg+?~3w!;otF8r-46y zFu(B*4F{@>Sh?Z?=#L>7Vs=!O#YJ?5M?^yu@>9H@qOBuLIQ#pzzcf`N&AzR7He4jK zpBdBnE^Jv6clfxXd`5@5Ow(7<1f<8=R@?lySYFX9ldvX*qZ>NY9vQ0uA=)TGlAVm3 zm1_s8)#qntuH!vL57Q1KR}op5qcPeK#yMjBVgs0`_Bl-wEn%c)k=9vT5}m0y;7T$w zRzX?L@C5xy&T)WrT)uvMbo&(2nkrjV;ZZs#Hmledg zkZ-o-51j2yHASU4OF#Dk{rX^l61G>er<-U|t5 zNN!Fn;z<`X#bvniS$Th-cfsYa8H&uiby@=A_tArIL~1t2^>sVNnv*+}%2_sl9z9Su zVN6PEm>qIOl3Vx(@-)obi{iu4&cZ&<>&O|-fl_5om5W*P1Ztr>x}HQ$=&94G(Qp(8 zRou29G;OPV_Dxsm3t@qXi{nDfO|GUQReEP5ts$_$YVYjbUaq46BCV)7(;sJ zyU}I(TzamdeiEjUb*;e#EA{fWc41%p%)ng@Wu)V7_BL>$(xA=<%RcvIW%AdX=Uums zsxm(7oAw0Ulu$4gWcTtK`A6~0dGE~;hb|Ra;e#z_2wL`wSF25Iv>k1tnqN36W9G%? z_qRG0(9QHj2YKmm>#_>w<-ar@mC2P@`0Te=9Zk*T)7nn*3?1b8HmD1P3WWKGoPV>x zl@2YEiJYDhg(BEw_qM*y_N-5n<7AezFq3OmSJ$&Q9yi@My3Q6?#@EC`dvBg%JEYray>l6 zmfaHBNQ{{Bc$ICIzssuRx-XKeIM`aV{vJl;hy@iKOTvlR>Nw9DIy zJgG5kc8%prN;Wp;*K}(iqtR21h7*FfFg@vF|0Q)i0|XEif5kN^b^!Jf_*!%a<*EX) z`s2JeJvi8-hF9wcEKO z!xHFJs*tLykm=0{- z@W5RK?{7Wcx;^n#a_l=#9_0K+eqX0*E!v@H{r2}1wiROT4seZ9Du1}hHM+v5z*j>tJ#?fg2^f@)u26av>a)nHYW8)<**2d3G zj|0a;&st&7WB6nfE>gF_31^J<8J@Ps$5|Ud@zsrp2~{YE*umPecXZ8;6QIaMDoWXQ z_LAv{eR6VkFsiaA6nSruR-^-i#+m5+68NuhLN`qP5#8*=LC*FGb9%d#QWO2p5AkT) zjx`gU`mhtD7T0G4rfBiy2RnEX*{^kJEzw2V@`-2REB-enJBWdZ1xjt|(e;lp92&Yv zxbo1sQ&#f?$&ul}@j57j-fUW`d=F+9G?D6U4^uHbn;Y}<70Q3=wUj>vcl}Xdf}A`g zq3m7mcU?_rN%btAs)OV{ff(CH6$hUPX-{4bwuPUR<^4Y3R#DZ#slhXxJ;d()B$=UP z>?uXo60Q_rN4#PWYg`I_!)~x{!}|We5EgkX>5;_R8LvAZ8etA$MJ`^zs$~5 z>jUKa?#<}WqtmZREwjyQNHr&9eEv;eyKW0#e^L-!S!@{^d=H#^_ti;*2wq*~qEARB ztYIo>S6Oa(i3%P}4U~@Y!Y;@tOh8qdh&PBwD|Si`+ZJy8JF1X1!*gq;q9wsO^l(!JthqhugS7<_Qw zz1sF!pGE&M_LhpBkY2%7LB&@s#q#-G@g?~CwAGZFjUlDqFSRTX^*-nA=Z;?%?GMdT zXp3Pw8CJWU-LOy=E^G;hR5#YotcQiT6qUg1}u}t6HRfmD3bvIU>;Ua2?q@3qY$MqP=1D z+rMDEv%RymUC`wGr!i$x`lTM&9tmcH&5_p*QYWP!K_a6G=qPT`!cVw{>Wxf}<)*b0 z5C%(t(LvkM)2VfTiXsd}{5KQYLI2G>==e?0QHiINo_%<>_F%E+qHv!y|MDQH^r?wg zsKV3MsHQnTal7^F?FJeGo~s?~zgg40d-*RN7j6zvQ|*pxh{!(Rf{bFS(Sb*L`5s=g zJvp$}3D;F&=bo2$#P{fvsS2>lG;n@+wuV;##MW71FYl|hoBq3Ad?Lb8PxxD2`%D>| z*gf-`DG19_HOoOFTCzU0Kw}kUYIZr+V88PX+vO16&McdLsY>QC)enQkg%8ga@82M< zj_|2|T~HWvYiDnC7a&6mvPDB|Bm`TfL!Ielf^f`I={!~+93__yWh+`cix`==KhFs0 zL%2jR7y6|NX8**C&CDl;ZEsmbCTlj?76wM@>o}@}NH$E%?wXP}z+(C55u2x^L=KJUl zSUnXgxz3;e${?sJ8NnU==u3(@t%YS#?YB*x1BnqchLf~8-|4&6tCa+dt%fKIo8#;d zu-Tl+m`w<1vsq+pe`-;jmz@I{K3)wA2v4O>SZ4>wMsn0?gpAn5_hun6vX}TDUfz$xi;H%MkXudP#F`hdn&S*3pEc_{=ga6gk4{YWw|ZPfzld*P8LNX@Jqc zWA{DA_@8Q39mzAct^EM~DwEG36RhT&yukF2)`#voP7?nsvrGWauuXQ{D1DR7NUNQy z0UtPOjuatjiaw;K04#N84{AIuTQ)(NEbDf z3?FW9_5)y(gXtezXRlHXZ)m$=T2ja?3HNt6WaV#}&augDOm9#N8s0m~wFCG~a7O9l z4)CD0ZOr0XW3B3fmrcr7t`za?)!X@O zh^j=W1)5o80#tPz!S>sSk)TlZ6^4-Yi4DOiRn-em918LAhB$y^AKg{B- z%8}a(xxtq`^E@TOO6`IDS!#Hau(zkT9J67!iC)M{W}Q;wp+^<3{=0dt8f^Z+v@7gX zir#F>ST9oXrm|Y>u&6!pg>W`4w4vk5?_rO;$^G9fu}{eGl=;f-`dk-U8Slkh+_wG{ zdg3k;gI`@c*vFYI##WYy=H~vGGM2Ay77xmXk|5hvcmuc0qGhsK{5@wdTxsWV?I*W# zV4`ke<99nw;b)5$?^~7jAE1O$e%M^$YyaNd7%JeNXBJD-(Drl3Yv*~@{UA!`hmxu; z)~r7{tUVFD9m1h4;ST)g<4lVlX?Yo-u?F_$u+jNpjModT-{Gd6d~MBc_;RDW9h}zo zU1k4y_9#u=1Rd1m0=(f@yGyj2t!QCz+8t7wbpV?R#y(6rcacT~bKiQA_PZli@ztCb z*@s=8t@8Va_F`aL!(C!KDC2Ybp_C?$(70dO3Rba6&u*-ug_zYSAC7@nfe2dtow10c zP)FHj4(Nud*x=?je2)nkz&HMcv#?RRJx1pE|BE*2dYN%?7`(hXTfuk_J^Hoxr)%b> zEz~?p+mPqblPV`DcdG+?BB*HB=(Wt`eHEd@ZP&ST)o-p=tG?P&zN&2I&nbD8%ixtC z$s|-b?HJR+#%%k9wR_>TU<%K2XVLyw{qG{lcR=eO5JyTe3AByNPG)Bz=eKHnw3hun z=rBMu;p+!3y^@x&zcf$-tFYR8$MrIigBg!XTF;L%HPzaoQZ*KecNNy^D=mP2hR5AC zj4#?V8L83EeObW(Ih|D{>&fOEH=40g>IUi-KO-{(*ymO;GnB5W2sHw zSsCXlHbqONX^d-@;^$xS9j$+}&ZH>25J6(Q>fbSQeLP$eX8JRY$z59X- zaLN)$r*ppzyt;in0Syjks$trB)aomc*D@7$K^3$7ENqwmm&T~$wK00X2#&X(Mf1dV zhPY#8FmZ({)`pnPPtkW#5#_AZ@5_(2i9nb^m^YaN#KbGdUVhAJb}4V9M}es31Osf@nZrbe`yk< zMc`Qd49mJT<>YG$DKPXMK2Cd2Aa5@rb?eiePuZ(^@8u5CbrNpC`i~CC1fHZ|b6Rf# zC}%o71c1QxMI@8Ij$=aG%x^@v3Fk76G<|CLWrn|(55V5mQQVm9bda(e(*hr#$aoUA zl|3%Ib_=kT*?C<0%-MeV*nsx>EQeJQZlDs6Q7mv)PYw|E_@LK#?+aby@ReJX?!B`J7_J%KO8>c?|F5s~{^hFE@yGYD2Bl1q z)>Wf_^y#v{n83$rlm+?p!fVrybibZqNuPp37J7u^w>r8EeS4I8A9R}(UK_#uI-)g6 zSA1_hCx#j6ZqA=S=?V=w54Ie>LYRy^U;gf$_XKW~I$SR-zmPa(wk5)f^a446Q zU^jusvcNH>|Cu|2`4!t~^GIesw z+bXv}aa9rnGLNiPIn=(-;Z#kRq%Ni<#Da)EGdWm_*z41~BBfU%JAuUNv$Mwk|BkD- zU-J0sj0hgZrhHAx$}D&&Km1ULu1ck;*@7A<`#SxN4?oi>J-->wKc?F0hYfLzWh8~I zDsI>>jQOsc1q)z8Ki-W0-eZtRH&tMRUjNlE`@^_H8NwVz+wCYnry1W7yFUQNmKG#K6Q;hA?f z5@7$uoaz+_Cf-i}=@@Dadu(*1JOl%t9j|-zX4X0BLAO@JCXe*Ii%i0@?##x?uRipo zbF5AhVzFA&^fJeGgUi|AXG)$IFGc;Rx~Di9kam=GaCdruxX_2|@|?BFSs)Jx^awi5MlX6CS#prW>wK+&L+c zy(e9HelYK`lR!~qgfc`z`PPPb!^k4YsLs_#-@HiUD9vr0{HkI$>3X?wL^f%SC?1OKDjK z69B5G=yt--kR%`MdDMDZ5H4n*;O#TRoaZSL(^V0*3fBzD9W1tgNJw7xCQxk7t1Ro| z+~xH|?psyD1gD#A<>2fPn6q9hWhQk`_7t4zrDclWCdMyJ;fC^63?4r@GfCZ-$SjD0 zJW#CzlQX)5>zwSHhayn&QWL`o7f2ca)4gb6>U}6w9Bi zzoQOSYv9+h+8MAd_t_qquXpuX7_@V2Fe15uQZ|vE8)_-WXFf{Vb&`+2SM6=ri2iAk z1+7&77OmK;SFvih>890_ST=nbQ1)O!OAa0ol-cjh(BmYdpq^(lrvZV8qBJLGT0lE% z_~)(o)lE6U;VsCA5hoE~v-maKZA%=68h>LfDm0X`I9h4=6Xo_%`NPcrpxsS{VL7xZ znGQQG_V&v@i!Ti$*t_433Yb>v{QGF<++%Af>1T2GYUogzRMDBqHn*lMS+s%FU(xos z5?z)`=G78%QBqBjMNe{)=t@%h?JgfE>}Jxzu|s|AdsS^Nnl+^FUutgz_$9d9E{kZRyDJqq>Y#~)@54F53j_2dNd~Gi{CknSk zCc_!ZWO5Kw)(e9wBPC%K`o+bdppAVtJ&>a4Uap6fa65WW6j4dl3%(OnsKH+eUt1&3 z*_q`i4~u-(2z7}TD%e-Lzw9{b=dzVgqX%OR%d+ulli}RhVK2X}fC4S}T`@$0TIO^6 z1J8K2+B;bc`~Y3!n5^ZMA?!3a?dz@O14tgw2FsInI6Bw}2K<>WfT1o0j<9bIn=3FK z*dy~4MWgs!vMmvy|7CZAKdDDE%8fZmq~pJXvK3r=+BVMo{Ys=7MSeR3TfouxB?nXU z7@{Rkb=laL1?w*`3kS`i>7{HIe*XBms~50%uJ;H1p(C3JZ*+g#D3Pg0T4Pr5cJ(1w zh;fKtaHBUYP6CWhblA#UHoMGny>~X*i(%_`Y=Xt?t?De1Tmb_z{Rnn=nzY}T4?$_%ZC>`VkI?Nc1fLrxv@BVjwQCKf#?`BhQEN3dhy_~y0#K-GLM z4{Vo`oWoeFdAoGF%o?+E(r37o9j1*sO2LCDsDnCC%>JK$_$EvjK=)r1TV(A1n?H*N z3x^tR8P;@^snR4{^?$JO^Vo2X>wSpH)?~D!J^>t5y<&s)I9I}Z=j>1wc07BBVH%L& z+EwYKbl!Q{7JHj4JG1XvT9O%ViKz(lTbr>|q^o8IJ5E(XVcE7(y(%1nfRE=|*+;H9 zelea!iO-ZN><%kRDjY3Tf9(v(^V-g%B^&K_p1dDjpu_pU!qOH zIz&pA(lNjYGZ+4+ zjC3o@YXb#p{;esq`_()ZUD=9*;fm<^pElXlg8p)54XGoZ!CrwJGjJWcTei*T7vswo z0}a{++ZonOf4YmQVNBE0Ltpn3Kew?$*hZkVqK#8|`yhVk#0H^XEoM${U-PuQEgmj8 zXU%MGoX3t|?F$uolWuE3uM***U#ig1ITF~N>$<6;@89k_Uu*%*vupVB`+wPJFx=oQ zEih7v+JL%LT#Vc{3v#IzwGO+Gm2f zVo^vqeu%s8EFPQE%k?AFKCf}6O0>LkN8iyG+U?hV!|o?|)!eDQ7aMFV1B?EAgK#Vy z2w9v7XsMdVP#fHPIiqX_{a4`pLuw2SqQ&GsdU&c~p~5^qG~Z@{p#Tztg17UP+Bdq~l$SrVXWeYdd|XsijUd z;K2ucyvNIkDkH}TS??XuD#lUhrnmOVQMgeU2eacz!%GQi@td0qt7T zhHBQ#mp#N${R3Y$p0z2i#~;*O4?ZcvoBSuBBqLMG>^Kid`4RGx$#O?lXAaTs8?EwySL+bB4%~_dXSTY_Rb) z?}@a(5Nh{Uf7{TO*)_sVaApUuTsoy)1E>@4-)rH@+aTi^G2(F8n>I-b|SAuf+>(U%@PH z2~%+X7rYW`IzFdv3o@;$-Ai|oWjyS+x+{t+)3 z*(KkDwapqJw{YBecU$oM6I^K!-br+ir(K9*v_4xWlaR#mx=x9u_=4U~5Lsy6AuomQ z$lfOK_MI%Q-Yob*;cW^nYs$QzSnv;uMXcXtxSM6wo}r*#rlF^+U&JkZw_jDPPwM|>%z@uXDfN(``skms@(2q%#m74 zsOa}^8X2C{4t+CJv-tU{={MIlwzs!&>Gmww6X@D)rm~M^DGc{l{u{r7;5xv_Rqm{z zx7BO`TzsPgp~cr%2AY(Z7MT_)LpLDkHo}b@Yq_=ah+&1 z+I6ETVXAU}Bzav;pBs%{9hbOpuIIk9EGuilyPZ8X>Rh`6TvF>^o#NUAaF`rG9r+Bkj(7fmH*NZ$;rAMe*wXOZ6 zdfuRxcQ^n^1;vn)?01obQT~r}46sN5SB$1sx*HD~!!eF86L<^2z9I;s2psHi*!v+ z!+0{qsOeTItJ*}dIx1dj_UWfu-P+kepqVcrS?%LfwoXY0@sr`t$8q2tO;3kyd~KoW zI;>8*j+@~B02wZ!Yi^Ar;^t2bYnoO5mo?DxVlqn#*xh++g}#ozOnw`F(VjNew0nz~ z{6FFU0Ev1{jm!z9c!R(?o{!vOGqZQPdSaf z)Vg!3rOlB5Ia09Cv|%|pubDn2_$T(2@U$9rt&fd<9C*)4(`^#c*H&q@E1h#oQ6wcH z)HF-~06N;{=HFx5mRESBi*OCJ;QdRdc(1}fF1{LfjIH%g0N%|kcUrZctnpjVZyS>K zvRUgEb4RA?0#-YuFD;bH#gXl|#rD9kXpTG(1rkF~Wwt+O6$`t7?|>w2pw8ZqgZ+H#z&8qyS}c zfrFk#Ij{7}7&_6!$;vh73YF_SI5)_gQg>FhwA*{NYwFL&)^~-D3Y011aDLTca`?_Z z-h*yXoM#0Y#&S{jtlvD9*5{(=m!)+1r!)PTWM(YbY!XI1mMO>?0P~Q48t7ovY|~9t zj?NQxad3oOM)EdDNf}rvCv1h6hWoAePfS;l#d&WPyleK*yYe0r9p4;q&fZ?d1o4nh z*BsWZp0b)`NiDVIv$V1!I-|UWQ5ZhyRzdr<4vWh1$@Q-<6P3Bjq~i*golB^=I7ddT zoVRv35Ya%o zrQO}VrS_eu+gVQy?WBnv<*msgNgc>LU2^Fw1sg&JUZmGkdvT*`GZ^%1TWKs6^xIc6 z`HO332ioos-^nUsd2MfQS~pnZQp+14lRJ3u={_P}Yis0dbH{UKz2>*0tt3HMW!C`K{cop0O3~O6sx)`ACgd1w!F)4;WU_MRRcsQKj{~he@8|MYoiQjoc3;o_3^;NEU@S zF2gFP0O7gLgIDm}Qb%uXe)AF%X!QMD`8K+2(avVLoXtG8QBOND0WISU;F3l#bJ1yj zB=G&@r%%Xwj40)45k)+;->E}5ppli=Ik$&$Y!0z!eD=;CQcb$+Xe zloFG)C`vMoKW7x;snn}KX*DisIderhK3M3k{Tv?U$T= ztJFRBM#yvLbeMZPzJds=3xMo#_97<%`VNX#c)I#4dkdXMP`MU*Rit*2Ap1;nN)lp-g~X;+4Rs>4Ys6}6m-nAt zc$zpm@rHY(xro~m|^JQIjCZj zuZW>3QJp%&}@c9 z*j1PiNMp5l`gS@OfMV1v4!f-CZDC^#>{g9$8Zf*sakU{T+kjY{$gE`B<*6VN7OqXA z_*YEv0hh#HG1EV?EOcAZYPw(AJV3gLxsH1!M^q8PrA0Zon1a(WiIAQc9lo8Y>$)F> zG|e_0E<0%;ichj?M)yj()nd5~9jx+LX|qbL_9#RJZO;Puo!^XVnxGK_7ij?CSsJSNMtZ-tugAELIOfCwZ7PS`b3C9uc%aKz` zR!Q^1S5kwGM7C+kG|w)$@Ft_B$rSV3$ELw?r%bwO7gl2Dt2M_X++%HlMNds|>^Vp)v~YHqfny;A?cNmnj2iXuxO{bb4ic~X&)oZ3aHAyXPBP}5 z3et6Xl+u3tdNl5$l&re&xz-j@!q>%Ap+U+y|7=CQAn=LlP2u>F(%(I$0jz&g-knG+t5MRNRi@(%MJkkL@9gCo+_QA8FJ!skl*i!Ji#;Uxr^8 zwW#i&#+pZfJa=KHzN@C*L-x%kZ65DYNwm)qqQ)kUA2Q%Q^sXjmg`wZd2P64Y#NHp` zP9v3EGs|&Ue0~D~h^(DCVxAK^a!|qI-AWUq39MBdJyj|gicyb0EjU%DIWBko5x|+o zRg+?{m8Y6vmL9%0*{SbGsO@=rR>I=swSUciv|7OmiZ3C*{t2=*&vc<-R5M0U2dHfj+=Wo#4iBf-E00V zz1B4t?@rpXfqOl&^OGV6g9t!zAEv&cRoAO z^#{7w{6lJ*RrZ6Y&vk8K1Z@@GrQ`*kG7?)d(ngX(XVe~kj&!DTUx){OUUIefx{l7=XLn61?P^%t>=wn)h)b3ccqAI zZ)|6kE|%`hnRTh-j%Bgau#fgLBgF9{0W7e(sZ-sBtHin1PmtkhVX;_DPYmFk9x9A+ z6zbw>;o~?-LO6O}#uJ@MQ^h*-i=32PT9-7Yy0KMqJhw8=YCL9LQxBWt7AloBUkQn! zLRG6qtR*ScuIi}9Y2iJRa8%q})spsS9i@CIvC@7m8?7%*2Sv2gVetj;n;f&paiZAU zwxOg$6wym0(Waud%4Up)LL=C#l|nw}_#g4iYOvpUu6=OmcUCukD!9^oA!nvXBFEwT zNNgS*H+#VvPjhv4KGVGwu41%>!?6R8jI~x8E!L^5{{U`Y=*LzXhJ$C}x4yK#)^wdJ z(e38AYg1z^;KOemcV0wtEvh2Q1cS-mr#np7HS0|~!cCywX_G^u8^^M=@|FjZMzZrf zKwjYpsJyhLVv}sUE5vr#i zSvr*?AAa#}QdXb4`u(GPOMA^DPP*|UL8mv2Zy>wVET=QuNp%g?pZ0)Ow+WjIWtaCd zw&n93qc|$Zc6W|^Vd0Mv_$}qU(@W}FExoKhCz0-Fm96e|f;7A93kx`l7@ozgthH%g zRPy8ni*wCHD7ZyMIHf1M{B`}H zzh_S$U2F5}pKjG5x7BTIEv@DL&$o&n?8EXK({AxE*{r1~BqwNThGsu#`aYrJmGLy+*>UOmq|j;>_g0q{z8sF-1`+4y2u*Y!;Y z!=DFyP|_D%xxdq|^*;}gliEu)r14Ls6Ct;eV=o*+YXtcb*4pYOEAqQ``M*;AjeZSi z+OC!3TNKcB9X8KYx_Iryyc(sGCZ8y|)^x2-@on*E_JbYt7FJnVyuykZP6+*1fxeLy z^6J@r9wW(fDb~rT;^@-C(8}B+Uae|8kfm1@Iw``WRVq~})Tarml5+QBXy4(p>;@MN zhm|}AHixu$$|}7`kd(xsYrD3hw~F%U`m(t;)$3z2n^nLbkH-%$jF}eie9QOVcNa z!)vBPqFUQ)*G*?CrOk}L+Hy*_QX@x;va=1qbNV~upMu^T_pE76;Xrj=K|-~x zT3heZZZ3_z(VS1VV{sXbjYcHf_HZ|X2+eYEd=*V6#u}f3yfZh1buWhh01_N(dNR+a z-965g2D@)<9ruhx2E5GNwc^3S@vBgPSEtJue?vX>Rmfj zwYsxt7729ri6=Uh%U#C{uINLFTV#bK!S!$1TgG}Og{tdXebD8hE?O|Ka2kW8T=1D?}%@- z{{Rhmf5XvS!=q?&g}J}gB@v5wuCL~_y@ldQo@lQU-WMr`5d|3;C*|u)AI31u@UJ1p z#|Ok1EWVf5DZ$gLhs5Avhr?ncUkjM5b#8f0&)L_*RKdAZZpt*JC`+dq#CbMTI8}~6 z15#L5IMc#O;b_Kr)Unzz@=wH%i`H>NtLXP0Akcbqk6I< zYPL78G`7&nVYiS2Y7S%HD_p!mR(!T=g79~Z{5^MNs#!^>$1a0;Z!C`by4}yEnP9d* zXRt9xrNrxM&3n4VuX&~U?sdnsGkVqV_=@x)hN&8l*ix-V6%tZWlA4_0>Ondw&B6PsO}5)j z`#*%dXJxDSW$cVsy0n%TcQzWL>iSyRwAYX=z5bmn7EQQb-OMDlnkcP{DwY>46ftA- z*N!jzN#SpZ8Xl#jX*!38(^!bMwRI$3YE3K4IJ~=-1X8if1;prHXjpvPc9F4ZJVC2? zX43OT@g9@n18JvddVRFIj+0{gozAautE`t%uBWG76=+spvUxgv#kB1m+QNz+J%LD{ z#2*!O?Oy!pmr*^k{{UdywUqZl?+J5vBsXL2X5geoJ8Ko1H{FnKjD+sRe&Lp6l`we9 zn5+(0R}+HFDB_+s4T+~(lrYsRIMaQC6JmQ>RujbmJuDW~Q1+v!mC%LEyaDYGXx@#5(q?Z*^~| zCFF7#BAPqbw)3EZV9@!}g$$(Oz`@`e%+O-fE_K^G&39AKJS#tj?d}L%ft=5>)%(|t;+sADiX^$C(>KqwI?^qrl-qKxS&%&_i*Y?WM&exD?W>_BCW1ZI0 z*|j^8sRS1(aFQf&OiICEE-x9Fu*aPE#(S>?_=jAx)OC#~TGjN~owX~S0%z5HF~+287NEzPxuhwr7H*TeT7edXA@ zXf}u~uG~PW6}koNe`r71tK)vH6b==>KfR!)^7Fq?XC4YV7eR^Hkx&+LT(h>Nx1yR zb(LbW2bN0&70Gdxy4cxg)uhQ-2$HP*!8=~l&aEL^DjD%EMu zjwXVIOg<;%aoNrr6@-*=)RrCNpVlLar&@(-^l;dBRvy-*6==#boT;bE)a58m-Yu?E z;`=RM<4455iTZw#;*sMmW5QnyG@IQ{?XEl({{RVJo8Z3$>M_}BP})ah40l?tj?!CA zr|Q?1S2r4h?Yl!gwU(JK%Qm({`ETRD6<*kUVA6b1@b}}& zc)rF-Mz!HjgdPR(RmXxnO>f}aQ*Q6!+tO_9Y;@b$bf&z#)@}67BIe%eQFSAw$h(op z+rJimF?j1zvu_k>pAozz;Vo)CKTYvRi*y}B!{=Jn^{pQI+gp2I34dc+Y4d5?MT8G6 zywXW`9ju>in#%6lC9$`QKc4ud{;_8mjtr%c)rSsY>*d(0Sem#AW*BHug;`-|io@b? z?A zVyZ#XoD>yGbrdV5~=@q>6K=i$eK?X&}>TKG%DzYlzQ4yQMQt$Yda z&i?>dyuQ?YU8dba^J#jwj%3zvWzin)@;k5Xtq#sRIj2XLaOFNQco)ReY9F)Q`d*Qu zc)!M<4E$Z;&jjl~7PWueU+Uf#))!pXbgL!R<1J}@;mt1VQPpo_)~ut8?b<1{v%a`_ zPnO(Ihkhvj$)6rHuZF%N_@AkG-{J3wB=9|so1>R;O~e&8c!~*ru5%^b!WUtz>Chb?!uriqd3V?ly4PLMO2e&2_+cF`X}R0fOPFY#6BIg z@sE$JF8(3-Pe+!*(Jbt&Ba2G1)UDyw?0h?KdvNhw*uRHvuG_>Gw=vwgVR0p-o2}j) ze7XBw{0{hC@gC^-bHP6rJW&^m^H2nx z1i}8qEN!NWYpZ)^o6CMS{?Iz-hyEhi{Ac*V@YlpzoEna*d>^P-U8+T(cw&7zdwnNB z(0o0ur~FF%b!Xx&KEiJhT5CFOwx=wbJ)+%QOKy%x=R9ZoM{EB875q`~^7r9(iL7Z_ zXMy}}4u=PbH7z>cD`xR`hxFYq#U35hyhgXyfzN_vxr<1SXvFI*_SR2vVy_<1{?7<- zKZtoYJBG7Lc+6EQSS$`MrYA9kaW1_>e}~(JTc*q3ixSsOHEJ9@c#gZJXsa4m*YJq($4A@mr>Sq=&kh&-FgX> zyjS+`b|PpXiyVjTBjJyQci#zoE#W&|PQ%5QJ}=UIU7$m$>6&DT9QXbfywRf3wdmed ziL}i>S#{RW*);f~WVzBI)EumL_e#GoLnn)V8vI|^q4-tepAkvmKNI+d9~9Ym;{O0m z8gGXDU*S&>U%j5SsjccmJ*}>f7PR*kFx^ZOX_bxZM=HXP`VZpYg5L(G)pYy6in^O> z*1jX~Z^Pdf_$$MjE6<``cmq}c0EB{l2UoPVx6$qHbj?q~TAFDt{wMoXGEEh*hUzAd zOVxz0`aWZT!tjQ3ljA7jvl!*IDoZ}fX=NBnwX;5Fg2GX!fv-ZI8wna!XyWU<%9I`^ zgl4|83`2Ojk)bUy_43T;F2-SJEGsZF&6-K2+?Pykv>eKdBs3}l`w4|!? zt?c9RUBB!t@Mq%hz#k4v;db$lhI~oj4I{(ttwnyPRnctqO+Qq=y7--{wTu?f&3!G# zmu$Mj>GR4i^!q5%3wN3nRbR?K+SB%A)IVjf;NXjw9AIkB9f(G`O?zDtK$gzY%;#@jFT$5!SCiwR9Uz zKHtUmns%9IVd5<{t#p46-fDLDR#w*b+T1W|FnD6_7fB+HIf?L_zk+@R{i8KYPmd!) zv++ldd|Rh$8brSeyhW;%wa`2%dEhS*=sJgrtmD3h-qCG*J*~;%{{Rtbw~)=K+}lY6 zkw-8#a791f_;Hctov7LYIEMlYVXwt^jr5Q&9O0^8m zPahifFr2!|QImq7<31qpMoCWzLlKkvDw&gwDA$ZDI-wjKykX&y6ww27qV7v|Gb(xjc#2&~wo(J$HBMvf^s z;8*p&VUsN4tZ}plI_xD!XZTPpI2GZ_kd2M{l+fTK{J6ob$#U+6eI`R)Ku1j^Rc$Z6U8vZtWPZdf3 z00~_B{E>-g)b%@Ic@Z|!&%RAM*GQ4A+?6NoF&34J6k76)Q~O?T4ftQhx+MB+`d5ei zJw1)wvCVxyh+w#6T|#R+jSo}{{h;<1*Gp+-s-?Enmhvd0n8`e9{6?AMTP=O<@3jqP zDZEAE&17kpsG3q(H;3J%jKQh1OB8Tj$#Q0fD?ucSaTvB_k$-rV`92qhadj13YO5?v z=*FfBq+J-VwjoHH|Ln3y%U$14k&Rd(cN`_~KrAgqljv`d(${e*EQ(Ul9nxjgTqZv7_Wj*e->bzs& zOKn46wbN8heSHYiuJp^hYe!4HPCYu)Ow(*FBwL@|=^A>@v%@u*L<4CtGqR|!lYCk5 zL&ciTuc0r5G+A{0O7B_J;k~)}?clYR-gyWzAdh5G+p7Nnq)o(Z6c;1`UuXC$;)a>4 zJ;#b*T}xE|0ECNFpI7k%-dQaERlD81`oce*=6!)ITGHBGIfKU;M z7JtKd%5)YQP>mW(4>yYTvP!a{iFH+6G$#&d#-txDJIXO|ijhK+5c+$5T$`WA~k zR~GQz>SiVmEM8c=t35*JY>-~5lry8`{7-f8Kg1S)5H)`f>iV6QhpA{KH0yhdP|0t7 zJ<*a;>U;j^A`sUC34(AOL(`8w1CjFKjj*g3mGREnFk_wo4t5YDKqRXk)cc=~lee}J!2^(3WAj48Z5NpkbY z_itIsJiOeulf0kG_x}J4wXv(8wQHIc^mcl5wzFyaYF;yFvs-yKOKlQJBALXu(k-;H zMhvd9&J|h+%L@8ViKAQ1tHZ4Qp7z&4w!S)rw}&KKZBtN5?W2cH)NR`6i+k8(m9aDt z0`Tl-#^I6M_`>C+zVOG2bU8xFtlH{HtlMjgbv~7OX=5ZRx{Oz_*{o8}ctD=d$!+YG z%t7Smmy5#w7V$2Dsq6X&jgvvwbhfyaVAO+KXgZC;&7bW32T^Ny?(T#|^LJ@>QD8zH z3l6`3hQ?y+;i*)|)SVi2V@i`)d^FUswWWx7c`DBj3391UFP656CmOrKr|{LNWy-UK z8OIS)m0R;F^jfJ6Dos*VB~8zg3inCf-ZopFf$*#1FU0Lr#(E#auL53Qr-h-? zLXm1V`gW5VPjds@z)~i-wc7B*DNrU?8<>$_Mrrzw#BCh5t1aa7Y4Q*3<<@1M%TbEb z^5ol-wOUCKT*UH29I+K$hF0JbYxDmA!hSKo@WIseY4tk@b<2BYn%4VB)Tf&M#is&U zuj8>*+jnV}jyWS^v?wPgyFUl~T)n)v)U;^sq`1@Xucp={lG@hea$dsIEaIaGxSI7SeJEz8YL5}Hy{(WN(Mzh(Dkm+|Yy7XJWkpF`60 z4I=8&{McOTmikdTymMRItS>xGzDsE1zLjNXKmwV!l|hkQuBY)MTGm>79~5|E@5CbX z8{2(h;=a>AeJL;I$#n#8YS2opxsk@kEs{G|l6*b*t#1Uecxy=0=CqC(?&j5Rbs;3L zadPB?G^nWAHmPo@83*@)eACO4eJuP>@tm5i>rI7BZkh_8*7+sSt0@^ zGdAIM44L^x)%kOST+4WaNV?ZP*`#>KPq)<|2I$M;7$>kv5;NyXXLg}(AiA?MtD?su zd2U;v3tiRrx#A6HWv@#3GKlxDbn zPCph&btaYL9|w37#fI9<+gj@On#P+2+(~qeF6kuF?rmfngZ!_36DTAY%M4eumf_<# zxk{9x+G*2`St&HycTmJprO$Vzl=jwUpdR!TChhxV|H z+gG(pRJ~z;IzHHNz7JSt%uoTxST!AiDe{HLpnrd49K2Y*qupXkBZh;kYC(dUdd!*g5Owl*pTWLpvbYcrP9nDuPg+m)3QfY*u-^SB zNu>F$R($-aq@{S>``R^i;?=}grzlmcI`|%YE77XuN~4NVk0fV8jN{F1RFku9Ya27H zvbgw>uOhnU<)$%1NOPbpx ztktzN)5Cr`OG#ssLb2A?NZHZnv$q<8OrkQ&XLO}yht0|}h}}aK1+mRiPY(FX_W5o# z9}n5-l0#;IPc7^=pnDR`z^MaZF{IKtdnWlPN#Ku zr(9mbRmYvAUj$nVw^sR9-U+5j2GJhh;+iS^b#ZMxP-ra%p&P*-p`+a2Pi?8Jk|I22 z*)MM`Ai1|@Vm{AqXPIOYN#){2718x9d}Aiw77A91YO78+j8);?f7Md@O?PP5?`x3>1M=WwR#<6Z4N0_T` zEDdwDZV_0A%w&y+Zg{Uh@$Ik0p9;v2d8OE!Ync{EXRy<*F7AtinC4rU!M9v0?Tm)N zW0k2}Pw}MI!v6l-#-0(H77@jBtjbctSr|y0AcpQZE|Mo@+<_sK5gz3%q%n$L8GLc@ z-L1BrbK;-v9Vbt>Ym+XSscHJdeU|X~%JOODe%1=|Ol*n=F`RNL@Yp;|YbhvY)s$kR zR-JWKIlEf)=M`QzPe){(tz~rDb+bh2u1t1eg-+J3>{Uuhw7Fq5csNE$H5S~qXmysY z@grAFI?r9xyiFmqwRyDtTI)}iNTG`V0QdH`_kMe-EOPEC6FaCGMI3QgWs_R8iKdp< zTWdH3P+iS6owRl{yq4umO*9QFN_UwVWG}H18BZiFdH${OhWY2Sxw*F2=7pt(EBUnO zHQhSLP*`1Ag|Yi3-Gp~)6uW-zNTQW;0)e@76XM;rmv?XVPBG-K-6@Lp8dfEDVddE;Or@Bvsx528TANm09L)Xf&_t}@~)X+xK}RWEkvDK z5}-Gh2}2_Bk}Ipzejr^$WtAt^U963+XSlgpO`L;pc%ElNJ0qTuFi4-idef{vA^1bY zPS!Vex~w{kp(kxKO@XdqwDM+@O(ZsV*3%g6om?{mIy6Dk8;%P17TOPi?i*2k8f_vi za!5hH(tKs8-P-9lG9U)p*u>FA9kk4>yH#fL*`I0JR zW4SKGgm;3}OzcAtR!Jldgk(m?gNZDjGm82vE8h$FC&5~3P9nU#(e8BPrhSS{i4 zPV3*LIC4*IKCwCysO0p#Ak($)X0Jx+^aEnn8)E~^1|$iz zHbr|6gnV74YF4)JN#mQ38Np*4-9rYm;d_F!*m=;k)wP`IrP^LJo>?*}H%#Cu;ZGHK zyiQ|6hqSGP=d<={`wT?6lI3ah!i7jm>Djd=^wGI(t`h|ZR+TI^Dz!ZoUU^ENvW#5X zl_b?qX$L7PNhqi$ zoMx0^E#)XVB$m%xKK}qxv(V0>bm!5o1?=R>0{E9yj%_)lSk_qW!{5Oi$`ycQjhQYH zw&apIt7D^lM3(jCyoLqQe$MOUO{!WwwVXkABHLWp;`Y&4{PxmEE4X45obg!W#yXyb z1F@iHtSo}r!Yp5e$ zYT5^hbZu!ONf%x4B2R61Z!wY9;@ed4Hn)BDEn3=0{KqnBjT43Wq_?(_nk3GiU5)l~ zRH;u92}wdVDp9FYROFmwlxa`cx^1Z0NvXAD)E(9OBaV%E(n?aLZ++1Al;GuNlZ|P` zREE;9XUS9sN8spJH1%RY2pFr-dWh{7J>pT%h{-vG|f)h^oF<8;SfO@kMzZo zJc@6_uO0j{@s+-%;jLrFUKWb-D_fW}+aDPCXT|;q)-GU1GAh_>R?zD@E}yF-<~w%d zcmMK9%F@qV|V%cdcFn?Dpmb>f{qWO>9Tbng&o_J&&nm*SBPua)+B1o}*e zP;2`;vY<3;jY?o}ScqaMgUiHWt3lJL2vVI{Cl=f-8j!Y+l2E5o66Mj(N@>~J@0*vm z2a8yRRx?xfe9@@Xqj|1f66C&;yIVahyA>|A$^1O`uj3ztzYTm(aenJOekq4W`!(gw zyy&R-wwWQdd0{1FB~d3SlomHeD>hwT%J$az5IKq~ zG3B-VR)Hay*(8V;8C@dQ@-f5qeBm%p|$snVyK$4p!FZ{4deh%6WE z7XYHlS*EpCW9CNf6C{Vv=fp~*SgaOdN-)+H=qy$ukGaUX;YJE+M%UIVHj=V&PRCQF z2_-BwJS3%6I%<^F8a3t2?(ZqOeDiKA_ik;p`L*Re4*vi}(rs+);E4Dt;tvp|+gM!1 z;k%PPjoq<^QEjeTptXAqMnSd}ZC)thxIj$K(w+6@GkibPH3^Y*&xT(Nyi0wlLa(Mr zre5558^keg6U%y*I#ibv+3JB>B@20JG|C$YKJ|11z*l;{r=r|=TjNHB;$3&cVp})V z(_U+>O8)>)4+0D{qxn(+KS_{pZ+J-X_S_BM0A ztqhL-ZJal^b1_IX{c$Xl>=)L{8cI?0#gIh6JiA$|nw46VJ))yt4sz$_jwX&b4~e_x zRQWk!87S0NO*eL|pDHw~6;actUKMFlrOV47VTG+8e|Jf{)|6)%LuDv9-9LXv8s83M z@Sddi-V?X+4~VTLx0Y7Z{1M`PS4?m0jcrlJ-wbMcm9@s2<=!!CeWuR}#XO3I$Z)2) z?-P77J`~ih4~aZKd@OYX1uLy~)k+by--#l(1L24yXh zxV94fOYjBMH=KqSK=A-;Q*PUl3?laCt0|THWfF(#>UZkUa7v7rK45-OMpe zS=J?Nw$P`Et2xe&F;Z0_6;_36SfrIz$!CYFPYV{DRAtT0N@~*PsZvQciPgYRoT8~z zb@{FB+M^y@sJ7}trD)12rqnr8PE9B)=wVyhx`5tO!~#01s0>cVv8w!4@D1&h`rW>t<4*}a)!eXNTWO!#HY~GR%G2FL zsX+vn7FSS-1;LFj#6SQfh+wGgBJpjDNi_ce6}|*%_Lr#X6h9F@6kprw5ZSNU;Zbp_ zX!f__MuZ)=4RDb}v8x!~$!1xMzSr>YQSeojl(zl~_@wubcOu<+)Gg%`EPpKUI8fe`;?IQ^J}1(&e-(T# z)`jMwd14^DvxQM^W!F{$mmh7inA%?2UEIREU+jitXXsAyYtz0V_#fc!h~}}>FZBNa z75qB9h8W_C_e|35=CHV$?gx4NxT9;~0(po`F-OKQv0!b)zYqQ#d@0rR`&jfpiV}F8 zEMSt`U6V@GXVdkYq4tLRC-&EbrM0)zH0?)Cmv51%M{N>Ju!8qa4%YH20>$$A#|hX1|ZaKNPfo6nWR+CW)!Rsa~blf#L`mf$(jpI#Q$67_5&D`*5qfN8ad{EY3I?AbUuwOmI z8-~l9W9KUFLBy|KVeqd^_%rba*Tot=tIei(*HOQROz}5>JX>$5!+Wg7FYoL;QDFH+L?&B2NijnP*dQyYb=i={@jJT)0d+Rp`rt2IWWsRcPrRCK3> z=cMH)8Ahc#vr&cO-!jS2g$mH4Ub?9{N>Zm9l|7W4d3lr@eCn!-O{;QR+}hgDxR>Bx z!@n5#XzSk${5xUe8~Z6w+B_?3;}_BVPX7R8hD)2p)8L8z({v<)H+yjLI(dyDMk>S` zpA2=s0(g%|)w~#Oyl15AdJ&f6!~O;Mj_~SwjkcX`Bz;!XL)NuBHJaiinK!`;PGd#| z5mazKXV(51>RuPur_+2iz9!IoOQ7FLZ=mW{dSt#L(KS1dwMgw{eXaOj^3zm3oICXt*O`I})y584Oxt_~h zR!P|19V=JS&D`;{mj3{60yWC1mDiRH(W{Nc;^<=Lr$Z4XQW&fhqsrs$D0^8^t46Hk zqNN2&tT~#KakM4bM;n(?tvN=VDY^-LW-_N4#}O&Tq@hwO4lXNJ0wB<+AYpsiXLdNqAz4OY7ZVK-BHD_!SjGnPj%Ok(`DxyB)1w-w%quEX%L>Qsct6 zT0Xg^T+3r|sc9OmjJg%Sh>|OLTIO48Xy(+cZ>PDoSr6{5r@KiIN@EP0m&?TP(Z6Dv-oU#tJd^5u*x}z4=Be zN-i?17{xwnlBU~)6sDsll0KII0EE9r@g>AMo|@NshL3upO-SI{DLkm>h# zP^8Tb-I9cs2@J8rEH4sH7m9hZ zSR_tk*xqWe45R=D&iZeNE~D4xi(K#}$A`5&Zp-YqTEBw4MWW4Z9i*=FaLPHwgx+N>c{mCl-raZ`)6NJdWZysyfv)`^?GAiVgg;OjHu ze+TMX0$q55L#Exu;{85Jn3r%FVV=d~hB66ZJkndn@c?-_#aPqzj}%%*sa<%t;R$=W zG@R;lrfhKw&`-Az%A?OI=_#+7vtRqSv5;tM@U;m zwYJwL)O0;hNS{a4m`0aSU0FiclGs@@2^Kq6u3p@zg`aX-74Ejn_oRuyQ@H&To$Q=rpnJJXFxO}(3H$B$MSRw4=# zrAnN6lzp^qPH?W8PMfLk#YIZWQsrxRZI7BK_#XzHsI)qlg*-#1YP0HhI%bz8?XqdU z9MmV0*?fyxJVB;kNo5`7%kDPuG?tAsF^wVxz&JV=#9c?>pNUgT);u3$X>DTh$@X1- zD~T>3Hcz(GREuA-nhj4*zOiIyw7y4|$$g%9Xz~x}E$*H0v&0rDWq+$h;3bkDKF?CT zDK3HI8*2g-EJo8*p2*2GOp?baywddqx{1lN+O1zWc!xvyb*$@`)>i)jv@gQ_O3|Z= z(&t0*bW%i?`dhNXntXHKPiR_e2OzE8jp4e4D0z}wVDeYDfz7LCZP3iJ{A+`z)k<|J z;-$$XxjnrnPL)*~$5j^PX(eX{(p>d2x_CMh#$jWJlZ4`-Ds`yJQ(8&WYIUJ0N^pvf}T{xr)^4y55@=<=ppH$vlxqdwm(wwR=mMBY7_Mh;9lopS0phUs+SwVJuDdq(l!!YvHN;=Mab_>#~}>P^X?&sX@+oH-@WDii(sgsxFhPl)dj`R&JYz!|%pPzRu_W*<=`? AhX4Qo literal 0 HcwPel00001 diff --git a/data/themes/wallpapers/Mont_Blanc.jpg b/data/themes/wallpapers/Mont_Blanc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..600c2ce333c9b485bbee8d639473e7f54c80b3f5 GIT binary patch literal 296035 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
X>T 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
8DAGtfVqWahB=%9KK)syVcL0;qK}W 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
  • kT-C32G?L0~ykoHJSmE?oXtTHLb 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 literal 0 HcwPel00001 diff --git a/data/themes/wallpapers/Prmao.jpg b/data/themes/wallpapers/Prmao.jpg new file mode 100644 index 0000000000000000000000000000000000000000..815a460bc05c626bca7dd5c8e333b533eab7faaf GIT binary patch literal 331966 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

    _%Zg<9N`O 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�h! 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%0A! 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�+ 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/BD_<^K03P8{57oUn*OJ6CX=a!eNOT)$ZbrULc%_~PI3L}xI>wvp1iea=>8LY zI@6$+Nb#N0T&AkFZEpe-wGkbO+y|*sitZCY5bI)&On1Th>l0>~YY=la&Y zl0208W3N)Sm*FP6_}St;a^^=ib`iWtl7f8KkN`)~K(3lajyY|_Km~>psT%MUeJfc# z5sR``IZqK@F1voHhC>7#3~(6tH45pf=r(S_>7FaTjWnRHa`OY(q9$2c*m0h~)M62n zyq};H<)Kk`XaCjpBM?D|-MPnVu&7?#6l@SV$mYF-?0oS9%nIeQc^DX``TLI}7#QZ2 z?h#07oq@v;$_d~OX${6WI3uSWXxOHQJc2~rIuph_)QuT&kfZ^@C#6;IsVkxX*7XvE zACwP&mzqXx%6Aem*9ZC6v3|$Tw42m!L!X_G%f{Wf;+?cG<350ju2kL7uV-NtG;M|~ zSJOD=kSHWDB~MS6iZ*u})JK57-8uIaF^mPsB#aCL(yw7&>gWI0;a~>jGFD^BrnQOzH3}g(Xf=RJT?I5@TVxxKz{+na>43o z<$VVSRyYT*Cp6+uraAPdQ9grA|Ip`il1h?II2@0Z4Ym1?GDp%}T;PHZPpK5*!AK{L z`KgWXsMJRm%5r}XTH*dK5+~6dDO_BxG1sWz*G3Qc$R)EoYe&VbWpaK|&N($OBRp}Q zPaW$CFL{DjNdM8uToxHUdB~?XE5-&tJlEy%>2vABAcKq^-&%HebRD{mxTKx62JGx2 z0uBJ{(=ZH(o!RL8^mLI zN6G_+1fQid!os>ZM>bpani2Y_;XOcR(m^n zrwP}~QgQX9l05lI?ucDp5wVejE_VhU4I;2AHzyr)??m3Bw_|U@dd!+`p%j*FvPj)! zKu$(SQS>7sz2i>3k5tob?(MK)odk$;*zzlj5gR+3VCMPSI6sV@E|T8zEf&q#6#_{B zJZ>Y8#~;qT(&-$&^OK%;dsSiM%Nw#Wa^|V%fB)6^%~{C>%djAv4%MsS{{R%-cz){M zdpn6DScocdji=JN>Mm&6o@ZO5O5?_NcfKdQ)ND4x_L+R+5`Epru06ApUZtVk4SPtp zoTEM9Eu39u-Bs@b)3hcP)a1 z9ynlsm2Sgu)_ya$v3=3m$|PvrTYyh*eBgdna93=Z^+uABac?v?F&N%b&JF>?FMspv zS!t-r9jS`-ODN$ODc$&IxT;ZXg`xk~!O`5$aW&cn1;|6Nq@*AJlzR}o6LTw}EaZRfY4>qVCAceto>PDLRE ze58;^Pij!^C!pX?-nang@TU))5DrHiP@8NXx*z}1l~k$uvU$fHsdwa%NdR;n)xw>~ zyKg}Q5sU$iy#ePm-Pi-D?SMJWM3slWh><7q3o_?{_W;dCZyBb_U?UTn(w-s0Eq5i+ z=4wMVBj&m^Tnd$(J+LP`v5bnsZtUJYkN?uKU^b`ClYn?MknuBTIXvW7o3kyjzi%yp z&r|8eS%@sQ!*UaVFc0*iRw6RfnUNUwA(B)Igq6;6GgcIA8%|GSny5zGlI6^Y;*WCZp)sa{(PI5c@QX+yk73w>4Tn}PXLyk~|Bc?hIw7CGVI2>mb zwQA$$*2B;$o#8=lWpUGMt=rWmk>e(V=bQjTYc;i%^5h#zQz| z-SpzD!Qy=><5>o!WXQw?V;~&*W3TC2*)s;_wJjUCRz!^?Lg(cHSQ37Mq&EUJj|_J> z;+}yCv1FgipUWVQH*z~v%PJQ6hyd_1d(^n|2em){)#?sXs zToo>T$DkjrMN8PKcD?%(TDdZfy$QgrI}jFSDh@*eF-jT(S9d@E*85LJZMGJ}x0Jui zt^x@=dsiG4(Vb6;pFMuj0i^h?s7DK6n^=4Q0JENdO3twOTKccTU1P@P@>s=$+hVo} zkt|@Sb|mz{u3|7?+k=i8)lKn&tV%^E8=@ru<>5CYcTns z)F+LGF~;-#2&As$%qm5D82Z1+yW#HwYQ801Ep$js^J-T!Ll7!{qygN^w^gsXC`j*$niK5>4*HgcHtKk;A z7L{pf8iokUiU2-~x$;lFdBhfLC`~dHxzx4IZ&I|MQh3IG&lK--mIogyhS*2A&1V#r ztm1>aNcK;$TIrgEQbL|((6)}u-9IusQRi;s^(6gGSU}DksA5MyO2s?9O{cbpEAdOk z@1bdpr&vHIyts+o+?B<;DPNd_-0tGM@8O4l$B8w~MfJd!o*tA(A+}+FXOCvg`i`gZ zu9!PU=Q3(@@;zkRrM;waAW*T6Ffafg%N3b_a3zX;tf5?IEO;Z z83>9PQ)tH^751lnsRI(RkOpuIbo?vO=H<}EM&k|afsWFkk(?1#&BGJ8vhC!I1A+4# zdV|)v?u&{^i`W5yj<}~IV0^@X_31vvCV&6b=NIK4Ezo#DOrG8rM z-H)i{W0m+Oln`6LUX+mSb*Q}o&N=H(U9NBl=97yWWXb{%Pf|OYnj?}kk_ThgG(tDj zmi0gX*VEG7{DxiMFMOV~w^9UF2kVObzTMAyYSJ^Vm(C}5HO=_Wd&qAzD741%(B28I zNjM%*;~$GKr%5LzaZBDtPl#`!ms-{&n)~cfSv9>z$6O!pW;ORZ;rM1avA>DC?q!Foc6C*h1yt` zZpSui-?2ac(D<6$V@`xHE0M|XUd7-zqld#*A{79-2Vw`_W7e{$aMSpbkd>K)yl*!SD`JO!rJC1Jy3yx(!Hsp307w8Q@Z6A4H~1(g*406%Ky^bI6Wc#Q0+ zYYbskPe41>QTR^j>9<3wwY-jf*kDl@EGP&p7~skJF+Ow)=+ zPs4k^Cr^j%xOTQOLPGUUglF3rt({8n-CRqxip>f}Bap95l5_cgI_ZK+<}+`dmWPSf z<504-l(3M4lOf=d!NK}t@~!5!lGYYAdGdZ0Y*PeS2ik1)X>hBkyjNPYhdy8H6c(N<~=#*jMqJ`T6$)CSPwIOl?MO41A-oOiAbnHB{q z0mnn0^b9f_o=2rOstuLFNe7>Py(ruP9rAIK_bCXQegZ7eTiZOSmSu>yF0n73^S`BrtQ zB(9E}4mNX=jJlg!akzj+P6xTH%~!-4MvOM3bbYnz0-hCs8yB!%OccFs;15squzv99CFZ{;FHhG$F)^DmeZp)gZGdB(D`O-y;s6FrX6O}Q_<#J zZ%N~2-T91GmYwk(<+x~!vB?7E~*Fhhvps$NAQskBil$l`XF1B=F%SAoJ_Z zB^&4ye6M27zlo%W%lkFN$jIB2B&-fc<6Aa=5p{UTX!Q%JHk|B{w-3Y`&Bjp^ad*)F z(dDeZD{D|m{*!eL(BlGIbqCmdxUIcE;*-q~SuJ8|i*m@@RQ?A)&b--Fly^X=rt~#* z?-?7p3r_-|a(PKN59L?W#DpV%qk;%KGW>gI6*8=!LgPWAXm8f~+E}k)$dWR+M=DW| zaB53XkU>}OX=A3c81tY6}`q^MbslM3N`4TJn^rM%T5(*FQt zGL8GGF2h;vU-{_MT@5nJ-E8~t!*gD7Irr?6Zi!m`Vp!hA3QU0 zqx@IYMYJx-t1?~N6kqj>zy@6XMKtd=XDUuuSlhYmdL53P@Snjx9JJIGR``glODM}c z^ET!K*b;N>wbjKWX?+!|%ARW+gvi`LJe+z~Z+o7_G@z`yAOF+$O3w z9JH2>M#|>ma8C!ZBE09~r^IE3UxxaIm#ZB=NxQ$A?nQ8a()^MXMseGgKZQ*Qb4ZL# ztdco>55gbto%q(;D6ent{HvR-LhDv{K1#(Wl)@Zy^W@-jz!mH^))u;QtacHkFr;EQ z;$Dge^RB6Ek|LVqi+#knVIl=$LbgFU=~z0vqC1J>jR1I|-@N|-3X}f;)}kuLZJ+~|L2#PUmf{&mwvHq_^~ ziI+_66l5VBjtM``n376jPqegcAqRPke7W|mT!~TYF_f|vRxAbpU??DZxReRaAmb zNF37&b=#hq0MJsw61$jz>^U?H|JL+XM(1HC)QVh&Z{Y;@C;3;Y zvEjW(03H2@zcls$1G&H?^~ZXvh-Bkk@+dffBfym$=PkP%CcNl!hgR^9)M@$T!)Z)M#Xa4}NT+;Vdk#V)fCpjmj zJhpo0CZlal5rm+!Ik>DzI{5C9_-FxuTn1b6=c3R=Cv>#7B8@_xBA2F7^Kd!8vj zAdIZF6mkwSKD4Lg#sd#hDx7bixvtOu(#rz_-f`6w{YE9ddYxupP}@pMC6g2Z3n5SciDg&u#^6hmSQy6hrt~k)^fK@T@wHr(%<8+MUVNKFcQxjM>?^p31nZo*QXoTesA2 zh4ti;29?opi;=)zY*$ruqNI_Gb&_nl>=s31%Bus@Ab#C2#d8XGYNduQYtdT|(geQ~0CcTs3!xN)k ze5^4#W6+(0zvEo^jbap?>L!me@o6^RB)_)^v6${$1UwGC>W1$za~R8H=RE~!7_}8* zDr+`>|JC^q!BG?HUYbkJLG#;Rq#f1Hy2S%(g`1K0~~@e+N!U=O*Uxl zPQ8)Z>qs6sBP5w+e=nYx_N+~2@+~IzEk4rTN6K%OLU`SrV1I>eN;i$s)hRalOWFmY z^H%0&5b=N?_;b|#dsLnwwrj*J85Ter%h(8J^)*!1x|z-2(Erx?_f>0+F6nRWt|Nj- zk&(kEn7|$Y1Gy%p@V2e0SzTXT-(iZ!nbr6p3?83aa*fr|m&bo2w$ZKx`f@ze7PPq_ zlsy#ZKjB@BT0A#i9k{hBWM+|MTnzrdQCQRXiK(PcGf|392Wn37+ejh11hk9%ErO@{ zim`2}M?Rk%aLR^f3x)@V0=pBs(8B66yEMPD?e0ap1@i)&ppf#d-nO+Ze%it9?4*&5 z(}1Bs=)iHGdTCnhQk~LA|JUPuZ}AG#!Vs$50WIsODHd=Jdy`xx-^ZPT1hC{0j;FOISb#=8T=G9k6WA_?h739q zJu^v?t@DBxJ*ajkv{hP81XP*S~xTn|Fk+V_@XNa-$>wIYC+1j)h<)dcKCw#J?3cguEen zs9R)Qov}n$o=;Lg3i;Ci0A0Jkym@b?l3z9VlB{xlK{Qa(H|}0#K6&!Kf<>!KZ#MYm zkz)tuA+yJ9k4p4!gnt&E#%T2IR#I#wkSU3d;}a8r%6ku0>FLs{q&c)XaPo9yrnc&T z|I)D>OpH`^AD`<_i-1A`SEtQfD@9@@?|aCOaxgNuJqhhl%_~NVKqn&vii(cRs!>ev z-`cv!TX@$-yV#;jtvy-aZZcJwNA#}O_Fz}G@E!ECmMd|8`@VSjP-pcu*EuCYF~M$; z>9Mv>2PJC0v8-BXRx(~{lOzzQSAO{H2Xk0j`xw=lgj|{b)APR={?Y4Z?FWY8i3cU8 zkZ(BpbQQzu9~8CyVpjgp)GlRKBjs6Jk=G$d7#{VMVHB;@`MgFhrD)YS^ID@AaT&k^et!U-3z_edhLwf_Kzz8CQgh_}@IHKEL*nZb_LVqi$Y`I82` z_{qazx{^yqahk{MvEc1Rp_56UR?$@l?<0xC;g7cdN9S4Bzp^%!C(oz&&sKmFjgsl; z-^s_lYVivCqgd7Vb}}^&*%wrWhxR{=H0!8H>3L}+XFoxaip$hLX1|GgWOK=94vDJy zN9Fq+`iGEug{>&IDco)nZ`fVn&AI2BjQ!Tyn z>RNLqLkrtt7!ZB%e@bo~&Do2RFI0d3)%oX7@vOJXUdC%%tPqAU*fLnp%uX>yIGpbi@t|NqWnwJcRMFC^9M>!}%dSLXf&q(ni+$t4) z>Ut1!Sjs6Nk2h1O)9+SvQn((1ug1lQ$;i)Ml%j%CE!plf3=xi%xuS7-1HRykBC!L| z8nm?`=+FPw`$tJ|){zy-1P*iUR--w|Ij%~38Pu|8&)>8$G5k~28DuEmXSXQ0;l5r$ zHN#%&_t&~Q>9-Qx3n=Dk(%a2;jU4v_v96BC%wi_}tkUj!pX`~VnH$8q+_?&g6_jWD z+rD-`_~@@&xznvLE^Vj1wSwY%QcN;Rn~Y@o6IspPO!hET*RV;P7st;Pj|pmD5ALRk z?oqW#S)g95LZ}Du-TKythIK1D&yO0sjAb{sI$g{$kVz544akop)8aC%=cYi<7 z|JV9!;D3c-&^!mCYL~M;{;_#$Dy{6iymqZCGQV3(ss^(9SZ6s%@70+5)obip4 zMpuh`W2X2YNjjdi(z2^8aN5MBUuq|*{&`xZG%M_ zRIs;+l)Ru0{{X|=tz8(|a~VzZ&y{R?uYx=wW8iNJSm?Sk0R#n|;tUR_*bMMpftBvk+&8r{((E2HK*zLSicd8BL z<*<&?8$2qhB>rUnm5JgVVi@#W_?B;!qQ;v}4(#^tn(U&vosR;vtgLc2R;;pakuuHm zFE~Pd0?XNL()EAbM0p2XB>#&UopXdJ617s>__SFHcHwOot^4 z1AqYF`_eAQ|Izgs69Dc*!N6?i6a*-tSQC@iBz-H@Xz*6#k;cs$l~4$7gS|r_bYe;p z3F){{mr-mp1QrSj?boF|Mj1d^_MS05?#r45z9InPol+)cE9|I_pPM+~cuo|Ry*37iAl2ER6(ZDf4{k5iKIYJuXN zHbQ@o2P2$gitO!xFs?pafO^+ORFoq9NJ~~q20;LGN~0xka(!!^yCU}05UPxj(b!0amN%(-P~*$vN__o z&x_#y0AtyO8DTKsb>M?qVW001rK)FJrrfIOP{|<(ih$(tfr=v5?Ct?*t`UNA%%=bv znZ?RY`Hejf|JCQlr39GSGGzPH((Wf8EP&u~&3<6%wWB_j&hF#PtAGmv-kGD#4W5}l z%968VQ_$i(ZSl8H@Z7I!rpC9oYt-(-DfB+I!`=SSek7W0_U6(g&)itE$JV{(cxwojfI5tNQmXm5E~n3@Pc)6*O54Fe*~!`2?ES|JTsd*qBckKBks<@T4{e z9dq8lEl$f*=w`0UH%>aPLXq2w=R8rO>6+x0(Cd&zJa+B&nA&57LcRI+HFTR(_es5$ zrWT3fB=L>jy)Kuy*xR46!6Og#tO49W>^a3Z!EwA6w=qrSeWE!wxrpvXz~Mpffr{*$ zITWEUBMYfGv|gG`>^(EyzHs=e#r`4qjf8C$ZzTC!t~1uX4jK2cP5BsRpTTGU(D;cX zc44z2iTcy!w`*2alrYHLIH2 zeY@AT{3W*Xye;;HQmb`wB+35fcCQ~r70rs&cxc|Hr=I+2(ptmDw{xf>JGB!j9;9>6 z)K?^O6cPvn1M6DSlW;??9$8rb(fH3!yZaT&ILTgwbja^s-{CKc`Yx}hz%@I_?5>dl z$>x#+5ynBqabjTQW{*0BUt>OJvB3Ob@r9p?{7Y>5ITG92K+vq%E4_;nPx?uWIM)LmNw3^#Baa**F;l zpXe&+PTC%mjpNL8HW7$Y7|S6+^E9OM_%HdzMXEKu-L=yh!iYxWo(cZ|WEybaQhp_| z|I+ZU5Ga9+wr;v?vi|9Ar{&2V3i{(G6}4gDT_Z)Zx4W>DQ@^>mjUHEV@ST#5XT1Kw-7|4WXZuJsrJbJ zRg#A*xSYAJnP*wFO>0lQn$OB`=w|Xr<$xo0JqXQsrmv}AcyCgc!cxN3+|6q-;3z#- zx?qwbFz5G5cmDtr^}CCIA+8D_Jy(KT``PJTpTc7`)rHo(;t9;lXodF{$;co5ezi5{ z%Lie`l7_9H|I_)0#k%aiDA(@qZmu8ZBq&}-9R@12QEiO_l5vcla1YYC+Gozym78y= zA^BS>rGW=%Z}aU^XkIb9&~DmmX&N#kc>Y)5s{#s;dV`v%u4So=W2ZDsxb+K|XAcbS ztQeJ6=K`(6;%obLCOgJQR_ZcyTDN6mM@>Ch()bU?I=%L(X03NH3wLe~CMl3)0OWVz z^sj!9gpq+KJu*jH=dQi$qteRa2$at|M9fp!9t* zXO7m+Y5xF(Nb+q5=m7q;%}$>>vFGD4k)vdmq*_<)3#MK;Tl*6UC+{S@?BQxQbTRWAn{8e7|USefNC1KykwrJ|JCrH+BP8K=R#CqqXz;O4)01PK-H|f5+&TO`Yu-KqF@Fx~j6;TdhjhNBDvrYCFJBt?MfDbiKQ&Sx2fx~w^)>Sn| z^p%=NhW^!8-hYlX%T(G0uALeVd$Thf*P;9kvi{5XTcd?drb#5Y|Zn67H$B z)DOBc0PmXXz8H8$@5FcNw%nJ&Qs{7=tjE%mno+!hoi|cy2>J&^(;?CH_$=(cSYjB? zIdk2Q)YS5qQg>sHo~F3s?6p3M$|)p1)tYX+0KG?gZZ^nvWP6Hx?pHO>|IpHjjsrL2 zo@wGz=M9agpJQA*Xicm*I5G6bI|^$k2P{eAq-a>dQHCQOh^OuVv2Le;D6)DJ8C-l$ z(E;TaUf(IjM}Gubf*{nQx4aAYMZ{|+(e1bzEp1VxWYPc8H4ldV4b^Wx)v0((LzZKm z(noLPvt(f8rZdH4$@@F}I-b^8MumB5B;6*M?8{ zMEq5$S)I5LYj){&nCO0B0seK0pR@0dJS%K};TxAm))hwYGfTKI%LyHJq?iPI3c09B z6$AD4M{&3if?p`V~XKm|*#d_cC+?`~4u$8;_9+3!4rIB8@_1YrUH z0DC$5Ru5L$?^9fmj9JNiZEM^6e+b;$+I^=`Z7zGL?URw_yq38fdodqM=)N8NIvxbO z)wLaF_B+oIUNz93_(*)HV0lctR2~!pa%zDbGPuXO9@X?=W9EoK-k3Ug`*i6I3M9r zO=RjA!pCXjAY!_tu4bj&j#M#%1Z)`fH4)vo28?6^GlDA@siJq(O|KQgfSz)bjyV8( z)14TCB+4Gmo+(>G+OhxD^;NeFa2x}S=LVyYZgyAsit)Q2%DrZI5z|5T(W9!MUCEr1 zdgI!fup)*?LWCc}dQp8WE7|HRCjbSFGsyywqTud)cLe)VXse8L!5hYN(;lAm#{pCT zz~`?R{4qc^q5szOk~VZW2c88X89z4S0plXQQ^HIY!EL*-p1|``F)HVFaojQHfow3y zScP)g#~W!DKoC;P&h7%<%3GI+95N>E80X1_DrL+Kvlkn@B2 zlTKfpcJ<)VCZ3EJaY-tAV10VmAMu3?=r;Q|6Xy;Wt}-i3GPOlwcSl2SAa4!=I0g<& zbK1D$Jk$7JQTs#e#LN^j%>&f(aRykq;nU+Y=l5j<z2+ymJ2AVRnCI~KtEGjE>P9VY#W}deo=zjW)UI~KvQIOf0s=`jdM^iSa>u?c zKIOv_0`2RLy=&_pB9ET zeq}slcg-nOrHX@scetfWbe+%t(&4-#@e5D!9+3sY$+kkEI-bqwD`Guz&P?r{03(8U z&3+J$oLNAeB_`M_gbU<&u<5xs->a4PP0LK0zxA4!04A$0|aeb&B6_9=9Q;vF9Mgc}uS2oDbu86%h zm1}R{^sw-(zD1mQK_mx~7w=&Dk}4ktLljmMzMiwgV)By=a`ox+6Q5EmqP1RiJMPTX zedx4bkmg)+HxMudc%O-UFy1urSBP&~NTQK1rGudXw(vRnS9c3v>t7=r)jwmWbN|%& zF}@mVHqNHqRzMp$M<2-Ix;Z=$-XZX%l3zvkT}Ig%BQO2k#DLiP)>5gd!x%f=oF1v7 zUFi1@4g5_RQ{TNqZDT#d0TM{Txc~~XCal@j_#42p>lcPT5-@RbDE|PKL%0XK8um*o zXsqoag4KMuqCkkfa0g6REpL6R8{lc$@{!K`RPb5xUx!S#il+Y17DXLhdy4T%AZWuQ zBS#=OBfe^|?OT_yu~BKMcR&Bt_`MGH3~=Rp3U&eNaDN)j*;w*#eHaXbyaIF3lh&oR zcMLp}&N@*oQ1nNocmv`rXG%>sQ*)Tp0m;q>rF0sJSF~5R!YFac>^s*yBkbEu^f0yg z;-Xx#Hu8fbTul4M5mbJk&ZN7w2HXX;5`yCh<2gU%Q-qqCtB*45fB)9;UmAFR*IM!} zq>bXhCPYw43yz8pss2^kL8>o_G$`$@qKi(qiUeOSGCa^R!6&iewV9NoTHIH-+4Y6fs%qX9ztP?{zqOtyP>m##VbUwBD9f~ zBPTt5svwkNj|RKvo0%bYm3~FqRfc%!ir(;dj&J-csl{_@?HG-*@}4o=5$Q(vGI9G| zhxqTtQfhuKywo%~O|`wl2^J7|3_!^I^H6Eu5jDFKKFM{$bGVYH@Y+RENkt}tNzL=8 zxxb-&YVi!$>lMbSbcjw%vj+rY(ZR1~@RqAKx8ZFj{_uvH;@u>XlmH7JxB|KAK_qr% zwP()a-$Vb=@Xy*%1LIqApawRGH+v6y;3JW((LP`|gYz!{)InY-@NtUuB^T5ZJVc}o z;GMW!XFtxp&-Q+DG!025``fML%N}r1lz$;nRyKu~L17wImCr;WT^ct6K;WqxdV|z{ zRplN({hf`))c5`gF?{^KpF3>Z-0WlZ=xQlXlU90ox=O0$>Tox|3A|%!!7ltes;d@1 zI6%qyjw`76bMQ-4y109tYALK@+CeThI3B?BpYf}ySw=UD+~lQ#oTX>6|I&4&32SK- z7R$02&>}BfC>R{n%YqKy%!=Xj>O@tv><0mO9QvAU(Fvm<<0Fs>p~m+e@3Hg0?GbM- zsqvcb+TJsqTg03mr2rqUdRMq;x*~W}!!}lI%jMWws=EP>Lgl}$X^33Vj8Nh3!OBO1 z{7mtr-YVBFPUibGL=C&Kv~(PI{{SYrvQ?QdNl5;O24-NO&> zA4L`K-WBk@w}o`WZ*F(a>I~Bk12Fy({>ZE=Pn$#0%V>Yg!%_pZ0zSF_06$7>r0yF> zUtdbWJ#{@cudw?DQ5!HkA9_QNF@{G3o+^{O3t0cu)+I!F;2d+F)f{NMw<#IUIUJhc z(@T+kY&nJowYMH{%dvv$)8%Y&BBQ(Xp{eEXP@GNqUdeR!gool7@k|JM5(!)xT}c4))yM63A< z&_~NRe$~ef5uDZ8^WW_o6HoDi_A6*5o@p&@)-;S{vlYhL^#1@3cwS|n_OgV zTTjx3yz{XEV`d6v`V6Qag>YA1Czs>ziZ8q~;XBzZJOQUL8qTo^#F~Q>fdog;^UYl< zT=H$~im2};1b_e6_d#)~*?a=gbRUOL1&*hCb#%V!OTV7He=}d8UL@5MO@i)M+*}rHj;GeDg{7+M&fLXvQjAwa|IqbuANIZMcefju zDwIWjN3Ls13t$ul%Bbgx_OS8giSsoXG-wfugURHYQxHLsg}~}btsjv)Y(p}vi}El4 z@<=sa=G+*=AmohTj%zxJ8dK1#BQow1F~>{}nWQ92>Q@^^LlQYStgdZtr~lFQX9ovq z0RI4W#wnW#Ay}Q+CmjuX);tckWRP2{OnD@2qGSbje7OSz`jJY)-I2zn8zkgo86%2h zs4#bTC%;MuqGV-SK2VN@Ni^aJK-~Av?oAALKmXG7*IXV(GJDe`VG+uJLXL;2uT=1! zpsa*30G97fD!}DPWjq{E149CEax>YvJ*iRh*dSycPB17=;#wii8#4?r>C_IUq=E;L z*QsK7&04bDE`R^i^Q%*Vh9i#os|rD0IqP4Y&hAY27h{(3>nwNLYd1qGjOV>|mJ)8X zh_MHORaIJ?eq)TaXtIh}@_z%`o~?m_)c3AxiqX)xt1wZP0SM==MLaeK1ONszM0Fd~ z|J3F4gPsOGC=z2F-~-mbG?Tuk(P)PQoE!m;Dd={Ao-yfA_0<%W#SB0Ncn7U=UlDo)Zh=Lb9v0R=HU_C!mUl^C} zlzX1co98Fc{#hrMMq?v3HW9$|I9;B03gx3(H`hJAe zZPRG#d^O>%Kf|`ju|kGIzci<-4){HXy=%1bfB{@77{Sj^ar}pR=fzi*X*n{fr4*3X zSlBUm_Y?i#GoSJO1#_M$_<5)5)~?!WCB4DRD=$Oqoc8yl35b;`sl?JyQcnF(|JM1d z;nn2Y7lwUs*fq-ql`qYPeY+E4JFaqaEz-n_ZNJN{?TYO-9N&~w)Xl*fXciGW5!vJw`$W1B&sgN$vGk)32DvYX&b|4 zL(N zzMm9uLZgI?U;|dfm;p~*exK(R%_ptPTWCrhG8RWbNdN*s0B}H$zcs@AL-r1Hk zcq~_Emw`qDW4Pz9wM=EnEB7X2J41DEC}F`E!4);1g)gsWjaD+d z_*Fl6{THob=AXQIQjMENpNzgAKZEp5GUj(1Z?3b6ZR7JCgCm{`5#F+XC}~Q59%@m+8D)i4 zwhusXf1P29m69)47McIk`3?(@CMi@(S9kF*IUbbw?!i!@5wr6bBOKJdUZ;V`^||Rk z1Z`~ZHQR48GWqA^x^a*WFi)**7qeYX8j0dDYcjh9mF8mX zIRyUzoC=9sd?f;~h(1_@(2q=UkMOFKwXA&8e9KUCn}=tS*qj1SCu#KkDnSFt%Nrq3 z#kS`lo;j%IP3kt=S3_pAVnLLqa7bhPL)w@iW_`|#3X{7BCX`*((BoBDv!KM%>ktUY zPzmM7QC~%TJ&|SbPJ^><7SsWO&}7yX@1@Sn6u)}y*#Fh>587hg$BDGrqw@kwXagxc zWHISpapp6|5QTG$C}GH`r0$X7;??RlDo)Yu!5p8P1EqUM?Co^#7N~ZqjN4nUAmeZ? z{(lOZtKHmKb^F-69p{bAhrycJg^I|wtX1PUAdGZBOxJ*EpBKDYriTz}*LxFZ&p{IOg{H1EovaY-cLkDIU+ zUVUE1$8gjytnH6+B&rY7)|95Bxve}r>pMYRm2Nyo;md>zcc|#nxFNG31cE!{iZ!@x z{8OOcY5HcVVy|$U1c@@a9S=ZrQwqxJ=GdIJykYM}*z#+?*@IP%S2p^MjnkaA3v4a< z*E?B(K^q8nD#$8sh^kJh?Au%4%jQ!bQrO#j#MyD!WVg3f;QZvjU6sG!Lm#28XI)O0~VDMLK_>HjI(3Z z^)+?Sgd2JenH7soo$*RKC9xc52mr#I50uapyqN`a(>~QLShXQwkSdXrlffD3LT(Ji zcFqMftQWdJ|IpJ(OGcsa4>-j&KunUjBcK)M`IBv~DljKJa5`fgRDrhjJwMO*P}3)x z`UuPq-6tM`f^g#meLNd2PE~XrtPm{T6$dn(cHC@Wy)udn;(rn zLSvWaJFs*06~>~PY|2kmN`v=bCHabMyyp-pHYl{6`g0Lji|j}q0m}3=|BgPbDp)o zpuRObMr=4TFAO?!RY-~MfB(|^BSlTNFpfHBu6otQBr|ocC~Rj_a|+AAmWlBPRPlDC zv0UEDkwIjnWI(96E&lQ5s(e{vaieIOav+)YU2@XVm5)^UowM``PvKjqc8*mJNHyJ@ zSBU;94;9#HTGhNx_IiZ&(OK9>ozpSB+BiMWl7BksJ{bHqJ|2cGd&R;zJV$e7ZnH-^ zs7*V{-@=~UKPHB)8{zw1Q^t@_T+Kg zzA)(j00(>}ajEJ!ywu%UEHw4x+)6rU(MNM%n%@%jy<^25I@J76;u(I?cYAj8%2nBw z2|smn$Who|J#j+H0l^q2kUP>tZp4wYuo&Dk`PQD1r;6Sm?j^bZ*YjIf z#7VT1#s|Gx+)qGx^{>wxY3bDW8@bGQ^}xH+@!nB_Ypm0o7Lezz&@wAp>eS-bON4i^ zW;P{HJ@cA)Y-4ct!4=CF%xki^x#Z)ge_B-}07=b4_jN$^(Vzd&oQD>BPDe-kT_*sZMnO`^po*Gu1 zeM)-V*wCaS!*>00AjlZ&m99WuPj{nhg7Q{yyGp1~09@9~v=|*&R6_mlaK{j5<}$4i|P+$|~dBdY{l&#L}O;X&%k*A>J94q|AAmQgY@( zIQQnL>M*6Z#4B&L01`;POpIsnAIrUMPfCq0shPIp9ZsOc#FLW1dUA9AKgy9+!Qr|N z$MeDdXY#H)n?@EHeR&?A15I@zM;KmN&Hx`z@=bG^m&F@6ORb_!I}QW30OPs!_7&5F z!b=j`fsK0p&Dj6a`Cn1-qUsvuwxe$WhDc6J54`yGKDE~Ae-bq9M1*E*Rx8oZ1Jq~v zo~FKc7nRA zPyf@oVKO9nXHb26Vv_1i1GHm3a(K;tT-B02`RdHul1V2$Ip(spJDYnbCAz+Jjwn>K zNZ-PvuQcghy9v7^iqNiK#p$f;&zoy|h7npWd3YlPf`8s()qBF)t-hmb<4(3V_K<~- zcFnun_^>;S_paKslw#t#7<)^}GW56v2OJZ~AFX%~jqh(Pe18@H0En%2TSqbSp;iYm zs~mId-o0KER;?ua7-mZGO&|Z%`3fHrMK6zrv#!T1FfL>W%ee5kQT(gbEVUTlN=xZd zbc@OpG+<@I<2^lUYAab7)V@C$^e|FXS)3 zG{_%hZTCWh^%b|`pNM*=ge1^(*({*G)bAlfICdZhBn%9FO=9V%x0tya_)b^i&a~Hm z5TUf53&_^Zqlv^QUD-#>%^3Ft;;;DM;v}>9^G>$XHQUP#IzJ_6S0xrV-Sci8_`s@B zQc?6SP`XK<|JCz-V&_MOG&=O!baA^6E$-Py?@VXwR_rv}3kf&r_SUxYNPvckKw`bQ z^ya+VNfYjDQ}J$*qh0Cmed1W2SZw2G+^kgX9YFfmj#&9#Cf6+%*G+3ZHs8#ADE$E^7q>Bb-)2@Ep0m7q=fxUB#;*{xgFrivh zUDs2|wQXWuZ&SU$y==>ID@xfXsq2b`Za1q3jaYyHCxcpOmYoGA-Q>EOdL8=9sId`( z3~V-J;0`x`D*7i|v^U-n)S-_%rPH5cuXE*+1!G=L=-)1jPDuaI`9cjwIUX;x;nW}i zvh5)C;EunIBycN6*}#Pk?=9PDJm7&%=Nk>Vc|d<}2lj}@CsX(u*!3Fq6A z*(eV{euQGV%X@aX-hpL12s_CKpJQ6Dg)^5DlxNC|8YD5kv1+XNCPiPLf&nj$ z@UrXeUIo%!_$lVZbNgN9 zRE(T#W6fm;?kgk2#OYOzEUc`KL`89sp!40-? zsFwLYa-c-&NnD;(_N`^6=L>6efB(|0;n_r*29{K9{{TaTU=HFnt5;W0*xJ3t%Xx7} z^E{dD-n{$U(9WE1Wz_TE68uQI)a8=fNogT~5=aMb;qH5%(z(~WnUL>h=Yz%v(-p;9 zuROFrK*{o$VJNO;?=d{qBP6=6M;owssi3=(7gHO2xIcIU`BrLfDYSZ1r3#Vdk+GzF zMAWpokbSV+#6RVY%NJAhKX`t1-FR!pHhv}^RAH?(0;Pq!oQ5ClH}QQs*G3+_-z<-p z&+-KrdumH#|I@OWQ`@dR4J#4=Ad{Z{)y1PmO>3zjISY(8PzGthoa2C3gPL(y6TaeL zjOU&@bQF-BDaJ4ldX|-}H`xtod{=FtMj(I&#wL96|ruz<7B{>9+ zoEmT>yA|UUmajo2rlZMUwy?`08tcHm;21o}NUg_&9Ez&T2%!ILi<_ zpGuUp8dr9>9~F3x*_9Rl0JNu+;DShb8MDW&MD5CLMf=(v zE}Vg~bvq;z z>IUObwT4hK&TYtyW7jeY*+*22FQHH2N5WtDM#^elCR1^%jrP{|av(9esmpQUX|pS7u`$coZR3MW4< zxus{3~ zR_tXNY0cdK*ZK$HcAutrkKwkT2D_(QYH(TVw{yTQQ#)o`hrwQY*J*g0;&yUFl1XJa zB%iHkRbFizQFe+5+hl8z$>fiErQ$7q)55wf)~TyZklWkFShE}!K7-VsO1@nTXEu@Y z5615s&+$*hdX@ErCPNbKhAWwVOK6k~hR5Avd9Mk+(Pz3)C#FXn3HMe^Mm z;cELoc3n?g{g(b2YT9p!B-M2-K2_5riHvtr@H58HJ$u*Ckf+NVM}-4FDH#L&=DToE zYAWVAr9|ef(Erf(8+(k5s2fPmam`Gxv?)0_I0L3D*pqiYX=)Npuz&#o-~tayMU!ff zsq-o+^&(@FfWs%b6rN%jz-{Dl^LG?I zM&76Y(e-sygyBXx$tRqeX#sgq4te9&y;gWO7^R5dl6vkVnsYJRv;aH(?EV;_6Vp%= zZ988lcR)LSG+-=adCuPLO$cm~?ZD1)fq~kiljguh>Cg&8S~LIB^pll2U~s)cnrv=x ze|E|_IX;!@v%GXyxVE{kf`Lb(SJJMdH-`*{$$3M=V4pXl_mCeg?+?vpE zAPze8#QG-gnCRFLPd`&m z2c8K7+pQ73fsRwgdXBsdS1<8g=fblUVi+8fI)PeIzdE>1Rz`=0Tg~vLwit}V_p|L> zeVxF4KV5-SVga0!jl^VEL}K};{dF>WMIZmw@P81x%WY)RWCFcG+xq%@)1{qe@VmxF zJHPp|T3YQr76t(6!55YX1ORk4S?WMw<#*!eikXhT_|OxfM5sO~PAG z4eYT@s6byN3@;hlKAEnXiN#4s$ywODImiSJ#B}Es!fO_>TwcmAp-CBCi7uev=k%{j zg<<>YdK|f>)Dl1c(C|roJEmXWMRj{;6tl;Ij?0{5rfX5|{=s29>5uey-ato8s3-bX zcaqS?Pnp@CW8fVU^TggEzMjWZn@qY`%!YV@B;<^N`TmvJ_>bYU&)|WjczxPSmbe!Z zy~Lk2!(f70kEdZ(R-%hYsav1S#qmFbyj4A(i+`!JYIE7_h+06I5h7!1@zk7hML)#1 zI@PblZ4<^ zlq{oY`r@D9?Po{7_@Sns#!GK=rs-Dy0O zfs@z(D;mD+8Yh)B(>h;`+JkA|4{rR2Rco1|fakb8pXFY6r0Y7rfi(XB4C=Sq3=&!= zoAx0)Z8Avb=a*>Ywg>>8!lH-6Zsj=MHb<&>ui_n-gksa;FwK3cUu_U+_TTFpIOOri zf6AlMJ}POto~>)6T-s_@8sxGxGT6x$ObiBoX6cMpQKNYC5qT|6ozro_9CoZIyjiE* zYqy$9N|D`Lxk4EA#~f6~H@Y9I^RBDGSEB1qwM&TJDIsr}Tw^|m^{%N~ zMng-M=TOqdfn-)faDG$XxPOU0Gu15QjXX3ZL~wlNE7gZWD%6#(abg^lU5cLy^%*Yp z%b71hOPQ@VFn+lVGCx}HMo7ma2DmXE^zK#$Puba@|I_k6jeieb`A)r|z#4T>w^4zO zz;tYWHRaL2ogQ2^PfYQ)v4_1Bc$t+xS@SNW7j{ITkotBlu&+I+cTk2HHb^ zcyy&DbgXz&isosSbRA}0A5)Iz*^2F8*#|Z6UK;q%;q7xzicLoLI}4D%yjelUdyqwE zUKd(!heEHip1U*5zBKsm&&B>HxBkX)HJz+JP?WCH?UG3z)yUsm@3}7?9AJFWuFglb zTC$2v&a+i&T@zSp3fh&d(0Pu^>$pjV&pm73{t>W~z}Chw$(C+5rW$XG=(2@Nuzjv$!OX zO0qAKnIq+5K5gFB>mLCpRJ)tVXu`{5lA!b|;1B0YqtjD7KQgNu_dO?BV>W}S#)ENd zSwI8*(_bx{Hi~Itid7;ocNRGfk577<8Yg3~F}{tAiaA}xae{WS$sIq& zyxOmoHja#fhquJjgpLl~35=cwK-@s+YEr^L2;l<#;osBz`&XG2ZC_LLx~tyu5CTpB z$8VeZ(G-NogupzE0n^@-df1*@S+OKWDh!R2jOUKEKA(FnxlOFV1H&o7L)e4uRGLqk zsdhnkUob!YtE%B#T(|hcZbAE znB+M;)*NcX|* zid!Lb-Pr%oy}K>QJe(4GW}NI8^**N}xNKydv;-W2dLEo}P9!pbNsjjj&&`$K zjtMmB2~Y?C;~4|ej=GBAhblJy0MfE~M<5=0;+D%olXukr(b_@?IP5b*<&Vrb6~Sv6 z-KI%`81?oz>r%wW2;7i;DLaI0i0%s}cAVpoeQTU(4X?zn5&7kO$)%2DWLzsnBCCx1 zf>>5nwTn71_fk4tHIZZlbY#Vz^HoU`Jz4+K`x{0eSwN}4Sk-?a zin$wZ4U^Zd-Pq}7;4@?tl6n%>;U<>#s0zmZy+Uya+wKO3*& zg~C}UhRosBm<{6Xkeq!Mwwt_6_i>5;)A!$mxnE?roKIJDZi75($x3;m$pQ z$6mGDPjF;q;N^}<9+axDd7gZ>`-iX)#PiN^6iQx4J(LWSUo?De_^omAlUZFW!p7p$ z!&b`MuNVvoGmXvu(H#eB)|5G!g-3ZLbN4?wvxo6AAmg&bzP-9J>o z%R6BFrLaXlMHQhHC+!*k)b!}CJjTItF@iR>IqO#z^hmpo%mJK(-o0*aht6{9NgdLN zmva_%>cnR`rwL+Rr_7C0Jm4OmjTZ*B7}o%TU{%NWo0E_5s9tO%H0-L1H!~B#q*`4_ zpe~RPwB5Di7C3N$R1BP83YALaE&(0+rE-$fQ~%ZVV!P3DO5pY!(<23Aa=9Gf06TTB zQ62+e(fN4~xQuYvJ!u4_E->4(({6bbFj|d{;hl&mQw`Mjrx{qO-U5!i4wU){?nfg9 z$@w;(4nX3fIcCEjm(Xwsqhgys|JL-7gn&UKlflL*$P_jMIs=@XabB&@1?q$ek+_~Z zqKG$WfMMm7jXY%x?0(tBYt!CB! zBCPMB|Ip-*1LhnahmMr>rUX zed2P=X-B`}|R!Y%jRIUKe13kWhn<8ND;#uU?hDG2V?S^hR{ms!1RJ()r6r z@H9Fus}0@V=yg-VACx)u&!@d^>zW;=y>I1S#t6nk;{`oG4tN#vSgc#CILDKpF=P^vXmj|cTtweAJ4?d>87PK8U@+!ZBUN(Z@*~Zq^ z%)z6#exMP{9Qu=6Rc>lc?#ynkk*6`*GD#TkTxO!{CDgJUedEbB>2SjR^q-N2XRH!G z|J3nRZb@9@Ae9}e$c6@4>p~l`%1{j7z4Be(>~_8Z;2XKu$s?y)rTZI2_f{ znpQ)MZ)C@xJOKyj2;bJn#DS{)}$mr=c0ysLQp){PLe5&hkx zy?Kwp`zSnX;|~yP+LRKphHdbx9BpSL^NzRxipmPmaw0L)Q~%cTS^PQ;QZ^krk7E1GGmT($2eL2aaI_V;Gy%F5OYf(SB2 z5K>2c;-m2oiS*wJ*$eG@acgSMBJ(zqcMwPb4tp9Q9%eli(m(&#=X9N3$HbaU7usB( zX|lLXqcRo9=yC}5HN*JR;G`OpOLyU)F4|Tk{hW*s!1`AtCCbh^)RkIxmgwSc{v3FR zPH!&y+TeCR@iom)rpaogOBC3^BXY3%ns8Tq&5EN?mm(za{Ecs` z!qJyd`CgdnFnRoI=`RS8Cxo6cuz^@W;G5f)T+>Z4$mo#+fc^If#ckUnnslhlr@##*HWQ_*m06g(V z+L%2+s98BV9dfjx_c1vq9DsUNNeG(Oa%&C*tji;Y} zYZ}VP+Y2sQi2u>@kJ^l9MbIT*n2U)6)p<+q@(m*pb^+@9e>8Wyh2>A=cU3h z=Ec)}ZTc7%;AQstpLZdS2NfVxRFR^Q*+|JyM_S-pAA32zrr(7;2`7k}X`W<)-ao%6 zUF5OopnBq`@gKvfG#xx$X;O=;X!v;9HnIcX9E?`+!}CL!@-aL?8d#-=Yfh&)V`&x6 z+^X}}fk_(|k@sXAdUN>J9F47d9?dz&d!PT)^Irydi0E3BGf$O+AtvZgmQO#I2k@^^ zQlK5JyFCazW3jIz2K2G-@ofaE#kGeRjSG~b&ps=YJ83PBQ^r!7*$OnVzQq|bCNB`8g2`a2HgVY{)r3}F2f&u<2 z;oQkSqJ#5r-1ju(B@+d=^Yk>H;u0`Hat?X)r-si?2hyJ4v|gg45Jo}APAS3t4?eW6 z>B?ngB3#aNKoBcH8sy=`+hsOa!y;PmH#R%63%D}j^JlLV~BvWE@4{G%bBRggp z$jGNmQg&zm*82}ZVfHw-WR1P*)x4;8>;z%XayyFUrnEWdxySfh;rxfjn%2AGcv?xV zHOq^w33m)elE$j z7&N^)D@(mMN{US@P_weSK(De-v}MTcxm7-c70di97dHMc@dt|GD|4qMmBxzkvwW#3 zV(Ee0mTYwGQBy@=q??yBKmXVFzk!z_z7y%uF~M1GwwS^7= zCMZ-4vmUH{{k%OtEBdZDgH8+shM?wHiD$W53Owe=60BA}~uMxH&i+f1mNGlS^Wvto1+t z(C(pjjnSS-2Gz#GM%?H1?N?*q<+}C2Jc{*M;6)})8$Xr^Tm#nwl75vSa+133f0af~ zFewJx4vgh^*rfNz7^IbejBg-}^dp1#P!CZD&Pzt>KDp!Y{OQ2uaHX3)2>@|QD#Mn# zAOF$yRY8ClWq|99niWA)Tw-jtr)tz>Oq&@>h9`-#482szE(lpZ<1|=!aAPVQKbkT*6|I_mQA#-OIPZ;Ps zRn=g??!i4P^V+Xhq3tGfzYxclrG{XnD*{3Kirnzyv*}j&Kf{5|T-WZFy+)+dXwg^6 zCzH=XPuy{glb+eGURI)LmB*}@8RX}n6sp-c&)3&9q~BCDu8;rJsVhAS9gW4G8=)!}+2;;n&W|-yKknyTX@yD;ypzsHa zEp2S2v(=^$`B@?492NBc0PAdF3eVZq=Rg0}`A+j)n_KZ*a-+*48PrCn z`?=$a^t6lR0Fmp%XZ8NI^4Xmj(x**zvFYLE%{dgc&ksYb*tB;F4$<;B{t@lyzs|hN zUeRap?xfJ%1IHnVtuky?r|jjkBN;~U=3Nh2_z&X)d#ARScH}f)G<(}Q^{+@n$>;GE z;pdb+mMTlR*?^m=OqM6wz=b0Nk?&K$#NeO+p1C#W+Q&?h|JN<>V=8h+4_=t}sBJ)7 z7_rDXJ!|s^tWThuD_kzqgTW)H9V>|OHKoRZrE1dnavbY=-P1&pfyl@_{s3mR!uzhz zsSn2=B7kJ7AoN!_Bkd$}Q+?a9^tNyNdVnlxs0AeQ8JCb;Xdy6R$p6fAiBYtrF$YSQ#D%-!IufB(?&NKoxNTN%m4 zS&fST9OI6F)JfZOnMJb15@7R#p7mx2B^19II63K_)h*vbudUH$-0tJl)Sodj9~8X-V2Gu_wBFAOF(vIKCF^z8UeXm){TdSZu5>A~8=b+X*E=al4M~ z#zFr83ajB?2l&gw8mEbLttto`Pri-BdY#!naBjxTb!G=0IIJO7FL6#0lF^lXDdKMt zL*Q*^K(Ntu3yoeBlg_-E@FIweAFFlz>bHixeQT$D9@I2#1}#KulKG7&fikfn!1D`w zU}GM&tdw6}$@WcbR%=Z-_)FoH+;_H?w##=kcj4FvSzbVQzkCH4$**eC^-C>c+t1Q& zV7;~sV_B`(GBF$+5!Ry+r1k7W(Id|OE_kC|xwn&5@Pl7lXc{ET1>OC$n>_hg{J;<5 zRp1lq)l=i&h$is{i{TNXN|I@Mx(ldaBlo^%-BX`Wn2)VE#X-j8sM}T4|I_iwd~K?H zA=CUF;m;D;X{z$?Nv4itvN)CTka`y6lU-MZJauj2T|ZgW;aKgoYa6$M8~J4UXN`Kk zF~F{A)8_Z0b2T`(eTte-#?K6DbIh%Ibz^TH?<(^0BOEjB>JhSXeXFC=wTnGxOSjZ? z+2gpfodmJZ$OU~)dQ+7*4atjdbIbn#X^lnYyYS7mjI8TCayV#Y1T$^`ecz>e7M(@D|ocUoJ5~#tqCbeW2UkbcGa>14v;EG-o+tqo#f9K4)t&#*7rXqJRI?&sQi;a4-%@JbUK6&*Cq@ zsI}Q8)jSjB$25SuSt#jp z(#+Ef{8e-R)$*U(Wjx;tX)-oTEz79`(5OGsykKFDJDzyQ6^t~6k>le30Ep}$1xYIB zBerv1qx(5dr^I40=6v>Z01qnTRp2hJ=9s%j@8A#G64HQJx8LNy`jh?zqgAeRofW@r>1L0+tr*+Xn+6K=YAed zzrp$|Mt)Ifn^=CI*16w{a7dcnrRhKGBT=5&T#xXtGQ4jY9sDsJaOqw=)x>=KGh*W z9r>l*o>XLXBQ+~PcDeu1ySM@ZlY!6Hhinbalb=r2!?Q8wzJi9`%8`NFzu`!d24X=R zbAe7y!K2W5d@0+&JWzlTa1YE!=S$EV?mPex1}(=U9fbe@IBXNfGfA$+b+P}^)B^-< zKKT^*!6amy4&>LLtI?V0nD~h&KgHA{ z5hb>eWnDxvl?U+xyJM}cVKt*ilWIN_@qdauai?ou9@OB|bcV3Aj%`j6i7XP<2%1(b zMm}KV0oScl*F0~euZc9fKLH5h@apQ8`&}kDylvo_9G;}^Jetb9EX^rRwXWy?)Aw(J zmeWJvnc|W{5=+aLK%@Se9OLn>U*iYHyT~q|!QKvnSguL(ueAqZltMYi4+q|~bor{; z9#w1U6mXs#@a3+D2bTj&CRn!l+b-wSn!R}HX3zJAH|-fd-D}aO9#v#=)qKy;f@Tq@ zk&%hue7WFvsR;rw?m-2i}5Wch=WkVmmKI3(aU zTRfan+;$Uw_0tr#IpIHYlucuX!9dtRn9rUJpOerT}HGX zSh61}h;Gdw$OfE}$Xoz`gXx~MJ%)e()%919GLm@q9<<*uhRMkw9*3oRmpl#G7?grS z?c8`Fy7Ne72`|pWab6cR2SKfJ0m6{V2RlzwQAqDG=Yqswv88*V#aWV~X8`05cvIBU zt-kbN3EX((bjM1oCJmqe*7UP8!ZtDadj{ZUmBX@w6Df@U012;E>UacTx{?@-=QyQ? zL2()K$ZmUMiV8}_ix}j20?5ihiaPKBhz%7sZD{LuC)D^s}8^pyyi2P2FD!LF-C zvL_0|8Lmo_x!Fl*fB)C=tr|>OMZZ6Eao)65fFCb@;=ewrFL~JZVy=;a@eqkLL%19R zkO!`7U&7J`(e3fnARKoUe80I~qf>Hh)GxFQcIP9#IUF(IW7yUcX|7VD-Ni@2=RGOv z;DA6R0otQQ9ZS~wAOFzff%%82^{1{Bcgfo-%%3c*S8uJ=B`ktdkdbmM1E# zeF^6k(-_6psF@AgD(C;v@C{NHZ4S_KI%E^n`yTY|IZeKcDT9+9TL+Fm!oD)^*)`^R z?kP86G;6E7$7hhLslnTfeK`J=KZu6y8h<>vM(RPy{{Z#>04jB(7*t6LD(R+kM@-UQ z%&c0(fR3Qa!#8^9d?Bkm+A^1vPO+03vB}6BeqPnpioB^eBxemItWU4_j@L`FEq^Bc z`5QRN{{ZX%04nnRLgG2^WtQDMq;htkIl!)rhJ%Z9=*)5Qy`q2r()mNcbLp^ZqUTp| z3}Z2?AC$4~ex8--P-+P}hDQxkNd3UmPsi!66cl|E<5so?`Wf<4W6DQ{!YlGy*#ew`Nh*-lS9 z3V=?tLA^&ABcE#g!q!K>QEF1SV8b=f_^()lLz_*xyN%`DKaimYNNGM%{K%~-d(uRD z7#Rq14FEx=eoH@@=LVDGxu(5H}XB^ZwVWv-SChU>ZkXPQPLIBS^p4A)b3B9_H^ERKD zo3G50?-)JY)PRr(i$-*5!aL#yWG1(qOM%gy)LldzmG7aof#X zn2S6r+>nR{0j__=zYRQFq{-o(Mj2r70n&oO9i^lNW4DbCP-CgjbL(9Sq!P0Q6x!7P z*YXdD8h){@cqdx%2aByOhM+Bsc6ww>xhzrGZ+xCh;PpK#jn=$PaeweXOVV@=F7^vM zS6}TNK;z44n6?moct3!srOPL1^fGXlFDXC8PZwz#$ASDE;qM5uNo8gudx;i3s~n{Q zl_dWF7E2Rb9})GdZxMKd!ha9EE2%{KUSYSnn$}UVn}7!4)OGw#Y3$yY^CiW#Vl98e z8ZZ1W-wtRV8njz$J5MQYE#h*(x^8Cr908i>^}iQu9y$1%{{RSIgD>XMEv+|6sA{mr z8bN|G6FhYwd)88o^B$Y1jyr8W-YH%3ifX9xW z_2~+5cq0a)vPtL=rOUDZ(B!@$YaiG?4At)#>|}wJa(kWyc~^iwHQ#t@5oxHS-r5cX zO~FzA&!uHXDW-Wi>B=%rJEPO|Z;4(V@jOVP@(9W2$h=TCp8awwVXw69KGe$7SX;r3 z#nI75J$S77C3_lD#?x`;d!8Thr^XQYyTnWVnnPIH48X|b~t4}X(urvkyMaL5)*)N{OjHR2VDK5!nc@hS<#$SQaqeZ zIXaE>Dh&epGG(%u5WJ{TabAJ@JHTM^L;2|>E-mF%LNT1+{{TuSduaDDj6L|@x$K2Y zjf4=V<>2$_#eB2k2$ePK@G-PZ;Xvb|H8f>qq0^4&icFh%P(cHst9mlXbsJ|V3}pj< zy=vDn!EG8p|I+3@A3om(Xlzss_T%Z))t?+_2gEuljwIhSJDmXU>yOLyuReO+Aj^IC3BC+Z5MTvX%KeWl!%uf8W`bmVO( zueDEk;+B++BJq&8#=~t+#O=^nL1&4-EKo|$#{{Yua zmR4+SCj+P+wU+ieQ@ZA7|I_hpIgGC0fV-Dq&#CtM*R@)}Ev;aL<7{!PdvoY9UM34h z&#dD*mxVZrgKIDY8S9FXMh;F$?Vc;X=f)*uF-Zyl?a)+)GLht-oMMdwpoj@xanrpy z1^^5Sfzz53uqS;F|J1R9jmGb$b4m$fG4cRU1Eq1=<{B|0lXC+mGCKpsJjfI-LE{Fc zy9;M_EEQ$b@r}%R+zuUQqrU-%VQKJ z)Bt@zg1_aZj~o^rpo92SRMrg|(SGta?68t9(m?bTxnQN;K^<|7clD{K8=|D_^*{gC z`s2dvr$@7Im==s4e=5_6?v)gGVO-SLx^q_D*zye%#4X|f01m?*mu;z8Pp!=@_4d1` zxRz&}O5tOXag~H989!R;`~l&J{AHuJ%W3rRq@X+GJN&k+f01>_$LRgc1lKbmUei#7hgUQrE-rY0Ss~&M(2}!Qt>s%g)S|=9cVVU7P?-aZ4~!Tw@UC~j zeixUCK7kMLV05}KQpAty1fTXbpA)A~Eu4|1$V(pEi z+pLA>nqeW_41j#SdSkU*gLM2FFW z=YkIv>b)8B>D>;uPbHkFk%KmKxc>m3N|jiRxXO;ej)JD>y~pm}q$q8?=K}-UnpH@` z<#2f-hVDq@avY5O!yGm`Py?XLt3$MgSinNaTpE59-frw zV+8CA*Sd-U8yYRU$oaS)nP55k*K?rQfT+oyI}Y^|o`%%ob{bqL6cRDh09Q+-!L~5V zo_HkJB&DM}BCn!9|I_k656IG3M8IT_4t=Xj7*mdOUjb4rNu${3v5Vuy-=atkayiKD zT0Ratv`9mA+ky`@Qhc;NV~Y2UP^@?d0P-?v-eU*vj=XwS5Y<@G*$)m|1p5knZO$9G z>(ZjE?5tDWAOFKFu%WZ) zM@}mv#{{>9??(je?^guekeg2BFNM+u@SUlM^~lNp06$8os4Xuq<9Q%SUN3diCiwhQmenM8q-|GYe`h5v5hdS@HEYP(9(Do7 z2#jsW^r!e!!>_OF5JP($;@!>}m##gHN~cE&2P9Nns!LRQ9*6KL^zCli=`T^Nu2h~oRcLJulmaDod=hec@^fF9-`zd;B-^o8;Bs+{d)7v=1+Bx|3&jtzV9^F2 z#yJQ1)|8jMp_g-q)2EkBTfJvaw`<$2ZX@$zTyKBZS9NkP4eCZeNOJ#O#!LKp7@#dKxr*Q<=8)S|~MiR!nSzzh3C~l-HSYt_AOF(jQOB4^PWU~|BQYQm z#c-KL>ODSG!tsOCuQdJHUJtqFwNy~1t*}PhhyV^hh*OEd&tN&H%8@r5r-6kS?@GX9 zILXIc(or3(+5gk!?xLmnjghf7E zmGwV|ejnAe71Ay==%TQWUpW%o`DI-3ki(w+>nFs&1$;lR*lE_*izbk42Gp9-M(19? zG2tpLsXkck`&o-GnRQ>x!mgAi3c8)R@32Eio6-) zTfIZ!{-Xi1y-y{s@7-QSM!{l1$IJ*M5t`Lv6ZnFBv)5~xz7z0=j(iK^J$p{@-JDa+ zd{#g0tCTwgL9$#N<0sRv73?XvM<1BmomF=*7|F*c6&2+fB+)X8TBd*h)bfAY4^+5M z4Z&e-juLkBWpx}C906W9tF=b-=rA&WTAER`Qao%^y+*}_Ol&r}LyY7#PV?Oe{E6-+ zDE)qXfIq^i?__g0r)E_RAqQzk2ywy2XlHp9nnJi75!Y|E4@o9f(q)|r#jh?lc_gZx z%)}GNerxDIhTa~N!~Psryi*m`^ZllDJ+c5_{B#P=zPcSaMa@$0q5svOjM*3i>M3S( zEMPuZf3@jcjbB5WE3sbdOR&@iFDxwN$Ne!;{Dx|+r-Zb9KU9wP%FJ8b#tNxNd<^yZ zNykcj&ekQsy*~QpS?%=(5=iXqB#eWSbJP<~GvqU=N80?1 zeMk0kzEh1h;U!=C?4gIZ&5FxE26f#U>M7m}nHDJn0SqkUk^b&|>t1yzuID7MvrX9l z*5$krYc-FAw0nEVni*n@hK-blUznaj>DQ%nDnU#yEC*WRTDN1GifS=U9IuT&AAf5+ zm--@vyz220js3|U{B*7s<~d-O%eYx1Dbx|txbakZTaxO1*9~S-uSrps@fjlsa3dSL z@zhc%P&Y0}xj9v=&wlrf(D&HG<^ZTYbJzT7u%9|mk>qXz1PW2#UW0l<$p6># zUj+DCO-}kHXg|?yMl(!DIoWMWerk0&3kd3Z?LH)plQSfy69VIG3T zkT_wIPg;99UI-Z-$6DI`5%cZYA*wJy7yxz^A$+06bKDV(Ra(zdQog{XkO2qRr+Rkb zl?3D1=8L8aWB<^yKwvY+9qCgWSiT3+xXxzoF;FWI20aKg^UC!18KLXBN$4zVxG)4@ zd-SHLEPX)~TEIPHDggxW4oRoRq_##$^ff+0S|9(>zJ-A~1as8Xk&;=06M@jz34(eO zs}^zyAB{dH3O-}TcqHV|nC)adoGB!ZNXcG0*E8Zs)*l?{lEWl&HP)UUL;wa-yMW2} zsHoQ~xwakNX&d$^8HhHMxv89$cV`#yf5Nu4c zLoNNxGAgt%vxV~EQO4uWPi$AchgXV6orss&?q+-jy*IuHxQ^!6QMA-;Z>EOjZbbh!(m=UXMAz^iT#b>JJ~cDmPRtHGDwa#fO2p>{!?06-%}d1v{X^aYd#B;#@;uV zQ`a=vEM~gZW?f#~&K@+k7V-H}sq9X2NUU!W_>}m2#Ro#rlkD~uVk>2q(Q>RyZP*WB zG0CZ@uFV{|Elwx@)AT!=$3Fx-CujpG)Mc7U0OJZIcK)Kd`CdCWKve;3ZX+23pv`(z zqwzm8=juw*u^CJq56tSmV+(rrIOi1sJ>{yVING@+gn!y z5d6T5HqqDKqDs!jk&-Uj#9;%<2_ViHLBRvRHDcD-ZQkYZGIp@*Qp$=*|J3w&quhk@ z1CVkl#uFN|I0TIS)7RVduT`D`5CYMmnHncy^CFPgH6lYGP*a@t2Ru|*sJ`Q}LJ=p< z!1ok@u^Df?4)0KCdg?BusBxTQJ($y3OSUpbdW_X38#Dja^#_GjM@;9pG|5##`LG8+ zTvw>phlP9SM=%BV02grw9<+$1REEGEh%~KmS3p&fM$f(3yM8p#n@Awxi1px#7&l-n zKyAuYo-lffSOyA^WH{;vN_zuz`(3L*fV%vt^O z{OabDr*CkG$`8LkS_c<)b(#)>9!1AFz{u%cmXD(OI17W0YnrP%=|@wj(lq}7DL`}| zjcvq%Pz++Zrt~`LE3^OC@sA8$EzX??Q;<|v+-?SXVEWg>Vq1*bN3RQ7=2witIwZ@C%DXywT%HP7paiduZ!XuAL;BQ^FiRGRjo+9k}%NuZ~mqEo0S^ z)I2=xYkedtSd{~o9FzV(psU)m%O;g{u!as$<8LJWKgN}ASxqpfqR_&JR@e0FC5`N0 z@|8Ya++k}|!*?+18ZP9E%aTlq7>w?7)c*j0?Oj-!af}?PzfvPN%&v0YEAT66uzjk< z+Tk*HgU;T+pVqbf33OucoyO62}O=bGrNiu%S4`B=}9)2n{x|I+!8Y8suq zu64aRFD>LGF%g4L^-f1qPlCl}6X>sYA zO}Ut4!DSpfI}NIGKN3w*@RV}fSiL~)=uj(p@$fD*$hB-fY^{;D%E~`m-7-m-FO`reN_^F_D`?>4ZrnkMkv>~l- zXHGwbja!OlF4wW6W#gTC$#EUwkbl!u4O&*e7ByH0@1ufVINC~@he9u6RXe>6TMvxh zSq*n(A?KkmMerK zA-Nr?;e)nSfj)w#$Zai0DGWh9593N083<9&yS`{$5-Yt5|}bkTTu#Z#1J)azBrQJitx){)p_k&-z2R?B0J$6dz~LSz7aX)}%w zuUae(=otV4I%brTLv;l9Jk>a>A*jBG|Iom`)2($IaSo#lR}ituS5QyjYliVRz>POl zk>=5*YgsUH8=Q>&f5y4vK2~v7q^ifw99FCFXI;}bV$r3Kljfra9D0#h)A&aI26dV# zxLjbN9Q#(PX}g|$=}sCnR*%Elh0?CuX&ABTvj7Uvv+x!5*g#Z}4g$cYSAU=%)}2Wr zV;*gfOZa*4llwAcz3~mXfFTZ+4B?4k(8xz0@EY_I=cgIR{{X77lje6j@brD0e9!;U z%?t_mC$~y;jk}@A^v`PMv*>cgqzc&Oc${ENg2&rBi2Aw zMoOG>=~VTv4r$u-WBW!F^9aD2Kb3&@)ZorXR`^wM0~XTeOQb)* z#3SSRAIw%%z5>%N>pRGtp zahAqUIQFNg<0Thyu}iodHyFoikQ|SgjyoD!AaANa|J0l|PZ&L^OW^<=M{!(<-5l2H zH3Jy|UY*I!NC+T;2RY>W(sx5^L09EmkC%_uk~6UOz#LNC81wU~3yyth@DdL=`q6%X zms9`M&|`oy+{Nz+rUh6cV{{VRtq|;ckg4jN!@mn?xnU`n<$?KYm zTBOHTTA%;c`qRUYjUvk!C&^s?RiP6TaSP4;^0nS&DBCwv`iG2re#Oe>JUU67Fafzl%H^_OE{k ztqY!AOU|YG9WTYJi;F)6rk9~imT=ujw)0GV+nK2I$;j(IF?g71w_09{V*dbV`%-SWx-0=@ z7)&>=;0{l zYVnrAaN%})`_z!Un==tWrM~lU2(7hUOrp7qmhggz9Do@0IsSDG_lFl&p4poJ08_CL zNF)noC_v`;|Lkk1Rcn6kN*H&EkfNH zE2dj;Rr}c>QMYm7F^)rarh{NsJa24E0x+sW=Y zrf))|MYLdkmFc(8@KV%iDCC?1anPJn62Vv@192G#nk{vp$XX>rHx^>YuQ0SOyp?nns;i<#z7_p*cCP zRPcA)n$kZqMFgo;{=T)-XnIycnKt0}%_+*rs7CDVv<*Hbjdp^^w`^BerQ5^+3_v5l zTIHPX&f0M{?5+H@1({zXgNn0U^W5s9tdIZG@J|5TTuEme&A|Q|>to3o9Ou)yuZhPc z?WJSYr7I&Z#wnd1Zb<9bv8VV3QraY089P9%wDt|Y=x*v-8_0I90Kpy4YIvIqk;xr% zT+--`V=JM|#1W2z@}-VO@6LTXR9PXZS=j&7;kTUegON`J4o~6*esdLNbKSl76=cB} zIM1yj;DeEY+M&+vv{OUNk<+0SpW;EkLc9c%ggFA7XKPqVSy;#TQ2YEk5b#!31fJZ~ zX$(!`JFUvze%J5DE3SXWm5ki26aUrlE3oruDdnpc6BP-!sn4h3Owc2mYg>@cn^$(_ zUdQYGYvWV2UC&y78XMub2il~@NoC0d_UtkKb6WRAK@76V(LQ1^*B{s0r>#wGWQ7Or zv~x4uYucnnSnO6iIf23x^A-O0{{UXLJSV5aZ>Q{mWQ>AY)!R5H->|LgIMb)e2kK0H z=_bt?bn$T;teM)wX$(J@{*}z13|{DS+zlI;rc;LR8xK$MtgzUQOU3NUsUBp1|JM0` zPn%k|iKUKHdXbhAL^)u+&(P=buBStuJIfI)QLI6L+=?&({{TI!=sD!){C`1GK=_eDjkr8>(;f5uYtBnXbUA90JIy|A)@gzW+A4LE4U>!>z*m)T zdqb-FB4v~kql|UMNfV6ct~u#Mt~TtC|JR1XM^`&eN7opl@Ud=5K7zk9x|D2tk4ZMl zR|jY$o=>f2YT8x4s)-%^G0ur1$^&u(FChMPF_TW~aJnkZsM}wy{4l?q*7-?C`&h{a zu{;%XZ9bUePgXFaa_^E^{{V{__u{%@otiRoQfSb)Z~+Ig#szqfj4aL9i8UuxIBD2` z2SJ<<k)`)Yh;ej_;T2+*CELg>wknaZq-yeze14!MOb?C3_9XYgpg|jP~b>A%I_R3Q3shxgxj#jO1i>?Mkkph`~^KIH%;n zyPO)f-8TWvakOHc$s&-VW3`RW%dOV5IJC2T1^5lSV(28B)3^z{n?Q4lE zfMO5KaZVBpVNNi58e5dzozMT&#VkqrNE9)~G1s<5az@rUtn4ZsvTj^&9UHwi;wbJM zwZca+#xWv>*0!$ydM_a))gN-<7w+kequJ@ z^MHEMdkXh@jtmN5=Wybc&Q}NV#XT-7+;6z&9AMB+01L=H={L}Av;Wr1xnGbl$j^UT zd=hSiWR5y}*AiNoU9?KSGhh$SoLni&ZXlYp?ye^-5(2m?*v5L&F#$&d{AiY}Yg-Vk zinBa&Hc`O@3}>3L3i(kg@G-?_9obFkbN|<2Y_A-S;*>ZF!SENTImZ>tcG1kY)Kb8( z!P-fumcpEMBfS^9u$r?YSHSs!ECw(tV%c7B54|g^j_Dz>5LDx*p)~g!Q;t9#F-b0M zLRx5l|Im<^bK9$Io&PKr-Y2@UC(9`p|dB;LPB8F0xmVrR@gpu()%PCRIK^uAxe-<_8#wM_ zXs%HviN{F+JoWXfkwjw%rBQLfUiB|gtqVx3a0>DV1bS5HjKNBm+7Dscf!zPp^z;N{ zEVvmYU}ly!%7!H!Nyx#kQpbaFL$VC6?@SK#F&oq|1RjcbKaDGn;xn)eM&Z!p5Gk!Q zAS$>8hB^L}141jd7{055I>z~IU7MHc6vUY@_`=K_UTz^RcEUObZ7XiE9mzaJqJpM;o}eNNR*C1 z0|TXF%-sj4QlhOZ9SG+hgS&O7=KyE)u1oW3%Schk1Y{pjDMRH!U(&00s4nOK(BV`7 zK4XkfImTP*o-6aITJ}e{n`=?Z#YR+<^c3LxhtJclD?K?!u&TfVxaO&AM1N&ncSL+Kx&P7m z`r=ky8s&*AwpRJE?sN32`X-?wERlmKMjU{+8Ta)*)$#OcsX|vhS<2GXpF_L0igI9z zMUlbkc>sI*`__fc(!HF*QUa7YE5{$<{OdZ@oMx}oBGS4!*1y%QTmB^ag}kuwv1G@oc-cf)(M%V}Fvyi1F@q%ugrkGy*ir>%72BNtCat22#6<>YCt>V(`dRF0tWkFTe_ zL#ezn*jy~q`B9ZSo2Cc(?OYMi-su0*`F}{z?o9IBXu6m)A;3pr^ZR4^_O6S61AP`6S z{Hx1^uAg(E?wQ=_?8ee9p+-R9;;bp>2e<274$b_|h_*_DC*|+h)X^4J85lm}6t-;+ za=HK0ucgcecPTlkCm1cix2HAvq*amZ&vJ#{SP-BRJ5~pdbz7Yq!}GqC8&9ZCRtt1r z@43MIxu;4BRXs;77Kbt6%`Lngrd>kQ+}_V|X19|o9PXW)VZry~@~zD(>Ip4UD`i-k zG+pti7+j8(*bu`D&e7uEMZg2}%p=+bfl-qVhM?z#FfaD%A(xN&O6Y{Ql=bD~X za+9;WBRUfyI8)DHI@23RDmILq@^Mh(XQ0&YqZuxbAOmuC?kWe;iDC#O1KXdiOODnx zPS!vF)%hj#oP&{s9F8fHXRIB0ucH%vwd;=rc?@X;4Po0DkrOTmFMs^t7Y-h=|~rvcL$T@Nx=LFtR;nA z3|%+Tnzlb3G}bt}is}Lm3p!+eVzuo)F6cK3yRV}|=^@>E=*Jtx%ktH#Tg1Wv5;! zYkQbwQ^r++8LP2tw$hK5RnJlh!OcpWT?0oH$>Y?bD5OZcMh9w^JGD{C=cpj}s#3bt zcD~2|*W`uDv}ZWatvpG&a(MU6ac*FvZlbG&f0u$f(~#`ydvqq6CQNac3)i1oReS#q~gNo|Ip{Y(SgAO@u!Ii&NIgu6~?7~4t1!aO{X~- z1Ci@aX9`X-anBV>Nh^01?jVpiPPDPgpy7z%@kF}_bc7Z8div4=TcPLFRJ})gBmdFI z4e8gdDljeb`gAqOqp8f@#bcAt(~1+8`51H5Q?-G6!lQ0HlY#5rmn@5%;C9UxyVM?n zD`W%HoE%c`+`uRprZZO1w({?Fx2RA_?Z1Pl}Q=XLbDcjE9 z$F)k1qHV1NMjM9H!Sxj`_AJ4e6OK)NC(w2j?y)YPZkI%p(pOJ^kHbsp5cTja(% zWK-p^El>Z|xa_O|0ATeDDoBRyq-Wa|#@&^X%7+K}dHF|N)UogmIUS7!CMy!l@`0Yb z9<|JTMuOryp9<;=BD8ArS~7vqWmpnD@9nKnwl#@t6Q4q|JM4$N|P4pyC;tQjaq^8a~R|AipH9K2hmj z_6fHOo^5Y>p}FEUwfJN3ms+&YrJfk9t>l^SnRiIeNXwsIybnxQo$307z9#UdwR__0 z>#KWYxVDz(QN}|eDIzppoUL57)XMzQaxQoiM7{CXh-^Gf;(IT#_;SWAx)zZ9f&jpo z*VNzQuvv; zB=k|zsYj*~tsHU~qRD;n3=&WO0A9UXSBz3Vdzi5nn5!9MwmBGJNsemejkDXJj#*ye zi6oZ*AHx-GiD-+$0FrEFBWWCaRIo(RMa}^oiRYS$GM2@d!x+gQHhKf;^{2$5X$gQa zU@&%?7~AfD|IqafhBW=($`_IX@@Z6s7;NB9lIL!4+mk43gChr>{JB`0^`!RppVNy4Rg)e z9dx61NkwLKAOF+vj{r^PX)uxV05E#jNUT_Mf;i4A;qxEjzUQk+-6EfepE_LOdJ)i7 zZ-=r0qp0jVj+GX1pwjXyn)1}?70AZyV0IMk+m2U(=qs0IU7f5rK1K*R>za{Y108*j z6qc^#Ut|B&;K9J)_UAP1;DM2!ps&u7zNfixIW6;GQijJHhXj3VIX7q6d$Hi>I3alH zRP~k4n{Yrs>d7Lsk3mlBQ=Ir%`)zMfFeFai!>u<^iO-Fq3lQ?clEimE=QY;Vt2g~@ zXV2~*|JCqDw@aNa?kS`pJm$go&-v%I8dbfuos7R_kX!{B$T=DR01wu_E)tT5DeBZ$ zmCAZ8pPPNp&IluSudg4{wXW?yaWWD{LBZ?Vw68n0ViVTK69iftLKfy*sO21%8OHCg zr}L>KwbJ~SYkg)=0mjz{r+@zdReDNwE%4nK%E{R4w7YgTP-Anb0IAO{@Ab#vDRl)g z+0129@$5N886s*@kf}gf06&! ztEWh)`N8Q^T#^Yn$0LgT*(Bqs?Mm&GXIvh4XX{u#D%EYYXVb2))UpeeMcSplcFM0G zjTF;TUBSz9l+$eWfqSouhh)2X(mN-|-GLb3~Ww9@2)EKM=FW6tt{YtZIPL(GbAQc-8Lo&mw6Z8#PfQZb$Y>M2R;3hYCsroyry zBN*gTjUfwd3J3!Qew8WNU6kV8nA4%A22d7b)Si_a=nzjEag+4oQ)?Gkf|}xHPUf)ge9{A+iD8*khd3GH6a%jjVCOAahg7uX58@ zNB`3KN%S@V?M6}b;-h^Pl}DDG9(q;#JM3pI9mpR>`EiCg=xR68ijW6G(4J{*!My|; zYsPx6mOg6 z1Eo1-Bm1@B&>h`)x!_Der~6NDHX5rxzQ(Q-vb`B=2EOc1ZUErX{aqv|IkoA zUR#s;(8Lf%I(O+@$z2?GVILe5!R?xrO8_?zc%>z-gSf@q2?{_5(xeh{K?I-Hl1Yub zg0?vT(9R2dyyqMdL%oFA|IxG`DtJ6`oK%8bsK*&RlU!#iW5Fa0bte@pY*-TA$0HQ| z0kOfj<2^Bo=6)yn*303mmD|I+%eNuSNJfyfKF0m1rJ%UL#D#7|}&D>!Urc zJ^icQpzTQ`&aUi_EAXDJsq23Vwe2rklHMzOTYGXY$KI7r9zw@GPDkTdUKh~rynTHH zmNv3!e-Es#LtEL)A>Dg005cr_01p&mCZL-h9vsfctK2vd5}_hgUAR%gfG_~BKJlN3 zqPlVtMXUrpv{VUAF!RXteZ1J3|)gN{pKI z@6h@CX>!CCi4zill6YeM@zaX2Z64^0AoA0(*K=+hE-P)b%-M3Kw@d;1W5eI}_Em@;>)bUZXq& z#+KSi!)?bw&rfPcWe4Rf!~4sQ^jNEj=DYfpJ#oc3cm+Vf^!B2{T9LS5z>}Qh=NRUY zDFut*ss0hb#U_I1|JC$)31ff{9=QUO&e{l8KSSI6;=MPunc(a{nSpJp2;?;&86>|f zdlA>`PQkMVY`#?d!=~y}AyI}MiChXE;cJXwtU(Lcj%m@x1AKv39AMMjTc7{d^$U0e zp+FoSfrmBGXc{OjlEq2&;=MU&j}jW4u8E|wh1!_|9c!u6G{qr%AMV#I+1W{3Q=-%C z{FPi_Rl(A*n>y(&E)-OnAOF|zp8~Qjiv~F*MnDzOBZ4qb1DxW%8!&gPCeK!u#eHT! zI>J>M9CbCB;46^?Qd=A;RwEv~(x(3abt|sH%grmDLSUZco&`t&9S0|`HO;fXb42bb z;Ny|SJxF8F@mcbg_doy8;7P~;U<~I3(u@)E^as6ua^-8I+}~luka5TzfT2MrBObuf zu(s5G-+3CLi0m7I!mD9Z@&2{5HOfm1r~@Q_7pL?d)fMSkr`%NC*~w{A zn|qmtp&g{L7TTbw%CYwK{#B==X!>TP@+IY*B4p}Oha>C#Yp!yXV|c!Zk9OxlZ46eh zEHMxf207=Cr>D15NpMm)WNC8XWRL(kKjZwX&69UFOR4|T`GNH<8vW#pQn8lRNhD0Y zvD5zm*H*M^HIB|i@Q$FQ8BX&$a>I<{(0@Al*5?{YJz{oUIqG##MA5*aLzVz!0pIEU zDN1Z{w~QXx>)-MB?OsIP-OesWOeIP zqZND}52&Q#t)NBsKmXIAr#KJuhR!(m9@TDhoaZ#P>i$;Hld&gJL_y=g_=`HYj61kMhANDwbhR{?GIQ#b_xOm9;cEi!q}M#{o;K_DKW*_ z`VU)XVaWMFnNCW>UqX%Yb`S>wp_9Xrx`tF-ax;J^v{TT0?H~Wv@i{y< z5KL_YoaIGVlfx?D>{FB8x|(rE3X^M62|OwooQ}Of9qOs@p%1radgC;bP3$z<>O((- z$tUFjK?m+)yO}Ai;zKr)@va?s9SIcJ?Ps<-pm`%>{817= zl}|5W%a!h2xA7LcV!%VG-I6#P+jk$0YgqhP@g7>5o<9zgXXReU}|`^Bw#=z zpG;DWxmei*n*0{>;H>PdKoTltYTS3R$iE}6J%Oryn3Lutm4hhT*mg95fW{BLXuY%_ zEzkea=R~3M2GnzozaIjwjQs*$p<~DM5;$5kF8biiR+*Sz{%$xf`HqP z2Z8I}i}L6VC8!3=@=so(k>toZzygzxVaMJ-|I)@20E`bqoch#oKkv>vjA|U`h^8Jt^;?TI%Qj z)6Z6QbGra~RDrn!?(`g133fRiqN|d_W>k(biW)*w1E|F-TSh(h9+d$(eFt}qeQZYMm{fr6>Y$tNI=v{?@B!WKCsFv03Ur#4x>Y;)JWOO3WE zG|&Iln9?<~A~_Oq-#>WJ-HPjRs;r~t;|DlCl&r)M zM&&(pxJf|%4+jIyK17jZlsk@TmQ20mMB4_;{4CDP%w+0~2XSFjiy(#SzM9RcKHo@m@8 zFv+-pK43bY^s%BGijd$?sggr5(nDsQs$c6BD191H~#S zKXg?dt^?2Cl1Op>dQl3ap5?rKor z510>ND;qg(Thmkj)Zh`mVT^O0MJVT!$87pn=P%;a_OE@1DBMO)Pq#r&Qdk}hOKY0U zq^tmQlZ;e1%ofsONeB>QSb=N|Xg*iAlC)nfs;`_pBaqlwEXU=-kE zgZ}{5{Y`nQH@h}|>HpUGel2-YX-5s~)mZw7;zE~JM^%(U301tW^T(HhEI*;Z50P3$XD?6K8OP$Vw+qBpj z$t+htG0!!3?`I!O=Df+It?o(&~*Q2JD50Xv?bL&>F zhzrL6_wQeua@ii!cY2xgu1;8!TsMhy``;aS%ljtaG+rLlHcL6`E+r#`{5Y*}b6oeA zLpjB@W2G^q5v*{o!~<%e=mk^1xez1nILC9_-iY3$yvL+EKnRM=}`#F zD96j5Mr-selLz%|JYx4}&*N*lwJ+HJ(DEqZE}#X=b?2=1kf2}ya%tinjmIak^c0@Dj^ez3DQOts44e*XNZ?WzaK<_VQr&^|L)JaS@CHXg zns9_4n1uj!7^FER(Eri%c`Zir#dfZG{{UKYjgg%4J0v=ub3;*dM)->Z830S%^h|?aL^~pcKDn50XH@>E4?J@2UUN z^LMrm0bFCb%?oF-09=e7qzqSC<~OE-8vug=OJ|-c7t_#OVUvS6*$9&3tAmc|gX zb}f0EK+6&_)7FKMmIQb8trgK0&~hEUPXP9(h6HoT?hO~Xlx{dkK?G);lKi>kV0092 z?uPU~|JTiD4UC?BY3SGh5PJ1JtD9>ajf$)bHN`kRIiDC#?|J@~Ss|Pa^QX zntVs7>pESF#U8Nw)#F>-fuAB3xOpFUqOnjj>r}5@o%LH(U)1)896&mBkPb;vx*KU3 zxNeY5lRobg(QDzD-_V>mdgJnDX}t1;qt2k^hTu_p z5AA3r@^;X{2iK{*MCbAlWmP>=Q{aTcp?1RlI~#lz$p}D>-g~j7L`qNu`gi+JuzckN ze;E9y2fRd><0A%jB~MiFg3js=$u7|&;lhtaZ_{lA&jXd1{L(d9ojiomm;y3*!uHri=W|NmMQCm`giamYqr%q95a9E zt>*@G84gwqsfHdNz9~8KB_!sH82&!21C}Flc&30Orvn9}?Mbg`>FV3ZB6>?yecpft z`5ib&VsyqeAFo5uW+NevfHOLgWVhGpu2nXPu4sL&vnm&*z1YR zc(}NJO!)^!$+A1X%UKBhiO8ZRXzn^~#BI6%;|A%1^XFfd;QvO~W#u#so6g>4{+T!% zkAo1oJ9c*yx`bE#oBdT(DJf}ZwSN9wN)X}1lL>(ht~$PNWg4)gDO_Dt1IiOtlhFhy zYq^Wgb+I?DX^D-qk1oN8szvc#jMJlWE6pK=r<{>w5lzA|AFs{>&dG%$Tf} zGb#OXLRUNkiL74Q`B#uTJb5m%l9AMa01N{$fEr7}6gMk*8`Uz2zachi&o3H`8tS0 zp(>8s-TH^Of2_6M8O5an+44ER-e3Sc>smEh+y6~t=5CWu4viW+lTMBx>8n&}hSD*7 zUVHD?yPg_$4SBy)t676yAha1n=f1cLqxEuAr1YUac80bo*}hrpG`T_Fi*WIO$xKRf z8Qpp#x>8mS|2R!myyF~iXrgkmoLZC**iYZ~i2w5G56^jWyId*ncvn^XLrqi&wY? z?JfQu%QHk*u(jH#j>BCxzrKo3R%a65df>$KrRuIB=OXbb6^}TtiiM>#%OYYK8Qu=? zZpMru+|!E7MKF*=tv;xSX8)(YmrXJ|IZxphRk9l%OIWLOn{-wN`Iijd%;oQ!N^T=( zIOpsRA+lu)r7dlmk+ zE{{8AFbf;rJRtzan<7A~3cVYkw!9MoiPhNB7vz%vMr$R*J=afMEGooGAE)b&zZ?{9 z5hVWBLm}uC@N4o3a^h)y>59FC1tToR$vjz{LGo-6Tm^+OVHVe)qC~y7>=3CTGc+KE zTVS(i>&%5-y+{bx&_pOIh`UT%s|*0!nn46RKUe*e&`3{%W?#QUdDugL5=HW%5cxVs zvUU?m^a#eVAQ~UL3bt+q&WJ+Dd3f(7ja0nW8qgjVBX3cS`! zRhVC>i?8dYiU|LTW-UgLXV7z_TX>qjKTf55_Bw6Lg=s7$BE!Dc^XefGZ{IM8=_7j| z>s#~y6_d$rb+W9mZm2v>@UeqB%wXoWRq7rM ziHbvzH9QstEU6(L79?vR#r@T0`hx@hAHik7Yh1X-0_h#av;V~9CSd4A84@W88}~qX zx8d*ighX}2lPDq`=m=wzsiW4(gW`<=f%LF-z1vJ_mwVm}a2emCygH#Yd7w7THvl2j zQ&zcTscaf$-CFih(c$-bsH?>BLhe=Daebi$RvNgQvOX;`k;v|27xc6Jz}-4*KVjaN?_N3hZAeR`Sz=V?L8@7 z8&DW&|15ul4d6ow*wcpf-sB4N-@NdT9o-I7@FJwcHyx*J`{Qw=Q@dh0ruVtswf|+u z@(;hgd|OXxW5|Z?-|WXfJ5z2AbVAKo&xD#XALLH8@0_A|#bq6LNOB9W9~Xe?SEIWdsL`Uiti=Zpy!?bO|y4CcQdH@R?YRi$0(w}xyv zBiJ|K?F}2!~d+>!_GnrfR!AH#OrN>3!(fTFly#u=i_XvR0w@&92Ke1Xt z8yu0P!frK!#o7EAcPLte9Iy;U`IP8qtbpjWnc>^Y!H!zQ&$h8h)qjrmUf0ITBgF(g zIi>%LTy1-J?A%?7!d#q!CbPsInd6~nHbCvU=q`x1wxSc^#g)sL>u3#k3WCneSMFwa zO4(O27Z%TO<&$BMw--I`cB)}4=-@oFJtO@lyKsi8&4z>dtshFLxZ0*?n)%epSPuw( zg^Kl>29rt}3pwn?ys@4AUg2DGhngL$?#XSF!P+BlyqgEsrF8`Mn=_0hV^6J}x z_xw;(ep>jr_n3Qt%Xmh z{ku7{&KB(=iRdi-hIOjRyjqOU$sRlv_@Qa|G#BMal(^!@R(5+`^O!dq>d&V;X?f4r z-r0t5indka-Fm+VtkEvK5e=l=^xGDi6x#RzO$NGF)c!mc;d1wEj{94kvLkHif@Q<@ zK@f2G_d_!%Z6;s@eR=ost}0LEDAMku5@z9agT-gOV!G7=1Aw2GK5OpM%S;y^D2BL! z#DCu3ikvyO9c1p8R7lnX@Ok4r84+mYa){~F>N%K@!Q-!7iJ~#;g*Sr1`cEe5Y${tE z{rsr`MI6QbVMJk9W*0+ZLn78PbT#xZjkF_H?|p}X_|?1H2l<*rrasa0_e3{acHlTn z3GBz*Z|pV8_&HA8j<bXuG5tZU3U`WN;Ailv)~CXeQ$VA^$+^80X_jVxQbbZ2mbs z5;uP|3e>HcW)iFV=tWhMIWmll$#o{S6@?}!&|Lb=T(mnEJs8l74M5`gCy8nL{}4$* zlS#qHmhO(jSt(Q_fPmw+Wd1LyH=87B3L#QYwZ2(6ShyDuY4W5X;tv%E+Y+Iji_KC? zso~}(#ont$Y_)zRn!?Jr)L3x=g~}I;OU{VTVt(@XWKap^{&hh9=WO@s; zNwFQ{e>)OG@|$Jkk-CVst*o@t63)`Xu6LhyCH|fjjRDC0IOnpio2jqcx=5BlGSS5b zBLJ)2q%1z`2TYkm2gKzLgQl60UEKrDpq_pB#iUo$9iz3;4w>Z1ngvc%`pDhKs{_~1 z+&1!Hso)sK7OMHxh@Cl4TYFO)B^=hqoU~t;Ros+g-*nG|R}hYR5HhZ>XKv!X=olqN zw@&c)$iu5Lrls$hzFI*)W&?L$6{`4h*=}xbFVYXYnECVe0IEmB zK~;$!aRyHqiNYaLx?rHSrC^Bk%|c7=#CRSyTZ^ecf+~ZPn9jT5$AVBm7w*_!b{G&STYcQsyN& zF)>a;S~Vw1%Uce!I6xJOD~rxa;hT&q zA=b}7To=A*`!diaWIj|){`C6ww40uQv>1*K(cxcf~LLa>J6hcNt>7S5J_> z`Coh1e-eI{(Gr}u28^PM9~*@+0714E-H?1@M3G#9NRji2o$is_B67USvGKbF8{spF zCG9ocx$55c<*KQqo05$3wQWjiCb3tX=Y6#^ML%$GNiP>$`XfoUx&C5>8YN~xFv!au zh!LX>-jF-i^g>bsJ4*xz0)M|)2}c}4PgV0W)kzTQOeI_(Ba&qG-;)cOe4X(G6upUd zxPJ~*gS%>GYfmzv*Wp@|qPE!+8qxzV%0kd}-4f3zSspdPbtFoo|5bkQn`Uh9GMp`E z?>@GWgqPPD-0lrHcmWB|6MA5C9q~Qk%YjdB=e`7qj2<^LC7XN<7jw`}iX+p2q-Vti z4h9jK4>POtR;>_R-vSxR*W9Ba(IqW3ait!VCk^r0l-LA?aw%x_i;m2<(RfAg! z<08giPKgiKaIEKB5yKE*2h)O8$T@hOU!EDEqWoOV$IdZN?_@O5<%B+KCKsLM_F=gq{8eXKQiV@^~$r<{;9r zr<(;;n%fbSRW%wGKI3BY4GQ$FlhoZd%lf`q{f&9ojp6g4+KYyeVPHK&`Hq80aYyp- z2i38G^<9o)OC_ApIPXbKi)HGy^vDMa+PeY}e)l2$M1A!IHwZ*^mvw(KX|~&7J1cBl z2^{NzEH0Fo4}$theW!S`XDAP3IOx78%2f2p4_D@uXwbzE8e>IDOamF4&RE#k-TYA= zrtXn1TJ12i8;0jyXvF2|MighO4(~o#}s?Ox7~ zg?)&Ctwf14oR1w+4_!=1yS=Oao=fJGW@3FB2HI2v8R+?nc`&_rvucM#F6qa6x01e^ z6ZKqyI5^WQx6*)~i%*&os}Qm=Ud5*Ed{gH&af3wkq8Zb8Gzfcl5vjSKvRZ~Q$O)vz zh&-;xa-BsTyQm~_p5y(dI-Hh*(=Sw%m^B7+8X|*T+{N}VuK7G z=bT#-54Sl9spxwFqoS~mclcywB_HBL`YWl6@Mdn8=Vgjlo|!1HWW;$+s?!s1d*t8@ zN!m26CH)(py(yjCj_VG?0&4~UNZtJy(>mIBTT)*8d<)s)*HiTXo8Wi?n6w?g^f_r3 zOgdk<`{EMo)W@%u-};W0rnllbiDKa|JaY>a$a>3dU{}FeDygqA@a8TLGrxt70(d8M z*&-Rg(d}B`AfXISwUds1FoJYujgqbZ0H-{CD=$3uBq5>TWdM>CUw%Y5o^(O{cl&|; z=XyX(|CSw2(!PfCSgl?)>$w>q~Lj8A<)7HO9|KT0TEzyD^hefA?Liq@M=QAI-4O=V^0T;i~q; z-L&jiM_(%>nv!FLDOa0aT%K%KW3}W*0cLSqI=(J65tcJo{fKrQ3sLM<+sSArq}YTN zY)B8goAXnRU-vpxuPQLNQuBo*h4``09f^Z_{~DOqyXs1RZo)&$kcf>^un7^@(~2J| zCKT8?{p)qq)Oj_ZFE~itP`a5v#&6EhQ)T|ahW4xE!Mu#N(8I3emH<@jUlon&bk^gm z>Z|Wj9C7Io;6)tS#YBey6myb#Cs~>UBWSnZc2q)#C)Iyt!p6hViIG7cYaS_Ztv>S*s~W!R*td&*(v z&NcI}%|=vEw9_1)e}17?nLVZ*-4Bxdy>RT|0v)P3_Q*qak+6599p_HGU}R+!wS8s^ z_W#RNW0JCw6L&)ajr%L7k!R;?nk6|Kf25ne(LF#)tTvmdMqHFP6(t<_QDqm5a)l@i z^|DdiQt6eK6g`nPpMP9%<{H~{-M<=*@-nps=9O191eh!y1AePy<1UG_3%$Hqpy99R zEVQ6B6T%?R{I%mx3nqVM`;duCseK%7cG$-No(l6OOCLtILLT0~=p6=dXe?FotYTz? z-PPf{)Z7)n?Bqv#^o&NgOrw(qpBb%zAGp|?Eo)M}th~5do8drk*PYR~w=6qf6&L3K zX!gbPio8NnioC2$BXNun(Dvs4$-Ky-NxB;vF$bq&k`rmW)%Lj1Ge4K{7{xX7t zSoRm$4lhFj#o2hzvgAdIzAA?V=iwhNGkYl?2I_;`m88(0le%YdnttnlY}nxwP|DZj z=tA*;zo3F|CYjDQ@DNTv&sd{2ow_(mGMZ)Iz%x%AMwl%l54Xy+{%fVqf4z@6`;paI z&IS5$1KqyI#&#K=r0PJnZU;Qn8IR2CHEq3^@zWesGkD9UNrL|l!{|7bQYK1!iiCN zb&dh}4$G)GgxFygFWW3LGtF^o=giqw=RW^rPXJV@^D&-bjQJz+d4w>yZb6?vUv zie!%%a=u}LQQ8zrj}W2hg}n1h9@cQY5Bs!}gg8DBW3J8&z(?}w%i=LglXLkV>t1SL z(gXJcpA!n?gd)^%k&i!+X;n%wes4Z#3Als2%V9e$Cf*f4RGVXM40F*|E{+_}-&9Q5 z@!3;;lw3@fnsiXcyv9;%{2YgBSgChXU`-tWMSMpI(=k1Ozg-w37|R+dLhBY3 zq+R>3H*u3}pf{vzZZt0=rSI-9bxf}xzyk$8RC?-z_vl)kL1G5}ZgLu$`W7CiQ+=+G_&FLLUv|9aM zvZctCcA!!8dw6?Ab$~)eb@p!B*!7f$#ZRs>UD4TU=!@;T8?Z~)44cF-kos1Z-Lg+G z=|s18#|DE*~+d z+j&`DhdA(N&raPSdQGO#G+;eu)p!Us#;XrQ6hjFM=Ud~Bp6TqnXRDrxShSu!OFfW| zZCmRkzN&TnB$>GOl)JbZoYjcW)P*Ax>Lnr#%L6*>2_^bgbE*&8>m}Qs9r!ndjvVS? z01i~B6!@-ALHSzNzYberD0lV5xP(5$OO=yQ#L!nsJ>y21DihfEA>%m6j~X?XnHNuj z7r%#HY9*`zpDjV|+5UWY_~BqQr8eEnQR5lx*!*Pjq;0r{J1`$BSc7kDfxgD+L2)*9 zhr|yx>ZUuK#T z&Pk^EKhnD2)VLxSV7rh#T!lPYF$2x$;$Su?^GgK9I37la`^-sX%Oz$OoDoSy7E zQ%OgL*V;Ik{oNatTchVmTDf=nzLE2!x%xoU*6lx&aIkduXkqKJe82|S!)QH-3PG?x z85j!YO#CJg_2iw!$$AdyJgcI>g{NE}H%IR?56sMVKq-(-;%Bf{0;QXIN{H`OZG2`g z`={+#0uwj&J%>?3Xd4<4QaK=&Pp~AwmXDTAeJ_>aHl=M=QuK^W^L^6S*18h$<@=r> zp%ny|{J%1~bmDbNtRX+?8Hf=rJ)(!`=a&}gvdS657Iuan(g&-c#>BsqV1B@@Szkj7 zhzrQqvBDL_C#$QG;?QtepxxrPPTTSkE?g?7{mYYv-%RKHz!tqkQv;sE8jgb(_csy@ zPR&EZ$;~qf2YAE@ZMRIE41;PcRv#?3d>G2jPUr~IzkzzEYebIw#!5o5zeI*A*VV(~ zlb1RfGL7G&sTI{_EvlM3gJ)ul7>=ef$XzpXveD2JuHW45k9HG$YX^&@W54&uu>|$f zGG4|53r}Sngr)YOUyQ)OHHLCqE5H_4rP@nqAHOOv&aQ?t)d#u)nyw)+*DXU~P`i(@ z>4H=jYuFpA?S0nmkaHc&b}9ZY@)I;I;lw~%j?9L&5AXUaq(k+_y9W~ZNGBfIj`5~*K3epJzOUUFE96V?eYEEO%`8!(c zlg07xo>M7(zK!3n{IKTLra%;Ty5rCq#>fZX#5lpz5U-gi2sm-T%cS6yw92u?nz^pc zg-bXB!MLLHIv*#L|lYMo6d#&1c@ zg~OyxWaL+LEPMqQyq#y_i*0hu{G(eNFpKBob&=i)09(s1pQ?ZVi12PK(8-5@tR!kn zQ^XDJsO{DQ*wsJS&#H+KexoxYy%cRqraO#~T`JsRe)-R^Z@kt zB_-KZS>)!+*yqt=9bP%>SRtJ$vfU%qj#lVEA|0?;yUQZlqMqFK(){u^hy!T!=mchz zn>XbAcsoYx*xMYy_&R}(!9D(y)ud>nF|+qvpIJ- znqT&8^oT1#o^TpTQ|PeAaa@3zt=ggd3Qnzhf$vUYlhn8EMEPof=cE?^!7h#N#buP2 zsgR55bJa{9Kr>tAy?z?1A7a|H29~mWm3FkFGvy|sgu(z2P21!tCsy~;X&I_b3EEwi zPXNCdsyb)iotKgNGlI~gk1FnWK| zxnV;K;Zf&=0W6;dCd}J%oj=Y<2C$XN5k*XatON#LYfR>rn~?N)4cBn7N(!BqP7GekZys^+EmNv;{;@40B(8v z8YvNdg{=&KD&98mIWpT6SKwN?sewD4o~F{sNSy~DJ?vReHZQRnZ} zR4F-6ugqlqq#T9I6%tKCSM}7qDXvYZ`aRT&f41$i(K36W%J*O83()zkXF11O6NvY{ zFbP>D-uyJXsrOr)*>;B1>;XtF1A~%U#pz*42L2U(O{^TT+h28td2;?yZjceWC$zWz zx@{GpeyTXQuBt-KC<`2+0JvOBF~4KX{bGpc3#`&hY2@K8Sh3HNP%LGXAJ#bZ?3RNB z$-mj+s#VWTO?n{juUd^JK_gg^7EixO8lrsu6J|qkm5UN_0SbfU9zZ+Gk`8A5BvB}7 zis$j1sWB0j?)_o&%$G8Hr{aJZHPWL?{U%i#GbZK@7Or{BZUQu6wn-xZJ9`E#b&imqEH*t`TR6H$ zh9{FU|9;%w99$?S`xh{D`2nj)=Uw<-C|gsh9DVxT<5k8(KS4d;%}A~3u;;il)$xe=etqV!75jM`=c<31$#Jcl zY>_@HkN1X=>^O7PF9&1AznG$vrM+aTwmB2UTT*16#exTazl`eeLaMyp2YtJ-QkxX? zZ3e9J)=FV%!}V5%RLG#FZB2iGp8vQ$9M$%7n%=wO@jdn<_dw+jKDN2vj+WA1dR)V0 zLrTo+*Zl8L=ilO`5}rJ2B_hK`3tx8N;>_qf*O0USta$DL?I%|?Lr5jclc4BBwM-kt z0<|&75#&g^@}pk4-5Lv&EqRZ74-~by>-}Z8f{(F`q0*wI#3!7+uNe9Vt=$?q&g4^O z_Iovj@QDAgQ~J5rTPJ;RcvK--eAQxsv|%XVP4P#wpV?m`1k~Xs(G~*=phIotWziw= zs|xi(&u;jGCK123Jt8X+e?{&txOTDJLG2~Ia3uYz_{0Jr-m{ZS&)d*|khG~Kx}*GI zgpZX#3LO#v3kbQ3i|=CRhIPc75HN`<$W-(&-jn9?6gIW}yJbJ{IOaTBgI7%uhq0Mm zhrIaDoa7?x8qUyZ;Xc@Ul8&y$lWA*!>n6{IbaP*mfCAD*mhXrV1fpyOJ~u zR;^*}v3=Wqfe>`~1{8@D33`qXMM@NFzUJ@60TvY0)V^@(i?!}OX65&NEb&mX{gIwXf$BUTDi%H7pDh%Hjx)R zH@$-q;kA=mMg!brQ@bMl$@tSpbkE^tj{Q5f9l>j$59R4^pI2fO z)CPPImU`2(Ha|MS{@B6_Yl{2vGsA5)@xv8ifvN{{)o+qkM9Jnd{n6|#d;M)hpq3Y> zvo@bY8-W1JqwpRyYZ7|xI(R>HIVS}aiv_^5UfN7uX%M&47Vo9ba0?6*Ey#_+6&M-h z{HFFco8DbOm8%BwV5^MCx9fYb7UdQaO@_w&&t`}hHB~?5h8~qu+wcp_q`Y<_xqU8_ zunv8#sV7v##gg};*sa)I#35ePUmZIvUtyj?np zs$+WboyUBpP3ytFq0YvChNTN(H`H+^@;heUyk0o$1h;hrr6faax@99;-M%WNtZ?KG z!ut_?b1|_D-p8}PE22zru(CR1D>_gFHP#|FjyOwwE=Lq?&3vio5%z4DLqrw?Pv5mR5!ZByPx?1ON zzEO8%%<)U}>n9ZIc_;kR-qn9{3TE7mS26SbTDpX{YImsF10oY!G&?EmzxLDyF^>j`v;8+Q%mehe( zM~-X%O4OE7V>I$ur$IFs&P*x@ETI1@vL`7n>-cB87mbr&Ra(RMXh7CB6SHtVO|nK) z-}HST7^I(9V(a^Rz)H#?E1;n%q4S+f0rlc5wuz&FE7LcsQV?6`#qrp5-9tp0i~Xnd z2D(Tdd4>;Z%jqG9P>4509pZ`KVJo{{)RGvFo8SKM?M^J|FTA+a=Yl{zp+s&|eCiy= zuH8`OsDH%1ND<;^>a5yjPlfSL}ZX$qN`WOQs(iv0#UKKnlLn0G7 zIpe^xWJUUE+`GU)%9%Z4`Z+$=5-TtBJ3s{Pslqza;yq4CJ2hcd9%klph*QFb09ana zOffv2klp$8O0VH!#hzsZSbiiGr!#gwn$pC@#QRb&a1U}xaV;R#d+T@WZg1*s%e}fv zOc8^7M-bnZOt=PzYU?G3woknO809IR847h8K z8vT}o16SDN9y9E*g?38d5-EXqBBHGpU#8*)50U9wwnjGnrx-=u3JB7Az3n{7LYJEW zhis!C#T*ECYR$$0K9;youH`nRM?TQ{IrUNyBkI6;Ed?y9pv)Q)1NeU#`7_ZuAFEPe zdHI8O&!%om083!W;YWVbi?()(x1>)_*%m(iWm@L1%5ig-C~cZ4t-b`^VJG5G4tgZT zL}-(yTTm0Lg2gM$X(na{Pd5vk8~iUz)i*BMoE25+|8?DsdH4H`dENtjPq~sdsc8V{ zeh0(mYU7#dOof^*X_hyf!JLNOBQF9ZQ^rbtgLyuj2u;db;;;2^EIt1;v@TBFo%TIk zR?$#uAw3N~~LasDFVr{8e-)ht|h+wySv`}9* zQ>?D}D${xfYtp>9q`ttk+x7uwZaH7g)sDIkDF)KjXjklWLx9=RuN4vU3|bP_#~k8@ z9bCi284Jg5V>8ThEDUC~OKNAP+&OCF2$Ps06XO@*zs+Ch>g$K>_^~#b`mCq0Nb?yt zi|J&3nTA3Uovlx!tstVPq_-vxuI0bw9v^fB_NlxmO&pOYg2DS*IL?OZoH#Rx$BrZ; z{~Gqc)IiZ=aQ!GMTN2q%jXO7 zpZgTe^n#{?_*bQ7!4v10m?O7t-%;TW*EWWpldCeCcUGxz%xpdjeFQH36w63OLm8X9`jV#w87#Z}Vd*-qEE3{I>Le zS-nufld^CqW*fqiYPgw`Rtoa{8K=J%J4xW&&nf-U_wK3eXc}lMDd$%O^oV`}gRHeC z8dTg+?_q}s!(H<-Rn(5=58N-MReBVuN!ofq>-u3z>{e$7JZ6-E_)Tg-G&*i_VR|Ah zYA=d+oAqKKaA-;;>k|OBs`Wy-MycxR)~<}!s}lzj^Y#b#HNjjM1en%OKotsx*B5an zI5iHZ1bX6-8si4aHpSDfMPUH+vpd2kSfDt1Y{DsS4NB3ZaE3_X)c3?R1a^EQM`dLj zdaPWWZp@IRL&YUgxd;12QO@IwUTo$md^~RZQiiwL6rufTtJNqjxhr_(o|_me!h#-A z*33($0BN@R!99X|ZttWx2XRDfkrSW~)%WP&=ObWkw!E>TgtsE!0OKzRM;?ygfhIZ3 z!mx?=3l=P(oTrsOf)(Vvb+@SRE#2t>V5UeKz04oO7X;ztP)+K1(!67@zubpw7{5>S zyRTrUi*0L=Qd@@E-62h{@rh*he=zK|F<}<_eAVBVkH|!tnQYk4hlmPFCRrLu4-FT; zRw1NoJD$WBm6oD9j=}SP&&)o0@p3$&Gy)5hC?QSKBoc^q!auNvs%+Sz$U!;V3%ZrD zwbARAhG@T^Ym45V5M=Z_0+ebcfotZ^}QhH53Q)EA%$c7oc>2oqC zQa|#Ll{_8nT8{76vcj$2$oGxq9g=c}F8z|Ik_FrxLf1P@JU`NzS~?~^zcJrjN+Z7< z9Tu;R5qB6}qtSD8)BRU7cD2SfrjNuOtvCC8xEE4J167J(Fu{Y!yqqr=rT%4Rh44GdsLKdzyvJeusWsPg@FhwlTXpRmp4+aC;WYfpp!(~3BCQ^BJ#gzqH%Tr!K3K%Voz-T+2QbM zS2OvK5A?rt8-x|TTPty2&O@t6`9n-byw2qI@PI!#7Os@rAEIW9yu2)u-Ws{X8XdLZvFOGi8y zHxdOBm0@MmRs8P+0fW(Nvx6p$t)#!z_z)-(DWS5{lceT|nSPnWj+x8#@=Aqii>G~` zQG128UXof--tzs-3x7(=!)yU09_qPGXzvGo`F;0K?XmyAU@^O}WA*?qw;uYZ z*UMW!_{w!80Ur96`wi;2YBREX!#MO<%PpQ6g0?E%^O>6ZGwH|pds{}JowCMRmgdHY zwSf64O{_!H=Q39f;O;`%KuWPN_770&p57`+#;gU3s3QMH`uh`e1{vO`OCp^AH3=uM zrExeroUaZXZ#8WI<%gSH9Wq+wUzj!w>snllRg4}f4mLe_2;{|@q<;um^7l8;iLnrL`y1$!A~=mD3YNj#3fi*$ZE$8DZZ!Z9xDNN$_$9FrRuS%n!`aQH zHJOw$EK%~M->D51RelG}(Vyf0D&%wg%CHIlN)CgXd<6&y{(P*y{kUiPt;TT->O8&N zH%Qu7?xl-AG7Nz2$A+3Oc$*IjNl@q8^Vf^DG4@~#tTeofEe#97sc*dgOSPPq&rWg# z+ZAzesv!A3jG2#iPRmFPbaOCC#Ntf37q8Q-*!;?}$!uIOT|+`nER>Rfr)OKRDTrfr z9;gD%QX&upWR5a$S%yQU3pyQ$6|Y&d8X!UK5}eqvj=~T7{4vX8g6XndjRqcgmmjcv z|4o*(=x+jjDBv`(L+?}laT`?-%%_z15&{XOYe3w{d`Khtl1WoD0H;n7$SD7hovf^c z(1fl*>{|~>=Qge#&KI7vg@WfoG!Zn+q_m$kTn-ib#Jt-viy=b}E~as#O}}KD#bX`B zNv0)44pf~G^l6{w!-OH?)A?5g8AS59=r)Wnlh3I6Qg>gw)tEUml|{}^VT3W2v$p8s z**hIlWbXkN1$nzp&x6=DNKde}uFBd7s`!<5*Z#r_4agiKm2K8ktW9aa%;leLd@$fk z$>BcKwts?0{$!Xr>rlFQNZs|T9It;CWH2d6U?n&X+1xvZre_D^hJSI%J)46_-+P1>1}aHV@Y`7T=AFDL<$s#vluyPXzk}wA1#KBur4{Pz9q-c^lZq zvsr#wOAddkMcj-*DLE|B3tEmxZErKKuQaITO;YV z#~JHj@3eeF2X0hOSjKLs3_o8=8MYp+K=znv^~0O?7aB!n^=2#H4j9EM7sOWZe&59` zoLnx|TxP4Wevam|24dOh;D1Q-dqFnl<3;}fiNky8QZWEoRJDLkV?9d( z5Ek&hnk+k~g8r(QmuSv~lL)K|ZrZ%H3=#l-)hPHkLt~>EuHOw?zq&3~)WlCj_1%#ioKt?5z#Pv>|YgGy? zCAH!!skdY%Tomg8U;48SFAv>l4GZZN-Pnx58XN z`Te1BR43eyefQ;tEqLzufUB}ttz953PJ+W*-DVFAYGbf4eZviCeW<~Q!}ZL2x4urH zbLl+s5#RV&&fQbIs1XAG?h8e0C!!8m3qa5B@>pZp@sw!m4|j!yx}!kTATX?F&$m=G zi5BSYF4LecnjY$SGJ%=DxD_^F%fDieQ7T|jI1eJLfq{*rt1O&u0<5-uWm6YU=hCNE zv5@e6ZDs2UiaatNQN^=_Pvz$QnKl3bBM_F&axvgV@Z zQ(Vp(IA-CTQ4tBO)0hxFqne8opB_f;xL^`+mL z>RS*Rp7i3ent!*3(KXMzk_Fpvw`we7q{XBY`oDKGzN&$Yfw#*cMu6eNA)dY-Lcj~v zfUL}D(#Ku*MYMyg%b#v!({ih&R$;2?%vd459AVL>stnrLmApFbn3+n*lAA!%kM9UR zRO`ftB9R|Xj4I;_$N274(%$&lTcStA;SAHl$VN(U`g#CA^e_e*B*`#9j36*wru$oVP;eQTc_>aa`(_CPXmLKDa^zYy~Dx_Q5*`#2(G1<1(>-^ zG$0|)W0F_J`@ZXJ#<;vm`dMXL>|+z##{l%B!I#Mzxx*_&4mHYKWKVz~+9PfnQBeRV z?Ya($fFicqo4~+5@``5~9;?6g9xY*z^(>F#oDGLv-=O*li120G>x?12S|J1Sw9-D4 z*mw#T^mj=&1}!rdsu9xo%qM`5Ku2zu6c?Iy4B)?PZD$b+Rg59q;{xGeK~W^rXBb2y_rbC%UfW7ESSO%~vhB`=!bt{`*puEKaP zJXPRP6ApayILkF%Bl18MmqL+{h?Nr$0J!4Fsi$g_V58p^7J+h(eZ-f0dBO z=X3AQbvmz}(^2<;sJ-w^-04bq`ooz?C2bOdaxckW9Ze9dsw(`T-o`ROGcuqM~;M47JhAy_#tTb%#sWv@JVNSV0 zD%aE3+kvFf)Yuf&>ALOFtKz+-s;=8l*7ACE$GxSN{F?RnM{_P&b4l~gTTDX|NWl)~ z3SxE;%;GD!x2fuTTkiszELDA`F#ylEm=A5)v&NKg@TcD6Nuy0y-BH_t$CrC}GBv2U z#;r?$UQ7PAH_y^`z1q4RXkC9OuPZT5fibk8vUzl;0WY#1S_$u z&Ji7N`JX`eV%6f^ZE^y4;CD-eOC=IUO{j5aElXuAiU3Nig z_fAW&JPGR^t=(;{C16=yw+J23o-k!fNYf2QYD!-&RgZNf6k|Cy@ok!6QuJp%yTlI& zwt`GFYohGDwC%ajAEeH|8G)C%2P1@_6ei!N(9G1T7azZ`f6V*a4J(_9I-!mJOM%Ss zP%|~jEr}8zS^J*eU(b|l!H?@T&6WpqkiczYjB+jP!B=d>6V_&!^8zTn|o} zhWX>59vHEKgN`j3h6Q$j5C~HUjtPWtdV3+`3;!=4e)}I4?I6wo literal 0 HcwPel00001 diff --git a/data/themes/wallpapers/README b/data/themes/wallpapers/README new file mode 100644 index 0000000..df5bac8 --- /dev/null +++ b/data/themes/wallpapers/README @@ -0,0 +1,7 @@ +Buda_and_Pest.jpg, Old_Curtains.jpg, Paris_by_Night: Scott Wheeler, under Creative Commons Share-Alike, Attribution 2.0, +Prmao.jpg: Maurizio Monge, Creative Commons Share-Alike, Attribution 2.0. +San_Diego.jpg: Rufustelestrat, Creative Commons +Dark_Waters.jpg: Marcel Völschow, GPL +Dark_Sunset.jpg: Michal Winiarski, GPL +Fiord.jpg: Bram & Vera, (CC) BY-NC-SA +Mont_Blanc.jpg: Giordano Termanini, GPL \ No newline at end of file diff --git a/data/themes/wallpapers/San_Diego.jpg b/data/themes/wallpapers/San_Diego.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24cb1f335c1c7360af77410832f469dbd4654c8c GIT binary patch literal 216119 zcwU^k4O~*`-Zpx}LQqr8q6rF=(k(E}G=8vip`ut%exRY^d_9i4EZr$Rjft2aI2vdl zvmL?@Xmkvbwj#P`+sBMeI+GJlqv-6d5cpVQW+aY8W~M@>nZ3-j-}64_{C?;B&Uw$D zuRm+u>t6S@)_wo4>*B|odvDBOBReKO1|XdA4&ogE-b^8$$M4&BD4ClS6Q8)>xdQ-% znUj#jL6QOZG`Aq18@reM@xP~$F?!$uTmcqPfzRPgL0)unaw2d>?upz#J3kQM{}M08 z{0-u~;vx+lGza z8?oNb9Q%7G2qg4hN1;#{tedMF_J2FxXo0sY1W*7%>;y<}1mul)^E2>uB630eSAhS8 z8$!9DG0rh2ny2$P{`SYWsPLZ;M7HZv{9k?&F_*!h1qft#a6vYL#U%)|mTw!ADJ<=)DTdV) z#S0a5sh|2=S(!^Xel~uh2nQzb*%JE9$+67ykg);nI%kx72v)e#**FdYZyBp`lQgei zryUGN(DP%Dg}qRrp3#I7tI`e)w(eRwse;aTM;NmTbhy^fZf;}chm46xHT=qc`s>m= zrpRXY!C+SvYW=+@Ik48Q*7`54n1ppy1phvX215^tCeid#3}YZ_)ef4_JifxB-W{3y z)s*z*2o*ebYb6N`ma6bt4yofFx<)8mz4H(^C5WGEd`FwIoX3x&u^hN_zR@3o!0mN8 zAeZ7$gUmPJN*qk-Js<)uJ+QiOewb*H$}<&rO2Gtw{#nj5%n3n4weX;8?9K^ywu?o)WR^ek0j)JcuXfFEjLow!PsbRnVp0#YAT0AfQdI5PefDMolG{v!AyPxal9U+4Kz0Oj$#q>X5;D!~BpnEVa+dU+UxFqr%V<%}dRewOuWQVtYb^z0Nx zmTxD4p?5AOJsr&HB3`H|?=}nf_suSC`_N8mN919PwX4QWq0I}ekOp?NK8t7Iz|*W# zVf&V^u>(u(Y81`dd<+~myF{INZ=v)~w~sbC4x5bvsbht`D_YXS5h*M*=9BX^b;V49KM}53a{sdQM48 zM20aVyAkjs3J7y4OBMONdsd?i^*jgB;_uLW8h%aYP+Nd|Ask_VTtRY}K&xh=sRZb` z3N6KkI2Svx={t8L=n8~B(hg1@IY8C=Jm~1rU|m%%k9+WI9XFpv9BEQ`4b(gjVqtu4 zHR0`a7d>G{fwPQ>@cA6zJi0tRrTJp@SUp)Pe3cAw1bQ30H)zy!m9I zuZRW=hYIfNcZxV+so&&*Rx4qaAe?eE+}cTLUzdZXmDv~`YnBZY1uV}2 zuQ5q!>MEHqBNOo_o9?;kI);hJnBX!`g1IVj(*~^P){NaBBDvQ4lj}ZEr;)N)~e+4y)FSEQYxbG z{Da~-)~kCF$&uWW5!$b>fBT>dv8U!9u{w>zATeR}2-?j`CvF{f*S=TIiIh)d`Ob3g z{{TmDK|bb$@FTEm5z9~kEJCy8c9tn_Wr%21lW`}RgRK!KRfuPvFgO&cw1bhPgZp<+ z!i4n?{JiSh0%;KuUA{rH)yw+2}S%%um@^hEbb={?rr7HS)IJhSfhb{-vItgt{LZKSPygv zCuQ-)?3g(H3vz*_@dMO%No;;!GS8fmkw=ppMoAW$)zpK0ld=A{2POr#g5SSWc%F>5 zHS#FrDjBhMOqQcXSDf~nHZR1BqPB6-{1F;oM+p#Zti$tP8bOG{`h<4RZWi9DbU10k zLY8*D@&4?F9UsQM3_TJS8^y8?7^>DEFjCb``R+<|fxN zZ5^w?3dDA2*;ZvYhbh^3hb}pUb`$OWr>oeSF!WL5TJ2 z69fkxYY8mTUFjt8rayZ)));$>?waeBOpC@xWED**(6POt(&kP81d1sMG27TAuC~T2 zh)OxQqZ|-LW)9P)pBJlF%DaHdN23l^n8Yimw&muxTwOIFl{$^F#wX7!Kz9C~|7$Ar z?x2N4vm@e(md@>0bya`rp6d@lI4cS9OWh%%E7|xQLy8rKm>R+1ktCd|bQ&=XOEMg) z*H1SxNFAcdUt3_m?|5r(5n6KNpYiO7oBYv6V3zgGaqf#kI9l_@q_I}l1%*sMYCQAH z8xV#q^%|2qn5V)(E}BIwHA0o*;fPgfSqE!-4-Vm*sI;p{HyzIP*hVW{WH|XQFq^+3 zn2jY`d&5=m>;e5$$Oi_@nUP}4U0jndDzl0e^R$AcCS%VrzvUvm70Sx%WW1)fkK)vF zlYcWq1ibHgKZLYvPUC01DB&B9w(i{>J@}ML`c|vS%EW7*z^by_cGZ#Y5k{N0N%H<_ zkNlhsebz?QS+K|2Nqsd?59|3(ZKZnyE{m%f1BkW@`gG?E$nAT|%*mAS9jdtW&u)55 zHMnUpjp>hABSG=^#1cc0)=80m8;p&JA-y`vm)tjP2%t-?G8@YsbLBc%o9r?N7q3zA zw`Ix-(ao897+w40e0gayboC?VnGlBGEa&k#5)G{6yA1~-yP2mD9Q=m<9q<4zWTmhb z`38KuYPfxA#3e+spu;__b8_lsnAs6S9ojG(Q?jgbagUF%w~5e2C)L10n5q#=g@zrP zFC7$hR0jU|I&OmBm^XN+GrSU#@Y$Mb8*3miMldOv{*=hwa5moms4R*>yi?8*z(k%~R#Oe%4+1Y!}hiKe(6-?Gj@L&SVu5*L$})3<6m z8|scGxel(hqcSXhW0l56OzKK9G-Sv9Q(_+uKYuF}KOcwLr>IUtoqlrDcrrQsH7#yM zgqw0DFmv#eL6vMQ+B6%>SeF+>tmA-&=&|0V5-S;wHpG%(NQ3q2SXP0PKJuq^-KcH* z26$eHULzH|1HzTPkB2C2)V`5$)Azn9(P^J!@)_z`ts35Wag?~g>K|Y|Cc>s zcz1Nmd+8HD`6l9>AN&cdH$N_bWbI=Csh2TV6>oxaDtt3SG^myQpQD_iLa8Q z@As3gaUKV;JRd)3w^T%J3%k+L;=4!C4=9|`-g7pN7DH((-F7qw!3rOV@x<@=T+hZP zWJz;Sb~@nSU}E_(CW)o-AY#1$8sXPa5h|f1wYt325U0N$dd04C!F&g|G8s|o_X0$) z{szG*zYEsd`zC~`T0NyP7Yo)NBf<(uIn1!e!r(j%J7`R_eR#K9(jj3{28NjIMHnv| zQUM9sS_Q0~1d4`T7zpFQgWml#-}js=$wM&etj1R~y~vFPvvK7!;U=jYnaIts&$E6; zO{~7iVi6bmcQcD;M4aMj1N4!<(0ImN!O+x%%(Hv^YV~8H z9et2rEqm*4)+>2$?~P26KImX+t<6Fp=>RoCZhQEu56|K+tE|fzz($3E!-NxeJE@Aw> zcxOR31ho(>D@LiMm$LmFeeHMswsKdBrl&YKH$6wGy){0-Rd`0oeJmh@L7CT%~va* z_mlCTnXVQJ8#yYf?|G`%FnK{6c#V5{Gt@%g09GDe<|a6G9l0t=>8RkGU!UTdPo)DVOxNgeoo*w0PE5L7$wB2|L;tbkDS~ zw7lF3Zz}3Xv`;!cw^+foNT!`{w@}GJnwj;ArasvA(hy4+VbWl;lIqDSn-Vmpdukoa zYUnr0rMZ}pN*l{?t}Zsp5&s%7Hsx4+>_kn+PCm<;v(bGj>P5SX=bKTI29tl3~lJSn%Upytcr zGc_muaPtiwHF2s8X~VJ##e9`%l#braH1(p6inc#wI3?IH{GMMM^KsO(1(qjy&O#ZN zgN++Y)B~T)#smf)00HPFJ?1+8_LAv346yvTV&6f%V^e+X1%NTFRG$zgxRXZEUDd$&5z;5Ew5G~rwSk^X`7uMkIDNL=fT4; zbeyhdXo1csZIzA^n-h}*{`f=Yb=q{sLUg(hJS8f&GF1C+os-J%Ocb=#G2ni{@9R^= z-`iuJR(b{mvz({@Y$EwqsS;j$yh~*$8Q{IW7ah#7xB68|yF6H4lwJ%xIGsAc9|>}* zb`t;YSVfGq`a8;3Z@uyJ-ur^K#t5l3ZhA%k-X5{0S)EQ zj%5B8^^0r~_vn{(+@#w8^D!VXW)mdVh?J41N9322j1|Xs{8nb`4nLJv&KSlIsjiTT z8PJL`lVY2!|IukqY>fz2-=KE7)JQB;69qOlI!sw=cxxML!YfG~E`9imOlD($`zx+ih_Y0n?M_ zx536Cm8?;zN6`#)J%&K!HfJ^u$dq5rvA*-j$P46kHtAMVzpaS0f^WDMMDzKj8;@1%mglCM3ARAK2yy(o;;)X#N?#+ue( zOD8HLb4=_3#N$np1qBF8t*~BUyIMi^r0CmivH0Nt1aPX<=1$T#Vaa3$5u0Ph*wtpA zE|u9~F^aBEPG>sQ<9n=QlC=qsJKYAPi}l8D?6Q}w{&i&-VVKwYb!cl8i^~t^&sAv4 zWm+-ZkGC@ViMgtG=?`~avB2b@}}5*ja>AEMNPwiYBt6Y z=sGR1#fz7};q8@3a~?CxzDBaH>g5 zEKs2{rQHD)k?AKj`5!SOy98CppN>@PaAr3P{dA@zIS9+Y+stPE@R~Lu>zg_=V5((x zZNAiIp{O*KzeFF)>eP#GR=7I_7@z?4X7}ke@TiEH&&1>SL$}_(o}5s~+DE z0vKAgZL%hmKBr>>mCFDQ-5OP-5uRYiYc<&393L~ny`&$74H`y0FBuN~s})wg6W%>P z%URi%cPw&6la-BesJ5KT3v1-*@bG%qvyiz1j3H8q>NuxiE~dC|MiMktkN3}PM15IN zxnex!4W^9}Z$*ZQU&qNIb!{cP2loV=zbQ1_dlFRTa+F5K$|tPjvL6FOV%12J7Vq?r z#FGIs;BfY0TQPhnIaEKf6wU0%h-VLI-_<83yM`9&jP+!NoxTOa&qpUGW#nvd$7ih; zwSD=AZzayT-qCh#`+1~C2cCkvi9J`vaWnH-Fmb6791NLdV+a)FMX|(AC)Q!%Sr(RJ z62}EHbd1&^=nB2tGHVol>ycMRE6w0~4+sq*b@3~F)`t60O#zX)p7=gXqnkA%+0$KU z@28+v`7vfeKSXfaF~jz&jDb?A{8NjPw(s!O;E+jaVEl}@Yp26$#1I42KkW0q_sZZ( zky3s7`f^KJ2LRwV{;7L@T)M|Gq}nJF#4gN5{ZbDR9>k)a4I;%KbIz%u%TZ}5eXzZT`V_O$vm?T2QLiz^c(5@`^7DknEY!jDGDY?G2rqif%}4zBS;7xPX#+N9XB z{ZTMpkF1eWNq-NRC@Z6xvm-3`OnID1o^IY!eVBEejM*>{E8LQw4{I{!rn%MMm&~si zwgpvUWTRXQgA~F+WnN~?#wG0=p!$5dQG%#SC-R3W|4_*6Eq=so`ljur1u8F&yvL`h zyKPa34H*-eRIR{kNp)j*tv%v9ubmRUPKW}(2^;s_msPV}EzI^lRT+d)<_riF9xpVR zBJ6=3AbY16J+TMTAHaAq&#@L_5>NK;4x15=Pa#Z-ZHa%bK30e|Gdto|UjJYS2sz*F z+__n+9(e!vpSFd`5NoBEhDkb=md8Lf0u>5szFT$hNBbj5Sj*&$7T-i z4vwB>$0Vsi2sC;ACiYZViS7zcAsyXtxZ9`e>BjP|ZbUKhl}Yfh4Z}w7o(zehP9&73 z3{DrRqMtGPfpZuL@{tOl6GVS#aP1@h&T)nP1g0P+o_UJxhQ_y?AmGjvdB_@5dW4%< zCvnL5{vCMyde;xtJ+1y0|74^^$_oo!R7Y533NCsjiD-bXdc6UcB_2wlDV{7bR%|#G zk&MigV)-naY^)+Sw@XtK$Z)8j+HsjCveGDNHp=+Z+0b|mcHMg*BnIJcU2Ll<%jd_z zZ9DfeoX&t}=Etx7yN)gp%UJz`PH%VTu4bq7+^BJ5UpL;N!c0S^*|<-bJ*`o-^rj@7 zi!Pgj@25p%;(%u;(J@ug2=0++Mb(@Gp?<#qpkF#QP_Zv>C~B-ePisNTTD&Dj?5)?w z+;je#6-zf|YJ+PM@jKDx@&IrMsV+9;mj@?nQKV zBVEFM-(&C7AB#HeGu80@U+#W)fW$mc^{X^W50K;b2A9Cg>Oq}RMig+M$_W#;B?eFQ z;pKr=$g}%-(2D75(iODmY9;Z`90x27@LIypa&qw9%a-2I-1xbdsjJOuG7dCY$1aLk z7QDtHsX9T-5U@l_A)mvzf7jkNU9mrk)Q)IMI_9b#M@-dYFxTc-$6|hd?)E~%@2WnA zluS=^EjX9!+Ys}^G@^ZVTk7(;M5AD~AKFYNA`+IXeY)~u*{(ljl*>h&k6(NGA)N~t zpgmDpZ@}9}@bA~Yrrnl6V~W77lQk9wU0hr7Z%u+Ei+}Ym5~^R1L*o;MrS97ns}9UO z6?LASx3w|n(A0cv%Ew`*xSdMiG)~gb)pMb7^WyVx<0iIwdWmh`9b>U2 z)D)u|vHRQ;Yk;llEiF7PW9JJbSSIZzf0(Fvv6{T=7;LFd;~+2^HC@?2?~b|vXs=o@ zPL=<7dsTY2kMgGrA3?RO2E?Kwp9Y2q=F%dKxB}psdLjzjNa(pW>iqmXC*6XHI*%bZ zFSQ7vaM)F4lLr{F^ww<2vMLiypL)A6c>Q!rvyh=rG*G&mT>VcuI-(iV$-?RNf|lnv zteJm{F(m`nrX+vv$jgVd>UQwz+;u8`o(()3xj}=oiJ2dl&WKH@)bFpTbZIPBgnd4G zJAyHH_d1yytH$Io2xQ}uiGkbFeI_r=F~|18_wP7z=tOiv^Tkf&<_eehe0q7JjXx{p zb2savnvhpR(9E#%u1uwKWRrGp!>eTaX{f^~$BCx1jG=zt>Ev+FaY5{tZnKI)O+`Gc z%8qi%|6OPGbZ>pcXb*w;SbN_n{&(-1Ag3>OXw1)Z*56rJ@xjol3|oDNA5M4SU~8ftxl&%iC6o3s$}!JENt@4vV=$PiXi>1xay@YS8Vu20R(?DzX1l*y z;*7+@`Z3YAFiWpXiM7(9DYVMsC5jg+)Oe7jV4gF+=j5t8i(ez;W-DPFPU zxu@B<72_1d4VIbQoTvh8BM1&(iov48l{w@L-`ThrFHB>asGDKtvsuvWr0m)-eo&W~ z3f?B19Z$7A9BV8pRQn@~2XX+>;d=oT&9UPw5T-W}A!9*V0sPoDPW+3O3JsHY&r2+w zFpi=fK9;ew+@RMq?Pot1swC4^vGIZ((H*{`Qe+irir}G^6A-k}hWe}~JoR(S6?(?1 zNltnlLuG|hpkC^Tm(z80d01KL zRv7oRjxTvtb)p-jiX&DH4Q`Spr3?9>o4#CbF3(&w=52>MUgv62L7yj9(`Rh?%sQs={hVP5Ma!0bO%B+6p;IT!iUqGZ#di+0FDs z?dcncd!2*WxaV0cX4G_TKwzx*rM5y~+JMAr{FGgfL?O~L+NHB*EJE$S*ezSon;ks;JUB~tFd$*(bvm8tA{_wBgfNCL}DPA$* zwSlL8k`X;``?62%)8i(VWP`0xX$^lqUaY9P2(04aAkqBGZ6A*A3u)v*x6(%&@Y-n; zxLs-*#bdFh+-dKsq=wM;7i#EAZ_wv_ab+CebnAM=$;htLS&kXe_O-|4P4OCH?MP69 zF4ZU^h^t(erz+q<{Z6@9DhHOIc|DJQGDEKh5ew$JUr28sWp^x&7Th18eK*c zg+inE&@ilk8AI#ucP{M~8iE?ENQvMs?vZ#P$LyFkK;cAw!rI5aQmTK!K7g(-v`|)VW@>!TFs|KI_R?bZC|i{mSbt=Z8&f2kM^ojSG*!_OnNfr94%G!ZXL+iX!VXUouO)DX2EzZ)8v9fyy=`Gvi zAG?H(zJJv_$&dc}XCD^5!J^(_tBiAbrJJmXJ1i4X@grqazgxEVzeD5)<_vC-jy}{e zS~O0&d76ET)Ym#5a+luVl*kOLk0X=?XJlFFlbT8~hvK(t;*{wB_z{A=$j}?*3JWQ` ziW9fo`ivKd4{Nr@n{HsbTS#6>#|^j12vd*d8{p7EV=|3H<9i{{1@XxV{|w^;(Zi`% z_cSiQ$nKJ;<3D^qy)6&y#yE`)B+Oi+TF6s!51*T*#_5crHl!J$40cwp%e22g-P)G( z;>Jj#=UzeQ;maLYxcANttoKl%{A? zhGDB}jVAgh_9l1ft{QkYL~vziU#K97mHriZ;TKbHNc;_$4xkHzzD-cad_q@kGy5Qu zp@L8|73gv~(dt)yY|mm2BIpN2>b3dRWYEuuVdxK~xs2{p2$MM|Fw->*elU%v=#pLa;+msXEBO!L~Pidq1oXbb|wv>T`#zd zJpZ7(<-Cq8OQ^xdQYLH6(iIijI<63&oHNSsxudP-rMtLvR8(;xy50{}*b=oT=~04~ zF}Giv^Av8mm7aReQ@`_~F5-RBt=$-+f%Sy;GZFz+C1$Or9!HV#8FMk5NO?XwEX9ty z=XRfdYAdo{)DtCCzz5&vB3!McSYggA8{rq()xFkUDw+^HDeGX-yJxE+o6nO$Wcqr+ zxyy0tArJmavKKS>?PrLGZDkz*?_|*L!nms*3*)kk&`W-}TUyqXy!s+Mn;`Kpc6&_k z*}rR3xm@$5cG>{v%0UC3*@1~-7p1bdDx_VaT)2;cZ|TuwqUvCk$2A{K71#@-lsOr~ zWqK>P=hO7qcdVJUT^eFzhYRjkC5KtnKx|l-Q!)US8AD@X$R}HV>+6f0NRFI2_4ane zP3KHT4Djv^S}R$k1!D~$PSrdkb?Br*gFtlbGBQKtl@d+xyGsA@*BKd8V8R_oI)1Sf zsY8iVt;wZ)TcYo&(PV8hfal`7o(pPY4_arVQQpdiOMxB;?QAU3V@A9dtHPbb6Mm7uwjl+h$$}bwj2l58DYyIpMWmF03``+dYoF5v)IU@cpW$0n zo_aiNy``t21zp4-h>+c)9%juh9@qP0NH=1>gTy$Q^atA`gJb7@ioBAx1&LVK3GgGda6Sh-k7XAj3YY1?5M0I!^KCe)zz|=w>KOA56$<~LPd6r` zP>887J)JkD;zQ9+ttILVrqaaxo*S~(0uhL*h+OsGE+RQ`gH9P#Y%UX|{3Zs?zldw5 zWs0f<)|RW={W=3)ynQN>>rI_Svq`8e@NA=-V>S^r-99C+y}|rGIXGVR=%d`y z0u{R2Q9imLo0V|e!^5(Y<6fW)5PRCk>3mAmRwk_esZwHq_WZV@@vwA~eoO;?^uHr3 z3K!xSlreb$6qT0F?+@Jkl2c5->C@Ff^y%s*63eKFJeXPHP`}dQ%|*i?v)w}9g=AZB z;HLBT_{e)^b;gU@Y#uIl&$ z;i-8m`h#Irfcf#!c8F}1dXisFNSTizKWPxV#J3dgV4I_&0;2oq2DajbgZ^OcQ)VgG zx4|c}D;@JJ`R_@owgc}Vmit5f{H{6rckPbe*?^AoS+_TJ<8hOv3Zsa_e_562LV*Z< z%XEbm)5!f88sSLz;do;*A!%%J&u&nK?zE0|K=p21sZ zV}fi+$zHt=F}R-sdH1gk+SvJVZBYCQE8RNY813h8*Blnxr<(3F(Ntt${Nc(KZlQyr z;dguMj1|GJLu_2+V$j;Zx5>WLLJR7Ht^pTEXTA`9t@|uRm*`Nhzq5HvA~5Yd4_J&5 z7s@_;XN1IesUILUP$Nl{>!#mJW3168qzdDr(1>VywKQIjl4N9#riuoqr;~$*bT|9r`J` zyx^m2ocYzQN`wrl)TL^r9m%~V|_;?LLVAO(C4hyvALr?F8Msx zKt3-#wHwpnG(5M)DsH7F+|W2$k=U51G*^eMF!xFsi|FysR8u20fNRlUX4%PD4L`CA81v1JR;x_f<kzsx{Q)zsHj}ZDVP1@sKdMW@ zPf0fRJYjm0v3clx7s{9du}eoZW)x7=ft$&`OT)A$jJ1w?hE3@e|1 zWa$hj)+HK{8JV!YcX!wVD`JuJbTws!!%(4gkK$rs{iCFz!=mmrp4a4n(@wEamMgfX zm(GcobkNLQY$bXf%LpZ8@ZW&D>VY7~j6A#Oa7;XrU-cm(NE*~1+8a&*${t%nA3Q=6 zC)RunIX&8*g@o#Q6N!3%aVZYfXU>+SbY)o9X!ll%iAJK8$^Ss*Rw?TJmW}2xQrJEE zvHGS?W!Ym^01H11Z|>qB02cB(?pf0t@b+$quTL*EEr>@mN0ZTUl-jviCOq}UJrp?S zpijB_XIJf=KnA-`HPyvJM&LB&Bg~@*S7{0)YkTXf9GV5{@`v{_FvhN>q0H z*omJ;EHrMv3Sbmg5Wgy1V5@Td?qA0b;fY+K=xI&Tsey{<6vty4>=B!mmwH1yQ2aMU zgM~0VuH@giFjdoW|1M=EWhoO_XOp`SVeOIj%$cZv;2zz*GCYy`@wDkN6gPxAi6d5W z?oXVYkC(<~&NkL;DFNHUf{yW}ynVPW~wIpTQ zpuD_rp=l8A!}|=hjK>`NQndT2;I7jp46^1E2ROy6!c>uVwsv;EHV=mB)q@xYPO;c4 zV7F_RYzZGi^%sb*d6+cLzS?_65Of#QyG?XD|CE{r66aRgyg+}ZF;scE7Zs?c?GeeyY)@sI{P{UNIhnOq_IMJtcu4>osEtfw-Zp5;tO{c!N;v;_p+O5}VTnr}Q3y~I+mK^*m zJRsbbeA80Nj{QSPOCI!uO3n+3anoWjKjsX0MKp$ii=V&|T<^I_^*c#BN>llZ(~>)R z+a=2GnWn``QI75IV*Aj_H%UyY0mH9lrC%Ld~aa{aXI31`GxF&&(T4+pm54w9u@grew{457QQPP4kuln$Q-qeBv=X?|vr=KF)HHZ<5-V(=(fb>fp8Hl)Kj#DR~sty*K zm!4296o{CTw{eGG!1?#zAuh@q7mY!Z#>xXqdqh1XeOY<>i0wUV?!rO}7GvF0BL%NnCQy@OLxlpf#sCTzqm~#`U-0@b8{f8rI8gdu_-!or7a`G z@~kQk1M3OuU1u#$2ma_IlB?PK`8VveUJUw*zF0mM;Og61I}hy8>7OK(eX^r zgba5CWrITvq+XDX6;azyGb{fybky~E5uao8?S!o-cUXIgBibF7CsY!XcKca|#1Q+B zd)szHjFGU$Ku9pD*cvf?R9Y70o6zDtcQZzg zPp||6c3T9PY#qOor&D~B-xhoAM5WJPkxa=sQKghGo5Y!_(FC2FND^W z!=Gn|H*Df-=Rf{Hb|#eiL?7$IzL1`{qWo%?E7QubD$@rC>@7j{#_r(3v2(F zvHWe`kHl`{I!XV0Z1ErL>I2{H8Tsj(uA;tSID$PM+-P1C!jT!lC*gvH9jm{i6RPglG zpK^Y&%=n>7Q+pmr-+;8gUoluJj%nfYk}Y%1+o*WI%6X3VX}N-1sk4V*JE$Ud;Vu?A~c3mLqh}BXAjX?*V@EPk%Fq zKt`ELC#)$m)h06hq@KG(U+GSbR77fUn{_^2z0~ff7~iHHL!hciU{^ukH?6uRX4zW@ zwS8;6xxTiHOpRr~mK9AQawXnu_{2db4YT6p++9|`*~xmDb8QJkrCbXMo3z*of(AV4 z*smhEX6t2IUo@c&iXJGVB}F!+e5RQ4YF!0%XNDNCsMx04QEDP1_Q#Q zG6FffcGUC$JhWIf$I{IfqH*nJt>lF&lXoQYm}7pue00`K_jYH*MFdvab#tAQRSNrCq8&i--#x z_kCIRHc3{ku9v)}RHjphN>9Jvu;IP-oifaov?4^Sv{Lgw0AWC$zj`?xPZaP6T0#jK z!88DkgWPjX1Ft#y)4(it^a7I`SmT;NFb;V<(}3e3;+>V-f<9_7@^$>^0zBkpxf!Gb zFM-K45ynaSQ%vn_8g$0!!Euq1$26wp%I&$e7}J$ls*cgRyYd|@a>V;(MveU#QU=3k z9QxPTzqEhB?-z|q$Kq|YX{qVDrj289s9W1wtWRShwU2PvpaO*Rk?YNTYmRyA=~o&! zs&rv2M0sT;e=of0#;g=^bA}Fl&`(D9EQi44=AK9^kPTK1#Y&`>>w)~}xxg+)2R!$u zf;_TF$)Knz3iIno2N=aB?f^(5`5JFSPjSc;gdB9uAQ*kPqoxjXnsCk!ADtaIK9m5^ zdf-u=$}`rDy)lYiyc$3u|o#Cv6U_epQUi zWfhu!cggjj@@O0oDF702 z)c$k3cZON^u zbW4eF5+X_HG1j@IUJ+Mr$l4St)T!*^o0o2 zlh%&D)b7A;380LD+v!V=c@(D{)3^)+icmgb+L!4|f(A__14!(qko3lQr+4Z;l^Mu9 zjMV_rG6@GYz2R>O_>;!oI@A0!;XM-X#6BRsZMN1HQ5TW>mOYg~$t-XH725nh_)Fq1 zh#_yR?(DQ*4#jokYC6sR!mL(bF6@-f_at;x9Gd-p{gu2k@QdNcifwd_9tn<#0-ix|{sK1}eE&fm60MBN^u=rktTwK398b^Ebs%uY=_F(YHEMUTN&lpFSFX$uWE> zwS&YyEB?aqZ^Sh~@JDpA-07Mt{{RV8RmAd+K4#%hLD17Yb@1oKULo;R+K#K@tup5N z;g6p)X>+kDjBNn%j1oDo*Bj4)U_+xve>Q__i`UUJIFLcdBL2+*~ zsRunOLN<;?H#>*Yoy^Aiarn~YbDq?h z?pm0!!mK#k9u(cb^!OMV{p&CAy9htpmrOK zjyqCk)9|InNI1Zw2Z4?Uy&)t6sNKQzrt!FAr8tA;WS%KG;(>{Pcs(gj0l=j>$4YK~ zT=%9*+z&bCkSRQ86yfN5`U-LRTLfTI8B`8Q>-DGh_VlLUduE-|wM2+V1cAjMA2&`h z(wq;>d!I@>bgJqBwEBK@-iDk>Bb*aT2RJ<`fP-*R=o~Z5)0S zhZ**z+DOPaH0509G{8gm2g^oC7{*6>ehF`vI0L;4j#nA=r(hTdPo+2wpz+78J%%IW z)|<3$2l#PL)&T}kLZ@HzCP1adzrc)%x-Oa_dRiU=V3)Por5Oe7942Q&bHVTd%p zFG6!jNy+5Uarpbt0fC%nKGc{Q7(7xI!93%hX{CmEJo?fdnJLCHJJJ9E&q`{XV<$A? z!*8`F#3>7ad-kPX3vu+Ok^mSVtsr67siklna!BWj7dhvpBDOP;*V2_+Es}VoI|xrs zFe$(;dSr@H*=&K2tsv-6V?cv|*(Ws84srp>?V3}a+zfze-+ai7AS^Z}ra+3G!L0CgU`W}lAOz@*2^$9~j+XFJY#CYsqO2qcP_k5TPWfBOUg=2FEiz7u}k-wHlBY1W<^_>&Aj3_Nz~BaT_*Ev8<-{WFmN0IDSa00Z&pO>bKlUD8x) zHqzMcr-Y=}w525Py6g9K`5%Ouwvni4n)Sw;soG0tdjph~DNw5^`WmE%01u^o&-;9M zJ^VHMPiQ)XOKf!gPe|Pa*36_zQOGQD*Md2(h7mzL5^I$^tDKXMEUZWmBo36|a0neJ z$l8CE85!VXiW!)PuYX!VPSQ>(+~glhOlOZ;NCy5iyyKo}Paj%3jwt}#{NK`n_f8Mt zK+P_2IQ;2d002P(jzJ{nJ*eaiV;|O&kT@S&R{=&q^*+?TxEy*?0&*~LJ5#a%#VdfF zhw`U@2Q<;1;~Ayw0pto-0mKfJ(g6b;;+jqu@umao)X{Js#!d}fwFk`w0XXM@(zLW+ z3izAER=SPOf#K~-T({Hh&Bgq-7BWtju>eVV3W5=Eq~zm(YwB-?p9FNfpV<52?~Xno zTwM4oP}8)_Tb~MlXz8*b)l0rvVs-#9Why>j?*r1jyj~`aDsP)x^zL`z6qR)-zE-ur zVo0>h&x@D(E~nxRcH;j4#6Mz!8K<}b{Io<0k%a(s82l^tU%=n+PM?E1Plj~cjayUJ zb-UNKjiq*(VnZQNNdZR#+P@~g6nI<2zwng*0B0Qr?%wXrSIkedzGV574W(3r*Y9T> zb+754Nk)&uI&wH6*48jX9G(;dn)w`>6f4xJMWx9bS#(#q^cmh^TD?eB=lA-)x?0D| zH{Y>8!L3KZ_8JAq*Cf(xM4w`|ZDK}_+{kjp6yyw_O8kQTxIbrq349Lt&82C+54pRW zOw=@?cJbae_KEz)QUhaqJn@I8ttJW1MLUty=N^=Si6mo+*s-K>){vjdoI&f`(vt)X z=9q@#10K|*WM-YyzG)Aw0=A-akABp+=O?WwA2BA3jQ;>S2VpVE=8g#its8)EN@?1u zmNhMuM9=vKNZT8UJFFDRG5z_N#=am+k!=K+B_Ebz9rLPmQB{PT%t(I z*c(d#d9SFvJ>fk+!`={26lwEqg6C0d0)~CW0HxO;_Q*Wf&1Tr>VW{$To{QA?a=JAg zWnMP-8h>`D(7yzKW6uV3Q%M-utaOtYyoPsm4@;C&6#V7m|?)K%iuNm7&jF4PucC*L5KK9ui zau269`gir~SY_Bs80@|ht#`WLvpTVP-aZ+XOid{zIXkwJ-+S$+%E#kJ#c%i~LaA?Uy`83cC~*r5y-CNyF2 zwblMdiBh#pTxD9Tyqn*>&li;mC*{Rg#?W)X^sADW-bV+TsLDtrk(&2n&Jr>PIpUMA zPDMZO9-S$m@_5Z^13mgt#yZo889AiD`p^Oa^L3>31XO@iNY5sK6C8|Ek(K09;A1^a z9Fsr{Jaicq8Ot0FPizjgDdZE6#>uIzW7 z0@tp57x6OA`rM_>lI(p#86imq&_c_Az>Kaz&3^v=&9*ami%rvSrPCJf-e^`-nCa1N zbt(vKh3G*C@iq7z;SUUJHva$U@SF+J#rri*y+~VagJNty&fcvJ9JUU!%i1?)j>$T7>H8(Bd!NM%w{etiDf-WRj*Z^OS4 zYT9m|x_!l^w35X)#D(3 z?s$n9exYPuN9kX?{{R#`4G-;I`v}2(Wdynv_N!uzJ&eE>1zla@&vBK;dxP4$y{EK> zy?Punr|fD)({^iSe=j#y(-n?+RlMntI|k|r>z~Ipo3tzQ%U9aoKmD0JbD?+_ThwfH zYu#H((C<&%?_siJNK#zootqnoaDM38pn>mS9cmV>XL!+=STH!;!lo`O-A2w+n{$?} z^)iSg=k%n(0Fr7#&6C!n!6zN5y~czf1Chle5(i2{ki#aIsL2A5F`)C)6my(X_s{gD z0D?)NXl?<+XgPieNUgQkh^By{P6!JQAieB6fDWr4n>sl><8-PKejx)%m1ED^Y z;rC8WFe4esC)S=uI{uWZR|g}SP(cTdG2VaxPfu!Hzb11>paP$aj2?4TwE!5}GshIr zK7943sLlx;x>1gLU{wIp3C<`AcJ;xjG0D$9lodOP9MA(caD4}@8x98`)Voi9l$bn$ z)_^11oxIRgXB`DRb?cgbJJ19S2*CoQ#^%B6nz4XBl^-hk#%VK1a`S7kr*oj{_P!dk z)-E*rh%~#VWwyF_nPZr*3>ApOV4NIutYnSeZIO-adI8keO{jRg#QMjAG=B!Y?bY^= zVKcU!VjY=cc}Oe~dIHB8$6C8%W37BX_^+f*soBk?>$a=}+3E=dF_Jx_`kw*1i`csg0uyJldwx=WT5I*y5y98{vl1I)mDb;Z>M` z9C3>5{8^>D>e1`E)J<={hYQNL%0MI1we(+v9xvDQe+}MfkEGqM zxg^P_TfVz(6#0p^u#p|XkFG}Uqme{&DhiBhRg#VT^uJYqD>Kc+<#JfMl(4DIC#QD0 zJ05AjjhN7g2#iR>a<^c4 z_XJi}m8O4YX?A`h#PM30$cE(Lk1;UE1FsoV(-fzfVdqDlgp{whuR&oly1!bCaZz!H zSLN2nFMp?A>38zlU)#xRaEA{Rs8yHPgUG5`$1oKHu1B0Mn)r}sT{9tiigIY z6t(c&ejJ}qy_-?9)wGDOqqvgM;Zj>6(MjQgva;?Saaq&Mu+^LuH+3u9N7Hkvw+>^l z^eWV;W$f*JRrT%q_Bf?(A|D`V>qM(a7ut_3iHl-aC1)2IO#znXB^RRBMNYN$)?;z zyHAu6$rUteOOJZ8A@d}H6aN4$CPd@i!2Y$QMD{&*_LVFD01ff+Z_E3u;s#Ow00D|I z{VT)sxG*Cl9SGvR!}gYs$o~L>g8XQ=Cq7?`uG8=g0R07ccsK_%P5aK`h2s=ly1l)= zj@@rA=ek%^WIlAI{I&EM=qk2wan_J1BaTmceh%8tPKJ%P?#1Kked#gtZaf1=Z*fg6 zlhUQT5;zmP(v;+Orjjx-)7qRvZO?j}j={if-^zi@6N*fYoqN)PHV!fPQFg>2<2mM= zgPy#4Q^NqqgGqu;dQ_EW9YO8*Qez-`QM=?nT0@<@oN-829n*jX7{Y;!Q&43|ARl^o z`<-~8c3`KDMm^{wp1e|!xftjv4^F>I2Vyoj7|us})$smb#(H|jBWLpoQ78p66p@_q zjN`8rl6cN>T7Dl?e;euXy0fFmRh14Hf~0ZpSz+TKQ_}5YjtDI7bu#g)C;%!a zKrjI5&q~B3>}+)T%O(l_6+92ERZ3V!llWDn|` zY5xGiDWq}IyY?^|0nHs6oCnL-C+kKy^`~$f#(HtCS4>_Cd?oO z>PqBit$2AjIPYIudH4>c^{E<5$=^=5F^Ls|<|T&+oM0Rb zX1d=A{7(3d;C~5T>e@A~kq)9R#k1O8=~kB(@u7^6Rw+X+@JCQH*1J7>_Ov>*_g~q5 z0`QiRquk15dnNF^B*zxvx*$Ug2Yk8Xl6|YmJb&W-8^@4%hsEikTKHxiOI?aY)3j?; zx3z_ZsZ+5DI0tUygVdV&dsoCumlH)L-+#lQ>(qq`F#XK;=zWXu&-SDEk>G!VT3lLp zi(bdZQ%`np)pZLswl?eoLJ|nm#eW!n zC3wH$2afILYioZLT!6pX_wy>tbRbq>kvWWn=tluXc%9azq_&>>?e5$G_g3LE{{W!Z zJAE&QWW2R_-%`>b*cH^`RxRoX#}%a<9jeBph>V(j=AU|#B$xoQkPcLgjtH-(qlj)XQ&zuU z>u;I)ZU>8UoNj4TE{l|E!L?~7uWqZleIHZBIU_lwBO^5K#}ul#TJ=-8_oRNG<46rj zk7_VU>A)T6xW=64nr|YW2RNhyj(Sj4t{^9aMnTD?AQSK2kp7g#VT5((9@Vj=YZp2V z!e3Ziy|$w)%LFn;211dC9QuQg#<9;e?f(D?ycO`j#Qp~HzNhgQ;wpG5`$@L*JUd_$ zbLzJ~Td+^M*j%bF80D)fp93OORMpvY;rEaHRpWo#AK|s`xvI^m>l&7~X{U>(jS$9& z=^R)J0Qo=|;=g~s9)8lA#=U2#>dI`qTWM${vq!Ut!7aS;5~exPzGTZTH+|FEznQnsY;uKa8!6h`o4_H}pT1edlHH+xEryar;K=+P{WRhwbcO)#qlnyG^Tc z14zskOeY|Q&o$SDr73F^dD!ZToHTZ^_0R2L`$TJgF8=_6Zfm#N8r^s^&%TD!QiY30 za!&kBXvg??$tSwwv9G|re_MlAwev1+9LSBfD@fw~+7GEb`}S&JE--N)v!UWMBY2GhdO~{;TjZ^T%3zz8%uFjUPdMHs0G(w!gO% z%#(-RJ=7&11LXlipHtGfDyc&h<0zV7@oy1>Qcri&@;qUR{{X_gl=*zE{uVM1&+=DG zXQ#z~@LOE*UZvw3Yi&->;u{!r3FeWm@1k|xzC3Z|rT`%K>0R%M?>-CvgT{AqACh`C_*inr9z?$l&)<0!G?b~_b(EL&?f8h&?2aOM1Z|wVI zmn}AYu{X>y!St+MRTwvJr*zzsi?>6^(^Hnu#SpYZw%ShZ*;b+)o=fq}W4B9$GodSvv$IW_PM8i&I{t@u=Ug2Pj^woNUL zzdSN|vQ04DVGyq63Z)Ec#Pr%vIj(2n=BcV%e17o6+E`1Q^wlD5GAVFW%p?XN!10WQ z&2&EeZ4AF*`7bV=e#$nFs)M z=D(dCUhS@L9oAzh$po;$&TI9H!qz{uF2DO_Xm|er6)d!)aUQKCEcP*pq6Z%R@R<3~~Sskp|I)ODrgo)*9d4DZSMQsd^wdQ*({%{TGID}bXp>5)Ml z4kxmZXzAMq zfmm+dzP+hH{OR3C6rDglO#>-bkX z2--NS2<(v;LQ%3XLt=+_A9r%;@+qe^bX(MP+ubKoYfIQn7YaE9bsdPRVR+7ZRI^;q zbt<*QuRDQ_&c%*BIi@M(9@V67lDMbI%=tDPzj%@ked&9g_vt`8n{?@|H5z~j9;GCGXG#&Jz3Fitu3sR%rFq+oN!I~8)BgsmTmEE(?p#)9rL z(<|J(%K%87mf8B--iDeiL|q_F=jBVX5l>02X|Atm$4Vhg8L;ou;FsJ-9_B zfeJ=gmL9}ny+h#Ac;ohJ{iC&e4LT1A_?uSoAAlyik@X9wg>-FaY{~7a86NgtL9f-ZFRN2 zXP+EX6c*n$wW+PUSuo#T0W2U_;! zEM6X+^l5sZF@&Ro##N0ad%mXZUMBdh2khjZ3@$WVZCAnZB*xMU{URBru$ERV@fFH3Z zg#IFa%03zKmyA47;yWF0R1(Z$vABgHL=rN`g)yJu0P<_|hvQ#@AHd%celU1D?Ux#b zo{M)qwUx!pY9x4-$U@sd1d)z$UQCuV-IIcXZt3~=vG?oyFP^j%{j8{~PAyqJmgZaP zd@-|ZgmF>;7y-|%OCk?EkU9EN05@USLFgW6sRI>#GsjsU(2!6+Z6}~?FJ=c6s;O#xX zvMdrvt>%%HQtIgxH;@Tow}u}v7_2H)jU~+g0L-Yx%Jx2Ij?_b^3yH`@V}&G+YqqiQ z4zqvozR$+-2p7YtuED3vIl4gWDJuT}aGluO{8-1md*8+n*ymLE1LEHVOYxUiIxm7e zLv)ahTFuSOmW5$gnO-CW0UlF9bHZo=q8=hZN=K%RrXB!teIu7btR35I&o??==wd^_0advkN*G* zE__@2Rs2NpZ-%w~68&{=6<%B-4Q3*~K_IL9H)6Rt;DcW_Yn}krw2f9MV4BkQ3FDee zc_O`x?^v)OJn-I&)b`C_>8C?~6j>&(=8Y)KKGxQ%zG}ywc4v(JYtuXnXYhLV!&SHO z)~l)MSCU*rnqAebZexiIpgYPHPC$=wz!}d<-xZodlzF|Idu*v<;%>L`{}Vy z!k-5`RpWmGL9cjmA-l5|@L1o=G^+$wGfyE%L%R?*o~61kdg65t58UX!GuN~oR%l?o z(&v`mc8XCfZ6t5B?RDXlk-;1q)%b%3fu#7a#JX?8e-vKo-WfWp3mGI25V*HcHb~0A z5ZTXBSpFFB_rtAj@4yG`0-(`dy|5*~1K(9JcJPG19mwV=)no zt5w!7RFZc}*Vp>;K8qf*TDV$p!&7mnm%Q82yL!I9ni&35G|3oTvk(+|){eK~{b$2^ z&-Q+~rrhaQqBW4)-NMnx6^7+FU=9c%gWOhMjx^s5cvIq?#h-$FW_)9#K{0DxO(AG^ zfaEXAdK?8mjb?bS#@;3Ir-??d;!Sq%S=2m~i|sczEhCgcwN#RGfCdG2#}Qt&Xil2_ z+fMgQJM`1@x#dx%mPakA?VI-ZT(;WXZeHUDig0WZgZNb&7cyz_F@5J8oaU|$qa+Y3 z)LNtF>`HlWN;aLRnngVNoYRQ`M|15=RvC;O9CJ!Q&S}~1X>c*rP*B2nAE&)Iaw%{C z{5n!+9jbbO0fp_3pGpb&NX7?hOm!lc9P>{00UNh*O=He!h0AThz{wzeE6tuNpSAW+bGn`yqh8Tyk=0!IpTn105li0? zNvrF(P$)Wu-Sx?m)wswCK1RR<4Dnun1?|H4jo`HLLk&7vkO&%C15Tm7Qosxo)2&)t zJxV)h1+T+oxUyZrE~H6WF*X_^aKY{-Mwf_Lb&PxI^s6Y*MWOOSsx-WpQVOw9P}u z7C#X$W$?C<99MRCGED^XZcnqe{Q0O^z*oozBbtX@zVXhx;%W6i6KPTEn!U_m-d@}R zaV5hJ0WY|dfB@w7ubz2*>))Em>!a5GT6&(x*6F$pN*C#>zsUUom-h4UuD|i#!^a;H zJQ;c7iD0(8x3{;qSU?d>;gvaD;S^&%d)Li>6TUJ0GWd)8WB6y{3Tao`7lo|Nh`#Xi z1z~ptS1lxpT}T6RHr_{WO?>P2O;Kgt{{RT(vSTW%2u7_+R3wwf_JZd^+$? zio64*Yg&Wc*iV0K@M*Hd*~C!B2bMQr{nkAWE8{ik{wBV$@Gp)$Y4MZcy_dod8+gtg z6T#YNhl+S+ElUvE8RB&j#_}@ZSR+feLy|F$_44+wWHj#<>UJ@b_V(9r407(=vIQh= zR_H0eBEb`Rk`w0~Z? zq$G@v^ke{`# zv%?*{PLRIf17w^x9Qs$CQmUJD?Xl=8F@$4LOILfY$3=N2y3xV?r+K4ll5K1lWwl_f zyMlJ(jAN~I`bEu!zlR{3#Elj9iZzrvg|?q_1Wr@Qe~}ylpo4>v*jJU^P2q;p;4o;q zo}Um_%FB3+SZ?HUgS~4s`b1v@u4T8gyLdmf(`0XS3n}tjxKGl!XGZZ}q^h3z)eG%W zpmnwJ-Iv(Fo9uddxh&8}&dtRWZgI)1ts?7Ci^TeD+RncX_LR2>*Kt90wd9L%E~>?N zBxGi@^v|)shOOm?;qB|&7^K~(8Kz??$EW~%a4R%k+X#UF0EBMkHmJfIi9h(76)W>c z{EKxgqb}a3bFAt%^5~F_A5f1^xmnz_lU#-#Sz=TZ&PW?ZKpiSOR!grL=zrUK)OxO$ zunW7JG=^!SkGi0jYVOWD*Aj2-C4|J@8oD|AtM-TakNxvTqPiMIYc=kJeWalqO}a~# zbC19CjN`RruepAf@|cQvcZ%nfS2pYZ0hy0Z zwD5S(e)Iv(Fn+Y*fWtYjTIWJ&F@uh@5sy*zr!YCsOp0+{L7<`?qpbvEp~XqGWYb9e zJtzV&2H{3Clh9PS!Q^I|d-`IS72m1!_pO~TO})Q1sb^^=&TdNXjSFo!1F-cVej>5R z&r0n)G2^{=!Vp@)qe}!LThVaFTV<1RjiYc5e}{BPNbib?x5`oIp8@{>;Wzka`$A~H z5cIzbORj1@3cXvK%Uhz*i#bill!-9=z_V_TZZpaBud#kFS^m@C7(OuSpBh)eE8x98 zT_!1|vyWb33~6Z_mz2h3Qb|y93jY8Iug}u`Sfg zD@?4w4lyAt0Pj?9{ycn7xzq0~E<9i2ORHJqXs3_+QGl5k6=iG;kU=1iLtN^mb$G?w zx2c?|xxQwTTRY!l>rGSkqw(*>&xF?h00>5n;r&MIUAKovw7a%zg}Hs#5lVmw8(<9a zAUWV<*BRk|*^Bm+@W+T7#QJA~G~2T^i@*iOv0}r@b|;)vjToex^WQ^D#oibA>F}pQ@c#h(C0+~D zv^#$UXm;0DmJaY-BG?^6<&oSo8B5&BgULHjrCRWU{?NY^d_CfiiM}8Bec}HA6log9 zr+jZFnJnXtB`|q1EKoFxN0zb;q%U51HOKzaS`Uo80i@|LYySWl8{*BztY?PeNN*ZX zv&9VgSl{PhRoDpt?T(e;ULW}3@lV2D1|Api$BgyQ4|sp=4?oy6`@;-gW8-t-M^k~H zTvt6AP{qPku==L-2|}!64r_B;&tvI7hJOb>JZb*`v`>LNPvHLmht{4d)pV)lwX)N7 zDXsjuW{AsgAeJ_eG20?ZjE<@+1IBTDM)-THcu(Ok#D4mmC49CCE1vs>k` z_*wf+YySWZK0523EZ62;d9LjwTOBu4@eSI=Wiw0WqptOQs{O*fO82jgZ>M{`a`x^* z471!xGnD(Kor@fMWSX_%9U(p-d`hzL=nR^T=$OGh<=9B~By9L*Blx!9dy!PsLA=hEP(|#L2hV7Eh7(_PGK(NZm7*>=Q zpCqvxkGbhw(|Cy1j1(J-z29!%dD}v+O)MR1m2pvxST$&0SAX(8U;Uvh-=DOx@n1LtD$QZ@|#X7R9PH|k9P3rp>g8s|J(W>Q$QK=N1W4o7ocCqAR z92#)xobgctcViVNw|dy(X$Ltt=}HI$bQBLvQhJJFu)V!#IQ7ja9C63>q`)n}=76wv z=kcV+sHYJ|I3|EH3CkYBw{5gjapBmnOv((BGOA~vmmHow>$mWi!?^D}Wn~YHwIuMb zhn%lIANoT#aTjER=&4JVbg-ovE;!1_Tl~&&}kZDTI-fKf>mf7%^3N)$cUQt?}C2{ zJQ?HPjaFI*#E%$3@aMymTF)cvGm`5Zh?ztqI2(_1>0H*&3Tad8dIp`ZTVJ9ZgtNVd zCS|&0MhNM+Za~=2ZVhQq5mr&=z3sW?SHodx&yowJ(c*wIs*(>N9MynxYTmoOE8M(5 zzYF!dT~}YxH7gw{{@oR|mxmV8Uo^wyjnk{+U;%*zNzPj}=a-sX32t6E5hEP+1Nqlw zJY*#8W_a%nC3B6*$6iNDe&dcguSW3CgnTvP6cFBcqx&aRd5S}3mY#2zp?7ZGkUJhd ztFr$9g*&6}`Fvk5Cy)4+_5T3J>(GU0NfNM?p2+aE;f88#9mgGO+(*I9I1W5sP7gov zEkFEKY-yhYzqGZ8tn7SAE%nr=5kUr!&g^+O05(q*)d@yzMKZpniT+dPf(|(AKvUPH zeQDx9*itrzQf+Q=`x=tlq2OC^DR%K*^Dn`;BTjr>0OyR@H(&eeqCW_&S}~6p+T;)U z@_+HI?@~6XP39uO~KcG5XhEH^ZL+ z>E0r@)#ARNRPgPNm*;AhcVD`eSr$Lu6m$)Q-a%e7jtzNOm0J$dROKt*Z!VYf=zU&S zk$-4HQ>j`s(rJ6ozh9B^>i`cNaD$113q(fBh!@I2lu zyO+kY>T&2x1pfeLlFr%lJi-PspkN5ko3kVPxvb&g4<6~B1<`fwS47pUyd!)bO*-o0 z7Z$UTfbAZ5>wrk>UdyNW*T=sSwC@7^CGggPZEdI7YG&h1)3j?H*Av{bVdP`g@~fO4 z2Q}CHNQ2_Wli|%fz&{c%b=w_3Ot#;r=z5GR1a|Q^BVvUgE=Np}n)w>h#=?BfD_>Q; zmv!d)p1lW7ZxdadCk?;y~9bj0pAB1z$3MI zzr_Cl0(h%g@y4>Z`Yp|g@ouYh+H^?5XgK{_&V~=4-R~J)VxDt_gGmz(<2pA3{vj-B*^)iLC^O^a9aNWi)FU>YvF6% zJK~GyY&S?FteR7o6)`KiR(f$6A-hyT1*1(?hzs zxYPVOcYiA|!=ic0&mh5Y%y=DzdC$h{-90pIM$W_HjNcMrT_QPVGOL4aCeR%TJRBUZ zM>Vu-RGLs)#Xsx*0ot<~)iE-Rlw&HF=8}t7UGMn5=fy=?Q;AXesx}D7_B>T$u-N5E`xR+waDQjv_?bN|BsbU#56hPQUn1uXu)U5!l&Z>GQ)J8cfXJXuMY>Gsng-xaTLm zbDl)=UjzZ(^w-p*vbcZjy(dM{TP9gXG5`$j+eQbr zc&Icli2fPV@BA^~{Y&;zhf?t;hplF_)Gb;`((?M?DrKgOMYt6)vD!gDIp`{%h`u{~ zRq)rujXUB7ovvv*cDZABXLDy2u8@lXFvjZ(>^aHXBLkDpYaij4$KQ-le$k#F_<^SQ zhQRo?b=38#r@Yhc+83Hg_e{*LIR#e%LC-)d=P_`WKM(CILuIGEC9Bh0TIQ87Rr1_V z)!d^gb>(TVlUGMS@qKka5qwm(*R=ltgSX!eEN0V0k!bK*%+M@rBkq+m7%G6AbDSQh zn)E+|{{R$z8F(wYf(ymy51^Wut1)Tj)?(>dF5A2=%v;Y_8@Es~UlV3C7|_PAYGPe;EG&YNtBKiu@IO z;XBzH?pUs-y3uUIhiKysfwUc=V~h^N2E2LJq4h;htBQnOo91fY)%GjcRgCV{uC(($ zO8AkhXuc%)t*Yx@74R&c2GH6l5NP4dqS@9ZR$|*%8`u`c2U>r_eP6@c9-poFZ(I0X zqV}p?`t>HUDLjvq{|PB!^ugM%%Skukq|qZ84GTy?Iy#5aEkb#DRcO`&`!*E~P1#cgU$)Ea|aT0%ipo<;%+fmTMK)4d1KzHL2R_ACkLqXr&^vdQ;k}ZSBqOo!9BNH z{mkOSVrzX~FvcY6E8g3BE8Xaimham|I`qq++gw`d!BnJoBo_x9@(J%yuP3KImC$Ow z7}PYqcJ=jZn^nHJnPs-Mwg9ZLKISi#Vh{`gwDZkuc(cRW9*3oPa$O_Dach&`X{m94 z9Cq&+v6zw?1H11Lf%6VIudI$L6sHO^_@(pMs##rJW*W9Gjg%?c_j>Et;|B(p2R*63 zc#p3YAQ@cOrk;n+hA@4zM&1oOuM}egts+K_lVPjRTs zmR7c*SP0c3!QYY&Nj2u4A%C|;;rWwWFfZ_k<9)ILw*&AW&Z*nU;!*IlSn1vhi&W9) zyGiDnb!HOEs>&E-j9?ZVS4$?Ds9k7&7?u1r959JlZji=D*^?>A`MREY=cRnzYIN}R zd9Qo6^|AEyCsMT@Uf!phTt%V(0Bhpo#+U1Vy|=`cj?tmX`9Ul*$F*cw+uJvYZOizA zc|es}BM`sO&T>w0E9xx=;qQiZ{{RE)_k&lm(lwhq3#+{|OuF#joNwAQl!wm@TXch= zE7rUmczeaxI)rz(9te`k!Do$SySdWdHA2UQ1-Kad)-)WGi=Tprkr3n|W@q-Pv1RMzKz+K>^190GlLkAn~4+S5Ck2TiKf(UR!qX z>alyP2&RiCJy{SOZYLa$Yuk)*&I(Rzb@z2VNA)PwaZzu3dj034Yaa$~yf6DI_&?%} z&&0b8{vo-M6GVbpB%0PR3612(P1{&w9C2PJpT! zmZF}6sHT!}o|zpeAci3DMKOpcy;72BQiF@LL-{;%YSb1NcNP;|!D}?O@f=MmM9h)< zvjKtl)e=u!;=ZT&XEVqD00jH^tOM;+Jlp;M0COHI%FHp6!Qs_NtLm5D?0VT|3OMXT zrzd2Se{u5jBdX_P{{Y_xwRCjUzqXL+liBIlD4>b;1wk6~*D`Pq>t1qiXE40KXmAws znGS1n!rF$8d{7s}R(CqZkwdc9Daw|9-2VWDYdOwT-Of%(Ms`QA=y%>Dn_jvamy0y5 zQ8qSy$vkAQ2cMNiSJGd^7g9!+J}8dLZIbzyHh;ZoKtOf?h*)Q-AaFX=9t5(`ZayG= zo=*(l_)5}G^|x0O$tYOM1$GKlXKIph?O#M&csszJ6aAz9!|=1>;nK9|bPKIU!(P-L z;@p|Sm1{%xbuGEqp*S4!4@&vzR+Mob#+pu2T3>BDy;40m)1^46Rc$4`u6(1f-RovZ zL>@J^zf{R9Jk6MndHcve$gfQJaqz?9U&c$DZvl7``WJ{ z0Asyz-Z-(29~Ms?{+619$r{deD;tT*U6)YZTxW2}2fk}_Pu8UHkHgI~UGO~m&XM9M z?nt?Ndx_zDMrhe_8?G3uDZ$UJbbDF4FtXLZkUCfK+vAP_Po-O4nKU9Iee{gMl}7~?ejfz#vih$#}5VkH}O8Z;v2gQD{l|o z!)>gj8sD8gt4fU`Wf!*9&#ic-k#nQzzA@5c@n48%ztP}@jnmrBw)aOrbvI0{!1{Eq z!^EEyJ}3B&J$-eJTUFNASG_kHjCT(v%gHcQJFZ4>xC1>0734l6Uo%&=ZC}CitkPTV zF+k53nd;d2t14dFT2+6MyLw}eZQ_w* zmR;j!SR4$4-v*-tO0T@?#yr>ltnYQ^em}*0GgC0ftZojxsnoJp-rh-cK8yIl`#t!} z;TEfF{iP+2yQ5xiYb{$wx?8JxLgP7Q{5#bMqnmzvj zhkR{sso!armj*?-ww*3uRbUm8OId-9*8@ClZhF_y+ULWM*|+08yqdp)e0QYyH&~eO za5HZJBxDD+kmWh*V|E_Z>{6*#FP7=P&Ds2$vVWQION%osio3(-6lCeAWl<~LX=c&+ zuvG5HPH8%|dbh-%hZmm?ekWh}X8!H!uQieat($jyU(Nk4R-db4Wnj$e=eWo=5)xTE2$(E%58%Cycx!;w@L=hsAq;hm&dZM;4J}O8K|#CO5y# z56Gjq9c$;pK7URt(tH7T;p<4eOKY!qYyJ{jtyjZ0)*1q=fHjr;n|!N~I+D0xG0)A# zChSc}%5Z5rdLGxIX#W7RuAkzsh|pd5n_0hmFA#Y?3uKMtj`K^}!e@}8fLNcpPC5gM z^jo{{*aJ_|^oebJH{*QJ*TqgX0thb~4Dt>Qeu8{U_}$_U zh`tH7_$r?Y{2}0r%ME5op3gzko;$?3GCX1&mEZ=DCeVE==GlK`zmC{Ibq$QI zpy#eQ-JXE$HFXBg;L18v3ID z08jmp8{kf!_8uVdVthqgD-(MYSV(OeVyZ5JXRsy6KB_UnuL{{ZlTYTE3&QurbXG%vP7``cYCo^)@K{;y}5&rF^VO8L*m z+C-XfidM%`oY-I6#IRgiva-A`gJ}#8Lsfh`6|wO)nyGaknG>^(z~)?zltrh9`_7ru za>T8F5Q0w>9=G|-?3)uTrpkHY77t4R*Ty#E_wc&3MTu0(~FJsoNFQT(Q zX}PtMSpqyu!*3vPqa!5r%}~EFoo4LBBN3ULsEzla892f2J?mIB(nuZo-OAm_&orL6 zG^02N^Wu#BxT-4MM+O97_4TG;kEgvmJWx69Of9Gmw1*#%qdc7cbcFoJ6bxL9@l7lV z=cj5;yo%e=yf>`t@!z(Sr_X*YZCdK@$&9y?3gdIOIw;8J-mt4$ofvb}c3x*@7YB&O z)l{fO%1@#)B8lg?ju?jNWN?T*NjL((OnfK%E_^fiXQo+rhvJT^d_}0Xrv#0&3{auApM&B z8{+SV&8h3t>a*HKsM>0#N7jY1A%*~}C?S49$=o~O*Q0}KQ*KFFTVMDG#qlL7ivaaP(}b=drn@!q*%;}3^A_2i4J=z12P7nK&3rCeLtp)l$Y+m|5|hRmRl zFfqn6&3SLdeFx#5fv(uvYW^A5wL6BI`ZbardKds?ymV&4w_voWa@YLZX)Zsrh&9st7k|G=+$Uole#d#0y3*pT#MYZ^K zsA%75hfTiHu2w61sa95xWx>hbzk6|V*){jprQlBo=pG=|ZFP+r4L4XiUV$y`qTWc; zX#(ERqRVoM!1-#$fZNGlPI5Ey{{Zck;Y}aHz8Ux*WoZqqrmrr8cO}FYmqu88mYg(B zg#Q2o?koxC93GX$h@~jd=hD};*UcUIer~Z`O-2;%uXNM5^0t}qsOkYtUN(cs8a9`C4W-F@g;_kw zLlg>xzFn{(z2 zNbaYSx#ubRTrP^Twv!1|0{B2_0C-v0nI+ODG17emyV;96ZMi}z8+P_iF!URR_x ztN#EAM5`s-Ef19_c*Mv^{o8aMe=77TA4X_=LM$V=x4kisw9O*|tUbT|Rpr_l(%Z(^ z0_V&TO|X_y5AK_<9+lIDO3d@C-84y{t^WY_tVpj6sgb%ibT~EkCBXPcbMdRdl4)K8 z)^#5VDIf5WX!jYOd-(zqRuK{26p@?`de_Ik9JjN%@s*{uy4;)Dr&yvNDGtoRK>CtJ zedA^D+u|R9{{U|v2KXOJ@h+97`1TD<#bc;k&9=${ZJCQm#Beq<40FwS*@}y+%A4l1 zvfJ;r-bZc;%h~F*ZTjesEWREHicJChA@Ju@@ZPTagw1m``rHDs2v`VIN%E7s4Ux#D z`$f@6SlG_4*(|Bk)Iue`!r}^ToHeT0HV-qAf1(QDG8^45NChHvo~3 zz*oY4Gw{#sxuRI1h`$p%?Jn|!c8~fuYx`ec!S~n z*01AFjrTqizqQwFt&W(|{PWvNqt2B{2OAika7G6`YprH9D6V-aExLbNo`pEns|i8v zC2v08*OB}4;xCFH0X$u<__xB|H}PME^_?osVuVFM@CjGuQ7%YxkTOv5z%}QZXTv|( zpIY%*B|Y8^v07rE?yMr)XMmW2nH4Rx5;=*eqp- z%t7cY>@wW*1Bq&d2U;?ANhPCiMWw#;<}2j&X}2h~Z#_0YYP?PGqxLO=$HW>tpAKod z+!nVASNmbameK_yI4^)f#~-C`>zXg@k>fvwJ{z&|hNIyP_PT6o6!w?vZz?-P6|hi) z+r54mcpJfYz9aaR;mdy;_>WZZeu=2+sRiDxbtsd{S8zA5Et8Vpc#LPgddJ1@f*L1* zd`&&K!#{~S*TjhJ?AB>Y*)SesJ_@TT!2y16!yW7N2SXDaR4~$5j&1MC?7DAl51)8= zs%oU=AM59#`s1Vi&p)y!ieS|L0O1hPbWamr!ER-EZME4O2N)T{{GgH7*1tHvYySWV z{3q~EsdeF>hI%BrMbh|6;_qGGdh?>mGa!x-Sdob`GbER`suk?xwnf%YoUX zJ5&WHC(^%1e`fyxf<86Vzh)1N9w)u{X{TKHheL0)=}~xtLHk9;%L{ynqYwNghi>)t z?|^<2{6f`yJEm)zr^6oy>F``eju3c$HIgPi!1k|S>X{}AGL3idMWofz*4NWVbKx;r z&MKZJFsDzNFJ`5>`6pxX6+8#7fao-f&oDV%zh{1<@Tunbf8q$N*o`@rut*NTWa7W3 z1o%5?XYjiA3%>{Wb5QX#(uJ~?Ej2_@gVeY^hc)td#GeX$MbZWT0EeOYS>b!AolHXZ z+eTRlM+6pJbRcpo$f1bI@$;2BO3i7y*UcUE@tBGePE_5Wp52pn-2A=xORn7f7X7I7 zPl!Gk@VURa(l6dyQ+spryf18GXxTyQxr+uKmFOR|FUEfte$XC2(|kkX9VW|4dksJA zcGlKF;4b3KOE)Bw`B$%>+2h8ngB~5e&M*r=e+r>5?D^v{HXFmYq>_01Ij@MtWcZ0n zT$Z=ueGM#r5;Icf)cBqB$%24>UOF18G|66lip#mq5M&IoI0K(kUsQOf;IE7{JvMvm z-wxi}+QlB}Bx`fEKcJJO0qq)s*_)hcVH;8{>xA8Wa@gBi^Id0mN{#D)crmeZ|#B#~zjtMSHDb7Gz z?|e&P`$aFs&w?;(e-X4jQ&p2up5MY+ly18$WlK<9r6xQOV@0i^sk_-zM+bsHFqYFFa#d))$y9>TdhM)AAztA0NC_3>lEejU~R7I=%qcDL{g z88r)*vyK)FlK$|3-~qe$eKDHz?}cK-kZWllCyZ)K&M{7;{>4P4DN+O?_FW_%8bU!`>e827~Y$T)WZBUusiG+J~IFg@K$~ zLJ~ZKm}J0mI-X7kHTHOVxN2O`j+WKg^?lDbIF@aWl^U3f$uy%EB(2J{Nnf_d?gqE< z+x9htOQveF_;zSzh;I>Ti6RwY({cmOKPu<^AL9?$_r&_9v1Rc80K$4tif`6&sZC}y z&;)o@fXFukv|)h8IV9KNAC5dB;-3p^+8&L6@YlsU9sD|cmztwUOvdUwkKV=uXX*2K0azc4nJwFUL6lYv%hU;MtG!cN?@%JiPk_v91mVTo|UCc%7@jRN)v5= zivIwC=TXWrbn$;z#KtO1OIdIDpR`xMvOnzY@fPyqQSk@CJr>65JAlh2th2%9<2`m1 zX&sywHuFn8iYjv%GE2%9$xu3E)_;iq0BN6z zw|f4h{uG}?k4DbhNm!$?01ThJdCqI*FB*Q({{SDKR7nqx?VyeutC*SykCdc&Bp^Eo z&&)@Dna4Hqc&u&@6C2fTPrp;>UR#+{!%B=Bgk-fz+xoHeoWHR5!`rWjns&Pf!(R+V zWGt2$G>J6uZ6#2}jF=C&Nyq@_7_ZJx+q2-Um%`85H^I<&7r?N?pXG!GBxT6~&~{Q9lJ1(c$b6bTt2rD-Gzg;$WQ zPippWh>~m9KeE;Q`i-xOZ!Kk#z)N|l-rT*Yybmdn!oSMfmuMO2LG`bdw81IWV~K6N zSLSWUn%s^_+iPimpH0uFol2?- z4lhfdd8}$I(8s6QYckKJM5SYi8Im{2&f>Yoh(r+BO4Y#tr4 z)AVU>pwxA{(pFYYxVDVQ*bKy+433rBcr(Xev#y={I=_efTkv}KUGd{vT?67Y)SUuK z;e-Wa5-0&Ohmd(4^IjjMUwCTYLwI$K4qa08>Ne9X@!m8*Tc+D#3RtKQS8* zP1)uwed_A0@?v1S|!sdz9oW~)F%Ys=O>IUdnd#H02KTPm-e8#*1jkF zJH5B~aXqZUJqyFvlCxUOcKK`>nMbdhd$7Rr?EHTH4!qXW`$C^b%wu;_;^Q zqzQ(>MQQfroxMe2?JH4An^Ke0TPObj0LjJ@yK6`NdY=kQtm?Nd9lhqOaPA~hi#+Vg z2vDkUeE`Ku#_%{7lO(VFB|8fH55f8$?Dwwz$zCCQ&jV}nc;dq9_v{`eU0Mj^ec5Y8 zlHKJP+BRnZf^s>pk@Y=RJ!{0*+MrZPZe=ej#Q=!|V;?Fn3OML1-ooNzh_2F&oOEXe zXv&Q@1uLiL`hS^SKKDJUUWfWrV}sA(PtJOE$4d8)7p=#2IXM(#tr_*{-kM0DU|VU& z>rKuZ)_@u0+w0P`7e&;hAG@@gLO>uY6OejztS4HPHk942dboVM8H=YW(Wd01y_0tJ zGXeRC{HV@J9V*$=u7pNI1MLTCZKoOZ&2}Cd_;2G67Nmdhk7yUVsFLf!3TRTZTj8ti(GkK!E@ z!k!t@^$Ya2)h;eHx$TzIQqs-cykbnLkwIm|i`7_k&0y-Sp~a+lQ|%hP^Qun97LEXX z)AD?+^KskPsjqtYZ}30kFU6mSmUf>Fd>3P{L2IS`wr9FXiF6F(A*4JUf&z;3FBWKi zA<<>g^xaQIwA1wnWM#UxxP~P#uw@4dd*?kptIEezwRqE$(RBHG9*zza`6VR1=WF^M zSHnNr8^eDJJY@IK_$y8EHmx1;y0^I0^wr&KFmTFI!*0MU(E8S2#ShwBTlmf52;$e8 zTPPdKh7CH%KiOjoaAjB8@*FtM-NX1sE6@C|7Dr;R#dD%X2xc(FF|-l^llOrIv-LH{ z>8Y&$0K!BJmfB=d3733|EyFiGyZ%+>)5Brhol9!G&q}3AkxDvi<*56)yed8*Ye}hC z>bjQM)u?jSN%H{&>W&lE1ziLn%Sut#O|fAHX)AHSx`tg5uVoh|6jJ00^v} zA-je-;e=$|o0!>2V%Zxx-~sDglyfLnuk7O&r(2!%a_LgT%A=RyeAv2=hZ#2ruf{Ws zynX)w3PC4^uB4d~*Himcr)*OPO^8n%fI0l@W>)bbL!DPj-Rb7T&*@h*+nsI;qWXrf zrQF!5&BmO!2&UnGx;C#~o%3GQFS5@L2N5x(W@Lj)#9^xxVHJg9!K#LY-dt0PZitUrZ2nb%IIqzJI zw%1?qjMxhlv(#DOX1ceywYMHy6Ub5SFqUp9*WOcv%9?U zZG_RoI!m(N2^=^K4l;4pyYYF34wM`#O3F#Dzo7E`20daUT7+)k)7Iaq<(@UuwQFC9 zTCBRBf&Tyq?6TcE8z|x_90Z)~P)YemZci0bZwPpT-{I|-il);pWAOdm!`s{6v@9W( zQ~_;Wt9s^0iQ z9ZUO03rA@44CP9*BW=ot2ar0~&OGf?g*Z^zJ3SuWUT54>$!OxS6|3X7o!aT|KTr5$ zGvFSPVnuCIf>{nNiY*>XTQ9964(s~ca3de?=cxxIZOQ*hTw zHpv{QR9%Wl`Bw-y9{#noF$(_gKf=C%V}V?Tsio-N9?;%T4_Lg{ zmscqpTU?w(;Dg2xXFV(2rF z?7y-+M=pf&>en!9FL`Zx&REAHhGOc#0vKQ~%f)<+;GYI~zs359u<-T%p|89UPk(n6 zls63W+r)~^m0TUT@1FcuVW{});vbClyIH((9qs+qt)aHIH?qkulM*WgjY)2tpU%AI z%J;>#k;naq;YD3TWRd-zF)D?Os12W-WD&**#~mvwG^*35D8bqEyH3~h9ZHnvIJx}o zavzGeGU)#R5Y4e|L%>oSc%}ZszKZTPfmsxXUoe&-{`k+Y70WV3FTzWoFT|5f$5v8q z1X3Nx%51MEJvpm>EWGiawAR<&Ch(ZPz1py>@_DjIRRC2&-eEXZ004RpDn)}+PlXo> zz8QuohNPe9{z1a8l-%I9eXHE0r3^e%-{k)Q6UxN$OA{vq((}J#A5ORMy4XhY_^(ub zQ_Fq9Y{!zLY2X%onu#>sF|8CYh%X8-7-ME~bN>JXuHQ?u@t^!4_VS+$=vMky&Wf!C zu$YoFk{Ivzu7kvy2AQSl`XTWCt)}>@;(HM$p&VK(S_>(+kYXNT{ouyaym8HD>e{1M z{8#xL(q80r{2An@OVc8@X!KlfFeIK?Ez9Zq1vnKyVTd%o-h5SelvKN z!M+>tM~pvZ`#%L816H%TXPVihT}JZM31PGVC>fie>(uqH&F=&Fi^V<|zmns__Lm+H z)bE6rlFx3^s)*ecu;UGtW>p;V#d|-7zBqhP@lK(1ej)g`R@OD$I_^zQ#&Geh5&fMq zr)q#2Ktb9_HRDyKiC2{+7aLjKyZo)D{l|!{PMt?}XS%)q?M_qU?~Sc|cdB@wS=YV- zH-J26EY>#g+F3&?u9Xe6OlI>JYV$CbGm^a{&TGeh7Tf5@;@^jEJXPVV{X@cYG{ReW zmE$*GyJa3*@Ec@|gy8nU>tAX7GVyoEPm4bY{BQ~x_?FaBjz~2llz94)Z@Vcjit*&i6Hw~*S@aoBQ6im`GIm0dx zgT_vJ(xr;6gr?(Km$=_aH{|VowO^_EelIo2s;NQLT-4f&_jFQiCHLQc$D#OZ{t2V2 zYkvjw{{Rx-c-qHHn&(9qs*+o?>~fox9FvS=8E)D3ugV`C>CNGv8R{BLf;n2+c8Q)R z`CO?ZAo_7%vmOckzPxdB@J8E3Uxe`MmoaItVYVC8LnO+i97g9XstDW%=Uu62skxVNWsuI%gD$ky+qWH z8OkZx?4N`L_OCyVz15Rg)BL9Lt!*KfZH(JCg)bs}#{~85UWcIgbM`+U6x!Qg@kffK@R;y@ zjK6BOuzxYNb0PawV-e?IKrjfvE!5(8k#PrYp7c)+qITk z&SY>ft`i%1>z*rv_`%`tfpK_p9arGbk1np}f+*vkMb<1X4aL*5ozkSnHH}qNjHx*! z98-kj?OY@}8()y=}=GFX2n!deeVYrd?Td3lBm6%1c2*%ZB z`L`8N2>_bV(?4hr+7rUwD!uSEm&H5H7ApYSYqij~XrhkZGZMxbqGF?B>;QWT;JzAL z_y*%f@d@~yscO1qjAAF#n@6(~JhSc@M;QfFrv68KS7YP9415C9egs-ycpKs_q2gbN zGF)1jwE1+I;I@i3Ml+4lAj>Ok1D<*M*0E|5aYas_HMy17O%E6G=D&U7PaVnP9}vqn zt*vTtCDrZRxZO0aGR!~#Wcvz(!}f@E9UD;n%A~h16mbc^dWBc1Ucl!7_rb5P{u=l{ z_C(Zv5oj8h#-EBB)`jC49V5BY^xJttM+lgxaKaV`G3{;-TJXtqpN3YpHuruX@kXtv zc!&NHOZZ^0mrV-*)6wx~F_iPZM9F2x9@I`zr%uJHs#VldeL4{QFYy++d+{RQ!TKh# zaiLxKk9LIfODs`9(9S@SCT0W(&c)BrS0}IOmpT`YHGLZGRc@?q-hIvNjWm8;)44AcVDQB90P96bMw}G3I%w19 ztnI0PM%DZ~X{c&(c!J*MWcw3~PqRoD6Or;3$T?BYM}Jz(g6VFeX=7cByBIaf>d}(aG#9V&e{T$;j0N!~ZwUMAd! z=xcJ@!PhVGFHG?L-OM)0a?!NcDIj!)GP~KbI3zB3^{!ars7_HzTFYbCuassOYIUbl zn@WpOpObw*4u)rjyf>=&r^HF6X!g%_cIeNwRFI)mu_X538ol9}wY2e!J{;0DRnjhX ziH4gzv(C{(71#nLBapf4U!%VTe`U`b{6hVo?EHVBc>7ZLRpCqNfY5Zm55uNiuC_3!VWT1$n=Y{{Ut=6UBPzlNi(4Kp8;P*EN^y=6I9H2znr~Fqtd+fePm%n2;7=3$F7X$I zG~2Ce%I@=9(4f@q+fPO-3|9=nQJKK`urray4_f^&_%Zu6Cy#Ysiartem-}GrnpTmb z>b6!51&@d#hCNM9noJMxq+^6Kn7|nyDbJ;NDE*%Q0B6fZw!QeB`%c{I*5VH)6JqJ+ zLg0Sw06uFK>xBdG74yc0qkIam@E*4}i+o9{Cy3+thh=YL3W*TS;o%|k?tj(e%qxOB zgVAf!p-m}iYro3>0HNeORZLVP8m>+;ZSB?W)%)9C=ez#bp9Q=F`#;`6Kf+Iq8uy7` zQoTA}p=~FLAh;$2Y#qrkKJul$Q@ud#T&KZb5BNvoXYA+WT_56a?J;}s`%C`Tw~**J z6T=|XJh*bRku!#EhvflIIO)>8v*IU(zu=pi?U#b|Z-xFZkHh+n)%2~eYkH0C_Ul+y z-HNk`f{8OARoJ8)x1g_Ive3Wamp&cvUVKqDiK(@@S!B4=wY!P#CIl!@u}3R02RR^g z!J?%K?hW0oT8n>;zf;Vps76tWi%w6X{PfWLkMW(nFnnF{1+AxyFFZ?U72KAv>oQEl z-oTBu9Gskjpd4oyuG`^Hf*|;@<6ja-;=hRzcy#D`DoJBDtva(^g_&bmBQh`p3R!^9 zZ+iU|_`~q8{t3Hvq9=)b8}ScM(H7wYt&X4KIUg8MND!UO4m)sjU!NLvpX|*Sio9-` z-m|M;XpiB0v*C$ij#ZU4Fyrk0U?0L%bGzl|nyL`?R)t+vy6LUAFvPW5oZcC7)LJQW zrq-(Vy}BQN{004t{{Uy7i2nczJ|HiOzA^oe#JVqvFSM%*yKP?53wxNOQRGY!_ihI{ zI5_Gn%q@Rmy)xtCr;j`(FUCz8E4>!l&g)IOic4t{@+rLC;fI<&WihDvPkQoS*{8$b zu|J4EW{q8cXb&3Sctgjq>$|NQ39dkz%p#qkV@6(Buq5-quJ6Pi3;zIuaK-UIMuSQC zqvAKv-YE{FaSXRDhQsUtm@+xp(>!Lqf2vSvPDxtJy6OIBjawU-Qe292QdhfCPWE=% z{{YfFKjQbn9~Jx}(0}xszc4XmCUMuIaa&T~K>5q$E z0{xYIGw?e`)P4^9O4Yn&@dj(~x7K%XN|48FOqp+<6#;+|4!JozSIq!(UL5fBu=QG| zm&pAG37O+_3>-eQIZKyC%&quz7XxTLX~1B~fp2kSuBOsocq@B?%r1d+^Tf@gsHWTR@ zh}5L>iJ2Ux6am+*H$@u5c!4FJ2yS6l1<(lp0HtF^KA$e79BwZoLm&Z+smDF|uVe7{ z!+#E5{2cK|j{gARJ<{}zTSuM*kHb$go6FUaf|iI52pP%zdRLh_#+)rKx*gDrr!IA} zG&Kg)&Y!J)vfkQjLmG=n;@i1SdNwP|bYJaX_)FwRiUy0ylrRe!WIkJTBc8SIUMcWi zlc4-1)BH_utu4&D^{dHuXc!r73P@B289#Ucz~FW1UM1iyFGkhAHE7yfPjjcodvqUx)q=_-wu=@OO-L z?NawiYddXTJx0n1;JCS(R}PUfIU$xX7^w#XzD;;F!f9>r?)fcYyRn4c=1Ar{npWG? zdm81Rvd2kIH(ffTrj1$Qp(tq2cm1Akd_OGw~$p9y0iO@dM$;n#;x!cP%+GgbJd`!@KB>2$qn;kBFl%{|f^s4k#3_SWu_ua*Fnl+N#v1_jPi#zD)QyS2OR%>L$lt|u3Xy7p~p>U<+@<4=Jw zd>Qy+-XZ;&qD8mVqmx$E$A>0@3+T4U7)H+uhdiro&mm4Tit9Xa@z3@Z*ZvagdJdoP zhSI}RxwUAcxv zTe)S1B|@?;77PR|QL~N+_pjC8**oD!fW8*|F7a25{CDAl;rT4B;uGF$whah`bHB?H zD99&oILYZ;FYKlJI)2c<2k!OH8d+*S4Z50ZNiF2kuBUl?!ZtFIIsvmd?g;f2)BI+C z+Na~!gzx?lpAYyS!WMH|uBUfA8uQ&vByh^4AOH+yv7CzfIB_D1cx6q~rzVn;oTS>* zte?wc$i(3mA@eCF*G`x8IM3RL%B5LG zS@>W$QU+`0n?Hx2w$`hx*jZbATGLI<<++*^ZxXT{p%sWZhk^qPis1Z1@Gs&=!*sv6 z);=QIXgVri>2PY=#**ZnGAoIrVLGrNtHmO(LJtF)ukgRax1KV%)jzjCYz=!rme0g9 z>G64fBvIzTw#gz~sg_~GF(`5U-&*>d9}s3ZS{%43uV;NZl9T*V@-^^S3T^vZYnylO zo0fQ`r9mxi-UzY$M}gZxGDfYj~m z;tUGv#z^F2oMSl1<2@_$&r0}1;kZ6L>tAO5vM=qf;nlSJ81-N6h>X`!+}jtO+5Fx@ zIV;qF3C}g{`d`7%3TZkYh;;}3w-Vy+-sGjLTxwBBv!DzRW6dNVrF{)d`xTf`oeWf= z6(qhIdZyQsJZiXnBwS}o8pq1Zy^q(=6nsGN$Aom7d)-?27^i))2r%r}>T#ac#%ccm z9y|l8_^(aTZ6&*s`ugL@wg%hfX8Pyezcnm=6WMsv#d@}jbNgD^n|(S9NuZib$QY9> zVVI1|frbpbeKB00{41+V5869G(a-HuWpSm?Yc7HSY=2CIAf3Clg`+Jy=8C;Ip=|}F5Lb(U>ugQxK3hQUW?|nDz zWp5UuY^1n&PN1JOfMhQ3JGrVlABB8Rt^6mq@iouwTV^qI^)GRR(A47Ez~Z2$b^G2^N*Nz?O$2^ckq9UbU%YJ_?K4wp&{}8mA0!4V?j&c z?CSR(P>?U0+~9`kU!OKJwa3Q)02dS>HqVrvaq}vt zR#nosHI=;)>wgQpB_y5+O*6!PDLPm_E?A(kLOiBJ5`l88cx7{l!5wSVe0AV|gZc-> ze+22Xc*6Hp(C(}!{{V!g?FhJiz+<@h-fYZkeh0lFr{> zw0$u(B@Z{*p@Yz>YI%NJOO)+iJY&7{T(WDQB zGBac4A)9*vjxsA_#Gmk}9@D{ccwbfVc?&C_5J9QNr^yB+`R$h=Zu0>i>t8uPgs$6A zzOx$b+TL1N8{4RSx8EEAOBo2=&<0ao*NVOmc=zGPgK;N}ZSM4&JyJ7oX?H7!P~lQ@ zw5zu}B~MS%y@|NlruAn6r5<>`Z%ubSS54492jBS8;A(n~zh$8b;qtuOIK;A{z?2dc z#d4n$;rLcQ0_!c{YmX7httv>Gifb^1h2d2|l19TBCBfs+it%G%5<@2c02oOU zIBlOKoPGYB`;YtPtX$fgUjTUBzqQ{~^EAFAU_g)exyZ>rxcn<9#VIFy>Wv;9-Dm;NB|Nt1uh3U;5whirL{ScdjQ!r z-(EE7)STd~jBXL!6nZ+CqeLu%wa(wxSUEQ|wx2tq}CmEr#Yhu;+9wTev(!FrwYc$dTX zb7|%~F(=z}_`X}IW6xyUf<_3(y>!|Zm*cG;!9E?*F0}X4H0^ddHJv4IqB}0(Y(@5k z9SA!%gY92Sl4jL%{9~0XYOSrFjQRZM14A2wP^#~(?Y)}(58Qv-3rp~vAMi!r6YIVn zzfTmrSC$uWY8Nxdy-Qps3j`rg%J{(RoY&$9gZ}_&KN0vV#@-aw^nV5TIxF7~Ufo^6 zFZNrbUA*yxZ#jgSY+wp07ZUff7 zebv8bkB)bmUyC)f@WcBrP0?j(H7M-vBPn7$w3O{rBRNo#AO?*N4h4Fjgufk6b-$U`b@5eSCCx-6A?%pk1&ru2@C{|E& zwU$CT$3tH}-h5>Ev##9QL8*L3)aPHe+f5O=y>hnl!?hukuLd;(2e1{{OBIf-4rub* zzP&VlXKXOJRZKi58ou+r(oXBO`hCWBqwuTZ29vAnwmQFt?zH=@8v08eMPyw0HxZ|p z@#S&}R6EaLyw*tgedDL`e}{A*_(U~i)-~wkeHPA37fEl{QbcVMup7f*;EpSy@t?*I ziW-NCb&D;3#`1WgM!b|sbS2#l%izS)i~+lPags7uj+K`O#gB=X{{R;}DXm?2;(zVk z0ws$^)UIYO+ImK;V^k+QLh=9}wcAQro4b;Z-hICP%`0K@C4;BQS*n`zd#>B*{$^Ov zd^Kj5k$AVnI){ZkPhoL1BTrpDor@sAMmZY}@XB-370q9yYk!F3S!3D?x~?->qgKDa z_=OI+tcf+7p{cFh?{tOM<^0g>B=y{K53Wsn55^sK^Hcq&JX@+?cp}5${r%O%a?Rn} z2n29g6AEA=fq)oc_#ek!^&V(cih8!M`5zA@7NxF-lc*$dRzwqhlkEm4@&oPPx8={K zYJa!6Z21xU@l(yL-pio>0A`olXXbf^G0?Y6*P$s_)0QiJeFul7m%nN4=GCJ4Y`2$0 z{JWWa1F`^NjI4|Y8O@0!x3T6C4>>~PYh zI+x^EvChEF9mpUC`q%2`?0;`}`$cPhKk$EyW3|3Wd?BS<>Cyd}AypRBIFCMF(pUmU z?BwU1*XOpU@N36@8-QH+n?btJVB<1grD;PKLhMQKVumtRBaaCq#;2ZXDIrzZtH z-L+nif4KeHm-Z6)3qQjP4Iw@q*xJlm2fC3blo=fdF5f;2a?77WYZ}}36Zlo9YWFFp zctYL_HjWpH-aSI%IK1JzGM%!6xpDwLhQAi!{joo2$Ix`m4SpnQe`3;PNi9O$sVHM7 zVP?);0(vny@0#@g00w^6f3ya%s_I()sqr^ji&wOXEntx(h{j=JSc4f-yRxI^#%p{^ zz{VWaA$6vQgM?XyI@iP1lw|s*(b|61p9lOc@Spa-)fAkEHyhp?#?zu|7p*~*IL)>2UjBzSlv$Z4$QDtz2@gFZchA+jVOuyLaL?LZM$R^O9liR`6 zCcGvynOE;FEpf~g!urRlO)GbxoGRj=mOTS&!}0lg3+1)&Bsf0%SSH77wAQ1NPTN$! z+SRJPoj1#uE0~ChcX$2JU4NRg0DjzvwgGu|xN- zsqR6*3GZgYHYrbz?JRtFs;qd6)%hJxB+0`%)WaX^(58zcg%`iMD^@$tox@=!vVK>X zdaCtYsqrP24zZIR-20H)BwgW|r?fWvfACuU=GA6HYrf$=IjmW-eYowEKS1X^5TQHW zapxP!!H@(iapuYl_mL4QuI3GE|8~e5YX9fS9%a&_n;S?M(g?BMlC(tpk2wbUWPS@y zAI1MEa1yWV^0*Ctp$(vtHk{=Y?$`j2X{q1cDZ5mS?sfkX8{*G1m66H#_=x~y^JjlR zNGMs4a0SpO48~xH<0XDL25Y=4SQFXQlEt#bymojJ9;UwzP`yAOTvqGT?N7%Ch<~{P zM5&m(F^Nx{>O7M;QFR!freAc*)T|cX<-bTRf9@TXbmA8c%SpciB-eWOJq-%pTNy{D zkm|9p2(IegeL}fD3E~l01V0`JwyN3(1$N$V_2;#aeNNFLa?gmvS_L&x>QP$t#kU&g z$YzyK#Bcn1x;zhTKCIgIv3llg+MLl$P7={G&TT%A6_+)*&rkoyS>ff9n3<;mk95Bm zos#1(dJ9lT!3Kv&6{E7*&J|!cz?7m zbLTmDYxf~3%Ccu?_ajlVb?v(6z%jnZ6VI9BE?O_rLZB;=`85AIW4RF(JlUY5d3NBN z>a^t>stl#(kKHlU>xw@IRLn+kz^Q`xlB3M?_V&hLv}5|jkKW0?iEAQZX5~dqoo#y) z7XMwl)vT2pKH@S4^|h!*{5=i&y-Q;$c8rXkU59qkJ;KpqHL~yFaIr7v+q5` zA%}03;;mvU@o*Pk6>K1@XiOGXlx1Cii z#37TUAwF{@*4O=ySq$t%n*&26vbUF#Lyv$9@lM5IC#H4vsiI9Co+Gi>T{-DHHP><| zESt(JCu|7kRx{og+PqH=W>cQVa{~Fc^yuKsl>py+pt!OXEn`zXSA~gNl;rcLDG=rZk$h!aj z8q(B->I$Gb!?jWAqEkjj65jbfU*GC(VT7e(a8mV-hO3WZB6 z&day!&aM7w2_$L7M$HP!gr+rrpcw}as2Z;>spu1m!!culR$NcpUN=9m)}>=hb3eQl zDMH0`qtk-97is0wzV-Wb_-Ol?0Z@(IxNxR1Nb>SlqOi&e^FZpNtRM5TAR|@Jf3aAK zR@s50VuHsxLqS>o^CYR@TzCL?^6g%;Z>o<7cPPhCo`irIwtU9HWbqDeOfu87eQ>wUR-=fx+gZp@#qHPSg4n6XOyhB~a5g9LUA!Gu|3WLl(_TW{chv=E zrdEGy!k~Ty=s81}W@cJMp!4$5^c(G`JG#XpZ&SUKxIs;=RE6q!0gu0Avudy?4lR76 zJ-Vt^aZAE*V0HBbN2solort_-{&LI_-KQ?oINcx_-$U%GldYtC-p~S0RJ?O21pi$J zj5y?IC;z<5^V+u7+tF}VZli9p{7AaQ&@;}1oJBn858;7JVkHw?j_|A+&4dS55_C$t zvX!bu9f`ENhheZ&t0-yeVrYEWiWVgDgpLRg{t7q2AISm_fPW0>Rn{A_a z`w6|PW_|mtU=m~?pd`+FEaYX|xp*QzXO3vmS0^#H$HC$&b3;J&hupD4?0;79IiqIT z>C7(_DQy8y4XKl@FK~)8T&Ien1pz{ryVO+aaQSh0^n_2TaPT17C~C@a&8)5|kMeWa z&7mG12b5Cr)(SIH%*hdANJ{)+J|>;4RM~h1kR0Vzy4OmEW_L){l}kDZW|nuY!$!UD zJSd-8XiU3!xxFlQkzPnx`MCq*8N;r(6V^u}!#s*r)nUs^HMJ@=ufvnD9loenSAa+* z;zM8}cb`R7bnuz4`lQ1H-&dzRs_*EpebjO=sv>Pb7_^ENV(p+ez19|nN}s-sPu06= zI5{K|x?JtV$3@D*h461>OGFlKA(c=-3P->jm zf8&NbwH!W}@}kB&=9>ZQ09w5g6Qm65Kzo1RKvB0gTh}Cx6-8mcy!p1ixnI%0J`q>hP`}oA=F|`&j3`nHL4)%fO zyZVAT2=gR=LZAhKx9g8&`re;NaMqv4HNz$TEdKU_)Fms`|LH8$+0~7Qbe~1XkY6{M zNnR$~xR#9_^A?5P`?}Ovzm;IN^zKiqcKXhg_r3!Z+GP^d$?Q7PzdJOW&dL^ z)1BlB3<>;>`d1m7Yu^)XR8q7D|e?(6&Sb^NlE z!e1-m1Luxjw^QU{0hW=}uq(Gn#S@mw$0ZV9=Q2G8U0Y3jfj0!*slV<(SaVlfYhMk# zII&GVfLUk!##hHiTJ}_w&b{(3;20L&VGr(146-=E3`Xq#7Y68|Aq=)@y_qR=jjhuX zSw2C^n&}Rvwmna|H6AQF6nUaR^%o_5L58@OBspBA!a&v5hJ14Hj$N4!eq9N@#<*?t z4BO=-@{SaZ`94^c;jVE7D4wtuEphhC_8B!ZRd|J7(h29O)iwEa&O8=)`c6cZ=V3`X z1k^>ImM%}h-7$+F@sKVNb;e%&)jRFS@33`Dt0Wr#H0Q;H@#(PKW+#f}ak_t9tA%VKdD1KwN&Za#k?1%KnYW@{;);2WNG@ zI9?SbW2t|qX#A)}7kn~Yl>OxKPcMC`OUBQyk2p84k&LUR)oD( zz{0V6(`;dL#=*4JRE3Yqv}@pxMg31{Cve9Emp|s2>uYArOuZKl-B$okvPhAEpWTh} zimkb`$ifVCf**5V+AlUKQA@m!3!Cw;>lMj-WMk4BBBXzr^EVlG99T$vy8pv+Ue?vs z3tq>O_*1NtQCis}JnqP;1aGyXiF?@QBPyynQGOsx)+B6V@BWrGia_zx?R!tea8XWQ zR1M7aypiKR$}p0%(4ArNr8Y6;x>DM5O|djqW&pz^tQu(;&2@AG#Lx)pe; z++`+;5WiOJXD=nTm2*GUY{~m6N1QyG7i$GOF3o2MsU3&i4!|OF37}qBBG*K(E2uZ0 z38D90IE~2F->{^qr+&9F3H;4*SAMwq@PU$8kGTin^ZvP#Z||N%&Ff& zfFPW7bXF3p&CzJ8rdw=2_f-kHX?eL+@Wz#XNDLHfprB9Oj04r;#jnd1?R_b-*bBdR zTdz%s{;`&Iw5nMcy#Dp&JSn+iyR>W(YKvX}f!t#G>%YkhRMk>M6|qYstWdG* zumgq4nyok65$`W*5c)*t)5;DV0_tZCxWCxa;!ROroSl54BKL+iJ zDVEe*@cqcIzpPkQy%e5yojEX7wEq-(dd=J-y1VjO|7{DXXsKn+r>NzjlN=w#iDzde z-PZRAZKM<3b|NGSp#_Sf4`G)|F$SviIanGc6XV3CYTZqcT%p7>9|+w zjP6PkSf00r=&eKQ-B}i8ToTQI`w%y1GJS<7a#jV@{)0}jodw06HV>D31QovJfEcg@oEh?A>%1`a{ z1q46{Aqnh>uz%+>b?q&v<$3R&1Sa99R3F^IKX|FF)a z;g^ZJdbjM4J3P&O4W|QufgYa+*Q`d8;Kk(vHIUwxT zHacKCX)bld^)8c}RhH+C=@!w)Mz6de&k(kxWJ12#jO@rh6N0m8Y8QXh3Nej+`ELN~ z(~!-Cw7bdi?AL-n=gU0krV$1C9m#byk+mn-p*K;*1X)}AXd7jgeEYysF~gKnhMwhV zOkv(IRRD+c5ufmjN}++y+graQGCLbl%P*$Xg@cE!nJ0y35LSdQW<;K1rF-?P z{IUa6g3dx4Z||U7Dwtf4@Yx}FxpP%#^u;$4^!(O#-lM$n(Kn6#1DQ0AD7zLV8xa*f zw?LlF6o>#qhfvbTpAdXM4a*)L%wf3<4>3un>QJ^6<)JiR&|w&uqAf+gU^@~#+UQI+ zC*FM*R;0JfE_7 zqckeFOU4@bbgA!bY!O9p_~b-Y{xXDNL#81ilz98>_LLL4Bwej9MPtLJq@lNE_(SKd z%pvOLILE`_DSm1sD`}^XO`V&7Z~m~?Va41&*|?x@@am-+S}KzIbH$?eg5EDB^$lcs zoIvW!NaZX9&b4z6y*0bD@a>b#b6|2wDob9$#kJum*BW178Y z_zkwyg`TGAwHv1zXph5dsQ@hUHtFJA55Y}pJlC1unOnJ;Z%xR^|GH#h@kh(04Xh=b z`b}>lRl55+zLy_cEr7bDA_ovI6AMV$hux3h#?MjWMXfaqUi7pA+HZ$VzC6%or0_~G zyGQWC!IDB8CSux-OEF^JL18THQz<5yeP`t@A1{{|cxw{Me$Os${XR>wggwQ*mKUD76LQDw zy+Jz1ix)|*K3x=BA=k(X6>mrxesj-b1&my8>ShQhkLo?9jGzSO z3J)oGNDULM=dMjo@(e_UuR0K`*>9~s%sZ%8ua-!B@S;)FOA>r3Xa)^*cYvy}r#`?f z-HVcbl9VO`R>xMFEY?8MA+jCpI zc}!|8Z7X|gH%vVXdn5I|t|@3m_x7HEh)U2-0@77v_uREwVzk)k)QJyp0eu+4E~)vw zx_4scA079X8Pq+{Ld_!nb1=TpmOn42GVpykk-c~7jWgPkk83J;J`l4x{mNI}JKl3D znjP4wJxD9>f$o49g+{f*j`NvRO)mqY-R-H&+=nKn(a0^LUv!9lD|$ztP?hXqQ|^eQ z$#Xm^S9|Xpck)`Bf%cAfUu192N1f-s)gY-zuDTbcoa$`>mAl$^3{mmc`M|t8o{|#S zS-dL@zrVL9m;{9Sy(p)v|L`?cD$JRm0l`D6_aj~(e4ZsP)Y3HzsNj6YQHy>#hYuL{O+BYp|8|ofvzw&*HYPL4pOSWzu-}&-Gl_7B?rUao_E_pJ zMOO0E>nkR@8GFYq!1)6~`5aX`M+*m-Mc27=auOQK0G%_um>Zcn;g4OZJsGSH?P6-k z=Okengve@wL>>5XKulIeNy_kjX*_ou(`Sz{xX)td6p0qUVAV96xg?lm@y;2Ue2a5iLHu8-o6R-nU=o+!z^k1E1(Q#%jAA1@jAlgm;9U9A79M_u{b`>O|KG-H0R`%QaHt;b~Z_R~TA8Rc!C zL3Z{fM}I?}oANg#cdJ~`j-LkKcdV@(wdr$3d`U~v;KbcYt_+@8xzXTiF(rU)ho1Xm z-=AxJDt}cCN0?fF=k=P z0#i_WjYB1|u;k#I+sbaCR{+`qU7~5UyWPj_+8u@aT89cz$u^8jHXX4C0|^iap1 z5tUU<(}$|rE!O6uI;CfL;^FZgfd@o$w8BKXQw2Lx*#Swc80$qmS(;eh&q*3ogA%9v zLb%j{q=M%}`c#DNY{R*g#OQXslMhxD7ud}5{pPn`FJYdhljT}tDqSUsI z+=$gn*~?%9@FY4&XuBq(-6Y3$_gtf%@B3Tf_R#-IdImw@lCkaRXEGe zFGMWf&yf!H#@KfXGta}fU{ndevv~F<(8~dK_c|4;f1msoD5jc+Ndw}I2qX^fUI8k| z_lTo>*Di98VAr50netJ+rkx1`8G$@*J#H!rRoYTf!bmD6AZY2%e5UQ~zY^vLMRiI< zHuE-5y;sWVm&jmu61$5Wh zqhQft1oEg>qnZ081s}J8-dNJ}cfn<_J-_EjI@|2hguoEo7cJ}<>S(e<$=@r$b+TO9 z0<>+dEysPyDntL?{f7-SpNIa)uQ39~OuH_cJD_EjPF!q}gtVS)hc8NDblOda2|KC@ zrgDp4MTK8b1eiS>c=QN|U{5X0Bd3S~EPjFdQC&}3p{6`Oq(kqiQn>^WM5p_ZMB5HnoHX)heR~Mm; zY@E`1Jt1^ule6C+Ue+3cp5o z2m`nq*K_6*xz`$0ys}8@o(lA58sW{)xZaj@09!q$-9`9Z0dDSC=)qQHgvvGErdU}n zHc@6iFPgW;QjD_iq$@|0yRV?Jk3|K=v=V4W;t0cNm0@$cCRWMtk2%kbmK*TlE#y;`w9Wx z)%gkPviHKEz7eadoH#z@%CmnHw9di&4Wy+aXLYgPkQao+)|HTwH`{a@mP}$*6gjRV zcsHX;Ka&^fU(9MJcGt4&(HG2Jg$PBGLq#%ezZX$bV|t*d!pP|dcc%B{STpB>yQj7$ z?;?*~c=pDnAW5a?l7$FLL?~hMIh^tyO(#dKwgrV4e*9uPzA5FYOJC8VdIh*u8hmg0 zkMr_3&>DZfhbIZKxCyg7x zWi`RB6ZW)V#L!=m_K4^zs=^DuxqS1an)>fDh`8C?6%C?oxB}eXvha&QXyT&5KqvI0 zIlqBNiC*d;|9Tt630@Bq1a%>)8Oz@fp$VR7Ub$5v%TH@TN;;~j@)0jEs%`z#0}eBs z>&trqU>h6-LNU9L`v1=rzgC8L(m9*fFGZTu!2S^v%(^-GlwtjI96iN`D`n}@7~J>! zG98T1*>gS~gX#S-`Zls?v}eNqQCMHlMY|_-Frq*nGyL!1NTt>JRiE<5$-Vr1odfkm z!gwh5BJeRu2BV*!*ruJ1SxCOKJr`h|&sq+O=GCXEwz|PRoWHS<_M7+yLX8L_O2Cq= z*$DrUo{=7*u{y$~5spy!u@h=r6Dkx-KBDFv?GCo;TTQWMeT!s_?yXsZO#J9CPlUKm zEetbjWqy)RSNs(sb2tCl%x`W?4KXCDkf=LbCF`*v8Dm%TF6q^y9wyP40Z(J!pe@sq zXRlA~n0n4v&Q4ELxO~c#ln>hjb{k=Sf6n}RxtRLK0((Ie6=VTorgq(ICT64A!^wfN z^7fffj;G9+tBQo5>MCyu;F3b_kg***!46OE;kz9TM&-X~`u(rF`0q#AxTvX7mJz#5&c1JforuGK3aIEytt(1?>OkXm0=Pe4Hnkb094> z0MTBbIt$wuB&;=^uumDeOqYM=A}+cCFio3$9Vk6Qn^Dx{BD{~RSvMIljo`Kmsa{ypDsM#2XZ}hM%=p!> z(d`Dlz~wcT5{$8LlLylAsV2s`PRz`LpCWTiAk6YZ%9vhGG z9;xKpdB^Ic&w2Q~mj8jjA;r5UndVOSv#uTpJxLSyI$Ls}91p?dF71kXQ8h){v3<{A zw$wq=SiBVGReWory@&149g?3lMS-ob&+Ke2qvtbD zKLZ|tc|ymPz2eRxhNMA)NOyicEc%jr`;7X(Xt-qlXK~ASSvbEpO(zISS!~9_uTnsr zxqj1KDrY7jq@Vu=Ddad{QjE1fm}6GVJ4jm5O;yPcGbaO0Rb1^T7M7}GG2Bp1K&3z) zWpKH>M-=9_qxJ)Q7QX%+c6#=Zt7P$X5C@6svWGI!lMK{pNa6iwO<&OkiN3A@GsP|h z`5~5FlSM;aPW6BBnEZJb{^U0M8X_dIDwx;O(NpbW7wtJ1#z3W8H;}v z2s;rk3t~m+BwG{qa*O_E+dV1eODX9)7k~V+^`;MiyilV9dv-u0KT%rv+oB@_Y11dB z_e-MlIrMMPxfcTzZZp#DFBdWj^6M(ZcFjAW`_OY!Uo zzz?sXA<9d+Cax<0xO2gDrQ~$y#L>Y*a{kYHi~Y}XQ3o&ah!d&ezcvF0OwVVN88!H7 ziQK(sicJ}7knKn4&$txZ_bYdwP^e!&+J@ggUubPm3$Y}ukCk`(Gwe3iF+Eb$yYKsi zqI%e$I;9(Ly{WkCRdWx2d>enH@jzQh;=l7THU@2Rqvzh&NkYd;t`(MdJBxl=r^&Oj^n{$1>CZPgSK60cuByPu!|Gxf2EmT zE{j{Iwbt9=`jn~AdQZ~pkBm%)>02w*m$W1ZZmbW@9!GZYAfQ)_rcE!|ABk1$+8@m8 z+S2soE;3@v5!wW{QUcoOHr&q)g=v4(FPL%GAD?L&Eo5o}SPPmSbnYQJ5w<~be#l$D zg-Izk7+2W>)w7Ksb*IzeAIrHu=u6qMQzij7Zg-*-^)s!``Ob=4Te*SUcy=c1pgj9}GOoZp<8M z{W%6JR$H|vd4wPoYN13grNbnnv4g4=H#Ok(ZrN@u_(j{DKOaXwi+lEI{lamFR0iae z1@i85<K}?M@f_Glvhg6%yOJ1c0mtM1{Uv=46%3zNx}Pd!F&_aQ_jE z)ERM1GvIwgTg(t)8B8;34mWXoeQ#*h(^BP3;_~~m?6js}=1EWg` zphh)<#buZ0hN zu{&qY0|^)!8L)5IQ&yLglf6m)1hXEbVA>NSPEu-b&qq@DaKpJJ)tl+0s@gOXPj z>kl*6QQDRDi)VSTvV(z~v;gOhVJ_G8#kQn{Pbs#kbM`~VR{+&ta$CzX4ay4r;wmqR zZr?7_s?5#7x9j7dN)_nP4os>quC71zKN>gi=944o5Cwi-0T_{-@b>=ZHW##HtZZwQ zx8rWL=C7C+N{sR!N>0LCtF>k?Zwg%jc58_u*s3Bdoz*+Id?1vmcH~FLfi+#sD{Z<5 zio-Wd7Q#=AzE&&C6um5c6##AQRL-4se#UZvGxc4*%vBvXdvZ}CCrNoZb$OT6{mr>v z2WOx?_PuQ&HIX_~HC_~5m{?dd!7B|-&OA;hGA0tw`|@vlFX@|4cQ}5W ze*N;&{8oYUwY&~vb-KU7Or)%HeUi@40A%!y*rM%eL9^`ak&Ry|F>eMa$gQW3Ik6q* z{mQv}@wgCXr#7>2?*Z$}MwO3BgFGnvhp%U~sMx>n2sK3u=`g+# zf-V$-_X14AiHC0pY?;)FvO$_))}7(GgE6&X1J9?DEo|>```%|LDjYux+{>D9nSyoo zdOjn`Zr0J!q80Z}hoyZlE1w53>eX-HQ?*TlfiNtKgzvf)58oMYM$}yRq!u#Hz zMBa7!PqXR{c5Ee$T#!6ocI2~ntGI)aG>84DXTjRrJ$h(8;bJhR!(%mwd$l>dXa+Zl zFp)!k6OXIA?ZJv?lHs9RX!mgYKzm{o0b)d6hhsP2w2+c<9I6yWPlouTE8ScXgXs`| zkINr;K;&*GbkhJnX7g=4TW&0}a@UUmN?Cq0_W5;f?r?d4W+NEZ=@AGw>9Eb04zfah zEHRWSTVG3?J_7#br(y5qzq5}4Cngq;+jOKi>N}-0Q@@zpRdRo1sMA~-L`BHdB%buF z#Ij8zIEZ7RGd^+;)aO;%elI<}FIZ7|_Z>y`$V>*V5|N3?)#;lgZ7f@9_Hn)c#$$h6 zSwYP00{T)A%L621j^gt<96jL${WVvBcRGlY7pco<5A+|??(6=Mph#Z|PdZAsRF^2Y zSbvI#ZnZ+^pAFLvohVD9ZBcz5m%o*NlG1GW(y^tsO)c$KjNte6>Cb8J!#f)3hUrs5 z@k&)87=>Q_khr>KI7FxOaxm$En~&bU4~ZS&`XjTXkmjO6gx~rHe1JT@k@N za}^yvA-v6TuCnHGYSPP7TN_-3e%$WNVIRI|@~rWqV+W18me?-d&myM!7a)8zD@Z>Lo-y2_Hd&lwOY@4;is%5n}%6 z*Vkse`bDDt<@3Qa2P}-D$!b_|5cti^CO8miE@3Xa=hf)>nrXZk?t-|#Sj(-_sT{Oy zw9f-wT~sm=x6TDgl0>FM*scKf1~QnC-fE`pW~6N6oWN|OT?zVWYCp%v#P!0(ioOT) zLk|`2cYNtl7i%K%662o{g|ogDkyHO>GV9PE#(q~vxU$xD4R?QJo&F}b#rJ@aQEEdN z#Jp?fV`!ZcnU>gSCT9FVih{!{Zk-SJm4SzVT#A3CtieQyJK0+oMWGc_3kiLRcZis8_He(Fl37!-2LJO0ZA7b($Y zZ~urv`HVVjZja|iw)Az0YZMgJ$pHr|^zvo(;HGbOMQ|)yB{~%fw!68k`a$EGnPBPo zV@?5dd*iHkkZ}*+{jdqlC?88+2*Wmm(BJ8V8-UUe35X(UxYBC&zk5+%*EUhETnm8~ zgZ-O|_DMy%Wy@2B7Yc{!tE4x?_+u~PewdtTRL(Y9 z=A9h_)Ex}FsQYN!%IkF;KvE&P&ADn~t^j?!z{h!}*Y82$W=0OGk&Z$OVj?0TOGGABLA+G?T2P8va|GMIi!|V4|=vR94Rzgt!#=sqiKP20b*k#d{WuGxq z%#ETSD~n=Heu<1jdmZ&MZNk!pW#p3ZxUDOI!xex;Bx(qTACq+NhSVMPBkV{{frNal zK}opWdK`p#!BRGp-M1~w5^TU4A?31=!+gj(p~ORP=0uP_8|J5nhmVAQ&7ez%W<4*8 z=uo1RP`6~Nf_~xI8j;8;t-Jz^UO4a?Gnr8m72zvrp)yn0+}YNjO_1Z~4Rr;=@W`XK z6z_q>9lqZ(K#wG7Pt%>mKpxr)E|L;M z;F_XuC;D+v^?ft)(dFnRGZ7Se#1OK&A0-JkPaGKG)^>dPkw@Nj^IEsS1~+HBX_h_A zAv{uq2wYY^grU*o{56D-x?)j=?YHpJ2hVcAFO7ZIQSbMr^~dKxQnB``3Pu5E&6u&` zjFp>>G(Ipcox;Vf3=4ye6xaqEi@rz5x?ziAuO_3tN(dLBQvavA@H7I(7OI}+#a9lD z!8K<{ipS?;PHU8jbI1*nap1WkLTy^y8-X6(&F~6 z%Nei|n^_Xo$Dr)TcMPq5z0gxUt%c;w`T5ms*YfK3hPkS??KA7t=6a3OP^YSu@4~2! z3PkWPi6Z@I>Yj~Gf^a?k6v?c&+5K|w0i6w}`Sn7bFvBU|k2k!mg9wMKC-{4q{J1mW za!fVVqH}iFXNCkWWccxjKaD}}de*a`>5oQ@(1@PtZ;}pF_G`&dh4Ff^<%U}G?eR)| zA%8vZt>Pgjf^h!1%616VQF#~35-Gg5i<#X@w;|rgMv%q4BZWrLw)SnEwu4=&5=C4Q zQL;Ov-YrvXZiN9U41q`KN0~L{oj!kIQIgl4VcAF5oZgVwdAI|%zDA12+I&v@(@B~xBE|Py0qR_%$}t&w-2pxe=0Wkb*EbUQbZt z=3DLOZtW9y`Er%bn#k&;tX0T0lAmF8KR=CZKA$SrYoyOkQO92UhMA6yn2Y?^Yu8TB zW|=t2<|J2K-&AFX0HNK8AlxLo-q@b~3tb`IR?n|^H~!v&YP!Hzin!sl=vvP%ukZDJ zMl7X@vbmi*RlknPC221Q=_M<2pfFu=e0_+ukZ=aL_mjBT(~HsmgPS7!vPI->*N=^bi8gyoT* zOZj;7wizE@?Fmz8ffzfZ1>F-S+IyCF_XnL1YZu3JZcBCQ#lwKv*mI2-JT{V zi;~K}BZQ{*8U{%AI5k+mS3|wdkE-hLm7fz$YUu_vdAkQ+xN8I3FY=Ed3?$%jHGw~N z-x_r5Z<{-G;oM2et>RLjf{q;*1)R`Cx2{AXl}Uc9@k_xFeuO{+DF?}hvOr3YJ zkhi;g8ccHU6}U(-U#9qCm^nCQseiL>I)B{eR{R8W>3MlWN;@aTQPs`i3ejhIm0AeH z@k8- zm#0EXUIoqjt(ru26>Ald1qpo3?=LyKF8cz19I3=VdhU8$=vm1fh52L?qbR3yyc9hc z%=cTJw;Ipx$KFRr-P(CMY(;Hh5~$}}@;R0FYm*trcmUUF$Scy2L;2+}nmWoymT14< z8}lyEmB05S7&vN*9eN%1gL?Su@NIrKWwYOgCOP>7>)w~c;6+@*-9?AJqUyt7>ZPt* zmr7)7B5XJC5lYU0Z2^OdFAfqt5?3CeYb|Kamxl2tysJPu_{k12I_Ix7F+m}{XCfIs5XnFei6k5? zU>I=f={5eCtRB!#5c&Dve#}X&WPPIBanDL`_A^Lt(485NUDW?))rE20XtpQLss;<95XF=D-x?3= z`$ne{#(!QcvL^mCMZaV+HON)v?T@%cwN9r9jA-w98 zm%}xrsS#t6j>q?8CI)$6#z(Sl65vpP4IW{1&wca*;^)PFz!~Qg8ZS8?ubo2dcWi-! zUH=sT3Y$L}0M+*oM#_~}qiI1gC)xe${ay3vF_}gx&l3h@fRRu1c&;S@dqMB3=eu71 zf0#2AO-t6OAsBC2z>YtiMHO(mo_@M#!ksCSIzLeqq;q}`4m{Q(Wf3K@C9%P>i}Ilb zPU29%Z%%C|aXg`P)Y9cj=;_rTzt(X4$!54K0Ch;WJYN020aGN|zs%`O1#Wxn;0k)v zZn<1B`Pr6nvU%BRRpRELNcL2Os5WBGG+@DwcGiJM#-nq#(@$0vcm<$bCEiFUQdlB? zhd5oZ8q6Y8$~6Ov3|-~3s#4g@*WSKAHJ7K>v_8c_LPMHp5lTpuT>e7FpHVUTlK@Zi z;tA1f4i8FG|4`H<H?=880IDWhZWLw?PIbSRB*#8(c*UWF};j764g-@558tNrykF z0W87_NK8Ng!*dg=^~&vXfKL}r-dto5knaY;IyclPw2NTs&bHA5t4PD^5ZTzym; zt6NJllAG;%F9o+&8r)jXAHqYh4t@Et@i@t7u7Qehou;%`i6vRXBkPN@wBOPqgSk`M zQy{V_k%GQEacA||!4Fq}_Yk_^Q7+0AdZa9WOg?K!L#nu@VUrnH!woTZFc2kG&)l^7e2R8BMuqceEheS(xiuIo0Blq|>mD{KKdoED`s(d8A0a8?A` zJS4^IUIDbsCo+d9N<@lacbYB-)9`7}N`};5L@+W2rlD&pGZsnBS~RkSpA~;`P)CQf?#>U{!+4I>do*tcHt@Z;-xVX7S3lBr_ z`3C=w3IEa?S}QTLY+bkCwGxg?Jv^{fM5?Gs59Wh8JI}H&N=lUZM$i5w$5>zg9{^oI zqQAY+^*0X~(+>DIdR{wajV zXs`BtR@P|N$S<1`q``|E5OSboeJkld75om;{2TFq;fIJkU2b(B0{F5+s`$D|?xPnL zaR+C(c~&_KkYgZ{0X&}Kya?f{RGhI3UPXU5-1Qz{>C%oC_EUeRmp?arHzTKvxs8U&0RsYB!!C)4W0>gT&f}*p}Mz$P26cX!{~ zBg$JikVWO}>cL1Gf$nRs3yP_Wl9Zs~>(|YBK8Gz@ai>p5bId#?;VomuJ|mw)@Z;Qg zmse{^Zcd*XZDSNj(n!F&W93yQy;tC0$B&6$0<^yw>i+-_yg8-a+v+I{bKdIKB4@Q& z*`yme8OY9h^sZ~+Uxw~=zlgV1I`@n8{{VybhfJNL@gqaRuuORb#^JFbB~P|THTC}h z!cW+5!JiSlC4F%h?LnbI3)?|7cGl5G83c$62~no`NaSPltZ}%Qyie7p({9#Qe?4~m zLk|eLeAd&i-f>fY&mXntixxi`TKpQcdrfWMQMYJP*-;kcnRpEOQS)>?GhQ#_-v#_= z@L-cf@t4Aww5e<_ni($I%L>l8W?wN|YXTT^p8Qwao+j`&#=i!w*Mu~$+tS1S5#1ud zeVrrKgnn8f+K}K&o!A5Lt{(UHWAT^78LjSoWBX|MXH&G*Wcx+wzSc~^T=Xo4a0%d7 z&&M*SPO_%jOGu*8NMfY zZX4_Abn7S8ZH2|uEr)?T<=rBl#YRXz)$|gCo*rD*dUQA`xH{40+UWge`0Hc)NO-48 z@y?I&E-wancT3itc0)GW6@*<)*vAa#-C0IIM#&q3*5Kk0w6CxUegd*nZ~E}I?N z+L>(BXq(bk$pKibyd>M!KG5D|Ij}QLR{wMg0t=QaJc{(Agh$;)U}qlWmFy_SQ-d(~P_&2D|m@Snr~01*5e ztaz8?~Ejqtld5t0}lE9Y++d?eR=AED~{wa&Yu z>N;hQh)#~bWz^z(nV-oLtilk*ghfdC{c<{r^REsc508j?2mB-^U-(CVw4nag5fU8R zd5h<5$2r-%80R(gC+!Uf?8tR*48QE_HmsV;^6Dv7lb^HYe!UI<01E!fH=5^%d}ltX@oU1~7uNhct+tgen{hCd z+(-(lvO2iRxnqNZI5pe&Q}#QPSMU~#;>+KUz8vuWq}s`_wT4Ixo=ou0(eWUV092r1 z>_v1pdUyO2jlL3SSN8h<0E^$o3k9F{rHjpUi1HGG;luevWpeBQ>Oca#qSL}(vEBEM z-f4a@Yr1!ZQr7l%vb)nR4bPrtacr?N##DfTOP1vE&!?X%@oigY<@hrOtH$n4>Dd>) zHEDkmN5p$U;{O1Qnt#Q;J4x0hw)<74z*WNqCjbWdvz+oU4?I`R7MjJrjqzW_6PRYZ z^D?llxZFtu9=(SZ*lIo<_+O;>gTn3Le~5E<*H^l_l-xjcxosn~Tz>2plkc(16M=z> zyJz9ssCA-lptrcNlPNO0V*ri_QQtV`yo^pO4~KlOMQygy=h}b zwFlLFArun*q9jaUanp5(JZ&TYn1#_M!_bK6P+$jCaqq za8=Io`q-&q<54-sb#-)oRu?43(!;8j^EiDcQ#xnFC^bK@#i;o!pR&%Il0$+p!@peq z6%L8v&0ocSI=1lMgKoE)wx9$yu!$7|xCG;K5C;JDHS1be!Ry}W`O#j0vv zE>8``rM;Li{09woH+XRofiJ(}v8oGR<5 zO>G%-DUru;u!X7Y#MEE)_elh8~C6=|~-EIpu3FVCnRsG!8WQGUJoj@QA z3=!78Y|!-Etw-Wu(7(2=^!Xm>+kL)be3S%`&PW99IL>+MDb%e_ahE-|*V6w0mWL)9 z6)M)`j=S_O=w2lIEJE0LYTH#7S~b<2%`7{}S#V9qAH11EqMcjQkfTgRDF;bTzv@Ol#UKda9+I!HtoTnG6#1ks|ELAMFa~z~gf4eOXh4 zlpTxOwc zqrt0lF0L-)`#@1-Cp(b!+($q<*Q)#%@lT4pHQ`SaMd3dVczau(@rz3)t8E3v)w0KL zC@lz)gD=Y?a=r21zKx&k$I3vtv{I_)hqxCy+Huhf5pF#S|{xd@h?u-J|f=O_+Z&->7}z+ zcz$cIwL*&6y3d-ploxHPas~!kzOMK)@E76+t$inf=kTVT@NY!Ak{f9zwecpRudB%_ zG?JKPhDKe&AnM5=#t0d}ug)KipAJ*uKkZH9?}zeAWQ#`DXM)wiZ<+$dqUC@mYtI*3TxW(x32z%PNiq?#tb%@<1K$uoXIFMTzGjclqS{k&IIgo zPVnBqV!HA0>%&w2%NIWq-^E7e1=hx#mKN3}?y{(*rIc?TTz@c7aB^$IptiKQ#6P|_ zQV_8O#@wG;p5w*dCh(=cz2JL)5NdGfGR#)`%HHkL+U3R%%^pB*K>Ne6uT$#Ns?=%E zRj*BjSyQIdcReM33s0>!fHZ#;>DMF)h696w2(J{@BWt442x3x2YRVyMJ|LIIF?e_2)!wHEg`XPiOX2AQ*q%6bI3e(NZN_oW zO6L48;(dSNC&ux4;Op45tH{+dH4>75Kvyxp027|$9V_cUhu^jz#vKF3-xPJ5yS)I( z*-?{JUv=|{H-rNza#Vd!^NH` z@VAKWB=GjJccRKzk22DBiNNGzAcN4F^o=7~@m{rIrdxQDeMbKP!wwoK4dOdnv&Mmf zD;^14gMfRA$-3~ThQHx4ioxf;`((_3u-a2|clF0L>gVE?yQ=&qvG^4xt-r&1MyU6; zyY#q((aMRm;&Jm}fCdj-3aay`Qkrn4uhrVt^FyHt!lP50w#j!q=tJR#x4)X#ONhyD zZ1W(&3P{c|RrJkf+r<}B>RR$kb$b=Dw}8FelCUV4iAy;rYL0`_y)VYTIllOpsp+ehROpHUuM zd!mJ;5#(p)ZM#Rg73Wi`p@(j}YD>+#BeGPbD$!JuY4$lJvze~a;tvho#>RD9d4z4S zIp{qOeJk639|`Rvy*IF4*y}M2-6h0gAdQk!Z+@7`HM_6;Kk?^=KWEF8z18P{cynI1 zxNRl$Vz)tNw)2J2n{P27Dx@5MPdKi7;n#>SHSJqnztm>?P0~#mnt2F+G~oQl01Rp^gT*AO1N5!+N(>Z+jl#c)I3G3_$yMI#6~OKT%$*_S%k<&0Sd&D zJM=Z@`n&kLABQ>uXc`+`>&(Sxx6-YQvBbQQv?g#k2kTyib8}|e2Z=R-zT{rrOLug! zfV-UF5Th6a3NR}dOZbE0Z--iTf#UB1+`f~0YOgerTtgJfB14kSvT)dJa0Yp=Cl2K% zqfQCk?XtbLI_oII-jv$6Q;YESf#Kf}{{Uy|K049v7Ru=!eNR+xHd%wC1t}QMC4u02 zil0@I(@wI|w9Oa7Pk*Jyc`38Fo6qwtP?*RqwBtMuyk%?XKiNGlJYn%)UDV+5PLutq zYvIfL=yd%*NNltj+T??@k6NISz9xt zmrFU$#83j|0usRBbH#cSt5%*fmaDW?y1RYHB8?}9ZENSJbDi*ghOel2H^sNI+UVL? zwbL$MD?ME=1iIuyX=r0$+e=7r0`a?Tc($LZYEWHGrCNAWO*cxryNX-LqWeKXA~sa~ z#N!z?s}F~)^+YHyq!|FP9Xr<}qg_K~<6S!D*Tr`Y zI?94L&Agwy1mNc<9D`o{7+;;q-%ig%#>82uB({Cg^smCth29hKhsKL*e--OG7lbsc z{{XhN-TtWy-2IuOljRK_e|P3*D#twya6cBjBV*v-j+(cJyc=hxc_Npb^lLzWA>uzF!Lui2Cr>yi2P^5W18kb~br!+s_2Efq_h(FAiNbs%hRO)tVH5 z1oLdvuo*lYNI9sbhN%kN)0=6o&dc#Gb)hOUNhJMOe?t4gtod7yf&f0&vw!hat8J~F zHu>AYcB^h9%(A_+`LX+gTOzW>mX?QT@df#Aahosx*-Vl@4#yS3%i*_ z^lzM;eJj&zOMjW=McMxV!xrqt)7#~|2=hRo?7Ck(78&c2#eF|zrhE>E_DZ_d=e*US z_~|!@N=K!F60#!**x=u6HcdkE4YuPo(5Zy!wMpXHZ6zw=YI%d9#@W!KQrRrY>uJ!hZQGEkg zyu0yCLr_EgsRKqlwFSTN! zxoeNwXTr(xV$M(aR$}2!rxZ4-g_p}X2W}f~{AV2Eq4?UrYxvKoMeuQ_(|jQm7ExK| z^B!ZQIG#`#mcuaz@Xr7wQ#!>uF@ciB**Y9kCX$=*^k!divEO`U~HW0b&1}oWq z9(+Ubw~T%`{7(3*@Q=V+Cy4BIAqB>z5z|D`S+AH77?iT|(kadX>Fr-3c)!5co!#Wgdx;4aC}3nFN$t8duu0I;Eo;TZfY^77~Mth zYd7b9rZbC`O?I;D`gHwIl>8|Uh&*(uW#NrOOJ-RzXSsF{@;6MV{{SYvYr+2j2)qg6 zkAb&dCA!zFyf1NSsiZJzJ|NU3g)T&qg6a#!mOnl3h<7mPF2Jh)!#aLFUKXQDpPUn{; zXeItfU-5Uq9v}E;<9mG)DD>|Ts@Ow$4yob2Zd;2^w}CArS$CPoSiw>Zh{F zttQ+_;Q=aqF1fq53i;H3(pirlqYL_0*M~eusQ5?4x<81#JE31_+U}n!&t-LQEZgnm z90y#f85uoAW9df3=%{4)m2#K69~P@`J0KW1`HK(bS7JZt(1GK5MpS(JZh7{rsTj%1 zGu1y+B>7_&w_b;Rul!~4*NFTbVW8@oUB&*HZFeQq7E#+6{K=h|ySt=eoUwM!%c4=ZOwboDAcRDx9yI0w2e+#-GI?TcSrkmF@lk zZwG0=52L&BR;#V}s@nCOX;=0aH&&8H%263usAk)ofI1Ru%9L>UC@E8gy)V@DAy&RJ zO-@&TBCo+%{3kEO{T4f$jaR@{ZFO;rt?6*(#jZp+bsR`=o})Zhy=!xLgHZSvscG7t ziE(AFK9_YB{laVTPh~ME!3=PDVo1+S<;WN{OX1Io#6Pqao8m7BXu4;M>@?9c&!uYc zNpb{n#)YS3Da*yd$@TR$?!OZ?oomEi7V#H~^$!f`8Wo3#?NZe)tgL*bXN9DZbfU| zykD!^HP?hS9adWgx3Ij9JI(RNT#{tMqW=K2O>0^B6UAQ=emmUwBjKlpzu_^}T3LUy z?exeMe$yI`WB`x?($3WGsg00N<@gWMB z&R$ZC7>=Vn*V^K<3X~KSA-$FP z+ODB#`!m^iddI^0M3!2*X_|VmvtklabkUOF`*?-hHcZe;Z7bYm>GGE3SeCB4tj z-FHURt-L$o-D3W6Kik5~Z}abA87BpgW0BImN8qxd@OO?RX&ybSFww49e(Fwwy$|CL zjr2`>_F(uy;e9hk()>Mp;oTNUZ!fLl8})xaQ7W$kAg4T&--_YB2B(?f&lkbwc>-IA z<1&Ggfsw{X=UPr)(=VQuv-`C?yiOjRDJa8jG(AJW-xe)@W!(qipNsq<;hzh5tHnD0 zgzv9Msoq1W!kaD_L$MGBwUn>k1&&55!MuO*pTr(G_{(|YhWi(VwRv4OLE-pKoG}F) zVHExER_be|_+#+;O+!Y~Zmn%JyZvug@kE{*jChGcSXiUNF>@myxC7vc5AwU3Ep)2^?yE9mYutGrIoJdGYpG++YCc7co&UOZ)k!s8RG6*{l& zZKLw?Nh9B>grk^X`6QPj=+*r9^SdwTAGME(XR*`lzA5N>H^q++#}R}zA+ar^1V*=#j~$&ue8A;z{6TjfJ}Thn7FNbJIL?UM=x=!l~g8 zj5GKXPt&bq&@^j@i%-`t?L4VhWol zUCrT%B(k)!XN?uYsu7PXd;b9A*y~=*IULnaT_2s_m;5pEm_8TFGW=w*I7sqN+bi-Ia4Uki91C6L}~ zeq6T_TSk$V2?`y+GnG^vW09KrDp-koRXFXX?);ADfs8QIjFQ&-M*VNI-0DB!6`xf2 z`>*LSc$-A=2C1UN#9ryMD1%sHV?|453ch2pm}4Lxm9x^m+wixC{{U{U0{92RI#-7^ zO$SSdOVS}*8yB^Kt}S7=5-PFHZ4B{LYSyI)#@4@B->1sMw2u`0RsER$C+eE@wD$TJjZzC+ittp zHyb5Gz$a)WP6)4bz1P2M5&K7cG5Cw7+UY(g@vn;f6D{wCZ1i0o84}x0nSXkw94e!L z!zU#C*vYSmEiUyPOTjwj#;VfKb0y`fyw?uWGcU|CS&1hD6+mj*?Z1kxBe&IW658AM zHn&mTNUa23iH6D#VS!Ug`_KC5cVaNkP>$Pcru~lB;%9*TY2YgjKJUfe8`N|N%#!HR zw5Syg%ourL;E+fTryV)syt~7#r^(~(C(21Y*1Aj+(>bos#2S{bs3(SOuk{P7yBCB{ zD_q=3D#s(aStZ)U<%)&L>Ty}ITf<}VoosaHO;1XLRPyb01%$`v#vcnN)5_#v;-)tC zR!3^)jYOqu>9RhA_*3z}$9i6uqWB|4)tVm<7#oK1f4S|z>2(S{O*wr49KUF3a7sIQ50ey@Lhvo`gzfJ%uMd9G-W$-ggJB%A_;*b49pq6- zG@Qt)ip-}cs~lvC^0PXem^CKteKot?d4FDI;ORwXDloFW+tYh_lqdb4{{U;xjGhYA z{55Itvd{Z3LcbHw4W5@{r^)BK{{RaqQv4o3IOE#9O84Q9jQ$FIYkvxSP4J|eUbhvH zxR*`1m<{pD2FBkRJZI4LTvrcc@l)bwgLT{Jd@=De#5y>iXr4_!UAT>A+nf`I8R~1I z@b`;+W#Zq8r(V}}-9yFRBztE>yVPfE*_~BD3z;*J7j_43wdO*dYB+0qyta3?pLb*5 ze3GkqJ#X9o59oW6+ju#@WiR+kmeSSyOngi<`20Td$nlGDYGrB9&$}e;T;m;UxACvW ze;N39;}?tk8{sW73p*=KLJ8)&vA4OFTjKE|w2~@6&9r}X54+83d@%73hb=rA;p;CS zcslxj5J%&yd+kS3`wICZM_WP~*s9>2(-3e6KDF)t02};Q;qMcE&E5p?@4`Fbx z8f3@&Q&|zMkh+9M+tDr?0z=B29(_7jfZZ6%?X9-veOlkp(xaQ2r8qXPd$g_BOCK`6 zy(Q$Hsbcw3nCLp!(J$gF#P}QH9}R!Px4ORZmCU!_*}f${H-;9qSqSnD z(s|eie|qNinY@3gd`-O8Z0se`d_DcMXK`(y4;8}9*3qJgp)xCN8_JS@-!&BR5rmp? zO*g+crpJ#};v5~hqi1_19anEFiSYK~!XFRmn)k$i3d=My+Fi_=ewU!-mPOB(yfPM# zBxI=rJab+X;ZbM*01B_-Rraw2nn#Nf?PTz!vcO{xzTkbJ5x~HNoMyhC@SdmQEicC2 zHP*aA;gr?%Ekf#f^sPMjt{}Q(3|OpLWnjk#Xu%x?H^QG9J{I^s)5JEP@U5(FEoQcY zEfzc5xUMcD+i>$SmPZFC5(OCTfzqc1Tm7P>q@JrztG%~7BT}sB^2VL{UG>uXYazGHqg#OqPes9E^MQuc74qr6AS(Ev%mh{?A%x ziY&C>2i@9hU)lRx?66C2vAx`oEt@VX3XyUG%biMxo5778) zUa^`Bc-;7G>FDxc7Pi41M^yB)HP#cp>`>#`_pMGXS7B z7|njE=pH-$tvm(e4+Z>8*S}`?u5^1Z0;h)J(=EJNWgN{gm1H+ZoCF~N3)Fhos?;7H z)ihdPUA||PI#RDS2`j7qJ&(wrj9wD)6}|S7vHs8gAn+4u+E(ZI4I$TqZNX(lG;=I{7d#=j1K zYF~=~0J87I-FL)3IQUx@p{#h9!*-fYoO-!vLd9o&eOx1{2HHub$vqR8xY*bXy93$hlxI3IU&Ca`_uM1@fW~< zhrbE6cz!+p&R!+)#%-hMd2B5Vq0Spgh8BeTrn5~9ofxmf5UJ5Z}{2b?-lra z;g`Xm3tPu=VEUe|VWy;uESA>Gx=AFEx`Tz_-~vI$E3tq0Dj&xvd^7!vq5Kx`zL<$@ zky;g!XJ`VTB!RmJp&)h@?o*XGQ`Yx?mvhLJu~jO{4l2>td)@kId>Qec9Sd0ftbAwV z4+3}&^T1yZFR#hcG~25)0Ja-IC`L-DF0OWi$4c`8$IJuXzOeYe`)c^}|bUS(LSa^z0yx%5~UR#b0NJg>2O z=GyYl!ZBa5g4WjNH&~u&QB2!gkOwD<<|1haigY)2gaUwM5%V3#r?q;gjl5s|qx&y> zJn)pB8S^92zSk<>$0-eQ=E}z`0`y)-Q(i;nKsCP(GQjKdZPKibyUQX-w_em9)`C-|3H{uD52(r{3F2v#UoT zxk40z2qbLgy{Wz}YhE(=gBxqn%ck8unbW?}YE^&H*@HAh0m>E~J?qRY4y87+XXJRs z8?y3`+_bX*+>SnE#e0v1ehvIol09q0{{Y%CUTHc`fW9HUj_&<|lEAo(N{Uwxl6d-8 z9x370wI96ImvcHZowVDj>bm8JhI|v?3r`Se+WKnOy3MxzUchB$v;-WZ@<83VfOtOD zE0lY+gXP0@(BTW z*IEnu`0G=6li1c5Njfj|w8ax0%M zbHh-ZsZqYIy)^#-fMD^^^wIPVC5!Z|mJtbEJOMn>~fDI3Oj43CryXC}RqUbE4Y z;Dy|x*HF=I2CBQEnC3|vXyjxMl>Y!q>+Ze+{CD_WrRW;>jv&+YT^9FJTS#S>P)SIY zP6^rudIN)+%e%7H^$&xSN2hqTJX3!zs7x2~5{nvz8>1dz>M%(9@mfO{hQw6%l%}N~ z=8~aS6uD%zK6FXEJN=b2K-W6VfB?2vOuHMOz4GAYdXCl3HOGfy(XXxBN4SSqmRH2< zb+sbPWDhJ3a5(E;m8kf8#+F|WwGBg5)MC5RT6m*rZKU%aH|6lVSJ6p6!n|_ZSGTe8 z6~w<}hg1ZRKGzv-+~+@9^lHX6R+^dNsP?3 ztXy0|kwv6JS|TJb6a<~BG0q21TI{a=C)izlI@WwXpAU2!YrFec?cY;Wkk1Pw;%_n_ zP7#ha9C5UfUp@6Yuzu^4zK>O>o~Nx=ahx6G?s{K}Z@*=oALDaL;U5I}o5sEaIt{Ez z73R4nm2#KLNuE-{9I}ys6yOfk$@nTy+0yspH;JYAou_z{!@dfePCwXIdPUn_Pi=5z zTnQv0OQ=oVM@7{c%-pq@L~tnA>bcAqyzuJ#k*_a9_IQb87lt`kpmP z?^gBoJ>TM0zwF%yhJ0Zk!ppxDUh0EYu>Syrc5PlQk(*Dmx7!4R``&ilx$G;R&~3gF zteQrw*ZRZiR+_e&CeUWE^OI4Cx|^c1sT(nZ6$m@GVpk0d1( zQOT>jHoIEhhaD*;QaAGa&(;r%zY_ldXMgP<5o>-8{g|(Yt!a6rwWWryqP4BFmAc7U z7tA|+&>24A&M{sI@pAjc-xU7G zjc02&=FgF|Ukdn(U%0=EO3~-MlFH5RZk9On&pj^J2q+O-Hsed6-mag3fz;{ST1cV0y zwxx)h#K}pnT{(N-sr7h_HUg$qP18@>>(1|`x*s_`mZa00W2MNF00B^(jx$|eh2jZx zPYHOFNj?&=)b90*NbTXhytWd}W41u$;mG-2fZ9)?uh1V5f5ADwXzdak3(Y+&{8@E% zmAsD5K^t3V0eO^-z=Co|OjR8}{t4mxOg-Ye_;SwK)cmhDqZb@?$R@oCk#!+vwEK^g zbB@QydVY=K?I%R=hNG?gE!1wbE1gZ+%JK_C3+is@0>K=?8Cwjw3KX2=cdUo-cf`Bz z2wixbd_UFoEeOjkul9%bQ#>%rvJK;Mr~!fbe-bP1FBN{xU$*CmG;ajyjihTD-jkwg zA8XL8wCSOq9X@Eu+Tj5KdXfp?=Di=lp96nxe+~RB)I1+2gyht`9d&1McA8B0ma#Nf zQ z@`UjZgQ2vQFSN#MhPPeqjhEWcgzSCFPKQYN3vUFS73=l_nZJ_diKPi0t;PcRStzU>YJ{oy+ z&-g~P%l$Un`y{RSzPeer-31wgTV%kdv@TQ?Q`_Cv^TNzpUg$Lz6bK3%wbmQ_bt3m=&D`FQ**>(3Hv&o+;E_VL`t6J*9MJYqu8F*`x*7`_Pak81LZ zjZ4MS_{oLTH>u(Ksijy_eQqfhA|huvw^Cg($jJZ`Un@^G&GA&*ojAwV*RnpEo?Vnu zpSxAdqH6ZLJ-_xk@!qNMuTSw8gnWA)zMJ8Bp%?a7R^ZOdc7zSTAUqWS^V4m4=8dlS zhgJQoyjk%##&GV{E)wQ#BIXPolA`Xl!hmo$DuNGUYjeT+_l>k0drOTr`$&^Vmf5Y= z*7H?UF-IF^KWAT<9!UiCud6;bcw@raABR2|!Qp*s>qZmk5zBLTEto~X18V}?eqwS8 zgVMe~55d^nUSW*PX;P2xqZHpgwAS{~*}X5Wr(I0}x|fVBd`WkzYTBK)xAtYaSpjH(MBxllVXy}vVD+qI(k1cd?N{Od z02q90@XhwWq+RNBOXB|kuk#yf5Ni8cT~0 z7wUKJm->rm?96h(_OoR`z#B+8I5qQWzVP~d2=U&dsq1>izvBp`wzklQF5}aG*lj$yQUx!row`0@7*2^i)*QZujO8V&Rw|4AS zu=v~KeOKYmnc;5{UE1l^7k(I%PSrNrknjldgk)!^ILH_oug!0c{v7b$h4D(!JS#7m zrd(-}+)T%F=0 z+d3`2i+wh&G*+*t$8dht0+Q0Bvq+(0$&0SwdmasN9vZmTbZr;J{ua8hI-iL(8^pDW zYfVaZlHHTciK9^)ZIg4j*c>6L*X9_FN{1T z;;#&97vB`Dd_!{`#+(Gx!Me}E)8XAl!&~qsv3cTqyLN*}zl%~xE$uEC z;yGM(Y#ba@J|kcJ8qmLK4O+`m@DGVn#yh4ulxui~Nn`}_jKF-S+-C;0JPYuv;@^(f zQSnBD;r{@)X}%qT4Ql%9?GPl12bqy7#>@<#>YL>Qx4nI(@uqLupW74sk5^$$qok_m_`&MnPy8XwIh@2_aQIkopEB*(- zo;+`da%!Fn_=oWC;q~9cy$yoNYIQlOX5GWPL;XJ$UcKpANh^scK#*@E(if zt1WV2uG>g8DAf_B%C_}@ag*8V5zej!;jPYv2?Gri58n`rwXwuzf7 z8ej~l=sVUm#+~B3PlTE_pKYdHM|Ev+Cz^sHcBwf80rjm7S{+*B!}<-wY4?vTHi9{q z$YNE8T#RH_&njNa7b@_Uvu$sE7TR<@-e}ar#tnQa5bByHqCP5V*8=|lPFs-C53#+_ zRwMzy2d;Zl?6gbEe~mX+vEA9+=1EMDtmAqH2OzJgr)yBoe1E3vg39sa1sz-=J4*07 zeLC0HUO3bL0B0Eg0B7AhSMU;C+I&uq8&Boz*BpDoR+E&iWyvs#9>0B%#c zaxwE@jPsi4Zf-J?v)GzZf}A5Z;;*@}bFX|s)b$(qul4)8*kgs7VR5KP_+Prm3{H3h zBhXiI@Q!AZEqZJ77Nrz(LRdz|JtN4D_KMiQfXt9L0x|ZNTQ3mJVFU-XC zJbo499yYmoz7BY1@ikj}$ewpUZjrW`ep8HY1o4kf)$|vO^e+eK`p1a0Uk2QNZg^rh zXrj1lZK-rRGXy($K8F?Nx85D_o}~U7&^7-6_?PIdbg{uQD@6^y;sY~<&Hx0SGhRLt zr8vnuJ^ug;erHA|l}X+@U6^()uW0`O0=yZjcr@B;n(gvVb*o0Sk}+l#@ex@Wm1GVJ z6SIJN)rRpWk1YHbWuw~L9Xm|bnPS&;_*4klB6VoN8@d8mj2i2{KA(d6G(HmW27#(i zHksj1wdwY{?uj1e)=}hH7FkOH$osq#n&q_LhjMtk!Wvekq1@l<7CKFvYIDmKuwxVj zlmjj}U%8LQz11JBN;CF*x6`%l*4}4;t49k$P^~*9-S>U1pzjOl_Zqg5;+NNF(>y5^ zo`ZDy3=O0#zuM9(?n_rY_b-@B9I(bkcwL>Atez#cX7G)rxHHCNlv?1a$jDQ>0DUUf zqha8CZEdI2F8oOy`^sI~G=XBvWR0PlJ8(uTkJFEa;_+3x#i;6+4wnh#t6HW23_6|v z0Lr~;6r_}-`mWFX&RW%}%a$>=kGlT=Bfqw{@rwLR@e630E{AO5X*XSJ7WV3_o6kcj z#^c9MYM!K?GZ(R&od-j?xH0_l+sACm+@3*F0I#vU3Hu6opW=^>tUk}J+6UIHE;SU5 zr}9Oz3yqw~wU$D2kg3>nip17GWBV@-e$~3)!L4KB4YrNrJvPcY?4y=1wA)?6V=~E! z2HlLHkClf!;=I~ytz~Gbj zMR!;J7P7VdlDuQ%i+x7c{_9ZH?qY`AkMx~4$Y_zf;Z?)rW6;+MsVcLzdTuW5FF!NU zj3lFKGtuv<<&o-M5!9`GI}eBS8SF3Y^r;}$ZUw}W{iKUTLV*DSk;ryMZnljGK6ECcdyVd6#NwUsqrKB zKKLK-qr}?wffs^p^c$}cXrX12D}fvkq_M?2<7r~EU|;|+NzNS?H~64(1mUnxTX7zN#c2*4n9 z#c<0BQw+3|yIuV|9jaehNkf%e`?u+C=X2mcjvB{+yd&a23V0rC-ws%77Rzs_8*N8y z?;1#41&}Yx^ApO9)!irJ-S&y`FT-9cjc;xBZ6)R~YDuUWCjw+CDQ(GzEToQoYrq*J zhg07hLR`YfFPIlRXKrztx|G*9I_vuA zdXzBuX;N^MQgoePKji+@Quy3j=E*l;c0FXd6^E-gXap%l6?(lYu_CH8F*vjXNq+1 zh5Cnx=J{KT7SZLn3JhL!V1Q!`(gT1S7{^-kEqCG%hx|?93maQ)z8xiVdhuH_ znAjYJi)rOfN$0&0Seqrv;*;upoYLlUy45b5e_w%_;oD23@w`57!@=R^VJKNb&->qz zxcQHN>sU)~sx;P-ufw&uyDr3OlE*nvHZRYO+5LN0(cb|+8TgCiN5%~|!XFOx8GK1` zYi@3C0Xub_u>!34~YIei(B}8p<8??)6JYw$)xGl zlKD*{0vW~_0l1OIKZIA5#SWh@!(T7^cI}t#ihS?09Ouh#mj(J)txd{QlajW+XPI6x zr&Yx}>Ev`e9gm45@KKU4h8ldfB_#g8Bf6YH_+WnXBD+A$AL_MbK1%i!HM+rwHF>Ug4C$nRnlop(GG z{vXG$Bt>TSx@2WX_Bf?7l7u48$jUh9vJdBEXNQoToy2ADvv>B)W!zbzrulMWu&*!bh!eg@WaQ!1Q+VWO5)&APs1W0b{>P_Wg{S&#Zz8Aa`W)1ni zd)iet)V~dFvHmE9<5us?t{`rQP~}Hzz!AAmy^TY7&Lfl&0TjzYf`FQe{*cv7LM1Zr zccP!%rhJJcAunA(;fV5w%D4Q$-x7q+Li>0mo+)1$YbHSNzJ62b({o(`t z1C7m2>wB{Z$$fJ2C7_f44k0_<&x?C_bha&J_D?z9rG zcH<NdRV^%P7E>GTFmzHwUx#6vGkRmy+OS2Z%W5Z3> zv~DL{0=g?6n^jLyo_;m(EV(%6=7?WX&JxEwe?fPh^H!k({`3;i+hVhjh}GDO5}8q8 zi=5rZ=+`z9^^1$!vTG#djor20$Jla#8u@l6d(c8Dt2#a90@z`RU}~2%6U{IMf2m`` z^5^`r+yf!#mybT>a_q+7)S}xUuX@JlDGYBTiiw8U*Lx8cKo=!ny;AEf?)8cui$`^>973@w;Vk!+ zSJ=4%@eD5Q{0F8(OXD{ls+Jx zNq2L4um2A`0#Y_8nHg^J+_hoiDQ%+2!;x^hbq6KtpW+Q2?N`ssvF=&HrPk(f%{R3~ zg-P&EfF*J8+p>9|qHem2WY*gcyPN`^ehyACyXqSL-^i#gH0NY18xi<)>S#E&><(l{ zLrmKEWKzA_-!SC1G#&41VudzZb)xbuVX+O>Zva}t%S`qgWy4`37t@UlN>5n7zLC4Z z#YHvS`ewRkCOHgwG@C~DtMOgbV5`II9*Xs9JHY4iGSJ5kUg za`}04s(d1&$S0A8`ex_P;acq~I%=Mjkg;M!2O3Dc=KH+(={GPZvvB&_!%nlN(*)JH zx%mr4ViEU$rtRK~*63cTfqEAhP`8S^$A9h0iF_O7>y^FP=GD#$y$~5W6M>sOCE7&b zYsVrbamyR5fOEU){k_xv$`C3=UA4}b~;lutzo>sfhE8NP@@-Yvf8*;uYr zvYA5BGZ0w=o5L+QrgkgjTLObjal53uPOVFOg7HNkvYr(j3;1)PK8Gw#Nl2tToBkg6MOs0A?glerYTAH=c zR+)UZtZTO)*(}&9S3{ZT*%K`D0EcC@hLIL^^<^+b+T4;fNbt<6sHRzV|F=gS4<8eA zzrsO$UHKo1ZhdXdly;T4jYRM}@W6gum!P|I-><5n(3^Zss1g`OkQj*N=t5niD9s)5 z*YC7p1<@eqd>7Esis|{}vqv*URUd3D zpUP{Sn#HF>ZpkGzIwce|i@kDhnalrNc*C}Kv0-{2BE?NXD9zQ0NwvnS{>P1qm6k=2 z^<-;>ciXR2HG(^b9i(+?6QRK8P z-1d&~Ty10Sx^Vqn1zp3m(yNNY4#&x@Lt|a&yH!NrB!91BS8nJJzmTH9VSl^$NXqv} zA1Y0rNTE zGO`_%CS2S{yyV~rrdIbn4gOu5$kgqmQ7cfa2y+yO7Kr{8e$6;wB_$*oa$`0dH_aWG zIf#O=rmv3gw=<9*;H>(4D&(xLuj3l09kaKdr_+`^%#Zyn8p?Y8T0+jwqNZ~XSv`+k zo%4DI3jS^zDyNALgL&}%v%6FLxFF-fMmmkSt|ik`SB$d_+Yiuf1VCGT-!UXGk046rEmdeQ4^T{+kg#``b%PJN6eB1HG~;C~L6 zd9pAgp(Qq`2LgjLKrNW^29qr@qX?HFhS}g5)cEglieWL?sq5nQln;>6#V?>VO5Wbq zU!_e-Xmnps%;nMJJ|Rm7r-a7JSR5>oqELnqX(1bxTf>8&LR>a8H(xfh7)oWQ2n7n= zW2N?LaPHhXs{DdbBFC>X#s#yu6%);CrzL$FrF@Q^@5KBWl)qD6O5+)^pvIed2xPkG zKVFh0pi^zG2_dZ1>4We$-NA=o?tH|S_lU5V! za~GpAamA3*Aj~3+oTo_U=s~kjB5C1;9i&_-0>{S+8Emru(M^gtK9K5d>f3*0JBIs> z_=KZGuizCIG~@O%!!E)H%VpO_q=NV<)n9OYvhKsjPe_!rF_SP0Ex`+nBx|zQnY;zr z^SDoQAz%?*f2=i93uCe+J^Hx|lhs)|P^KE6i?(oCzLrlAATs1&4Oz2XHgd;l<_e_o zyb=-#*FigsJ#!@l6h=YXJxjRVz};?ZB~{afv)>Bl_cwr)zY3&-EMHMzjEpAoXsK!p zgL@%-rQyOHvL|vhF|yMB!XKy;D}2~50e}moMRJ~HQv?(@?dSvEDhhP48$3gOURm)N zRgF1@-TW{7fm+on$g0kq>{iS7w&OZImiZvQb1S~3wnV{~ z4bw<<8y$NWfwSiX^dl(=fj*L;GEag|z+Q3Mv+NTw|As&*q)jw-45$^Z;-dFd!xy%J z*uiRs0(lSl9`qnN3CN0kGJ-s&lRIo0IDnqo0Be2RP?*mX2(G98qiP!;pwk&V|9CY$ z>OxlU8#!=QJANgw5zjJtdi-oESI1lQeYB|~E%v!{KQ z6tL^aZ3~$5Qx}_BpU?xH6$Ox0-!y+IR!!v)G^>t3s{eNe!)KiVsKd)4W^ZIG*j6yY6{+s=^hztJ7!>pae8{4L{vf+%u z*pZFr9!)>b{Wq_opAxMO`R@{W7G08E3uY$XfVTq%+fqhE8Tz!oGi(SQj%gS`-ymf5 zVO%b!Hqjz^T9<(6k+y`=je!`__kY)-Tr{+jm$JTFNA1hBRStuiu#FUFS{ZI!qc(n(_^#)z0PyLT^#K3K$2^-47gA~u7Gck|9lGEDw$qmF^_}RtH)j+Bu1BB+`J%k}MXR^U@ztQt z#`6&L0|Y&}uyRL}9;r-rpVLy6tX~+dKL$FashLOqzU!?rpH~k( zslTq>PnYwru`lqd{|=Z_t!0iLEG7Xo2;Y34l7((|fvWM1#mVPrG5(h5R9&2l#=9L3 z#}0q{ad;?2`t)d+9q>MUGdW-`;aL-rG2(X#i)2#e93Ll4;cw<*4keGa)?do|aHjC4 z;@=Icu0^lmIDW=9&-Xosv54DLTNC|);-TUE`#<|F7W<4c+wJV{HEJ41eXPv1`RFw) znoiZX&G@;{8E|FX4_EEevJ=?lsK1e^-Dkf)^zC@Z^vJo`koV8`?q(y+A=IDE{O_u* zX60_&P|(7nQV{tQRo>{&v=ki&wk>C5y(VP<392GXpy3-jnR6xyepBdHkMF zd2KFwp6vHH;-5%j4+pq)+TjxLsKfqKK-8N3$(%V>!|X+3|9kM8oq*)5XvI6tHTU8} zk{S2(wlLSLd%JS)rc3FT4%JR=_`{VA85LI*Px4IWq$MljEE;Fkl{D&8q^9l6-C~0Z zcJGcf#(5?6Z$P5RetZ}4#M*X-T`5rka@<>5q|b@EdRp3rlv=__4ZKq4idp zu`@^=Opn}M*k^!A3w^*FW?G&EE2*5cDfjxry4p0KXx=VXTv+;cfKL79?=e_f{X}Qp z{Xuf|&w;hLgzn<^SeL%{$!TR<_ETj>ea|pCGf_P@Kr-%3Zwld2N>1-N^<3^(XSUK9 z?G)&smAlW8>|v#FXi<_#@IlE?co8bW>kHa{7qIeQj-g^9%7(%mcooY1n z#Oh34++AGwwOg*4V=M0(W97%xJ20pWU|vGUj#HRntA?S+xwi>AA5jH?6-Zm*B{ZVp z*L#V9m{)6JuQ@k`Hqw7~+iou~8(D*C>dQ@2F)bkDS%lN76|9RERvWL?wfa2thWDU| z(#>nSQCDu<5mUCiqMkjM3Ax~z=D`-(Fzr#yuxBHWjb`7~HI75~hFwkneXYuT<4Z}Z z2bm6zJ`L=TLo&I7m8U(yL^# z+g<#c@%;Gk3K(`c+T#Y5i%m+ITB8sN^~^`0P)A;9Vs(M9G&*TWa}sC6$<1F7rI|1~VlDAv}S8b>s)2}aJ zZuUoi{j5DQYAGOeWydl&UQ*qkkh^C^hAKr%R?4d#n{TK}9V+<-gkJCQlBm=j9rsQC z@t+}snAP3;hmgT7)TYf1nL1jZRE#w@bJb=KZH)%c%tczj_PNcm`bqp}E4D->>Oe z51O|=6{cWPvi)f=P+Z`^;hx3)=h8ct-P9OagZ0=UQ^lwqjy!6 ziSa?**d}o+Wa;px=Q)C22@UqGCaCP$&_@q?z!bA$5cO?SJML+k+FkF+_tt*KWqP_V zklOQB0*jCFfoHE>(?xskFG1*6tYl1dcYR_F1WZRn765uebfHT32afKxQS~g>8{(<+ z5vpVpTtxcIy2+zGh8M@G5wmHaK_7p9)m3rv- z}XHY&-3@jSoI-;q2kHd$;q^;h23-5g#QCfd3dK{s(e<8jf_wbqsN)w#rTDo zxo9xY@`s=}WM_j0Qbq{PFJ)FvV&aIVe)m+`&iABEPu;&|Vxh*GDvqz=;5>R6k zy-JwFi>>5X2eX$(NG+Q-hVFqgSSt!fuEl^iR?GO{BffSXsqC~RG7Ok?Gra@XNi^p0 zZ>5**{;7f}?Q6Em+)}=Z9sWB6bQz8gYNFFpOB8oy1{FG$$tUTvbwx@#yeL}Rq-nbT zlO|fBB}Z;)V;h^)DHp!j;l?~gth@x^hEdU)u45l3F9BT^>J~NIUe7aePr~rSygF`Q zo{I`xrJyq^MRuOmgc)QDMe0Nvia$RTeGqnX;tCnhH&*yLy*-`SE|j(W-RkJ8P$XF#RnH;=ou; zi)9V{QF5d2^T@3`?L?8&v3W6g3fp(YJpznmnhwD>)}Cwozx=O*t0ZG3?%#T>2&Qh? z6KNMz7lpE20^$xa9`#Ect&c>rm&N$AZyih#QRBgpqyk`+Gf+EMOt`H{0>Wb__do=Q zrn~y+H0I>TS!OmXs&FcQYu)vBYQ=Z6bB2RA=mZ(YZ4oP94bY9rSFnFaj6%><70wIE z`>Pk3X30{c;YdNZ`U!=PM@I4`26i~oyT}zDyNCP3Zq~ov-yAqby+$j|W?ri?A1;AA z@-09zDpwD{Ne7BIcRKJ})@r<=!3k#XG+9S{!-ouN%)@mwod(4*YUlslw`@4H{!}+O zojd1k1m$p^Rn2|hyMUbj4d@Gjx^2ElHoU5*p78fY>*?om-u@bYq-W{i)Glw*Qv0Jz zfD65aE=7Y-$whG~Tv`wbPiAkrN(Uc&s6NPfo%6lohroo?lcqwK*=l&y^XA9{Gw_(4 zfJUtt9j0D3zVWemrHXwEUjXg7(0P#^8pepYTirZS3w@pSxQAWU|KWk&dSYs<_s91- zXvkr9vRTJqX`swb=}BI;6Tzc@!OD>wbO~7VhsCKo6)XpLDj?ZiUcxiSUQW9!+$UY! zPRg*BO?RFXe_X$GWAV7bEW~ozrkfDf8=(CyEz=Qyh8cljTgqK2sp^4`y&yBjIo#}t+_oiKAvvlf35c4lBnj+w$~7q7zcYjK_B zf3_wpBt!bJz_ixvtDZfpKiRTiK4pJTk0XU@3C~r9{{?)$|2rynEP2B(K22Ga;XAF0 zrsBqyH5+ku&pfI}(~ij4O)uJkd=R>QaQ2M;?h+>+^Gi4US*VEP$wT|>%}rEX&)I)g zN>ihcvht~!D}B5p_r1n@or8Li$NU(*h0&MNG&xkl!Qy|QB`FF7npn_XgijOsze_mF zZU;PbK7C`)i)y>&7?)x7!;DaCNUt5)Y7V9-f6=iCx+3w4&;pU9e82j{K@XFUObW%ABe5SVHVtUKUm3 z2ogcjPVe(wQf;1~IF?v}m%x8oXGvxZ9xkl&$qG*;waN^>01kWoxvWL`VtN{9az_@` zycD*MVNE-@pYs9U1<7@&;`Cvt(Ke7_Pd>+9pQv59nz%sKhoqaSWJ8X6FU$R1mdk%B z)LqKC;?<#$K}Nl-js;W^mDWOU*{QcjeggX^P||d+UpF`Qf$w_6?0K&-aM+meyYN8 zX{U(#P$mZ^oHiyK_~mVbXWh0+=Q~X^Qud!g^ebEi#CN(2G|KwK10jqk5rU-vz--X=oy zrC`AWBu2hJWUr3k+Xb38kg|}4OF&c|pL!4)SgnwGB0PGg*zK6YHAYq82jZB%OMKDf zhck@Mt4)k)Wz5&3!5ofAk8b03Mm|0#)-^X|d=|6?tYkAmhLNI(yW}uJFpg~_WL5J< zadyoUhq^SK1S3gmwE4?&UWZVX&Yj+Xy?-Z)tv-6eSY|R~0p(3w*fXPV3lR2+(fY74 zFZBK0tLwU)Tx+ji*YVzRoyu7@4{U&pw1J#5#Jwd}g~#~V@S7XWKw0usk0QS)@x^zC zX$9~%kv7oN*?jL~lapt@eLr^nc%^9+B+*o4^Gg7&v<4hu&<^9u=xT`4{Q2>U*KzCl z8GI+s3`NnHI;?Oa;mAR@xZtZ6Iqb)Mrd8VkPusq}+IMIM^f3XOsqCqKqAHQ<@Y}tr zLO@PC!rs3yY!>j!!t$bYIxetHLu#Ws1ZgC`oAkotK&;;wKvNt51m`HcU@cm$3Fx;0 zSE4O)q0cqw+FjFP^|xv)V5h*`Q4sV(XXG90R<~s8N@nwv z^(A1ozrUS>0)!G!{imfLK)|y#z!DXK*I4Xf^D`)OfEd7nQdv zD9?ri#Ozpa(B<&kuE1wBOy=9T4=| zyng)=zs}(JF)B-n;^N0&1n=pHE^^6KhGnIL6A6mvtuv zn+Q_9Wx4o@O6<_nTM?qlvVYdCBqKgdKQmqVJSzl|W>kAPSh2|1t6I|FA!#wwZPQ)avHZ?h$^TK- z2CW*^Uy0gD1sOnIY%?{5o!&oRE2jB}6i3=5sBh_d&_MrW%eR-OsW**X&<)DvbCGuo zvgPa3<`2m4G~J(Cy=?q*!>VutaJXaro3I-!*KhfW{YEkCX<};m?H>O71pXQVRo5v) z;tEDz1~|X0FH($p1Y@PsX#Z8EQy1`aD0#E2e3?G;%^|(zVxvD|;8^wNKOVF)u94`M z%Wcp%R<&q&{N_s~WVx*7>!U&p;wJHyZ@atdyRBSXS<~#~@)mdHQ>Uf+R@owo+?;$K z4H$mb)4Unk%Edi+$3V>xoP|l7CqFs>lxh&*t7wS(Sx=_YN9~4k7d#|?%S6r1KviR6 z{=-)`t9fZ1%iI?b#eN&IPtkS&e?IXlSLKqNhA|4!mzHoYI(yF-OVK##di(? zY53t3ql^FAKbeEp>K)0*VJyM=e{I2E=(L~1jj67s|1Ve5{!qUR_M*nES9o^RgA-0K+ zE!lGzW72y*IyH>rK8~W@k}AG9ois@#1dCUBUji6XZ1V6(E+X5=agJz?A45?rPyLH$ z-#)JR?wDtK5K`bJqw;k#>T?cn{4Be}2dVPXMX9!|do_LKT-7RvDVKl;LuIW#JIfa| zYsff?#3dkHE|{KdJl7A>B-(9PZ$H4eG>b-77RYH)cZyH+H@fq9b$#*-oXe&7j~~J> z#3}l*U1_K1i};GsFU<~U(F}Id;w>1dB*#WlPvGjVreE>nB7`;3DXvb#M8`m)n^d2P zaB;N5(LtD@cNevkF07whRKZa?W+>QG#}mwf zDR58M3&}hFU}*q3U^LQa8;b^arGKh#!4iHw5U#cYr`$WFz0QEF^Xf$^Od`y@O3)73i=D0dy(#H` z67ye`6EaX!!;DPJH_O0}dt=hS+ z|B}2k!o;4~-`)SDW)fD{-te_L%49#jr5$?VG@OWH+xP67CN+LktJEoNTc0wJ460LC zcck@Pr$~EhGX1zZ};X{I5*Au1&3wssT#<)}PzDGyKa5GL>}PhvI_o&XIzNei0WU6lH=J9A(m01F;I!N|-MGevRQ< z1xvOp^Upq=YtzBh>cO})vJBRS0U=7z371Adi!j!~T~GaRJo?J3nJP|<%m<&dJv=!PhoVd^H!24CGOMmqyk*fggX7VI z9>uaYMT(LBBZHEbH}g0 z0&#BX1GmKnY@6-;N?G=qz(Cs=72hD_cb0Nv3#yON0ha)9uE3d^EBn$_;#fi*pQd%| z&xzG2LyqHFBBrFc0e|az+KC{S@!E$Q!e$!f!-!{6M`H_>r+cO@K%LfEQQv8p{F%!x zCHbpl^^<-7z`>REnuOHjgi@kXM?2dk045dKvrLQNa>^fpV$bFH#46n?pm+7wiIeC?x#H_Ad#z{mVUsQw-ogp{*zDu-5eg1ho z1g5TZt0_&1`6s9Gbq2N5n0+p(4V$arUdI9p;qfp2p}KbS+I=SwyZ_c`?xg{ zidgtuCz)BziZC_qPmvGTP}64lAw9O+3!lYR>ekLMlbayv2XUD7>W06Tgs;R;1hu|T z@OK)5ZfM8WzCmf8H4Q4qW?b9oc0V??Kc;qG9mJ2(*S}%yuTbT7H*M8c`uklwEgH-~ zXCGuep4KpG7+cDb8T=7wgb~4ffeGqWde}I<_r^co9i772 zU-bwjocEl#-g^}L1`h685@-$NeYWga1Apn>eRXI%EAb_WBr$ZSn!uM9<{=bcX^Ckm z*W+pm`_(bfMJeSv+Gv)b14dXBbaU1c9gCCm&j)gU4LD#vE!pEa>5>|_#sc=OxookJ zCRn-IxuJFBU4?DuR2V`;YW`JD!}8ZW=0=33WcvldH$tKsln;FDm!3b*>N3>Ggj zW8YTn&>3VXHkf^oplM7vpNqxxpzk+Fo=Ql$Pdfcc84%oeeEA{m{z|Ck0xI!vnf_uF z&DkCaLEUz>duGQN`~!i?D3%!ziy!M+te1auXVefF^^@qDaxTbq{GWL*`HB zmEGG^nLNg0CWyc>w*>9{fC*cPp8k_^VDo$WvnQ-HPrnym*s<`DZ-OLmH~Mm|9Jz zy|7$m@)tBun9;04F!Q`ie3?{RZe=UjP@rW=mY+w;>yzqA$U<{4EArPVV>jvpQg}*q z$|sAD%5?vT-e6CL-P}}yT{M7_Cmv5BcuF|M6^g%*enwK?nuz&UR5=;o4PqxIq?W(= z3zD>Q-{*5Zul+`4{p93;ORHS-(NY<5goN~qpm=XmaggS(y+@j>Uc4TsXiXzD8AA_) zX`C0ljkW?z!>_3}NlPnm7H2p5*L--!G;o6|rs+)Xw^O$b)6x^#>-la*hFXgHr)E^7 zs*YJt(;4uHpUSp!lk>5LHYAZ59*m7l`DR0TNC1XgTo6VazZ(|58`_ona`nDP`oN&= zLNg=1;p(EvD*|OUm=i(&ZGKzzvv2*d6ZYfknHO(Wq{>Zz>}&Txv%qiv&0Wzl3Xp78 zN;bP-29I&v6s;%n)s3b5ISQR|6($TK-~PCMlXG<36&Te#7U7N-{CnzKqZ!uv=-My) z`bmn0|1C2{pP&B7H-hVTqLew6Q8(?&r}9U*{gRgrYbqKblm?9jxN|*9N)OB0Qn@{W&?hX19}1M8$B6j^@x42f3>Efr-z5JDYZ0wtOIp>uMNWoAX1W*R_7d20 zr6w!oq53_lzA0?DVYcF5;`z3(Ow}w_f1PMw2Pj`}qw70OhyZq9kJ3)>IyH-}@OgJJ zGmUs@8Yp61=*sz?b~yBdtcJvfAqU*^*pR5%1ICL8HxQcPpr6631zV3Ag7ft3V5O>JWFzrMjr4ve@G)^K~ zZbK{RFrUpbFYaGJQa0`bCGKrMNT7xXEk)s4g2WfP7OfYyfIib@K|Fo-G)em@iG6L` zp2edWi{%Y3p-pWm?E&{h+#d5zJ5#HMO9d$37xD>*?&|oSDOtPuRqQ<%uJN#TPe+fW zxH&gbM%Q)6hVADCi_$h*eAio`9O1j_CJ?L)dm`JyLQn)=AxFWno<%;xh3%2r=W@ae z|31j4YH}7)bx1L0tjGFJ?c+PC;T9u9@f~kvyN^26=jzF?$d5qM@VuV?kbn_(lotgq z%!a%2oY(YUeWIlD>7WiQ=di-$k-4qTh}#QgftU8r`UPL91KzH$k*p@a8#8R;Fmcgk z9{Of*H@bT7~$FpPewW#xFX%aJq92+K?@K!Gov$ zSN{IRu0u!PZmUnF{qtPhabG5XaloG6x20`8VPeLc0lwmEEh?fODubf4E$2Gj77JuL z9Z{_&bYqZM#jJDc^1rF*-v{9|qL6QQ4#z6q2Ph_0l=eu0mdt%E!B+WAkv2)=g^pp@ z0b!jh2j){bn(y!qeuFPwn=ISc5q<>Z#b~-{(!)WcoRwgs8R{Q0-)zR{8|_BwMQn4v ze!Bi}&#Ix1o}&lJLP(5ouZ0@V&OIh3M%tlgYVka#xjrVW7)1Hcm8*l&TC0KyGZ`F_ z|FJ8=iEvSfZ7dPc1BB(A)0+aZdX!( z)OkrE>sIN)BR>zj@kVC18=cRF%pFwLt_DtsO~MUQf&bg)R zO3g(bwmtG$wD0+9x$vf1XuP5^UMJ)3b+z<6k(@#s?ds|=UMhKQEua@CE^Z>2hz;FRK%?0U0Rw0- zznRgLv=8Tc%&fLmNceM)+feoURC_=RN(W(mw~+PtJv^&>p>7)L;{D2e;n597(mN*R zeTFA3dL+~%;zkwGbO#q%Q}mak`A@)u#ov`*e#U~~jFKgh@w3^Fg{EtOD}eQqqo}y z{K)cW^Bype?NABN>_eE{Aw7p` zu2^!+1~W61-i%pWQfPV1(y<Ug}~>#mReMy-@fJI{I3`vD!Fr4|x$4BA#8Lbw9It zJGBMckTC^^nV)AU0K+fXg1m5}=yX)^N2i+mmQU(??a#8*QGX)-X+$Y(aGJtXwH-9o3K zuN!g8x{c8(%I`DQx7liMre?sqG}fJUYvkUd&C_6gey){v777gk)fZ&eW5e#Pc5dID z_TJ?-*_8A3Mv}}b?Hr4P@+j>ZOzl17->}RAm_#*Km*ZqS4dS%kNnc;`4KnQ730T*2 zvgdT+ab2tG=(iwm_O;hK_~vm@bXKi^*vhbP^AHP7lDKo+P`SHMHP|oZy`|H!IiG6g z$y5&#G_7uh^FR7bm}&2RPkL!ClxfPXD62i>cYEdwZ&LpvO8+`;+W47)A_@w<1Y8@f zXDJq+%tpOS+ueCOe{Mts_U_GJ%=K8)Hl?iGCd(MqHA031@vsgE%pNWjQpNo&X8TRl zV%QW-Bg&xd{KqB07OZ*0Wo}j#6!m>rYT>EyXAs9#=PR84H=O&23flw7|KB5wFD<7S zpT~G>Qvadci_(50`k}H$qsNfy3-*pY^BNn{?^c4WO&&h3<#BKqFL86`N>AzY%N|w z&$)iN7F+m9N8sTvCN@zGZnR%D`2aUY^|<1k3 zvimBUL1F`9QZ7=`JepoS7|0(!VZ9iw>l4rZ>b1;4Lzzfb-;&J!&O{FD?QpwCI3VrVH`ZHMWGgqsi?%EZj;;R_KTUwU}x(D*t`Z8)Wle~!&DL@m@=DZ?mh#O}9bBPV{^4t-CY>Y!gCy~Iju4(O;? zQ8X<7UPOrayBiP9rf^G|2ZDj9A5-%4%fZua#OS8v0a_Cn@_A}VqQ&M z&ThJG(XvK1i@f6OR)jA)o8NzoiYg^+vQ3FgH5yYuNt6S#ha$ox9l>1P2O5(8hs z#MPV;Gv+Kav?y9CrkmUEz4k19zsjcoPj6dAjp>E10wa8pQVop_^lLP1M!ap|sa-fuDW4|D3YWwP|@kX?wrEK-=Mz7bX(q zK!5rA>%6URG!XfVaj~T4nsJ{UXSR2#Ki<~7tG^a;ppzcjiswSzn{-Dgouf*!pd2qh zM&oYaD11?#i6@&0M>`kvv0X&?0%>*#V@fz%)V-6+vLSc>22A?#Pe;$f{B2i=RcG=1 z!B)9mKrX(_9AbzK{G0c@c1BPRxjSkoS%~=MJEY{jLe+9sl271WxIcriy@lo-_dYjr z+hgziXZ$NDI-(WR@DIA~yT(hkEPr+u&qTKAWpAi&&dqUSJxPDBn$~)4Fo}P?E3XoH zZc2WQh0(cQsI}y(L0Z(ZhR>gMQF#U3t`S@qO;|_df1o-&(%8uYG;N`+=z68~0{hF! zg)4Rx)vOndv6cjzk3P{$T!(o6g?@))0P8J8XU76(gF3InoXj^2{3k->pl*7~r{(X_ z^ZXj;-e&FBuWr|VyT-B{M!OQ>eGk%peZuV(+{v&p9YVdXoKuX#h_a82dL<>BA4(RuO} zff!0$HECxeHnwd!e;PTKdvjv%5&&8Lx6DI!pX*@$jnQr3@J;UKG*>LY5hhV}<$@HL zWRuUYPH+m7-=mptkEqjw?KXT`#Yest3rh}CK_y%O5IkfXm$TP~&;oLp<#Yv%og`Si z-4HDhHS};$!279C0$_~*InrXhLVkhKJ(CQOzbebW^hmTA_93bv_Q$$6CGSPQw)A-3 zU9f-Q3G)0W{$ltHx}Eg>2lPDALD%M(=LmrFle<`s-y`39msIk%onXQj&~L~C zHPf2<*k2aDftHvQo%}(ua`gJXwfB9?;~D?Pi10lpqwGrTz*vR1-OARCi>u#T*D`FO z1hU9pt^e1tyW@sq%iSC9Jj%Ox7nB*gU(=-NmA{~ z*_>KnnfW5*f#nuygYJRn2wMw!|D&FG#@>gAV+b<^4x^d(9=`fPQd@180IJH`t?wQ# zd*h@$svVEN7gAG4EQ5lW(Q4}VH`H`BC)=TijASvnExus(g!AVF zs0#viUkJ4j+R}e>^qe9vnRtG?EP5n3V)plKMbLg?dM>=ueXRHRrXN>(d+V9(fXJWFwbeMP zev9KRJHk;}**BU0UMAz9?tN<6tM@)Y?1j#ul_rJNtYgCRjt%Xoz37I>i8d(PECe|L zY$%Ot4LVbXps5L$fJp1fpqD}>R+g4guO4C(0DN#Z@<{2)SdrcD(*4!`Z(5Eh;@sgDGkwq=(rAR}j{MlS)iw1%6dpWZ~oZ36wS zF?vEoA9=|n9ucOrzO&mWthp=von4|KN|#pbpp|QDYO}gk6>HdYf*veVr;6lo_Sb`o z-tq^U*#zQzh(bVmdocO_S%T&y4B7|d7)1BZ|EO_?~P5?{3}Tw!`d104sJe% z)ABlTqQ(;!IB;{F?TP;#6!=QvBHKb%psq`PRZS`Xd`T~d+=ZS*^9*k*Auw5`t2Ug7 zCuB#QVZ_u9=ms&hq9UQj)}O2KOt|aM)2cboM#r5bOockXs&ZtZk>@i5kQsXD65wYY zZd$5pv{6^Vu{k%ePEl|SqHUwhPF9p#H0hD>rqn!YUUS!0a4q`jAqA-` z5N>Ohv+zjd?;sT?rhn7s_0kAI?qCHSV*lgs!bJ`)r0`jDNok3>b{M|Pf8lE7CZum* zLc*SgIor!d$@TtnBK5qGth{lw@cG{iZLfyq`8kx<_ndp6^DzOfXLZio{{|=zguGly z(SBFLgX(2uziJhU5a@%BvBMJVWPgRa`ogld*zJ@SFxWx28urd%jF+$dD=M;8jQ$9n z?(Y>W={Iqc&5B!V^opQb0A=wKKzo+gp_F7m*ys78uvh&?e!nTiUhbJE=PkZA<$=BZ z%oBbA-xx^Kk-xmqdQh$EXAX{LP_bVr*_G2$J;ZU=y^8mXxF7Slv|j&NY8SexViBPO z<=^XR4jRpY%2$gd$CVD+yLVL6uZ8N}K@_elEUVi=x%W9Gr4i50I5~@YoHr%*&()CE ztE5f9|3PeqK%N2Ns50+XN@~Ka0>^k>ja>4-yVnv|xV)x4Y=Ae-4M1b3GkK0tF~|Oa zsGTR5fXZU12vl0;e-xaDHydsj$J1)7s;E6`w6*uBJ*$eMq@_fSM5}7VooTA=z=@*OkItL*zP`n2W4`mUZOZzVRlZl@{>ojbL4?SM4kmx&eqb+wO4 zE5773g%jG^0=*?37VyS|1OB&RUj*XwxRA~JMVb=iwg)PG0}X=`=M`ezkh`; z$DAHJMfz=bI@|4-^B3Fg_vC_XwW2I)C)W~aOnF`;S~k%+XE+DzB%ANf=9<^vuvZ1K z5-vJ4*kv#H2#Y-$HyxCH>PpJgS^^S2orGchpVHF5Rh77x^n5#W309%fr>T!A=fhZ> z`=}J?)N=AB%GDnF9iUATh+b~^>eKG?3a~0M76-WtR*h+La+vnewG?)8lM=yQ(N!aoKQYcxVh;9Ls)Vz>{r zOddhnjXsMl2)@1i{F+;}SkxGBi4vYkWpXH<=H@ zx5jmcuPJVWeZ;-|xGU0T#=)Q?7fGY%+ zB80F}Xo{;Adom#8D`qtHQtuStWd(CG?)d;@6n@jGc0bnXWCvB-H1}iIq=;?*G!Gf_ zGa(ww#f$AvaBbs&^_`j%xJIMKNT&9co1g2ZU%XAFrr?d7k4x~vwDYRcb20?~`7A+N zc3T^KFF*93baPGtuRyz5`+IAvc^EY=B%&n_FKMOHzE07w`@SB%9tz;}>x>cRgAx|oT&&OyM00!7ns8sSazUzJ zLaW?CyPMkY5ZwO9qs5u5lXJXJdnEZG9dmziza7%T$#WLbwYB=mWwquyRbuHnjrD0l zn<$Y7XBx438ckN&t_v2KUeTSb1b6=)ccE^Ub`#33e#DgcfmYs?GxOjIz)l32;S+m- zfPZQc?7pv=zh_=+tpS{RBya^7_#)dqY{t8$({~F%$yGji^qFM%og`XE5WfO+jM6w= z0RY+~Jw-XF0iOZ!VvzY*k!?FQudoS<6F^t#_cBKrpZ{u7ZzIb{eyrVc_FxNk;3_9# zlI`DUQWIeP&mLbS#>w)q4&V=Q!4b~#O~pv;<Y3C>XMH3*s|+U6RB3;!R(l6>Y(dY|xapG5K!^np`bL zpr6aB(dDUnFd?DD5kWND?+q5Jo2;dQn6#uAOimuNu-@I6z4hh`x2Yxt=Uq@0NtKvS z(84loViY=CsZG(}2@=`(0b4hx({8WgE*)Man@>xGez{IKh{LZZIv+)CT%(dB7 zbQ^jlO7KUdec`+UT;g)0;?RJJc;d^_i%jvy045=P#1T+7E%4tj&%xJ7r2nvtnCw77Dnd1Mm9Q zeBIYC(0xeTnc;TYw9LM5bzBnV-Pp#fpEuKodA^paAY8g0e63SB5r^0|!80|L^i*nC zKv*zZ6*`X`^S#BRjIQSf{A6EOgVr=mSrPU7yOJz6g=L&l=j#v{t=P5ss!T~m&YRZ& z>|7)KF(tQq-;OtfPYnap1hxh)-}&m3>Zi%Nqvrzu74-*}gEb51%m>^Y#y`o_%}C7y zL{o{NLXrXTEmktBox>;@YZwepLu0+aAXxu2k{XddiT#Qz99*vKsI zqW5w+RMSI1Q&fszTc$yhvEIr%O(hlJg z_ZDHgdOjEz8N839PagkS_7x2)?YA481#M59A1dc-Q62j$4xTs-lP(Ml9DEoEmR7og z_!W7oQLWwpboan|R(I1rrV=ytX)NOD?FIR|faz-uLAK_Twg!J)9>!<-Ke)$}=EpN% zCO%sic;{%8VnzaqrFj~p64+B{@3(-pR9ra+l|@&=HQH+b92O`VBPxa~`B!=F`Z&yX zhrCUdxiO)ou-`|iB*?2uHqH8BPV{<-mxzGkf*4MX;*#Eljqlsfs5?tPC}&mir+8FP zQhDnVf;Rw9%U;9|$o?(-Vjw$M{wR&QnRA&Z-g7~|-Vzwb%`p9Ns)WOCu4KSIN@7uz z;rVD4^SVjP4;0Gpa3@gXO<|^|)lk(w_$EQJGmon6Kbo~HxzkVoVhps4KCZHpFMyA; z)U~?*c>cFA-z1^`RzqO?2zCpmJux#97z&UJM~y-X2O z7j+C!t7h>YUuj5^rLW@myZPy(l;*aT-IoQvf7(eO8X*Ly%HDD~E%ZxH&st;WT^Sg) z*!)gRmWx0X(Pk})?&^%bM5X*b$NC6Yc~Nj{z4e%_e*yaHsEm%V?DLJ(pj*H&Hvn^8 zUd3n~+Oy64R&Omw=iecvtVf_W3NC||D>e>w(?MtL2laD-=tz<_c2~47SJI7xBKKmT@^66VuGo zUv*|Zbv?j)OQaPkwjnzGvy5&F%8znafEaYOla%A1&XCeku1QSg$Z!=#@@q&)-2*Dh z?OreCwwxtLxQU-FZPq)6QF<-8wE00xD~2B7r|XKF1N|0{oVJOa)KYV@`^CwNYEmJNL&Th1HdX@&k79{4EiRhe@@X!_JVUwM+~t3>sM5KZv{dR^h3Gt5lBkwf6;^T z3K+$S?DlY1K{Iv*4X0EOrLEg+JeN-A6WHOC6q4-JU8w>0c6@5^!SD+`jYsf~<@oMg zjb?B!n?>_c5PcUWO`PUm`|QSNE@MXuxgT%~OpxH?R!vT3u6Z+w*9&Bxf!JkOuIX(l zthIUK`$-RtiRa_MdjmiEzl#mJ1@}HW!>a7eN#|7tMkSI(iOu>%w_=iPeIp8ThdTd< zKhP=CO*Nfzz0WsS5y^!QDv3GXk2@F3q^&I8RQ?1SQZZM#Lf<@b>1k*W7&? z70BcRoeL}Zh@_^7q3cu~Tr~+$Y>q)2P7q7_lruj0T!^dfVzXZ2r*>$V)IY4oNkuqj*u46VuEi~XvMG+WB zfT)tLUjZU~F7t8B#5{Y1714XvP5@6{L|F{7>p%DNK)q{aJV_#OwSR`YVCU7l2K#}n z`1Y`+KgZor5w`W_(85EoOp9_#N0{=V)&34@K}nsL@JWNNMJpc`VwIuqV^6q|%-=#F ze7W`HiJSgTYRX{YKB*O)c{+9W4~$f#+~b^{(isY_F4iX>^+glpftYUc9Ugp%7GXW6 z2;Y`bWHpS@sj_9zbx&l7ek5jIy@GObza?WNx&?{90$gun_*bq>@!bZ*#0yS=u$_xfjPO~+`H%|v#%FfjzLbrMC4TDk(Wxp{e+?KEZy-EHu}F4HV*2{>d>2d^H)~)Jdlpg^vGruU;s(u+ zE?FC^Bs~mGz<%Eq;2wrN)?R0~R)wE68i&(h2gG*73&|5XF8MX4rlEyt1zY*Er8|!? zjr$SjZROa-7;a92VN?QY{}ybh8?B&h-AbBJO-BR63d_aZ4iw+zf98!tqu&;>z4Ezl zHCkfey$BHphWB@Q^p^pBZiaw1OXj_LRbR38G@uSL_oG`B5UBfO1&7!}@kHa>Df}Wq zO&4aVFeuI_58wX+Eob21eW9ioJn=S&&z-;J1k3Ix>VkRV>=kN_+~rvoXd%W|%)@FU zYs#TAv02-@l%`&9y<~c-#6r304{reE0qb%d)+F$>>MQ&>T8F?=gRpjBNl$h>IidSe zej`k1=+T1%vguqwoG;S&Q~7lFM2=#w!0|uj9I6h+WQz7=xuR~- z7Ps==Kg&XuwB0$#DM?~@)czmxNvwHm1AZax4pjM$!43L?7LeJJ)dBFgFKJ}-#tHMX zI%5mICz!H1t&IobbobGJw55_IZvpQg;D6lX4oL3x-P8z=iacVnrahN$3X^$g_Z`@z=mRpL~&c zy7V5Q9BvYu7gG&A$>6Z>4Y@u{o9nyfmznk@=C*1d*un4a3imCw?a*qp>O(uVgnGJg z2{~ZZobK8itF5=YxrRL=zlz1A6jeDvdf(ws@N22dvtPX-k?IeAHcrc~)iq7XUi#N5 z%ZAQ;(R1DT(d=tdoT(@6iT;_HE z4P-~OFYQN=IpHq|yNgi>$-Oq3O?eu>QiC5`0S$TYlPz_=g%Q5l%tmU=3$_NwkyP*{ z9XwH2fIBTBZNkLuAFxH8hVcY@Lf<3q$V#)qK(_Y^HfSHBAr@Jm4#F07RDo`z=QcbzjB+W=KU3b zwsyliFH~JP(;!~mhtZPA;V?s$0LgwVbVqksa|ha`%1XD>ytIN(K(yDOdx13Cl4(qt zZRKxOW`JuS8{OaAd9Gi3^28I?8|2Cn5#XNcq9U$v1>o)OQGRveonPbYg8Bc5oU46T zdTHcw&xb33E>U0nm~GkoVN3nwgD@`!0KF&g9MjF0tcq;R$C6zdOknZ^%V~h~xtF6O z*Os{f^vAZa?}wQ8_DQ9jY1jO3`1A%{3#kYm;RqTT{p_ZG16E*|GPj@iGNUu~8Iyg= zurAPQvdJ%@jRI!h>r3XJAk)FNbz0)i%1Q+z?c!fOpMyNWH*5vb1h{vbfG?jR{L@U| z^iGrrAdA<3L25O2n!gcwx-%<#9{)wHKTipKrf{9PM`SqWC*C@oG2+H`L%1dW&enwX z1l;FVi3rBP$Ippy1#r|)C&Q>7sA#H&CTD}T*JIig;nIZDIP~k*%RG|D^50jl|1Q$p zAC7VOHToZ$Z3mYVdu`&(a!)`D>mq)rO^~3TO&>f|-i_5ze-t3~DoJPjwjh@#;;x}2 zlwDIr2Mh#u#7W%j&XoyN-yp4wFTNZn$=NAH9zh}kXj@&%<>p=?DytWG=64wjzRd}! z(bZbwYa`C#+T%u5-$?A?Mi);4)5qMTODRUBS=l6W$!qOaq=%FpJZz5Qe&6Ao>6aC; zIs^V#RaN8s?q>$2_dA#3#$j2{h&%#`Kk8~P)WO@2#%%;^qPj%gJI~`oVH=vimNN;f zQI$J8t6ZkY%6}Q(bbJ-}KBX01a+a5Qz88UQAW`BBb$htkCsrr-W{1Yy+%Qu+0u6K0 zCt-TF2QHffyAWC86#!dThQH`xWj&Qogt}BfJs^(2;P3oRkpk`sKZ2fxQ&a{ST-cDF z5g!-B0y~r?qVX{yw?@25g{Hl8yq-Yi>g%1a2}OrYD+1DH^O~P6-X>F$p5Y5Q_R0u2 z{@QUAYamQj^B<%@J(wb%`gV;jsT#U4x%w&H!R(lz|iz*M>GQ+(N;g9q>5K8{3w@CzD3oNlFJt7w1fD}%k z6J&YEu5GEd>yW?m%15Jq9n8G0dI6@bj+nX>5|OE%kDu*UXCqFyA&DT1+V+MZ!y=#h zu{}LX#~1PWh5XUW`Rd2Bq^Fmupv;xI$aPuVg1S?EdxUzKX$ME}JXdmQM7|=&_ zY-cW?d=XMG`3_R!r_#HSt^L=ryfz>d#6(<4PhM=UP&3{&s%Qb$491IWdRkao@JY30 zzV6zObQaz1A67y0;MaSD6)(TGJD1f$gG5ID|1$*2(a#JtlX=rVu3)9F+xOZQt!NaU zyLFjMMVBB^iJi>>>P~xai09WgPaswz-^UGu-ZdpX&Hc(AwQh-Yky5h0r@_U@((@!3NfE7L{&2=XbQKa%~hJ5Vf2r8BsDC5J;OpJ>z6k_Ekf=uK=j_7C7o*M;-?R$?fmt`MPb-S_-;?>B#b;&H^XWqyyp^DK z8Xv3*RhOCEtA|=FpfW6CGAn}3%d(W^PK&(Hh;M(|u|h67PMLcbk>a)) znctiwtPa47Bg0ricFiB;__RLNNxON-dP|UgpzB_vF>At22VgPL1UMn*#t5F%4a8-+ zF@Cq$q;mZ&@qNKU?|tfbPw9F}rBc=BZt8rn;Qb5gPC9HB&t1$s)FM@^Sess@ufp@S zjjJ6X@WO1+@NH(|>t;3sI-_D`#_6$CU&F!$%;^>2aZgCq&W%|XY;1_1`$zy!*QLa~ zy5tiVB(6Sh2Xy~KL)K8dhOhqzE;W&y#O^%CEsNu+zPytA8IiXU{MxzvGn~T=j}H~M z%snRkdjB1lytc)AGCl#P@^fK?o(cr1Tk5g%$G@kqznNB-Bt6MNkTw-O_75DHSC2wt z$ra^LHUtRKEV2IQkeISW9z9PCbCXM?qF4V>Uks9uB#=P^=#d_Y`W-e}Q>Yr0nhKln^mKj)>sK+)gkW;f?{$O2FeYE}Pb2zdE+}phIv;EZsF?V2^xL9E6jkQdyZ5O&-QL@0CDr@rVA_zB;-BaB!KezlOi|2J8qxZF!umV3Y@;`eQf~-xA&dDC(Ixb;+5G9n+{TuhCiAUop;#= zwypYdevp4lL;A#3HI{`X-@I_YY=0SAK-+z%=h`Iay&&kAs~{Sc0i`G!dVfl(;9IUP z^~>|yGE$(bXR?eVx_N&4hrxl`3tH~Hnv^gzvu%%`a2W!yr@RU~O7jS^mFHmjUxrDD zV1USOhn=w}1(G{$NB!Pqj&66}?Bi}_zt0lREf6dhwQ=MXpqJ%3#*WuH_f?m?*%KZ` zrEZa2rC#`9VCkrj{f#__#<3S5kp*WEkg@S0`hF-So2gomNaZIoW9y{c{dPuTv4aMz z?Bv&)<4P)jEQ9sI-!43m5D03_ST^JE-qzOeXs+ZsmpoL>?x$4#@j5%jSWjGDLpQ{& z{U0;Z)w+FbqanuPFP=`o<%)Rjh1f3+6IAIQvps*BzU15i2ERdR?M=PL#`V))!*30QU#}Lj8R(j_K z17rQ);n15)@VO;2^Cmi2g;1P@kSor?8Kf4S0UaqsZRAk@EwWR@7uMJXcm_d7-HMul z^p-<5VJcZRm8>bvx6j`-+gYej56oD)Nt@(Dk`K4`$a_(fApni{NN(cx61bHRjPB)N ziE_aWkN_7&&M`qBC?dY*wyxM?AS5**NL+Aw%nZYP!h5KbcR% zu(dI9Q_B4!DHuLoJfXvn97pwDTiRFGduYg6)6esH9sx`%sR6te`^34ooC{r0HGx(N z?v7rF#DfeWG;^{Tgm;j#c3>bYwF;BY3*mkW-to4rbXw!rmE!(y$@aats_cf$vAP(O zi9e(=VlVbWjq&6QK|YTysY1CFSZ%ZV<$If7K=#ot_|*^o%&y|u7nx)AoXySj|DND@ zNUi!;4C`*AcfHj!yV10~oUWC@JLoDEP8``$cYI6v}PY zl+nL1iM_~~MI28giMoUsrALrzuSU-tYceE?h~Dy%VGDITjsWq|UW(4wLfDBD{ScHu zhR=nFqeU9>BS{UrlBo6A0m_#P*9;%1s(0=XViKm{425v1nu*@7SQOdzX@6fidG26S zhBI*o1d~SY`k*UL|?odBF80=dbk(o(A8A>`_?kL_@;kJ zn7YIQv1Dm}{j)&c3w(Mb^v4gdu8#yUeLn5_+1oGad^SM~REo$9^@l|Jz5^Kg6}rU< zt$>*tmf7M!9hO1l{Xd9dqn>qi_Hzm^$DFG0aQ!oiR{-kSCk=SDqo&i7Usr%1 zFsZAnvx8c)t-Y~Lj^f+bOdi+^{7^-fB+o)nC7;>^2EM^8dzwIB%+^ONEAI%u|Jd(7 zCd9`3jRFB(3kl0ZfuryX`#k}XIoLY zOo^d{>kuXONoE_!@;y-CQi@7Ot`*ke&SnikU0GH0(WM2>+77OO}9fu zcczU=q_HWw373Md{2h+7kAVmNtLIbuvE+x~{&M1XDD17{?#}cSyaDY*Ck~@T%5^*V zVsfK#7i#vvk6cf?-twt?i^|;MQsBK_q4xPv@x-GbU}sGiT0q!Ohr^MM0=kZzh#718 zY#8j}p7hm+=?eu3W^xd$gv_XnsWdBWEkp*5wspV#c_dV1B(LXqnmYu&(1F{=cDcM| z0<$SQ)Lii9<6WX}NfpuRCH~320*IVl0U(pLA?!{ZLD?tr;sGowFzvKY^2OGTx9{7$ z1oGK$Zi0qi-0&N_onsqjL(mhw-jn++n0a7JGd}zK(<*)D+Xsagg$R%HvCw>@xa=}* zfeYTdT_`8M;-)-P7%PYvdm&Do#kR*E^URzNy4dyv$W}RISkxX(be8o>nFJCkl8TF9LT$L) zH`%CX*N^*8{FC025Sz*UT;)yv-c{$Yvn8Fbv7?%>Gkvz}8!3%k; z-ib55R{)*yV3v()m@nEiSC+s(RX9#9x*cuTKtcAe2p@h|8YroMX40j>0=LBi6XiqL zQ8aY=kvQtRHie#~efvN@7B=pg9=th0`*b-v3y$Y_ufo zhUfeZA%54LPCd@tsWU2=?^UVrzktJ@!vj=?S#kRNFIr9<03^xN72gJro+Z~ z{fQiKARj5My)cNL0K)yQC*59&E8RYUWM2P+e*i6y8mAN3C*Iz$G-2@M&F7PMgZ)5X>>;&kq9>qVciW@0^F5oq^ zMNx4nYL6C;CKGoVIkE!NCM1w=V#EjNQL!vqP2mZT`?T#h62BWFoGgNKM_F3$DknFw zvgS1jj$HnIVk86d)4!PQ(x|43RfXV@J^#!zGNOQ+adNP~Sk@w3xAaZZ`lX0!(4>v; zuA63Z4Ay7=Zw7Wc^_%5_C@e-P+J^k0Fr3e}WN-TrZshW@tCkZe>&Au|8#`M#KRM&E z4;}D;ZFphVsovDOx`2{#z6w`>YtF%vj@%;n_V8mbe7RBGgdl~B zx#og86q}aZ($i$B?ZtYDDjbmALHP)BTe4OgIwX1#-G;s|S1Nkwx>#i$Io4b(GMRVd zNR6WF91&Flc8V>A=orIRnm`ZiHH2q+Jr+dp694&so5MIMM_hKKzs_{DYl28QzbyZ) zXeG3ZX*oBaqj6O1s=zqSp-)q)r>_7b8TCdNLi& z)%~-6H&To4oQ2W~u8-+Doz1?kGFjr{a`g!`uN+Qks(w2B;ReE=A}++@yu2He+lrm% zK8Euz-~Wrc)bFuWLk->Rd3QZUn4a}1;E|)U&1yW%?=y-1`(`j;xSsV;yM%%8jQ{0m z>lgY{f7QFM$4A^#UYC}slt3*H&T^`-6~62^588XHIji0atv=u=Y8#hFVP4;dOALba zmEd7i4qZPx=AcK^SnY_(1zP-ZE27|=LjkBgUDUDGa>MpZ+sSW=pJ$q)L`H}pNtg&N zCa!mqAE#rs_FuU07^ENAsv7Xw+z?QkLs0qj>A;+)k&(enuvi>rrzAIQLbGu!MdSM4 ze!mKHr^lZK|Kstsn0NQHc_^qj@F?9eV~8WgxUS8*)dNdWFD__AP(N=JFG0L~+& z4|K#S(@W=;xd3cio`&$zd>GVxiu_3P?VUIAPjP!HuM^gM5~L2KOozAuH$w$$1NQsc zXC`pK&e13^H$gJ)+n<8*V}pxW1K>{1bEDt*ystkoibryN)fF;f--;aN+G6orZseaj z5e5UI@)bFIyX${;$kLE)W$z~Iy;N+VxoqrzhAqK-c`tOxFl4C4n_x`t3hW` z$UCGPgq{%UqgKYg!y$r3Pr92Q?ybLc*h1e0KZajo_BBNs=Gu~dE8Ik~XP*noL*ea4 zu?0f@AO>pd+5f3ncw#nFtw3S))cM!&I-g zz)kW&grD<^Bz5)K(3JNv@tr&*A$jgy(|WkBhY5yG#G|L zeCw1eaYAPP?yW-t>vU98A(IJu79K>!HZW?E%kT>!#SO1(&S?dl#;})Y|bqe}Oz|?J`S5 zS-C;kCVywEfsEe(>!as?s(1q>UI%94+Js4_|13vT7l&K-Jf-<`DmFLVbKD`o_vg!b z%|`cUao^q}p0jVz*b$Xad(MHqL;uB(%r*7p+-t11tQt1vrQpmm0s)rRlfh^L9X7ES z!nCQ-rc5v^Dge(}%y&b}7b^<{1RFjNhyMJiz-E$n>QxrGliR)MZ+uKzZBsM zb9c{z`ah_!KlM6cUCpp>u3JwfsR6@BzC%K~dLis{^LlLZ3@~_KRo5&~#?>VG^xviX z@5hqte-IaYrj?_j<+8HMV^xHXW=$TIO3!M3iBJT%*Pc@lfG1xGr?DFLBb3;Z&OAEg zr+rzMyFi>Z$Vkd!Zh))d??I$VgI1@QkuticibP2~UDn{yE^@?pb4#Q7>I^C~gIis^ z2NUu`KhS-2UrI9aN5FZivge&f(+f5QvJwLW$bxcil^4{C7SdbDdcVJ0aAC?$6(G&F z6s+Ea5Pwp6fJi!j+{r|rlHJl7x+LBI$4m)d67lHrr|c;88)DNYNl{hnX7#qpJ;hJI z8uNJk;!-zz16VuTqw^SpnGNN$9KEpe_~YCHitT9=Co@CwKcL%xGMppCC?xsrq8HBF zcj<~TSAb3}RZ+q}X5=q%2<8|ksmQ1DS0ZYQtWbx)8DR4<4caz2)kYjGF*Q9ednVUf zGlNXdFtZ5E!g|5Zs#!ME!$5)4`oYompyrH__sxb3SAZA92|p|k$Cia(oM6lvgawG0 zwH%?jNS4y6XE(D#@*Su4uAM2ROVaSQl2mblQ`5dwa|vC|^F_ zM^)61TF;+@M*@V2yX_j0Ft!C_?hkkWwEfDHSm)A=nKqg>JJ{V+Z&SU(KLb<@@ngN)lT#whyi8UX7W#qU9(B?q%SuR=&t8-Uof@hklwYx_c0C#30u=N1LUx+ zuG@c_?6c@r?_4UP*M$nP{3L9=jkP@i4!M=D5WPOZapW)USnkGI9U=5wP*J;6Fa?Se z=jj6Tp~<|R--w=DQ^)@H=C*I-%w2%PI#iBqcUKZFp<6tR#KYbI`yHe|KI07moLUSG zu&RqM!OXSP_Ioh5rvx8zZSf{(+)@`l!1+Npe&)HA`=FG%s|<7lNj-pX zCo`Q!e#6t8ekN(+bX%?f(X|<$xo5>hDw6kivxR$H8Biky-T|;UYT!JKz?cyXOEm$K+uRIFgY+$&0BFE`y zwph&2G5O58*&bEZ?uxGZYi(H+N@9c3=|6<$=YvJiN9v*~9k`Oz*Du3QGwXBPAb9$N z*7%aoEg|^9QNsxdTr)v=O92Tx1r2eg-15ALRid6ydyZ?HC+cF|qU6bJctjK-3)_l7 z{n_+Hozj#&q^^@QH*rV<-T(6QZC>lBK9Ra}k(SK2ef~)ym#U^}3gIf*)@gqeQSX3e zG!&`1LI0mjzk{G+N592R%j1d#M=*azH@7;z+o`_pv7w#s0W`wRCPn6T594pD2v@qd z<{#qqjB>fZ`!+jT{^!3n;+f5&oMt}wvUaLo!i8&9XH;nvh<7>cAk zf1)*bH>m&+n3^E^l^__shHu}s!%>Sy_f99elmjUwPToiBiOwQM^^Y$NI(_qKNkHr( zBP_h*Bpu8&wGuIV6E zWnqlmy-|invx6A`B^O;j!ax_Ts_}y;sXGCt(Y0!xs|HdmT8qawqZ(Wqg7b}@oRq-Y zdzyH{Ro@nG1iZ}b>wZa_p#$AU!CvcYie8MN==&*BA!=eqkJ{zA`rjxJeVhLrNh?XB zYTvxp|a@$Hh{K{7o|>E# zae;S+B)_j(>dB_fFB+=(DT&&pZD>zre?K1MCkC(v3;dlUDr>O8o;&##Tgz{;*|vr~ zX5eXrEhE161bDG7i`GdK*?QHRf@ zZU3SK;Sy`jF{4>w)tVHl<>b(8^h}@W+bH8=w6b3_$TH|W*V{qt{k#gQ5LI91*9#V& z@NT7@)oG2SF+P9H$MK=C9(do9G!RXf5#jlS_wMbLNe)oVf+P>D_RsCRS;pOK zmMeTqao$|5&=6ck*Y*f6HY9=+gplO`$KniS7aioKcvN=t-#<%{dyxJavHSNy_8r0^ zJ@K){WbnKg2XqFbrK(wyBtM%p_>D1jGDQD%epIC{2)eMp{^!_EnW$f7IeYZyJWG?H z-3+;1R6TB!wmU4daKkU~n>BF%dWux2k^IN!qb5egL;|Sm5b9^K7XE|i^)gIIwR}TX zO(M_$>MK%ZKh$76OmgM($kRVdd^RQF-6~9LExT*PCHcCkjzE($5cAuurgN?6=dy#(+1K@4=|AW` zZt8IC*rePW(i{2GpOzv6P)Ddn`e}&5?}%RyjTXqoZKzg)LQjz7N#ImbJs~Y3BXZxa z8I{=O_r~(C>YuwA6svta_x;r#|3!Bz_?{wt_@c#LFq831ce8CkgJz|K{~`r)lyleR z6~Rl&K0bY+Np)EnU|`#;-$ z$aFYKV-RA8Xa5|1aToN9n}VIt%cWb0%9yjHG z0IOu;Dq4bq>@VcDLTKln{IOb$T^5RCVW9cOHLr7hdBZT!erL53t~U;UgXmp?#O87k zy*y6%6#Oi9R^R=1t>f7sXC1Ty=KnI^1XGRyZ#M%;pc=F#*FDcPQ=!4#ZTkrqy7ZP; zKZvdxOj}i(QV@#{j%W2@2gc*2f~&OdG9KudO)?D>LMOXx2@1y<#g{@kVnMA1qAnL+i)Az`lkQoe%a~D|NetAAMc8 z%F~E?__4M}+qn{E3;ID_V>5t7SLyZ@yL&K{u0s4|JkGd zJNnk-F{%2PbD!(?kKn0;M=n|dbFTauY+|j@w8>-9{o5q(NmV@rrZO?Aq`|DZK6iQe z00&>9RmWqzl4t{PZEN;~5BV2wV23XWd`*5~a!8^MO3zu&MPkboRTZX`F8^isMUC{! zMLflHyR^FG?1;~W5v&-~x3&(7y?Cm5H!IV`vp@Z964l%cZ$e~Szvz#uF&|z#cD^G& zk_)ozY}z$PY)~qo8G7juP*;F;i&p2n%&HaL=X?V(pV>b63nqHKnjF{U8dit8($`25 zuD8(s9d%l0Ykw2WIcF(3v%9K(PdYa3pO1dCir{(Z)kmj(JZ`x$K`e4Tl4K@nO$G~W zSOkZEaPf(-EQvLGL?P>bJ9|&_KJv?~5gnxDBQapTFC$lS64ltERO*x)oGh4JqAGcy z^GNImt>-nXJd>EM0%OxuV<&>&*c;2@f9xE$e8&-mx;R#&?Y3&HBQk!o)Cyq)@FeKs_Sz|@q?#`Hwhn8Fcdd8rA`-QX%g zY;{vUIaNib&`GA#kHNF!dUrVZgUqYAy*xcG`jxWVSAZD7ETUykCFSm8T=C={Dr=U9 z)}nPXK#X$-W320#n11UHZBKFou8yuR@CtC9sL+`!TUS5sEN4<#)1)ipeee1B_1K4T z_478;2~#tAOEYvm5c;k1C3EeO^+=@cBr4#-1;kJDR${Ci+B;+2*L6nO0IU=q;wYEC=eC=W$~La> zW!L|(&zJBS-5QZ0RNgKzotXUHf#7#FE0yQm~Fa# z+g4Lkhn%eoC`kZMfku68U_x;1vSZsln6~|8ElHd}>pO+&R)|`fI3oTXIQcxNzA^gM zjQ6l^Nrq{i`Skr_4Qprr7@{(@%lA(ULDfb1S+31pM9B>#r_!aG=-R*ZwozV2lc^lr z81el*XGi;#i}O1CHJJ;YW?QRoAGoDIekQLj+8t4S)yp&D3Nn|F)C1VQWNvZ zt@Q+wqM{MK@R0ELG7IkJCD{+T0Wt3`ej#WHg(d&Jb|~bs8%{J6Xe5}tLJ@)f9+JC{ zmrOp$Ru`*$eHc43ta}Fm9Lc_Sdrx#dgzf)Zv|$0nL_I=ClnGAXf#tNx;90$eYt*9( zaUs#KzoNtjpS)8~JItve_ga9$TGUFc$rI;M(Jn`#4G3qJ{m${0W1`dV-Fa~FQD`93?xpSSmN zM=+SKGFV^h8~NA59XwMTYr|#9u>!{9AF#OCaQ$_92d z()Dp%>LL12HT+r?!c4rOm4Cxm2N#<}cG#+k`>oOx$u-kao(ayoB+Aw8uyRrp5bG&ic&)py#o2 z9b?#+MmoLXP}D+VWRL`0mFO6A0dPi(JZYc==fOEFVAtwDJN+%P=jC}I<)ADUR*v_K zSw?UzN;7GZKtz$qAW5nmj2B_4=f=^2Km9J|93tA@8EF^uUrB`9ja9XkR%0)Lgd7qm zkOPa~nvLuX$WJjNO$}FH$>>_`&zQ}h@j!e{m!pDHkJnBOD6xkIq^?@R;r}OBJlusn zEtYsWz0Ahe;r?=+oM_uARnkmmF0LN<4tFh_;ymVK0BN)t%+TQNT{PlZq@9oApR=k5 zUcDFl%;}A}YjP12LD%pVCZFm{Le3M@5?m45q)5VSP6zCozJ1Lc$9P-z;lp4* z`QktA8t>W6*Zpx(lv|xD^5EN~eM`4|Jod001-@7LI;r0c|1|HtU0dLgTEK(gcl(5|JBh`6UxqMaxPJNOl0>dTVKCBn4^<~V%}uUz1W zTOsvO=t(uJzg&tu&x&z3m}S?^rL0Uu>nj8P)if|zuRHu!HhQ33+I z36kb*_eMK>3T1AtWwat$^>dWmn=Ky)x%YBno{u*9p7LS-*~!BEwVaQN{yEsIUP`ye zfB}z|F^3@?5nmMXR~Ceh&vyv;+9rcj0fakw*GW<{>~5MVY5%4L^x2~yT30QW>jUD4 zL*94Tb)ZI?@Qdfy&Q2dw{3jrsHgLW$v(dAH@7%MMy{!7_{ExpKYTu^$W2E$=(|}oY zy>@M75M0PZEAhl(-DfnjmrpV5-zrj;)H`}jAQFe!IMtK!Lv>SAr5RkL+2+?wq@tiu z&9!6QktWC@7=@v{q3Q+}tZ}2lniz>n5oxZr-V8Ebq%Sx1*=ib96*FWN6&}!VuGzf3 z0JLcaJAqjL;&N`hL#Vr*@a;01bxKuU_xq{G@NMhQBl-}+yZGb!icu(TS8 zZA|)yb)pnkrYLLf`$v}(x)Ykrtqv;+*i5F4yCs#DDF}~Lg=yEnv;P1X`A5-REp6m- zL%g8mk;O5_f&%q+7un))Eiyv2d5cf}F0pm$VmM!QGk3Up+q1hFzBQh;pYa*ZVEg7> zXg6>gp!d95}A2Cw@c-6PrB= z`RDgC#2FPkvw7>ss*N67`IiulX`79S+~6d7k0zM73EwzmQ(-G^ahwT#Xa#*&Uh zU^6tfRb%&f8J~1qQ+jG9v-|1SB^+>(Uy}@KkH1Cij{HX23QL>25(OKpDk;h3!}j@& zBn!^@NBy=%DJc~l1alxb$gno%|JLSi3}dSPVc4RwzYMBjc&?2vg?$ooxRdS?$;mn0 z&33%ao^t4xXWXl5(d?~@PKXe5iB~eh{xPH2Zlit8_jU39tDC(fx(>*-?E_Vi0Q}x+ z*V;-v|G@sF>sEeKWWL*JtSHk1E8wogd&*7Mr{d6f`u2I!Cq@%V;CRi5oebkiWRk?E zK6tuX=|E$FgEN>X&~{Pa<36LD!TH26;`Ox=cB?JiGs3a#ndE8fRYgSM z@WYYMX)igajrbBP&IJ+wOd4^YbgMH+jMN(Y|Bv<%&~RCqtHdpX@Hyg&+-Vih!`Cux zJ4qST?UYW%o4rZ0SF|ETxRm!X->6WM)ibh4G*uIgkZnEh9I8%a!q4^>&b!mP>NAU4e`l`u6c69)CG&G;~&4Qm$S1EEv3Ip>yJwH_%=DvpCNLd`KOH z4kI|&;0Q|_rZ!EJape)#oQqaucRsz_{JMAXz}LMyR)1T-yv#L z`B1(SEee%I5T5&`s^ zI&d||zCuRz(RAp<4|t2!ld(;HuBCLO&|VX^t7}q;KkuKFz$i4yHdv>^m@D|mWCNB#6n z9M>XsJ`7f&wB-O|Cu1Cq@@htMBo z+O3h3&43f{VlD6}aEGldHy=VjZTrpozN(Kb$#~-V5Ux{~CFal!ml9M{f1+-9&qm_0 zo6M>~-=R{g!i2iry1?XN8j~%)kT_*Wr+&O)BaDjW(K%(E<06$s6J||SZF%u=+#be9 zEJ=I!Eoh$Qd;eG8$fL=qQR3{WPz(1apcDpVT!XzppC^ycx`F5dILxq-{DR{dWZs}m zI4`Wi05tP;`jgI%^^M6BT*<+vk&;IPTBuQTea`XoZd?soSMjlw`OaBjH>8m2M6O98 zuzZ`gpjb~zt<>m{3M#7eZi3R;XD+`s)^a6Qc_${e-T)c}6KZNKC+4yI49SGeYM97x zXr4+%k9~ZLahyMm^~>$pJPWwpj7BL(C!=86D1I^$wEyHXvP-R{uI?U~764G%xgm=D-K4~$0m z1r}5FDY?b))-LW8$U3f4S90W$+o#8d?xoN$FkRm_Zt^_)8hwGjLy|bBy$+&b(NUeQ z+CRO9Gy?VC!Y0)Ed7^tAw6S5xx)`bFKDeC(nS;^`Keg=Y&U^k-4E9hbprJe?spdiIN&C z`(L)~!F*q?h(6=L#Cx{si}~z|rf<@(V0Q>&&R`7zJ%Z@M8()s>uWftHUz)c8!C0AL z%Fc?%<;o0g(Z62n^`4kV;emOxzelY7M)amGYgb(vwCoVag5%bO?GBz!1OtbTCEV=F zryRJ&Bt1kL^c!0+zI%?}5HiELV?pBD(4t3t?PnodVMVe+pL+S45=!&QS$!&@kcJDu zPmL7M?;XV*g=!!WebN!mC?|klhnv$&b`s1cJ3D>S6$ZdF31InMYI`$bI zP$+nh779I*{ZA$Tp|~$>#11m7?G}8t6s@ZnlX`QXZ*CgMBafk zS_-&fe8N`kLFvQ~;Y$+3$xPR&C^ecP$BdIpojE^`!rg)dW~#IE+b;l{SJ=6n##8!O zWVfFuefg~0ScX3~e?dth^K{l)=5(Gm-!zE-ZxH)nG8j75+2T2)FlP0h-c3NpT91SC z&5T3K4&~*dW-PxF&P`2`ILPc`$rL5r7_n%A#MuhmPc@TAEHb7<>{N}}lRI8?=|7EI zLXrHSxYfo<%BHporM}u`!+zOSQ*M{8QDB_%UiyE973Oz@3n9bH35s@ncaB)tU`)|g*W||&SxELjlB}T1(n)ACL4>NsGXr( zm?)?&&5D)KZxj{!dA5xj-0ma3dT-qagSYaNkqh=ToP%hDCIK?l-wmml9qgD-(6}=q zJf5QSX&^9v^2_X2IvS~PQ+X-E{w;uDaDXZ4cwH$W%%x-EI^~Kfz5qzA8gUYSZYdkg z+CUC201QFT@lGkagyyHX=Qo{yYZTbo_mf-s3= zT)vTfP5p{&@by!zPJzlJtY*9kWtw;a_^2jRyrIE6UhO9ZD=kPCu8*%vJ9-#Mx{80u z>)4F=+rmITi|m}-+*acw(lh$2`W+}#vK#TvJLo|Mg5LiZHlH1w)YIF zaGYZs)l2ITZCjSZc+;7U2>DbZ{!T)S| zWjNjW_4%$WLLO58mHR~UrNb;zT0}Kt@Tv5}#s)^uA|2FnsEjv$!}Kv?$9OHy`1?X4$&%!J1}IkfXcMijLlt^f8MDUT4JQpgzhT30jX8gt$Q zOJfeksKI2B@UEOiSJUo(8LR18H65oE_%YKT^+#fU7_&;!zm)6zbH~6rBX3(G=ehbo z$%7HMp`6Y7tqD7ZtG!$-$U&|@;_I;K%#Ie0q1JbN(yvGeA4}h`CKJMRz?ST^vC)r@ z9*NEV;_R0{X=Xzga~PdY=31SQ$WPY<&nFa+l&;GajK3}o*@>*#Ovb%*?8_6kK%t)J z(WX5sy0RK*J|I7+nnGAXNftfmzv}b;q4b9<>Mrf@OO_#{EIgi~N)B?Q`Eaj>oG9t4 zdcimEz;oKP0-A9D#P%Xoyc8gP`}O_n+1FX>5@z_TGq5YN6AJ36kG(tnLK8?)t^8SM zDP)=|L%b98uIoX}-PyI11o1yHs$ST8ni+D<1V=tN?x!uf}+N+VUGbFZto{uf~wVO;Xcg8MEnG zm8;-H6^0f**yazUV(#7sK?1z-M?iF0UxMO*;NHL@04qrozeTU6^|4A4f^IORo# zxW$}!tMZ@Kc&63W_m4^6lR0@0)*#s@13R&>gUJI)H|M!P z9idcv*s&`YkCyv%=rQ-H$KnEE*h}4Q{zZfNXl{JjfmOecYzJRa`jh*2l=|fwso3B! ze_S+V?F3yL!J}`tOK2GXUVFb9w2fYLrdg~Jp%V-RM=}u}P%e|kMp84IGH^rdM1;+| zz^lXpWgSUzowI<}6nVFnt5lou;J17NHnF;mk?l8K-05{P&RMHwJsb2^409R?PqTx} zHXt$^E!QRxa>a#N=)f#DPPc2$0c<@c+qQ3M4l$!sY5{aHnhUWij%^#N7A91gMZWvM z`}q&e4#i8REN5E4hK?{|mS;lxX+< z%DRE$cDDErN+Wyjg4MNu)gLY7>_0Z#p|a*n`s5H^)6lZrXrXsIL<}Ubrtx1u@Xfy( z3}jMF0Ek^UA#OK?@$-qN&eNVzN8kS2YAkU;^AWFLHtM?xX~do4^&EV*dL4TP`$x}U zuK~%G(Uq#F1If>iAmUzt#av9zuLVN-+w-ck=_&kxMk1yRHMug0pSovr;Di!to^A!! z_7CAH&YqIl)r*?6PKSy}4GA(`$YKZ-Y5=R&u#fArjko&LC0pG5ik(=e)WSVLNQ`L^ zj_k@OOLw$hUN_&m<$^qPH}E|4{zH5tnfwT^a)T*Q9N+3V&9lXGc+fJeW(D&jB=Txh z9-7xQT;Ykb>Ve)D;BVACvxv0VR0(f zdlr~1j|kHrzm;fW7Ctds9%{1u)2`oh{1j!@3jiyuppMMm=>7&hJ-@b7`B1x#<=Tfo zJYv2qTWgjVfXc%pUoywx4~px;7Du~E^`@^Siu&Sk?oE9S^uIRy!1%ACW_P|M$YK5L zj(i0egPpiGt3gb$MlgfsbZPm_e#ICAM{^-ZksScdWts$WX{f2UeGgi+WZK9Vl3V(d z6@7K=$0oidOB2&MNJ;Nq*VuH+aH=L<+9CGiSC5#; z9BbSgf(?WK`>1IjU=yIrNSu$=xKq_U;%%e&ygC7@uE4SQN85fdJ&w&@nGRS=9$VCr zdolBMxxcV@{RmcJ=AXh_Q-aydG7uG?-EoTyfx{k-Q}q|c`7S;Bnf83*K>Txcd1YA8 zuAiOK3$6p;^g4uILx}R65T6!H)h7gO(RV0XW_6`Q13eV-W~Y-YuyIRluXPRiP+V9y zEhs^gi89*mAKr!X609GgT^{d3E~7@vCWuaBQZu(c^18;YX6(b*5O2wJ2^Rndb&-YL zeqr24FB>p)OMys`abM{%;1ZyG`Skleh&KKSxv9GOU|YUyt2n6k-?;OVKyfMkAlUmA zxt5g_tzH1GxG@!xNBS5aG5!|mjn9p*Y3`Bxwp*dx@5qIj4vwxxws2Fp0%5?fmSJzj z;Sou|UwYg2ukUKx{{hkMW8zxwBg9FHzk(wKD$Q!YL7!35OzXzJC-1zfO}Lt`$NI>t z5Ale$1 ziY`(^yt9RCNZLElz#?M9a3UXh@U8NOz6arsxwcT*m~gC}=ScJQy;s#F#rP3{@EoQl z{cr0JjG*$kw1&^a-9jJ+mdeLw58!Y8=xEIgJm={Vjv|rg!q(u)Dd`xXp4T4y#15|o zE*#H()lnQGi!G$PL?=G+jZ&NphjphZ%!!kOUW7NM5 z3Qap{&ief$Bcp31vM1XW`zR{%9pA5VwWP1+XiB1S;**TU4lqB(wL~-GAnP@Kma27J z`nxf0x0`DguiKGKa4=okM2l~o)hQn>;-&B6JkJ`Kr)69?VfuN(#O6b81&!B_D;C0M zl=)NlVIR&V5tlTpn4_yTV+6SWxv}%DzhW6yb89CdSlUjfj}J`*`8vxyYx(?Enqv0F z$DBuvtu6o>Cw^-%WIH+@l}0Ewi<5R}9`DOO1L9hj{DU_y02m9W`6``EVhV|WuG6`6 zI`w<% zjWB@+aV-nXsXhJwY&E9jzWga?_nZv36;Y|qF}$iwxa@-%+OzTa=(ZSnDJfaQNqV$GhJq=_%X zW>cmIgF6pjBKWLdxJ#B`<+E^*tX8yPNkHRHbSoF8>CHa_fs!e>S7dO`n*gE#G#UAR z`ZxEr?ALEk`?>H}9{ySdhLdHj(5ghY#sx{0^*~U23;RU1xQ*hwr7 zQJ^qid2Uqv)=JeqLM@-{;^3XJ&phS*u&zzgizINC<*P5;8R$_%`EC&u}5nrnkHj`9B0?!FHGQ1!i$hTtoR=M*arEZ_C@MJzpGOQ++d6~%iG zWk_z5tzbFBfeo;PF4G%*P__~>)y#p=)<{I`S{^*5iByNE$ z(mu%cP|}OONb>D4=5bZB*!`DZs+1?EjuUIO!1nGaXO4`rR&VBx5=vfmG+10oiu1U$ zKQWWVGj0|22vU&4)51qJI7@EfrQRN+K3`PV`>SvhvUa2rk?toy@FTs@Dv7UWhU;^& zY}{%L1x7UQ`v2qh1)$3lQ~=FL{OCH;({-=1I-T2(J6PsR)O3P|^@+I=+m`^J0%Lvu z0sP>BC3R5$?e59`-LJ%v=CsDCqYB+}rxs>XT0108F=HoWKOVgJVyK$uzJ!`S956Db zZ@;Qn#x4=fHrd_5L?^^envYp4q-Y(c;0`pI!FYsT%{b52k$>~|2XP>e%a!fvrZ4ht z<}WQ>?;+v3n;jog0z^VD00h`Z1?80sXXS~fV@ww(OZVGxGj%$>%+5KnpMg%( zS}5xowg?0B)MsUnJ7ZLku+NH*CR$R&u%#L*am&o%vxQluS=Gik-RLibbr7Sa^;%)o zIQVdv%FOR7yN!Fr=qAJBv%8Fc=>GKz+uAt`iNC&t0(~(qzolTcrO?i~G`8*PYWbp? zi2{*HI|J*jL+i+jp=Ap;*GD%;ss24o~ZAS$3ITF61XK5Vd^e33TiI%i+er@?*ZqM(McoiG|L^`j`Tur@q`rJk)0_eNy%oy?>Zp}@x?bHw^ zSIsjCSJsf`V%-Y|+&$f$OTo_J+otzeQX_x6{U=r_!#Vrer8U>(D2RvTh~?o4NcZZ$ ze*vgiXkmB!ZD!)lYxG%DN+Fsx<)46U9Cef=hF<_~w7xNtYoFsB-t-=1J&QKwT&#I? z`wK%f{T6`1d^O$YdbX7F%Sw}0=|M>LD$ZfDcj0rE>YS_Mk@Rzt=?2lT#!}v64(=c_ z@hS!8!vBPw9Qt8bRE?c$VSm7Hrj`Am{=g5FV^ll39De~An#13YxRkWVq{z;f@CZ|^ zp@_IUj^H2*z8qD1L|AK*5$~z1s%`|`-+iErze-0N{nkK^!K;j(;QOofpSsf`(?3mVC0X~i{x>`ChvfM+Aq9ebG1xX}Rtyc#N1={Y}@z3ZyA zIcPz8vH`|@-i^b@ry^^;$!`U2XdoAA?(+SOP*S@`hCy3Uo*Tn;XEXMMYTJ+>?c zkMG^uQ^@<6C0hJ>*_Ca28q#l-!vb1t_TTBy;2zoLS_yrE^r_qv5^+iml|5xh9GfU7 zTdg0NkMzgh@#@=UQJ9Sb2uNcLakG|3oAwLRw83qfxs*`yC2YoOIMsq9#RK>ENg3p2)T`e)V0>k+F5< zZC`0=uFf@H^2kqb5=^fIQ8hllv+l2H+BxBYG4)+`)=WiaTjnsWpE%_C5)JCRav6zD z;Z3;oM=3K2bkL+$?AyJRaGo+HxGgE7Ovz=el ztwp8%O9ei`&Zf!F8t|vk$(+q=k1LIjsG5R*B&dF6aM-gUOjSVP&-#&VBoVKdxvht; z*Q4sV1jh()Q0>VuVlytDYF|`SK;%KUxc(XXDti4J%?H4LErVp~%`MVSM-Isp6LtY$ zXi_HHma6*w=A?YBY z-rE_~?_Vt9l$W0LZ>v6lKjLaaq*pP;?lCLXJL|t?hPxI>>%4QVcZ$Z2b`2%%hqK(e2Ryj*`-BzC`@Upkt;Kf< zxj%*;akh1s!O2bQMXsdChvI*8rgpl9D2hb3vs6kF`heyZt>axK@HI1=Q-5~5o4P5Z zewdox`wQ-zxQNc_WM{OGrPE-BxA?PV44W@U@Sdh^uRKIP!wFg*UG)$Xu}POItg$Iy48Y13pGI$K^1j5f9h;zinn+^ z3MSA729Py7=LB)Vc6`^Zm}AX~2s;&PL%IvHc8XVfGR>A)cEgosDdy2|@piCa3b7^e z$16B-z9ZwSd45N+yeG}OK0T?Y|8cQ!qtCa0J$}_jA_XwTT<){KQnwRc zGsg$HIUo|NaSQs7E>*RO52l=xXMep%F`RyXUdI$UI?*ys*;}Na^*mH3<+Nu75Y<~d zF)WV)&&s9amLjy+v2x6nU9afqzO>OLFa?7^+?s&2o43}@ z6q$Lz1;00>CLr2)ZTI2Mx8iR;zs__sQdkzYLmpLc;%ftqwSk~p1FBN<6RR22XXJaW zL?<;(Hi%D|EH!6Ax$lQz)+#tpypf)f92 zz|AhX`zg{sV`z!FiZ*t|HLpwtVn}^Oi6m;qT>xr8o3$`vCgZ&>E(tHk-FG`TiT7=@ zNpgN)8PTUrvbQ8Fdj;Y(L?YXVD03(3JjRW#V#-{v zeQ%Z|WnW|LIl9suOxVx4`i2theFa0x!Dh>jWjesBHcC<>L2i%U>0A}0yAAY92q$bk z@6Hx&xdHz^G~2W%t47pGUb>XrMkgrvl^?o>iLhjjN6;>u&T1J`j`HDj#vun%A|tT8 z2Ku5V#IfTg&O7dj{##hxsW&%0ea%iy&5!dh0D{>OQf%%Zq>Ac>{mkJG(|YhVs^%#e z0V1u2dKVpFt{LS!4LMmlMhQ3URY!-?IV~mtEqEh*cs-E|+{c>4;C2k>`h3mrh(BFM z=FcYztTq@`pF}u2MBKD6)lAod(Q^s$Kja<10K{f2T>x$d!=#zu-#3UYnG5QVEzr3} z&vg=r-lKShCwngn1$>wmRH%iGtyj(`H13{#(S$N{ucZLHJ9Bx-rO%<66S^sV5_>T3 zx$xidT{K-ZXs5C64$*i+d1*zv#lY0ftpE|%69_a%z~Wg^_FPrjXZgn267Mz7l~~E^ zi~1yyX!%)R^X8F*sGUvhnBtHU@;+j(=0Q5cB_<|+^KWpF4Tz4izSGHplhb!bwa4BG zqb||Eyc|c)_U9&^O9hRp%wshZP6lHRH0l0o@Mpe!P(^+<6#rSXC=l=CoK_6DrW@i;xOg?7lUwRy#+5c$o=3Qm=2oLB+pg{XPD{yeK z?1*^f3*I=7uywcR@ohi;fY?x>2-)Zxm$9DLgkz6%p1FrW7a<=YRSsFCqr-esYfO{T z_eo2qVHaewb*7E-6H;fkovEy>7p?WS$x+S6KjK@h>bB|nq}FZf^*mI?Y#_=CI|dTpA75#(sCQJmH~==qbq1O zOdPd~-87Y}5K57|v?Bl8H?8;hgjh_it2SljOWw{dY80aGoXO4nTCR(kRDO(h>IUQY z{d2R~C?)w${ImwsM&Nbks1w7QT1&N`Gr@Tg2{wBY<+XEW*S~B(fR2;~FXXmX)ie@? zZR89`tEYdqVGF`PkCfA|m)97pLp7gJ{vvLj^1P}^S{S_cYU2SV+e&$PY+p|r1vhlP z?^@c3OW_WAb)dx7X>~pxeA7#uQ3N}Y%}au+4{Wt#9a zIXF2wXZ6&~e78ak0oHz8px2e3;_QZ8UtJgYZ~=HXA9XH98jRpDrKFPf+MmtC-47() zTrE#GYcu3ZG0am<^`M=54BwIxSkL5+ZOJK%O!Z_A;(V-Y)4x8TO4KRwyZg9Bu$+;v zAz$}M)6uk~26&nDP^i*TxhzJ+WOVoNGJDJ`Z+C{4i8U<=YQ;Ysi8o)z=A55$)M9mYD` zDiZL+R-@}nF97+hvKEg~+bJe4vjc+MB=2R+69%$_7&(p4D!tiMaom z59*s|zEc&^CRNyY0SNP-xg4F?w|etjX=|dX@094cm0Cz~!GS>^vuTFq<2|?}U15^@ z^iC5m=~ijNzJ|svklZu&)*ZQGo8IPexJnDp2W#1P?BijX+qge?$*m!ZZHK`1YS)0p zCQXJ?AX;p(tHK5Jw&uD}64%hpO<|LtKdu{lLNJhWkx-5W-|mh0OI^>L@Y%Vg&hLAn z5)54iuNQji%zJ1)s58Ma{Z`GUngIAglWku9oB%n#dbHmW9=mL8aF6?mu>XzUbS74K zku4w@YCOhI?C-Sfo@Pt6Z9oz^(v;e>23cIc*#VenVX+a=s8nTbadE|DgL)Az!CvL+B!Hqw*Bcxls1KLB_8&-LAj(o>qMSxw>MuI5`fB z%Ft;oa0*hWCL4wSwj9VVPAsa%uV}v)?w8?O#|FJyTq(P1-1OC21fy_nZnh4MY9k^Q z-WT;1?K&6M)}m&MR>8ES7Xmk0L@}ZJkeiPRHby!Gr?rc%8iaN@g*waXd7>`IE%2J> z!)*_J$x_wi1Wg7$s6J9pkV7Tz=N}8#Hw?v_`kcbP3_pO~8|Sy`B6TZNe3D>HwL&Ju z4d;Ys(>lhRBzJK1kMn-bs^Bm+mW2xdmqDSBB`6x5Y^1O|`pQgt1@PqEi)E`MtiN~p zfs2l5!OO?^fWDJ?-?Bm5gjyyX$_ec^fgJS?RBb^`akQ2vcC`L;qlZnv1z}2&9YQq_ z#hzo5{V)Zus-yo*w|8>U{qGEJ`1~5hh%g&)2qEY5-zP^T0wX?pHMo8KWVD>w7+`*d ztCsHaO>_UGnXlv+>fnT?{SH0@x7ZTBVC4Bkj?!xOGC*m0-0bCN*`<_wdJB%q>hWGd z>}P43E{w2FunMUq-T5*%E<*Bm12X+yX^Bu?(8!IziPQXpC0n*Ov*OYm)!5V}cC#Zu*1O&zmSoivsi;NfeF6Md5zl5hgfni!o7Orc*}C0WGt^mxi>uoZH>7#Jg^l{0g!$+t5XIfD z{evPK&>gofJ8#+H%A>Q)D{nymXDju#l(`6R%&|nEwV|XHbJUW)&5r{s@Q!_Ox7Pme zOkvd3x= zmm_K>_j-u+HLvc3$zA}^%L)g-jw3Xh%n3(ZY-N8lE&!dnEww5}1Jq@_zO;N@{+zEs zsvD~t10Agu3Jv|T=y;9r!?bjHTSVNsrTB1u1^UVU0$^DZU1S-f|FpLSInuM#y~RT| zZx6a`b7hd&9UYPAN>f=|IlA2z!}&ps#i08u&5T1+&Z6Shr9#9b(iSFiyOnU8Y+P_z z42f%)!w71-`MCBykwNk%z}tYUmY>t!TdT=Bn?1e@LO%Y=(slLrng2^38y>@Kudjd2 zOs#h`Wo8~IxA7jVfd?d>++lJ_3zmDDF8p-dYuPN|$GTq=GK06lErH`@_M%0jl=LRP zr>h3k>LU7fzG>!x2cY}uiNHc@sG0?7{xF`j+Nn=fmz+q+%f~Sa|E7J-Ab7_&X~=HR zY=4Kr**_uI4yVEYvpMSpyB}wX&J-W>^DYnp;)M_*u{RS-=p}{LJX~17T&`v4?6sxD z-q*igXE#R7BuoL97c194FXS4O#jC2H@@I2I2>+gq-Wwc2MHQrrSH+s`#f%hT^YPjai@?YhCu|3Zg+ zu^tfmVCS50eC=iq>CXl+EfH2grdAXbP+b~>#tI$cZ9+ce{ zXhmB`Hs5*s?Him0m<$8yZJwK*zWm9 z$&*-XN+8MO=uowa@-ZKtV5Ey>Z-|>X^tWDbER2$Qh`=-{(sGKNQZOG1Nf&@9#3Leo zCut{i8(8$cCZHEBSvqIyd{dmG@8j-|(@6D_`XQ>x4`{k20$F>XB?uda`nGt}kvlzCf>Djb3D zW8Dc4CZo+WL#8Be?G9H5F4r%<{t1tx6}J_$sX4NA{+rdJi=;I48O*A16;vv82}g)# zE0KhImM2dG=i3wi>-H`{McIeI^TH;-NZrY@x>aOa$vw{B6iwy1(LT-4+_;2+pVK;nWw-sr0p}TVsPv4O(+%$q<^h8@*IuBc6 z{jPtZqS0ZOdH?fSvgJL%C^V7g@<^>+X_hvJkv}XUZH|&z2k3#!d);cczS=FsoQ@uP zo}tt%76v&X&H~IDyzA!N>ZcNk&_F-dkub16W0&3xXeed_VMM|a2eB6bK1w83lT>z~ z4^)3VmCPmW{o_~d=ikfoZ_BQK7Gw41gJQ9^6(?|bd)8Psxf$29*|D&v0zZ0w6L%Ny z)=S;7-E-)8^-7XZ-9%EaN+~E0ufB#BG5AcYx4#&Q4T?W+&$$uA_V0#fc4W(u!c5m2 zzTT0aH6~)0l_C^;8AiN#UMwW!zs)Q}2vRT$nk-H&B9x+q*yezz6^$XTPj%}QWoE4M z#9A{tQrj0XoNS$Ia~c)o#4SfCF_;l<24VP{QC8x4$ODYE)Blnm>v9sfNdg=vhvNE9TK6%`q~5^B5~YYBwDdlNJqBtjBNxBxgY>g*9}L$-Jf$3Db# z?b16Y5VCNbkE)81s|k#VM`bqPH4a<`7`2e@H9ardCV4ttSO4|_lZQ(31J5-GhfIEPSU>VH9P2JtMf*yTyj0qJ|2~DQhIk>w8RtWgNKmt z+wiW)0vE7YKp>9}DJScP%k9U>mO5SAT3@{`t;{B5f3HMX5SVWYum(nA8-Qmm1t`nX zE59GwCJCBeA<87Bd|fRFN<+|5I!N9_+Zxwujio$h|+ZdOF~@K3{kS>H{(U4Skd?u+_L!XAo;)7o80f zW&ELcNi8vxmwQ=_VxQJIyCd{ZgY)ALG^R-Z0+A5#@!WtOHkQ?}HiI|7PeM0BQm{cgB`sn=qZ0# z!%=kp@vdaOtx&QoYg{2`gtD>;*8e4@JD8#W3hH&abhtFS>W#OpJE1^-A@iA_-H5!S zVBe%FZEG9?MvXtqi(EEMO{uInv!XJ8Kk)oPeL%{pjUbL6 zNOMwLG;jU&pF_R1i^FUAiK>puq|{%Ff7rX;-rWC7vudzYk7|?mmpiEZ{X4gBRv(>K zMA%Dr_4uW99-4t=;cUkyzNgRTbV;aAem1L)Qa;<~OZg*Tklt)pK$V zvdsn!YO?I3L5H>V#@;8Dt|aA>%BClUO? z8>Zv%B(K={*G6ctV7HVnn{D(w?FA>C5)3>vCPvOdZg`~ zB6u*NtH{@z_fxO4uX9OfW!tUoJL$%|Aa$nq53jVqhAsfG!I%uX4wGD~7UbGlzT0w! zs#*B5s!y0SPua6ezjo%D!zznQ@FS+af0ylRwN}MC=wNS5w5>4aOM?@GVe{3qWm%`H z7H}&MNKz5f)}O9olWZ)(#ZYdYUl$+?5dIVpp%(xqXG`tQj4`slPg=Go zmcPqEG&H!6X@zsYh|0K#i5IAXVfoxnpHc$9+5AmftBprU(@ni&apSX7MWvqmIK;g( zT#Wd&Ve{&p6zqOG@cU+CuT{Txqf95R@8`bbeWfY!+4-8rze(*>i3+l2Bm%hT$4~dO zrg?O0|1ewc>MPr(dcEwILWp{8LG=^!bw#T54#T5UWox(D?g&mQ8lcCULz`1(Ex(jqt;NUoS z1+efM$3+w->4s>&nU8FdB5Q~L>jTv1W$S6>1BL4(H5Mb@%XF&4KOq7CS%2NadgJ=V zh$V{mJ$hlNwDdvV4Q3sd7rF4hiH+93+T_ZYV@>V^bCt`d=wp(4=!-E7JY3&fXg|(eNUzLKpfy`h(})r+U+JDy!F-JpUMJ1rsqhyGdQH z^v_16w!C&K=$#52xMn|1dHA`>;pj3pB3|UO)*9?x00f85C!2wn(f1B;x;%kv$Faoe z7i8bAcuQ&8>B+T*Cuwp9sLB2xy4;r2Ar{XXKV2EWZL2n+lS<$jyy2vhRb7M17alK` z(`P;U`J`{|^(E#z&!*axOyMUJm{1@rLDvY>h{M&E}?pfU%qxoUX!(#F8tu{fvcKqDfDi{YX+B2B{-9Oolmi?#@9{AAl|rr#p|kdiOjAr<0oCf!67D@`lLl5gz*Z5(ZyVG zWU#RN9-43Kt2;fk=_i~hW=tWmMkuKzC5UIA+7II`aN?s3N+;$;=ECvtzZpT1v@ z5k4(BxkpFQ-mM%|HFDrl2cL*`q~Wj^+Ekx^LuYik8hLK6vpZ)Y5=Em2mO$;&>H@R zESwPPOV(}6fo4qXnT!fXkYoPJ=+i{s7S76eobY1vZP3n@R)IS>;Jt=uX>Zl3Qo|1e zyuRrAv}vKZGi{T!m#vD%!*hl@dZxI`HSHX;J3xFSdW~ERzOmvHL zZC6vf>AreeM_>SvBdqCt4Spgk&=)ngmWZ11BlRCztV|1*+BLm~>C*ht6z#z57!S>c2P zR-c}9wLbWr5xyDfBmf-ErgN)~5EMNe$&oWlL;fD6%`%`BefrsEapE*@{ofhhBinCf zQcgQmSbc*y$6@!J!hDO|16^R{u{^kH$Q>Ols6I%nDJ$K z8M=V*Rodg*fr0LpBkg7=P+AtGFo$H!VD`@wJfBJp%$8gLerbX)0It$_U4n01D>N}O z_|`ec-;BeLWVsIC0PpT`$=4AgES}7>Nwq4;9qJFDU9fYezpXc=-?a$plVNRm?TFmM zsv|OZ1L;0H+0RS++e3ThzGL$1zN>T*4A8v{C^p#<`u--v`+|-e?t}6ee{@0H_33Q2j78N#ea-R1?;uL@G zgM77=swW%q$D+&l+5o&e=YIf1K)b&*(Z-=udgm?=EtB58C&4}x*LBTm87y>U)Pw_b zk03ZB-*W-$-mv4vRfZf_*1~1E%?XbgQs0B&ZB3d z>8vfJx3QLK2n-!q@HT=2sV&ftdiF02dHZu6$O$ozEDJ=qN5c#7-AzXbmPYOfQ^@LuvygLbgl%ctBvxMGTVghEM*#J@O_CSZYBVCBX@8Lt}g zkL_doS$LP>MTPdI@dH@?!n?j@w?0ZCXM!;yaD2X34V;6D`7^}d8h#;oze2UsyhY-h z?P}WIQzSz6?dB-OcH|Z(9C2LD?~eRasCaWu(r&y*sLiI>hFd#Vypf@RGVNf9P81Qr zz~;RQ8Ett>pAe&Wx>vE};&YrDf{hEdmhCIw*4JNo^faHfx9u%uq|f2|?}<8{{*ilY zEv(izkwq=M(MpClU96boG30V9=K1uUL9e2=YkiYUz(ha1Nx=PU3T;yE;KpaWmQtT{ zdy}{6=~_14BGs%lJ6q^=2YH}7;}SODr|5XEdX^S67w)2yd)WB;`0BWYYK^pe^dGY4 z#M9we^$YoQ%^u+Rf%Hjq`@5npAh=72t=za(Dyk%&G1s9drF4t?8hlw#gu3sGbqn1O zNVU?n@9c-SywpE?JNbTRn;1aZk8e3R=xffrEAjsT#yU-&u?7C1`m0}FjX~s|QeEyu z@lILKRt(UlM;Z05{{Th(t9(J>--i0OiKlpTM^wD=EV|2!h+cG!WQ4?RkTYdd48(Jq z@oP&tjaHzQy$@oI90c%joTX{&ef~?ai>Lm~KNWR9h5rEXm{<)yO%zEgD>dhrB!)Q_ zB`FyjpUh_)HiMC#n6A$ZxzH^i>nD)%SRv}WLD766 zcdYnpL$c8nxek#|0cDC>2&tn;Z$SKl; zqggi8Ti-|3ewrH){>0xEZhjo-el4)nw0r#vQ`U}^_KSI)&78RbUU9cEp(FxN-On}L z{?1rqAfv0NMI!2tDgtv$6*DjAcNE9D5hWYWaa8F9=VEv~2LuKK3wA&`Q(i&Yc?e%H2 z%lU22rzt06%mZPRFUn)!HD_$`(_Ym^SKV687|xbL@l%B<+9~MW?APAe^iRb900Ms1 zzZv{FXFtTB9@^{LE}5aWv150tYDdXf-PSfl3m7I+NaJr#LB)Les(#476f|@%t>5Tc zSbJD*tpndYhVm((X`^UDAupY*gmqTyfz4}p-}boiFNnN#f2im-5$L*Q&5oM_>CZdM z4XavtPUaQJ2(rl%vndCHM{`_WiTg}=^GyAr7vc@g(rR~zZak|Sws*FPW=BG(o4!Dz zL$nT@R(N_@^%^#citB52?d$j)m4C3^Rd(#1tgpAPVx^z#<>QOXe+3h$=@v5hj^xAS z-(0j0rVa{Ab-8envan#|Bd9nd6;n|70ph(A$G$P}zP+tz+HSR?SjBZ~40mSfb+0#R zi7eU>!b0fV#&9^n=ZeU`_|M~Ow6l_JdhTiAguwE>)P?3kauv?*K=kQc-LJ$=de6l_ z+ZMMb8||tVMRweqakQ&$$RhxP4;A!Of3&@ubGJ87zxmw z)4V}hnd05OLEpm>f8;|E$%2}ejvoAD0fT{px!J^j;8+I`KG+tNtOF)CRVdX7Q#uLrgG z+3_nz@co6gj3zhPlT5`pT;%#e-@zEItBI3h}X3(HdT_!G+WSB zWw~G7p>DvD_?r9Q_Hpqq!k>hH8T7x0_I@v$#TWXiR15|H zE)-(Fo`v|)<5O>aZT-7_en`& zA+{gr*YV!SCy3)251qr0ewA59Uzp|T#oAuG-`BR?Ivg3LOa?EOZlttHZKLx)c)x5E zu=v06lSS2h6RqiMX{OpvCe<0{F-h_x!gnlAm?cdA9GkA^&X z;wiLy$Rv-*zfC+{PKiIuI((RAV&IH`bDSFdahv0Jk6QNb_x=){QcX(f0haN#S(-=V z80E3hW2b7q{{XaCjc&Y7+RmwecdF`*6mh-9&Zj#wtY8HV^Kvjd)nf3Oy<9}AD8b!X zF2{Zjrb!A=r0Pm3JGX8AKg67nQdcvZZw8)StC{b(Oec?%5VV49c%Iu zZ`y~(qe@##SZ!>WO0Va@?6YB8a9#Px8Lr2}AGZGh#h(ajcDja{{f_#S5wvjKUf7A9 z10GMzah@@rwe$6|-1@CZR8disUDHxmS|!@gPKVh`8^bWdx+<%mGP6!CCvCOgbM<%Q z*|PnlH0ZUz40yXv@N^e&8{6xBY1+;kh@;_Ql~`_B3n>cTp}N=2-Vukv{s{11v7uh* zpYVa|_Lgv5YbxF+npD=E<^WnsuM(<*5oZBTNI9>DejxtXzZE_uEvoC1={C{Z9r31{ zrlq*uoPtX7aB@a^5>I;b-And~_@}BiwsjvC-|7pj+N>I+cXv-JT`I2BEUa)@M+$n5 z)yYqXGkVHP5hZy$-um~}+8Zt)$?)`}3RN0WR?5E0Y_k24nMj@X%CP8 z02ZVE)bc!etXe*!6mefkZGQ1I=^xxiDnTl}hf4I<4dVT+`Lwt5OIP{)u5#IM0IxIdKZqKq?Ee67H;FC03#(r?xuVsj`m zCe>`DEo*l0IRqDs;NbNfbrtMja!U9pNk(^W+R5Mg?_=jN+3ph^G^#l`tDkY}AG0Tl zyeaXoRMPCMXYpUdjSlJ=wGSNV>kRO|pCL~&83UU9Ptrapc;i6uhO^=QAH@2WpP}l} z`FfRv7mko!C-+?e!w+Lp+x$Vi9u&3FZfzo-$_ZLU`N(2huQj{M@l#GUxmtZy)3<%? ze=Uv`nc-o|=v0(!wz79;>aW5d1bhtm$>U2O3wV>pIxoY#7O1#tW!_Fd(^u-;W z$d!UaIE10vg|Z1b3IVJ9De!&XldWhH_@;d$O4jdnDItlI%_@^j>6IZ= zFeO0A{43#GKNRWqnu=T{l=f~MI1#=_A5+$};qg|LZLeGEdVS`nXLyr|1gmgEM01_M zj^eq$v85Gg+3%~rUzzB`JF|1GC(P`U(#qX-*XDmjUkyKEPlGzY!EHisANb!+@kQh- z#omdllVxP#L1`74w>MMwy*gLsg~!0}hcbLZ_=&1%Ullw#rs-Nfxh9>ao2_W8Kw3!z zHye~6v@Q`tDy~6slf`_~rGC-=GVs;1U1%Q=^^2`a2h1O9Z!{eB&hTr<{7>-{RoDDe zsB3pNc6NG>r6HP0?IRIo%Wh^0xC%)b;12bd_I55#5R4QQZ+4yewb|eEIDNJf6LqCt zQj=-ft-kFK*L^eKr@;Hqg}V2Md_CeV7h3T~jp1qTxTl4A(Dv`$+szyw)JpWAO@U z*N}XxE}a5EPa(Mq04E?HuQlLLA+}4&AFh&q z$Un2EkAG`zD?#w@jbFmL7}1|oxra-wfF(>xL4 zPZjvv<5V`vBs(N!S;=!5_2JtuT;p0ya`0Mt7v|SN(Rkn`p<(5gV z{J)SEymj&zgg|~=510(_Gx=x#013~CUd`ZrO`RQ!VaOzBt`AX7Zx`#cM+|dna+u>l zBTeUM1E&?)90oQnddJ?|eLt_j@+D6K^>t?ZXs`F5&>n&R00j5_iof9$zSs3XjHAUG zNF_zwdi}Hs3G_P&%YAvT&qn>6{vGK*wr|Bx3SW4a%<#UAZu9tX-&@Gde{SkoCV3+` zMG49`@wPbYUkAtIj}fiWm-}MmO#HN_<+4cWo@uS|1I4eb9Y*6?ySutlqkYB0Nw_aS za(M&L*G4A`kF8C{l%r2g*7wu7t{zw#b)zb>l%v&Xv_C^H{sVkH@yCn)9cW$+@ok-t zfML=mwAFP)v~eq5LkFH@W|V;DM`l%3#scFRHNt++{{RlWLuv7k!+tu_HLW_^P4JGp zX?t>RrTz8XUSV%8IJ&>fA1V(U*R_0wruLduw~! z^&(@3&h0c;n|+l&UsQNX1P zt2?6}Tc)plUHCRAkE8EK3Y<+$3JN8br@rT5FJ3kZn_QuP?H!{0C z-)4|rENLObyb=Moa+Ns@N6ZC%$NN6~5AX+qJbB|^5%}N18h4F6Bcbbex<7>OE)XJ@ zj^w1Xd3hjj9$5#G!(zWA{4M)kd`<9%rk6T0>5w8@%LG>PK+hCnUAu~c+#i%;yS+E| z^!U4`d?3@j6Ai9_bZa*+8G9BoyKddNn7=1I@tXN;epkko)n8`dq}*H@dv{GV(@lEr zdrL6k=-Qn+uajqV)3)uVwNK}3AHClYyhGr@3d_j zPL|ulk=W^~QVVEwuPrto;UG6obH+L5weEl5qF=NFY42eMp`_@xcMg(WM`K~Jr&Y$# z%*@0NI*b}q$T))$iIrN(E30WQExKsgl?=xw!r^_4D&6yQYMbkH?`z#J#Qu!$uOpZC zE{jLi?=EMZ>{i0+Ups8fc9F{tdE≧@*X&>OTQK8|XH&@0(5gBBioTh`)NmH{7GC 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 literal 0 HcwPel00001 diff --git a/debian/.gitignore b/debian/.gitignore new file mode 100644 index 0000000..f56fe00 --- /dev/null +++ b/debian/.gitignore @@ -0,0 +1,11 @@ +files +*.debhelper +*.substvars +tagua +tagua-data +tagua-variant-chess +tagua-variant-chess5x5 +tagua-variant-crazyhouse +tagua-variant-shogi +tagua-variant-minishogi +tagua-dbg diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..7d21f20 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,25 @@ +tagua for Debian +---------------- + +IA engines currently have to be manually configured in your +~/.kde/share/config/taguarc.xml. Here is a sample block. + + + + GNU Chess + /usr/games/gnuchess + xboard + + + GNU Shogi + /usr/games/gnushogi + gnushogi + + + GPS Shogi + /export/work/yann/games/tagua/shogi/gpsshogi/bin/gpsshogi + gnushogi + + + + -- Yann Dirson , Sat, 8 Dec 2007 15:52:14 z diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..8060fd0 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +tagua (1.0~alpha+git08.01.03-1) unstable; urgency=low + + * Initial Release. + + -- Yann Dirson Sat, 08 Dec 2007 15:48:02 +0100 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..1bd8344 --- /dev/null +++ b/debian/control @@ -0,0 +1,78 @@ +Source: tagua +Section: games +Priority: optional +Maintainer: Yann Dirson +Build-Depends: debhelper (>= 5), libkdegames-dev (>= 4:3.96), cmake, libboost-dev, libqimageblitz-dev, liblua5.1-0-dev +Standards-Version: 3.7.2 + +Package: tagua +Architecture: any +Depends: tagua-data (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Recommends: tagua-variant-chess, tagua-variant +Description: Board-game frontend for playing chess variants and other games. + Tagua is a frontend for a variety of board games. Currently + supported games include chess, shogi and a couple of variants of + those games. + . + Tagua is based on a powerful plugin system that allows many games to + share the same graphical framework, game history handling, + interoperability with AI engines and connectivity to network servers. + . + It currently has support for xboard-compatible chess engines, and + xshogi-compatible shogi engines, as well as network play on chess ICS + servers. + +Package: tagua-data +Architecture: all +Depends: ${misc:Depends} +Description: Theme data for the tagua board-game frontend. + This package contains the architecture independant data files + required by tagua. + +Package: tagua-dbg +Architecture: any +Depends: ${misc:Depends} +Description: Debugging symbols for tagua + This package contains the debugging symbols for tagua, both the UI + tool, core libs and standard plugins. + +Package: tagua-variant-chess +Architecture: any +Depends: tagua +Provides: tagua-variant +Description: Chess support for the tagua board-game frontend + This package allows to play chess from tagua. + +Package: tagua-variant-crazyhouse +Architecture: any +Depends: tagua, tagua-variant-chess +Provides: tagua-variant +Description: Crazyhouse support for the tagua board-game frontend + This package allows to play crazyhouse, a chess variant with drops, + from tagua. + +Package: tagua-variant-chess5x5 +Architecture: any +Depends: tagua, tagua-variant-chess +Provides: tagua-variant +Description: Chess 5x5 support for the tagua board-game frontend + This package allows to play "chess 5x5", a chess variant on a 5x5 + board, from tagua. + +Package: tagua-variant-shogi +Architecture: any +Depends: tagua, tagua-variant-chess, tagua-variant-crazyhouse +Suggests: gnushogi, gpsshogi +Provides: tagua-variant +Description: Shogi support for the tagua board-game frontend + This package allows to play Shogi, a japanese chess-like game, from + tagua. + +Package: tagua-variant-minishogi +Architecture: any +Depends: tagua, tagua-variant-shogi +Suggests: gnushogi +Provides: tagua-variant +Description: MiniShogi support for the tagua board-game frontend + This package allows to play MiniShogi, a variant on a 5x5 board of + the japanese Shogi chess-like game, from tagua. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..8451a72 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,81 @@ +This package was debianized by Yann Dirson on +Sat, 08 Dec 2007 15:48:02 +0100. + +It was downloaded from http://www.tagua-project.org/ + +Upstream Authors: + + Paolo Capriotti + Maurizio Monge + Yann Dirson + +Copyright: + + Copyright (C) 2006-2007 Paolo Capriotti + Copyright (C) 2006-2007 Maurizio Monge + Copyright (C) 2007 Yann Dirson + +License: + + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2007, Yann Dirson and +is licensed under the GPL, see above. + +================================================== + +Files in lua/ is subject to the following license: + + Lua is licensed under the terms of the MIT license reproduced below. + This means that Lua is free software and can be used for both academic + and commercial purposes at absolutely no cost. + + For details and rationale, see http://www.lua.org/license.html . + + Copyright (C) 1994-2007 Lua.org, PUC-Rio. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +================================================== + +Wallpapers in data/themes/wallpapers are covered by the following +licences: + + Buda_and_Pest.jpg, Old_Curtains.jpg, Paris_by_Night: Scott Wheeler, under Creative Commons Share-Alike, Attribution 2.0, + Prmao.jpg: Maurizio Monge, Creative Commons Share-Alike, Attribution 2.0. + San_Diego.jpg: Rufustelestrat, Creative Commons + Dark_Waters.jpg: Marcel Völschow, GPL + Dark_Sunset.jpg: Michal Winiarski, GPL + Fiord.jpg: Bram & Vera, (CC) BY-NC-SA + Mont_Blanc.jpg: Giordano Termanini, GPL diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..6ae0329 --- /dev/null +++ b/debian/docs @@ -0,0 +1,5 @@ +README +TODO +TODO_Maurizio +TODO_Riccardo +TODO_shogi diff --git a/debian/menu b/debian/menu new file mode 100644 index 0000000..1332c01 --- /dev/null +++ b/debian/menu @@ -0,0 +1,3 @@ +?package(tagua):needs="X11" section="Games/Board"\ + hints="KDE" \ + title="tagua" command="/usr/games/tagua" diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..7a6a992 --- /dev/null +++ b/debian/rules @@ -0,0 +1,102 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. +# +# Modified to make a template file for a multi-binary package with separated +# build-arch and build-indep targets by Bill Allombert 2001 + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This has to be exported to make some magic below work. +export DH_OPTIONS + +configure: BUILD/CMakeCache.txt +BUILD/CMakeCache.txt: + dh_testdir + rm -rf CMakeCache.txt BUILD + mkdir BUILD + cd BUILD && cmake \ + -DSYSTEM_LUA=yes \ + -DCMAKE_BUILD_TYPE:STRING=debugfull \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr \ + -DQT_QMAKE_EXECUTABLE:FILEPATH=/usr/bin/qmake-qt4 .. + + +#Architecture +build: build-arch build-indep + +build-arch: build-stamp +build-stamp: BUILD/CMakeCache.txt + + $(MAKE) -C BUILD + touch $@ + +build-indep: +# nothing to do here + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + rm -rf BUILD + + dh_clean + +install: SHELL=/bin/bash +install: + dh_testdir + dh_testroot + dh_clean -k + + $(MAKE) -C BUILD DESTDIR=$(CURDIR)/debian/tmp install + cd debian/tmp && mv usr/bin usr/games + + dh_movefiles + test -z "$$(find debian/tmp ! -type d | tee >(cat >&2))" + + dh_install + +# Must not depend on anything. This is to be called by +# binary-arch/binary-indep +# in another 'make' thread. +binary-common: + dh_testdir + dh_testroot + dh_installchangelogs CHANGELOG + dh_installdocs + dh_installexamples + dh_installmenu +# dh_installdebconf +# dh_installmime +# dh_python +# dh_installinfo + dh_installman + dh_link + dh_strip --dbg-package=tagua-dbg + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +# Build architecture independant packages using the common target. +binary-indep: build-indep install + $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common + +# Build architecture dependant packages using the common target. +binary-arch: build-arch install + $(MAKE) -f debian/rules DH_OPTIONS=-s binary-common + +binary: binary-arch binary-indep +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/debian/tagua-data.files b/debian/tagua-data.files new file mode 100644 index 0000000..0a05bfa --- /dev/null +++ b/debian/tagua-data.files @@ -0,0 +1,3 @@ +usr/share/kde4/apps/tagua +usr/share/kde4/servicetypes +usr/share/locale diff --git a/debian/tagua-variant-chess.files b/debian/tagua-variant-chess.files new file mode 100644 index 0000000..a2426a5 --- /dev/null +++ b/debian/tagua-variant-chess.files @@ -0,0 +1,2 @@ +usr/lib/kde4/taguachess.so +usr/share/kde4/services/tagua-chess.desktop diff --git a/debian/tagua-variant-chess5x5.files b/debian/tagua-variant-chess5x5.files new file mode 100644 index 0000000..382dd43 --- /dev/null +++ b/debian/tagua-variant-chess5x5.files @@ -0,0 +1,2 @@ +usr/lib/kde4/taguachess5x5.so +usr/share/kde4/services/tagua-chess5x5.desktop diff --git a/debian/tagua-variant-crazyhouse.files b/debian/tagua-variant-crazyhouse.files new file mode 100644 index 0000000..6b32d9b --- /dev/null +++ b/debian/tagua-variant-crazyhouse.files @@ -0,0 +1,2 @@ +usr/lib/kde4/taguacrazyhouse.so +usr/share/kde4/services/tagua-crazyhouse.desktop diff --git a/debian/tagua-variant-minishogi.files b/debian/tagua-variant-minishogi.files new file mode 100644 index 0000000..2a0fde2 --- /dev/null +++ b/debian/tagua-variant-minishogi.files @@ -0,0 +1,2 @@ +usr/lib/kde4/taguaminishogi.so +usr/share/kde4/services/tagua-minishogi.desktop diff --git a/debian/tagua-variant-shogi.files b/debian/tagua-variant-shogi.files new file mode 100644 index 0000000..67667f1 --- /dev/null +++ b/debian/tagua-variant-shogi.files @@ -0,0 +1,2 @@ +usr/lib/kde4/taguashogi.so +usr/share/kde4/services/tagua-shogi.desktop diff --git a/debian/tagua.files b/debian/tagua.files new file mode 100644 index 0000000..fa4f8cf --- /dev/null +++ b/debian/tagua.files @@ -0,0 +1,3 @@ +usr/games +usr/share/applications +usr/lib/*.so diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..38729a8 --- /dev/null +++ b/debian/watch @@ -0,0 +1,5 @@ +version=3 + +# +opts="uversionmangle=s/-(alpha|beta)/~$1/" \ + http://www.tagua-project.org/wiki/Download .*/tagua-(.*)\.tar\.gz diff --git a/doc/engine-intf.html b/doc/engine-intf.html new file mode 100644 index 0000000..07a2976 --- /dev/null +++ b/doc/engine-intf.html @@ -0,0 +1,1895 @@ + + +Chess Engine Communication Protocol + + + +


    +

    Chess Engine Communication Protocol

    +

    Tim Mann

    +

    +$Id: engine-intf.html,v 2.1 2003/10/27 19:21:00 mann Exp $
    +Version 2; implemented in xboard/WinBoard 4.2.1 and later.
    +Changes since version 1 are indicated in red. +


    + + + +
    + +

    1. Introduction

    + +

    +This document is a set of rough notes on the protocol that xboard and +WinBoard use to communicate with gnuchessx and other chess engines. +These notes may be useful if you want to connect a different chess +engine to xboard. Throughout the notes, "xboard" means both xboard +and WinBoard except where they are specifically contrasted. +

    + +

    +There are two reasons I can imagine someone wanting to do this: +

    +
      +
    1. You have, or are developing, a chess engine but you don't want to +write your own graphical interface. +
    2. You have, or are developing,a chess engine, and you want to +interface it to the Internet Chess Server. +
    + +

    +In case (2), if you are using xboard, you will need to configure the +"Zippy" code into it, but WinBoard includes this code already. See +the file zippy.README +in the xboard or WinBoard distribution for more information. + +

    + +

    +These notes are unpolished, but I've attempted to make them complete +in this release. If you notice any errors, omissions, or misleading +statements, let me know. +

    + +

    +I'd like to hear from everyone who is trying to interface their own +chess engine to xboard/WinBoard. Please join the mailing list for +authors of xboard/WinBoard compatible chess engines and post a message +about what you're doing. The list is now hosted by Yahoo Groups; you +can join at http://groups.yahoo.com/group/chess-engines, or you can read the +list there without joining. The list is filtered to prevent spam. +

    + +

    2. Connection

    + +

    +An xboard chess engine runs as a separate process from xboard itself, +connected to xboard through a pair of anonymous pipes. The engine +does not have to do anything special to set up these pipes. xboard +sets up the pipes itself and starts the engine with one pipe as its +standard input and the other as its standard output. The engine then +reads commands from its standard input and writes responses to its +standard output. This is, unfortunately, a little more complicated to +do right than it sounds; see section 6 below. +

    + +

    +And yes, contrary to some people's expectations, exactly the same +thing is true for WinBoard. Pipes and standard input/output are +implemented in Win32 and work fine. You don't have to use DDE, COM, +DLLs, BSOD, or any of the other infinite complexity that +Microsoft has created just to talk between two programs. A WinBoard +chess engine is a Win32 console program that simply reads from its +standard input and writes to its standard output. See sections +5 and 6 below for additional details. +

    + +

    3. Debugging

    + +

    +To diagnose problems in your engine's interaction with xboard, use the +-debug flag on xboard's command line to see the messages that are +being exchanged. In WinBoard, these messages are written to the file +WinBoard.debug instead of going to the screen. +

    + +

    +You can turn debug mode on or off while WinBoard is running by +pressing Ctrl+Alt+F12. You can turn debug mode on or off while xboard +is running by binding DebugProc to a shortcut key (and pressing the +key!); see the instructions on shortcut keys in the xboard man page. +

    + +

    +While your engine is running under xboard/WinBoard, you can send a +command directly to the engine by pressing Shift+1 (xboard) or Alt+1 +(WinBoard 4.0.3 and later). This brings up a dialog that you can type +your command into. Press Shift+2 (Alt+2) instead to send to the +second chess engine in Two Machines mode. On WinBoard 4.0.2 and earlier, +Ctrl+Alt is used in place of Alt; this had to be changed due to a conflict +with typing the @-sign on some European keyboards. +

    + +

    4. How it got this way

    + +

    +Originally, xboard was just trying to talk to the existing +command-line interface of GNU Chess 3.1+ and 4, which was designed +for people to type commands to. So the communication protocol is very +ad-hoc. It might have been good to redesign it early on, but because +xboard and GNU Chess are separate programs, I didn't want to force +people to upgrade them together to versions that matched. I +particularly wanted to keep new versions of xboard working with old +versions of GNU Chess, to make it easier to compare the play of old +and new gnuchess versions. I didn't foresee the need for a clean +protocol to be used with other chess engines in the future. +

    + +

    +Circumstances have changed over the years, and now there are many more +engines that work with xboard. I've had to make the protocol +description more precise, I've added some features that GNU Chess +does not support, and I've specified the standard semantics of a few +features to be slightly different from what GNU Chess 4 does. +

    + +

    + +This release of the protocol specification is the first to carry a +version number of its own -- version 2. Previous releases simply +carried a last-modified date and were loosely tied to specific +releases of xboard and WinBoard. The version number "1" applies +generally to all those older versions of the protocol. + + + +

    Protocol version 2 remains compatible with older engines but has +several new capabilities. In particular, it adds the +"feature" command, a new mechanism for making backward-compatible +changes and extensions to the protocol. Engines that do not support a +particular new feature do not have to use it; new features are not +enabled unless the engine specifically requests them using the feature +command. If an engine does not send the feature command at all, the +protocol behavior is nearly identical to version 1. Several new +features can be selected by the feature command in version 2, +including the "ping" command (recommended for all engines), the +"setboard" command, and many optional parameters. Additional features +will probably be added in future versions. +

    + + +

    5. WinBoard requires Win32 engines

    + +

    +Due to some Microsoft brain damage that I don't understand, WinBoard +does not work with chess engines that were compiled to use a DOS +extender for 32-bit addressing. (Probably not with 16-bit DOS or +Windows programs either.) WinBoard works only with engines that are +compiled for the Win32 API. You can get a free compiler that targets +the Win32 API from http://sources.redhat.com/cygwin/. I think DJGPP 2.x should also +work if you use the RSXNTDJ extension, but I haven't tried it. Of +course, Microsoft Visual C++ will work. Most likely the other +commercial products that support Win32 will work too (Borland, etc.), +but I have not tried them. Delphi has been successfully used to write +engines for WinBoard; if you want to do this, Tony Werten has donated +some sample +code that should help you get started. +

    + +

    6. Hints on input/output

    + +

    +Beware of using buffered I/O in your chess engine. The C stdio +library, C++ streams, and the I/O packages in most other languages use +buffering both on input and output. That means two things. First, +when your engine tries to write some characters to xboard, the library +stashes them in an internal buffer and does not actually write them to +the pipe connected to xboard until either the buffer fills up or you +call a special library routine asking for it to be flushed. (In C +stdio, this routine is named fflush.) Second, when your engine tries +to read some characters from xboard, the library does not read just +the characters you asked for -- it reads all the characters that are +currently available (up to some limit) and stashes any characters you +are not yet ready for in an internal buffer. The next time you ask to +read, you get the characters from the buffer (if any) before the +library tries to read more data from the actual pipe. +

    + +

    +Why does this cause problems? First, on the output side, remember +that your engine produces output in small quantities (say, a few +characters for a move, or a line or two giving the current analysis), +and that data always needs to be delivered to xboard/WinBoard for +display immediately. If you use buffered output, the data you print +will sit in a buffer in your own address space instead of being +delivered. +

    + +

    +You can usually fix the output buffering problem by asking for the +buffering to be turned off. In C stdio, you do this by calling +setbuf(stdout, NULL). A more laborious and error-prone +method is to carefully call fflush(stdout) after every line +you output; I don't recommend this. In C++, you can try +cout.setf(ios::unitbuf), which is documented in current +editions of "The C++ Programming Language," but not older ones. +Another C++ method that might work is +cout.rdbuf()->setbuf(NULL, 0). Alternatively, you can +carefully call cout.flush() after every line you output; +again, I don't recommend this. +

    + +

    +Another way to fix the problem is to use unbuffered operating system +calls to write directly to the file descriptor for standard output. +On Unix, this means write(1, ...) -- see the man page for write(2). +On Win32, you can use either the Unix-like _write(1, ...) or Win32 +native routines like WriteFile. +

    + +

    +Second, on the input side, you are likely to want to poll during your +search and stop it if new input has come in. If you implement +pondering, you'll need this so that pondering stops when the user +makes a move. You should also poll during normal thinking on your +move, so that you can implement the "?" (move now) command, and so +that you can respond promptly to a "result", "force", or "quit" +command if xboard wants to end the game or terminate your engine. +Buffered input makes polling more complicated -- when you poll, you +must stop your search if there are either characters in the buffer +or characters available from the underlying file descriptor. +

    + +

    +The most direct way to fix this problem is to use unbuffered operating +system calls to read (and poll) the underlying file descriptor +directly. On Unix, use read(0, ...) to read from standard input, and +use select() to poll it. See the man pages read(2) and select(2). +(Don't follow the example of GNU Chess 4 and use the FIONREAD ioctl to +poll for input. It is not very portable; that is, it does not exist +on all versions of Unix, and is broken on some that do have it.) On +Win32, you can use either the Unix-like _read(0, ...) or the native +Win32 ReadFile() to read. Unfortunately, under Win32, the function to +use for polling is different depending on whether the input device is +a pipe, a console, or something else. (More Microsoft brain damage +here -- did they never hear of device independence?) For pipes, you +can use PeekNamedPipe to poll (even when the pipe is unnamed). +For consoles, +you can use GetNumberOfConsoleInputEvents. For sockets only, you can +use select(). It might be possible to use +WaitForSingleObject more +generally, but I have not tried it. Some code to do these things can +be found in Crafty's utility.c, but I don't guarantee that it's all +correct or optimal. +

    + +

    +A second way to fix the problem might be to ask your I/O library not +to buffer on input. It should then be safe to poll the underlying +file descriptor as described above. With C, you can try calling +setbuf(stdin, NULL). However, I have never tried this. Also, there +could be problems if you use scanf(), at least with certain patterns, +because scanf() sometimes needs to read one extra character and "push +it back" into the buffer; hence, there is a one-character pushback +buffer even if you asked for stdio to be unbuffered. With C++, you +can try cin.rdbuf()->setbuf(NULL, 0), but again, I have never tried +this. +

    + +

    +A third way to fix the problem is to check whether there are +characters in the buffer whenever you poll. C I/O libraries generally +do not provide any portable way to do this. Under C++, you can use +cin.rdbuf()->in_avail(). This method has been reported to +work with +EXchess. Remember that if there are no characters in the buffer, you +still have to poll the underlying file descriptor too, using the +method described above. +

    + +

    +A fourth way to fix the problem is to use a separate thread to read +from stdin. This way works well if you are familiar with thread +programming. This thread can be blocked waiting for input to come in +at all times, while the main thread of your engine does its thinking. +When input arrives, you have the thread put the input into a buffer +and set a flag in a global variable. Your search routine then +periodically tests the global variable to see if there is input to +process, and stops if there is. WinBoard and my Win32 ports of ICC +timestamp and FICS timeseal use threads to handle multiple input +sources. +

    + +

    7. Signals

    + +

    Engines that run on Unix need to be concerned with two Unix +signals: SIGTERM and SIGINT. This applies both to +engines that run under xboard and (the unusual case of) engines that +WinBoard remotely runs on a Unix host using the -firstHost or +-secondHost feature. It does not apply to engines that run on +Windows, because Windows does not have Unix-style signals. + +Beginning with version 2, you can now turn off the use of +either or both +signals. See the "feature" command in section 9 below. + +

    + +

    First, when an engine is sent the "quit" command, it is also given +a SIGTERM signal shortly afterward to make sure it goes away. +If your engine reliably responds to "quit", and the signal causes +problems for you, you should either ignore it by calling +signal(SIGTERM, SIG_IGN) at the start of your program, +or disable it with the "feature" command.

    + +

    Second, xboard will send an interrupt signal (SIGINT) at +certain times when it believes the engine may not be listening to user +input (thinking or pondering). WinBoard currently does this only when +the engine is running remotely using the -firstHost or -secondHost +feature, not when it is running locally. You probably need to know +only enough about this grungy feature to keep it from getting in your +way. +

    + +

    +The SIGINTs are basically tailored to the needs of GNU Chess 4 +on systems where its input polling code is broken or disabled. +Because they work in a rather peculiar way, it is recommended that you +either ignore SIGINT by having your engine call +signal(SIGINT, SIG_IGN), or disable it with the "feature" +command.

    + +

    +Here are details for the curious. If xboard needs to send a command +when it is the chess engine's move (such as before the "?" command), +it sends a SIGINT first. If xboard needs to send commands when it is +not the chess engine's move, but the chess engine may be pondering +(thinking on its opponent's time) or analyzing (analysis or analyze +file mode), xboard sends a SIGINT before the first such command only. +Another SIGINT is not sent until another move is made, even if xboard +issues more commands. This behavior is necessary for GNU Chess 4. The +first SIGINT stops it from pondering until the next move, but on some +systems, GNU Chess 4 will die if it receives a SIGINT when not +actually thinking or pondering. +

    + +

    +There are two reasons why WinBoard does not send the Win32 equivalent +of SIGINT (which is called CTRL_C_EVENT) to local +engines. First, the Win32 GNU Chess 4 port does not need it. Second, I +could not find a way to get it to work. Win32 seems to be designed +under the assumption that only console applications, not windowed +applications, would ever want to send a CTRL_C_EVENT. +

    + +

    8. Commands from xboard to the engine

    + +

    +All commands from xboard to the engine end with a newline (\n), even +where that is not explicitly stated. All your output to xboard must +be in complete lines; any form of prompt or partial line will cause +problems. +

    + +

    +At the beginning of each game, xboard sends an initialization string. +This is currently "new\nrandom\n" unless the user changes it with the +initString or secondInitString option. +

    + +

    +xboard normally reuses the same chess engine process for multiple +games. At the end of a game, xboard will send the "force" command +(see below) to make sure your engine stops thinking about the current +position. It will later send the initString again to start a new +game. If your engine can't play multiple games, you can disable reuse + +either with the "feature" command (beginning in protocol version +2; see below) or + +with xboard's -xreuse (or -xreuse2) command line +option. xboard will then ask the process to quit after each game and +start a new process for the next game. +

    + +
    +
    xboard +
    This command will be sent once immediately after your engine +process is started. You can use it to put your engine into "xboard +mode" if that is needed. If your engine prints a prompt to ask for +user input, you must turn off the prompt and output a newline when the +"xboard" command comes in. +

    + +

    protover N +
    +Beginning in protocol version 2 (in which N=2), this command will +be sent immediately after the "xboard" command. If you receive some +other command immediately after "xboard" (such as "new"), you can +assume that protocol version 1 is in use. The "protover" command is +the only new command that xboard always sends in version 2. All other +new commands to the engine are sent only if the engine first enables +them with the "feature" command. Protocol versions will always be +simple integers so that they can easily be compared. + +

    Your engine should reply to the protover command by sending the +"feature" command (see below) with the list of non-default feature +settings that you require, if any. + +

    Your engine should never refuse to run due to receiving a higher +protocol version number than it is expecting! New protocol versions +will always be compatible with older ones by default; the larger +version number is simply a hint that additional "feature" command +options added in later protocol versions may be accepted. + +

    + +

    accepted +
    rejected +
    +These commands may be sent to your engine in reply to the "feature" +command; see its documentation below. + +

    + +

    new +
    Reset the board to the standard chess starting position. Set +White on move. Leave force mode and set the engine to play Black. +Associate the engine's clock with Black and the opponent's clock with +White. Reset clocks and time controls to the start of a new game. +Stop clocks. Do not ponder on this move, even if pondering is on. +Remove any search depth limit previously set by the sd command. +

    + +

    variant VARNAME +
    If the game is not standard chess, but a variant, this command is +sent after "new" and before the first move or "edit" command. Currently +defined variant names are: + + +
    wildcastleShuffle chess where king can castle from d file +
    nocastleShuffle chess with no castling at all +
    fischerandomFischer Random (not supported yet) +
    bughouseBughouse, ICC/FICS rules +
    crazyhouseCrazyhouse, ICC/FICS rules +
    losersWin by losing all pieces or getting mated (ICC) +
    suicideWin by losing all pieces including king, +or by having fewer pieces when one player has no legal moves (FICS) +
    giveaway +Win by losing all pieces including king, +or by having no legal moves (ICC) +
    twokingsWeird ICC wild 9 +
    kriegspielKriegspiel (engines not supported) +
    atomicAtomic +
    3checkWin by giving check 3 times +
    unknownUnknown variant (not supported) +
    +

    + +

    quit +
    The chess engine should immediately exit. This command is used +when xboard is itself exiting, and also between games if the -xreuse +command line option is given (or -xreuse2 for the second engine). +See also Signals above. +

    + +

    random +
    This command is specific to GNU Chess 4. You can either ignore it +completely (that is, treat it as a no-op) or implement it as GNU Chess +does. The command toggles "random" mode (that is, it sets random = +!random). In random mode, the engine adds a small random value to its +evaluation function to vary its play. The "new" command sets random +mode off. +

    + +

    force +
    Set the engine to play neither color ("force mode"). Stop clocks. +The engine should check that moves received in force mode are legal +and made in the proper turn, but should not think, ponder, or make +moves of its own. +

    + +

    go +
    Leave force mode and set the engine to play the color that is on +move. Associate the engine's clock with the color that is on move, +the opponent's clock with the color that is not on move. Start the engine's +clock. Start thinking and eventually make a move. +

    + +

    playother +
    + +(This command is new in protocol version 2. It is not +sent unless you enable it with the feature command.) +Leave force mode and set the engine to play the color that is not on +move. Associate the opponent's clock with the color that is on move, +the engine's clock with the color that is not on move. Start the opponent's +clock. If pondering is enabled, the engine should begin pondering. +If the engine later receives a move, it should start thinking and eventually +reply. + +

    + +

    white +
    + +(This command is obsolete as of protocol version 2, but is still +sent in some situations to accommodate older engines unless you disable it +with the feature command.) + +Set White on move. Set the engine to play Black. Stop clocks. +

    + +

    black +
    + +(This command is obsolete as of protocol version 2, but is still +sent in some situations to accommodate older engines unless you disable it +with the feature command.) + +Set Black on move. Set the engine to play White. Stop clocks. +

    + +

    level MPS BASE INC +
    Set time controls. See the Time Control section below. +

    + +

    st TIME +
    Set time controls. See the Time Control section +below. The commands "level" and "st" are not used together. +

    + +

    sd DEPTH +
    The engine should limit its thinking to DEPTH ply. +

    + +

    time N +
    Set a clock that always belongs to the engine. N is a number in + centiseconds (units of 1/100 second). Even if the engine changes to + playing the opposite color, this clock remains with the engine. +

    + +

    otim N + +
    Set a clock that always belongs to the opponent. N is a number in +centiseconds (units of 1/100 second). Even if the opponent changes to +playing the opposite color, this clock remains with the opponent. +

    +If needed for purposes of board display in force mode (where the +engine is not participating in the game) the time clock should be +associated with the last color that the engine was set to play, the +otim clock with the opposite color. +

    + +

    + +Beginning in protocol version 2, if you can't handle the time and +otim commands, you can use the "feature" command to disable them; see +below. + +The following techniques from older protocol versions also +work: You can ignore the time and otim commands (that is, treat them +as no-ops), or send back "Error (unknown command): time" the first +time you see "time". +

    + +
    MOVE +
    See below for the syntax of moves. If the move is illegal, print +an error message; see the section "Commands from the engine to +xboard". If the move is legal and in turn, make it. If not in force +mode, stop the opponent's clock, start the engine's clock, start +thinking, and eventually make a move. +

    +When xboard sends your engine a move, it normally sends coordinate +algebraic notation. Examples: +

    + +
    Normal moves:e2e4 +
    Pawn promotion:e7e8q +
    Castling:e1g1, e1c1, e8g8, e8c8 +
    Bughouse/crazyhouse drop:P@h3 +
    ICS Wild 0/1 castling:d1f1, d1b1, d8f8, d8b8 +
    FischerRandom castling:O-O, O-O-O (oh, not zero) +
    + +

    + +Beginning in protocol version 2, you can use the feature command +to select SAN (standard algebraic notation) instead; for example, e4, +Nf3, exd5, Bxf7+, Qxf7#, e8=Q, O-O, or P@h3. Note that the last form, +P@h3, is a extension to the PGN standard's definition of SAN, which does +not support bughouse or crazyhouse. + +

    + +

    +xboard doesn't reliably detect illegal moves, because it does not keep +track of castling unavailability due to king or rook moves, or en +passant availability. If xboard sends an illegal move, send back an +error message so that xboard can retract it and inform the user; see +the section "Commands from the engine to xboard". +

    + +
    usermove MOVE +
    +By default, moves are sent to the engine without a command name; +the notation is just sent as a line by itself. +Beginning in protocol version 2, you can use the feature command +to cause the command name "usermove" to be sent before the move. +Example: "usermove e2e4". + +

    + +
    ? +
    Move now. If your engine is thinking, it should move immediately; + otherwise, the command should be ignored (treated as a no-op). It + is permissible for your engine to always ignore the ? command. The + only bad consequence is that xboard's Move Now menu command will do + nothing. +

    +It is also permissible for your engine to move immediately if it gets +any command while thinking, as long as it processes the command right +after moving, but it's preferable if you don't do this. For example, +xboard may send post, nopost, easy, hard, force, quit, + +or other commands + +while the engine is on move. +

    + +
    ping N +
    + +In this command, N is a decimal number. When you receive the command, +reply by sending the string pong N, where N is the +same number you received. Important: You must not reply to a "ping" +command until you have finished executing all commands that you +received before it. Pondering does not count; if you receive a ping +while pondering, you should reply immediately and continue pondering. +Because of the way xboard uses the ping command, if you implement the +other commands in this protocol, you should never see a "ping" command +when it is your move; however, if you do, you must not send the "pong" +reply to xboard until after you send your move. For example, xboard +may send "?" immediately followed by "ping". If you implement the "?" +command, you will have moved by the time you see the subsequent ping +command. Similarly, xboard may send a sequence like "force", "new", +"ping". You must not send the pong response until after you have +finished executing the "new" command and are ready for the new game to +start. + +

    +The ping command is new in protocol version 2 and will not be sent +unless you enable it with the "feature" command. Its purpose is to +allow several race conditions that could occur in previous versions of +the protocol to be fixed, so it is highly recommended that you +implement it. It is especially important in simple engines that do +not ponder and do not poll for input while thinking, but it is needed in all +engines. +

    +
    + +
    draw +
    The engine's opponent offers the engine a draw. To accept the +draw, send "offer draw". To decline, ignore the offer (that is, send +nothing). If you're playing on ICS, it's possible for the draw offer +to have been withdrawn by the time you accept it, so don't assume the +game is over because you accept a draw offer. Continue playing until +xboard tells you the game is over. See also "offer draw" below. +

    + +

    result RESULT {COMMENT} +
    After the end of each game, xboard will send you a result command. +You can use this command to trigger learning. RESULT is either 1-0, +0-1, 1/2-1/2, or *, indicating whether white won, black won, the game +was a draw, or the game was unfinished. The COMMENT string is purely +a human-readable comment; its content is unspecified and subject to +change. In ICS mode, it is passed through from ICS uninterpreted. +Example:
    result 1-0 {White mates}
    +

    +Here are some notes on interpreting the "result" command. Some apply +only to playing on ICS ("Zippy" mode). +

    + +

    +If you won but did not just play a mate, your opponent must have +resigned or forfeited. If you lost but were not just mated, you +probably forfeited on time, or perhaps the operator resigned manually. +If there was a draw for some nonobvious reason, perhaps your opponent +called your flag when he had insufficient mating material (or vice +versa), or perhaps the operator agreed to a draw manually. +

    + +

    +You will get a result command even if you already know the game ended +-- for example, after you just checkmated your opponent. In fact, if +you send the "RESULT {COMMENT}" command (discussed below), you will +simply get the same thing fed back to you with "result" tacked in +front. You might not always get a "result *" command, however. In +particular, you won't get one in local chess engine mode when the user +stops playing by selecting Reset, Edit Game, Exit or the like. +

    + +
    setboard FEN +
    +The setboard command is the new way to set up positions, beginning +in protocol version 2. It is not used unless it has been selected +with the feature command. Here FEN is a position in Forsythe-Edwards +Notation, as defined in the PGN standard. + +

    Illegal positions: Note that either setboard or edit can +be used to send an illegal position to the engine. The user can +create any position with xboard's Edit Position command (even, say, +an empty board, or a board with 64 white kings and no black ones). +If your engine receives a position that it considers illegal, +I suggest that you send the response "tellusererror Illegal position", +and then respond to any attempted move with "Illegal move" until +the next new, edit, or setboard command.

    +
    +

    + +

    edit +
    + +The edit command is the old way to set up positions. For compatibility +with old engines, it is still used by default, but new engines may prefer +to use the feature command (see below) to cause xboard to use setboard instead. + +The edit command puts the chess engine into a special mode, where +it accepts the following subcommands: + +
    cchange current piece color, initially white +
    Pa4 (for example)place pawn of current color on a4 +
    xa4 (for example)empty the square a4 (not used by xboard) +
    #clear board +
    .leave edit mode +
    + +See the Idioms section below for additional subcommands used in +ChessBase's implementation of the protocol. + + +

    The edit command does not change the side to move. To set up a +black-on-move position, xboard uses the following command sequence: +

    +
    +    new
    +    force
    +    a2a3
    +    edit
    +    <edit commands>
    +    .
    +
    + +

    +This sequence is used to avoid the "black" command, which is now +considered obsolete and which many engines never did implement as +specified in this document. +

    + +

    +After an edit command is complete, if a king and a rook are on their +home squares, castling is assumed to be available to them. En passant +capture is assumed to be illegal on the current move regardless of the +positions of the pawns. The clock for the 50 move rule starts at +zero, and for purposes of the draw by repetition rule, no prior +positions are deemed to have occurred. +

    + +
    hint +
    If the user asks for a hint, xboard sends your engine the command +"hint". Your engine should respond with "Hint: xxx", where xxx is a +suggested move. If there is no move to suggest, you can ignore the +hint command (that is, treat it as a no-op). +

    + +

    bk +
    If the user selects "Book" from the xboard menu, xboard will send +your engine the command "bk". You can send any text you like as the +response, as long as each line begins with a blank space or tab (\t) +character, and you send an empty line at the end. The text pops up in +a modal information dialog. +

    + +

    undo +
    If the user asks to back up one move, xboard will send you the +"undo" command. xboard will not send this command without putting you +in "force" mode first, so you don't have to worry about what should +happen if the user asks to undo a move your engine made. (GNU Chess 4 +actually switches to playing the opposite color in this case.) +

    + +

    remove +
    If the user asks to retract a move, xboard will send you the +"remove" command. It sends this command only when the user is on +move. Your engine should undo the last two moves (one for each +player) and continue playing the same color. +

    + +

    hard +
    Turn on pondering (thinking on the opponent's time, also known as +"permanent brain"). xboard will not make any assumption about what +your default is for pondering or whether "new" affects this setting. +

    + +

    easy +
    Turn off pondering. +

    + +

    post +
    Turn on thinking/pondering output. +See Thinking Output section. +

    + +

    nopost +
    Turn off thinking/pondering output. +

    + +

    analyze +
    Enter analyze mode. See Analyze Mode section. +

    + +

    name X
    This command informs the engine of its +opponent's name. When the engine is playing on a chess server, xboard +obtains the opponent's name from the server. + +When the engine is +playing locally against a human user, xboard obtains the user's login +name from the local operating system. When the engine is playing +locally against another engine, xboard uses either the other engine's +filename or the name that the other engine supplied in the myname +option to the feature command. By default, xboard uses the name +command only when the engine is playing on a chess server. Beginning +in protocol version 2, you can change this with the name option to the +feature command; see below. + +

    + +

    rating +
    In ICS mode, xboard obtains the ICS opponent's rating from the +"Creating:" message that appears before each game. (This message may +not appear on servers using outdated versions of the FICS code.) In +Zippy mode, it sends these ratings on to the chess engine using the +"rating" command. The chess engine's own rating comes first, and if +either opponent is not rated, his rating is given as 0. + +In the future this command may also be used in other modes, if ratings +are known. + +Example:
    rating 2600 1500
    +

    + +

    ics HOSTNAME +
    +If HOSTNAME is "-", the engine is playing against a local +opponent; otherwise, the engine is playing on an Internet Chess Server +(ICS) with the given hostname. This command is new in protocol +version 2 and is not sent unless the engine has enabled it with +the "feature" command. Example: "ics freechess.org" + +

    + +

    computer +
    The opponent is also a computer chess engine. Some engines alter +their playing style when they receive this command. +

    + +

    pause +
    resume +
    (These commands are new in protocol +version 2 and will not be sent unless feature pause=1 is set. At +this writing, xboard actually does not use the commands at all, but it +or other interfaces may use them in the future.) +The "pause" command puts the engine into a special state where it +does not think, ponder, or otherwise consume significant CPU time. +The current thinking or pondering (if any) is suspended and both +player's clocks are stopped. The only command that the interface may +send to the engine while it is in the paused state is "resume". The +paused thinking or pondering (if any) resumes from exactly where it +left off, and the clock of the player on move resumes running from +where it stopped. + +
    + +

    Bughouse commands:

    + +

    +xboard now supports bughouse engines when in Zippy mode. See +zippy.README for information on Zippy mode and how to turn on the +bughouse support. The bughouse move format is given above. xboard +sends the following additional commands to the engine when in bughouse +mode. +Commands to inform your engine of the partner's game state may +be added in the future. +

    + +
    +
    partner <player> +
    <player> is now your partner for future games. Example:
    partner mann
    +

    + +

    partner +
    Meaning: You no longer have a partner. +

    + +

    ptell <text> +
    Your partner told you <text>, either with a ptell or an ordinary tell. +

    + +

    holding [<white>] [<black>] +
    White currently holds <white>; black currently holds <black>. + Example:
    holding [PPPRQ] []
    + +
    holding [<white>] [<black>] <color><piece> +
    White currently holds <white>; black currently holds <black>, after + <color> acquired <piece>. Example:
    holding [PPPRQ] [R] BR
    +
    + +

    9. Commands from the engine to xboard

    + +

    + +In general, an engine should not send any output to xboard that is not +described in this document. As the protocol is extended, newer +versions of xboard may recognize additional strings as commands that +were previously not assigned a meaning. + +

    + +
    +
    +feature FEATURE1=VALUE1 FEATURE2=VALUE2 ... + + +
    +Beginning with version 2, the protocol includes the "feature" +command, which lets your engine control certain optional protocol +features. Feature settings are written as FEATURE=VALUE, where +FEATURE is a name from the list below and VALUE is the value to be +assigned. Features can take string, integer, or boolean values; the +type of value is listed for each feature. String values are written +in double quotes (for example, feature myname="Miracle Chess +0.9"), integers are written in decimal, and boolean values are +written as 0 for false, 1 for true. Any number of features can be set +in one feature command, or multiple feature commands can be given. + +

    +Your engine should send one or more feature commands immediately after +receiving the "protover" command, since xboard needs to know the +values of some features before sending further commands to the engine. +Because engines that predate protocol version 2 do not send "feature", +xboard uses a timeout mechanism: when it first starts your engine, it +sends "xboard" and "protover N", then listens for feature commands for +two seconds before sending any other commands. To end this timeout +and avoid the wait, set the feature "done=1" at the end of your last +feature command. To increase the timeout, if needed, set the feature +"done=0" before your first feature command and "done=1" at the end. +If needed, it is okay for your engine to set done=0 soon as it starts, +even before it receives the xboard and protover commands. This can be +useful if your engine takes a long time to initialize itself. It +should be harmless even if you are talking to a (version 1) user +interface that does not understand the "feature" command, since such +interfaces generally ignore commands from the engine that they do not +understand. +

    + +

    +The feature command is designed to let the protocol change without +breaking engines that were written for older protocol versions. When +a new feature is added to the protocol, its default value is always +chosen to be compatible with older versions of the protocol that did +not have the feature. Any feature that your engine does not set in a +"feature" command retains its default value, so as the protocol +changes, you do not have to change your engine to keep up with it +unless you want to take advantage of a new feature. Because some +features are improvements to the protocol, while others are meant to +cater to engines that do not implement all the protocol features, the +recommended setting for a feature is not always the same as the +default setting. The listing below gives both default and recommended +settings for most features. +

    + +

    +You may want to code your engine so as to be able to work with +multiple versions of the engine protocol. Protocol version 1 does not +send the protover command and does not implement the feature command; +if you send a feature command in protocol version 1, it will have no +effect and there will be no response. In protocol version 2 or later, +each feature F that you set generates the response "accepted F" if the +feature is implemented, or "rejected F" if it is not. Thus an engine +author can request any feature without having to keep track of which +protocol version it was introduced in; you need only check whether the +feature is accepted or rejected. This mechanism also makes it +possible for a user interface author to implement a subset of a +protocol version by rejecting some features that are defined in that +version; however, you should realize that engine authors are likely to +code for xboard and may not be prepared to have a feature that they +depend on be rejected. +

    + +

    +Here are the features that are currently defined. +

    +
    + +
    +
    +ping (boolean, default 0, recommended 1) + +
    +If ping=1, xboard may use the protocol's new "ping" command; +if ping=0, xboard will not use the command. + + +
    +setboard (boolean, default 0, recommended 1) + +
    +If setboard=1, xboard will use the protocol's new "setboard" command +to set up positions; if setboard=0, it will use the older "edit" command. + + +
    +playother (boolean, default 0, recommended 1) + +
    +If playother=1, xboard will use the protocol's new "playother" command +when appropriate; if playother=0, it will not use the command. + + +
    +san (boolean, default 0) + +
    +If san=1, xboard will send moves to the engine in standard algebraic +notation (SAN); for example, Nf3. If san=0, xboard will send moves in +coordinate notation; for example, g1f3. See MOVE in +section 8 above for more details of both kinds of notation. + + +
    +usermove (boolean, default 0) + +
    +If usermove=1, xboard will send moves to the engine with the +command "usermove MOVE"; if usermove=0, xboard will send just the move, +with no command name. + + +
    +time (boolean, default 1, recommended 1) + +
    +If time=1, xboard will send the "time" and "otim" commands to +update the engine's clocks; if time=0, it will not. + + +
    +draw (boolean, default 1, recommended 1) + +
    +If draw=1, xboard will send the "draw" command if the engine's opponent +offers a draw; if draw=0, xboard will not inform the engine about +draw offers. Note that if draw=1, you may receive a draw offer while you +are on move; if this will cause you to move immediately, you should set +draw=0. + + +
    +sigint (boolean, default 1) + +
    +If sigint=1, xboard may send SIGINT (the interrupt signal) to +the engine as section 7 above; if sigint=0, it will +not. + + +
    +sigterm (boolean, default 1) + +
    +If sigterm=1, xboard may send SIGTERM (the termination signal) to +the engine as section 7 above; if sigterm=0, it will +not. + + +
    +reuse (boolean, default 1, recommended 1) + +
    +If reuse=1, xboard may reuse your engine for multiple games. If +reuse=0 (or if the user has set the -xreuse option on xboard's command +line), xboard will kill the engine process after every game and start +a fresh process for the next game. + + +
    +analyze (boolean, default 1, recommended 1) + +
    +If analyze=0, xboard will not try to use the "analyze" command; it +will pop up an error message if the user asks for analysis mode. If +analyze=1, xboard will try to use the command if the user asks for +analysis mode. + + +
    +myname (string, default determined from engine filename) + +
    +This feature lets you set the name that xboard will use for your +engine in window banners, in the PGN tags of saved game files, and when +sending the "name" command to another engine. + + +
    +variants (string, see text below) + +
    +This feature indicates which chess variants your engine accepts. +It should be a comma-separated list of variant names. See the table +under the "variant" command in section 8 above. If +you do not set this feature, xboard will assume by default that your +engine supports all variants. (However, the -zippyVariants +command-line option still limits which variants will be accepted in +Zippy mode.) It is recommended that you set this feature to the +correct value for your engine (just "normal" in most cases) rather +than leaving the default in place, so that the user will get an +appropriate error message if he tries to play a variant that your +engine does not support. + + +
    +colors (boolean, default 1, recommended 0) + +
    +If colors=1, xboard uses the obsolete "white" and "black" +commands in a stylized way that works with most older chess engines +that require the commands. See the "Idioms" section +below for details. If colors=0, xboard does not use the "white" and +"black" commands at all. + + +
    +ics (boolean, default 0) + +
    +If ics=1, xboard will use the protocol's new "ics" command +to inform the engine of whether or not it is playing on a chess server; +if ics=0, it will not. + + +
    +name (boolean, see text below) + +
    +If name=1, xboard will use the protocol's "name" command +to inform the engine of the opponent's name; if name=0, it will not. +By default, name=1 if the engine is playing on a chess server; name=0 if not. + + +
    +pause (boolean, default 0) + +
    +If pause=1, xboard may use the protocol's new "pause" command; +if pause=0, xboard assumes that the engine does not support this command. + + +
    +done (integer, no default) + +
    +If you set done=1 during the initial two-second timeout after +xboard sends you the "xboard" command, the +timeout will end and xboard will not look for any more feature +commands before starting normal operation. +If you set done=0, the initial timeout is increased to one hour; +in this case, you must set done=1 before xboard will enter normal operation. + +
    +

    + +

    Illegal move: MOVE +
    Illegal move (REASON): MOVE +
    If your engine receives a MOVE command that is recognizably a move +but is not legal in the current position, your engine must print an +error message in one of the above formats so that xboard can pass the +error on to the user and retract the move. The (REASON) is entirely +optional. Examples: + +
    +  Illegal move: e2e4
    +  Illegal move (in check): Nf3
    +  Illegal move (moving into check): e1g1
    +
    +

    +Generally, xboard will never send an ambiguous move, so it does not +matter whether you respond to such a move with an Illegal move message +or an Error message. +

    + +
    Error (ERRORTYPE): COMMAND +
    If your engine receives a command it does not understand or does +not implement, it should print an error message in the above format so +that xboard can parse it. Examples: +
    +  Error (ambiguous move): Nf3
    +  Error (unknown command): analyze
    +  Error (command not legal now): undo
    +  Error (too many parameters): level 1 2 3 4 5 6 7
    +
    + +
    move MOVE +
    Your engine is making the move MOVE. Do not echo moves from +xboard with this command; send only new moves made by the engine. + + +

    For the actual move text from your chess engine (in place of MOVE +above), your move should be either +

      +
    • in coordinate notation (e.g., +e2e4, e7e8q) with castling indicated by the King's two-square move (e.g., +e1g1), or +
    • in Standard Algebraic Notation (SAN) as defined in the +Portable Game Notation standard (e.g, e4, Nf3, O-O, cxb5, Nxe4, e8=Q), +with the extension piece@square (e.g., P@f7) to handle piece placement +in bughouse and crazyhouse. +
    +xboard itself also accepts some variants of SAN, but for compatibility +with non-xboard interfaces, it is best not to rely on this behavior. +

    + +

    Warning: Even though all versions of this protocol specification +have indicated that xboard accepts SAN moves, some non-xboard +interfaces are known to accept only coordinate notation. See the +Idioms section for more information on the known limitations of some +non-xboard interfaces. It should be safe to send SAN moves if you +receive a "protover 2" (or later) command from the interface, but +otherwise it is best to stick to coordinate notation for maximum +compatibility. An even more conservative approach would be for your +engine to send SAN to the interface only if you have set feature san=1 +(which causes the interface to send SAN to you) and have received +"accepted san" in reply. +

    +
    + +
    RESULT {COMMENT}
    When your engine detects +that the game has ended by rule, your engine must output a line of the +form "RESULT {comment}" (without the quotes), where RESULT is a PGN +result code (1-0, 0-1, or 1/2-1/2), and comment is the reason. Here +"by rule" means that the game is definitely over because of what +happened on the board. In normal chess, this includes checkmate, +stalemate, triple repetition, the 50 move rule, or insufficient +material; it does not include loss on time or the like. +Examples: +
    +  0-1 {Black mates}
    +  1-0 {White mates}
    +  1/2-1/2 {Draw by repetition}
    +  1/2-1/2 {Stalemate}
    +
    + +

    +xboard relays the result to the user, the ICS, the other engine in Two +Machines mode, and the PGN save file as required. +

    + +
    resign +
    If your engine wants to resign, it can send the command "resign". +Alternatively, it can use the "RESULT {comment}" command if the string +"resign" is included in the comment; for example "0-1 {White +resigns}". xboard relays the resignation to the user, the ICS, the +other engine in Two Machines mode, and the PGN save file as required. +

    + +

    offer draw +
    If your engine wants to offer a draw by agreement (as opposed to +claiming a draw by rule), it can send the command "offer draw". +xboard relays the offer to the user, the ICS, the other engine in Two +Machines mode, and the PGN save file as required. In Machine White, +Machine Black, or Two Machines mode, the offer is considered valid +until your engine has made two more moves. +

    + +

    tellopponent MESSAGE +
    +This command lets the engine give a message to its opponent, +independent of whether the opponent is a user on the local machine or +a remote ICS user (Zippy mode). MESSAGE consists of any characters, +including whitespace, to the end of the line. When the engine is +playing against a user on the local machine, xboard pops up an +information dialog containing the message. When the engine is playing +against an opponent on the ICS (Zippy mode), xboard sends "say +MESSAGE\n" to the ICS. +

    + +

    tellothers MESSAGE +
    This command lets the engine give a message to people watching the +game other than the engine's opponent. MESSAGE consists of any +characters, including whitespace, to the end of the line. When the +engine is playing against a user on the local machine, this command +does nothing. When the engine is playing against an opponent on the +ICS (Zippy mode), xboard sends "whisper MESSAGE\n" to the ICS. +

    + +

    tellall MESSAGE +
    This command lets the engine give a message to its opponent and +other people watching the game, +independent of whether the opponent is a user on the local machine or +a remote ICS user (Zippy mode). MESSAGE consists of any characters, +including whitespace, to the end of the line. When the engine is +playing against a user on the local machine, xboard pops up an +information dialog containing the message. When the engine is playing +against an opponent on the ICS (Zippy mode), xboard sends "kibitz +MESSAGE\n" to the ICS. + +

    + +

    telluser MESSAGE +
    xboard pops up an information dialog containing the message. +MESSAGE consists of any characters, including whitespace, to the end +of the line. +

    + +

    tellusererror MESSAGE +
    xboard pops up an error dialog containing the message. +MESSAGE consists of any characters, including whitespace, to the end +of the line. +

    + +

    askuser REPTAG MESSAGE +
    Here REPTAG is a string containing no whitespace, and MESSAGE +consists of any characters, including whitespace, to the end of the +line. xboard pops up a question dialog that says MESSAGE and +has a typein box. If the user types in "bar", xboard sends "REPTAG +bar" to the engine. The user can cancel the dialog and send nothing. +

    + +

    tellics MESSAGE +
    In Zippy mode, xboard sends "MESSAGE\n" to ICS. MESSAGE consists +of any characters, including whitespace, to the end of the line. +

    + +

    tellicsnoalias MESSAGE +
    +In Zippy mode, xboard sends "xMESSAGE\n" to ICS, where "x" is a +character that prevents the ICS from expanding command aliases, if +xboard knows of such a character. (On chessclub.com and chess.net, +"/" is used; on freechess.org, "$" is used.) MESSAGE consists of any +characters, including whitespace, to the end of the line. + +
    +

    + +

    10. Thinking Output

    + +

    +If the user asks your engine to "show thinking", xboard sends your +engine the "post" command. It sends "nopost" to turn thinking off. +In post mode, your engine sends output lines to show the progress of +its thinking. The engine can send as many or few of these lines as it +wants to, whenever it wants to. Typically they would be sent when the +PV (principal variation) changes or the depth changes. The thinking +output should be in the following format: +

    + +
    ply score time nodes pv
    + +Where: + +
    plyInteger giving current search depth. +
    scoreInteger giving current evaluation in centipawns. +
    timeCurrent search time in centiseconds (ex: +1028 = 10.28 seconds). + +
    nodesNodes searched. +
    pvFreeform text giving current "best" line. +You can continue the pv onto another line if you start each +continuation line with at least four space characters. +
    + +

    +Example: +

    + +
      9 156 1084 48000 Nf3 Nc6 Nc3 Nf6
    + +

    +Meaning: +

    + +9 ply, score=1.56, time = 10.84 seconds, nodes=48000, +PV = "Nf3 Nc6 Nc3 Nf6" + +

    +Longer example from actual Crafty output: +

    +
    +  4    109      14   1435  1. e4 d5 2. Qf3 dxe4 3. Qxe4 Nc6
    +  4    116      23   2252  1. Nf3 Nc6 2. e4 e6
    +  4    116      27   2589  1. Nf3 Nc6 2. e4 e6
    +  5    141      44   4539  1. Nf3 Nc6 2. O-O e5 3. e4
    +  5    141      54   5568  1. Nf3 Nc6 2. O-O e5 3. e4
    +
    + +

    +You can use the PV to show other things; for instance, while in book, +Crafty shows the observed frequency of different reply moves in its +book. In situations like this where your engine is not really +searching, start the PV with a '(' character: +

    + +
    +  0      0       0      0  (e4 64%, d4 24%)
    +
    + +

    +GNU Chess output is very slightly different. The ply number is +followed by an extra nonblank character, and the time is in seconds, +not hundredths of seconds. For compatibility, xboard accepts the +extra character and takes it as a flag indicating the different time +units. Example: +

    + +
    + 2.     14    0       38   d1d2  e8e7 
    + 3+     78    0       65   d1d2  e8e7  d2d3 
    + 3&     14    0       89   d1d2  e8e7  d2d3 
    + 3&     76    0      191   d1e2  e8e7  e2e3 
    + 3.     76    0      215   d1e2  e8e7  e2e3 
    + 4&     15    0      366   d1e2  e8e7  e2e3  e7e6 
    + 4.     15    0      515   d1e2  e8e7  e2e3  e7e6 
    + 5+     74    0      702   d1e2  f7f5  e2e3  e8e7  e3f4 
    + 5&     71    0     1085   d1e2  e8e7  e2e3  e7e6  e3f4 
    + 5.     71    0     1669   d1e2  e8e7  e2e3  e7e6  e3f4 
    + 6&     48    0     3035   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
    + 6.     48    0     3720   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
    + 7&     48    0     6381   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
    + 7.     48    0    10056   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 
    + 8&     66    1    20536   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5 
    + 8.     66    1    24387   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5 
    + 9&     62    2    38886   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4 
    +                           d4e4 
    + 9.     62    4    72578   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4 
    +                           d4e4 
    +10&     34    7   135944   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4 
    +                           d4e4  f7f5  e4f4 
    +10.     34    9   173474   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4 
    +                           d4e4  f7f5  e4f4 
    +
    + +

    If your engine is pondering (thinking on its opponent's time) in post +mode, it can show its thinking then too. In this case your engine may +omit the hint move (the move it is assuming its opponent will make) +from the thinking lines if and only if it sends xboard the move in +the usual "Hint: xxx" format before sending the first line. +

    + +

    11. Time control

    + +

    +xboard supports three styles of time control: conventional chess clocks, +the ICS-style incremental clock, and an exact number of seconds per move. +

    + +

    In conventional clock mode, every time control period is the same. +That is, if the time control is 40 moves in 5 minutes, then after each +side has made 40 moves, they each get an additional 5 minutes, and so +on, ad infinitum. At some future time it would be nice to support a +series of distinct time controls. This is very low on my personal +priority list, but code donations to the xboard project are accepted, +so feel free to take a swing at it. I suggest you talk to me first, +though. +

    + +

    +The command to set a conventional time control looks like this: +

    + +
    +  level 40 5 0
    +  level 40 0:30 0
    +
    + +

    +The 40 means that there are 40 moves per time control. The 5 means +there are 5 minutes in the control. In the second example, the 0:30 +means there are 30 seconds. The final 0 means that we are in +conventional clock mode. +

    + +

    +The command to set an incremental time control looks like this: +

    + +
    +  level 0 2 12
    +
    + +

    +Here the 0 means "play the whole game in this time control period", +the 2 means "base=2 minutes", and the 12 means "inc=12 seconds". As +in conventional clock mode, the second argument to level can be in +minutes and seconds. +

    + +

    +At the start of the game, each player's clock is set to base minutes. +Immediately after a player makes a move, inc seconds are added to his +clock. A player's clock counts down while it is his turn. Your flag +can be called whenever your clock is zero or negative. (Your clock +can go negative and then become positive again because of the +increment.) +

    + +

    +A special rule on some ICS implementations: if you ask for a game with +base=0, the clocks really start at 10 seconds instead of 0. xboard +itself does not know about this rule, so it passes the 0 on to the +engine instead of changing it to 0:10. +

    + +

    +ICS also has time odds games. With time odds, each player has his own +(base, inc) pair, but otherwise things work the same as in normal +games. The Zippy xboard accepts time odds games but ignores the fact +that the opponent's parameters are different; this is perhaps not +quite the right thing to do, but gnuchess doesn't understand time +odds. Time odds games are always unrated. +

    + +

    +The command to set an exact number of seconds per move looks like this: +

    + +
    +  st 30
    +
    + +

    +This means that each move must be made in at most 30 seconds. Time not used +on one move does not accumulate for use on later moves. +

    + +

    12. Analyze Mode

    + +

    xboard supports analyzing fresh games, edited positions, and games +from files. However, all of these look the same from the chess +engine's perspective. Basically, the engine just has to respond to the +"analyze" command. + +Beginning in protocol version 2, +if your engine does not support analyze mode, it should use +the feature command to set analyze=0. + +The older method of +printing the error message "Error (unknown command): analyze" in +response to the "analyze" command will also work, however. +

    + +

    +To enter analyze mode, xboard sends the command sequence "post", "analyze". +Analyze mode in your engine should be +similar to force mode, except that your engine thinks about what move +it would make next if it were on move. Your engine should accept the +following commands while in analyze mode: +

    + +
      +
    • Any legal move, as in force mode +
    • undo   Back up one move and analyze previous position. +
    • new   Reset position to start of game but stay in analyze mode. +
    • setboard if you have set feature setboard=1; otherwise edit. Exiting edit mode returns to analyze mode. + +
    • exit   Leave analyze mode. +
    • .   Send a search status update (optional); see below. +
    • +bk   Show book moves from this position, +if any; see above. +
    • +hint   Show the predicted move from this +position, if any; see above. +
    + +

    +If the user selects "Periodic Updates", xboard will send the string +".\n" to the chess engine periodically during analyze mode, unless the +last PV received began with a '(' character. +

    + +

    +The chess engine should respond to ".\n" with a line like this: +

    + +
    +stat01: time nodes ply mvleft mvtot mvname
    +
    + +Where: + +
    timeElapsed search time in centiseconds (ie: 567 = 5.67 seconds). +
    nodesNodes searched so far. +
    plySearch depth so far. +
    mvleftNumber of moves left to consider at this depth. +
    mvtotTotal number of moves to consider. +
    mvname +Move currently being considered (SAN or coordinate notation). Optional; +added in protocol version 2. +
    + +

    +Examples: +

    +
    +  stat01: 1234 30000 7 5 30
    +  stat01: 1234 30000 7 5 30 Nf3
    +
    + +

    +Meaning: +

    + +

    After 12.34 seconds, I've searched 7 ply/30000 nodes, there are a + total of 30 legal moves, and I have 5 more moves to search + before going to depth 8. In the second example, of the 30 legal + moves, the one I am currently searching is Nf3.

    + +

    +Implementation of the "." command is optional. If the engine does not +respond to the "." command with a "stat01..." line, xboard will stop +sending "." commands. If the engine does not implement this command, +the analysis window will use a shortened format to display the engine +info. +

    + +

    +To give the user some extra information, the chess engine can output +the strings "++\n" and "--\n", to indicate that the current search is +failing high or low, respectively. You don't have to send anything +else to say "Okay, I'm not failing high/low anymore." xboard will +figure this out itself. +

    + +

    13. Idioms and backward compatibility features

    + +

    +Some engines have variant interpretations of the force/go/white/black, +time/otim, and hard/easy command sets. +In order to accommodate these older engines, xboard uses these commands +only according to the stylized patterns ("idioms") given in this section. +The obsolete white and black commands +have historically been particularly troublesome, and it is recommended +that new engines set the feature colors=0 and/or ignore the commands. +

    + +
    + +
    time N +
    otim N +
    MOVE +
    Sent when the opponent makes a move and the engine is already +playing the opposite color. +

    + +

    white +
    go +
    Sent when the engine is in force mode or playing Black but should +switch to playing White. This sequence is sent only when White is +already on move. + +If you set the feature colors=0, "white" is not sent. + +

    + +

    black +
    go +
    Sent when the engine is in force mode or playing White but should +switch to playing Black. This sequence is sent only when Black is +already on move. + +If you set the feature colors=0, "black" is not sent. + +

    + +

    white +
    time N +
    otim N +
    black +
    go +
    Sent when Black is on move, the engine is in force mode or playing +White, and the engine's clock needs to be updated before it starts +playing. +The initial "white" is a kludge to accommodate GNU Chess +4's variant interpretation of these commands. + +If you set the feature colors=0, "white" and "black" are not sent. + +

    + +

    black +
    time N +
    otim N +
    white +
    go +
    Sent when White is on move, the engine is in force mode or playing +Black, and the engine's clock needs to be updated before it starts +playing. See previous idiom. +The initial "black" is a kludge to accommodate GNU Chess +4's variant interpretation of these commands. + +If you set the feature colors=0, "black" and "white" are not sent. + +

    + +

    hard +
    easy +
    Sent in sequence to turn off pondering if xboard is not sure +whether it is on. When xboard is sure, it will send "hard" or "easy" +alone. xboard does this because "easy" is a toggle in GNU Chess 4 but +"hard" is an absolute on. + +
    + +

    +To support older engines, certain additional commands from the engine +to xboard are also recognized. (These are commands by themselves, not +values to be placed in the comment field of the PGN result code.) +These forms are not recommended for new engines; use the PGN result +code commands or the resign command instead. +

    + + +
    Command Interpreted as +
    White resigns 0-1 {White resigns} +
    Black resigns 1-0 {Black resigns} +
    White 1-0 {White mates} +
    Black 0-1 {Black mates} +
    Draw 1/2-1/2 {Draw} +
    computer mates 1-0 {White mates} or 0-1 {Black mates} +
    opponent mates 1-0 {White mates} or 0-1 {Black mates} +
    computer resigns 0-1 {White resigns} or 1-0 {Black resigns} +
    game is a draw 1/2-1/2 {Draw} +
    checkmate 1-0 {White mates} or 0-1 {Black mates} +
    + +

    +Commands in the above table are recognized if they begin a line and +arbitrary characters follow, so (for example) "White mates" will be +recognized as "White", and "game is a draw by the 50 move rule" will +be recognized as "game is a draw". All the commands are +case-sensitive. +

    + +

    +An alternative move syntax is also recognized: +

    + + +
    Command Interpreted as +
    NUMBER ... MOVE move MOVE +
    + +

    +Here NUMBER means any string of decimal digits, optionally ending in a +period. MOVE is any string containing no whitespace. In this command +format, xboard requires the "..." even if your engine is playing +White. A command of the form NUMBER MOVE will be ignored. This odd +treatment of the commands is needed for compatibility with gnuchessx. +The original reasons for it are lost in the mists of time, but I +suspect it was originally a bug in the earliest versions of xboard, +before I started working on it, which someone "fixed" in the wrong +way, by creating a special version of gnuchess (gnuchessx) instead of +changing xboard. +

    + +

    +Any line that contains the words "offer" and "draw" is recognized as +"offer draw". +

    + +

    +The "Illegal move" message is recognized even if spelled "illegal +move" and even if the colon (":") is omitted. This accommodates GNU +Chess 4, which prints messages like "Illegal move (no matching +move)e2e4", and old versions of Crafty, which print just "illegal move". +

    + +

    +In Zippy mode, for compatibility with older versions of Crafty, +xboard passes through to ICS any line that begins "kibitz", "whisper", +"tell", or "draw". Do not use this feature in new code. Instead, use the +commands "tellall", "tellothers", "tellopponent", "tellics" (if needed), +"1/2-1/2 {COMMENT}", or "offer draw", as appropriate. +

    + +

    + +If the engine responds to the "sd DEPTH" command with an error message +indicating the command is not supported (such as "Illegal move: sd"), +xboard sets an internal flag and subsequently uses the command +"depth\nDEPTH" instead, for the benefit of GNU Chess 4. Note the +newline in the middle of this command! New engines should not rely on +this feature. + +

    + +

    + +If the engine responds to the "st TIME" command with an error message +indicating the command is not supported (such as "Illegal move: st"), +xboard sets an internal flag and subsequently uses the command "level +1 TIME" instead, for the benefit of GNU Chess 4. Note that this is +not a standard use of the level command, as TIME seconds are not added +after each player makes 1 move; rather, each move is made in at most +TIME seconds. New engines should not implement or rely on this +feature. + +

    + + +

    +In support of the -firstHost/-secondHost features, which allow a chess +engine to be run on another machine using the rsh protocol, xboard recognizes +error messages that are likely to come from rsh as fatal errors. The following +messages are currently recognized: +

    + +
    +unknown host
    +No remote directory
    +not found
    +No such file
    +can't alloc
    +Permission denied
    +
    +
    + +

    + +ChessBase/Fritz now implements the xboard/winboard protocol and can use +WinBoard-compatible engines in its GUI. ChessBase's version of the +protocol is generally the same as version 1, except that they have +added the commands fritz, reset, and +ponder, and the edit subcommands +castle and ep. If you want your +engine to work well with the ChessBase/Fritz GUI, you may need to +implement these additional commands, and you should also be aware of +the peculiar way that ChessBase uses the protocol. See their web page for documentation. + +

    + +

    + +ChessMaster 8000 also implements version 1 of the xboard/winboard +protocol and can use WinBoard-compatible engines. The original +release of CM8000 also has one additional restriction: only pure +coordinate notation (e.g., e2e4) is accepted in the move command. A +patch to correct this should be available from The Learning Company +(makers of CM8000) in February 2001. + +

    + +
    +
    converted to HTML by Steffen A. Jakob
    + + diff --git a/doc/uci-engine-interface.txt b/doc/uci-engine-interface.txt new file mode 100644 index 0000000..7b6e697 --- /dev/null +++ b/doc/uci-engine-interface.txt @@ -0,0 +1,544 @@ + + +Description of the universal chess interface (UCI) April 2006 +================================================================= + +* The specification is independent of the operating system. For Windows, + the engine is a normal exe file, either a console or "real" windows application. + +* all communication is done via standard input and output with text commands, + +* The engine should boot and wait for input from the GUI, + the engine should wait for the "isready" or "setoption" command to set up its internal parameters + as the boot process should be as quick as possible. + +* the engine must always be able to process input from stdin, even while thinking. + +* all command strings the engine receives will end with '\n', + also all commands the GUI receives should end with '\n', + Note: '\n' can be 0x0d or 0x0a0d or any combination depending on your OS. + If you use Engine and GUI in the same OS this should be no problem if you communicate in text mode, + but be aware of this when for example running a Linux engine in a Windows GUI. + +* arbitrary white space between tokens is allowed + Example: "debug on\n" and " debug on \n" and "\t debug \t \t\ton\t \n" + all set the debug mode of the engine on. + +* The engine will always be in forced mode which means it should never start calculating + or pondering without receiving a "go" command first. + +* Before the engine is asked to search on a position, there will always be a position command + to tell the engine about the current position. + +* by default all the opening book handling is done by the GUI, + but there is an option for the engine to use its own book ("OwnBook" option, see below) + +* if the engine or the GUI receives an unknown command or token it should just ignore it and try to + parse the rest of the string in this line. + Examples: "joho debug on\n" should switch the debug mode on given that joho is not defined, + "debug joho on\n" will be undefined however. + +* if the engine receives a command which is not supposed to come, for example "stop" when the engine is + not calculating, it should also just ignore it. + + +Move format: +------------ + +The move format is in long algebraic notation. +A nullmove from the Engine to the GUI should be sent as 0000. +Examples: e2e4, e7e5, e1g1 (white short castling), e7e8q (for promotion) + + + +GUI to engine: +-------------- + +These are all the command the engine gets from the interface. + +* uci + tell engine to use the uci (universal chess interface), + this will be sent once as a first command after program boot + to tell the engine to switch to uci mode. + After receiving the uci command the engine must identify itself with the "id" command + and send the "option" commands to tell the GUI which engine settings the engine supports if any. + After that the engine should send "uciok" to acknowledge the uci mode. + If no uciok is sent within a certain time period, the engine task will be killed by the GUI. + +* debug [ on | off ] + switch the debug mode of the engine on and off. + In debug mode the engine should send additional infos to the GUI, e.g. with the "info string" command, + to help debugging, e.g. the commands that the engine has received etc. + This mode should be switched off by default and this command can be sent + any time, also when the engine is thinking. + +* isready + this is used to synchronize the engine with the GUI. When the GUI has sent a command or + multiple commands that can take some time to complete, + this command can be used to wait for the engine to be ready again or + to ping the engine to find out if it is still alive. + E.g. this should be sent after setting the path to the tablebases as this can take some time. + This command is also required once before the engine is asked to do any search + to wait for the engine to finish initializing. + This command must always be answered with "readyok" and can be sent also when the engine is calculating + in which case the engine should also immediately answer with "readyok" without stopping the search. + +* setoption name [value ] + this is sent to the engine when the user wants to change the internal parameters + of the engine. For the "button" type no value is needed. + One string will be sent for each parameter and this will only be sent when the engine is waiting. + The name and value of the option in should not be case sensitive and can inlude spaces. + The substrings "value" and "name" should be avoided in and to allow unambiguous parsing, + for example do not use = "draw value". + Here are some strings for the example below: + "setoption name Nullmove value true\n" + "setoption name Selectivity value 3\n" + "setoption name Style value Risky\n" + "setoption name Clear Hash\n" + "setoption name NalimovPath value c:\chess\tb\4;c:\chess\tb\5\n" + +* register + this is the command to try to register an engine or to tell the engine that registration + will be done later. This command should always be sent if the engine has sent "registration error" + at program startup. + The following tokens are allowed: + * later + the user doesn't want to register the engine now. + * name + the engine should be registered with the name + * code + the engine should be registered with the code + Example: + "register later" + "register name Stefan MK code 4359874324" + +* ucinewgame + this is sent to the engine when the next search (started with "position" and "go") will be from + a different game. This can be a new game the engine should play or a new game it should analyse but + also the next position from a testsuite with positions only. + If the GUI hasn't sent a "ucinewgame" before the first "position" command, the engine shouldn't + expect any further ucinewgame commands as the GUI is probably not supporting the ucinewgame command. + So the engine should not rely on this command even though all new GUIs should support it. + As the engine's reaction to "ucinewgame" can take some time the GUI should always send "isready" + after "ucinewgame" to wait for the engine to finish its operation. + +* position [fen | startpos ] moves .... + set up the position described in fenstring on the internal board and + play the moves on the internal chess board. + if the game was played from the start position the string "startpos" will be sent + Note: no "new" command is needed. However, if this position is from a different game than + the last position sent to the engine, the GUI should have sent a "ucinewgame" inbetween. + +* go + start calculating on the current position set up with the "position" command. + There are a number of commands that can follow this command, all will be sent in the same string. + If one command is not sent its value should be interpreted as it would not influence the search. + * searchmoves .... + restrict search to this moves only + Example: After "position startpos" and "go infinite searchmoves e2e4 d2d4" + the engine should only search the two moves e2e4 and d2d4 in the initial position. + * ponder + start searching in pondering mode. + Do not exit the search in ponder mode, even if it's mate! + This means that the last move sent in in the position string is the ponder move. + The engine can do what it wants to do, but after a "ponderhit" command + it should execute the suggested move to ponder on. This means that the ponder move sent by + the GUI can be interpreted as a recommendation about which move to ponder. However, if the + engine decides to ponder on a different move, it should not display any mainlines as they are + likely to be misinterpreted by the GUI because the GUI expects the engine to ponder + on the suggested move. + * wtime + white has x msec left on the clock + * btime + black has x msec left on the clock + * winc + white increment per move in mseconds if x > 0 + * binc + black increment per move in mseconds if x > 0 + * movestogo + there are x moves to the next time control, + this will only be sent if x > 0, + if you don't get this and get the wtime and btime it's sudden death + * depth + search x plies only. + * nodes + search x nodes only, + * mate + search for a mate in x moves + * movetime + search exactly x mseconds + * infinite + search until the "stop" command. Do not exit the search without being told so in this mode! + +* stop + stop calculating as soon as possible, + don't forget the "bestmove" and possibly the "ponder" token when finishing the search + +* ponderhit + the user has played the expected move. This will be sent if the engine was told to ponder on the same move + the user has played. The engine should continue searching but switch from pondering to normal search. + +* quit + quit the program as soon as possible + + +Engine to GUI: +-------------- + +* id + * name + this must be sent after receiving the "uci" command to identify the engine, + e.g. "id name Shredder X.Y\n" + * author + this must be sent after receiving the "uci" command to identify the engine, + e.g. "id author Stefan MK\n" + +* uciok + Must be sent after the id and optional options to tell the GUI that the engine + has sent all infos and is ready in uci mode. + +* readyok + This must be sent when the engine has received an "isready" command and has + processed all input and is ready to accept new commands now. + It is usually sent after a command that can take some time to be able to wait for the engine, + but it can be used anytime, even when the engine is searching, + and must always be answered with "isready". + +* bestmove [ ponder ] + the engine has stopped searching and found the move best in this position. + the engine can send the move it likes to ponder on. The engine must not start pondering automatically. + this command must always be sent if the engine stops searching, also in pondering mode if there is a + "stop" command, so for every "go" command a "bestmove" command is needed! + Directly before that the engine should send a final "info" command with the final search information, + the the GUI has the complete statistics about the last search. + +* copyprotection + this is needed for copyprotected engines. After the uciok command the engine can tell the GUI, + that it will check the copy protection now. This is done by "copyprotection checking". + If the check is ok the engine should send "copyprotection ok", otherwise "copyprotection error". + If there is an error the engine should not function properly but should not quit alone. + If the engine reports "copyprotection error" the GUI should not use this engine + and display an error message instead! + The code in the engine can look like this + TellGUI("copyprotection checking\n"); + // ... check the copy protection here ... + if(ok) + TellGUI("copyprotection ok\n"); + else + TellGUI("copyprotection error\n"); + +* registration + this is needed for engines that need a username and/or a code to function with all features. + Analog to the "copyprotection" command the engine can send "registration checking" + after the uciok command followed by either "registration ok" or "registration error". + Also after every attempt to register the engine it should answer with "registration checking" + and then either "registration ok" or "registration error". + In contrast to the "copyprotection" command, the GUI can use the engine after the engine has + reported an error, but should inform the user that the engine is not properly registered + and might not use all its features. + In addition the GUI should offer to open a dialog to + enable registration of the engine. To try to register an engine the GUI can send + the "register" command. + The GUI has to always answer with the "register" command if the engine sends "registration error" + at engine startup (this can also be done with "register later") + and tell the user somehow that the engine is not registered. + This way the engine knows that the GUI can deal with the registration procedure and the user + will be informed that the engine is not properly registered. + +* info + the engine wants to send information to the GUI. This should be done whenever one of the info has changed. + The engine can send only selected infos or multiple infos with one info command, + e.g. "info currmove e2e4 currmovenumber 1" or + "info depth 12 nodes 123456 nps 100000". + Also all infos belonging to the pv should be sent together + e.g. "info depth 2 score cp 214 time 1242 nodes 2124 nps 34928 pv e2e4 e7e5 g1f3" + I suggest to start sending "currmove", "currmovenumber", "currline" and "refutation" only after one second + to avoid too much traffic. + Additional info: + * depth + search depth in plies + * seldepth + selective search depth in plies, + if the engine sends seldepth there must also be a "depth" present in the same string. + * time + the time searched in ms, this should be sent together with the pv. + * nodes + x nodes searched, the engine should send this info regularly + * pv ... + the best line found + * multipv + this for the multi pv mode. + for the best move/pv add "multipv 1" in the string when you send the pv. + in k-best mode always send all k variants in k strings together. + * score + * cp + the score from the engine's point of view in centipawns. + * mate + mate in y moves, not plies. + If the engine is getting mated use negative values for y. + * lowerbound + the score is just a lower bound. + * upperbound + the score is just an upper bound. + * currmove + currently searching this move + * currmovenumber + currently searching move number x, for the first move x should be 1 not 0. + * hashfull + the hash is x permill full, the engine should send this info regularly + * nps + x nodes per second searched, the engine should send this info regularly + * tbhits + x positions where found in the endgame table bases + * sbhits + x positions where found in the shredder endgame databases + * cpuload + the cpu usage of the engine is x permill. + * string + any string str which will be displayed be the engine, + if there is a string command the rest of the line will be interpreted as . + * refutation ... + move is refuted by the line ... , i can be any number >= 1. + Example: after move d1h5 is searched, the engine can send + "info refutation d1h5 g6h5" + if g6h5 is the best answer after d1h5 or if g6h5 refutes the move d1h5. + if there is no refutation for d1h5 found, the engine should just send + "info refutation d1h5" + The engine should only send this if the option "UCI_ShowRefutations" is set to true. + * currline ... + this is the current line the engine is calculating. is the number of the cpu if + the engine is running on more than one cpu. = 1,2,3.... + if the engine is just using one cpu, can be omitted. + If is greater than 1, always send all k lines in k strings together. + The engine should only send this if the option "UCI_ShowCurrLine" is set to true. + + +* option + This command tells the GUI which parameters can be changed in the engine. + This should be sent once at engine startup after the "uci" and the "id" commands + if any parameter can be changed in the engine. + The GUI should parse this and build a dialog for the user to change the settings. + Note that not every option needs to appear in this dialog as some options like + "Ponder", "UCI_AnalyseMode", etc. are better handled elsewhere or are set automatically. + If the user wants to change some settings, the GUI will send a "setoption" command to the engine. + Note that the GUI need not send the setoption command when starting the engine for every option if + it doesn't want to change the default value. + For all allowed combinations see the examples below, + as some combinations of this tokens don't make sense. + One string will be sent for each parameter. + * name + The option has the name id. + Certain options have a fixed value for , which means that the semantics of this option is fixed. + Usually those options should not be displayed in the normal engine options window of the GUI but + get a special treatment. "Pondering" for example should be set automatically when pondering is + enabled or disabled in the GUI options. The same for "UCI_AnalyseMode" which should also be set + automatically by the GUI. All those certain options have the prefix "UCI_" except for the + first 6 options below. If the GUI gets an unknown Option with the prefix "UCI_", it should just + ignore it and not display it in the engine's options dialog. + * = Hash, type is spin + the value in MB for memory for hash tables can be changed, + this should be answered with the first "setoptions" command at program boot + if the engine has sent the appropriate "option name Hash" command, + which should be supported by all engines! + So the engine should use a very small hash first as default. + * = NalimovPath, type string + this is the path on the hard disk to the Nalimov compressed format. + Multiple directories can be concatenated with ";" + * = NalimovCache, type spin + this is the size in MB for the cache for the nalimov table bases + These last two options should also be present in the initial options exchange dialog + when the engine is booted if the engine supports it + * = Ponder, type check + this means that the engine is able to ponder. + The GUI will send this whenever pondering is possible or not. + Note: The engine should not start pondering on its own if this is enabled, this option is only + needed because the engine might change its time management algorithm when pondering is allowed. + * = OwnBook, type check + this means that the engine has its own book which is accessed by the engine itself. + if this is set, the engine takes care of the opening book and the GUI will never + execute a move out of its book for the engine. If this is set to false by the GUI, + the engine should not access its own book. + * = MultiPV, type spin + the engine supports multi best line or k-best mode. the default value is 1 + * = UCI_ShowCurrLine, type check, should be false by default, + the engine can show the current line it is calculating. see "info currline" above. + * = UCI_ShowRefutations, type check, should be false by default, + the engine can show a move and its refutation in a line. see "info refutations" above. + * = UCI_LimitStrength, type check, should be false by default, + The engine is able to limit its strength to a specific Elo number, + This should always be implemented together with "UCI_Elo". + * = UCI_Elo, type spin + The engine can limit its strength in Elo within this interval. + If UCI_LimitStrength is set to false, this value should be ignored. + If UCI_LimitStrength is set to true, the engine should play with this specific strength. + This should always be implemented together with "UCI_LimitStrength". + * = UCI_AnalyseMode, type check + The engine wants to behave differently when analysing or playing a game. + For example when playing it can use some kind of learning. + This is set to false if the engine is playing a game, otherwise it is true. + * = UCI_Opponent, type string + With this command the GUI can send the name, title, elo and if the engine is playing a human + or computer to the engine. + The format of the string has to be [GM|IM|FM|WGM|WIM|none] [|none] [computer|human] + Examples: + "setoption name UCI_Opponent value GM 2800 human Gary Kasparov" + "setoption name UCI_Opponent value none none computer Shredder" + * = UCI_EngineAbout, type string + With this command, the engine tells the GUI information about itself, for example a license text, + usually it doesn't make sense that the GUI changes this text with the setoption command. + Example: + "option name UCI_EngineAbout type string default Shredder by Stefan Meyer-Kahlen, see www.shredderchess.com" + * = UCI_ShredderbasesPath, type string + this is either the path to the folder on the hard disk containing the Shredder endgame databases or + the path and filename of one Shredder endgame datbase. + * = UCI_SetPositionValue, type string + the GUI can send this to the engine to tell the engine to use a certain value in centipawns from white's + point of view if evaluating this specifix position. + The string can have the formats: + + | clear + | clearall + + * type + The option has type t. + There are 5 different types of options the engine can send + * check + a checkbox that can either be true or false + * spin + a spin wheel that can be an integer in a certain range + * combo + a combo box that can have different predefined strings as a value + * button + a button that can be pressed to send a command to the engine + * string + a text field that has a string as a value, + an empty string has the value "" + * default + the default value of this parameter is x + * min + the minimum value of this parameter is x + * max + the maximum value of this parameter is x + * var + a predefined value of this parameter is x + Examples: + Here are 5 strings for each of the 5 possible types of options + "option name Nullmove type check default true\n" + "option name Selectivity type spin default 2 min 0 max 4\n" + "option name Style type combo default Normal var Solid var Normal var Risky\n" + "option name NalimovPath type string default c:\\n" + "option name Clear Hash type button\n" + + + +Examples: +--------- + +This is how the communication when the engine boots can look like: + +GUI engine + +// tell the engine to switch to UCI mode +uci + +// engine identify + id name Shredder + id author Stefan MK + +// engine sends the options it can change +// the engine can change the hash size from 1 to 128 MB + option name Hash type spin default 1 min 1 max 128 + +// the engine supports Nalimov endgame tablebases + option name NalimovPath type string default + option name NalimovCache type spin default 1 min 1 max 32 + +// the engine can switch off Nullmove and set the playing style + option name Nullmove type check default true + option name Style type combo default Normal var Solid var Normal var Risky + +// the engine has sent all parameters and is ready + uciok + +// Note: here the GUI can already send a "quit" command if it just wants to find out +// details about the engine, so the engine should not initialize its internal +// parameters before here. +// now the GUI sets some values in the engine +// set hash to 32 MB +setoption name Hash value 32 + +// init tbs +setoption name NalimovCache value 1 +setoption name NalimovPath value d:\tb;c\tb + +// waiting for the engine to finish initializing +// this command and the answer is required here! +isready + +// engine has finished setting up the internal values + readyok + +// now we are ready to go + +// if the GUI is supporting it, tell the engine that is is +// searching on a game that it hasn't searched on before +ucinewgame + +// if the engine supports the "UCI_AnalyseMode" option and the next search is supposed to +// be an analysis, the GUI should set "UCI_AnalyseMode" to true if it is currently +// set to false with this engine +setoption name UCI_AnalyseMode value true + +// tell the engine to search infinite from the start position after 1.e4 e5 +position startpos moves e2e4 e7e5 +go infinite + +// the engine starts sending infos about the search to the GUI +// (only some examples are given) + + + info depth 1 seldepth 0 + info score cp 13 depth 1 nodes 13 time 15 pv f1b5 + info depth 2 seldepth 2 + info nps 15937 + info score cp 14 depth 2 nodes 255 time 15 pv f1c4 f8c5 + info depth 2 seldepth 7 nodes 255 + info depth 3 seldepth 7 + info nps 26437 + info score cp 20 depth 3 nodes 423 time 15 pv f1c4 g8f6 b1c3 + info nps 41562 + .... + + +// here the user has seen enough and asks to stop the searching +stop + +// the engine has finished searching and is sending the bestmove command +// which is needed for every "go" command sent to tell the GUI +// that the engine is ready again + bestmove g1f3 ponder d8f6 + + + +Chess960 +======== + +UCI could easily be extended to support Chess960 (also known as Fischer Random Chess). + +The engine has to tell the GUI that it is capable of playing Chess960 and the GUI has to tell +the engine that is should play according to the Chess960 rules. +This is done by the special engine option UCI_Chess960. If the engine knows about Chess960 +it should send the command 'option name UCI_Chess960 type check default false' +to the GUI at program startup. +Whenever a Chess960 game is played, the GUI should set this engine option to 'true'. + +Castling is different in Chess960 and the white king move when castling short is not always e1g1. +A king move could both be the castling king move or just a normal king move. +This is why castling moves are sent in the form king "takes" his own rook. +Example: e1h1 for the white short castle move in the normal chess start position. + +In EPD and FEN position strings specifying the castle rights with w and q is not enough as +there could be more than one rook on the right or left side of the king. +This is why the castle rights are specified with the letter of the castle rook's line. +Upper case letters for white's and lower case letters for black's castling rights. +Example: The normal chess position would be: +rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w AHah - + diff --git a/doc/xboard-ics-parsing.txt b/doc/xboard-ics-parsing.txt new file mode 100644 index 0000000..41e22fc --- /dev/null +++ b/doc/xboard-ics-parsing.txt @@ -0,0 +1,161 @@ +Parsing of ICS Output +Updated to match xboard/WinBoard 4.0.2 +$Id: ics-parsing.txt,v 2.1 2003/10/27 19:21:00 mann Exp $ +============================================================================== + +This document describes how xboard and WinBoard parse ICS output. The +general parsing method is to compare a list of patterns against the +current line (whether partial or complete) each time new input is +received from ICS. The patterns are considered in a fixed order. The +pattern matching is not "anchored", so unmatched text at the beginning +of a line (including the prompt, usually) is skipped. Whenever a +pattern is matched, the characters are "consumed" and matching begins +again with the next unmatched character, starting at the top of the +list. The last pattern is "\n", causing characters up to a newline to +be discarded if they have not matched any patterns. The pattern +language is very simple. Every character but "*" must match +literally. "*" matches zero or more characters that don't include a +newline and don't match the character immediately following the *, if +any. A "*" at the end of a pattern will not match until a complete +line is received + +This method of pattern matching is rather fragile. The patterns have +to be chosen quite carefully to avoid unexpected results. For +example, at one time "* shouts: *" was used to match shouts, while +"<12>" was used to match the start of a board. If someone shouted +"<12>", xboard would succeed in ignoring the <12> only if all the +characters from the ">" to the next newline were received at one time, +so that the shout pattern could match before the start-of-board +pattern was considered. (This usually happens on TCP connections, but +is not guaranteed.) + +The patterns intentionally allow text in finger notes to be parsed and +colorized as tells, shouts, etc. I did this because Zek once said +that ZIICS users like this feature, even though he originally +considered it a bug in ZIICS, and so he doesn't dare change it. I may +eventually change it anyway so that people stop reporting it as a bug. + +Here is the complete list of patterns that xboard looks for, in order. +The list was obtained by grepping the source code for "looking_at", my +procedure for pattern-matching. Some of these are specific to FICS, +some to ICC, and some may be outdated---that is, they may reflect +messages that no ICS produces anymore. Occasionally the same pattern +appears more than once because earlier occurrences were inside +if/then/else statements. There may also be a couple of places where I +do a test without calling looking_at. + +zippy.c (runs first if Zippy is active, otherwise skipped): +"* kibitzes: Hello from Crafty" +"* is in the computer list." +"* * is a computer *" +"* offers to be your bughouse partner" +"* tells you: [automatic message] I chose you" +"* agrees to be your partner" +"are no longer *'s partner" +"no longer have a bughouse partner" +"partner has disconnected" +"partner has just chosen a new partner" +"* tells you: [automatic message] I'm no longer your" +"* (your partner) tells you: *" +"* tells you: *" +"* says: *" +"--> * *" +"* shouts: *" +"* kibitzes: *" +"* whispers: *" +"You have * message*." +"* has left a message for you." +"* just sent you a message." +"--* (*:*): *" +"*. * (*:*): *" +"*. * at *:*: *" +"*(*): *" +"*(*)(*): *" +"Notification: * has arrived" +"Not sent -- * is censoring you" +"command is currently turned off" +"* * match * * requested with * (*)" +"* * match * requested with * (*)" +* has made an alternate proposal of * * match * *." +"Challenge: * (*) *(*) * * * * Loaded from *" +"Challenge: * (*) *(*) * * * * : * * Loaded from *" +"Challenge: * (*) *(*) * * * * : * *" +"Challenge: * (*) *(*) * * * * * *" +"Challenge: * (*) *(*) * * * *" +"offers you a draw" +"requests that the game be aborted" +"would like to abort" +"requests adjournment" +"would like to adjourn" + +backend.c: +"ics%" /* right after login only; nonessential */ +"chessclub.com" /* before login; turns on ICC mode */ +"\"*\" is *a registered name" +"Logging you in as \"*\"" +"Your name will be \"*\"" +"* s-shouts: " +"* c-shouts: " +"--->" /* seen in FICS login, not a shout */ +"* shouts: " +"--> " +"* tells you: " +"* (your partner) tells you: " +"* says: " +"* has left a message " +"* just sent you a message:\n" +"*. * (*:*): " +"*. * at *:*: " +"* whispers: " +"* kibitzes: " +"*)(*): *" /* channel tell or allobs or admin comment */ +"*(*): *" /* channel tell or allobs or admin comment */ +"*)(*)(*): *" /* channel tell */ +"Challenge:" +"* offers you" +"* offers to be" +"* would like to" +"* requests to" +"Your opponent offers" +"Your opponent requests" +"\\ " /* continuation line */ +"Black Strength :" /* need to issue "style 12; refresh" */ +"<<< style 10 board >>>" /* need to issue "style 12; refresh" */ +"<10>" /* need to issue "style 12; refresh" */ +"#@#" /* need to issue "style 12; refresh" */ +"login:" +"\n<12> " +"<12> " +"\n " +" " +"* *vs. * *--- *" /* move list coming */ +"* * match, initial time: * minute*, increment: * second" +"Move " /* move list is here */ +"% " /* end of prompt; nonessential */ +"}*" /* ends a move list */ +"Adding game * to observation list" +"Game notification: * (*) vs. * (*)" +"Entering examine mode for game *" +"has made you an examiner of game *" +"Illegal move" +"Not a legal move" +"Your king is in check" +"It isn't your turn" +"It is not your move" +"still have time" +"not out of time" +"either player is out of time" +"has timeseal; checking" +"added * seconds to" +"seconds were added to" +"clock paused" +"clock resumed" +"Creating: * (*)* * (*)" +"Creating: * (*) [*] * (*)" +"{Game * (* vs. *) *}*" +"Removing game * from observation" +"no longer observing game *" +"Game * (*) has no examiners" +"no longer examining game *" +"\n" +"*% " /* end of prompt; nonessential */ diff --git a/extract-messages.sh b/extract-messages.sh new file mode 100755 index 0000000..13e74f2 --- /dev/null +++ b/extract-messages.sh @@ -0,0 +1,49 @@ +#!/bin/sh +WDIR=`pwd` +BASEDIR=$1 +[ $BASEDIR ] || BASEDIR=$WDIR # root of translatable sources +SRCDIR=$BASEDIR/src +PROJECT="tagua" # project name +BUGADDR="http://trac.tagua-project.org" + +echo "Preparing rc files" +cd ${SRCDIR} +# we use simple sorting to make sure the lines do not jump around too much from system to system +find . -name '*.rc' -o -name '*.ui' -o -name '*.kcfg' | sort > ${WDIR}/rcfiles.list +xargs --arg-file=${WDIR}/rcfiles.list extractrc > ${WDIR}/extractedrc.cpp +# additional string for KAboutData +echo 'i18nc("NAME OF TRANSLATORS","Your names");' >> ${WDIR}/extractedrc.cpp +echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/extractedrc.cpp +cd ${WDIR} +echo "Done preparing rc files" + + +echo "Extracting messages" +cd ${SRCDIR} +# see above on sorting +find . -name '*.cpp' -o -name '*.h' -o -name '*.c' | sort > ${WDIR}/infiles.list +echo "extractedrc.cpp" >> ${WDIR}/infiles.list +cd ${WDIR} +xgettext --from-code=UTF-8 -C -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ + -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ + --msgid-bugs-address="${BUGADDR}" \ + --files-from=infiles.list -D ${SRCDIR} -D ${WDIR} -o ${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } +echo "Done extracting messages" + + +echo "Merging translations" +catalogs=`find translations -name '*.po'` +for cat in $catalogs; do + echo $cat + msgmerge -o $cat.new $cat ${PROJECT}.pot + mv $cat.new $cat +done +echo "Done merging translations" + + +echo "Cleaning up" +cd ${WDIR} +rm rcfiles.list +rm infiles.list +rm extractedrc.cpp +echo "Done" diff --git a/fix_copyright.rb b/fix_copyright.rb new file mode 100755 index 0000000..d6872cc --- /dev/null +++ b/fix_copyright.rb @@ -0,0 +1,26 @@ +#!/usr/bin/ruby + +require 'find' + +stmt = %{/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +} + + +Find.find('.') do |filename| + if filename =~ /\.(cpp|h)$/ + code = File.open(filename) {|f| f.read} + unless code =~ /copyright/i + File.open(filename, 'w') {|f| f.write(stmt + code)} + end + end +end + diff --git a/lua/.gitignore b/lua/.gitignore new file mode 100644 index 0000000..a1a869c --- /dev/null +++ b/lua/.gitignore @@ -0,0 +1 @@ +include diff --git a/lua/CMakeLists.txt b/lua/CMakeLists.txt new file mode 100644 index 0000000..24ba8a5 --- /dev/null +++ b/lua/CMakeLists.txt @@ -0,0 +1,90 @@ + +SET(LUA_SRC + src/lapi.c + src/lcode.c + src/ldebug.c + src/ldo.c + src/ldump.c + src/lfunc.c + src/lgc.c + src/llex.c + src/lmem.c + src/lobject.c + src/lopcodes.c + src/lparser.c + src/lstate.c + src/lstring.c + src/ltable.c + src/ltm.c + src/lundump.c + src/lvm.c + src/lzio.c + src/lauxlib.c + src/lbaselib.c + src/ldblib.c + src/liolib.c + src/lmathlib.c + src/loslib.c + src/ltablib.c + src/lstrlib.c + src/loadlib.c + src/linit.c + src/lapi.h + src/lauxlib.h + src/lcode.h + src/ldebug.h + src/ldo.h + src/lfunc.h + src/lgc.h + src/llex.h + src/llimits.h + src/lmem.h + src/lobject.h + src/lopcodes.h + src/lparser.h + src/lstate.h + src/lstring.h + src/ltable.h + src/ltm.h + src/luaconf.h + src/lua.h + src/lualib.h + src/lundump.h + src/lvm.h + src/lzio.h +) + +SET(LUA_HEADERS + src/lua.h + src/luaconf.h + src/lualib.h + src/lauxlib.h + etc/lua.hpp +) + +FILE(MAKE_DIRECTORY include) +FOREACH(HEADER ${LUA_HEADERS}) + GET_FILENAME_COMPONENT(H ${HEADER} NAME) + CONFIGURE_FILE(${HEADER} "${LUA_INCLUDE_DIRS}/${H}" COPYONLY) +ENDFOREACH(HEADER) + + +IF("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + ADD_DEFINITIONS(-DLUA_USE_LINUX) + MESSAGE("* Looks like you're using Linux, lua will be compiled with") + MESSAGE(" CFlags: -DLUA_USE_LINUX") +ELSE("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + IF(UNIX) + MESSAGE("* Looks like you're some Unix, lua will be compiled with") + MESSAGE(" CFlags: -DLUA_USE_POSIX -DLUA_USE_DLOPEN") + MESSAGE(" I hope this is not too optimistic for your system") + ADD_DEFINITIONS(-DLUA_USE_POSIX -DLUA_USE_DLOPEN) + ELSE(UNIX) + MESSAGE("* Could not recognise you system, lua will be compiled with generic options") + ENDIF(UNIX) +ENDIF("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + +# -DLUA_USE_APICHECK is mandatory for debugging! +set(CMAKE_C_FLAGS_DEBUGFULL "${CMAKE_C_FLAGS_DEBUGFULL} -DLUA_USE_APICHECK") + +ADD_LIBRARY(lua STATIC ${LUA_SRC}) diff --git a/lua/COPYRIGHT b/lua/COPYRIGHT new file mode 100644 index 0000000..a54a16e --- /dev/null +++ b/lua/COPYRIGHT @@ -0,0 +1,34 @@ +Lua License +----------- + +Lua is licensed under the terms of the MIT license reproduced below. +This means that Lua is free software and can be used for both academic +and commercial purposes at absolutely no cost. + +For details and rationale, see http://www.lua.org/license.html . + +=============================================================================== + +Copyright (C) 1994-2007 Lua.org, PUC-Rio. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=============================================================================== + +(end of COPYRIGHT) diff --git a/lua/HISTORY b/lua/HISTORY new file mode 100644 index 0000000..ce0c95b --- /dev/null +++ b/lua/HISTORY @@ -0,0 +1,183 @@ +HISTORY for Lua 5.1 + +* Changes from version 5.0 to 5.1 + ------------------------------- + Language: + + new module system. + + new semantics for control variables of fors. + + new semantics for setn/getn. + + new syntax/semantics for varargs. + + new long strings and comments. + + new `mod' operator (`%') + + new length operator #t + + metatables for all types + API: + + new functions: lua_createtable, lua_get(set)field, lua_push(to)integer. + + user supplies memory allocator (lua_open becomes lua_newstate). + + luaopen_* functions must be called through Lua. + Implementation: + + new configuration scheme via luaconf.h. + + incremental garbage collection. + + better handling of end-of-line in the lexer. + + fully reentrant parser (new Lua function `load') + + better support for 64-bit machines. + + native loadlib support for Mac OS X. + + standard distribution in only one library (lualib.a merged into lua.a) + +* Changes from version 4.0 to 5.0 + ------------------------------- + Language: + + lexical scoping. + + Lua coroutines. + + standard libraries now packaged in tables. + + tags replaced by metatables and tag methods replaced by metamethods, + stored in metatables. + + proper tail calls. + + each function can have its own global table, which can be shared. + + new __newindex metamethod, called when we insert a new key into a table. + + new block comments: --[[ ... ]]. + + new generic for. + + new weak tables. + + new boolean type. + + new syntax "local function". + + (f()) returns the first value returned by f. + + {f()} fills a table with all values returned by f. + + \n ignored in [[\n . + + fixed and-or priorities. + + more general syntax for function definition (e.g. function a.x.y:f()...end). + + more general syntax for function calls (e.g. (print or write)(9)). + + new functions (time/date, tmpfile, unpack, require, load*, etc.). + API: + + chunks are loaded by using lua_load; new luaL_loadfile and luaL_loadbuffer. + + introduced lightweight userdata, a simple "void*" without a metatable. + + new error handling protocol: the core no longer prints error messages; + all errors are reported to the caller on the stack. + + new lua_atpanic for host cleanup. + + new, signal-safe, hook scheme. + Implementation: + + new license: MIT. + + new, faster, register-based virtual machine. + + support for external multithreading and coroutines. + + new and consistent error message format. + + the core no longer needs "stdio.h" for anything (except for a single + use of sprintf to convert numbers to strings). + + lua.c now runs the environment variable LUA_INIT, if present. It can + be "@filename", to run a file, or the chunk itself. + + support for user extensions in lua.c. + sample implementation given for command line editing. + + new dynamic loading library, active by default on several platforms. + + safe garbage-collector metamethods. + + precompiled bytecodes checked for integrity (secure binary dostring). + + strings are fully aligned. + + position capture in string.find. + + read('*l') can read lines with embedded zeros. + +* Changes from version 3.2 to 4.0 + ------------------------------- + Language: + + new "break" and "for" statements (both numerical and for tables). + + uniform treatment of globals: globals are now stored in a Lua table. + + improved error messages. + + no more '$debug': full speed *and* full debug information. + + new read form: read(N) for next N bytes. + + general read patterns now deprecated. + (still available with -DCOMPAT_READPATTERNS.) + + all return values are passed as arguments for the last function + (old semantics still available with -DLUA_COMPAT_ARGRET) + + garbage collection tag methods for tables now deprecated. + + there is now only one tag method for order. + API: + + New API: fully re-entrant, simpler, and more efficient. + + New debug API. + Implementation: + + faster than ever: cleaner virtual machine and new hashing algorithm. + + non-recursive garbage-collector algorithm. + + reduced memory usage for programs with many strings. + + improved treatment for memory allocation errors. + + improved support for 16-bit machines (we hope). + + code now compiles unmodified as both ANSI C and C++. + + numbers in bases other than 10 are converted using strtoul. + + new -f option in Lua to support #! scripts. + + luac can now combine text and binaries. + +* Changes from version 3.1 to 3.2 + ------------------------------- + + redirected all output in Lua's core to _ERRORMESSAGE and _ALERT. + + increased limit on the number of constants and globals per function + (from 2^16 to 2^24). + + debugging info (lua_debug and hooks) moved into lua_state and new API + functions provided to get and set this info. + + new debug lib gives full debugging access within Lua. + + new table functions "foreachi", "sort", "tinsert", "tremove", "getn". + + new io functions "flush", "seek". + +* Changes from version 3.0 to 3.1 + ------------------------------- + + NEW FEATURE: anonymous functions with closures (via "upvalues"). + + new syntax: + - local variables in chunks. + - better scope control with DO block END. + - constructors can now be also written: { record-part; list-part }. + - more general syntax for function calls and lvalues, e.g.: + f(x).y=1 + o:f(x,y):g(z) + f"string" is sugar for f("string") + + strings may now contain arbitrary binary data (e.g., embedded zeros). + + major code re-organization and clean-up; reduced module interdependecies. + + no arbitrary limits on the total number of constants and globals. + + support for multiple global contexts. + + better syntax error messages. + + new traversal functions "foreach" and "foreachvar". + + the default for numbers is now double. + changing it to use floats or longs is easy. + + complete debug information stored in pre-compiled chunks. + + sample interpreter now prompts user when run interactively, and also + handles control-C interruptions gracefully. + +* Changes from version 2.5 to 3.0 + ------------------------------- + + NEW CONCEPT: "tag methods". + Tag methods replace fallbacks as the meta-mechanism for extending the + semantics of Lua. Whereas fallbacks had a global nature, tag methods + work on objects having the same tag (e.g., groups of tables). + Existing code that uses fallbacks should work without change. + + new, general syntax for constructors {[exp] = exp, ... }. + + support for handling variable number of arguments in functions (varargs). + + support for conditional compilation ($if ... $else ... $end). + + cleaner semantics in API simplifies host code. + + better support for writing libraries (auxlib.h). + + better type checking and error messages in the standard library. + + luac can now also undump. + +* Changes from version 2.4 to 2.5 + ------------------------------- + + io and string libraries are now based on pattern matching; + the old libraries are still available for compatibility + + dofile and dostring can now return values (via return statement) + + better support for 16- and 64-bit machines + + expanded documentation, with more examples + +* Changes from version 2.2 to 2.4 + ------------------------------- + + external compiler creates portable binary files that can be loaded faster + + interface for debugging and profiling + + new "getglobal" fallback + + new functions for handling references to Lua objects + + new functions in standard lib + + only one copy of each string is stored + + expanded documentation, with more examples + +* Changes from version 2.1 to 2.2 + ------------------------------- + + functions now may be declared with any "lvalue" as a name + + garbage collection of functions + + support for pipes + +* Changes from version 1.1 to 2.1 + ------------------------------- + + object-oriented support + + fallbacks + + simplified syntax for tables + + many internal improvements + +(end of HISTORY) diff --git a/lua/INSTALL b/lua/INSTALL new file mode 100644 index 0000000..17eb8ae --- /dev/null +++ b/lua/INSTALL @@ -0,0 +1,99 @@ +INSTALL for Lua 5.1 + +* Building Lua + ------------ + Lua is built in the src directory, but the build process can be + controlled from the top-level Makefile. + + Building Lua on Unix systems should be very easy. First do "make" and + see if your platform is listed. If so, just do "make xxx", where xxx + is your platform name. The platforms currently supported are: + aix ansi bsd freebsd generic linux macosx mingw posix solaris + + If your platform is not listed, try the closest one or posix, generic, + ansi, in this order. + + See below for customization instructions and for instructions on how + to build with other Windows compilers. + + If you want to check that Lua has been built correctly, do "make test" + after building Lua. Also, have a look at the example programs in test. + +* Installing Lua + -------------- + Once you have built Lua, you may want to install it in an official + place in your system. In this case, do "make install". The official + place and the way to install files are defined in Makefile. You must + have the right permissions to install files. + + If you want to build and install Lua in one step, do "make xxx install", + where xxx is your platform name. + + If you want to install Lua locally, then do "make local". This will + create directories bin, include, lib, man, and install Lua there as + follows: + + bin: lua luac + include: lua.h luaconf.h lualib.h lauxlib.h lua.hpp + lib: liblua.a + man/man1: lua.1 luac.1 + + These are the only directories you need for development. + + There are man pages for lua and luac, in both nroff and html, and a + reference manual in html in doc, some sample code in test, and some + useful stuff in etc. You don't need these directories for development. + + If you want to install Lua locally, but in some other directory, do + "make install INSTALL_TOP=xxx", where xxx is your chosen directory. + + See below for instructions for Windows and other systems. + +* Customization + ------------- + Three things can be customized by editing a file: + - Where and how to install Lua -- edit Makefile. + - How to build Lua -- edit src/Makefile. + - Lua features -- edit src/luaconf.h. + + You don't actually need to edit the Makefiles because you may set the + relevant variables when invoking make. + + On the other hand, if you need to select some Lua features, you'll need + to edit src/luaconf.h. The edited file will be the one installed, and + it will be used by any Lua clients that you build, to ensure consistency. + + We strongly recommend that you enable dynamic loading. This is done + automatically for all platforms listed above that have this feature + (and also Windows). See src/luaconf.h and also src/Makefile. + +* Building Lua on Windows and other systems + ----------------------------------------- + If you're not using the usual Unix tools, then the instructions for + building Lua depend on the compiler you use. You'll need to create + projects (or whatever your compiler uses) for building the library, + the interpreter, and the compiler, as follows: + + library: lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c + lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c + ltable.c ltm.c lundump.c lvm.c lzio.c + lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c + ltablib.c lstrlib.c loadlib.c linit.c + + interpreter: library, lua.c + + compiler: library, luac.c print.c + + If you use Visual Studio .NET, you can use etc/luavs.bat in its + "Command Prompt". + + If all you want is to build the Lua interpreter, you may put all .c files + in a single project, except for luac.c and print.c. Or just use etc/all.c. + + To use Lua as a library in your own programs, you'll need to know how to + create and use libraries with your compiler. + + As mentioned above, you may edit luaconf.h to select some features before + building Lua. + +(end of INSTALL) diff --git a/lua/README b/lua/README new file mode 100644 index 0000000..11b4dff --- /dev/null +++ b/lua/README @@ -0,0 +1,37 @@ +README for Lua 5.1 + +See INSTALL for installation instructions. +See HISTORY for a summary of changes since the last released version. + +* What is Lua? + ------------ + Lua is a powerful, light-weight programming language designed for extending + applications. Lua is also frequently used as a general-purpose, stand-alone + language. Lua is free software. + + For complete information, visit Lua's web site at http://www.lua.org/ . + For an executive summary, see http://www.lua.org/about.html . + + Lua has been used in many different projects around the world. + For a short list, see http://www.lua.org/uses.html . + +* Availability + ------------ + Lua is freely available for both academic and commercial purposes. + See COPYRIGHT and http://www.lua.org/license.html for details. + Lua can be downloaded at http://www.lua.org/download.html . + +* Installation + ------------ + Lua is implemented in pure ANSI C, and compiles unmodified in all known + platforms that have an ANSI C compiler. In most Unix-like platforms, simply + do "make" with a suitable target. See INSTALL for detailed instructions. + +* Origin + ------ + Lua is developed at Lua.org, a laboratory of the Department of Computer + Science of PUC-Rio (the Pontifical Catholic University of Rio de Janeiro + in Brazil). + For more information about the authors, see http://www.lua.org/authors.html . + +(end of README) diff --git a/lua/doc/amazon.gif b/lua/doc/amazon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2586d5765361bb8a33a72401449f3abdefe4e16 GIT binary patch literal 797 zcwPY=1LFKgNk%w1VOjtj0K^&q@9)h50%r{k3;+NBK0Y<5t#HiDnQw1j_x9wkua=aQ zf8O4{J3ExYz@^dAvgzr__o-L@ehvGQF7LT?@$1I#;Ij3_g2%_+^3u}mmw|9dEECm0Kc!X!@|#@3&?4Fr)=|m57&HqxlCDW&_KZ+1;`8vSj33YC_e@b zLW(B90kQ_n9Ds8N3z4jU4HiAyWz9`JYknO6suY&Mn*c`+`V13=EEIuKH*uwDKrGlz zo{tDTNaHR5yf%>5cyj}g-^zXgiM@QV=g%Gh303A)7B84EpbPvE-6X=O$DmxJ`b(9|4E82-m%Ds!U< zI=HL8TMx@{~>s4%C(a0wK8Wjd@n+|5vxOvSr(vuAh- z5-e0mzlK5u3lKm6pnB`22G3HYpfaDDC`;MbMg*4 b)M@9Pc;4WH3w-wJ=bwNED(Iksh5!INDePJ9 literal 0 HcwPel00001 diff --git a/lua/doc/contents.html b/lua/doc/contents.html new file mode 100644 index 0000000..01b069f --- /dev/null +++ b/lua/doc/contents.html @@ -0,0 +1,456 @@ + + +Lua 5.1 reference manual - contents + + + + + + +
    +

    + +Lua 5.1 Reference Manual +

    + +This is an online version of +
    + + + +Lua 5.1 Reference Manual +
    by R. Ierusalimschy, L. H. de Figueiredo, W. Celes +
    Lua.org, August 2006 +
    ISBN 85-903798-3-3 +
    +[Buy from Amazon] +
    +
    +

    + +Buy a paper copy and +help to support +the Lua project. +

    + +start +· +contents +· +index +· +errata +


    + +Copyright © 2006-2007 Lua.org, PUC-Rio. +Freely available under the terms of the +Lua license. + +

    + +

    Contents

    + + +

    Index

    + + + + + + + +
    +

    Lua functions

    +_G
    +_VERSION
    +assert
    +collectgarbage
    +dofile
    +error
    +getfenv
    +getmetatable
    +ipairs
    +load
    +loadfile
    +loadstring
    +module
    +next
    +pairs
    +pcall
    +print
    +rawequal
    +rawget
    +rawset
    +require
    +select
    +setfenv
    +setmetatable
    +tonumber
    +tostring
    +type
    +unpack
    +xpcall
    + +
    +

     

    +coroutine.create
    +coroutine.resume
    +coroutine.running
    +coroutine.status
    +coroutine.wrap
    +coroutine.yield
    +debug.debug
    +debug.getfenv
    +debug.gethook
    +debug.getinfo
    +debug.getlocal
    +debug.getmetatable
    +debug.getregistry
    +debug.getupvalue
    +debug.setfenv
    +debug.sethook
    +debug.setlocal
    +debug.setmetatable
    +debug.setupvalue
    +debug.traceback
    +file:close
    +file:flush
    +file:lines
    +file:read
    +file:seek
    +file:setvbuf
    +file:write
    +io.close
    +io.flush
    +io.input
    +io.lines
    +io.open
    +io.output
    +io.popen
    +io.read
    +io.tmpfile
    +io.type
    +io.write
    +math.abs
    +math.acos
    +math.asin
    +math.atan2
    +math.atan
    +math.ceil
    +math.cosh
    +math.cos
    +math.deg
    +math.exp
    +math.floor
    +math.fmod
    +math.frexp
    +math.huge
    +math.ldexp
    +math.log10
    +math.log
    +math.max
    +math.min
    +math.modf
    +math.pi
    +math.pow
    +math.rad
    +math.random
    +math.randomseed
    +math.sinh
    +math.sin
    +math.sqrt
    +math.tanh
    +math.tan
    +os.clock
    +os.date
    +os.difftime
    +os.execute
    +os.exit
    +os.getenv
    +os.remove
    +os.rename
    +os.setlocale
    +os.time
    +os.tmpname
    +package.cpath
    +package.loaded
    +package.loadlib
    +package.path
    +package.preload
    +package.seeall
    +string.byte
    +string.char
    +string.dump
    +string.find
    +string.format
    +string.gmatch
    +string.gsub
    +string.len
    +string.lower
    +string.match
    +string.rep
    +string.reverse
    +string.sub
    +string.upper
    +table.concat
    +table.insert
    +table.maxn
    +table.remove
    +table.sort
    + +
    +

    C API

    +lua_Alloc
    +lua_CFunction
    +lua_Debug
    +lua_Hook
    +lua_Integer
    +lua_Number
    +lua_Reader
    +lua_State
    +lua_Writer
    +lua_atpanic
    +lua_call
    +lua_checkstack
    +lua_close
    +lua_concat
    +lua_cpcall
    +lua_createtable
    +lua_dump
    +lua_equal
    +lua_error
    +lua_gc
    +lua_getallocf
    +lua_getfenv
    +lua_getfield
    +lua_getglobal
    +lua_gethook
    +lua_gethookcount
    +lua_gethookmask
    +lua_getinfo
    +lua_getlocal
    +lua_getmetatable
    +lua_getstack
    +lua_gettable
    +lua_gettop
    +lua_getupvalue
    +lua_insert
    +lua_isboolean
    +lua_iscfunction
    +lua_isfunction
    +lua_islightuserdata
    +lua_isnil
    +lua_isnumber
    +lua_isstring
    +lua_istable
    +lua_isthread
    +lua_isuserdata
    +lua_lessthan
    +lua_load
    +lua_newstate
    +lua_newtable
    +lua_newthread
    +lua_newuserdata
    +lua_next
    +lua_objlen
    +lua_pcall
    +lua_pop
    +lua_pushboolean
    +lua_pushcclosure
    +lua_pushcfunction
    +lua_pushfstring
    +lua_pushinteger
    +lua_pushlightuserdata
    +lua_pushlstring
    +lua_pushnil
    +lua_pushnumber
    +lua_pushstring
    +lua_pushthread
    +lua_pushvalue
    +lua_pushvfstring
    +lua_rawequal
    +lua_rawget
    +lua_rawgeti
    +lua_rawset
    +lua_rawseti
    +lua_register
    +lua_remove
    +lua_replace
    +lua_resume
    +lua_setallocf
    +lua_setfenv
    +lua_setfield
    +lua_setglobal
    +lua_sethook
    +lua_setlocal
    +lua_setmetatable
    +lua_settable
    +lua_settop
    +lua_setupvalue
    +lua_status
    +lua_toboolean
    +lua_tocfunction
    +lua_tointeger
    +lua_tolstring
    +lua_tonumber
    +lua_topointer
    +lua_tostring
    +lua_tothread
    +lua_touserdata
    +lua_type
    +lua_typename
    +lua_upvalueindex
    +lua_xmove
    +lua_yield
    + +
    +

    auxiliary library

    +luaL_Buffer
    +luaL_Reg
    +luaL_addchar
    +luaL_addlstring
    +luaL_addsize
    +luaL_addstring
    +luaL_addvalue
    +luaL_argcheck
    +luaL_argerror
    +luaL_buffinit
    +luaL_callmeta
    +luaL_checkany
    +luaL_checkint
    +luaL_checkinteger
    +luaL_checklong
    +luaL_checklstring
    +luaL_checknumber
    +luaL_checkoption
    +luaL_checkstack
    +luaL_checkstring
    +luaL_checktype
    +luaL_checkudata
    +luaL_dofile
    +luaL_dostring
    +luaL_error
    +luaL_getmetafield
    +luaL_getmetatable
    +luaL_gsub
    +luaL_loadbuffer
    +luaL_loadfile
    +luaL_loadstring
    +luaL_newmetatable
    +luaL_newstate
    +luaL_openlibs
    +luaL_optint
    +luaL_optinteger
    +luaL_optlong
    +luaL_optlstring
    +luaL_optnumber
    +luaL_optstring
    +luaL_prepbuffer
    +luaL_pushresult
    +luaL_ref
    +luaL_register
    +luaL_typename
    +luaL_typerror
    +luaL_unref
    +luaL_where
    + +
    +

    + +


    + +Last update: +Fri Mar 23 08:33:19 BRT 2007 + + + + + diff --git a/lua/doc/cover.png b/lua/doc/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..2dbb198123f03a7250bfa57c8253739962d69afb GIT binary patch literal 3305 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 literal 0 HcwPel00001 diff --git a/lua/doc/logo.gif b/lua/doc/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..2f5e4ac2e742fbb7675e739879211553758aea9c GIT binary patch literal 4232 zcwX(3`#;l*5IVRNZS zMN&DXhRUUKC`uRSEJ>l$q39Inqwo3r4c}is&&TWW`t9}8>-F;SWw~vP-~)W%Z{S~2 z03aOzvH>7hRW%Qb%}+{7N={BrPfyRz&d$%z2SGjz3osawy1H0XQ>djS(bO!!<0Wg> z6yotky1FI$`XvSiM~#h-7#klWkxDHskDHrIEiKEet;_A~DqLJnIyzRmxKuehp7QWG z?cs5D%a&?7y_UhKq0?ndrrgi3p3QFf>8E;s|3(hy{LY={0s=1V+I2BBw0ZaLmawpk zd-q=Aa<4>1wZ+7=#l^M9$G0aX-AG8dmYjSeJ^fZ%T4z?)t;2`A^7HTJ<#h>#LWx9D zR8&-2S}K)FD=RC{oH~+uPUIH#j)>=+PsE;*Td!o{Wu+jgOB{OiXllEBpH1_VrB-3``9U zz8e~v9v*)G^y$pl*zEZD+{>3ACni3oSdJY{_^3&mzkNx zPoKUnEG*2=|Gl)d^ySO9ij%$`fAG? z&Q$Q8T_Y9;$UO=$1_t*ifquT8h6cuLAHfcI2ZlxCH1wCzOz>5t6mPVqZM*@Nar&Cf z!ed9dS*S-b-iRi_wI#0X*rv-;F?Os9j9GVYlam<+Lp{~XSM!7_UHV}f!8&!FN4fBx zb!Cw>9fxt?f}-DQ^%8#OHMUs%JN%UWqi9VA!ve}Q8LqniVF>4Xm+!oRaMt3dovf@1 zPFW$)$+W!^{wkHP>oh?OKu`w4apbjxY zYQp`iH-DT8ixJ%`!m=o*Ze8J7ecYps8DZB@_-FE;_J!?}$6pz~(N2~$rF!k5*gPfwm5%yo?i2p^Pv$127h z{>YU+W9^OO?Pm0WWz4BU9L)O~d;FD?ZG`xEij}vin!LL?H*K8{&}qVqobWE0lKu(c za$efqOr3O{1>DWbIhgm?DP~y?w;9j$2)y7c^)t}iY&4PvTGFC1Qlnl-PqA(*+qh2H zL)>E5S~&Fc31OtWd1Y^o=6au+HO6fPlQec!*?f=r``44XHCQv6zC~$APsZzI4<6u| z2}__k7qVFPwX`L*lBs8}&_er~i+YaNdF}y1GT=V&kXwVx2x;r3>--u)@Ri)D`-(lZ zaPsS>3!($Of>j@h886iP_*v@WOYzh92Y)VrJPZ@3s?36$OF~Avqxnu|biL4QMxpiw zy+sVxPH$ays>q!~*JOk(h;T*;(au@scJx%!sQt;3HPIB;1wZMj){h_Rj;x`ohJD*3 zC1+0!QwwjRsPyTkmy6}<56^9K8K}ccnS*Wwn61XB&^!3djdhq1xCxh+J5-J3f+n|O z?1#0kI-2k`?eqh`(%Az1^0HX_F&Z-d;LHL`J{#xOD6jK+6 z4ejov5E&~Ng{JNcd_a6n}e4}sO3lBl0V9NLe*q+^(^lKG96`NL(Wy7+iiN6S*uRHQnb1fK}hBJ z33c8i;RB!?ozEB?ap>e0`g1@Uia+qKz;BJTn%*FTi`^iwW7UssVE6rgT+Nq5ejlxr zkKDVzRz;9fC>D$yk>1QDJNF#M+6!nYn8kvv_wkY5{!|sgbrhI3Uqtre{1g|NoV!_# zs_k`J>XRUAxZ|{6mFQMjkizi8)e~GqF^vva7c(n{Y0wXM{wAXX1a3&Z?}CfR7Ia)d zn3t9wchK&0=9}|Iv=UB7)6@LVi@OS517?$|J1qh$-Cy0C^~MRrMh5rb7U$D%vfVo_ zPx?TS- zo;WA0YvV_2Ok&95Q4-GqiqION_@Hb7F0$HhP8t5K=f$BDILt4oNUC@}KSF&I1T!`PrqwxO_I>O$#oAE~rY zY_xV!JaO6i^Wj%ZxTXS$SG0WXS%!YWY36uy#vS{M_PbZuHMdV|sVQ4V$R;}ey^R^a z&S`KNS*|p_`@8PMTl}UsT7o|seC6(w#>=kltyoD5(077Z{t&Dk$IQm~(2g)83@DC_ei4;Va!YM!ZkN z$~J>HsYm_g0VIhOidfs$EG&8O_~TN*wYYFu z+waSs5CW3dlobKFC-!~`-j@mU5+y_kTzQ45?K=12NAu&6cJz%)$&cL(w{lM;?x6xo zN+Ne8nWRQ<5w70Vc)Px5Pa@ct5@WTuYx0RzavE8^OOA8ZjDf9J5|-LcYd&LN7(Ng8 zT&QHtLngd#O*XAWtBt}JHH$lb>3Td6UYUYzGkPG56cCrW0V)PKZ$(w*9V z!=tPG77JFz{Dzu4-}dRge_Fp0*x;sh8M|%G=C_ZioqxHNFD2Yz>vU^qCyV!J2#b!~ z@O#jsLiUO#>D*|AmjKfR;`x=ss5BOM&s0QtHo{{Jr;fPt8 zVkQxrE@ezd=;WC}D}mr$H1=1OG)Rhmzo6n}PSHc)&te@kao06kg8dsI@x-3CL(x~s zAjcBPYei>B-FH!8s5=u#AGRSGv1)2v-AZ$5+6+56U%_u5VxT+UjOE-xS{k%hQ7$<<= zGPbR^^piX}_WQSEIFXUQ5;Qg=wh$=94MYtYXsQ6uL^@t0gQhYt9!?h&F5WS#fm?`z#VB2}*s0=8H#ryCQ)JFt+QB+-4XqR)Y zY2^B;ZhssJ)!c|LxrayrhmS!y{s%VA>|bS)pKdng`D4pqVlg3a9!MGUyZ+AJ%E~~C zx-Luy`)nNVw(;8?;T=(8nd>M z1X)|#Vq5d6E&}3Lho_?~IRQxPXKGh%H!Xv=4kK(iila@wh*Z75brZ#|3RgBi+Ieb6}XdmLm>&P+Of6H&Hy@@wia+23M*+BqkGmm;} zh5wW+yZfRNl4GI)*iy+XZnqVbhYRVTB>+b|6kiQRB=gm#ej93@sz%FDTlgxDO2|$D zt>>w1;d|zW1iLIF0sK>XmTbq}h_jz|A`jTkIkT}&d;iF$?TfIQBFmG6d0NIhkW69$ z=T`7o4#)n0U~6X5+&m2S*=31J5n)pYNICJE)ML~pmjOE{=E%qAjDbvqZv^5C##qzq|R`!_P% zM0CU)_CQ2@_$LIlgMY4qqZ&j-1+>B@v)O^e=&HeH3uhEZ0sBa~g(WAqAuT;GTZWcf Oh7B$~nZ<)3;Q4>>BxC;o literal 0 HcwPel00001 diff --git a/lua/doc/lua.1 b/lua/doc/lua.1 new file mode 100644 index 0000000..24809cc --- /dev/null +++ b/lua/doc/lua.1 @@ -0,0 +1,163 @@ +.\" $Id: lua.man,v 1.11 2006/01/06 16:03:34 lhf Exp $ +.TH LUA 1 "$Date: 2006/01/06 16:03:34 $" +.SH NAME +lua \- Lua interpreter +.SH SYNOPSIS +.B lua +[ +.I options +] +[ +.I script +[ +.I args +] +] +.SH DESCRIPTION +.B lua +is the stand-alone Lua interpreter. +It loads and executes Lua programs, +either in textual source form or +in precompiled binary form. +(Precompiled binaries are output by +.BR luac , +the Lua compiler.) +.B lua +can be used as a batch interpreter and also interactively. +.LP +The given +.I options +(see below) +are executed and then +the Lua program in file +.I script +is loaded and executed. +The given +.I args +are available to +.I script +as strings in a global table named +.BR arg . +If these arguments contain spaces or other characters special to the shell, +then they should be quoted +(but note that the quotes will be removed by the shell). +The arguments in +.B arg +start at 0, +which contains the string +.RI ' script '. +The index of the last argument is stored in +.BR arg.n . +The arguments given in the command line before +.IR script , +including the name of the interpreter, +are available in negative indices in +.BR arg . +.LP +At the very start, +before even handling the command line, +.B lua +executes the contents of the environment variable +.BR LUA_INIT , +if it is defined. +If the value of +.B LUA_INIT +is of the form +.RI '@ filename ', +then +.I filename +is executed. +Otherwise, the string is assumed to be a Lua statement and is executed. +.LP +Options start with +.B '\-' +and are described below. +You can use +.B "'\--'" +to signal the end of options. +.LP +If no arguments are given, +then +.B "\-v \-i" +is assumed when the standard input is a terminal; +otherwise, +.B "\-" +is assumed. +.LP +In interactive mode, +.B lua +prompts the user, +reads lines from the standard input, +and executes them as they are read. +If a line does not contain a complete statement, +then a secondary prompt is displayed and +lines are read until a complete statement is formed or +a syntax error is found. +So, one way to interrupt the reading of an incomplete statement is +to force a syntax error: +adding a +.B ';' +in the middle of a statement is a sure way of forcing a syntax error +(except inside multiline strings and comments; these must be closed explicitly). +If a line starts with +.BR '=' , +then +.B lua +displays the values of all the expressions in the remainder of the +line. The expressions must be separated by commas. +The primary prompt is the value of the global variable +.BR _PROMPT , +if this value is a string; +otherwise, the default prompt is used. +Similarly, the secondary prompt is the value of the global variable +.BR _PROMPT2 . +So, +to change the prompts, +set the corresponding variable to a string of your choice. +You can do that after calling the interpreter +or on the command line +(but in this case you have to be careful with quotes +if the prompt string contains a space; otherwise you may confuse the shell.) +The default prompts are "> " and ">> ". +.SH OPTIONS +.TP +.B \- +load and execute the standard input as a file, +that is, +not interactively, +even when the standard input is a terminal. +.TP +.BI \-e " stat" +execute statement +.IR stat . +You need to quote +.I stat +if it contains spaces, quotes, +or other characters special to the shell. +.TP +.B \-i +enter interactive mode after +.I script +is executed. +.TP +.BI \-l " name" +call +.BI require(' name ') +before executing +.IR script . +Typically used to load libraries. +.TP +.B \-v +show version information. +.SH "SEE ALSO" +.BR luac (1) +.br +http://www.lua.org/ +.SH DIAGNOSTICS +Error messages should be self explanatory. +.SH AUTHORS +R. Ierusalimschy, +L. H. de Figueiredo, +and +W. Celes +.\" EOF diff --git a/lua/doc/lua.css b/lua/doc/lua.css new file mode 100644 index 0000000..039cf11 --- /dev/null +++ b/lua/doc/lua.css @@ -0,0 +1,41 @@ +body { + color: #000000 ; + background-color: #FFFFFF ; + font-family: sans-serif ; + text-align: justify ; + margin-right: 20px ; + margin-left: 20px ; +} + +h1, h2, h3, h4 { + font-weight: normal ; + font-style: italic ; +} + +a:link { + color: #000080 ; + background-color: inherit ; + text-decoration: none ; +} + +a:visited { + background-color: inherit ; + text-decoration: none ; +} + +a:link:hover, a:visited:hover { + color: #000080 ; + background-color: #E0E0FF ; +} + +a:link:active, a:visited:active { + color: #FF0000 ; +} + +hr { + border: 0 ; + height: 1px ; + color: #a0a0a0 ; + background-color: #a0a0a0 ; +} + diff --git a/lua/doc/lua.html b/lua/doc/lua.html new file mode 100644 index 0000000..1d435ab --- /dev/null +++ b/lua/doc/lua.html @@ -0,0 +1,172 @@ + + + +LUA man page + + + + + +

    NAME

    +lua - Lua interpreter +

    SYNOPSIS

    +lua +[ +options +] +[ +script +[ +args +] +] +

    DESCRIPTION

    +lua +is the stand-alone Lua interpreter. +It loads and executes Lua programs, +either in textual source form or +in precompiled binary form. +(Precompiled binaries are output by +luac, +the Lua compiler.) +lua +can be used as a batch interpreter and also interactively. +

    +The given +options +(see below) +are executed and then +the Lua program in file +script +is loaded and executed. +The given +args +are available to +script +as strings in a global table named +arg. +If these arguments contain spaces or other characters special to the shell, +then they should be quoted +(but note that the quotes will be removed by the shell). +The arguments in +arg +start at 0, +which contains the string +'script'. +The index of the last argument is stored in +arg.n. +The arguments given in the command line before +script, +including the name of the interpreter, +are available in negative indices in +arg. +

    +At the very start, +before even handling the command line, +lua +executes the contents of the environment variable +LUA_INIT, +if it is defined. +If the value of +LUA_INIT +is of the form +'@filename', +then +filename +is executed. +Otherwise, the string is assumed to be a Lua statement and is executed. +

    +Options start with +'-' +and are described below. +You can use +'--' +to signal the end of options. +

    +If no arguments are given, +then +"-v -i" +is assumed when the standard input is a terminal; +otherwise, +"-" +is assumed. +

    +In interactive mode, +lua +prompts the user, +reads lines from the standard input, +and executes them as they are read. +If a line does not contain a complete statement, +then a secondary prompt is displayed and +lines are read until a complete statement is formed or +a syntax error is found. +So, one way to interrupt the reading of an incomplete statement is +to force a syntax error: +adding a +';' +in the middle of a statement is a sure way of forcing a syntax error +(except inside multiline strings and comments; these must be closed explicitly). +If a line starts with +'=', +then +lua +displays the values of all the expressions in the remainder of the +line. The expressions must be separated by commas. +The primary prompt is the value of the global variable +_PROMPT, +if this value is a string; +otherwise, the default prompt is used. +Similarly, the secondary prompt is the value of the global variable +_PROMPT2. +So, +to change the prompts, +set the corresponding variable to a string of your choice. +You can do that after calling the interpreter +or on the command line +(but in this case you have to be careful with quotes +if the prompt string contains a space; otherwise you may confuse the shell.) +The default prompts are "> " and ">> ". +

    OPTIONS

    +

    +- +load and execute the standard input as a file, +that is, +not interactively, +even when the standard input is a terminal. +

    +-e stat +execute statement +stat. +You need to quote +stat +if it contains spaces, quotes, +or other characters special to the shell. +

    +-i +enter interactive mode after +script +is executed. +

    +-l name +call +require('name') +before executing +script. +Typically used to load libraries. +

    +-v +show version information. +

    SEE ALSO

    +luac(1) +
    +http://www.lua.org/ +

    DIAGNOSTICS

    +Error messages should be self explanatory. +

    AUTHORS

    +R. Ierusalimschy, +L. H. de Figueiredo, +and +W. Celes + + + diff --git a/lua/doc/luac.1 b/lua/doc/luac.1 new file mode 100644 index 0000000..d814678 --- /dev/null +++ b/lua/doc/luac.1 @@ -0,0 +1,136 @@ +.\" $Id: luac.man,v 1.28 2006/01/06 16:03:34 lhf Exp $ +.TH LUAC 1 "$Date: 2006/01/06 16:03:34 $" +.SH NAME +luac \- Lua compiler +.SH SYNOPSIS +.B luac +[ +.I options +] [ +.I filenames +] +.SH DESCRIPTION +.B luac +is the Lua compiler. +It translates programs written in the Lua programming language +into binary files that can be later loaded and executed. +.LP +The main advantages of precompiling chunks are: +faster loading, +protecting source code from accidental user changes, +and +off-line syntax checking. +.LP +Pre-compiling does not imply faster execution +because in Lua chunks are always compiled into bytecodes before being executed. +.B luac +simply allows those bytecodes to be saved in a file for later execution. +.LP +Pre-compiled chunks are not necessarily smaller than the corresponding source. +The main goal in pre-compiling is faster loading. +.LP +The binary files created by +.B luac +are portable only among architectures with the same word size and byte order. +.LP +.B luac +produces a single output file containing the bytecodes +for all source files given. +By default, +the output file is named +.BR luac.out , +but you can change this with the +.B \-o +option. +.LP +In the command line, +you can mix +text files containing Lua source and +binary files containing precompiled chunks. +This is useful to combine several precompiled chunks, +even from different (but compatible) platforms, +into a single precompiled chunk. +.LP +You can use +.B "'\-'" +to indicate the standard input as a source file +and +.B "'\--'" +to signal the end of options +(that is, +all remaining arguments will be treated as files even if they start with +.BR "'\-'" ). +.LP +The internal format of the binary files produced by +.B luac +is likely to change when a new version of Lua is released. +So, +save the source files of all Lua programs that you precompile. +.LP +.SH OPTIONS +Options must be separate. +.TP +.B \-l +produce a listing of the compiled bytecode for Lua's virtual machine. +Listing bytecodes is useful to learn about Lua's virtual machine. +If no files are given, then +.B luac +loads +.B luac.out +and lists its contents. +.TP +.BI \-o " file" +output to +.IR file , +instead of the default +.BR luac.out . +(You can use +.B "'\-'" +for standard output, +but not on platforms that open standard output in text mode.) +The output file may be a source file because +all files are loaded before the output file is written. +Be careful not to overwrite precious files. +.TP +.B \-p +load files but do not generate any output file. +Used mainly for syntax checking and for testing precompiled chunks: +corrupted files will probably generate errors when loaded. +Lua always performs a thorough integrity test on precompiled chunks. +Bytecode that passes this test is completely safe, +in the sense that it will not break the interpreter. +However, +there is no guarantee that such code does anything sensible. +(None can be given, because the halting problem is unsolvable.) +If no files are given, then +.B luac +loads +.B luac.out +and tests its contents. +No messages are displayed if the file passes the integrity test. +.TP +.B \-s +strip debug information before writing the output file. +This saves some space in very large chunks, +but if errors occur when running a stripped chunk, +then the error messages may not contain the full information they usually do. +For instance, +line numbers and names of local variables are lost. +.TP +.B \-v +show version information. +.SH FILES +.TP 15 +.B luac.out +default output file +.SH "SEE ALSO" +.BR lua (1) +.br +http://www.lua.org/ +.SH DIAGNOSTICS +Error messages should be self explanatory. +.SH AUTHORS +L. H. de Figueiredo, +R. Ierusalimschy and +W. Celes +.\" EOF diff --git a/lua/doc/luac.html b/lua/doc/luac.html new file mode 100644 index 0000000..179ffe8 --- /dev/null +++ b/lua/doc/luac.html @@ -0,0 +1,145 @@ + + + +LUAC man page + + + + + +

    NAME

    +luac - Lua compiler +

    SYNOPSIS

    +luac +[ +options +] [ +filenames +] +

    DESCRIPTION

    +luac +is the Lua compiler. +It translates programs written in the Lua programming language +into binary files that can be later loaded and executed. +

    +The main advantages of precompiling chunks are: +faster loading, +protecting source code from accidental user changes, +and +off-line syntax checking. +

    +Precompiling does not imply faster execution +because in Lua chunks are always compiled into bytecodes before being executed. +luac +simply allows those bytecodes to be saved in a file for later execution. +

    +Precompiled chunks are not necessarily smaller than the corresponding source. +The main goal in precompiling is faster loading. +

    +The binary files created by +luac +are portable only among architectures with the same word size and byte order. +

    +luac +produces a single output file containing the bytecodes +for all source files given. +By default, +the output file is named +luac.out, +but you can change this with the +-o +option. +

    +In the command line, +you can mix +text files containing Lua source and +binary files containing precompiled chunks. +This is useful because several precompiled chunks, +even from different (but compatible) platforms, +can be combined into a single precompiled chunk. +

    +You can use +'-' +to indicate the standard input as a source file +and +'--' +to signal the end of options +(that is, +all remaining arguments will be treated as files even if they start with +'-'). +

    +The internal format of the binary files produced by +luac +is likely to change when a new version of Lua is released. +So, +save the source files of all Lua programs that you precompile. +

    +

    OPTIONS

    +Options must be separate. +

    +-l +produce a listing of the compiled bytecode for Lua's virtual machine. +Listing bytecodes is useful to learn about Lua's virtual machine. +If no files are given, then +luac +loads +luac.out +and lists its contents. +

    +-o file +output to +file, +instead of the default +luac.out. +(You can use +'-' +for standard output, +but not on platforms that open standard output in text mode.) +The output file may be a source file because +all files are loaded before the output file is written. +Be careful not to overwrite precious files. +

    +-p +load files but do not generate any output file. +Used mainly for syntax checking and for testing precompiled chunks: +corrupted files will probably generate errors when loaded. +Lua always performs a thorough integrity test on precompiled chunks. +Bytecode that passes this test is completely safe, +in the sense that it will not break the interpreter. +However, +there is no guarantee that such code does anything sensible. +(None can be given, because the halting problem is unsolvable.) +If no files are given, then +luac +loads +luac.out +and tests its contents. +No messages are displayed if the file passes the integrity test. +

    +-s +strip debug information before writing the output file. +This saves some space in very large chunks, +but if errors occur when running a stripped chunk, +then the error messages may not contain the full information they usually do. +For instance, +line numbers and names of local variables are lost. +

    +-v +show version information. +

    FILES

    +

    +luac.out +default output file +

    SEE ALSO

    +lua(1) +
    +http://www.lua.org/ +

    DIAGNOSTICS

    +Error messages should be self explanatory. +

    AUTHORS

    +L. H. de Figueiredo, +R. Ierusalimschy and +W. Celes + + + diff --git a/lua/doc/manual.css b/lua/doc/manual.css new file mode 100644 index 0000000..93f1ab2 --- /dev/null +++ b/lua/doc/manual.css @@ -0,0 +1,7 @@ +h3 code { + font-family: inherit ; +} + +pre { + font-size: 105% ; +} diff --git a/lua/doc/manual.html b/lua/doc/manual.html new file mode 100644 index 0000000..6b137ff --- /dev/null +++ b/lua/doc/manual.html @@ -0,0 +1,8521 @@ + + + + +Lua 5.1 Reference Manual + + + + + + +
    +

    + +Lua 5.1 Reference Manual +

    + +by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes +

    + +Copyright © 2006-2007 Lua.org, PUC-Rio. +Freely available under the terms of the +Lua license. + +


    +

    + +contents +· +index + + +

    + + + + + +

    1 - Introduction

    + +

    +Lua is an extension programming language designed to support +general procedural programming with data description +facilities. +It also offers good support for object-oriented programming, +functional programming, and data-driven programming. +Lua is intended to be used as a powerful, light-weight +scripting language for any program that needs one. +Lua is implemented as a library, written in clean C +(that is, in the common subset of ANSI C and C++). + + +

    +Being an extension language, Lua has no notion of a "main" program: +it only works embedded in a host client, +called the embedding program or simply the host. +This host program can invoke functions to execute a piece of Lua code, +can write and read Lua variables, +and can register C functions to be called by Lua code. +Through the use of C functions, Lua can be augmented to cope with +a wide range of different domains, +thus creating customized programming languages sharing a syntactical framework. +The Lua distribution includes a sample host program called lua, +which uses the Lua library to offer a complete, stand-alone Lua interpreter. + + +

    +Lua is free software, +and is provided as usual with no guarantees, +as stated in its license. +The implementation described in this manual is available +at Lua's official web site, www.lua.org. + + +

    +Like any other reference manual, +this document is dry in places. +For a discussion of the decisions behind the design of Lua, +see the technical papers available at Lua's web site. +For a detailed introduction to programming in Lua, +see Roberto's book, Programming in Lua (Second Edition). + + + +

    2 - The Language

    + +

    +This section describes the lexis, the syntax, and the semantics of Lua. +In other words, +this section describes +which tokens are valid, +how they can be combined, +and what their combinations mean. + + +

    +The language constructs will be explained using the usual extended BNF notation, +in which +{a} means 0 or more a's, and +[a] means an optional a. +Non-terminals are shown like non-terminal, +keywords are shown like kword, +and other terminal symbols are shown like `=´. +The complete syntax of Lua can be found at the end of this manual. + + + +

    2.1 - Lexical Conventions

    + +

    +Names +(also called identifiers) +in Lua can be any string of letters, +digits, and underscores, +not beginning with a digit. +This coincides with the definition of names in most languages. +(The definition of letter depends on the current locale: +any character considered alphabetic by the current locale +can be used in an identifier.) +Identifiers are used to name variables and table fields. + + +

    +The following keywords are reserved +and cannot be used as names: + + +

    +     and       break     do        else      elseif
    +     end       false     for       function  if
    +     in        local     nil       not       or
    +     repeat    return    then      true      until     while
    +
    + +

    +Lua is a case-sensitive language: +and is a reserved word, but And and AND +are two different, valid names. +As a convention, names starting with an underscore followed by +uppercase letters (such as _VERSION) +are reserved for internal global variables used by Lua. + + +

    +The following strings denote other tokens: + +

    +     +     -     *     /     %     ^     #
    +     ==    ~=    <=    >=    <     >     =
    +     (     )     {     }     [     ]
    +     ;     :     ,     .     ..    ...
    +
    + +

    +Literal strings +can be delimited by matching single or double quotes, +and can contain the following C-like escape sequences: +'\a' (bell), +'\b' (backspace), +'\f' (form feed), +'\n' (newline), +'\r' (carriage return), +'\t' (horizontal tab), +'\v' (vertical tab), +'\\' (backslash), +'\"' (quotation mark [double quote]), +and '\'' (apostrophe [single quote]). +Moreover, a backslash followed by a real newline +results in a newline in the string. +A character in a string may also be specified by its numerical value +using the escape sequence \ddd, +where ddd is a sequence of up to three decimal digits. +(Note that if a numerical escape is to be followed by a digit, +it must be expressed using exactly three digits.) +Strings in Lua may contain any 8-bit value, including embedded zeros, +which can be specified as '\0'. + + +

    +To put a double (single) quote, a newline, a backslash, +or an embedded zero +inside a literal string enclosed by double (single) quotes +you must use an escape sequence. +Any other character may be directly inserted into the literal. +(Some control characters may cause problems for the file system, +but Lua has no problem with them.) + + +

    +Literal strings can also be defined using a long format +enclosed by long brackets. +We define an opening long bracket of level n as an opening +square bracket followed by n equal signs followed by another +opening square bracket. +So, an opening long bracket of level 0 is written as [[, +an opening long bracket of level 1 is written as [=[, +and so on. +A closing long bracket is defined similarly; +for instance, a closing long bracket of level 4 is written as ]====]. +A long string starts with an opening long bracket of any level and +ends at the first closing long bracket of the same level. +Literals in this bracketed form may run for several lines, +do not interpret any escape sequences, +and ignore long brackets of any other level. +They may contain anything except a closing bracket of the proper level. + + +

    +For convenience, +when the opening long bracket is immediately followed by a newline, +the newline is not included in the string. +As an example, in a system using ASCII +(in which 'a' is coded as 97, +newline is coded as 10, and '1' is coded as 49), +the five literals below denote the same string: + +

    +     a = 'alo\n123"'
    +     a = "alo\n123\""
    +     a = '\97lo\10\04923"'
    +     a = [[alo
    +     123"]]
    +     a = [==[
    +     alo
    +     123"]==]
    +
    + +

    +A numerical constant may be written with an optional decimal part +and an optional decimal exponent. +Lua also accepts integer hexadecimal constants, +by prefixing them with 0x. +Examples of valid numerical constants are + +

    +     3   3.0   3.1416   314.16e-2   0.31416E1   0xff   0x56
    +
    + +

    +A comment starts with a double hyphen (--) +anywhere outside a string. +If the text immediately after -- is not an opening long bracket, +the comment is a short comment, +which runs until the end of the line. +Otherwise, it is a long comment, +which runs until the corresponding closing long bracket. +Long comments are frequently used to disable code temporarily. + + + + + +

    2.2 - Values and Types

    + +

    +Lua is a dynamically typed language. +This means that +variables do not have types; only values do. +There are no type definitions in the language. +All values carry their own type. + + +

    +All values in Lua are first-class values. +This means that all values can be stored in variables, +passed as arguments to other functions, and returned as results. + + +

    +There are eight basic types in Lua: +nil, boolean, number, +string, function, userdata, +thread, and table. +Nil is the type of the value nil, +whose main property is to be different from any other value; +it usually represents the absence of a useful value. +Boolean is the type of the values false and true. +Both nil and false make a condition false; +any other value makes it true. +Number represents real (double-precision floating-point) numbers. +(It is easy to build Lua interpreters that use other +internal representations for numbers, +such as single-precision float or long integers; +see file luaconf.h.) +String represents arrays of characters. + +Lua is 8-bit clean: +strings may contain any 8-bit character, +including embedded zeros ('\0') (see §2.1). + + +

    +Lua can call (and manipulate) functions written in Lua and +functions written in C +(see §2.5.8). + + +

    +The type userdata is provided to allow arbitrary C data to +be stored in Lua variables. +This type corresponds to a block of raw memory +and has no pre-defined operations in Lua, +except assignment and identity test. +However, by using metatables, +the programmer can define operations for userdata values +(see §2.8). +Userdata values cannot be created or modified in Lua, +only through the C API. +This guarantees the integrity of data owned by the host program. + + +

    +The type thread represents independent threads of execution +and it is used to implement coroutines (see §2.11). +Do not confuse Lua threads with operating-system threads. +Lua supports coroutines on all systems, +even those that do not support threads. + + +

    +The type table implements associative arrays, +that is, arrays that can be indexed not only with numbers, +but with any value (except nil). +Tables can be heterogeneous; +that is, they can contain values of all types (except nil). +Tables are the sole data structuring mechanism in Lua; +they may be used to represent ordinary arrays, +symbol tables, sets, records, graphs, trees, etc. +To represent records, Lua uses the field name as an index. +The language supports this representation by +providing a.name as syntactic sugar for a["name"]. +There are several convenient ways to create tables in Lua +(see §2.5.7). + + +

    +Like indices, +the value of a table field can be of any type (except nil). +In particular, +because functions are first-class values, +table fields may contain functions. +Thus tables may also carry methods (see §2.5.9). + + +

    +Tables, functions, threads, and (full) userdata values are objects: +variables do not actually contain these values, +only references to them. +Assignment, parameter passing, and function returns +always manipulate references to such values; +these operations do not imply any kind of copy. + + +

    +The library function type returns a string describing the type +of a given value. + + + +

    2.2.1 - Coercion

    + +

    +Lua provides automatic conversion between +string and number values at run time. +Any arithmetic operation applied to a string tries to convert +this string to a number, following the usual conversion rules. +Conversely, whenever a number is used where a string is expected, +the number is converted to a string, in a reasonable format. +For complete control over how numbers are converted to strings, +use the format function from the string library +(see string.format). + + + + + + + +

    2.3 - Variables

    + +

    +Variables are places that store values. + +There are three kinds of variables in Lua: +global variables, local variables, and table fields. + + +

    +A single name can denote a global variable or a local variable +(or a function's formal parameter, +which is a particular kind of local variable): + +

    +	var ::= Name
    +

    +Name denotes identifiers, as defined in §2.1. + + +

    +Any variable is assumed to be global unless explicitly declared +as a local (see §2.4.7). +Local variables are lexically scoped: +local variables can be freely accessed by functions +defined inside their scope (see §2.6). + + +

    +Before the first assignment to a variable, its value is nil. + + +

    +Square brackets are used to index a table: + +

    +	var ::= prefixexp `[´ exp `]´
    +

    +The meaning of accesses to global variables +and table fields can be changed via metatables. +An access to an indexed variable t[i] is equivalent to +a call gettable_event(t,i). +(See §2.8 for a complete description of the +gettable_event function. +This function is not defined or callable in Lua. +We use it here only for explanatory purposes.) + + +

    +The syntax var.Name is just syntactic sugar for +var["Name"]: + +

    +	var ::= prefixexp `.´ Name
    +
    + +

    +All global variables live as fields in ordinary Lua tables, +called environment tables or simply +environments (see §2.9). +Each function has its own reference to an environment, +so that all global variables in this function +will refer to this environment table. +When a function is created, +it inherits the environment from the function that created it. +To get the environment table of a Lua function, +you call getfenv. +To replace it, +you call setfenv. +(You can only manipulate the environment of C functions +through the debug library; (see §5.9).) + + +

    +An access to a global variable x +is equivalent to _env.x, +which in turn is equivalent to + +

    +     gettable_event(_env, "x")
    +

    +where _env is the environment of the running function. +(See §2.8 for a complete description of the +gettable_event function. +This function is not defined or callable in Lua. +Similarly, the _env variable is not defined in Lua. +We use them here only for explanatory purposes.) + + + + + +

    2.4 - Statements

    + +

    +Lua supports an almost conventional set of statements, +similar to those in Pascal or C. +This set includes +assignment, control structures, function calls, +and variable declarations. + + + +

    2.4.1 - Chunks

    + +

    +The unit of execution of Lua is called a chunk. +A chunk is simply a sequence of statements, +which are executed sequentially. +Each statement can be optionally followed by a semicolon: + +

    +	chunk ::= {stat [`;´]}
    +

    +There are no empty statements and thus ';;' is not legal. + + +

    +Lua handles a chunk as the body of an anonymous function +with a variable number of arguments +(see §2.5.9). +As such, chunks can define local variables, +receive arguments, and return values. + + +

    +A chunk may be stored in a file or in a string inside the host program. +When a chunk is executed, first it is pre-compiled into instructions for +a virtual machine, +and then the compiled code is executed +by an interpreter for the virtual machine. + + +

    +Chunks may also be pre-compiled into binary form; +see program luac for details. +Programs in source and compiled forms are interchangeable; +Lua automatically detects the file type and acts accordingly. + + + + + + +

    2.4.2 - Blocks

    +A block is a list of statements; +syntactically, a block is the same as a chunk: + +

    +	block ::= chunk
    +
    + +

    +A block may be explicitly delimited to produce a single statement: + +

    +	stat ::= do block end
    +

    +Explicit blocks are useful +to control the scope of variable declarations. +Explicit blocks are also sometimes used to +add a return or break statement in the middle +of another block (see §2.4.4). + + + + + +

    2.4.3 - Assignment

    + +

    +Lua allows multiple assignment. +Therefore, the syntax for assignment +defines a list of variables on the left side +and a list of expressions on the right side. +The elements in both lists are separated by commas: + +

    +	stat ::= varlist1 `=´ explist1
    +	varlist1 ::= var {`,´ var}
    +	explist1 ::= exp {`,´ exp}
    +

    +Expressions are discussed in §2.5. + + +

    +Before the assignment, +the list of values is adjusted to the length of +the list of variables. +If there are more values than needed, +the excess values are thrown away. +If there are fewer values than needed, +the list is extended with as many nil's as needed. +If the list of expressions ends with a function call, +then all values returned by this call enter in the list of values, +before the adjustment +(except when the call is enclosed in parentheses; see §2.5). + + +

    +The assignment statement first evaluates all its expressions +and only then are the assignments performed. +Thus the code + +

    +     i = 3
    +     i, a[i] = i+1, 20
    +

    +sets a[3] to 20, without affecting a[4] +because the i in a[i] is evaluated (to 3) +before it is assigned 4. +Similarly, the line + +

    +     x, y = y, x
    +

    +exchanges the values of x and y. + + +

    +The meaning of assignments to global variables +and table fields can be changed via metatables. +An assignment to an indexed variable t[i] = val is equivalent to +settable_event(t,i,val). +(See §2.8 for a complete description of the +settable_event function. +This function is not defined or callable in Lua. +We use it here only for explanatory purposes.) + + +

    +An assignment to a global variable x = val +is equivalent to the assignment +_env.x = val, +which in turn is equivalent to + +

    +     settable_event(_env, "x", val)
    +

    +where _env is the environment of the running function. +(The _env variable is not defined in Lua. +We use it here only for explanatory purposes.) + + + + + +

    2.4.4 - Control Structures

    +The control structures +if, while, and repeat have the usual meaning and +familiar syntax: + + + + +

    +	stat ::= while exp do block end
    +	stat ::= repeat block until exp
    +	stat ::= if exp then block {elseif exp then block} [else block] end
    +

    +Lua also has a for statement, in two flavors (see §2.4.5). + + +

    +The condition expression of a +control structure may return any value. +Both false and nil are considered false. +All values different from nil and false are considered true +(in particular, the number 0 and the empty string are also true). + + +

    +In the repeatuntil loop, +the inner block does not end at the until keyword, +but only after the condition. +So, the condition can refer to local variables +declared inside the loop block. + + +

    +The return statement is used to return values +from a function or a chunk (which is just a function). + +Functions and chunks may return more than one value, +so the syntax for the return statement is + +

    +	stat ::= return [explist1]
    +
    + +

    +The break statement is used to terminate the execution of a +while, repeat, or for loop, +skipping to the next statement after the loop: + + +

    +	stat ::= break
    +

    +A break ends the innermost enclosing loop. + + +

    +The return and break +statements can only be written as the last statement of a block. +If it is really necessary to return or break in the +middle of a block, +then an explicit inner block can be used, +as in the idioms +do return end and do break end, +because now return and break are the last statements in +their (inner) blocks. + + + + + +

    2.4.5 - For Statement

    + +

    + +The for statement has two forms: +one numeric and one generic. + + +

    +The numeric for loop repeats a block of code while a +control variable runs through an arithmetic progression. +It has the following syntax: + +

    +	stat ::= for Name `=´ exp `,´ exp [`,´ exp] do block end
    +

    +The block is repeated for name starting at the value of +the first exp, until it passes the second exp by steps of the +third exp. +More precisely, a for statement like + +

    +     for v = e1, e2, e3 do block end
    +

    +is equivalent to the code: + +

    +     do
    +       local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
    +       if not (var and limit and step) then error() end
    +       while (step > 0 and var <= limit) or (step <= 0 and var >= limit) do
    +         local v = var
    +         block
    +         var = var + step
    +       end
    +     end
    +

    +Note the following: + +

      + +
    • +All three control expressions are evaluated only once, +before the loop starts. +They must all result in numbers. +
    • + +
    • +var, limit, and step are invisible variables. +The names are here for explanatory purposes only. +
    • + +
    • +If the third expression (the step) is absent, +then a step of 1 is used. +
    • + +
    • +You can use break to exit a for loop. +
    • + +
    • +The loop variable v is local to the loop; +you cannot use its value after the for ends or is broken. +If you need this value, +assign it to another variable before breaking or exiting the loop. +
    • + +
    + +

    +The generic for statement works over functions, +called iterators. +On each iteration, the iterator function is called to produce a new value, +stopping when this new value is nil. +The generic for loop has the following syntax: + +

    +	stat ::= for namelist in explist1 do block end
    +	namelist ::= Name {`,´ Name}
    +

    +A for statement like + +

    +     for var_1, ···, var_n in explist do block end
    +

    +is equivalent to the code: + +

    +     do
    +       local f, s, var = explist
    +       while true do
    +         local var_1, ···, var_n = f(s, var)
    +         var = var_1
    +         if var == nil then break end
    +         block
    +       end
    +     end
    +

    +Note the following: + +

      + +
    • +explist is evaluated only once. +Its results are an iterator function, +a state, +and an initial value for the first iterator variable. +
    • + +
    • +f, s, and var are invisible variables. +The names are here for explanatory purposes only. +
    • + +
    • +You can use break to exit a for loop. +
    • + +
    • +The loop variables var_i are local to the loop; +you cannot use their values after the for ends. +If you need these values, +then assign them to other variables before breaking or exiting the loop. +
    • + +
    + + + + +

    2.4.6 - Function Calls as Statements

    +To allow possible side-effects, +function calls can be executed as statements: + +

    +	stat ::= functioncall
    +

    +In this case, all returned values are thrown away. +Function calls are explained in §2.5.8. + + + + + +

    2.4.7 - Local Declarations

    +Local variables may be declared anywhere inside a block. +The declaration may include an initial assignment: + +

    +	stat ::= local namelist [`=´ explist1]
    +

    +If present, an initial assignment has the same semantics +of a multiple assignment (see §2.4.3). +Otherwise, all variables are initialized with nil. + + +

    +A chunk is also a block (see §2.4.1), +and so local variables can be declared in a chunk outside any explicit block. +The scope of such local variables extends until the end of the chunk. + + +

    +The visibility rules for local variables are explained in §2.6. + + + + + + + +

    2.5 - Expressions

    + +

    +The basic expressions in Lua are the following: + +

    +	exp ::= prefixexp
    +	exp ::= nil | false | true
    +	exp ::= Number
    +	exp ::= String
    +	exp ::= function
    +	exp ::= tableconstructor
    +	exp ::= `...´
    +	exp ::= exp binop exp
    +	exp ::= unop exp
    +	prefixexp ::= var | functioncall | `(´ exp `)´
    +
    + +

    +Numbers and literal strings are explained in §2.1; +variables are explained in §2.3; +function definitions are explained in §2.5.9; +function calls are explained in §2.5.8; +table constructors are explained in §2.5.7. +Vararg expressions, +denoted by three dots ('...'), can only be used when +directly inside a vararg function; +they are explained in §2.5.9. + + +

    +Binary operators comprise arithmetic operators (see §2.5.1), +relational operators (see §2.5.2), logical operators (see §2.5.3), +and the concatenation operator (see §2.5.4). +Unary operators comprise the unary minus (see §2.5.1), +the unary not (see §2.5.3), +and the unary length operator (see §2.5.5). + + +

    +Both function calls and vararg expressions may result in multiple values. +If the expression is used as a statement (see §2.4.6) +(only possible for function calls), +then its return list is adjusted to zero elements, +thus discarding all returned values. +If the expression is used as the last (or the only) element +of a list of expressions, +then no adjustment is made +(unless the call is enclosed in parentheses). +In all other contexts, +Lua adjusts the result list to one element, +discarding all values except the first one. + + +

    +Here are some examples: + +

    +     f()                -- adjusted to 0 results
    +     g(f(), x)          -- f() is adjusted to 1 result
    +     g(x, f())          -- g gets x plus all results from f()
    +     a,b,c = f(), x     -- f() is adjusted to 1 result (c gets nil)
    +     a,b = ...          -- a gets the first vararg parameter, b gets
    +                        -- the second (both a and b may get nil if there
    +                        -- is no corresponding vararg parameter)
    +     
    +     a,b,c = x, f()     -- f() is adjusted to 2 results
    +     a,b,c = f()        -- f() is adjusted to 3 results
    +     return f()         -- returns all results from f()
    +     return ...         -- returns all received vararg parameters
    +     return x,y,f()     -- returns x, y, and all results from f()
    +     {f()}              -- creates a list with all results from f()
    +     {...}              -- creates a list with all vararg parameters
    +     {f(), nil}         -- f() is adjusted to 1 result
    +
    + +

    +An expression enclosed in parentheses always results in only one value. +Thus, +(f(x,y,z)) is always a single value, +even if f returns several values. +(The value of (f(x,y,z)) is the first value returned by f +or nil if f does not return any values.) + + + +

    2.5.1 - Arithmetic Operators

    +Lua supports the usual arithmetic operators: +the binary + (addition), +- (subtraction), * (multiplication), +/ (division), % (modulo), and ^ (exponentiation); +and unary - (negation). +If the operands are numbers, or strings that can be converted to +numbers (see §2.2.1), +then all operations have the usual meaning. +Exponentiation works for any exponent. +For instance, x^(-0.5) computes the inverse of the square root of x. +Modulo is defined as + +

    +     a % b == a - math.floor(a/b)*b
    +

    +That is, it is the remainder of a division that rounds +the quotient towards minus infinity. + + + + + +

    2.5.2 - Relational Operators

    +The relational operators in Lua are + +

    +     ==    ~=    <     >     <=    >=
    +

    +These operators always result in false or true. + + +

    +Equality (==) first compares the type of its operands. +If the types are different, then the result is false. +Otherwise, the values of the operands are compared. +Numbers and strings are compared in the usual way. +Objects (tables, userdata, threads, and functions) +are compared by reference: +two objects are considered equal only if they are the same object. +Every time you create a new object +(a table, userdata, thread, or function), +this new object is different from any previously existing object. + + +

    +You can change the way that Lua compares tables and userdata +by using the "eq" metamethod (see §2.8). + + +

    +The conversion rules of §2.2.1 +do not apply to equality comparisons. +Thus, "0"==0 evaluates to false, +and t[0] and t["0"] denote different +entries in a table. + + +

    +The operator ~= is exactly the negation of equality (==). + + +

    +The order operators work as follows. +If both arguments are numbers, then they are compared as such. +Otherwise, if both arguments are strings, +then their values are compared according to the current locale. +Otherwise, Lua tries to call the "lt" or the "le" +metamethod (see §2.8). + + + + + +

    2.5.3 - Logical Operators

    +The logical operators in Lua are +and, or, and not. +Like the control structures (see §2.4.4), +all logical operators consider both false and nil as false +and anything else as true. + + +

    +The negation operator not always returns false or true. +The conjunction operator and returns its first argument +if this value is false or nil; +otherwise, and returns its second argument. +The disjunction operator or returns its first argument +if this value is different from nil and false; +otherwise, or returns its second argument. +Both and and or use short-cut evaluation; +that is, +the second operand is evaluated only if necessary. +Here are some examples: + +

    +     10 or 20            --> 10
    +     10 or error()       --> 10
    +     nil or "a"          --> "a"
    +     nil and 10          --> nil
    +     false and error()   --> false
    +     false and nil       --> false
    +     false or nil        --> nil
    +     10 and 20           --> 20
    +

    +(In this manual, +--> indicates the result of the preceding expression.) + + + + + +

    2.5.4 - Concatenation

    +The string concatenation operator in Lua is +denoted by two dots ('..'). +If both operands are strings or numbers, then they are converted to +strings according to the rules mentioned in §2.2.1. +Otherwise, the "concat" metamethod is called (see §2.8). + + + + + +

    2.5.5 - The Length Operator

    + +

    +The length operator is denoted by the unary operator #. +The length of a string is its number of bytes +(that is, the usual meaning of string length when each +character is one byte). + + +

    +The length of a table t is defined to be any +integer index n +such that t[n] is not nil and t[n+1] is nil; +moreover, if t[1] is nil, n may be zero. +For a regular array, with non-nil values from 1 to a given n, +its length is exactly that n, +the index of its last value. +If the array has "holes" +(that is, nil values between other non-nil values), +then #t may be any of the indices that +directly precedes a nil value +(that is, it may consider any such nil value as the end of +the array). + + + + + +

    2.5.6 - Precedence

    +Operator precedence in Lua follows the table below, +from lower to higher priority: + +

    +     or
    +     and
    +     <     >     <=    >=    ~=    ==
    +     ..
    +     +     -
    +     *     /     %
    +     not   #     - (unary)
    +     ^
    +

    +As usual, +you can use parentheses to change the precedences of an expression. +The concatenation ('..') and exponentiation ('^') +operators are right associative. +All other binary operators are left associative. + + + + + +

    2.5.7 - Table Constructors

    +Table constructors are expressions that create tables. +Every time a constructor is evaluated, a new table is created. +Constructors can be used to create empty tables, +or to create a table and initialize some of its fields. +The general syntax for constructors is + +

    +	tableconstructor ::= `{´ [fieldlist] `}´
    +	fieldlist ::= field {fieldsep field} [fieldsep]
    +	field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
    +	fieldsep ::= `,´ | `;´
    +
    + +

    +Each field of the form [exp1] = exp2 adds to the new table an entry +with key exp1 and value exp2. +A field of the form name = exp is equivalent to +["name"] = exp. +Finally, fields of the form exp are equivalent to +[i] = exp, where i are consecutive numerical integers, +starting with 1. +Fields in the other formats do not affect this counting. +For example, + +

    +     a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }
    +

    +is equivalent to + +

    +     do
    +       local t = {}
    +       t[f(1)] = g
    +       t[1] = "x"         -- 1st exp
    +       t[2] = "y"         -- 2nd exp
    +       t.x = 1            -- t["x"] = 1
    +       t[3] = f(x)        -- 3rd exp
    +       t[30] = 23
    +       t[4] = 45          -- 4th exp
    +       a = t
    +     end
    +
    + +

    +If the last field in the list has the form exp +and the expression is a function call or a vararg expression, +then all values returned by this expression enter the list consecutively +(see §2.5.8). +To avoid this, +enclose the function call (or the vararg expression) +in parentheses (see §2.5). + + +

    +The field list may have an optional trailing separator, +as a convenience for machine-generated code. + + + + + +

    2.5.8 - Function Calls

    +A function call in Lua has the following syntax: + +

    +	functioncall ::= prefixexp args
    +

    +In a function call, +first prefixexp and args are evaluated. +If the value of prefixexp has type function, +then this function is called +with the given arguments. +Otherwise, the prefixexp "call" metamethod is called, +having as first parameter the value of prefixexp, +followed by the original call arguments +(see §2.8). + + +

    +The form + +

    +	functioncall ::= prefixexp `:´ Name args
    +

    +can be used to call "methods". +A call v:name(args) +is syntactic sugar for v.name(v,args), +except that v is evaluated only once. + + +

    +Arguments have the following syntax: + +

    +	args ::= `(´ [explist1] `)´
    +	args ::= tableconstructor
    +	args ::= String
    +

    +All argument expressions are evaluated before the call. +A call of the form f{fields} is +syntactic sugar for f({fields}); +that is, the argument list is a single new table. +A call of the form f'string' +(or f"string" or f[[string]]) +is syntactic sugar for f('string'); +that is, the argument list is a single literal string. + + +

    +As an exception to the free-format syntax of Lua, +you cannot put a line break before the '(' in a function call. +This restriction avoids some ambiguities in the language. +If you write + +

    +     a = f
    +     (g).x(a)
    +

    +Lua would see that as a single statement, a = f(g).x(a). +So, if you want two statements, you must add a semi-colon between them. +If you actually want to call f, +you must remove the line break before (g). + + +

    +A call of the form return functioncall is called +a tail call. +Lua implements proper tail calls +(or proper tail recursion): +in a tail call, +the called function reuses the stack entry of the calling function. +Therefore, there is no limit on the number of nested tail calls that +a program can execute. +However, a tail call erases any debug information about the +calling function. +Note that a tail call only happens with a particular syntax, +where the return has one single function call as argument; +this syntax makes the calling function return exactly +the returns of the called function. +So, none of the following examples are tail calls: + +

    +     return (f(x))        -- results adjusted to 1
    +     return 2 * f(x)
    +     return x, f(x)       -- additional results
    +     f(x); return         -- results discarded
    +     return x or f(x)     -- results adjusted to 1
    +
    + + + + +

    2.5.9 - Function Definitions

    + +

    +The syntax for function definition is + +

    +	function ::= function funcbody
    +	funcbody ::= `(´ [parlist1] `)´ block end
    +
    + +

    +The following syntactic sugar simplifies function definitions: + +

    +	stat ::= function funcname funcbody
    +	stat ::= local function Name funcbody
    +	funcname ::= Name {`.´ Name} [`:´ Name]
    +

    +The statement + +

    +     function f () body end
    +

    +translates to + +

    +     f = function () body end
    +

    +The statement + +

    +     function t.a.b.c.f () body end
    +

    +translates to + +

    +     t.a.b.c.f = function () body end
    +

    +The statement + +

    +     local function f () body end
    +

    +translates to + +

    +     local f; f = function () body end
    +

    +not to + +

    +     local f = function () body end
    +

    +(This only makes a difference when the body of the function +contains references to f.) + + +

    +A function definition is an executable expression, +whose value has type function. +When Lua pre-compiles a chunk, +all its function bodies are pre-compiled too. +Then, whenever Lua executes the function definition, +the function is instantiated (or closed). +This function instance (or closure) +is the final value of the expression. +Different instances of the same function +may refer to different external local variables +and may have different environment tables. + + +

    +Parameters act as local variables that are +initialized with the argument values: + +

    +	parlist1 ::= namelist [`,´ `...´] | `...´
    +

    +When a function is called, +the list of arguments is adjusted to +the length of the list of parameters, +unless the function is a variadic or vararg function, +which is +indicated by three dots ('...') at the end of its parameter list. +A vararg function does not adjust its argument list; +instead, it collects all extra arguments and supplies them +to the function through a vararg expression, +which is also written as three dots. +The value of this expression is a list of all actual extra arguments, +similar to a function with multiple results. +If a vararg expression is used inside another expression +or in the middle of a list of expressions, +then its return list is adjusted to one element. +If the expression is used as the last element of a list of expressions, +then no adjustment is made +(unless the call is enclosed in parentheses). + + +

    +As an example, consider the following definitions: + +

    +     function f(a, b) end
    +     function g(a, b, ...) end
    +     function r() return 1,2,3 end
    +

    +Then, we have the following mapping from arguments to parameters and +to the vararg expression: + +

    +     CALL            PARAMETERS
    +     
    +     f(3)             a=3, b=nil
    +     f(3, 4)          a=3, b=4
    +     f(3, 4, 5)       a=3, b=4
    +     f(r(), 10)       a=1, b=10
    +     f(r())           a=1, b=2
    +     
    +     g(3)             a=3, b=nil, ... -->  (nothing)
    +     g(3, 4)          a=3, b=4,   ... -->  (nothing)
    +     g(3, 4, 5, 8)    a=3, b=4,   ... -->  5  8
    +     g(5, r())        a=5, b=1,   ... -->  2  3
    +
    + +

    +Results are returned using the return statement (see §2.4.4). +If control reaches the end of a function +without encountering a return statement, +then the function returns with no results. + + +

    +The colon syntax +is used for defining methods, +that is, functions that have an implicit extra parameter self. +Thus, the statement + +

    +     function t.a.b.c:f (params) body end
    +

    +is syntactic sugar for + +

    +     t.a.b.c.f = function (self, params) body end
    +
    + + + + + + +

    2.6 - Visibility Rules

    + +

    + +Lua is a lexically scoped language. +The scope of variables begins at the first statement after +their declaration and lasts until the end of the innermost block that +includes the declaration. +Consider the following example: + +

    +     x = 10                -- global variable
    +     do                    -- new block
    +       local x = x         -- new 'x', with value 10
    +       print(x)            --> 10
    +       x = x+1
    +       do                  -- another block
    +         local x = x+1     -- another 'x'
    +         print(x)          --> 12
    +       end
    +       print(x)            --> 11
    +     end
    +     print(x)              --> 10  (the global one)
    +
    + +

    +Notice that, in a declaration like local x = x, +the new x being declared is not in scope yet, +and so the second x refers to the outside variable. + + +

    +Because of the lexical scoping rules, +local variables can be freely accessed by functions +defined inside their scope. +A local variable used by an inner function is called +an upvalue, or external local variable, +inside the inner function. + + +

    +Notice that each execution of a local statement +defines new local variables. +Consider the following example: + +

    +     a = {}
    +     local x = 20
    +     for i=1,10 do
    +       local y = 0
    +       a[i] = function () y=y+1; return x+y end
    +     end
    +

    +The loop creates ten closures +(that is, ten instances of the anonymous function). +Each of these closures uses a different y variable, +while all of them share the same x. + + + + + +

    2.7 - Error Handling

    + +

    +Because Lua is an embedded extension language, +all Lua actions start from C code in the host program +calling a function from the Lua library (see lua_pcall). +Whenever an error occurs during Lua compilation or execution, +control returns to C, +which can take appropriate measures +(such as printing an error message). + + +

    +Lua code can explicitly generate an error by calling the +error function. +If you need to catch errors in Lua, +you can use the pcall function. + + + + + +

    2.8 - Metatables

    + +

    +Every value in Lua may have a metatable. +This metatable is an ordinary Lua table +that defines the behavior of the original value +under certain special operations. +You can change several aspects of the behavior +of operations over a value by setting specific fields in its metatable. +For instance, when a non-numeric value is the operand of an addition, +Lua checks for a function in the field "__add" in its metatable. +If it finds one, +Lua calls this function to perform the addition. + + +

    +We call the keys in a metatable events +and the values metamethods. +In the previous example, the event is "add" +and the metamethod is the function that performs the addition. + + +

    +You can query the metatable of any value +through the getmetatable function. + + +

    +You can replace the metatable of tables +through the setmetatable +function. +You cannot change the metatable of other types from Lua +(except using the debug library); +you must use the C API for that. + + +

    +Tables and userdata have individual metatables +(although multiple tables and userdata can share their metatables); +values of all other types share one single metatable per type. +So, there is one single metatable for all numbers, +and for all strings, etc. + + +

    +A metatable may control how an object behaves in arithmetic operations, +order comparisons, concatenation, length operation, and indexing. +A metatable can also define a function to be called when a userdata +is garbage collected. +For each of these operations Lua associates a specific key +called an event. +When Lua performs one of these operations over a value, +it checks whether this value has a metatable with the corresponding event. +If so, the value associated with that key (the metamethod) +controls how Lua will perform the operation. + + +

    +Metatables control the operations listed next. +Each operation is identified by its corresponding name. +The key for each operation is a string with its name prefixed by +two underscores, '__'; +for instance, the key for operation "add" is the +string "__add". +The semantics of these operations is better explained by a Lua function +describing how the interpreter executes the operation. + + +

    +The code shown here in Lua is only illustrative; +the real behavior is hard coded in the interpreter +and it is much more efficient than this simulation. +All functions used in these descriptions +(rawget, tonumber, etc.) +are described in §5.1. +In particular, to retrieve the metamethod of a given object, +we use the expression + +

    +     metatable(obj)[event]
    +

    +This should be read as + +

    +     rawget(getmetatable(obj) or {}, event)
    +

    + +That is, the access to a metamethod does not invoke other metamethods, +and the access to objects with no metatables does not fail +(it simply results in nil). + + + +

      + +
    • "add": +the + operation. + + + +

      +The function getbinhandler below defines how Lua chooses a handler +for a binary operation. +First, Lua tries the first operand. +If its type does not define a handler for the operation, +then Lua tries the second operand. + +

      +     function getbinhandler (op1, op2, event)
      +       return metatable(op1)[event] or metatable(op2)[event]
      +     end
      +

      +By using this function, +the behavior of the op1 + op2 is + +

      +     function add_event (op1, op2)
      +       local o1, o2 = tonumber(op1), tonumber(op2)
      +       if o1 and o2 then  -- both operands are numeric?
      +         return o1 + o2   -- '+' here is the primitive 'add'
      +       else  -- at least one of the operands is not numeric
      +         local h = getbinhandler(op1, op2, "__add")
      +         if h then
      +           -- call the handler with both operands
      +           return h(op1, op2)
      +         else  -- no handler available: default behavior
      +           error(···)
      +         end
      +       end
      +     end
      +

      +

    • + +
    • "sub": +the - operation. + +Behavior similar to the "add" operation. +
    • + +
    • "mul": +the * operation. + +Behavior similar to the "add" operation. +
    • + +
    • "div": +the / operation. + +Behavior similar to the "add" operation. +
    • + +
    • "mod": +the % operation. + +Behavior similar to the "add" operation, +with the operation +o1 - floor(o1/o2)*o2 as the primitive operation. +
    • + +
    • "pow": +the ^ (exponentiation) operation. + +Behavior similar to the "add" operation, +with the function pow (from the C math library) +as the primitive operation. +
    • + +
    • "unm": +the unary - operation. + + +
      +     function unm_event (op)
      +       local o = tonumber(op)
      +       if o then  -- operand is numeric?
      +         return -o  -- '-' here is the primitive 'unm'
      +       else  -- the operand is not numeric.
      +         -- Try to get a handler from the operand
      +         local h = metatable(op).__unm
      +         if h then
      +           -- call the handler with the operand
      +           return h(op)
      +         else  -- no handler available: default behavior
      +           error(···)
      +         end
      +       end
      +     end
      +

      +

    • + +
    • "concat": +the .. (concatenation) operation. + + +
      +     function concat_event (op1, op2)
      +       if (type(op1) == "string" or type(op1) == "number") and
      +          (type(op2) == "string" or type(op2) == "number") then
      +         return op1 .. op2  -- primitive string concatenation
      +       else
      +         local h = getbinhandler(op1, op2, "__concat")
      +         if h then
      +           return h(op1, op2)
      +         else
      +           error(···)
      +         end
      +       end
      +     end
      +

      +

    • + +
    • "len": +the # operation. + + +
      +     function len_event (op)
      +       if type(op) == "string" then
      +         return strlen(op)         -- primitive string length
      +       elseif type(op) == "table" then
      +         return #op                -- primitive table length
      +       else
      +         local h = metatable(op).__len
      +         if h then
      +           -- call the handler with the operand
      +           return h(op)
      +         else  -- no handler available: default behavior
      +           error(···)
      +         end
      +       end
      +     end
      +

      +See §2.5.5 for a description of the length of a table. +

    • + +
    • "eq": +the == operation. + +The function getcomphandler defines how Lua chooses a metamethod +for comparison operators. +A metamethod only is selected when both objects +being compared have the same type +and the same metamethod for the selected operation. + +
      +     function getcomphandler (op1, op2, event)
      +       if type(op1) ~= type(op2) then return nil end
      +       local mm1 = metatable(op1)[event]
      +       local mm2 = metatable(op2)[event]
      +       if mm1 == mm2 then return mm1 else return nil end
      +     end
      +

      +The "eq" event is defined as follows: + +

      +     function eq_event (op1, op2)
      +       if type(op1) ~= type(op2) then  -- different types?
      +         return false   -- different objects
      +       end
      +       if op1 == op2 then   -- primitive equal?
      +         return true   -- objects are equal
      +       end
      +       -- try metamethod
      +       local h = getcomphandler(op1, op2, "__eq")
      +       if h then
      +         return h(op1, op2)
      +       else
      +         return false
      +       end
      +     end
      +

      +a ~= b is equivalent to not (a == b). +

    • + +
    • "lt": +the < operation. + + +
      +     function lt_event (op1, op2)
      +       if type(op1) == "number" and type(op2) == "number" then
      +         return op1 < op2   -- numeric comparison
      +       elseif type(op1) == "string" and type(op2) == "string" then
      +         return op1 < op2   -- lexicographic comparison
      +       else
      +         local h = getcomphandler(op1, op2, "__lt")
      +         if h then
      +           return h(op1, op2)
      +         else
      +           error(···);
      +         end
      +       end
      +     end
      +

      +a > b is equivalent to b < a. +

    • + +
    • "le": +the <= operation. + + +
      +     function le_event (op1, op2)
      +       if type(op1) == "number" and type(op2) == "number" then
      +         return op1 <= op2   -- numeric comparison
      +       elseif type(op1) == "string" and type(op2) == "string" then
      +         return op1 <= op2   -- lexicographic comparison
      +       else
      +         local h = getcomphandler(op1, op2, "__le")
      +         if h then
      +           return h(op1, op2)
      +         else
      +           h = getcomphandler(op1, op2, "__lt")
      +           if h then
      +             return not h(op2, op1)
      +           else
      +             error(···);
      +           end
      +         end
      +       end
      +     end
      +

      +a >= b is equivalent to b <= a. +Note that, in the absence of a "le" metamethod, +Lua tries the "lt", assuming that a <= b is +equivalent to not (b < a). +

    • + +
    • "index": +The indexing access table[key]. + + +
      +     function gettable_event (table, key)
      +       local h
      +       if type(table) == "table" then
      +         local v = rawget(table, key)
      +         if v ~= nil then return v end
      +         h = metatable(table).__index
      +         if h == nil then return nil end
      +       else
      +         h = metatable(table).__index
      +         if h == nil then
      +           error(···);
      +         end
      +       end
      +       if type(h) == "function" then
      +         return h(table, key)      -- call the handler
      +       else return h[key]          -- or repeat operation on it
      +       end
      +     end
      +

      +

    • + +
    • "newindex": +The indexing assignment table[key] = value. + + +
      +     function settable_event (table, key, value)
      +       local h
      +       if type(table) == "table" then
      +         local v = rawget(table, key)
      +         if v ~= nil then rawset(table, key, value); return end
      +         h = metatable(table).__newindex
      +         if h == nil then rawset(table, key, value); return end
      +       else
      +         h = metatable(table).__newindex
      +         if h == nil then
      +           error(···);
      +         end
      +       end
      +       if type(h) == "function" then
      +         return h(table, key,value)    -- call the handler
      +       else h[key] = value             -- or repeat operation on it
      +       end
      +     end
      +

      +

    • + +
    • "call": +called when Lua calls a value. + + +
      +     function function_event (func, ...)
      +       if type(func) == "function" then
      +         return func(...)   -- primitive call
      +       else
      +         local h = metatable(func).__call
      +         if h then
      +           return h(func, ...)
      +         else
      +           error(···)
      +         end
      +       end
      +     end
      +

      +

    • + +
    + + + + +

    2.9 - Environments

    + +

    +Besides metatables, +objects of types thread, function, and userdata +have another table associated with them, +called their environment. +Like metatables, environments are regular tables and +multiple objects can share the same environment. + + +

    +Environments associated with userdata have no meaning for Lua. +It is only a convenience feature for programmers to associate a table to +a userdata. + + +

    +Environments associated with threads are called +global environments. +They are used as the default environment for their threads and +non-nested functions created by the thread +(through loadfile, loadstring or load) +and can be directly accessed by C code (see §3.3). + + +

    +Environments associated with C functions can be directly +accessed by C code (see §3.3). +They are used as the default environment for other C functions +created by the function. + + +

    +Environments associated with Lua functions are used to resolve +all accesses to global variables within the function (see §2.3). +They are used as the default environment for other Lua functions +created by the function. + + +

    +You can change the environment of a Lua function or the +running thread by calling setfenv. +You can get the environment of a Lua function or the running thread +by calling getfenv. +To manipulate the environment of other objects +(userdata, C functions, other threads) you must +use the C API. + + + + + +

    2.10 - Garbage Collection

    + +

    +Lua performs automatic memory management. +This means that +you have to worry neither about allocating memory for new objects +nor about freeing it when the objects are no longer needed. +Lua manages memory automatically by running +a garbage collector from time to time +to collect all dead objects +(that is, these objects that are no longer accessible from Lua). +All objects in Lua are subject to automatic management: +tables, userdata, functions, threads, and strings. + + +

    +Lua implements an incremental mark-and-sweep collector. +It uses two numbers to control its garbage-collection cycles: +the garbage-collector pause and +the garbage-collector step multiplier. + + +

    +The garbage-collector pause +controls how long the collector waits before starting a new cycle. +Larger values make the collector less aggressive. +Values smaller than 1 mean the collector will not wait to +start a new cycle. +A value of 2 means that the collector waits for the total memory in use +to double before starting a new cycle. + + +

    +The step multiplier +controls the relative speed of the collector relative to +memory allocation. +Larger values make the collector more aggressive but also increase +the size of each incremental step. +Values smaller than 1 make the collector too slow and +may result in the collector never finishing a cycle. +The default, 2, means that the collector runs at "twice" +the speed of memory allocation. + + +

    +You can change these numbers by calling lua_gc in C +or collectgarbage in Lua. +Both get percentage points as arguments +(so an argument of 100 means a real value of 1). +With these functions you can also control +the collector directly (e.g., stop and restart it). + + + +

    2.10.1 - Garbage-Collection Metamethods

    + +

    +Using the C API, +you can set garbage-collector metamethods for userdata (see §2.8). +These metamethods are also called finalizers. +Finalizers allow you to coordinate Lua's garbage collection +with external resource management +(such as closing files, network or database connections, +or freeing your own memory). + + +

    +Garbage userdata with a field __gc in their metatables are not +collected immediately by the garbage collector. +Instead, Lua puts them in a list. +After the collection, +Lua does the equivalent of the following function +for each userdata in that list: + +

    +     function gc_event (udata)
    +       local h = metatable(udata).__gc
    +       if h then
    +         h(udata)
    +       end
    +     end
    +
    + +

    +At the end of each garbage-collection cycle, +the finalizers for userdata are called in reverse +order of their creation, +among those collected in that cycle. +That is, the first finalizer to be called is the one associated +with the userdata created last in the program. + + + + + +

    2.10.2 - Weak Tables

    + +

    +A weak table is a table whose elements are +weak references. +A weak reference is ignored by the garbage collector. +In other words, +if the only references to an object are weak references, +then the garbage collector will collect this object. + + +

    +A weak table can have weak keys, weak values, or both. +A table with weak keys allows the collection of its keys, +but prevents the collection of its values. +A table with both weak keys and weak values allows the collection of +both keys and values. +In any case, if either the key or the value is collected, +the whole pair is removed from the table. +The weakness of a table is controlled by the +__mode field of its metatable. +If the __mode field is a string containing the character 'k', +the keys in the table are weak. +If __mode contains 'v', +the values in the table are weak. + + +

    +After you use a table as a metatable, +you should not change the value of its field __mode. +Otherwise, the weak behavior of the tables controlled by this +metatable is undefined. + + + + + + + +

    2.11 - Coroutines

    + +

    +Lua supports coroutines, +also called collaborative multithreading. +A coroutine in Lua represents an independent thread of execution. +Unlike threads in multithread systems, however, +a coroutine only suspends its execution by explicitly calling +a yield function. + + +

    +You create a coroutine with a call to coroutine.create. +Its sole argument is a function +that is the main function of the coroutine. +The create function only creates a new coroutine and +returns a handle to it (an object of type thread); +it does not start the coroutine execution. + + +

    +When you first call coroutine.resume, +passing as its first argument +the thread returned by coroutine.create, +the coroutine starts its execution, +at the first line of its main function. +Extra arguments passed to coroutine.resume are passed on +to the coroutine main function. +After the coroutine starts running, +it runs until it terminates or yields. + + +

    +A coroutine can terminate its execution in two ways: +normally, when its main function returns +(explicitly or implicitly, after the last instruction); +and abnormally, if there is an unprotected error. +In the first case, coroutine.resume returns true, +plus any values returned by the coroutine main function. +In case of errors, coroutine.resume returns false +plus an error message. + + +

    +A coroutine yields by calling coroutine.yield. +When a coroutine yields, +the corresponding coroutine.resume returns immediately, +even if the yield happens inside nested function calls +(that is, not in the main function, +but in a function directly or indirectly called by the main function). +In the case of a yield, coroutine.resume also returns true, +plus any values passed to coroutine.yield. +The next time you resume the same coroutine, +it continues its execution from the point where it yielded, +with the call to coroutine.yield returning any extra +arguments passed to coroutine.resume. + + +

    +Like coroutine.create, +the coroutine.wrap function also creates a coroutine, +but instead of returning the coroutine itself, +it returns a function that, when called, resumes the coroutine. +Any arguments passed to this function +go as extra arguments to coroutine.resume. +coroutine.wrap returns all the values returned by coroutine.resume, +except the first one (the boolean error code). +Unlike coroutine.resume, +coroutine.wrap does not catch errors; +any error is propagated to the caller. + + +

    +As an example, +consider the following code: + +

    +     function foo (a)
    +       print("foo", a)
    +       return coroutine.yield(2*a)
    +     end
    +     
    +     co = coroutine.create(function (a,b)
    +           print("co-body", a, b)
    +           local r = foo(a+1)
    +           print("co-body", r)
    +           local r, s = coroutine.yield(a+b, a-b)
    +           print("co-body", r, s)
    +           return b, "end"
    +     end)
    +            
    +     print("main", coroutine.resume(co, 1, 10))
    +     print("main", coroutine.resume(co, "r"))
    +     print("main", coroutine.resume(co, "x", "y"))
    +     print("main", coroutine.resume(co, "x", "y"))
    +

    +When you run it, it produces the following output: + +

    +     co-body 1       10
    +     foo     2
    +     
    +     main    true    4
    +     co-body r
    +     main    true    11      -9
    +     co-body x       y
    +     main    true    10      end
    +     main    false   cannot resume dead coroutine
    +
    + + + + +

    3 - The Application Program Interface

    + +

    + +This section describes the C API for Lua, that is, +the set of C functions available to the host program to communicate +with Lua. +All API functions and related types and constants +are declared in the header file lua.h. + + +

    +Even when we use the term "function", +any facility in the API may be provided as a macro instead. +All such macros use each of their arguments exactly once +(except for the first argument, which is always a Lua state), +and so do not generate any hidden side-effects. + + +

    +As in most C libraries, +the Lua API functions do not check their arguments for validity or consistency. +However, you can change this behavior by compiling Lua +with a proper definition for the macro luai_apicheck, +in file luaconf.h. + + + +

    3.1 - The Stack

    + +

    +Lua uses a virtual stack to pass values to and from C. +Each element in this stack represents a Lua value +(nil, number, string, etc.). + + +

    +Whenever Lua calls C, the called function gets a new stack, +which is independent of previous stacks and of stacks of +C functions that are still active. +This stack initially contains any arguments to the C function +and it is where the C function pushes its results +to be returned to the caller (see lua_CFunction). + + +

    +For convenience, +most query operations in the API do not follow a strict stack discipline. +Instead, they can refer to any element in the stack +by using an index: +A positive index represents an absolute stack position +(starting at 1); +a negative index represents an offset relative to the top of the stack. +More specifically, if the stack has n elements, +then index 1 represents the first element +(that is, the element that was pushed onto the stack first) +and +index n represents the last element; +index -1 also represents the last element +(that is, the element at the top) +and index -n represents the first element. +We say that an index is valid +if it lies between 1 and the stack top +(that is, if 1 ≤ abs(index) ≤ top). + + + + + + +

    3.2 - Stack Size

    + +

    +When you interact with Lua API, +you are responsible for ensuring consistency. +In particular, +you are responsible for controlling stack overflow. +You can use the function lua_checkstack +to grow the stack size. + + +

    +Whenever Lua calls C, +it ensures that at least LUA_MINSTACK stack positions are available. +LUA_MINSTACK is defined as 20, +so that usually you do not have to worry about stack space +unless your code has loops pushing elements onto the stack. + + +

    +Most query functions accept as indices any value inside the +available stack space, that is, indices up to the maximum stack size +you have set through lua_checkstack. +Such indices are called acceptable indices. +More formally, we define an acceptable index +as follows: + +

    +     (index < 0 && abs(index) <= top) ||
    +     (index > 0 && index <= stackspace)
    +

    +Note that 0 is never an acceptable index. + + + + + +

    3.3 - Pseudo-Indices

    + +

    +Unless otherwise noted, +any function that accepts valid indices can also be called with +pseudo-indices, +which represent some Lua values that are accessible to C code +but which are not in the stack. +Pseudo-indices are used to access the thread environment, +the function environment, +the registry, +and the upvalues of a C function (see §3.4). + + +

    +The thread environment (where global variables live) is +always at pseudo-index LUA_GLOBALSINDEX. +The environment of the running C function is always +at pseudo-index LUA_ENVIRONINDEX. + + +

    +To access and change the value of global variables, +you can use regular table operations over an environment table. +For instance, to access the value of a global variable, do + +

    +     lua_getfield(L, LUA_GLOBALSINDEX, varname);
    +
    + + + + +

    3.4 - C Closures

    + +

    +When a C function is created, +it is possible to associate some values with it, +thus creating a C closure; +these values are called upvalues and are +accessible to the function whenever it is called +(see lua_pushcclosure). + + +

    +Whenever a C function is called, +its upvalues are located at specific pseudo-indices. +These pseudo-indices are produced by the macro +lua_upvalueindex. +The first value associated with a function is at position +lua_upvalueindex(1), and so on. +Any access to lua_upvalueindex(n), +where n is greater than the number of upvalues of the +current function, +produces an acceptable (but invalid) index. + + + + + +

    3.5 - Registry

    + +

    +Lua provides a registry, +a pre-defined table that can be used by any C code to +store whatever Lua value it needs to store. +This table is always located at pseudo-index +LUA_REGISTRYINDEX. +Any C library can store data into this table, +but it should take care to choose keys different from those used +by other libraries, to avoid collisions. +Typically, you should use as key a string containing your library name +or a light userdata with the address of a C object in your code. + + +

    +The integer keys in the registry are used by the reference mechanism, +implemented by the auxiliary library, +and therefore should not be used for other purposes. + + + + + +

    3.6 - Error Handling in C

    + +

    +Internally, Lua uses the C longjmp facility to handle errors. +(You can also choose to use exceptions if you use C++; +see file luaconf.h.) +When Lua faces any error +(such as memory allocation errors, type errors, syntax errors, +and runtime errors) +it raises an error; +that is, it does a long jump. +A protected environment uses setjmp +to set a recover point; +any error jumps to the most recent active recover point. + + +

    +Almost any function in the API may raise an error, +for instance due to a memory allocation error. +The following functions run in protected mode +(that is, they create a protected environment to run), +so they never raise an error: +lua_newstate, lua_close, lua_load, +lua_pcall, and lua_cpcall. + + +

    +Inside a C function you can raise an error by calling lua_error. + + + + + +

    3.7 - Functions and Types

    + +

    +Here we list all functions and types from the C API in +alphabetical order. + + + +


    lua_Alloc

    +
    typedef void * (*lua_Alloc) (void *ud,
    +                             void *ptr,
    +                             size_t osize,
    +                             size_t nsize);
    + +

    +The type of the memory-allocation function used by Lua states. +The allocator function must provide a +functionality similar to realloc, +but not exactly the same. +Its arguments are +ud, an opaque pointer passed to lua_newstate; +ptr, a pointer to the block being allocated/reallocated/freed; +osize, the original size of the block; +nsize, the new size of the block. +ptr is NULL if and only if osize is zero. +When nsize is zero, the allocator must return NULL; +if osize is not zero, +it should free the block pointed to by ptr. +When nsize is not zero, the allocator returns NULL +if and only if it cannot fill the request. +When nsize is not zero and osize is zero, +the allocator should behave like malloc. +When nsize and osize are not zero, +the allocator behaves like realloc. +Lua assumes that the allocator never fails when +osize >= nsize. + + +

    +Here is a simple implementation for the allocator function. +It is used in the auxiliary library by luaL_newstate. + +

    +     static void *l_alloc (void *ud, void *ptr, size_t osize,
    +                                                size_t nsize) {
    +       (void)ud;  (void)osize;  /* not used */
    +       if (nsize == 0) {
    +         free(ptr);
    +         return NULL;
    +       }
    +       else
    +         return realloc(ptr, nsize);
    +     }
    +

    +This code assumes +that free(NULL) has no effect and that +realloc(NULL, size) is equivalent to malloc(size). +ANSI C ensures both behaviors. + + + + + +


    lua_atpanic

    +
    lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);
    + +

    +Sets a new panic function and returns the old one. + + +

    +If an error happens outside any protected environment, +Lua calls a panic function +and then calls exit(EXIT_FAILURE), +thus exiting the host application. +Your panic function may avoid this exit by +never returning (e.g., doing a long jump). + + +

    +The panic function can access the error message at the top of the stack. + + + + + +


    lua_call

    +
    void lua_call (lua_State *L, int nargs, int nresults);
    + +

    +Calls a function. + + +

    +To call a function you must use the following protocol: +first, the function to be called is pushed onto the stack; +then, the arguments to the function are pushed +in direct order; +that is, the first argument is pushed first. +Finally you call lua_call; +nargs is the number of arguments that you pushed onto the stack. +All arguments and the function value are popped from the stack +when the function is called. +The function results are pushed onto the stack when the function returns. +The number of results is adjusted to nresults, +unless nresults is LUA_MULTRET. +In this case, all results from the function are pushed. +Lua takes care that the returned values fit into the stack space. +The function results are pushed onto the stack in direct order +(the first result is pushed first), +so that after the call the last result is on the top of the stack. + + +

    +Any error inside the called function is propagated upwards +(with a longjmp). + + +

    +The following example shows how the host program may do the +equivalent to this Lua code: + +

    +     a = f("how", t.x, 14)
    +

    +Here it is in C: + +

    +     lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* function to be called */
    +     lua_pushstring(L, "how");                        /* 1st argument */
    +     lua_getfield(L, LUA_GLOBALSINDEX, "t");   /* table to be indexed */
    +     lua_getfield(L, -1, "x");        /* push result of t.x (2nd arg) */
    +     lua_remove(L, -2);                  /* remove 't' from the stack */
    +     lua_pushinteger(L, 14);                          /* 3rd argument */
    +     lua_call(L, 3, 1);     /* call 'f' with 3 arguments and 1 result */
    +     lua_setfield(L, LUA_GLOBALSINDEX, "a");        /* set global 'a' */
    +

    +Note that the code above is "balanced": +at its end, the stack is back to its original configuration. +This is considered good programming practice. + + + + + +


    lua_CFunction

    +
    typedef int (*lua_CFunction) (lua_State *L);
    + +

    +Type for C functions. + + +

    +In order to communicate properly with Lua, +a C function must use the following protocol, +which defines the way parameters and results are passed: +a C function receives its arguments from Lua in its stack +in direct order (the first argument is pushed first). +So, when the function starts, +lua_gettop(L) returns the number of arguments received by the function. +The first argument (if any) is at index 1 +and its last argument is at index lua_gettop(L). +To return values to Lua, a C function just pushes them onto the stack, +in direct order (the first result is pushed first), +and returns the number of results. +Any other value in the stack below the results will be properly +discarded by Lua. +Like a Lua function, a C function called by Lua can also return +many results. + + +

    +As an example, the following function receives a variable number +of numerical arguments and returns their average and sum: + +

    +     static int foo (lua_State *L) {
    +       int n = lua_gettop(L);    /* number of arguments */
    +       lua_Number sum = 0;
    +       int i;
    +       for (i = 1; i <= n; i++) {
    +         if (!lua_isnumber(L, i)) {
    +           lua_pushstring(L, "incorrect argument");
    +           lua_error(L);
    +         }
    +         sum += lua_tonumber(L, i);
    +       }
    +       lua_pushnumber(L, sum/n);        /* first result */
    +       lua_pushnumber(L, sum);         /* second result */
    +       return 2;                   /* number of results */
    +     }
    +
    + + + + +

    lua_checkstack

    +
    int lua_checkstack (lua_State *L, int extra);
    + +

    +Ensures that there are at least extra free stack slots in the stack. +It returns false if it cannot grow the stack to that size. +This function never shrinks the stack; +if the stack is already larger than the new size, +it is left unchanged. + + + + + +


    lua_close

    +
    void lua_close (lua_State *L);
    + +

    +Destroys all objects in the given Lua state +(calling the corresponding garbage-collection metamethods, if any) +and frees all dynamic memory used by this state. +On several platforms, you may not need to call this function, +because all resources are naturally released when the host program ends. +On the other hand, long-running programs, +such as a daemon or a web server, +might need to release states as soon as they are not needed, +to avoid growing too large. + + + + + +


    lua_concat

    +
    void lua_concat (lua_State *L, int n);
    + +

    +Concatenates the n values at the top of the stack, +pops them, and leaves the result at the top. +If n is 1, the result is the single string on the stack +(that is, the function does nothing); +if n is 0, the result is the empty string. +Concatenation is done following the usual semantics of Lua +(see §2.5.4). + + + + + +


    lua_cpcall

    +
    int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);
    + +

    +Calls the C function func in protected mode. +func starts with only one element in its stack, +a light userdata containing ud. +In case of errors, +lua_cpcall returns the same error codes as lua_pcall, +plus the error object on the top of the stack; +otherwise, it returns zero, and does not change the stack. +All values returned by func are discarded. + + + + + +


    lua_createtable

    +
    void lua_createtable (lua_State *L, int narr, int nrec);
    + +

    +Creates a new empty table and pushes it onto the stack. +The new table has space pre-allocated +for narr array elements and nrec non-array elements. +This pre-allocation is useful when you know exactly how many elements +the table will have. +Otherwise you can use the function lua_newtable. + + + + + +


    lua_dump

    +
    int lua_dump (lua_State *L, lua_Writer writer, void *data);
    + +

    +Dumps a function as a binary chunk. +Receives a Lua function on the top of the stack +and produces a binary chunk that, +if loaded again, +results in a function equivalent to the one dumped. +As it produces parts of the chunk, +lua_dump calls function writer (see lua_Writer) +with the given data +to write them. + + +

    +The value returned is the error code returned by the last +call to the writer; +0 means no errors. + + +

    +This function does not pop the Lua function from the stack. + + + + + +


    lua_equal

    +
    int lua_equal (lua_State *L, int index1, int index2);
    + +

    +Returns 1 if the two values in acceptable indices index1 and +index2 are equal, +following the semantics of the Lua == operator +(that is, may call metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices is non valid. + + + + + +


    lua_error

    +
    int lua_error (lua_State *L);
    + +

    +Generates a Lua error. +The error message (which can actually be a Lua value of any type) +must be on the stack top. +This function does a long jump, +and therefore never returns. +(see luaL_error). + + + + + +


    lua_gc

    +
    int lua_gc (lua_State *L, int what, int data);
    + +

    +Controls the garbage collector. + + +

    +This function performs several tasks, +according to the value of the parameter what: + +

      + +
    • LUA_GCSTOP: +stops the garbage collector. +
    • + +
    • LUA_GCRESTART: +restarts the garbage collector. +
    • + +
    • LUA_GCCOLLECT: +performs a full garbage-collection cycle. +
    • + +
    • LUA_GCCOUNT: +returns the current amount of memory (in Kbytes) in use by Lua. +
    • + +
    • LUA_GCCOUNTB: +returns the remainder of dividing the current amount of bytes of +memory in use by Lua by 1024. +
    • + +
    • LUA_GCSTEP: +performs an incremental step of garbage collection. +The step "size" is controlled by data +(larger values mean more steps) in a non-specified way. +If you want to control the step size +you must experimentally tune the value of data. +The function returns 1 if the step finished a +garbage-collection cycle. +
    • + +
    • LUA_GCSETPAUSE: +sets data/100 as the new value +for the pause of the collector (see §2.10). +The function returns the previous value of the pause. +
    • + +
    • LUA_GCSETSTEPMUL: +sets data/100 as the new value for the step multiplier of +the collector (see §2.10). +The function returns the previous value of the step multiplier. +
    • + +
    + + + + +

    lua_getallocf

    +
    lua_Alloc lua_getallocf (lua_State *L, void **ud);
    + +

    +Returns the memory-allocation function of a given state. +If ud is not NULL, Lua stores in *ud the +opaque pointer passed to lua_newstate. + + + + + +


    lua_getfenv

    +
    void lua_getfenv (lua_State *L, int index);
    + +

    +Pushes onto the stack the environment table of +the value at the given index. + + + + + +


    lua_getfield

    +
    void lua_getfield (lua_State *L, int index, const char *k);
    + +

    +Pushes onto the stack the value t[k], +where t is the value at the given valid index index. +As in Lua, this function may trigger a metamethod +for the "index" event (see §2.8). + + + + + +


    lua_getglobal

    +
    void lua_getglobal (lua_State *L, const char *name);
    + +

    +Pushes onto the stack the value of the global name. +It is defined as a macro: + +

    +     #define lua_getglobal(L,s)  lua_getfield(L, LUA_GLOBALSINDEX, s)
    +
    + + + + +

    lua_getmetatable

    +
    int lua_getmetatable (lua_State *L, int index);
    + +

    +Pushes onto the stack the metatable of the value at the given +acceptable index. +If the index is not valid, +or if the value does not have a metatable, +the function returns 0 and pushes nothing on the stack. + + + + + +


    lua_gettable

    +
    void lua_gettable (lua_State *L, int index);
    + +

    +Pushes onto the stack the value t[k], +where t is the value at the given valid index index +and k is the value at the top of the stack. + + +

    +This function pops the key from the stack +(putting the resulting value in its place). +As in Lua, this function may trigger a metamethod +for the "index" event (see §2.8). + + + + + +


    lua_gettop

    +
    int lua_gettop (lua_State *L);
    + +

    +Returns the index of the top element in the stack. +Because indices start at 1, +this result is equal to the number of elements in the stack +(and so 0 means an empty stack). + + + + + +


    lua_insert

    +
    void lua_insert (lua_State *L, int index);
    + +

    +Moves the top element into the given valid index, +shifting up the elements above this index to open space. +Cannot be called with a pseudo-index, +because a pseudo-index is not an actual stack position. + + + + + +


    lua_Integer

    +
    typedef ptrdiff_t lua_Integer;
    + +

    +The type used by the Lua API to represent integral values. + + +

    +By default it is a ptrdiff_t, +which is usually the largest signed integral type the machine handles +"comfortably". + + + + + +


    lua_isboolean

    +
    int lua_isboolean (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index has type boolean, +and 0 otherwise. + + + + + +


    lua_iscfunction

    +
    int lua_iscfunction (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index is a C function, +and 0 otherwise. + + + + + +


    lua_isfunction

    +
    int lua_isfunction (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index is a function +(either C or Lua), and 0 otherwise. + + + + + +


    lua_islightuserdata

    +
    int lua_islightuserdata (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index is a light userdata, +and 0 otherwise. + + + + + +


    lua_isnil

    +
    int lua_isnil (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index is nil, +and 0 otherwise. + + + + + +


    lua_isnone

    +
    int lua_isnone (lua_State *L, int index);
    + +

    +Returns 1 if the the given acceptable index is not valid +(that is, it refers to an element outside the current stack), +and 0 otherwise. + + + + + +


    lua_isnoneornil

    +
    int lua_isnoneornil (lua_State *L, int index);
    + +

    +Returns 1 if the the given acceptable index is not valid +(that is, it refers to an element outside the current stack) +or if the value at this index is nil, +and 0 otherwise. + + + + + +


    lua_isnumber

    +
    int lua_isnumber (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index is a number +or a string convertible to a number, +and 0 otherwise. + + + + + +


    lua_isstring

    +
    int lua_isstring (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index is a string +or a number (which is always convertible to a string), +and 0 otherwise. + + + + + +


    lua_istable

    +
    int lua_istable (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index is a table, +and 0 otherwise. + + + + + +


    lua_isthread

    +
    int lua_isthread (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index is a thread, +and 0 otherwise. + + + + + +


    lua_isuserdata

    +
    int lua_isuserdata (lua_State *L, int index);
    + +

    +Returns 1 if the value at the given acceptable index is a userdata +(either full or light), and 0 otherwise. + + + + + +


    lua_lessthan

    +
    int lua_lessthan (lua_State *L, int index1, int index2);
    + +

    +Returns 1 if the value at acceptable index index1 is smaller +than the value at acceptable index index2, +following the semantics of the Lua < operator +(that is, may call metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices is non valid. + + + + + +


    lua_load

    +
    int lua_load (lua_State *L,
    +              lua_Reader reader,
    +              void *data,
    +              const char *chunkname);
    + +

    +Loads a Lua chunk. +If there are no errors, +lua_load pushes the compiled chunk as a Lua +function on top of the stack. +Otherwise, it pushes an error message. +The return values of lua_load are: + +

      + +
    • 0: no errors;
    • + +
    • LUA_ERRSYNTAX: +syntax error during pre-compilation;
    • + +
    • LUA_ERRMEM: +memory allocation error.
    • + +
    + +

    +This function only loads a chunk; +it does not run it. + + +

    +lua_load automatically detects whether the chunk is text or binary, +and loads it accordingly (see program luac). + + +

    +The lua_load function uses a user-supplied reader function +to read the chunk (see lua_Reader). +The data argument is an opaque value passed to the reader function. + + +

    +The chunkname argument gives a name to the chunk, +which is used for error messages and in debug information (see §3.8). + + + + + +


    lua_newstate

    +
    lua_State *lua_newstate (lua_Alloc f, void *ud);
    + +

    +Creates a new, independent state. +Returns NULL if cannot create the state +(due to lack of memory). +The argument f is the allocator function; +Lua does all memory allocation for this state through this function. +The second argument, ud, is an opaque pointer that Lua +simply passes to the allocator in every call. + + + + + +


    lua_newtable

    +
    void lua_newtable (lua_State *L);
    + +

    +Creates a new empty table and pushes it onto the stack. +It is equivalent to lua_createtable(L, 0, 0). + + + + + +


    lua_newthread

    +
    lua_State *lua_newthread (lua_State *L);
    + +

    +Creates a new thread, pushes it on the stack, +and returns a pointer to a lua_State that represents this new thread. +The new state returned by this function shares with the original state +all global objects (such as tables), +but has an independent execution stack. + + +

    +There is no explicit function to close or to destroy a thread. +Threads are subject to garbage collection, +like any Lua object. + + + + + +


    lua_newuserdata

    +
    void *lua_newuserdata (lua_State *L, size_t size);
    + +

    +This function allocates a new block of memory with the given size, +pushes onto the stack a new full userdata with the block address, +and returns this address. + + +

    +Userdata represent C values in Lua. +A full userdata represents a block of memory. +It is an object (like a table): +you must create it, it can have its own metatable, +and you can detect when it is being collected. +A full userdata is only equal to itself (under raw equality). + + +

    +When Lua collects a full userdata with a gc metamethod, +Lua calls the metamethod and marks the userdata as finalized. +When this userdata is collected again then +Lua frees its corresponding memory. + + + + + +


    lua_next

    +
    int lua_next (lua_State *L, int index);
    + +

    +Pops a key from the stack, +and pushes a key-value pair from the table at the given index +(the "next" pair after the given key). +If there are no more elements in the table, +then lua_next returns 0 (and pushes nothing). + + +

    +A typical traversal looks like this: + +

    +     /* table is in the stack at index 't' */
    +     lua_pushnil(L);  /* first key */
    +     while (lua_next(L, t) != 0) {
    +       /* uses 'key' (at index -2) and 'value' (at index -1) */
    +       printf("%s - %s\n",
    +              lua_typename(L, lua_type(L, -2)),
    +              lua_typename(L, lua_type(L, -1)));
    +       /* removes 'value'; keeps 'key' for next iteration */
    +       lua_pop(L, 1);
    +     }
    +
    + +

    +While traversing a table, +do not call lua_tolstring directly on a key, +unless you know that the key is actually a string. +Recall that lua_tolstring changes +the value at the given index; +this confuses the next call to lua_next. + + + + + +


    lua_Number

    +
    typedef double lua_Number;
    + +

    +The type of numbers in Lua. +By default, it is double, but that can be changed in luaconf.h. + + +

    +Through the configuration file you can change +Lua to operate with another type for numbers (e.g., float or long). + + + + + +


    lua_objlen

    +
    size_t lua_objlen (lua_State *L, int index);
    + +

    +Returns the "length" of the value at the given acceptable index: +for strings, this is the string length; +for tables, this is the result of the length operator ('#'); +for userdata, this is the size of the block of memory allocated +for the userdata; +for other values, it is 0. + + + + + +


    lua_pcall

    +
    int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);
    + +

    +Calls a function in protected mode. + + +

    +Both nargs and nresults have the same meaning as +in lua_call. +If there are no errors during the call, +lua_pcall behaves exactly like lua_call. +However, if there is any error, +lua_pcall catches it, +pushes a single value on the stack (the error message), +and returns an error code. +Like lua_call, +lua_pcall always removes the function +and its arguments from the stack. + + +

    +If errfunc is 0, +then the error message returned on the stack +is exactly the original error message. +Otherwise, errfunc is the stack index of an +error handler function. +(In the current implementation, this index cannot be a pseudo-index.) +In case of runtime errors, +this function will be called with the error message +and its return value will be the message returned on the stack by lua_pcall. + + +

    +Typically, the error handler function is used to add more debug +information to the error message, such as a stack traceback. +Such information cannot be gathered after the return of lua_pcall, +since by then the stack has unwound. + + +

    +The lua_pcall function returns 0 in case of success +or one of the following error codes +(defined in lua.h): + +

      + +
    • LUA_ERRRUN: +a runtime error. +
    • + +
    • LUA_ERRMEM: +memory allocation error. +For such errors, Lua does not call the error handler function. +
    • + +
    • LUA_ERRERR: +error while running the error handler function. +
    • + +
    + + + + +

    lua_pop

    +
    void lua_pop (lua_State *L, int n);
    + +

    +Pops n elements from the stack. + + + + + +


    lua_pushboolean

    +
    void lua_pushboolean (lua_State *L, int b);
    + +

    +Pushes a boolean value with value b onto the stack. + + + + + +


    lua_pushcclosure

    +
    void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
    + +

    +Pushes a new C closure onto the stack. + + +

    +When a C function is created, +it is possible to associate some values with it, +thus creating a C closure (see §3.4); +these values are then accessible to the function whenever it is called. +To associate values with a C function, +first these values should be pushed onto the stack +(when there are multiple values, the first value is pushed first). +Then lua_pushcclosure +is called to create and push the C function onto the stack, +with the argument n telling how many values should be +associated with the function. +lua_pushcclosure also pops these values from the stack. + + + + + +


    lua_pushcfunction

    +
    void lua_pushcfunction (lua_State *L, lua_CFunction f);
    + +

    +Pushes a C function onto the stack. +This function receives a pointer to a C function +and pushes onto the stack a Lua value of type function that, +when called, invokes the corresponding C function. + + +

    +Any function to be registered in Lua must +follow the correct protocol to receive its parameters +and return its results (see lua_CFunction). + + +

    +lua_pushcfunction is defined as a macro: + +

    +     #define lua_pushcfunction(L,f)  lua_pushcclosure(L,f,0)
    +
    + + + + +

    lua_pushfstring

    +
    const char *lua_pushfstring (lua_State *L, const char *fmt, ...);
    + +

    +Pushes onto the stack a formatted string +and returns a pointer to this string. +It is similar to the C function sprintf, +but has some important differences: + +

      + +
    • +You do not have to allocate space for the result: +the result is a Lua string and Lua takes care of memory allocation +(and deallocation, through garbage collection). +
    • + +
    • +The conversion specifiers are quite restricted. +There are no flags, widths, or precisions. +The conversion specifiers can only be +'%%' (inserts a '%' in the string), +'%s' (inserts a zero-terminated string, with no size restrictions), +'%f' (inserts a lua_Number), +'%p' (inserts a pointer as a hexadecimal numeral), +'%d' (inserts an int), and +'%c' (inserts an int as a character). +
    • + +
    + + + + +

    lua_pushinteger

    +
    void lua_pushinteger (lua_State *L, lua_Integer n);
    + +

    +Pushes a number with value n onto the stack. + + + + + +


    lua_pushlightuserdata

    +
    void lua_pushlightuserdata (lua_State *L, void *p);
    + +

    +Pushes a light userdata onto the stack. + + +

    +Userdata represent C values in Lua. +A light userdata represents a pointer. +It is a value (like a number): +you do not create it, it has no individual metatable, +and it is not collected (as it was never created). +A light userdata is equal to "any" +light userdata with the same C address. + + + + + +


    lua_pushlstring

    +
    void lua_pushlstring (lua_State *L, const char *s, size_t len);
    + +

    +Pushes the string pointed to by s with size len +onto the stack. +Lua makes (or reuses) an internal copy of the given string, +so the memory at s can be freed or reused immediately after +the function returns. +The string can contain embedded zeros. + + + + + +


    lua_pushnil

    +
    void lua_pushnil (lua_State *L);
    + +

    +Pushes a nil value onto the stack. + + + + + +


    lua_pushnumber

    +
    void lua_pushnumber (lua_State *L, lua_Number n);
    + +

    +Pushes a number with value n onto the stack. + + + + + +


    lua_pushstring

    +
    void lua_pushstring (lua_State *L, const char *s);
    + +

    +Pushes the zero-terminated string pointed to by s +onto the stack. +Lua makes (or reuses) an internal copy of the given string, +so the memory at s can be freed or reused immediately after +the function returns. +The string cannot contain embedded zeros; +it is assumed to end at the first zero. + + + + + +


    lua_pushthread

    +
    int lua_pushthread (lua_State *L);
    + +

    +Pushes the thread represented by L onto the stack. +Returns 1 if this thread is the main thread of its state. + + + + + +


    lua_pushvalue

    +
    void lua_pushvalue (lua_State *L, int index);
    + +

    +Pushes a copy of the element at the given valid index +onto the stack. + + + + + +


    lua_pushvfstring

    +
    const char *lua_pushvfstring (lua_State *L,
    +                              const char *fmt,
    +                              va_list argp);
    + +

    +Equivalent to lua_pushfstring, except that it receives a va_list +instead of a variable number of arguments. + + + + + +


    lua_rawequal

    +
    int lua_rawequal (lua_State *L, int index1, int index2);
    + +

    +Returns 1 if the two values in acceptable indices index1 and +index2 are primitively equal +(that is, without calling metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices are non valid. + + + + + +


    lua_rawget

    +
    void lua_rawget (lua_State *L, int index);
    + +

    +Similar to lua_gettable, but does a raw access +(i.e., without metamethods). + + + + + +


    lua_rawgeti

    +
    void lua_rawgeti (lua_State *L, int index, int n);
    + +

    +Pushes onto the stack the value t[n], +where t is the value at the given valid index index. +The access is raw; +that is, it does not invoke metamethods. + + + + + +


    lua_rawset

    +
    void lua_rawset (lua_State *L, int index);
    + +

    +Similar to lua_settable, but does a raw assignment +(i.e., without metamethods). + + + + + +


    lua_rawseti

    +
    void lua_rawseti (lua_State *L, int index, int n);
    + +

    +Does the equivalent of t[n] = v, +where t is the value at the given valid index index +and v is the value at the top of the stack, + + +

    +This function pops the value from the stack. +The assignment is raw; +that is, it does not invoke metamethods. + + + + + +


    lua_Reader

    +
    typedef const char * (*lua_Reader) (lua_State *L,
    +                                    void *data,
    +                                    size_t *size);
    + +

    +The reader function used by lua_load. +Every time it needs another piece of the chunk, +lua_load calls the reader, +passing along its data parameter. +The reader must return a pointer to a block of memory +with a new piece of the chunk +and set size to the block size. +The block must exist until the reader function is called again. +To signal the end of the chunk, the reader must return NULL. +The reader function may return pieces of any size greater than zero. + + + + + +


    lua_register

    +
    void lua_register (lua_State *L,
    +                   const char *name,
    +                   lua_CFunction f);
    + +

    +Sets the C function f as the new value of global name. +It is defined as a macro: + +

    +     #define lua_register(L,n,f) \
    +            (lua_pushcfunction(L, f), lua_setglobal(L, n))
    +
    + + + + +

    lua_remove

    +
    void lua_remove (lua_State *L, int index);
    + +

    +Removes the element at the given valid index, +shifting down the elements above this index to fill the gap. +Cannot be called with a pseudo-index, +because a pseudo-index is not an actual stack position. + + + + + +


    lua_replace

    +
    void lua_replace (lua_State *L, int index);
    + +

    +Moves the top element into the given position (and pops it), +without shifting any element +(therefore replacing the value at the given position). + + + + + +


    lua_resume

    +
    int lua_resume (lua_State *L, int narg);
    + +

    +Starts and resumes a coroutine in a given thread. + + +

    +To start a coroutine, you first create a new thread +(see lua_newthread); +then you push onto its stack the main function plus any arguments; +then you call lua_resume, +with narg being the number of arguments. +This call returns when the coroutine suspends or finishes its execution. +When it returns, the stack contains all values passed to lua_yield, +or all values returned by the body function. +lua_resume returns +LUA_YIELD if the coroutine yields, +0 if the coroutine finishes its execution +without errors, +or an error code in case of errors (see lua_pcall). +In case of errors, +the stack is not unwound, +so you can use the debug API over it. +The error message is on the top of the stack. +To restart a coroutine, you put on its stack only the values to +be passed as results from yield, +and then call lua_resume. + + + + + +


    lua_setallocf

    +
    void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);
    + +

    +Changes the allocator function of a given state to f +with user data ud. + + + + + +


    lua_setfenv

    +
    int lua_setfenv (lua_State *L, int index);
    + +

    +Pops a table from the stack and sets it as +the new environment for the value at the given index. +If the value at the given index is +neither a function nor a thread nor a userdata, +lua_setfenv returns 0. +Otherwise it returns 1. + + + + + +


    lua_setfield

    +
    void lua_setfield (lua_State *L, int index, const char *k);
    + +

    +Does the equivalent to t[k] = v, +where t is the value at the given valid index index +and v is the value at the top of the stack, + + +

    +This function pops the value from the stack. +As in Lua, this function may trigger a metamethod +for the "newindex" event (see §2.8). + + + + + +


    lua_setglobal

    +
    void lua_setglobal (lua_State *L, const char *name);
    + +

    +Pops a value from the stack and +sets it as the new value of global name. +It is defined as a macro: + +

    +     #define lua_setglobal(L,s)   lua_setfield(L, LUA_GLOBALSINDEX, s)
    +
    + + + + +

    lua_setmetatable

    +
    int lua_setmetatable (lua_State *L, int index);
    + +

    +Pops a table from the stack and +sets it as the new metatable for the value at the given +acceptable index. + + + + + +


    lua_settable

    +
    void lua_settable (lua_State *L, int index);
    + +

    +Does the equivalent to t[k] = v, +where t is the value at the given valid index index, +v is the value at the top of the stack, +and k is the value just below the top. + + +

    +This function pops both the key and the value from the stack. +As in Lua, this function may trigger a metamethod +for the "newindex" event (see §2.8). + + + + + +


    lua_settop

    +
    void lua_settop (lua_State *L, int index);
    + +

    +Accepts any acceptable index, or 0, +and sets the stack top to this index. +If the new top is larger than the old one, +then the new elements are filled with nil. +If index is 0, then all stack elements are removed. + + + + + +


    lua_State

    +
    typedef struct lua_State lua_State;
    + +

    +Opaque structure that keeps the whole state of a Lua interpreter. +The Lua library is fully reentrant: +it has no global variables. +All information about a state is kept in this structure. + + +

    +A pointer to this state must be passed as the first argument to +every function in the library, except to lua_newstate, +which creates a Lua state from scratch. + + + + + +


    lua_status

    +
    int lua_status (lua_State *L);
    + +

    +Returns the status of the thread L. + + +

    +The status can be 0 for a normal thread, +an error code if the thread finished its execution with an error, +or LUA_YIELD if the thread is suspended. + + + + + +


    lua_toboolean

    +
    int lua_toboolean (lua_State *L, int index);
    + +

    +Converts the Lua value at the given acceptable index to a C boolean +value (0 or 1). +Like all tests in Lua, +lua_toboolean returns 1 for any Lua value +different from false and nil; +otherwise it returns 0. +It also returns 0 when called with a non-valid index. +(If you want to accept only actual boolean values, +use lua_isboolean to test the value's type.) + + + + + +


    lua_tocfunction

    +
    lua_CFunction lua_tocfunction (lua_State *L, int index);
    + +

    +Converts a value at the given acceptable index to a C function. +That value must be a C function; +otherwise, returns NULL. + + + + + +


    lua_tointeger

    +
    lua_Integer lua_tointeger (lua_State *L, int idx);
    + +

    +Converts the Lua value at the given acceptable index +to the signed integral type lua_Integer. +The Lua value must be a number or a string convertible to a number +(see §2.2.1); +otherwise, lua_tointeger returns 0. + + +

    +If the number is not an integer, +it is truncated in some non-specified way. + + + + + +


    lua_tolstring

    +
    const char *lua_tolstring (lua_State *L, int index, size_t *len);
    + +

    +Converts the Lua value at the given acceptable index to a C string. +If len is not NULL, +it also sets *len with the string length. +The Lua value must be a string or a number; +otherwise, the function returns NULL. +If the value is a number, +then lua_tolstring also +changes the actual value in the stack to a string. +(This change confuses lua_next +when lua_tolstring is applied to keys during a table traversal.) + + +

    +lua_tolstring returns a fully aligned pointer +to a string inside the Lua state. +This string always has a zero ('\0') +after its last character (as in C), +but may contain other zeros in its body. +Because Lua has garbage collection, +there is no guarantee that the pointer returned by lua_tolstring +will be valid after the corresponding value is removed from the stack. + + + + + +


    lua_tonumber

    +
    lua_Number lua_tonumber (lua_State *L, int index);
    + +

    +Converts the Lua value at the given acceptable index +to the C type lua_Number (see lua_Number). +The Lua value must be a number or a string convertible to a number +(see §2.2.1); +otherwise, lua_tonumber returns 0. + + + + + +


    lua_topointer

    +
    const void *lua_topointer (lua_State *L, int index);
    + +

    +Converts the value at the given acceptable index to a generic +C pointer (void*). +The value may be a userdata, a table, a thread, or a function; +otherwise, lua_topointer returns NULL. +Different objects will give different pointers. +There is no way to convert the pointer back to its original value. + + +

    +Typically this function is used only for debug information. + + + + + +


    lua_tostring

    +
    const char *lua_tostring (lua_State *L, int index);
    + +

    +Equivalent to lua_tolstring with len equal to NULL. + + + + + +


    lua_tothread

    +
    lua_State *lua_tothread (lua_State *L, int index);
    + +

    +Converts the value at the given acceptable index to a Lua thread +(represented as lua_State*). +This value must be a thread; +otherwise, the function returns NULL. + + + + + +


    lua_touserdata

    +
    void *lua_touserdata (lua_State *L, int index);
    + +

    +If the value at the given acceptable index is a full userdata, +returns its block address. +If the value is a light userdata, +returns its pointer. +Otherwise, returns NULL. + + + + + +


    lua_type

    +
    int lua_type (lua_State *L, int index);
    + +

    +Returns the type of the value in the given acceptable index, +or LUA_TNONE for a non-valid index +(that is, an index to an "empty" stack position). +The types returned by lua_type are coded by the following constants +defined in lua.h: +LUA_TNIL, +LUA_TNUMBER, +LUA_TBOOLEAN, +LUA_TSTRING, +LUA_TTABLE, +LUA_TFUNCTION, +LUA_TUSERDATA, +LUA_TTHREAD, +and +LUA_TLIGHTUSERDATA. + + + + + +


    lua_typename

    +
    const char *lua_typename  (lua_State *L, int tp);
    + +

    +Returns the name of the type encoded by the value tp, +which must be one the values returned by lua_type. + + + + + +


    lua_Writer

    +
    typedef int (*lua_Writer) (lua_State *L,
    +                           const void* p,
    +                           size_t sz,
    +                           void* ud);
    + +

    +The writer function used by lua_dump. +Every time it produces another piece of chunk, +lua_dump calls the writer, +passing along the buffer to be written (p), +its size (sz), +and the data parameter supplied to lua_dump. + + +

    +The writer returns an error code: +0 means no errors; +any other value means an error and stops lua_dump from +calling the writer again. + + + + + +


    lua_xmove

    +
    void lua_xmove (lua_State *from, lua_State *to, int n);
    + +

    +Exchange values between different threads of the same global state. + + +

    +This function pops n values from the stack from, +and pushes them onto the stack to. + + + + + +


    lua_yield

    +
    int lua_yield  (lua_State *L, int nresults);
    + +

    +Yields a coroutine. + + +

    +This function should only be called as the +return expression of a C function, as follows: + +

    +     return lua_yield (L, nresults);
    +

    +When a C function calls lua_yield in that way, +the running coroutine suspends its execution, +and the call to lua_resume that started this coroutine returns. +The parameter nresults is the number of values from the stack +that are passed as results to lua_resume. + + + + + + + +

    3.8 - The Debug Interface

    + +

    +Lua has no built-in debugging facilities. +Instead, it offers a special interface +by means of functions and hooks. +This interface allows the construction of different +kinds of debuggers, profilers, and other tools +that need "inside information" from the interpreter. + + + +


    lua_Debug

    +
    typedef struct lua_Debug {
    +  int event;
    +  const char *name;           /* (n) */
    +  const char *namewhat;       /* (n) */
    +  const char *what;           /* (S) */
    +  const char *source;         /* (S) */
    +  int currentline;            /* (l) */
    +  int nups;                   /* (u) number of upvalues */
    +  int linedefined;            /* (S) */
    +  int lastlinedefined;        /* (S) */
    +  char short_src[LUA_IDSIZE]; /* (S) */
    +  /* private part */
    +  other fields
    +} lua_Debug;
    + +

    +A structure used to carry different pieces of +information about an active function. +lua_getstack fills only the private part +of this structure, for later use. +To fill the other fields of lua_Debug with useful information, +call lua_getinfo. + + +

    +The fields of lua_Debug have the following meaning: + +

      + +
    • source: +If the function was defined in a string, +then source is that string. +If the function was defined in a file, +then source starts with a '@' followed by the file name. +
    • + +
    • short_src: +a "printable" version of source, to be used in error messages. +
    • + +
    • linedefined: +the line number where the definition of the function starts. +
    • + +
    • lastlinedefined: +the line number where the definition of the function ends. +
    • + +
    • what: +the string "Lua" if the function is a Lua function, +"C" if it is a C function, +"main" if it is the main part of a chunk, +and "tail" if it was a function that did a tail call. +In the latter case, +Lua has no other information about the function. +
    • + +
    • currentline: +the current line where the given function is executing. +When no line information is available, +currentline is set to -1. +
    • + +
    • name: +a reasonable name for the given function. +Because functions in Lua are first-class values, +they do not have a fixed name: +some functions may be the value of multiple global variables, +while others may be stored only in a table field. +The lua_getinfo function checks how the function was +called to find a suitable name. +If it cannot find a name, +then name is set to NULL. +
    • + +
    • namewhat: +explains the name field. +The value of namewhat can be +"global", "local", "method", +"field", "upvalue", or "" (the empty string), +according to how the function was called. +(Lua uses the empty string when no other option seems to apply.) +
    • + +
    • nups: +the number of upvalues of the function. +
    • + +
    + + + + +

    lua_gethook

    +
    lua_Hook lua_gethook (lua_State *L);
    + +

    +Returns the current hook function. + + + + + +


    lua_gethookcount

    +
    int lua_gethookcount (lua_State *L);
    + +

    +Returns the current hook count. + + + + + +


    lua_gethookmask

    +
    int lua_gethookmask (lua_State *L);
    + +

    +Returns the current hook mask. + + + + + +


    lua_getinfo

    +
    int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
    + +

    +Returns information about a specific function or function invocation. + + +

    +To get information about a function invocation, +the parameter ar must be a valid activation record that was +filled by a previous call to lua_getstack or +given as argument to a hook (see lua_Hook). + + +

    +To get information about a function you push it onto the stack +and start the what string with the character '>'. +(In that case, +lua_getinfo pops the function in the top of the stack.) +For instance, to know in which line a function f was defined, +you can write the following code: + +

    +     lua_Debug ar;
    +     lua_getfield(L, LUA_GLOBALSINDEX, "f");  /* get global 'f' */
    +     lua_getinfo(L, ">S", &ar);
    +     printf("%d\n", ar.linedefined);
    +
    + +

    +Each character in the string what +selects some fields of the structure ar to be filled or +a value to be pushed on the stack: + +

      + +
    • 'n': fills in the field name and namewhat; +
    • + +
    • 'S': +fills in the fields source, short_src, +linedefined, lastlinedefined, and what; +
    • + +
    • 'l': fills in the field currentline; +
    • + +
    • 'u': fills in the field nups; +
    • + +
    • 'f': +pushes onto the stack the function that is +running at the given level; +
    • + +
    • 'L': +pushes onto the stack a table whose indices are the +numbers of the lines that are valid on the function. +(A valid line is a line with some associated code, +that is, a line where you can put a break point. +Non-valid lines include empty lines and comments.) +
    • + +
    + +

    +This function returns 0 on error +(for instance, an invalid option in what). + + + + + +


    lua_getlocal

    +
    const char *lua_getlocal (lua_State *L, lua_Debug *ar, int n);
    + +

    +Gets information about a local variable of a given activation record. +The parameter ar must be a valid activation record that was +filled by a previous call to lua_getstack or +given as argument to a hook (see lua_Hook). +The index n selects which local variable to inspect +(1 is the first parameter or active local variable, and so on, +until the last active local variable). +lua_getlocal pushes the variable's value onto the stack +and returns its name. + + +

    +Variable names starting with '(' (open parentheses) +represent internal variables +(loop control variables, temporaries, and C function locals). + + +

    +Returns NULL (and pushes nothing) +when the index is greater than +the number of active local variables. + + + + + +


    lua_getstack

    +
    int lua_getstack (lua_State *L, int level, lua_Debug *ar);
    + +

    +Get information about the interpreter runtime stack. + + +

    +This function fills parts of a lua_Debug structure with +an identification of the activation record +of the function executing at a given level. +Level 0 is the current running function, +whereas level n+1 is the function that has called level n. +When there are no errors, lua_getstack returns 1; +when called with a level greater than the stack depth, +it returns 0. + + + + + +


    lua_getupvalue

    +
    const char *lua_getupvalue (lua_State *L, int funcindex, int n);
    + +

    +Gets information about a closure's upvalue. +(For Lua functions, +upvalues are the external local variables that the function uses, +and that are consequently included in its closure.) +lua_getupvalue gets the index n of an upvalue, +pushes the upvalue's value onto the stack, +and returns its name. +funcindex points to the closure in the stack. +(Upvalues have no particular order, +as they are active through the whole function. +So, they are numbered in an arbitrary order.) + + +

    +Returns NULL (and pushes nothing) +when the index is greater than the number of upvalues. +For C functions, this function uses the empty string "" +as a name for all upvalues. + + + + + +


    lua_Hook

    +
    typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
    + +

    +Type for debugging hook functions. + + +

    +Whenever a hook is called, its ar argument has its field +event set to the specific event that triggered the hook. +Lua identifies these events with the following constants: +LUA_HOOKCALL, LUA_HOOKRET, +LUA_HOOKTAILRET, LUA_HOOKLINE, +and LUA_HOOKCOUNT. +Moreover, for line events, the field currentline is also set. +To get the value of any other field in ar, +the hook must call lua_getinfo. +For return events, event may be LUA_HOOKRET, +the normal value, or LUA_HOOKTAILRET. +In the latter case, Lua is simulating a return from +a function that did a tail call; +in this case, it is useless to call lua_getinfo. + + +

    +While Lua is running a hook, it disables other calls to hooks. +Therefore, if a hook calls back Lua to execute a function or a chunk, +this execution occurs without any calls to hooks. + + + + + +


    lua_sethook

    +
    int lua_sethook (lua_State *L, lua_Hook f, int mask, int count);
    + +

    +Sets the debugging hook function. + + +

    +Argument f is the hook function. +mask specifies on which events the hook will be called: +it is formed by a bitwise or of the constants +LUA_MASKCALL, +LUA_MASKRET, +LUA_MASKLINE, +and LUA_MASKCOUNT. +The count argument is only meaningful when the mask +includes LUA_MASKCOUNT. +For each event, the hook is called as explained below: + +

      + +
    • The call hook: is called when the interpreter calls a function. +The hook is called just after Lua enters the new function, +before the function gets its arguments. +
    • + +
    • The return hook: is called when the interpreter returns from a function. +The hook is called just before Lua leaves the function. +You have no access to the values to be returned by the function. +
    • + +
    • The line hook: is called when the interpreter is about to +start the execution of a new line of code, +or when it jumps back in the code (even to the same line). +(This event only happens while Lua is executing a Lua function.) +
    • + +
    • The count hook: is called after the interpreter executes every +count instructions. +(This event only happens while Lua is executing a Lua function.) +
    • + +
    + +

    +A hook is disabled by setting mask to zero. + + + + + +


    lua_setlocal

    +
    const char *lua_setlocal (lua_State *L, lua_Debug *ar, int n);
    + +

    +Sets the value of a local variable of a given activation record. +Parameters ar and n are as in lua_getlocal +(see lua_getlocal). +lua_setlocal assigns the value at the top of the stack +to the variable and returns its name. +It also pops the value from the stack. + + +

    +Returns NULL (and pops nothing) +when the index is greater than +the number of active local variables. + + + + + +


    lua_setupvalue

    +
    const char *lua_setupvalue (lua_State *L, int funcindex, int n);
    + +

    +Sets the value of a closure's upvalue. +It assigns the value at the top of the stack +to the upvalue and returns its name. +It also pops the value from the stack. +Parameters funcindex and n are as in the lua_getupvalue +(see lua_getupvalue). + + +

    +Returns NULL (and pops nothing) +when the index is greater than the number of upvalues. + + + + + + + +

    4 - The Auxiliary Library

    + +

    + +The auxiliary library provides several convenient functions +to interface C with Lua. +While the basic API provides the primitive functions for all +interactions between C and Lua, +the auxiliary library provides higher-level functions for some +common tasks. + + +

    +All functions from the auxiliary library +are defined in header file lauxlib.h and +have a prefix luaL_. + + +

    +All functions in the auxiliary library are built on +top of the basic API, +and so they provide nothing that cannot be done with this API. + + +

    +Several functions in the auxiliary library are used to +check C function arguments. +Their names are always luaL_check* or luaL_opt*. +All of these functions raise an error if the check is not satisfied. +Because the error message is formatted for arguments +(e.g., "bad argument #1"), +you should not use these functions for other stack values. + + + +

    4.1 - Functions and Types

    + +

    +Here we list all functions and types from the auxiliary library +in alphabetical order. + + + +


    luaL_addchar

    +
    void luaL_addchar (luaL_Buffer *B, char c);
    + +

    +Adds the character c to the buffer B +(see luaL_Buffer). + + + + + +


    luaL_addlstring

    +
    void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);
    + +

    +Adds the string pointed to by s with length l to +the buffer B +(see luaL_Buffer). +The string may contain embedded zeros. + + + + + +


    luaL_addsize

    +
    void luaL_addsize (luaL_Buffer *B, size_t n);
    + +

    +Adds to the buffer B (see luaL_Buffer) +a string of length n previously copied to the +buffer area (see luaL_prepbuffer). + + + + + +


    luaL_addstring

    +
    void luaL_addstring (luaL_Buffer *B, const char *s);
    + +

    +Adds the zero-terminated string pointed to by s +to the buffer B +(see luaL_Buffer). +The string may not contain embedded zeros. + + + + + +


    luaL_addvalue

    +
    void luaL_addvalue (luaL_Buffer *B);
    + +

    +Adds the value at the top of the stack +to the buffer B +(see luaL_Buffer). +Pops the value. + + +

    +This is the only function on string buffers that can (and must) +be called with an extra element on the stack, +which is the value to be added to the buffer. + + + + + +


    luaL_argcheck

    +
    void luaL_argcheck (lua_State *L,
    +                    int cond,
    +                    int narg,
    +                    const char *extramsg);
    + +

    +Checks whether cond is true. +If not, raises an error with the following message, +where func is retrieved from the call stack: + +

    +     bad argument #<narg> to <func> (<extramsg>)
    +
    + + + + +

    luaL_argerror

    +
    int luaL_argerror (lua_State *L, int narg, const char *extramsg);
    + +

    +Raises an error with the following message, +where func is retrieved from the call stack: + +

    +     bad argument #<narg> to <func> (<extramsg>)
    +
    + +

    +This function never returns, +but it is an idiom to use it in C functions +as return luaL_argerror(args). + + + + + +


    luaL_Buffer

    +
    typedef struct luaL_Buffer luaL_Buffer;
    + +

    +Type for a string buffer. + + +

    +A string buffer allows C code to build Lua strings piecemeal. +Its pattern of use is as follows: + +

      + +
    • First you declare a variable b of type luaL_Buffer.
    • + +
    • Then you initialize it with a call luaL_buffinit(L, &b).
    • + +
    • +Then you add string pieces to the buffer calling any of +the luaL_add* functions. +
    • + +
    • +You finish by calling luaL_pushresult(&b). +This call leaves the final string on the top of the stack. +
    • + +
    + +

    +During its normal operation, +a string buffer uses a variable number of stack slots. +So, while using a buffer, you cannot assume that you know where +the top of the stack is. +You can use the stack between successive calls to buffer operations +as long as that use is balanced; +that is, +when you call a buffer operation, +the stack is at the same level +it was immediately after the previous buffer operation. +(The only exception to this rule is luaL_addvalue.) +After calling luaL_pushresult the stack is back to its +level when the buffer was initialized, +plus the final string on its top. + + + + + +


    luaL_buffinit

    +
    void luaL_buffinit (lua_State *L, luaL_Buffer *B);
    + +

    +Initializes a buffer B. +This function does not allocate any space; +the buffer must be declared as a variable +(see luaL_Buffer). + + + + + +


    luaL_callmeta

    +
    int luaL_callmeta (lua_State *L, int obj, const char *e);
    + +

    +Calls a metamethod. + + +

    +If the object at index obj has a metatable and this +metatable has a field e, +this function calls this field and passes the object as its only argument. +In this case this function returns 1 and pushes onto the +stack the value returned by the call. +If there is no metatable or no metamethod, +this function returns 0 (without pushing any value on the stack). + + + + + +


    luaL_checkany

    +
    void luaL_checkany (lua_State *L, int narg);
    + +

    +Checks whether the function has an argument +of any type (including nil) at position narg. + + + + + +


    luaL_checkint

    +
    int luaL_checkint (lua_State *L, int narg);
    + +

    +Checks whether the function argument narg is a number +and returns this number cast to an int. + + + + + +


    luaL_checkinteger

    +
    lua_Integer luaL_checkinteger (lua_State *L, int narg);
    + +

    +Checks whether the function argument narg is a number +and returns this number cast to a lua_Integer. + + + + + +


    luaL_checklong

    +
    long luaL_checklong (lua_State *L, int narg);
    + +

    +Checks whether the function argument narg is a number +and returns this number cast to a long. + + + + + +


    luaL_checklstring

    +
    const char *luaL_checklstring (lua_State *L, int narg, size_t *l);
    + +

    +Checks whether the function argument narg is a string +and returns this string; +if l is not NULL fills *l +with the string's length. + + + + + +


    luaL_checknumber

    +
    lua_Number luaL_checknumber (lua_State *L, int narg);
    + +

    +Checks whether the function argument narg is a number +and returns this number. + + + + + +


    luaL_checkoption

    +
    int luaL_checkoption (lua_State *L,
    +                      int narg,
    +                      const char *def,
    +                      const char *const lst[]);
    + +

    +Checks whether the function argument narg is a string and +searches for this string in the array lst +(which must be NULL-terminated). +Returns the index in the array where the string was found. +Raises an error if the argument is not a string or +if the string cannot be found. + + +

    +If def is not NULL, +the function uses def as a default value when +there is no argument narg or if this argument is nil. + + +

    +This is a useful function for mapping strings to C enums. +(The usual convention in Lua libraries is +to use strings instead of numbers to select options.) + + + + + +


    luaL_checkstack

    +
    void luaL_checkstack (lua_State *L, int sz, const char *msg);
    + +

    +Grows the stack size to top + sz elements, +raising an error if the stack cannot grow to that size. +msg is an additional text to go into the error message. + + + + + +


    luaL_checkstring

    +
    const char *luaL_checkstring (lua_State *L, int narg);
    + +

    +Checks whether the function argument narg is a string +and returns this string. + + + + + +


    luaL_checktype

    +
    void luaL_checktype (lua_State *L, int narg, int t);
    + +

    +Checks whether the function argument narg has type t. + + + + + +


    luaL_checkudata

    +
    void *luaL_checkudata (lua_State *L, int narg, const char *tname);
    + +

    +Checks whether the function argument narg is a userdata +of the type tname (see luaL_newmetatable). + + + + + +


    luaL_dofile

    +
    int luaL_dofile (lua_State *L, const char *filename);
    + +

    +Loads and runs the given file. +It is defined as the following macro: + +

    +     (luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))
    +

    +It returns 0 if there are no errors +or 1 in case of errors. + + + + + +


    luaL_dostring

    +
    int luaL_dostring (lua_State *L, const char *str);
    + +

    +Loads and runs the given string. +It is defined as the following macro: + +

    +     (luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0))
    +

    +It returns 0 if there are no errors +or 1 in case of errors. + + + + + +


    luaL_error

    +
    int luaL_error (lua_State *L, const char *fmt, ...);
    + +

    +Raises an error. +The error message format is given by fmt +plus any extra arguments, +following the same rules of lua_pushfstring. +It also adds at the beginning of the message the file name and +the line number where the error occurred, +if this information is available. + + +

    +This function never returns, +but it is an idiom to use it in C functions +as return luaL_error(args). + + + + + +


    luaL_getmetafield

    +
    int luaL_getmetafield (lua_State *L, int obj, const char *e);
    + +

    +Pushes onto the stack the field e from the metatable +of the object at index obj. +If the object does not have a metatable, +or if the metatable does not have this field, +returns 0 and pushes nothing. + + + + + +


    luaL_getmetatable

    +
    void luaL_getmetatable (lua_State *L, const char *tname);
    + +

    +Pushes onto the stack the metatable associated with name tname +in the registry (see luaL_newmetatable). + + + + + +


    luaL_gsub

    +
    const char *luaL_gsub (lua_State *L,
    +                       const char *s,
    +                       const char *p,
    +                       const char *r);
    + +

    +Creates a copy of string s by replacing +any occurrence of the string p +with the string r. +Pushes the resulting string on the stack and returns it. + + + + + +


    luaL_loadbuffer

    +
    int luaL_loadbuffer (lua_State *L,
    +                     const char *buff,
    +                     size_t sz,
    +                     const char *name);
    + +

    +Loads a buffer as a Lua chunk. +This function uses lua_load to load the chunk in the +buffer pointed to by buff with size sz. + + +

    +This function returns the same results as lua_load. +name is the chunk name, +used for debug information and error messages. + + + + + +


    luaL_loadfile

    +
    int luaL_loadfile (lua_State *L, const char *filename);
    + +

    +Loads a file as a Lua chunk. +This function uses lua_load to load the chunk in the file +named filename. +If filename is NULL, +then it loads from the standard input. +The first line in the file is ignored if it starts with a #. + + +

    +This function returns the same results as lua_load, +but it has an extra error code LUA_ERRFILE +if it cannot open/read the file. + + +

    +As lua_load, this function only loads the chunk; +it does not run it. + + + + + +


    luaL_loadstring

    +
    int luaL_loadstring (lua_State *L, const char *s);
    + +

    +Loads a string as a Lua chunk. +This function uses lua_load to load the chunk in +the zero-terminated string s. + + +

    +This function returns the same results as lua_load. + + +

    +Also as lua_load, this function only loads the chunk; +it does not run it. + + + + + +


    luaL_newmetatable

    +
    int luaL_newmetatable (lua_State *L, const char *tname);
    + +

    +If the registry already has the key tname, +returns 0. +Otherwise, +creates a new table to be used as a metatable for userdata, +adds it to the registry with key tname, +and returns 1. + + +

    +In both cases pushes onto the stack the final value associated +with tname in the registry. + + + + + +


    luaL_newstate

    +
    lua_State *luaL_newstate (void);
    + +

    +Creates a new Lua state. +It calls lua_newstate with an +allocator based on the standard C realloc function +and then sets a panic function (see lua_atpanic) that prints +an error message to the standard error output in case of fatal +errors. + + +

    +Returns the new state, +or NULL if there is a memory allocation error. + + + + + +


    luaL_openlibs

    +
    void luaL_openlibs (lua_State *L);
    + +

    +Opens all standard Lua libraries into the given state. + + + + + +


    luaL_optint

    +
    int luaL_optint (lua_State *L, int narg, int d);
    + +

    +If the function argument narg is a number, +returns this number cast to an int. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


    luaL_optinteger

    +
    lua_Integer luaL_optinteger (lua_State *L,
    +                             int narg,
    +                             lua_Integer d);
    + +

    +If the function argument narg is a number, +returns this number cast to a lua_Integer. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


    luaL_optlong

    +
    long luaL_optlong (lua_State *L, int narg, long d);
    + +

    +If the function argument narg is a number, +returns this number cast to a long. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


    luaL_optlstring

    +
    const char *luaL_optlstring (lua_State *L,
    +                             int narg,
    +                             const char *d,
    +                             size_t *l);
    + +

    +If the function argument narg is a string, +returns this string. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + +

    +If l is not NULL, +fills the position *l with the results's length. + + + + + +


    luaL_optnumber

    +
    lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number d);
    + +

    +If the function argument narg is a number, +returns this number. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


    luaL_optstring

    +
    const char *luaL_optstring (lua_State *L,
    +                            int narg,
    +                            const char *d);
    + +

    +If the function argument narg is a string, +returns this string. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


    luaL_prepbuffer

    +
    char *luaL_prepbuffer (luaL_Buffer *B);
    + +

    +Returns an address to a space of size LUAL_BUFFERSIZE +where you can copy a string to be added to buffer B +(see luaL_Buffer). +After copying the string into this space you must call +luaL_addsize with the size of the string to actually add +it to the buffer. + + + + + +


    luaL_pushresult

    +
    void luaL_pushresult (luaL_Buffer *B);
    + +

    +Finishes the use of buffer B leaving the final string on +the top of the stack. + + + + + +


    luaL_ref

    +
    int luaL_ref (lua_State *L, int t);
    + +

    +Creates and returns a reference, +in the table at index t, +for the object at the top of the stack (and pops the object). + + +

    +A reference is a unique integer key. +As long as you do not manually add integer keys into table t, +luaL_ref ensures the uniqueness of the key it returns. +You can retrieve an object referred by reference r +by calling lua_rawgeti(L, t, r). +Function luaL_unref frees a reference and its associated object. + + +

    +If the object at the top of the stack is nil, +luaL_ref returns the constant LUA_REFNIL. +The constant LUA_NOREF is guaranteed to be different +from any reference returned by luaL_ref. + + + + + +


    luaL_Reg

    +
    typedef struct luaL_Reg {
    +  const char *name;
    +  lua_CFunction func;
    +} luaL_Reg;
    + +

    +Type for arrays of functions to be registered by +luaL_register. +name is the function name and func is a pointer to +the function. +Any array of luaL_Reg must end with an sentinel entry +in which both name and func are NULL. + + + + + +


    luaL_register

    +
    void luaL_register (lua_State *L,
    +                    const char *libname,
    +                    const luaL_Reg *l);
    + +

    +Opens a library. + + +

    +When called with libname equal to NULL, +it simply registers all functions in the list l +(see luaL_Reg) into the table on the top of the stack. + + +

    +When called with a non-null libname, +luaL_register creates a new table t, +sets it as the value of the global variable libname, +sets it as the value of package.loaded[libname], +and registers on it all functions in the list l. +If there is a table in package.loaded[libname] or in +variable libname, +reuses this table instead of creating a new one. + + +

    +In any case the function leaves the table +on the top of the stack. + + + + + +


    luaL_typename

    +
    const char *luaL_typename (lua_State *L, int idx);
    + +

    +Returns the name of the type of the value at index idx. + + + + + +


    luaL_typerror

    +
    int luaL_typerror (lua_State *L, int narg, const char *tname);
    + +

    +Generates an error with a message like the following: + +

    +     location: bad argument narg to 'func' (tname expected, got rt)
    +

    +where location is produced by luaL_where, +func is the name of the current function, +and rt is the type name of the actual argument. + + + + + +


    luaL_unref

    +
    void luaL_unref (lua_State *L, int t, int ref);
    + +

    +Releases reference ref from the table at index t +(see luaL_ref). +The entry is removed from the table, +so that the referred object can be collected. +The reference ref is also freed to be used again. + + +

    +If ref is LUA_NOREF or LUA_REFNIL, +luaL_unref does nothing. + + + + + +


    luaL_where

    +
    void luaL_where (lua_State *L, int lvl);
    + +

    +Pushes onto the stack a string identifying the current position +of the control at level lvl in the call stack. +Typically this string has the following format: + +

    +     chunkname:currentline:
    +

    +Level 0 is the running function, +level 1 is the function that called the running function, +etc. + + +

    +This function is used to build a prefix for error messages. + + + + + + + +

    5 - Standard Libraries

    + +

    +The standard Lua libraries provide useful functions +that are implemented directly through the C API. +Some of these functions provide essential services to the language +(e.g., type and getmetatable); +others provide access to "outside" services (e.g., I/O); +and others could be implemented in Lua itself, +but are quite useful or have critical performance requirements that +deserve an implementation in C (e.g., sort). + + +

    +All libraries are implemented through the official C API +and are provided as separate C modules. +Currently, Lua has the following standard libraries: + +

      + +
    • basic library;
    • + +
    • package library;
    • + +
    • string manipulation;
    • + +
    • table manipulation;
    • + +
    • mathematical functions (sin, log, etc.);
    • + +
    • input and output;
    • + +
    • operating system facilities;
    • + +
    • debug facilities.
    • + +

    +Except for the basic and package libraries, +each library provides all its functions as fields of a global table +or as methods of its objects. + + +

    +To have access to these libraries, +the C host program should call the luaL_openlibs function, +which opens all standard libraries. +Alternatively, +it can open them individually by calling +luaopen_base (for the basic library), +luaopen_package (for the package library), +luaopen_string (for the string library), +luaopen_table (for the table library), +luaopen_math (for the mathematical library), +luaopen_io (for the I/O and the Operating System libraries), +and luaopen_debug (for the debug library). +These functions are declared in lualib.h +and should not be called directly: +you must call them like any other Lua C function, +e.g., by using lua_call. + + + +

    5.1 - Basic Functions

    + +

    +The basic library provides some core functions to Lua. +If you do not include this library in your application, +you should check carefully whether you need to provide +implementations for some of its facilities. + + +

    +


    assert (v [, message])

    +Issues an error when +the value of its argument v is false (i.e., nil or false); +otherwise, returns all its arguments. +message is an error message; +when absent, it defaults to "assertion failed!" + + + + +

    +


    collectgarbage (opt [, arg])

    + + +

    +This function is a generic interface to the garbage collector. +It performs different functions according to its first argument, opt: + +

      + +
    • "stop": +stops the garbage collector. +
    • + +
    • "restart": +restarts the garbage collector. +
    • + +
    • "collect": +performs a full garbage-collection cycle. +
    • + +
    • "count": +returns the total memory in use by Lua (in Kbytes). +
    • + +
    • "step": +performs a garbage-collection step. +The step "size" is controlled by arg +(larger values mean more steps) in a non-specified way. +If you want to control the step size +you must experimentally tune the value of arg. +Returns true if the step finished a collection cycle. +
    • + +
    • "setpause": +sets arg/100 as the new value for the pause of +the collector (see §2.10). +
    • + +
    • "setstepmul": +sets arg/100 as the new value for the step multiplier of +the collector (see §2.10). +
    • + +
    + + + +

    +


    dofile (filename)

    +Opens the named file and executes its contents as a Lua chunk. +When called without arguments, +dofile executes the contents of the standard input (stdin). +Returns all values returned by the chunk. +In case of errors, dofile propagates the error +to its caller (that is, dofile does not run in protected mode). + + + + +

    +


    error (message [, level])

    +Terminates the last protected function called +and returns message as the error message. +Function error never returns. + + +

    +Usually, error adds some information about the error position +at the beginning of the message. +The level argument specifies how to get the error position. +With level 1 (the default), the error position is where the +error function was called. +Level 2 points the error to where the function +that called error was called; and so on. +Passing a level 0 avoids the addition of error position information +to the message. + + + + +

    +


    _G

    +A global variable (not a function) that +holds the global environment (that is, _G._G = _G). +Lua itself does not use this variable; +changing its value does not affect any environment, +nor vice-versa. +(Use setfenv to change environments.) + + + + +

    +


    getfenv ([f])

    +Returns the current environment in use by the function. +f can be a Lua function or a number +that specifies the function at that stack level: +Level 1 is the function calling getfenv. +If the given function is not a Lua function, +or if f is 0, +getfenv returns the global environment. +The default for f is 1. + + + + +

    +


    getmetatable (object)

    + + +

    +If object does not have a metatable, returns nil. +Otherwise, +if the object's metatable has a "__metatable" field, +returns the associated value. +Otherwise, returns the metatable of the given object. + + + + +

    +


    ipairs (t)

    + + +

    +Returns three values: an iterator function, the table t, and 0, +so that the construction + +

    +     for i,v in ipairs(t) do body end
    +

    +will iterate over the pairs (1,t[1]), (2,t[2]), ···, +up to the first integer key absent from the table. + + + + +

    +


    load (func [, chunkname])

    + + +

    +Loads a chunk using function func to get its pieces. +Each call to func must return a string that concatenates +with previous results. +A return of nil (or no value) signals the end of the chunk. + + +

    +If there are no errors, +returns the compiled chunk as a function; +otherwise, returns nil plus the error message. +The environment of the returned function is the global environment. + + +

    +chunkname is used as the chunk name for error messages +and debug information. + + + + +

    +


    loadfile ([filename])

    + + +

    +Similar to load, +but gets the chunk from file filename +or from the standard input, +if no file name is given. + + + + +

    +


    loadstring (string [, chunkname])

    + + +

    +Similar to load, +but gets the chunk from the given string. + + +

    +To load and run a given string, use the idiom + +

    +     assert(loadstring(s))()
    +
    + + + +

    +


    next (table [, index])

    + + +

    +Allows a program to traverse all fields of a table. +Its first argument is a table and its second argument +is an index in this table. +next returns the next index of the table +and its associated value. +When called with nil as its second argument, +next returns an initial index +and its associated value. +When called with the last index, +or with nil in an empty table, +next returns nil. +If the second argument is absent, then it is interpreted as nil. +In particular, +you can use next(t) to check whether a table is empty. + + +

    +The order in which the indices are enumerated is not specified, +even for numeric indices. +(To traverse a table in numeric order, +use a numerical for or the ipairs function.) + + +

    +The behavior of next is undefined if, +during the traversal, +you assign any value to a non-existent field in the table. +You may however modify existing fields. +In particular, you may clear existing fields. + + + + +

    +


    pairs (t)

    + + +

    +Returns three values: the next function, the table t, and nil, +so that the construction + +

    +     for k,v in pairs(t) do body end
    +

    +will iterate over all key–value pairs of table t. + + +

    +See function next for the caveats of modifying +the table during its traversal. + + + + +

    +


    pcall (f, arg1, ···)

    + + +

    +Calls function f with +the given arguments in protected mode. +This means that any error inside f is not propagated; +instead, pcall catches the error +and returns a status code. +Its first result is the status code (a boolean), +which is true if the call succeeds without errors. +In such case, pcall also returns all results from the call, +after this first result. +In case of any error, pcall returns false plus the error message. + + + + +

    +


    print (···)

    +Receives any number of arguments, +and prints their values to stdout, +using the tostring function to convert them to strings. +print is not intended for formatted output, +but only as a quick way to show a value, +typically for debugging. +For formatted output, use string.format. + + + + +

    +


    rawequal (v1, v2)

    +Checks whether v1 is equal to v2, +without invoking any metamethod. +Returns a boolean. + + + + +

    +


    rawget (table, index)

    +Gets the real value of table[index], +without invoking any metamethod. +table must be a table; +index may be any value. + + + + +

    +


    rawset (table, index, value)

    +Sets the real value of table[index] to value, +without invoking any metamethod. +table must be a table, +index any value different from nil, +and value any Lua value. + + +

    +This function returns table. + + + + +

    +


    select (index, ···)

    + + +

    +If index is a number, +returns all arguments after argument number index. +Otherwise, index must be the string "#", +and select returns the total number of extra arguments it received. + + + + +

    +


    setfenv (f, table)

    + + +

    +Sets the environment to be used by the given function. +f can be a Lua function or a number +that specifies the function at that stack level: +Level 1 is the function calling setfenv. +setfenv returns the given function. + + +

    +As a special case, when f is 0 setfenv changes +the environment of the running thread. +In this case, setfenv returns no values. + + + + +

    +


    setmetatable (table, metatable)

    + + +

    +Sets the metatable for the given table. +(You cannot change the metatable of other types from Lua, only from C.) +If metatable is nil, +removes the metatable of the given table. +If the original metatable has a "__metatable" field, +raises an error. + + +

    +This function returns table. + + + + +

    +


    tonumber (e [, base])

    +Tries to convert its argument to a number. +If the argument is already a number or a string convertible +to a number, then tonumber returns this number; +otherwise, it returns nil. + + +

    +An optional argument specifies the base to interpret the numeral. +The base may be any integer between 2 and 36, inclusive. +In bases above 10, the letter 'A' (in either upper or lower case) +represents 10, 'B' represents 11, and so forth, +with 'Z' representing 35. +In base 10 (the default), the number may have a decimal part, +as well as an optional exponent part (see §2.1). +In other bases, only unsigned integers are accepted. + + + + +

    +


    tostring (e)

    +Receives an argument of any type and +converts it to a string in a reasonable format. +For complete control of how numbers are converted, +use string.format. + + +

    +If the metatable of e has a "__tostring" field, +then tostring calls the corresponding value +with e as argument, +and uses the result of the call as its result. + + + + +

    +


    type (v)

    +Returns the type of its only argument, coded as a string. +The possible results of this function are +"nil" (a string, not the value nil), +"number", +"string", +"boolean", +"table", +"function", +"thread", +and "userdata". + + + + +

    +


    unpack (list [, i [, j]])

    +Returns the elements from the given table. +This function is equivalent to + +
    +     return list[i], list[i+1], ···, list[j]
    +

    +except that the above code can be written only for a fixed number +of elements. +By default, i is 1 and j is the length of the list, +as defined by the length operator (see §2.5.5). + + + + +

    +


    _VERSION

    +A global variable (not a function) that +holds a string containing the current interpreter version. +The current contents of this variable is "Lua 5.1". + + + + +

    +


    xpcall (f, err)

    + + +

    +This function is similar to pcall, +except that you can set a new error handler. + + +

    +xpcall calls function f in protected mode, +using err as the error handler. +Any error inside f is not propagated; +instead, xpcall catches the error, +calls the err function with the original error object, +and returns a status code. +Its first result is the status code (a boolean), +which is true if the call succeeds without errors. +In this case, xpcall also returns all results from the call, +after this first result. +In case of any error, +xpcall returns false plus the result from err. + + + + + + + +

    5.2 - Coroutine Manipulation

    + +

    +The operations related to coroutines comprise a sub-library of +the basic library and come inside the table coroutine. +See §2.11 for a general description of coroutines. + + +

    +


    coroutine.create (f)

    + + +

    +Creates a new coroutine, with body f. +f must be a Lua function. +Returns this new coroutine, +an object with type "thread". + + + + +

    +


    coroutine.resume (co [, val1, ···])

    + + +

    +Starts or continues the execution of coroutine co. +The first time you resume a coroutine, +it starts running its body. +The values val1, ··· are passed +as the arguments to the body function. +If the coroutine has yielded, +resume restarts it; +the values val1, ··· are passed +as the results from the yield. + + +

    +If the coroutine runs without any errors, +resume returns true plus any values passed to yield +(if the coroutine yields) or any values returned by the body function +(if the coroutine terminates). +If there is any error, +resume returns false plus the error message. + + + + +

    +


    coroutine.running ()

    + + +

    +Returns the running coroutine, +or nil when called by the main thread. + + + + +

    +


    coroutine.status (co)

    + + +

    +Returns the status of coroutine co, as a string: +"running", +if the coroutine is running (that is, it called status); +"suspended", if the coroutine is suspended in a call to yield, +or if it has not started running yet; +"normal" if the coroutine is active but not running +(that is, it has resumed another coroutine); +and "dead" if the coroutine has finished its body function, +or if it has stopped with an error. + + + + +

    +


    coroutine.wrap (f)

    + + +

    +Creates a new coroutine, with body f. +f must be a Lua function. +Returns a function that resumes the coroutine each time it is called. +Any arguments passed to the function behave as the +extra arguments to resume. +Returns the same values returned by resume, +except the first boolean. +In case of error, propagates the error. + + + + +

    +


    coroutine.yield (···)

    + + +

    +Suspends the execution of the calling coroutine. +The coroutine cannot be running a C function, +a metamethod, or an iterator. +Any arguments to yield are passed as extra results to resume. + + + + + + + +

    5.3 - Modules

    + +

    +The package library provides basic +facilities for loading and building modules in Lua. +It exports two of its functions directly in the global environment: +require and module. +Everything else is exported in a table package. + + +

    +


    module (name [, ···])

    + + +

    +Creates a module. +If there is a table in package.loaded[name], +this table is the module. +Otherwise, if there is a global table t with the given name, +this table is the module. +Otherwise creates a new table t and +sets it as the value of the global name and +the value of package.loaded[name]. +This function also initializes t._NAME with the given name, +t._M with the module (t itself), +and t._PACKAGE with the package name +(the full module name minus last component; see below). +Finally, module sets t as the new environment +of the current function and the new value of package.loaded[name], +so that require returns t. + + +

    +If name is a compound name +(that is, one with components separated by dots), +module creates (or reuses, if they already exist) +tables for each component. +For instance, if name is a.b.c, +then module stores the module table in field c of +field b of global a. + + +

    +This function may receive optional options after +the module name, +where each option is a function to be applied over the module. + + + + +

    +


    require (modname)

    + + +

    +Loads the given module. +The function starts by looking into the package.loaded table +to determine whether modname is already loaded. +If it is, then require returns the value stored +at package.loaded[modname]. +Otherwise, it tries to find a loader for the module. + + +

    +To find a loader, +first require queries package.preload[modname]. +If it has a value, +this value (which should be a function) is the loader. +Otherwise require searches for a Lua loader using the +path stored in package.path. +If that also fails, it searches for a C loader using the +path stored in package.cpath. +If that also fails, +it tries an all-in-one loader (see below). + + +

    +When loading a C library, +require first uses a dynamic link facility to link the +application with the library. +Then it tries to find a C function inside this library to +be used as the loader. +The name of this C function is the string "luaopen_" +concatenated with a copy of the module name where each dot +is replaced by an underscore. +Moreover, if the module name has a hyphen, +its prefix up to (and including) the first hyphen is removed. +For instance, if the module name is a.v1-b.c, +the function name will be luaopen_b_c. + + +

    +If require finds neither a Lua library nor a +C library for a module, +it calls the all-in-one loader. +This loader searches the C path for a library for +the root name of the given module. +For instance, when requiring a.b.c, +it will search for a C library for a. +If found, it looks into it for an open function for +the submodule; +in our example, that would be luaopen_a_b_c. +With this facility, a package can pack several C submodules +into one single library, +with each submodule keeping its original open function. + + +

    +Once a loader is found, +require calls the loader with a single argument, modname. +If the loader returns any value, +require assigns the returned value to package.loaded[modname]. +If the loader returns no value and +has not assigned any value to package.loaded[modname], +then require assigns true to this entry. +In any case, require returns the +final value of package.loaded[modname]. + + +

    +If there is any error loading or running the module, +or if it cannot find any loader for the module, +then require signals an error. + + + + +

    +


    package.cpath

    + + +

    +The path used by require to search for a C loader. + + +

    +Lua initializes the C path package.cpath in the same way +it initializes the Lua path package.path, +using the environment variable LUA_CPATH +(plus another default path defined in luaconf.h). + + + + +

    + +


    package.loaded

    + + +

    +A table used by require to control which +modules are already loaded. +When you require a module modname and +package.loaded[modname] is not false, +require simply returns the value stored there. + + + + +

    +


    package.loadlib (libname, funcname)

    + + +

    +Dynamically links the host program with the C library libname. +Inside this library, looks for a function funcname +and returns this function as a C function. +(So, funcname must follow the protocol (see lua_CFunction)). + + +

    +This is a low-level function. +It completely bypasses the package and module system. +Unlike require, +it does not perform any path searching and +does not automatically adds extensions. +libname must be the complete file name of the C library, +including if necessary a path and extension. +funcname must be the exact name exported by the C library +(which may depend on the C compiler and linker used). + + +

    +This function is not supported by ANSI C. +As such, it is only available on some platforms +(Windows, Linux, Mac OS X, Solaris, BSD, +plus other Unix systems that support the dlfcn standard). + + + + +

    +


    package.path

    + + +

    +The path used by require to search for a Lua loader. + + +

    +At start-up, Lua initializes this variable with +the value of the environment variable LUA_PATH or +with a default path defined in luaconf.h, +if the environment variable is not defined. +Any ";;" in the value of the environment variable +is replaced by the default path. + + +

    +A path is a sequence of templates separated by semicolons. +For each template, require will change each interrogation +mark in the template by filename, +which is modname with each dot replaced by a +"directory separator" (such as "/" in Unix); +then it will try to load the resulting file name. +So, for instance, if the Lua path is + +

    +     "./?.lua;./?.lc;/usr/local/?/init.lua"
    +

    +the search for a Lua loader for module foo +will try to load the files +./foo.lua, ./foo.lc, and +/usr/local/foo/init.lua, in that order. + + + + +

    +


    package.preload

    + + +

    +A table to store loaders for specific modules +(see require). + + + + +

    +


    package.seeall (module)

    + + +

    +Sets a metatable for module with +its __index field referring to the global environment, +so that this module inherits values +from the global environment. +To be used as an option to function module. + + + + + + + +

    5.4 - String Manipulation

    + +

    +This library provides generic functions for string manipulation, +such as finding and extracting substrings, and pattern matching. +When indexing a string in Lua, the first character is at position 1 +(not at 0, as in C). +Indices are allowed to be negative and are interpreted as indexing backwards, +from the end of the string. +Thus, the last character is at position -1, and so on. + + +

    +The string library provides all its functions inside the table +string. +It also sets a metatable for strings +where the __index field points to the string table. +Therefore, you can use the string functions in object-oriented style. +For instance, string.byte(s, i) +can be written as s:byte(i). + + +

    +


    string.byte (s [, i [, j]])

    +Returns the internal numerical codes of the characters s[i], +s[i+1], ···, s[j]. +The default value for i is 1; +the default value for j is i. + + +

    +Note that numerical codes are not necessarily portable across platforms. + + + + +

    +


    string.char (···)

    +Receives zero or more integers. +Returns a string with length equal to the number of arguments, +in which each character has the internal numerical code equal +to its corresponding argument. + + +

    +Note that numerical codes are not necessarily portable across platforms. + + + + +

    +


    string.dump (function)

    + + +

    +Returns a string containing a binary representation of the given function, +so that a later loadstring on this string returns +a copy of the function. +function must be a Lua function without upvalues. + + + + +

    +


    string.find (s, pattern [, init [, plain]])

    +Looks for the first match of +pattern in the string s. +If it finds a match, then find returns the indices of s +where this occurrence starts and ends; +otherwise, it returns nil. +A third, optional numerical argument init specifies +where to start the search; +its default value is 1 and may be negative. +A value of true as a fourth, optional argument plain +turns off the pattern matching facilities, +so the function does a plain "find substring" operation, +with no characters in pattern being considered "magic". +Note that if plain is given, then init must be given as well. + + +

    +If the pattern has captures, +then in a successful match +the captured values are also returned, +after the two indices. + + + + +

    +


    string.format (formatstring, ···)

    +Returns a formatted version of its variable number of arguments +following the description given in its first argument (which must be a string). +The format string follows the same rules as the printf family of +standard C functions. +The only differences are that the options/modifiers +*, l, L, n, p, +and h are not supported +and that there is an extra option, q. +The q option formats a string in a form suitable to be safely read +back by the Lua interpreter: +the string is written between double quotes, +and all double quotes, newlines, embedded zeros, +and backslashes in the string +are correctly escaped when written. +For instance, the call + +
    +     string.format('%q', 'a string with "quotes" and \n new line')
    +

    +will produce the string: + +

    +     "a string with \"quotes\" and \
    +      new line"
    +
    + +

    +The options c, d, E, e, f, +g, G, i, o, u, X, and x all +expect a number as argument, +whereas q and s expect a string. + + +

    +This function does not accept string values +containing embedded zeros, +except as arguments to the q option. + + + + +

    +


    string.gmatch (s, pattern)

    +Returns an iterator function that, +each time it is called, +returns the next captures from pattern over string s. +If pattern specifies no captures, +then the whole match is produced in each call. + + +

    +As an example, the following loop + +

    +     s = "hello world from Lua"
    +     for w in string.gmatch(s, "%a+") do
    +       print(w)
    +     end
    +

    +will iterate over all the words from string s, +printing one per line. +The next example collects all pairs key=value from the +given string into a table: + +

    +     t = {}
    +     s = "from=world, to=Lua"
    +     for k, v in string.gmatch(s, "(%w+)=(%w+)") do
    +       t[k] = v
    +     end
    +
    + +

    +For this function, a '^' at the start of a pattern does not +work as an anchor, as this would prevent the iteration. + + + + +

    +


    string.gsub (s, pattern, repl [, n])

    +Returns a copy of s +in which all occurrences of the pattern have been +replaced by a replacement string specified by repl, +which may be a string, a table, or a function. +gsub also returns, as its second value, +the total number of substitutions made. + + +

    +If repl is a string, then its value is used for replacement. +The character % works as an escape character: +any sequence in repl of the form %n, +with n between 1 and 9, +stands for the value of the n-th captured substring (see below). +The sequence %0 stands for the whole match. +The sequence %% stands for a single %. + + +

    +If repl is a table, then the table is queried for every match, +using the first capture as the key; +if the pattern specifies no captures, +then the whole match is used as the key. + + +

    +If repl is a function, then this function is called every time a +match occurs, with all captured substrings passed as arguments, +in order; +if the pattern specifies no captures, +then the whole match is passed as a sole argument. + + +

    +If the value returned by the table query or by the function call +is a string or a number, +then it is used as the replacement string; +otherwise, if it is false or nil, +then there is no replacement +(that is, the original match is kept in the string). + + +

    +The optional last parameter n limits +the maximum number of substitutions to occur. +For instance, when n is 1 only the first occurrence of +pattern is replaced. + + +

    +Here are some examples: + +

    +     x = string.gsub("hello world", "(%w+)", "%1 %1")
    +     --> x="hello hello world world"
    +     
    +     x = string.gsub("hello world", "%w+", "%0 %0", 1)
    +     --> x="hello hello world"
    +     
    +     x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
    +     --> x="world hello Lua from"
    +     
    +     x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
    +     --> x="home = /home/roberto, user = roberto"
    +     
    +     x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
    +           return loadstring(s)()
    +         end)
    +     --> x="4+5 = 9"
    +     
    +     local t = {name="lua", version="5.1"}
    +     x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
    +     --> x="lua-5.1.tar.gz"
    +
    + + + +

    +


    string.len (s)

    +Receives a string and returns its length. +The empty string "" has length 0. +Embedded zeros are counted, +so "a\000bc\000" has length 5. + + + + +

    +


    string.lower (s)

    +Receives a string and returns a copy of this string with all +uppercase letters changed to lowercase. +All other characters are left unchanged. +The definition of what an uppercase letter is depends on the current locale. + + + + +

    +


    string.match (s, pattern [, init])

    +Looks for the first match of +pattern in the string s. +If it finds one, then match returns +the captures from the pattern; +otherwise it returns nil. +If pattern specifies no captures, +then the whole match is returned. +A third, optional numerical argument init specifies +where to start the search; +its default value is 1 and may be negative. + + + + +

    +


    string.rep (s, n)

    +Returns a string that is the concatenation of n copies of +the string s. + + + + +

    +


    string.reverse (s)

    +Returns a string that is the string s reversed. + + + + +

    +


    string.sub (s, i [, j])

    +Returns the substring of s that +starts at i and continues until j; +i and j may be negative. +If j is absent, then it is assumed to be equal to -1 +(which is the same as the string length). +In particular, +the call string.sub(s,1,j) returns a prefix of s +with length j, +and string.sub(s, -i) returns a suffix of s +with length i. + + + + +

    +


    string.upper (s)

    +Receives a string and returns a copy of this string with all +lowercase letters changed to uppercase. +All other characters are left unchanged. +The definition of what a lowercase letter is depends on the current locale. + + + +

    5.4.1 - Patterns

    + + +

    Character Class:

    +A character class is used to represent a set of characters. +The following combinations are allowed in describing a character class: + +

      + +
    • x: +(where x is not one of the magic characters +^$()%.[]*+-?) +represents the character x itself. +
    • + +
    • .: (a dot) represents all characters.
    • + +
    • %a: represents all letters.
    • + +
    • %c: represents all control characters.
    • + +
    • %d: represents all digits.
    • + +
    • %l: represents all lowercase letters.
    • + +
    • %p: represents all punctuation characters.
    • + +
    • %s: represents all space characters.
    • + +
    • %u: represents all uppercase letters.
    • + +
    • %w: represents all alphanumeric characters.
    • + +
    • %x: represents all hexadecimal digits.
    • + +
    • %z: represents the character with representation 0.
    • + +
    • %x: (where x is any non-alphanumeric character) +represents the character x. +This is the standard way to escape the magic characters. +Any punctuation character (even the non magic) +can be preceded by a '%' +when used to represent itself in a pattern. +
    • + +
    • [set]: +represents the class which is the union of all +characters in set. +A range of characters may be specified by +separating the end characters of the range with a '-'. +All classes %x described above may also be used as +components in set. +All other characters in set represent themselves. +For example, [%w_] (or [_%w]) +represents all alphanumeric characters plus the underscore, +[0-7] represents the octal digits, +and [0-7%l%-] represents the octal digits plus +the lowercase letters plus the '-' character. + + +

      +The interaction between ranges and classes is not defined. +Therefore, patterns like [%a-z] or [a-%%] +have no meaning. +

    • + +
    • [^set]: +represents the complement of set, +where set is interpreted as above. +
    • + +

    +For all classes represented by single letters (%a, %c, etc.), +the corresponding uppercase letter represents the complement of the class. +For instance, %S represents all non-space characters. + + +

    +The definitions of letter, space, and other character groups +depend on the current locale. +In particular, the class [a-z] may not be equivalent to %l. + + + + + +

    Pattern Item:

    +A pattern item may be + +

      + +
    • +a single character class, +which matches any single character in the class; +
    • + +
    • +a single character class followed by '*', +which matches 0 or more repetitions of characters in the class. +These repetition items will always match the longest possible sequence; +
    • + +
    • +a single character class followed by '+', +which matches 1 or more repetitions of characters in the class. +These repetition items will always match the longest possible sequence; +
    • + +
    • +a single character class followed by '-', +which also matches 0 or more repetitions of characters in the class. +Unlike '*', +these repetition items will always match the shortest possible sequence; +
    • + +
    • +a single character class followed by '?', +which matches 0 or 1 occurrence of a character in the class; +
    • + +
    • +%n, for n between 1 and 9; +such item matches a substring equal to the n-th captured string +(see below); +
    • + +
    • +%bxy, where x and y are two distinct characters; +such item matches strings that start with x, end with y, +and where the x and y are balanced. +This means that, if one reads the string from left to right, +counting +1 for an x and -1 for a y, +the ending y is the first y where the count reaches 0. +For instance, the item %b() matches expressions with +balanced parentheses. +
    • + +
    + + + + +

    Pattern:

    +A pattern is a sequence of pattern items. +A '^' at the beginning of a pattern anchors the match at the +beginning of the subject string. +A '$' at the end of a pattern anchors the match at the +end of the subject string. +At other positions, +'^' and '$' have no special meaning and represent themselves. + + + + + +

    Captures:

    +A pattern may contain sub-patterns enclosed in parentheses; +they describe captures. +When a match succeeds, the substrings of the subject string +that match captures are stored (captured) for future use. +Captures are numbered according to their left parentheses. +For instance, in the pattern "(a*(.)%w(%s*))", +the part of the string matching "a*(.)%w(%s*)" is +stored as the first capture (and therefore has number 1); +the character matching "." is captured with number 2, +and the part matching "%s*" has number 3. + + +

    +As a special case, the empty capture () captures +the current string position (a number). +For instance, if we apply the pattern "()aa()" on the +string "flaaap", there will be two captures: 3 and 5. + + +

    +A pattern cannot contain embedded zeros. Use %z instead. + + + + + + + + + + + +

    5.5 - Table Manipulation

    +This library provides generic functions for table manipulation. +It provides all its functions inside the table table. + + +

    +Most functions in the table library assume that the table +represents an array or a list. +For these functions, when we talk about the "length" of a table +we mean the result of the length operator. + + +

    +


    table.concat (table [, sep [, i [, j]]])

    +Given an array where all elements are strings or numbers, +returns table[i]..sep..table[i+1] ··· sep..table[j]. +The default value for sep is the empty string, +the default for i is 1, +and the default for j is the length of the table. +If i is greater than j, returns the empty string. + + + + +

    +


    table.insert (table, [pos,] value)

    + + +

    +Inserts element value at position pos in table, +shifting up other elements to open space, if necessary. +The default value for pos is n+1, +where n is the length of the table (see §2.5.5), +so that a call table.insert(t,x) inserts x at the end +of table t. + + + + +

    +


    table.maxn (table)

    + + +

    +Returns the largest positive numerical index of the given table, +or zero if the table has no positive numerical indices. +(To do its job this function does a linear traversal of +the whole table.) + + + + +

    +


    table.remove (table [, pos])

    + + +

    +Removes from table the element at position pos, +shifting down other elements to close the space, if necessary. +Returns the value of the removed element. +The default value for pos is n, +where n is the length of the table, +so that a call table.remove(t) removes the last element +of table t. + + + + +

    +


    table.sort (table [, comp])

    +Sorts table elements in a given order, in-place, +from table[1] to table[n], +where n is the length of the table. +If comp is given, +then it must be a function that receives two table elements, +and returns true +when the first is less than the second +(so that not comp(a[i+1],a[i]) will be true after the sort). +If comp is not given, +then the standard Lua operator < is used instead. + + +

    +The sort algorithm is not stable; +that is, elements considered equal by the given order +may have their relative positions changed by the sort. + + + + + + + +

    5.6 - Mathematical Functions

    + +

    +This library is an interface to the standard C math library. +It provides all its functions inside the table math. + + +

    +


    math.abs (x)

    + + +

    +Returns the absolute value of x. + + + + +

    +


    math.acos (x)

    + + +

    +Returns the arc cosine of x (in radians). + + + + +

    +


    math.asin (x)

    + + +

    +Returns the arc sine of x (in radians). + + + + +

    +


    math.atan (x)

    + + +

    +Returns the arc tangent of x (in radians). + + + + +

    +


    math.atan2 (x, y)

    + + +

    +Returns the arc tangent of x/y (in radians), +but uses the signs of both parameters to find the +quadrant of the result. +(It also handles correctly the case of y being zero.) + + + + +

    +


    math.ceil (x)

    + + +

    +Returns the smallest integer larger than or equal to x. + + + + +

    +


    math.cos (x)

    + + +

    +Returns the cosine of x (assumed to be in radians). + + + + +

    +


    math.cosh (x)

    + + +

    +Returns the hyperbolic cosine of x. + + + + +

    +


    math.deg (x)

    + + +

    +Returns the angle x (given in radians) in degrees. + + + + +

    +


    math.exp (x)

    + + +

    +Returns the the value ex. + + + + +

    +


    math.floor (x)

    + + +

    +Returns the largest integer smaller than or equal to x. + + + + +

    +


    math.fmod (x, y)

    + + +

    +Returns the remainder of the division of x by y. + + + + +

    +


    math.frexp (x)

    + + +

    +Returns m and e such that x = m2e, +e is an integer and the absolute value of m is +in the range [0.5, 1) +(or zero when x is zero). + + + + +

    +


    math.huge

    + + +

    +The value HUGE_VAL, +a value larger than or equal to any other numerical value. + + + + +

    +


    math.ldexp (m, e)

    + + +

    +Returns m2e (e should be an integer). + + + + +

    +


    math.log (x)

    + + +

    +Returns the natural logarithm of x. + + + + +

    +


    math.log10 (x)

    + + +

    +Returns the base-10 logarithm of x. + + + + +

    +


    math.max (x, ···)

    + + +

    +Returns the maximum value among its arguments. + + + + +

    +


    math.min (x, ···)

    + + +

    +Returns the minimum value among its arguments. + + + + +

    +


    math.modf (x)

    + + +

    +Returns two numbers, +the integral part of x and the fractional part of x. + + + + +

    +


    math.pi

    + + +

    +The value of pi. + + + + +

    +


    math.pow (x, y)

    + + +

    +Returns xy. +(You can also use the expression x^y to compute this value.) + + + + +

    +


    math.rad (x)

    + + +

    +Returns the angle x (given in degrees) in radians. + + + + +

    +


    math.random ([m [, n]])

    + + +

    +This function is an interface to the simple +pseudo-random generator function rand provided by ANSI C. +(No guarantees can be given for its statistical properties.) + + +

    +When called without arguments, +returns a pseudo-random real number +in the range [0,1). +When called with a number m, +math.random returns +a pseudo-random integer in the range [1, m]. +When called with two numbers m and n, +math.random returns a pseudo-random +integer in the range [m, n]. + + + + +

    +


    math.randomseed (x)

    + + +

    +Sets x as the "seed" +for the pseudo-random generator: +equal seeds produce equal sequences of numbers. + + + + +

    +


    math.sin (x)

    + + +

    +Returns the sine of x (assumed to be in radians). + + + + +

    +


    math.sinh (x)

    + + +

    +Returns the hyperbolic sine of x. + + + + +

    +


    math.sqrt (x)

    + + +

    +Returns the square root of x. +(You can also use the expression x^0.5 to compute this value.) + + + + +

    +


    math.tan (x)

    + + +

    +Returns the tangent of x (assumed to be in radians). + + + + +

    +


    math.tanh (x)

    + + +

    +Returns the hyperbolic tangent of x. + + + + + + + +

    5.7 - Input and Output Facilities

    + +

    +The I/O library provides two different styles for file manipulation. +The first one uses implicit file descriptors; +that is, there are operations to set a default input file and a +default output file, +and all input/output operations are over these default files. +The second style uses explicit file descriptors. + + +

    +When using implicit file descriptors, +all operations are supplied by table io. +When using explicit file descriptors, +the operation io.open returns a file descriptor +and then all operations are supplied as methods of the file descriptor. + + +

    +The table io also provides +three predefined file descriptors with their usual meanings from C: +io.stdin, io.stdout, and io.stderr. + + +

    +Unless otherwise stated, +all I/O functions return nil on failure +(plus an error message as a second result and +a system-dependent error code as a third result) +and some value different from nil on success. + + +

    +


    io.close ([file])

    + + +

    +Equivalent to file:close(). +Without a file, closes the default output file. + + + + +

    +


    io.flush ()

    + + +

    +Equivalent to file:flush over the default output file. + + + + +

    +


    io.input ([file])

    + + +

    +When called with a file name, it opens the named file (in text mode), +and sets its handle as the default input file. +When called with a file handle, +it simply sets this file handle as the default input file. +When called without parameters, +it returns the current default input file. + + +

    +In case of errors this function raises the error, +instead of returning an error code. + + + + +

    +


    io.lines ([filename])

    + + +

    +Opens the given file name in read mode +and returns an iterator function that, +each time it is called, +returns a new line from the file. +Therefore, the construction + +

    +     for line in io.lines(filename) do body end
    +

    +will iterate over all lines of the file. +When the iterator function detects the end of file, +it returns nil (to finish the loop) and automatically closes the file. + + +

    +The call io.lines() (with no file name) is equivalent +to io.input():lines(); +that is, it iterates over the lines of the default input file. +In this case it does not close the file when the loop ends. + + + + +

    +


    io.open (filename [, mode])

    + + +

    +This function opens a file, +in the mode specified in the string mode. +It returns a new file handle, +or, in case of errors, nil plus an error message. + + +

    +The mode string can be any of the following: + +

      +
    • "r": read mode (the default);
    • +
    • "w": write mode;
    • +
    • "a": append mode;
    • +
    • "r+": update mode, all previous data is preserved;
    • +
    • "w+": update mode, all previous data is erased;
    • +
    • "a+": append update mode, previous data is preserved, + writing is only allowed at the end of file.
    • +

    +The mode string may also have a 'b' at the end, +which is needed in some systems to open the file in binary mode. +This string is exactly what is used in the +standard C function fopen. + + + + +

    +


    io.output ([file])

    + + +

    +Similar to io.input, but operates over the default output file. + + + + +

    +


    io.popen (prog [, mode])

    + + +

    +Starts program prog in a separated process and returns +a file handle that you can use to read data from this program +(if mode is "r", the default) +or to write data to this program +(if mode is "w"). + + +

    +This function is system dependent and is not available +on all platforms. + + + + +

    +


    io.read (···)

    + + +

    +Equivalent to io.input():read. + + + + +

    +


    io.tmpfile ()

    + + +

    +Returns a handle for a temporary file. +This file is opened in update mode +and it is automatically removed when the program ends. + + + + +

    +


    io.type (obj)

    + + +

    +Checks whether obj is a valid file handle. +Returns the string "file" if obj is an open file handle, +"closed file" if obj is a closed file handle, +or nil if obj is not a file handle. + + + + +

    +


    io.write (···)

    + + +

    +Equivalent to io.output():write. + + + + +

    +


    file:close ()

    + + +

    +Closes file. +Note that files are automatically closed when +their handles are garbage collected, +but that takes an unpredictable amount of time to happen. + + + + +

    +


    file:flush ()

    + + +

    +Saves any written data to file. + + + + +

    +


    file:lines ()

    + + +

    +Returns an iterator function that, +each time it is called, +returns a new line from the file. +Therefore, the construction + +

    +     for line in file:lines() do body end
    +

    +will iterate over all lines of the file. +(Unlike io.lines, this function does not close the file +when the loop ends.) + + + + +

    +


    file:read (···)

    + + +

    +Reads the file file, +according to the given formats, which specify what to read. +For each format, +the function returns a string (or a number) with the characters read, +or nil if it cannot read data with the specified format. +When called without formats, +it uses a default format that reads the entire next line +(see below). + + +

    +The available formats are + +

      + +
    • "*n": +reads a number; +this is the only format that returns a number instead of a string. +
    • + +
    • "*a": +reads the whole file, starting at the current position. +On end of file, it returns the empty string. +
    • + +
    • "*l": +reads the next line (skipping the end of line), +returning nil on end of file. +This is the default format. +
    • + +
    • number: +reads a string with up to this number of characters, +returning nil on end of file. +If number is zero, +it reads nothing and returns an empty string, +or nil on end of file. +
    • + +
    + + + +

    +


    file:seek ([whence] [, offset])

    + + +

    +Sets and gets the file position, +measured from the beginning of the file, +to the position given by offset plus a base +specified by the string whence, as follows: + +

      +
    • "set": base is position 0 (beginning of the file);
    • +
    • "cur": base is current position;
    • +
    • "end": base is end of file;
    • +

    +In case of success, function seek returns the final file position, +measured in bytes from the beginning of the file. +If this function fails, it returns nil, +plus a string describing the error. + + +

    +The default value for whence is "cur", +and for offset is 0. +Therefore, the call file:seek() returns the current +file position, without changing it; +the call file:seek("set") sets the position to the +beginning of the file (and returns 0); +and the call file:seek("end") sets the position to the +end of the file, and returns its size. + + + + +

    +


    file:setvbuf (mode [, size])

    + + +

    +Sets the buffering mode for an output file. +There are three available modes: + +

      + +
    • "no": +no buffering; the result of any output operation appears immediately. +
    • + +
    • "full": +full buffering; output operation is performed only +when the buffer is full (or when you explicitly flush the file +(see io.flush)). +
    • + +
    • "line": +line buffering; output is buffered until a newline is output +or there is any input from some special files +(such as a terminal device). +
    • + +

    +For the last two cases, size +specifies the size of the buffer, in bytes. +The default is an appropriate size. + + + + +

    +


    file:write (···)

    + + +

    +Writes the value of each of its arguments to +the file. +The arguments must be strings or numbers. +To write other values, +use tostring or string.format before write. + + + + + + + +

    5.8 - Operating System Facilities

    + +

    +This library is implemented through table os. + + +

    +


    os.clock ()

    + + +

    +Returns an approximation of the amount in seconds of CPU time +used by the program. + + + + +

    +


    os.date ([format [, time]])

    + + +

    +Returns a string or a table containing date and time, +formatted according to the given string format. + + +

    +If the time argument is present, +this is the time to be formatted +(see the os.time function for a description of this value). +Otherwise, date formats the current time. + + +

    +If format starts with '!', +then the date is formatted in Coordinated Universal Time. +After this optional character, +if format is the string "*t", +then date returns a table with the following fields: +year (four digits), month (1--12), day (1--31), +hour (0--23), min (0--59), sec (0--61), +wday (weekday, Sunday is 1), +yday (day of the year), +and isdst (daylight saving flag, a boolean). + + +

    +If format is not "*t", +then date returns the date as a string, +formatted according to the same rules as the C function strftime. + + +

    +When called without arguments, +date returns a reasonable date and time representation that depends on +the host system and on the current locale +(that is, os.date() is equivalent to os.date("%c")). + + + + +

    +


    os.difftime (t2, t1)

    + + +

    +Returns the number of seconds from time t1 to time t2. +In POSIX, Windows, and some other systems, +this value is exactly t2-t1. + + + + +

    +


    os.execute ([command])

    + + +

    +This function is equivalent to the C function system. +It passes command to be executed by an operating system shell. +It returns a status code, which is system-dependent. +If command is absent, then it returns nonzero if a shell is available +and zero otherwise. + + + + +

    +


    os.exit ([code])

    + + +

    +Calls the C function exit, +with an optional code, +to terminate the host program. +The default value for code is the success code. + + + + +

    +


    os.getenv (varname)

    + + +

    +Returns the value of the process environment variable varname, +or nil if the variable is not defined. + + + + +

    +


    os.remove (filename)

    + + +

    +Deletes the file or directory with the given name. +Directories must be empty to be removed. +If this function fails, it returns nil, +plus a string describing the error. + + + + +

    +


    os.rename (oldname, newname)

    + + +

    +Renames file or directory named oldname to newname. +If this function fails, it returns nil, +plus a string describing the error. + + + + +

    +


    os.setlocale (locale [, category])

    + + +

    +Sets the current locale of the program. +locale is a string specifying a locale; +category is an optional string describing which category to change: +"all", "collate", "ctype", +"monetary", "numeric", or "time"; +the default category is "all". +The function returns the name of the new locale, +or nil if the request cannot be honored. + + +

    +If locale is the empty string, +the current locate is set to an implementation-defined native locale. +If locate is the string "C", +the current locate is set to the standard C locale. + + +

    +When called with nil as the first argument, +this function only returns the name of the current locale +for the given category. + + + + +

    +


    os.time ([table])

    + + +

    +Returns the current time when called without arguments, +or a time representing the date and time specified by the given table. +This table must have fields year, month, and day, +and may have fields hour, min, sec, and isdst +(for a description of these fields, see the os.date function). + + +

    +The returned value is a number, whose meaning depends on your system. +In POSIX, Windows, and some other systems, this number counts the number +of seconds since some given start time (the "epoch"). +In other systems, the meaning is not specified, +and the number returned by time can be used only as an argument to +date and difftime. + + + + +

    +


    os.tmpname ()

    + + +

    +Returns a string with a file name that can +be used for a temporary file. +The file must be explicitly opened before its use +and explicitly removed when no longer needed. + + + + + + + +

    5.9 - The Debug Library

    + +

    +This library provides +the functionality of the debug interface to Lua programs. +You should exert care when using this library. +The functions provided here should be used exclusively for debugging +and similar tasks, such as profiling. +Please resist the temptation to use them as a +usual programming tool: +they can be very slow. +Moreover, several of its functions +violate some assumptions about Lua code +(e.g., that variables local to a function +cannot be accessed from outside or +that userdata metatables cannot be changed by Lua code) +and therefore can compromise otherwise secure code. + + +

    +All functions in this library are provided +inside the debug table. +All functions that operate over a thread +have an optional first argument which is the +thread to operate over. +The default is always the current thread. + + +

    +


    debug.debug ()

    + + +

    +Enters an interactive mode with the user, +running each string that the user enters. +Using simple commands and other debug facilities, +the user can inspect global and local variables, +change their values, evaluate expressions, and so on. +A line containing only the word cont finishes this function, +so that the caller continues its execution. + + +

    +Note that commands for debug.debug are not lexically nested +within any function, and so have no direct access to local variables. + + + + +

    +


    debug.getfenv (o)

    +Returns the environment of object o. + + + + +

    +


    debug.gethook ([thread])

    + + +

    +Returns the current hook settings of the thread, as three values: +the current hook function, the current hook mask, +and the current hook count +(as set by the debug.sethook function). + + + + +

    +


    debug.getinfo ([thread,] function [, what])

    + + +

    +Returns a table with information about a function. +You can give the function directly, +or you can give a number as the value of function, +which means the function running at level function of the call stack +of the given thread: +level 0 is the current function (getinfo itself); +level 1 is the function that called getinfo; +and so on. +If function is a number larger than the number of active functions, +then getinfo returns nil. + + +

    +The returned table may contain all the fields returned by lua_getinfo, +with the string what describing which fields to fill in. +The default for what is to get all information available, +except the table of valid lines. +If present, +the option 'f' +adds a field named func with the function itself. +If present, +the option 'L' +adds a field named activelines with the table of +valid lines. + + +

    +For instance, the expression debug.getinfo(1,"n").name returns +a name of the current function, if a reasonable name can be found, +and the expression debug.getinfo(print) +returns a table with all available information +about the print function. + + + + +

    +


    debug.getlocal ([thread,] level, local)

    + + +

    +This function returns the name and the value of the local variable +with index local of the function at level level of the stack. +(The first parameter or local variable has index 1, and so on, +until the last active local variable.) +The function returns nil if there is no local +variable with the given index, +and raises an error when called with a level out of range. +(You can call debug.getinfo to check whether the level is valid.) + + +

    +Variable names starting with '(' (open parentheses) +represent internal variables +(loop control variables, temporaries, and C function locals). + + + + +

    +


    debug.getmetatable (object)

    + + +

    +Returns the metatable of the given object +or nil if it does not have a metatable. + + + + +

    +


    debug.getregistry ()

    + + +

    +Returns the registry table (see §3.5). + + + + +

    +


    debug.getupvalue (func, up)

    + + +

    +This function returns the name and the value of the upvalue +with index up of the function func. +The function returns nil if there is no upvalue with the given index. + + + + +

    +


    debug.setfenv (object, table)

    + + +

    +Sets the environment of the given object to the given table. +Returns object. + + + + +

    +


    debug.sethook ([thread,] hook, mask [, count])

    + + +

    +Sets the given function as a hook. +The string mask and the number count describe +when the hook will be called. +The string mask may have the following characters, +with the given meaning: + +

      +
    • "c": The hook is called every time Lua calls a function;
    • +
    • "r": The hook is called every time Lua returns from a function;
    • +
    • "l": The hook is called every time Lua enters a new line of code.
    • +

    +With a count different from zero, +the hook is called after every count instructions. + + +

    +When called without arguments, +debug.sethook turns off the hook. + + +

    +When the hook is called, its first parameter is a string +describing the event that has triggered its call: +"call", "return" (or "tail return"), +"line", and "count". +For line events, +the hook also gets the new line number as its second parameter. +Inside a hook, +you can call getinfo with level 2 to get more information about +the running function +(level 0 is the getinfo function, +and level 1 is the hook function), +unless the event is "tail return". +In this case, Lua is only simulating the return, +and a call to getinfo will return invalid data. + + + + +

    +


    debug.setlocal ([thread,] level, local, value)

    + + +

    +This function assigns the value value to the local variable +with index local of the function at level level of the stack. +The function returns nil if there is no local +variable with the given index, +and raises an error when called with a level out of range. +(You can call getinfo to check whether the level is valid.) +Otherwise, it returns the name of the local variable. + + + + +

    +


    debug.setmetatable (object, table)

    + + +

    +Sets the metatable for the given object to the given table +(which can be nil). + + + + +

    +


    debug.setupvalue (func, up, value)

    + + +

    +This function assigns the value value to the upvalue +with index up of the function func. +The function returns nil if there is no upvalue +with the given index. +Otherwise, it returns the name of the upvalue. + + + + +

    +


    debug.traceback ([thread,] [message] [, level])

    + + +

    +Returns a string with a traceback of the call stack. +An optional message string is appended +at the beginning of the traceback. +An optional level number tells at which level +to start the traceback +(default is 1, the function calling traceback). + + + + + + + +

    6 - Lua Stand-alone

    + +

    +Although Lua has been designed as an extension language, +to be embedded in a host C program, +it is also frequently used as a stand-alone language. +An interpreter for Lua as a stand-alone language, +called simply lua, +is provided with the standard distribution. +The stand-alone interpreter includes +all standard libraries, including the debug library. +Its usage is: + +

    +     lua [options] [script [args]]
    +

    +The options are: + +

      +
    • -e stat: executes string stat;
    • +
    • -l mod: "requires" mod;
    • +
    • -i: enters interactive mode after running script;
    • +
    • -v: prints version information;
    • +
    • --: stops handling options;
    • +
    • -: executes stdin as a file and stops handling options.
    • +

    +After handling its options, lua runs the given script, +passing to it the given args as string arguments. +When called without arguments, +lua behaves as lua -v -i +when the standard input (stdin) is a terminal, +and as lua - otherwise. + + +

    +Before running any argument, +the interpreter checks for an environment variable LUA_INIT. +If its format is @filename, +then lua executes the file. +Otherwise, lua executes the string itself. + + +

    +All options are handled in order, except -i. +For instance, an invocation like + +

    +     $ lua -e'a=1' -e 'print(a)' script.lua
    +

    +will first set a to 1, then print the value of a (which is '1'), +and finally run the file script.lua with no arguments. +(Here $ is the shell prompt. Your prompt may be different.) + + +

    +Before starting to run the script, +lua collects all arguments in the command line +in a global table called arg. +The script name is stored at index 0, +the first argument after the script name goes to index 1, +and so on. +Any arguments before the script name +(that is, the interpreter name plus the options) +go to negative indices. +For instance, in the call + +

    +     $ lua -la b.lua t1 t2
    +

    +the interpreter first runs the file a.lua, +then creates a table + +

    +     arg = { [-2] = "lua", [-1] = "-la",
    +             [0] = "b.lua",
    +             [1] = "t1", [2] = "t2" }
    +

    +and finally runs the file b.lua. +The script is called with arg[1], arg[2], ··· +as arguments; +it can also access these arguments with the vararg expression '...'. + + +

    +In interactive mode, +if you write an incomplete statement, +the interpreter waits for its completion +by issuing a different prompt. + + +

    +If the global variable _PROMPT contains a string, +then its value is used as the prompt. +Similarly, if the global variable _PROMPT2 contains a string, +its value is used as the secondary prompt +(issued during incomplete statements). +Therefore, both prompts can be changed directly on the command line. +For instance, + +

    +     $ lua -e"_PROMPT='myprompt> '" -i
    +

    +(the outer pair of quotes is for the shell, +the inner pair is for Lua), +or in any Lua programs by assigning to _PROMPT. +Note the use of -i to enter interactive mode; otherwise, +the program would just end silently right after the assignment to _PROMPT. + + +

    +To allow the use of Lua as a +script interpreter in Unix systems, +the stand-alone interpreter skips +the first line of a chunk if it starts with #. +Therefore, Lua scripts can be made into executable programs +by using chmod +x and the #! form, +as in + +

    +     #!/usr/local/bin/lua
    +

    +(Of course, +the location of the Lua interpreter may be different in your machine. +If lua is in your PATH, +then + +

    +     #!/usr/bin/env lua
    +

    +is a more portable solution.) + + + +

    7 - Incompatibilities with the Previous Version

    + +

    +Here we list the incompatibilities that you may found when moving a program +from Lua 5.0 to Lua 5.1. +You can avoid most of the incompatibilities compiling Lua with +appropriate options (see file luaconf.h). +However, +all these compatibility options will be removed in the next version of Lua. + + + +

    7.1 - Changes in the Language

    +
      + +
    • +The vararg system changed from the pseudo-argument arg with a +table with the extra arguments to the vararg expression. +(See compile-time option LUA_COMPAT_VARARG in luaconf.h.) +
    • + +
    • +There was a subtle change in the scope of the implicit +variables of the for statement and for the repeat statement. +
    • + +
    • +The long string/long comment syntax ([[string]]) +does not allow nesting. +You can use the new syntax ([=[string]=]) in these cases. +(See compile-time option LUA_COMPAT_LSTR in luaconf.h.) +
    • + +
    + + + + +

    7.2 - Changes in the Libraries

    +
      + +
    • +Function string.gfind was renamed string.gmatch. +(See compile-time option LUA_COMPAT_GFIND in luaconf.h.) +
    • + +
    • +When string.gsub is called with a function as its +third argument, +whenever this function returns nil or false the +replacement string is the whole match, +instead of the empty string. +
    • + +
    • +Function table.setn was deprecated. +Function table.getn corresponds +to the new length operator (#); +use the operator instead of the function. +(See compile-time option LUA_COMPAT_GETN in luaconf.h.) +
    • + +
    • +Function loadlib was renamed package.loadlib. +(See compile-time option LUA_COMPAT_LOADLIB in luaconf.h.) +
    • + +
    • +Function math.mod was renamed math.fmod. +(See compile-time option LUA_COMPAT_MOD in luaconf.h.) +
    • + +
    • +Functions table.foreach and table.foreachi are deprecated. +You can use a for loop with pairs or ipairs instead. +
    • + +
    • +There were substantial changes in function require due to +the new module system. +However, the new behavior is mostly compatible with the old, +but require gets the path from package.path instead +of from LUA_PATH. +
    • + +
    • +Function collectgarbage has different arguments. +Function gcinfo is deprecated; +use collectgarbage("count") instead. +
    • + +
    + + + + +

    7.3 - Changes in the API

    +
      + +
    • +The luaopen_* functions (to open libraries) +cannot be called directly, +like a regular C function. +They must be called through Lua, +like a Lua function. +
    • + +
    • +Function lua_open was replaced by lua_newstate to +allow the user to set a memory-allocation function. +You can use luaL_newstate from the standard library to +create a state with a standard allocation function +(based on realloc). +
    • + +
    • +Functions luaL_getn and luaL_setn +(from the auxiliary library) are deprecated. +Use lua_objlen instead of luaL_getn +and nothing instead of luaL_setn. +
    • + +
    • +Function luaL_openlib was replaced by luaL_register. +
    • + +
    • +Function luaL_checkudata now throws an error when the given value +is not a userdata of the expected type. +(In Lua 5.0 it returned NULL.) +
    • + +
    + + + + +

    8 - The Complete Syntax of Lua

    + +

    +Here is the complete syntax of Lua in extended BNF. +(It does not describe operator precedences.) + + + + +

    +
    +	chunk ::= {stat [`;´]} [laststat [`;´]]
    +
    +	block ::= chunk
    +
    +	stat ::=  varlist1 `=´ explist1 | 
    +		 functioncall | 
    +		 do block end | 
    +		 while exp do block end | 
    +		 repeat block until exp | 
    +		 if exp then block {elseif exp then block} [else block] end | 
    +		 for Name `=´ exp `,´ exp [`,´ exp] do block end | 
    +		 for namelist in explist1 do block end | 
    +		 function funcname funcbody | 
    +		 local function Name funcbody | 
    +		 local namelist [`=´ explist1] 
    +
    +	laststat ::= return [explist1] | break
    +
    +	funcname ::= Name {`.´ Name} [`:´ Name]
    +
    +	varlist1 ::= var {`,´ var}
    +
    +	var ::=  Name | prefixexp `[´ exp `]´ | prefixexp `.´ Name 
    +
    +	namelist ::= Name {`,´ Name}
    +
    +	explist1 ::= {exp `,´} exp
    +
    +	exp ::=  nil | false | true | Number | String | `...´ | function | 
    +		 prefixexp | tableconstructor | exp binop exp | unop exp 
    +
    +	prefixexp ::= var | functioncall | `(´ exp `)´
    +
    +	functioncall ::=  prefixexp args | prefixexp `:´ Name args 
    +
    +	args ::=  `(´ [explist1] `)´ | tableconstructor | String 
    +
    +	function ::= function funcbody
    +
    +	funcbody ::= `(´ [parlist1] `)´ block end
    +
    +	parlist1 ::= namelist [`,´ `...´] | `...´
    +
    +	tableconstructor ::= `{´ [fieldlist] `}´
    +
    +	fieldlist ::= field {fieldsep field} [fieldsep]
    +
    +	field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
    +
    +	fieldsep ::= `,´ | `;´
    +
    +	binop ::= `+´ | `-´ | `*´ | `/´ | `^´ | `%´ | `..´ | 
    +		 `<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ | 
    +		 and | or
    +
    +	unop ::= `-´ | not | `#´
    +
    +
    + +

    + + + + + + +


    + +Last update: +Mon Mar 26 12:59:26 BRT 2007 + + + + + diff --git a/lua/doc/readme.html b/lua/doc/readme.html new file mode 100644 index 0000000..28b1d14 --- /dev/null +++ b/lua/doc/readme.html @@ -0,0 +1,40 @@ + + +Lua documentation + + + + + +
    +

    +Lua +Documentation +

    + +This is the documentation included in the source distribution of Lua 5.1.2. + + + +Lua's +official web site +contains updated documentation, +especially the +reference manual. +

    + +


    + +Last update: +Fri Mar 23 14:19:36 BRT 2007 + + + + diff --git a/lua/etc/Makefile b/lua/etc/Makefile new file mode 100644 index 0000000..6d00008 --- /dev/null +++ b/lua/etc/Makefile @@ -0,0 +1,44 @@ +# makefile for Lua etc + +TOP= .. +LIB= $(TOP)/src +INC= $(TOP)/src +BIN= $(TOP)/src +SRC= $(TOP)/src +TST= $(TOP)/test + +CC= gcc +CFLAGS= -O2 -Wall -I$(INC) $(MYCFLAGS) +MYCFLAGS= +MYLDFLAGS= -Wl,-E +MYLIBS= -lm +#MYLIBS= -lm -Wl,-E -ldl -lreadline -lhistory -lncurses +RM= rm -f + +default: + @echo 'Please choose a target: min noparser one strict clean' + +min: min.c + $(CC) $(CFLAGS) $@.c -L$(LIB) -llua $(MYLIBS) + echo 'print"Hello there!"' | ./a.out + +noparser: noparser.o + $(CC) noparser.o $(SRC)/lua.o -L$(LIB) -llua $(MYLIBS) + $(BIN)/luac $(TST)/hello.lua + -./a.out luac.out + -./a.out -e'a=1' + +one: + $(CC) $(CFLAGS) all.c $(MYLIBS) + ./a.out $(TST)/hello.lua + +strict: + -$(BIN)/lua -e 'print(a);b=2' + -$(BIN)/lua -lstrict -e 'print(a)' + -$(BIN)/lua -e 'function f() b=2 end f()' + -$(BIN)/lua -lstrict -e 'function f() b=2 end f()' + +clean: + $(RM) a.out core core.* *.o luac.out + +.PHONY: default min noparser one strict clean diff --git a/lua/etc/README b/lua/etc/README new file mode 100644 index 0000000..5149fc9 --- /dev/null +++ b/lua/etc/README @@ -0,0 +1,37 @@ +This directory contains some useful files and code. +Unlike the code in ../src, everything here is in the public domain. + +If any of the makes fail, you're probably not using the same libraries +used to build Lua. Set MYLIBS in Makefile accordingly. + +all.c + Full Lua interpreter in a single file. + Do "make one" for a demo. + +lua.hpp + Lua header files for C++ using 'extern "C"'. + +lua.ico + A Lua icon for Windows (and web sites: save as favicon.ico). + Drawn by hand by Markus Gritsch . + +lua.pc + pkg-config data for Lua + +luavs.bat + Script to build Lua under "Visual Studio .NET Command Prompt". + Run it from the toplevel as etc\luavs.bat. + +min.c + A minimal Lua interpreter. + Good for learning and for starting your own. + Do "make min" for a demo. + +noparser.c + Linking with noparser.o avoids loading the parsing modules in lualib.a. + Do "make noparser" for a demo. + +strict.lua + Traps uses of undeclared global variables. + Do "make strict" for a demo. + diff --git a/lua/etc/all.c b/lua/etc/all.c new file mode 100644 index 0000000..dab68fa --- /dev/null +++ b/lua/etc/all.c @@ -0,0 +1,38 @@ +/* +* all.c -- Lua core, libraries and interpreter in a single file +*/ + +#define luaall_c + +#include "lapi.c" +#include "lcode.c" +#include "ldebug.c" +#include "ldo.c" +#include "ldump.c" +#include "lfunc.c" +#include "lgc.c" +#include "llex.c" +#include "lmem.c" +#include "lobject.c" +#include "lopcodes.c" +#include "lparser.c" +#include "lstate.c" +#include "lstring.c" +#include "ltable.c" +#include "ltm.c" +#include "lundump.c" +#include "lvm.c" +#include "lzio.c" + +#include "lauxlib.c" +#include "lbaselib.c" +#include "ldblib.c" +#include "liolib.c" +#include "linit.c" +#include "lmathlib.c" +#include "loadlib.c" +#include "loslib.c" +#include "lstrlib.c" +#include "ltablib.c" + +#include "lua.c" diff --git a/lua/etc/lua.hpp b/lua/etc/lua.hpp new file mode 100644 index 0000000..ec417f5 --- /dev/null +++ b/lua/etc/lua.hpp @@ -0,0 +1,9 @@ +// lua.hpp +// Lua header files for C++ +// <> not supplied automatically because Lua also compiles as C++ + +extern "C" { +#include "lua.h" +#include "lualib.h" +#include "lauxlib.h" +} diff --git a/lua/etc/lua.ico b/lua/etc/lua.ico new file mode 100644 index 0000000000000000000000000000000000000000..ccbabc4e2004683f29598a991006d7caff6d837d GIT binary patch literal 1078 zcwVJbJ8r`;45gc($<*Woji;hxZx9aztj$-+V4&HeK|s9eDm{X?UZZ124+X3#EUBNJ zq5%r@*$n+8@zEw3fCBEIEVm%|yaRY*zugA@TmU>Q*zOk*56$&h(7dX9;saw3@d*j;l=ZRWEV$h&|=LfE*@AdJsdWe2KuNUXnuZOF89#I|U^){iTsUNZtB#iG@<`F+Rn5l^# zL4O9$PkKieSdoK*1|EqIfKv~!7vtca7@yqy#nSl{&ssHW7OY)d;GT0m^2}Xi?uuyd zGUqb+B}{X!;TH5i=G=sVm2#_8R2}sY6wZd->ue$)Z7 oZ|h-?*l*}dulT*WQ?L-D5%|9zo;i$p+V26?@Is?+%J5cv15c + +#include "lua.h" +#include "lauxlib.h" + +static int print(lua_State *L) +{ + int n=lua_gettop(L); + int i; + for (i=1; i<=n; i++) + { + if (i>1) printf("\t"); + if (lua_isstring(L,i)) + printf("%s",lua_tostring(L,i)); + else if (lua_isnil(L,i)==2) + printf("%s","nil"); + else if (lua_isboolean(L,i)) + printf("%s",lua_toboolean(L,i) ? "true" : "false"); + else + printf("%s:%p",luaL_typename(L,i),lua_topointer(L,i)); + } + printf("\n"); + return 0; +} + +int main(void) +{ + lua_State *L=lua_open(); + lua_register(L,"print",print); + if (luaL_dofile(L,NULL)!=0) fprintf(stderr,"%s\n",lua_tostring(L,-1)); + lua_close(L); + return 0; +} diff --git a/lua/etc/noparser.c b/lua/etc/noparser.c new file mode 100644 index 0000000..13ba546 --- /dev/null +++ b/lua/etc/noparser.c @@ -0,0 +1,50 @@ +/* +* The code below can be used to make a Lua core that does not contain the +* parsing modules (lcode, llex, lparser), which represent 35% of the total core. +* You'll only be able to load binary files and strings, precompiled with luac. +* (Of course, you'll have to build luac with the original parsing modules!) +* +* To use this module, simply compile it ("make noparser" does that) and list +* its object file before the Lua libraries. The linker should then not load +* the parsing modules. To try it, do "make luab". +* +* If you also want to avoid the dump module (ldump.o), define NODUMP. +* #define NODUMP +*/ + +#define LUA_CORE + +#include "llex.h" +#include "lparser.h" +#include "lzio.h" + +LUAI_FUNC void luaX_init (lua_State *L) { + UNUSED(L); +} + +LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) { + UNUSED(z); + UNUSED(buff); + UNUSED(name); + lua_pushliteral(L,"parser not loaded"); + lua_error(L); + return NULL; +} + +#ifdef NODUMP +#include "lundump.h" + +LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) { + UNUSED(f); + UNUSED(w); + UNUSED(data); + UNUSED(strip); +#if 1 + UNUSED(L); + return 0; +#else + lua_pushliteral(L,"dumper not loaded"); + lua_error(L); +#endif +} +#endif diff --git a/lua/etc/strict.lua b/lua/etc/strict.lua new file mode 100644 index 0000000..16ee26b --- /dev/null +++ b/lua/etc/strict.lua @@ -0,0 +1,39 @@ +-- +-- strict.lua +-- checks uses of undeclared global variables +-- All global variables must be 'declared' through a regular assignment +-- (even assigning nil will do) in a main chunk before being used +-- anywhere or assigned to inside a function. +-- + +local mt = getmetatable(_G) +if mt == nil then + mt = {} + setmetatable(_G, mt) +end + +mt.__declared = {} + +local function what () + local d = debug.getinfo(3, "S") + return d and d.what or "C" +end + +mt.__newindex = function (t, n, v) + if not mt.__declared[n] then + local w = what() + if w ~= "main" and w ~= "C" then + error("assign to undeclared variable '"..n.."'", 2) + end + mt.__declared[n] = true + end + rawset(t, n, v) +end + +mt.__index = function (t, n) + if not mt.__declared[n] and what() ~= "C" then + error("variable '"..n.."' is not declared", 2) + end + return rawget(t, n) +end + diff --git a/lua/src/Makefile b/lua/src/Makefile new file mode 100644 index 0000000..cd7f6ba --- /dev/null +++ b/lua/src/Makefile @@ -0,0 +1,183 @@ +# makefile for building Lua +# see ../INSTALL for installation instructions +# see ../Makefile and luaconf.h for further customization + +# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT ======================= + +# Your platform. See PLATS for possible values. +PLAT= none + +CC= gcc +CFLAGS= -O2 -Wall $(MYCFLAGS) +AR= ar rcu +RANLIB= ranlib +RM= rm -f +LIBS= -lm $(MYLIBS) + +MYCFLAGS= +MYLDFLAGS= +MYLIBS= + +# == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE ========= + +PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris + +LUA_A= liblua.a +CORE_O= lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \ + lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \ + lundump.o lvm.o lzio.o +LIB_O= lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o \ + lstrlib.o loadlib.o linit.o + +LUA_T= lua +LUA_O= lua.o + +LUAC_T= luac +LUAC_O= luac.o print.o + +ALL_O= $(CORE_O) $(LIB_O) $(LUA_O) $(LUAC_O) +ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) +ALL_A= $(LUA_A) + +default: $(PLAT) + +all: $(ALL_T) + +o: $(ALL_O) + +a: $(ALL_A) + +$(LUA_A): $(CORE_O) $(LIB_O) + $(AR) $@ $? + $(RANLIB) $@ + +$(LUA_T): $(LUA_O) $(LUA_A) + $(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) + +$(LUAC_T): $(LUAC_O) $(LUA_A) + $(CC) -o $@ $(MYLDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS) + +clean: + $(RM) $(ALL_T) $(ALL_O) + +depend: + @$(CC) $(CFLAGS) -MM l*.c print.c + +echo: + @echo "PLAT = $(PLAT)" + @echo "CC = $(CC)" + @echo "CFLAGS = $(CFLAGS)" + @echo "AR = $(AR)" + @echo "RANLIB = $(RANLIB)" + @echo "RM = $(RM)" + @echo "MYCFLAGS = $(MYCFLAGS)" + @echo "MYLDFLAGS = $(MYLDFLAGS)" + @echo "MYLIBS = $(MYLIBS)" + +# convenience targets for popular platforms + +none: + @echo "Please choose a platform:" + @echo " $(PLATS)" + +aix: + $(MAKE) all CC="xlc" CFLAGS="-O2 -DLUA_USE_POSIX -DLUA_USE_DLOPEN" MYLIBS="-ldl" MYLDFLAGS="-brtl -bexpall" + +ansi: + $(MAKE) all MYCFLAGS=-DLUA_ANSI + +bsd: + $(MAKE) all MYCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" MYLIBS="-Wl,-E" + +freebsd: + $(MAKE) all MYCFLAGS="-DLUA_USE_LINUX" MYLIBS="-Wl,-E -lreadline" + +generic: + $(MAKE) all MYCFLAGS= + +linux: + $(MAKE) all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses" + +macosx: + $(MAKE) all MYCFLAGS=-DLUA_USE_MACOSX +# use this on Mac OS X 10.4 +# $(MAKE) all MYCFLAGS="-DLUA_USE_MACOSX -DLUA_USE_READLINE" MYLIBS="-lreadline" + +mingw: + $(MAKE) "LUA_A=lua51.dll" "LUA_T=lua.exe" \ + "AR=$(CC) -shared -o" "RANLIB=strip --strip-unneeded" \ + "MYCFLAGS=-DLUA_BUILD_AS_DLL" "MYLIBS=" "MYLDFLAGS=-s" lua.exe + $(MAKE) "LUAC_T=luac.exe" luac.exe + +posix: + $(MAKE) all MYCFLAGS=-DLUA_USE_POSIX + +solaris: + $(MAKE) all MYCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" MYLIBS="-ldl" + +# list targets that do not create files (but not all makes understand .PHONY) +.PHONY: all $(PLATS) default o a clean depend echo none + +# DO NOT DELETE + +lapi.o: lapi.c lua.h luaconf.h lapi.h lobject.h llimits.h ldebug.h \ + lstate.h ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h \ + lundump.h lvm.h +lauxlib.o: lauxlib.c lua.h luaconf.h lauxlib.h +lbaselib.o: lbaselib.c lua.h luaconf.h lauxlib.h lualib.h +lcode.o: lcode.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \ + lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h lgc.h \ + ltable.h +ldblib.o: ldblib.c lua.h luaconf.h lauxlib.h lualib.h +ldebug.o: ldebug.c lua.h luaconf.h lapi.h lobject.h llimits.h lcode.h \ + llex.h lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h \ + lfunc.h lstring.h lgc.h ltable.h lvm.h +ldo.o: ldo.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \ + lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lparser.h lstring.h \ + ltable.h lundump.h lvm.h +ldump.o: ldump.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h \ + lzio.h lmem.h lundump.h +lfunc.o: lfunc.c lua.h luaconf.h lfunc.h lobject.h llimits.h lgc.h lmem.h \ + lstate.h ltm.h lzio.h +lgc.o: lgc.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \ + lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h +linit.o: linit.c lua.h luaconf.h lualib.h lauxlib.h +liolib.o: liolib.c lua.h luaconf.h lauxlib.h lualib.h +llex.o: llex.c lua.h luaconf.h ldo.h lobject.h llimits.h lstate.h ltm.h \ + lzio.h lmem.h llex.h lparser.h lstring.h lgc.h ltable.h +lmathlib.o: lmathlib.c lua.h luaconf.h lauxlib.h lualib.h +lmem.o: lmem.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \ + ltm.h lzio.h lmem.h ldo.h +loadlib.o: loadlib.c lauxlib.h lua.h luaconf.h lobject.h llimits.h \ + lualib.h +lobject.o: lobject.c lua.h luaconf.h ldo.h lobject.h llimits.h lstate.h \ + ltm.h lzio.h lmem.h lstring.h lgc.h lvm.h +lopcodes.o: lopcodes.c lopcodes.h llimits.h lua.h luaconf.h +loslib.o: loslib.c lua.h luaconf.h lauxlib.h lualib.h +lparser.o: lparser.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \ + lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h \ + lfunc.h lstring.h lgc.h ltable.h +lstate.o: lstate.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \ + ltm.h lzio.h lmem.h ldo.h lfunc.h lgc.h llex.h lstring.h ltable.h +lstring.o: lstring.c lua.h luaconf.h lmem.h llimits.h lobject.h lstate.h \ + ltm.h lzio.h lstring.h lgc.h +lstrlib.o: lstrlib.c lua.h luaconf.h lauxlib.h lualib.h +ltable.o: ltable.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \ + ltm.h lzio.h lmem.h ldo.h lgc.h ltable.h +ltablib.o: ltablib.c lua.h luaconf.h lauxlib.h lualib.h +ltm.o: ltm.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h lzio.h \ + lmem.h lstring.h lgc.h ltable.h +lua.o: lua.c lua.h luaconf.h lauxlib.h lualib.h +luac.o: luac.c lua.h luaconf.h lauxlib.h ldo.h lobject.h llimits.h \ + lstate.h ltm.h lzio.h lmem.h lfunc.h lopcodes.h lstring.h lgc.h \ + lundump.h +lundump.o: lundump.c lua.h luaconf.h ldebug.h lstate.h lobject.h \ + llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lstring.h lgc.h lundump.h +lvm.o: lvm.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \ + lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lstring.h ltable.h lvm.h +lzio.o: lzio.c lua.h luaconf.h llimits.h lmem.h lstate.h lobject.h ltm.h \ + lzio.h +print.o: print.c ldebug.h lstate.h lua.h luaconf.h lobject.h llimits.h \ + ltm.h lzio.h lmem.h lopcodes.h lundump.h + +# (end of Makefile) diff --git a/lua/src/lapi.c b/lua/src/lapi.c new file mode 100644 index 0000000..7c532b8 --- /dev/null +++ b/lua/src/lapi.c @@ -0,0 +1,1080 @@ +/* +** $Id: lapi.c,v 2.55 2006/06/07 12:37:17 roberto Exp $ +** Lua API +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include + +#define lapi_c +#define LUA_CORE + +#include "lua.h" + +#include "lapi.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lundump.h" +#include "lvm.h" + + + +const char lua_ident[] = + "$Lua: " LUA_RELEASE " " LUA_COPYRIGHT " $\n" + "$Authors: " LUA_AUTHORS " $\n" + "$URL: www.lua.org $\n"; + + + +#define api_checknelems(L, n) api_check(L, (n) <= (L->top - L->base)) + +#define api_checkvalidindex(L, i) api_check(L, (i) != luaO_nilobject) + +#define api_incr_top(L) {api_check(L, L->top < L->ci->top); L->top++;} + + + +static TValue *index2adr (lua_State *L, int idx) { + if (idx > 0) { + TValue *o = L->base + (idx - 1); + api_check(L, idx <= L->ci->top - L->base); + if (o >= L->top) return cast(TValue *, luaO_nilobject); + else return o; + } + else if (idx > LUA_REGISTRYINDEX) { + api_check(L, idx != 0 && -idx <= L->top - L->base); + return L->top + idx; + } + else switch (idx) { /* pseudo-indices */ + case LUA_REGISTRYINDEX: return registry(L); + case LUA_ENVIRONINDEX: { + Closure *func = curr_func(L); + sethvalue(L, &L->env, func->c.env); + return &L->env; + } + case LUA_GLOBALSINDEX: return gt(L); + default: { + Closure *func = curr_func(L); + idx = LUA_GLOBALSINDEX - idx; + return (idx <= func->c.nupvalues) + ? &func->c.upvalue[idx-1] + : cast(TValue *, luaO_nilobject); + } + } +} + + +static Table *getcurrenv (lua_State *L) { + if (L->ci == L->base_ci) /* no enclosing function? */ + return hvalue(gt(L)); /* use global table as environment */ + else { + Closure *func = curr_func(L); + return func->c.env; + } +} + + +void luaA_pushobject (lua_State *L, const TValue *o) { + setobj2s(L, L->top, o); + api_incr_top(L); +} + + +LUA_API int lua_checkstack (lua_State *L, int size) { + int res; + lua_lock(L); + if ((L->top - L->base + size) > LUAI_MAXCSTACK) + res = 0; /* stack overflow */ + else { + luaD_checkstack(L, size); + if (L->ci->top < L->top + size) + L->ci->top = L->top + size; + res = 1; + } + lua_unlock(L); + return res; +} + + +LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) { + int i; + if (from == to) return; + lua_lock(to); + api_checknelems(from, n); + api_check(from, G(from) == G(to)); + api_check(from, to->ci->top - to->top >= n); + from->top -= n; + for (i = 0; i < n; i++) { + setobj2s(to, to->top++, from->top + i); + } + lua_unlock(to); +} + + +LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) { + lua_CFunction old; + lua_lock(L); + old = G(L)->panic; + G(L)->panic = panicf; + lua_unlock(L); + return old; +} + + +LUA_API lua_State *lua_newthread (lua_State *L) { + lua_State *L1; + lua_lock(L); + luaC_checkGC(L); + L1 = luaE_newthread(L); + setthvalue(L, L->top, L1); + api_incr_top(L); + lua_unlock(L); + luai_userstatethread(L, L1); + return L1; +} + + + +/* +** basic stack manipulation +*/ + + +LUA_API int lua_gettop (lua_State *L) { + return cast_int(L->top - L->base); +} + + +LUA_API void lua_settop (lua_State *L, int idx) { + lua_lock(L); + if (idx >= 0) { + api_check(L, idx <= L->stack_last - L->base); + while (L->top < L->base + idx) + setnilvalue(L->top++); + L->top = L->base + idx; + } + else { + api_check(L, -(idx+1) <= (L->top - L->base)); + L->top += idx+1; /* `subtract' index (index is negative) */ + } + lua_unlock(L); +} + + +LUA_API void lua_remove (lua_State *L, int idx) { + StkId p; + lua_lock(L); + p = index2adr(L, idx); + api_checkvalidindex(L, p); + while (++p < L->top) setobjs2s(L, p-1, p); + L->top--; + lua_unlock(L); +} + + +LUA_API void lua_insert (lua_State *L, int idx) { + StkId p; + StkId q; + lua_lock(L); + p = index2adr(L, idx); + api_checkvalidindex(L, p); + for (q = L->top; q>p; q--) setobjs2s(L, q, q-1); + setobjs2s(L, p, L->top); + lua_unlock(L); +} + + +LUA_API void lua_replace (lua_State *L, int idx) { + StkId o; + lua_lock(L); + /* explicit test for incompatible code */ + if (idx == LUA_ENVIRONINDEX && L->ci == L->base_ci) + luaG_runerror(L, "no calling environment"); + api_checknelems(L, 1); + o = index2adr(L, idx); + api_checkvalidindex(L, o); + if (idx == LUA_ENVIRONINDEX) { + Closure *func = curr_func(L); + api_check(L, ttistable(L->top - 1)); + func->c.env = hvalue(L->top - 1); + luaC_barrier(L, func, L->top - 1); + } + else { + setobj(L, o, L->top - 1); + if (idx < LUA_GLOBALSINDEX) /* function upvalue? */ + luaC_barrier(L, curr_func(L), L->top - 1); + } + L->top--; + lua_unlock(L); +} + + +LUA_API void lua_pushvalue (lua_State *L, int idx) { + lua_lock(L); + setobj2s(L, L->top, index2adr(L, idx)); + api_incr_top(L); + lua_unlock(L); +} + + + +/* +** access functions (stack -> C) +*/ + + +LUA_API int lua_type (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + return (o == luaO_nilobject) ? LUA_TNONE : ttype(o); +} + + +LUA_API const char *lua_typename (lua_State *L, int t) { + UNUSED(L); + return (t == LUA_TNONE) ? "no value" : luaT_typenames[t]; +} + + +LUA_API int lua_iscfunction (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + return iscfunction(o); +} + + +LUA_API int lua_isnumber (lua_State *L, int idx) { + TValue n; + const TValue *o = index2adr(L, idx); + return tonumber(o, &n); +} + + +LUA_API int lua_isstring (lua_State *L, int idx) { + int t = lua_type(L, idx); + return (t == LUA_TSTRING || t == LUA_TNUMBER); +} + + +LUA_API int lua_isuserdata (lua_State *L, int idx) { + const TValue *o = index2adr(L, idx); + return (ttisuserdata(o) || ttislightuserdata(o)); +} + + +LUA_API int lua_rawequal (lua_State *L, int index1, int index2) { + StkId o1 = index2adr(L, index1); + StkId o2 = index2adr(L, index2); + return (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 + : luaO_rawequalObj(o1, o2); +} + + +LUA_API int lua_equal (lua_State *L, int index1, int index2) { + StkId o1, o2; + int i; + lua_lock(L); /* may call tag method */ + o1 = index2adr(L, index1); + o2 = index2adr(L, index2); + i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 : equalobj(L, o1, o2); + lua_unlock(L); + return i; +} + + +LUA_API int lua_lessthan (lua_State *L, int index1, int index2) { + StkId o1, o2; + int i; + lua_lock(L); /* may call tag method */ + o1 = index2adr(L, index1); + o2 = index2adr(L, index2); + i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 + : luaV_lessthan(L, o1, o2); + lua_unlock(L); + return i; +} + + + +LUA_API lua_Number lua_tonumber (lua_State *L, int idx) { + TValue n; + const TValue *o = index2adr(L, idx); + if (tonumber(o, &n)) + return nvalue(o); + else + return 0; +} + + +LUA_API lua_Integer lua_tointeger (lua_State *L, int idx) { + TValue n; + const TValue *o = index2adr(L, idx); + if (tonumber(o, &n)) { + lua_Integer res; + lua_Number num = nvalue(o); + lua_number2integer(res, num); + return res; + } + else + return 0; +} + + +LUA_API int lua_toboolean (lua_State *L, int idx) { + const TValue *o = index2adr(L, idx); + return !l_isfalse(o); +} + + +LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { + StkId o = index2adr(L, idx); + if (!ttisstring(o)) { + lua_lock(L); /* `luaV_tostring' may create a new string */ + if (!luaV_tostring(L, o)) { /* conversion failed? */ + if (len != NULL) *len = 0; + lua_unlock(L); + return NULL; + } + luaC_checkGC(L); + o = index2adr(L, idx); /* previous call may reallocate the stack */ + lua_unlock(L); + } + if (len != NULL) *len = tsvalue(o)->len; + return svalue(o); +} + + +LUA_API size_t lua_objlen (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + switch (ttype(o)) { + case LUA_TSTRING: return tsvalue(o)->len; + case LUA_TUSERDATA: return uvalue(o)->len; + case LUA_TTABLE: return luaH_getn(hvalue(o)); + case LUA_TNUMBER: { + size_t l; + lua_lock(L); /* `luaV_tostring' may create a new string */ + l = (luaV_tostring(L, o) ? tsvalue(o)->len : 0); + lua_unlock(L); + return l; + } + default: return 0; + } +} + + +LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + return (!iscfunction(o)) ? NULL : clvalue(o)->c.f; +} + + +LUA_API void *lua_touserdata (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + switch (ttype(o)) { + case LUA_TUSERDATA: return (rawuvalue(o) + 1); + case LUA_TLIGHTUSERDATA: return pvalue(o); + default: return NULL; + } +} + + +LUA_API lua_State *lua_tothread (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + return (!ttisthread(o)) ? NULL : thvalue(o); +} + + +LUA_API const void *lua_topointer (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + switch (ttype(o)) { + case LUA_TTABLE: return hvalue(o); + case LUA_TFUNCTION: return clvalue(o); + case LUA_TTHREAD: return thvalue(o); + case LUA_TUSERDATA: + case LUA_TLIGHTUSERDATA: + return lua_touserdata(L, idx); + default: return NULL; + } +} + + + +/* +** push functions (C -> stack) +*/ + + +LUA_API void lua_pushnil (lua_State *L) { + lua_lock(L); + setnilvalue(L->top); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { + lua_lock(L); + setnvalue(L->top, n); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { + lua_lock(L); + setnvalue(L->top, cast_num(n)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) { + lua_lock(L); + luaC_checkGC(L); + setsvalue2s(L, L->top, luaS_newlstr(L, s, len)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushstring (lua_State *L, const char *s) { + if (s == NULL) + lua_pushnil(L); + else + lua_pushlstring(L, s, strlen(s)); +} + + +LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, + va_list argp) { + const char *ret; + lua_lock(L); + luaC_checkGC(L); + ret = luaO_pushvfstring(L, fmt, argp); + lua_unlock(L); + return ret; +} + + +LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { + const char *ret; + va_list argp; + lua_lock(L); + luaC_checkGC(L); + va_start(argp, fmt); + ret = luaO_pushvfstring(L, fmt, argp); + va_end(argp); + lua_unlock(L); + return ret; +} + + +LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { + Closure *cl; + lua_lock(L); + luaC_checkGC(L); + api_checknelems(L, n); + cl = luaF_newCclosure(L, n, getcurrenv(L)); + cl->c.f = fn; + L->top -= n; + while (n--) + setobj2n(L, &cl->c.upvalue[n], L->top+n); + setclvalue(L, L->top, cl); + lua_assert(iswhite(obj2gco(cl))); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushboolean (lua_State *L, int b) { + lua_lock(L); + setbvalue(L->top, (b != 0)); /* ensure that true is 1 */ + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushlightuserdata (lua_State *L, void *p) { + lua_lock(L); + setpvalue(L->top, p); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API int lua_pushthread (lua_State *L) { + lua_lock(L); + setthvalue(L, L->top, L); + api_incr_top(L); + lua_unlock(L); + return (G(L)->mainthread == L); +} + + + +/* +** get functions (Lua -> stack) +*/ + + +LUA_API void lua_gettable (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2adr(L, idx); + api_checkvalidindex(L, t); + luaV_gettable(L, t, L->top - 1, L->top - 1); + lua_unlock(L); +} + + +LUA_API void lua_getfield (lua_State *L, int idx, const char *k) { + StkId t; + TValue key; + lua_lock(L); + t = index2adr(L, idx); + api_checkvalidindex(L, t); + setsvalue(L, &key, luaS_new(L, k)); + luaV_gettable(L, t, &key, L->top); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_rawget (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2adr(L, idx); + api_check(L, ttistable(t)); + setobj2s(L, L->top - 1, luaH_get(hvalue(t), L->top - 1)); + lua_unlock(L); +} + + +LUA_API void lua_rawgeti (lua_State *L, int idx, int n) { + StkId o; + lua_lock(L); + o = index2adr(L, idx); + api_check(L, ttistable(o)); + setobj2s(L, L->top, luaH_getnum(hvalue(o), n)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { + lua_lock(L); + luaC_checkGC(L); + sethvalue(L, L->top, luaH_new(L, narray, nrec)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API int lua_getmetatable (lua_State *L, int objindex) { + const TValue *obj; + Table *mt = NULL; + int res; + lua_lock(L); + obj = index2adr(L, objindex); + switch (ttype(obj)) { + case LUA_TTABLE: + mt = hvalue(obj)->metatable; + break; + case LUA_TUSERDATA: + mt = uvalue(obj)->metatable; + break; + default: + mt = G(L)->mt[ttype(obj)]; + break; + } + if (mt == NULL) + res = 0; + else { + sethvalue(L, L->top, mt); + api_incr_top(L); + res = 1; + } + lua_unlock(L); + return res; +} + + +LUA_API void lua_getfenv (lua_State *L, int idx) { + StkId o; + lua_lock(L); + o = index2adr(L, idx); + api_checkvalidindex(L, o); + switch (ttype(o)) { + case LUA_TFUNCTION: + sethvalue(L, L->top, clvalue(o)->c.env); + break; + case LUA_TUSERDATA: + sethvalue(L, L->top, uvalue(o)->env); + break; + case LUA_TTHREAD: + setobj2s(L, L->top, gt(thvalue(o))); + break; + default: + setnilvalue(L->top); + break; + } + api_incr_top(L); + lua_unlock(L); +} + + +/* +** set functions (stack -> Lua) +*/ + + +LUA_API void lua_settable (lua_State *L, int idx) { + StkId t; + lua_lock(L); + api_checknelems(L, 2); + t = index2adr(L, idx); + api_checkvalidindex(L, t); + luaV_settable(L, t, L->top - 2, L->top - 1); + L->top -= 2; /* pop index and value */ + lua_unlock(L); +} + + +LUA_API void lua_setfield (lua_State *L, int idx, const char *k) { + StkId t; + TValue key; + lua_lock(L); + api_checknelems(L, 1); + t = index2adr(L, idx); + api_checkvalidindex(L, t); + setsvalue(L, &key, luaS_new(L, k)); + luaV_settable(L, t, &key, L->top - 1); + L->top--; /* pop value */ + lua_unlock(L); +} + + +LUA_API void lua_rawset (lua_State *L, int idx) { + StkId t; + lua_lock(L); + api_checknelems(L, 2); + t = index2adr(L, idx); + api_check(L, ttistable(t)); + setobj2t(L, luaH_set(L, hvalue(t), L->top-2), L->top-1); + luaC_barriert(L, hvalue(t), L->top-1); + L->top -= 2; + lua_unlock(L); +} + + +LUA_API void lua_rawseti (lua_State *L, int idx, int n) { + StkId o; + lua_lock(L); + api_checknelems(L, 1); + o = index2adr(L, idx); + api_check(L, ttistable(o)); + setobj2t(L, luaH_setnum(L, hvalue(o), n), L->top-1); + luaC_barriert(L, hvalue(o), L->top-1); + L->top--; + lua_unlock(L); +} + + +LUA_API int lua_setmetatable (lua_State *L, int objindex) { + TValue *obj; + Table *mt; + lua_lock(L); + api_checknelems(L, 1); + obj = index2adr(L, objindex); + api_checkvalidindex(L, obj); + if (ttisnil(L->top - 1)) + mt = NULL; + else { + api_check(L, ttistable(L->top - 1)); + mt = hvalue(L->top - 1); + } + switch (ttype(obj)) { + case LUA_TTABLE: { + hvalue(obj)->metatable = mt; + if (mt) + luaC_objbarriert(L, hvalue(obj), mt); + break; + } + case LUA_TUSERDATA: { + uvalue(obj)->metatable = mt; + if (mt) + luaC_objbarrier(L, rawuvalue(obj), mt); + break; + } + default: { + G(L)->mt[ttype(obj)] = mt; + break; + } + } + L->top--; + lua_unlock(L); + return 1; +} + + +LUA_API int lua_setfenv (lua_State *L, int idx) { + StkId o; + int res = 1; + lua_lock(L); + api_checknelems(L, 1); + o = index2adr(L, idx); + api_checkvalidindex(L, o); + api_check(L, ttistable(L->top - 1)); + switch (ttype(o)) { + case LUA_TFUNCTION: + clvalue(o)->c.env = hvalue(L->top - 1); + break; + case LUA_TUSERDATA: + uvalue(o)->env = hvalue(L->top - 1); + break; + case LUA_TTHREAD: + sethvalue(L, gt(thvalue(o)), hvalue(L->top - 1)); + break; + default: + res = 0; + break; + } + luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); + L->top--; + lua_unlock(L); + return res; +} + + +/* +** `load' and `call' functions (run Lua code) +*/ + + +#define adjustresults(L,nres) \ + { if (nres == LUA_MULTRET && L->top >= L->ci->top) L->ci->top = L->top; } + + +#define checkresults(L,na,nr) \ + api_check(L, (nr) == LUA_MULTRET || (L->ci->top - L->top >= (nr) - (na))) + + +LUA_API void lua_call (lua_State *L, int nargs, int nresults) { + StkId func; + lua_lock(L); + api_checknelems(L, nargs+1); + checkresults(L, nargs, nresults); + func = L->top - (nargs+1); + luaD_call(L, func, nresults); + adjustresults(L, nresults); + lua_unlock(L); +} + + + +/* +** Execute a protected call. +*/ +struct CallS { /* data to `f_call' */ + StkId func; + int nresults; +}; + + +static void f_call (lua_State *L, void *ud) { + struct CallS *c = cast(struct CallS *, ud); + luaD_call(L, c->func, c->nresults); +} + + + +LUA_API int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc) { + struct CallS c; + int status; + ptrdiff_t func; + lua_lock(L); + api_checknelems(L, nargs+1); + checkresults(L, nargs, nresults); + if (errfunc == 0) + func = 0; + else { + StkId o = index2adr(L, errfunc); + api_checkvalidindex(L, o); + func = savestack(L, o); + } + c.func = L->top - (nargs+1); /* function to be called */ + c.nresults = nresults; + status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); + adjustresults(L, nresults); + lua_unlock(L); + return status; +} + + +/* +** Execute a protected C call. +*/ +struct CCallS { /* data to `f_Ccall' */ + lua_CFunction func; + void *ud; +}; + + +static void f_Ccall (lua_State *L, void *ud) { + struct CCallS *c = cast(struct CCallS *, ud); + Closure *cl; + cl = luaF_newCclosure(L, 0, getcurrenv(L)); + cl->c.f = c->func; + setclvalue(L, L->top, cl); /* push function */ + api_incr_top(L); + setpvalue(L->top, c->ud); /* push only argument */ + api_incr_top(L); + luaD_call(L, L->top - 2, 0); +} + + +LUA_API int lua_cpcall (lua_State *L, lua_CFunction func, void *ud) { + struct CCallS c; + int status; + lua_lock(L); + c.func = func; + c.ud = ud; + status = luaD_pcall(L, f_Ccall, &c, savestack(L, L->top), 0); + lua_unlock(L); + return status; +} + + +LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, + const char *chunkname) { + ZIO z; + int status; + lua_lock(L); + if (!chunkname) chunkname = "?"; + luaZ_init(L, &z, reader, data); + status = luaD_protectedparser(L, &z, chunkname); + lua_unlock(L); + return status; +} + + +LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data) { + int status; + TValue *o; + lua_lock(L); + api_checknelems(L, 1); + o = L->top - 1; + if (isLfunction(o)) + status = luaU_dump(L, clvalue(o)->l.p, writer, data, 0); + else + status = 1; + lua_unlock(L); + return status; +} + + +LUA_API int lua_status (lua_State *L) { + return L->status; +} + + +/* +** Garbage-collection function +*/ + +LUA_API int lua_gc (lua_State *L, int what, int data) { + int res = 0; + global_State *g; + lua_lock(L); + g = G(L); + switch (what) { + case LUA_GCSTOP: { + g->GCthreshold = MAX_LUMEM; + break; + } + case LUA_GCRESTART: { + g->GCthreshold = g->totalbytes; + break; + } + case LUA_GCCOLLECT: { + luaC_fullgc(L); + break; + } + case LUA_GCCOUNT: { + /* GC values are expressed in Kbytes: #bytes/2^10 */ + res = cast_int(g->totalbytes >> 10); + break; + } + case LUA_GCCOUNTB: { + res = cast_int(g->totalbytes & 0x3ff); + break; + } + case LUA_GCSTEP: { + lu_mem a = (cast(lu_mem, data) << 10); + if (a <= g->totalbytes) + g->GCthreshold = g->totalbytes - a; + else + g->GCthreshold = 0; + while (g->GCthreshold <= g->totalbytes) + luaC_step(L); + if (g->gcstate == GCSpause) /* end of cycle? */ + res = 1; /* signal it */ + break; + } + case LUA_GCSETPAUSE: { + res = g->gcpause; + g->gcpause = data; + break; + } + case LUA_GCSETSTEPMUL: { + res = g->gcstepmul; + g->gcstepmul = data; + break; + } + default: res = -1; /* invalid option */ + } + lua_unlock(L); + return res; +} + + + +/* +** miscellaneous functions +*/ + + +LUA_API int lua_error (lua_State *L) { + lua_lock(L); + api_checknelems(L, 1); + luaG_errormsg(L); + lua_unlock(L); + return 0; /* to avoid warnings */ +} + + +LUA_API int lua_next (lua_State *L, int idx) { + StkId t; + int more; + lua_lock(L); + t = index2adr(L, idx); + api_check(L, ttistable(t)); + more = luaH_next(L, hvalue(t), L->top - 1); + if (more) { + api_incr_top(L); + } + else /* no more elements */ + L->top -= 1; /* remove key */ + lua_unlock(L); + return more; +} + + +LUA_API void lua_concat (lua_State *L, int n) { + lua_lock(L); + api_checknelems(L, n); + if (n >= 2) { + luaC_checkGC(L); + luaV_concat(L, n, cast_int(L->top - L->base) - 1); + L->top -= (n-1); + } + else if (n == 0) { /* push empty string */ + setsvalue2s(L, L->top, luaS_newlstr(L, "", 0)); + api_incr_top(L); + } + /* else n == 1; nothing to do */ + lua_unlock(L); +} + + +LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) { + lua_Alloc f; + lua_lock(L); + if (ud) *ud = G(L)->ud; + f = G(L)->frealloc; + lua_unlock(L); + return f; +} + + +LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) { + lua_lock(L); + G(L)->ud = ud; + G(L)->frealloc = f; + lua_unlock(L); +} + + +LUA_API void *lua_newuserdata (lua_State *L, size_t size) { + Udata *u; + lua_lock(L); + luaC_checkGC(L); + u = luaS_newudata(L, size, getcurrenv(L)); + setuvalue(L, L->top, u); + api_incr_top(L); + lua_unlock(L); + return u + 1; +} + + + + +static const char *aux_upvalue (StkId fi, int n, TValue **val) { + Closure *f; + if (!ttisfunction(fi)) return NULL; + f = clvalue(fi); + if (f->c.isC) { + if (!(1 <= n && n <= f->c.nupvalues)) return NULL; + *val = &f->c.upvalue[n-1]; + return ""; + } + else { + Proto *p = f->l.p; + if (!(1 <= n && n <= p->sizeupvalues)) return NULL; + *val = f->l.upvals[n-1]->v; + return getstr(p->upvalues[n-1]); + } +} + + +LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) { + const char *name; + TValue *val; + lua_lock(L); + name = aux_upvalue(index2adr(L, funcindex), n, &val); + if (name) { + setobj2s(L, L->top, val); + api_incr_top(L); + } + lua_unlock(L); + return name; +} + + +LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) { + const char *name; + TValue *val; + StkId fi; + lua_lock(L); + fi = index2adr(L, funcindex); + api_checknelems(L, 1); + name = aux_upvalue(fi, n, &val); + if (name) { + L->top--; + setobj(L, val, L->top); + luaC_barrier(L, clvalue(fi), L->top); + } + lua_unlock(L); + return name; +} + diff --git a/lua/src/lapi.h b/lua/src/lapi.h new file mode 100644 index 0000000..9d1d435 --- /dev/null +++ b/lua/src/lapi.h @@ -0,0 +1,16 @@ +/* +** $Id: lapi.h,v 2.2 2005/04/25 19:24:10 roberto Exp $ +** Auxiliary functions from Lua API +** See Copyright Notice in lua.h +*/ + +#ifndef lapi_h +#define lapi_h + + +#include "lobject.h" + + +LUAI_FUNC void luaA_pushobject (lua_State *L, const TValue *o); + +#endif diff --git a/lua/src/lauxlib.c b/lua/src/lauxlib.c new file mode 100644 index 0000000..96a6b85 --- /dev/null +++ b/lua/src/lauxlib.c @@ -0,0 +1,653 @@ +/* +** $Id: lauxlib.c,v 1.159 2006/03/21 19:31:09 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include +#include +#include + + +/* This file uses only the official API of Lua. +** Any function declared here could be written as an application function. +*/ + +#define lauxlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" + + +#define FREELIST_REF 0 /* free list of references */ + + +/* convert a stack index to positive */ +#define abs_index(L, i) ((i) > 0 || (i) <= LUA_REGISTRYINDEX ? (i) : \ + lua_gettop(L) + (i) + 1) + + +/* +** {====================================================== +** Error-report functions +** ======================================================= +*/ + + +LUALIB_API int luaL_argerror (lua_State *L, int narg, const char *extramsg) { + lua_Debug ar; + if (!lua_getstack(L, 0, &ar)) /* no stack frame? */ + return luaL_error(L, "bad argument #%d (%s)", narg, extramsg); + lua_getinfo(L, "n", &ar); + if (strcmp(ar.namewhat, "method") == 0) { + narg--; /* do not count `self' */ + if (narg == 0) /* error is in the self argument itself? */ + return luaL_error(L, "calling " LUA_QS " on bad self (%s)", + ar.name, extramsg); + } + if (ar.name == NULL) + ar.name = "?"; + return luaL_error(L, "bad argument #%d to " LUA_QS " (%s)", + narg, ar.name, extramsg); +} + + +LUALIB_API int luaL_typerror (lua_State *L, int narg, const char *tname) { + const char *msg = lua_pushfstring(L, "%s expected, got %s", + tname, luaL_typename(L, narg)); + return luaL_argerror(L, narg, msg); +} + + +static void tag_error (lua_State *L, int narg, int tag) { + luaL_typerror(L, narg, lua_typename(L, tag)); +} + + +LUALIB_API void luaL_where (lua_State *L, int level) { + lua_Debug ar; + if (lua_getstack(L, level, &ar)) { /* check function at level */ + lua_getinfo(L, "Sl", &ar); /* get info about it */ + if (ar.currentline > 0) { /* is there info? */ + lua_pushfstring(L, "%s:%d: ", ar.short_src, ar.currentline); + return; + } + } + lua_pushliteral(L, ""); /* else, no information available... */ +} + + +LUALIB_API int luaL_error (lua_State *L, const char *fmt, ...) { + va_list argp; + va_start(argp, fmt); + luaL_where(L, 1); + lua_pushvfstring(L, fmt, argp); + va_end(argp); + lua_concat(L, 2); + return lua_error(L); +} + +/* }====================================================== */ + + +LUALIB_API int luaL_checkoption (lua_State *L, int narg, const char *def, + const char *const lst[]) { + const char *name = (def) ? luaL_optstring(L, narg, def) : + luaL_checkstring(L, narg); + int i; + for (i=0; lst[i]; i++) + if (strcmp(lst[i], name) == 0) + return i; + return luaL_argerror(L, narg, + lua_pushfstring(L, "invalid option " LUA_QS, name)); +} + + +LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname) { + lua_getfield(L, LUA_REGISTRYINDEX, tname); /* get registry.name */ + if (!lua_isnil(L, -1)) /* name already in use? */ + return 0; /* leave previous value on top, but return 0 */ + lua_pop(L, 1); + lua_newtable(L); /* create metatable */ + lua_pushvalue(L, -1); + lua_setfield(L, LUA_REGISTRYINDEX, tname); /* registry.name = metatable */ + return 1; +} + + +LUALIB_API void *luaL_checkudata (lua_State *L, int ud, const char *tname) { + void *p = lua_touserdata(L, ud); + if (p != NULL) { /* value is a userdata? */ + if (lua_getmetatable(L, ud)) { /* does it have a metatable? */ + lua_getfield(L, LUA_REGISTRYINDEX, tname); /* get correct metatable */ + if (lua_rawequal(L, -1, -2)) { /* does it have the correct mt? */ + lua_pop(L, 2); /* remove both metatables */ + return p; + } + } + } + luaL_typerror(L, ud, tname); /* else error */ + return NULL; /* to avoid warnings */ +} + + +LUALIB_API void luaL_checkstack (lua_State *L, int space, const char *mes) { + if (!lua_checkstack(L, space)) + luaL_error(L, "stack overflow (%s)", mes); +} + + +LUALIB_API void luaL_checktype (lua_State *L, int narg, int t) { + if (lua_type(L, narg) != t) + tag_error(L, narg, t); +} + + +LUALIB_API void luaL_checkany (lua_State *L, int narg) { + if (lua_type(L, narg) == LUA_TNONE) + luaL_argerror(L, narg, "value expected"); +} + + +LUALIB_API const char *luaL_checklstring (lua_State *L, int narg, size_t *len) { + const char *s = lua_tolstring(L, narg, len); + if (!s) tag_error(L, narg, LUA_TSTRING); + return s; +} + + +LUALIB_API const char *luaL_optlstring (lua_State *L, int narg, + const char *def, size_t *len) { + if (lua_isnoneornil(L, narg)) { + if (len) + *len = (def ? strlen(def) : 0); + return def; + } + else return luaL_checklstring(L, narg, len); +} + + +LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) { + lua_Number d = lua_tonumber(L, narg); + if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ + tag_error(L, narg, LUA_TNUMBER); + return d; +} + + +LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) { + return luaL_opt(L, luaL_checknumber, narg, def); +} + + +LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) { + lua_Integer d = lua_tointeger(L, narg); + if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ + tag_error(L, narg, LUA_TNUMBER); + return d; +} + + +LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int narg, + lua_Integer def) { + return luaL_opt(L, luaL_checkinteger, narg, def); +} + + +LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) { + if (!lua_getmetatable(L, obj)) /* no metatable? */ + return 0; + lua_pushstring(L, event); + lua_rawget(L, -2); + if (lua_isnil(L, -1)) { + lua_pop(L, 2); /* remove metatable and metafield */ + return 0; + } + else { + lua_remove(L, -2); /* remove only metatable */ + return 1; + } +} + + +LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { + obj = abs_index(L, obj); + if (!luaL_getmetafield(L, obj, event)) /* no metafield? */ + return 0; + lua_pushvalue(L, obj); + lua_call(L, 1, 1); + return 1; +} + + +LUALIB_API void (luaL_register) (lua_State *L, const char *libname, + const luaL_Reg *l) { + luaI_openlib(L, libname, l, 0); +} + + +static int libsize (const luaL_Reg *l) { + int size = 0; + for (; l->name; l++) size++; + return size; +} + + +LUALIB_API void luaI_openlib (lua_State *L, const char *libname, + const luaL_Reg *l, int nup) { + if (libname) { + int size = libsize(l); + /* check whether lib already exists */ + luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", size); + lua_getfield(L, -1, libname); /* get _LOADED[libname] */ + if (!lua_istable(L, -1)) { /* not found? */ + lua_pop(L, 1); /* remove previous result */ + /* try global variable (and create one if it does not exist) */ + if (luaL_findtable(L, LUA_GLOBALSINDEX, libname, size) != NULL) + luaL_error(L, "name conflict for module " LUA_QS, libname); + lua_pushvalue(L, -1); + lua_setfield(L, -3, libname); /* _LOADED[libname] = new table */ + } + lua_remove(L, -2); /* remove _LOADED table */ + lua_insert(L, -(nup+1)); /* move library table to below upvalues */ + } + for (; l->name; l++) { + int i; + for (i=0; ifunc, nup); + lua_setfield(L, -(nup+2), l->name); + } + lua_pop(L, nup); /* remove upvalues */ +} + + + +/* +** {====================================================== +** getn-setn: size for arrays +** ======================================================= +*/ + +#if defined(LUA_COMPAT_GETN) + +static int checkint (lua_State *L, int topop) { + int n = (lua_type(L, -1) == LUA_TNUMBER) ? lua_tointeger(L, -1) : -1; + lua_pop(L, topop); + return n; +} + + +static void getsizes (lua_State *L) { + lua_getfield(L, LUA_REGISTRYINDEX, "LUA_SIZES"); + if (lua_isnil(L, -1)) { /* no `size' table? */ + lua_pop(L, 1); /* remove nil */ + lua_newtable(L); /* create it */ + lua_pushvalue(L, -1); /* `size' will be its own metatable */ + lua_setmetatable(L, -2); + lua_pushliteral(L, "kv"); + lua_setfield(L, -2, "__mode"); /* metatable(N).__mode = "kv" */ + lua_pushvalue(L, -1); + lua_setfield(L, LUA_REGISTRYINDEX, "LUA_SIZES"); /* store in register */ + } +} + + +LUALIB_API void luaL_setn (lua_State *L, int t, int n) { + t = abs_index(L, t); + lua_pushliteral(L, "n"); + lua_rawget(L, t); + if (checkint(L, 1) >= 0) { /* is there a numeric field `n'? */ + lua_pushliteral(L, "n"); /* use it */ + lua_pushinteger(L, n); + lua_rawset(L, t); + } + else { /* use `sizes' */ + getsizes(L); + lua_pushvalue(L, t); + lua_pushinteger(L, n); + lua_rawset(L, -3); /* sizes[t] = n */ + lua_pop(L, 1); /* remove `sizes' */ + } +} + + +LUALIB_API int luaL_getn (lua_State *L, int t) { + int n; + t = abs_index(L, t); + lua_pushliteral(L, "n"); /* try t.n */ + lua_rawget(L, t); + if ((n = checkint(L, 1)) >= 0) return n; + getsizes(L); /* else try sizes[t] */ + lua_pushvalue(L, t); + lua_rawget(L, -2); + if ((n = checkint(L, 2)) >= 0) return n; + return (int)lua_objlen(L, t); +} + +#endif + +/* }====================================================== */ + + + +LUALIB_API const char *luaL_gsub (lua_State *L, const char *s, const char *p, + const char *r) { + const char *wild; + size_t l = strlen(p); + luaL_Buffer b; + luaL_buffinit(L, &b); + while ((wild = strstr(s, p)) != NULL) { + luaL_addlstring(&b, s, wild - s); /* push prefix */ + luaL_addstring(&b, r); /* push replacement in place of pattern */ + s = wild + l; /* continue after `p' */ + } + luaL_addstring(&b, s); /* push last suffix */ + luaL_pushresult(&b); + return lua_tostring(L, -1); +} + + +LUALIB_API const char *luaL_findtable (lua_State *L, int idx, + const char *fname, int szhint) { + const char *e; + lua_pushvalue(L, idx); + do { + e = strchr(fname, '.'); + if (e == NULL) e = fname + strlen(fname); + lua_pushlstring(L, fname, e - fname); + lua_rawget(L, -2); + if (lua_isnil(L, -1)) { /* no such field? */ + lua_pop(L, 1); /* remove this nil */ + lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ + lua_pushlstring(L, fname, e - fname); + lua_pushvalue(L, -2); + lua_settable(L, -4); /* set new table into field */ + } + else if (!lua_istable(L, -1)) { /* field has a non-table value? */ + lua_pop(L, 2); /* remove table and value */ + return fname; /* return problematic part of the name */ + } + lua_remove(L, -2); /* remove previous table */ + fname = e + 1; + } while (*e == '.'); + return NULL; +} + + + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + + +#define bufflen(B) ((B)->p - (B)->buffer) +#define bufffree(B) ((size_t)(LUAL_BUFFERSIZE - bufflen(B))) + +#define LIMIT (LUA_MINSTACK/2) + + +static int emptybuffer (luaL_Buffer *B) { + size_t l = bufflen(B); + if (l == 0) return 0; /* put nothing on stack */ + else { + lua_pushlstring(B->L, B->buffer, l); + B->p = B->buffer; + B->lvl++; + return 1; + } +} + + +static void adjuststack (luaL_Buffer *B) { + if (B->lvl > 1) { + lua_State *L = B->L; + int toget = 1; /* number of levels to concat */ + size_t toplen = lua_strlen(L, -1); + do { + size_t l = lua_strlen(L, -(toget+1)); + if (B->lvl - toget + 1 >= LIMIT || toplen > l) { + toplen += l; + toget++; + } + else break; + } while (toget < B->lvl); + lua_concat(L, toget); + B->lvl = B->lvl - toget + 1; + } +} + + +LUALIB_API char *luaL_prepbuffer (luaL_Buffer *B) { + if (emptybuffer(B)) + adjuststack(B); + return B->buffer; +} + + +LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { + while (l--) + luaL_addchar(B, *s++); +} + + +LUALIB_API void luaL_addstring (luaL_Buffer *B, const char *s) { + luaL_addlstring(B, s, strlen(s)); +} + + +LUALIB_API void luaL_pushresult (luaL_Buffer *B) { + emptybuffer(B); + lua_concat(B->L, B->lvl); + B->lvl = 1; +} + + +LUALIB_API void luaL_addvalue (luaL_Buffer *B) { + lua_State *L = B->L; + size_t vl; + const char *s = lua_tolstring(L, -1, &vl); + if (vl <= bufffree(B)) { /* fit into buffer? */ + memcpy(B->p, s, vl); /* put it there */ + B->p += vl; + lua_pop(L, 1); /* remove from stack */ + } + else { + if (emptybuffer(B)) + lua_insert(L, -2); /* put buffer before new value */ + B->lvl++; /* add new value into B stack */ + adjuststack(B); + } +} + + +LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) { + B->L = L; + B->p = B->buffer; + B->lvl = 0; +} + +/* }====================================================== */ + + +LUALIB_API int luaL_ref (lua_State *L, int t) { + int ref; + t = abs_index(L, t); + if (lua_isnil(L, -1)) { + lua_pop(L, 1); /* remove from stack */ + return LUA_REFNIL; /* `nil' has a unique fixed reference */ + } + lua_rawgeti(L, t, FREELIST_REF); /* get first free element */ + ref = (int)lua_tointeger(L, -1); /* ref = t[FREELIST_REF] */ + lua_pop(L, 1); /* remove it from stack */ + if (ref != 0) { /* any free element? */ + lua_rawgeti(L, t, ref); /* remove it from list */ + lua_rawseti(L, t, FREELIST_REF); /* (t[FREELIST_REF] = t[ref]) */ + } + else { /* no free elements */ + ref = (int)lua_objlen(L, t); + ref++; /* create new reference */ + } + lua_rawseti(L, t, ref); + return ref; +} + + +LUALIB_API void luaL_unref (lua_State *L, int t, int ref) { + if (ref >= 0) { + t = abs_index(L, t); + lua_rawgeti(L, t, FREELIST_REF); + lua_rawseti(L, t, ref); /* t[ref] = t[FREELIST_REF] */ + lua_pushinteger(L, ref); + lua_rawseti(L, t, FREELIST_REF); /* t[FREELIST_REF] = ref */ + } +} + + + +/* +** {====================================================== +** Load functions +** ======================================================= +*/ + +typedef struct LoadF { + int extraline; + FILE *f; + char buff[LUAL_BUFFERSIZE]; +} LoadF; + + +static const char *getF (lua_State *L, void *ud, size_t *size) { + LoadF *lf = (LoadF *)ud; + (void)L; + if (lf->extraline) { + lf->extraline = 0; + *size = 1; + return "\n"; + } + if (feof(lf->f)) return NULL; + *size = fread(lf->buff, 1, LUAL_BUFFERSIZE, lf->f); + return (*size > 0) ? lf->buff : NULL; +} + + +static int errfile (lua_State *L, const char *what, int fnameindex) { + const char *serr = strerror(errno); + const char *filename = lua_tostring(L, fnameindex) + 1; + lua_pushfstring(L, "cannot %s %s: %s", what, filename, serr); + lua_remove(L, fnameindex); + return LUA_ERRFILE; +} + + +LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { + LoadF lf; + int status, readstatus; + int c; + int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ + lf.extraline = 0; + if (filename == NULL) { + lua_pushliteral(L, "=stdin"); + lf.f = stdin; + } + else { + lua_pushfstring(L, "@%s", filename); + lf.f = fopen(filename, "r"); + if (lf.f == NULL) return errfile(L, "open", fnameindex); + } + c = getc(lf.f); + if (c == '#') { /* Unix exec. file? */ + lf.extraline = 1; + while ((c = getc(lf.f)) != EOF && c != '\n') ; /* skip first line */ + if (c == '\n') c = getc(lf.f); + } + if (c == LUA_SIGNATURE[0] && lf.f != stdin) { /* binary file? */ + fclose(lf.f); + lf.f = fopen(filename, "rb"); /* reopen in binary mode */ + if (lf.f == NULL) return errfile(L, "reopen", fnameindex); + /* skip eventual `#!...' */ + while ((c = getc(lf.f)) != EOF && c != LUA_SIGNATURE[0]) ; + lf.extraline = 0; + } + ungetc(c, lf.f); + status = lua_load(L, getF, &lf, lua_tostring(L, -1)); + readstatus = ferror(lf.f); + if (lf.f != stdin) fclose(lf.f); /* close file (even in case of errors) */ + if (readstatus) { + lua_settop(L, fnameindex); /* ignore results from `lua_load' */ + return errfile(L, "read", fnameindex); + } + lua_remove(L, fnameindex); + return status; +} + + +typedef struct LoadS { + const char *s; + size_t size; +} LoadS; + + +static const char *getS (lua_State *L, void *ud, size_t *size) { + LoadS *ls = (LoadS *)ud; + (void)L; + if (ls->size == 0) return NULL; + *size = ls->size; + ls->size = 0; + return ls->s; +} + + +LUALIB_API int luaL_loadbuffer (lua_State *L, const char *buff, size_t size, + const char *name) { + LoadS ls; + ls.s = buff; + ls.size = size; + return lua_load(L, getS, &ls, name); +} + + +LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s) { + return luaL_loadbuffer(L, s, strlen(s), s); +} + + + +/* }====================================================== */ + + +static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { + (void)ud; + (void)osize; + if (nsize == 0) { + free(ptr); + return NULL; + } + else + return realloc(ptr, nsize); +} + + +static int panic (lua_State *L) { + (void)L; /* to avoid warnings */ + fprintf(stderr, "PANIC: unprotected error in call to Lua API (%s)\n", + lua_tostring(L, -1)); + return 0; +} + + +LUALIB_API lua_State *luaL_newstate (void) { + lua_State *L = lua_newstate(l_alloc, NULL); + if (L) lua_atpanic(L, &panic); + return L; +} + diff --git a/lua/src/lauxlib.h b/lua/src/lauxlib.h new file mode 100644 index 0000000..1f34308 --- /dev/null +++ b/lua/src/lauxlib.h @@ -0,0 +1,174 @@ +/* +** $Id: lauxlib.h,v 1.88 2006/04/12 20:31:15 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lauxlib_h +#define lauxlib_h + + +#include +#include + +#include "lua.h" + + +#if defined(LUA_COMPAT_GETN) +LUALIB_API int (luaL_getn) (lua_State *L, int t); +LUALIB_API void (luaL_setn) (lua_State *L, int t, int n); +#else +#define luaL_getn(L,i) ((int)lua_objlen(L, i)) +#define luaL_setn(L,i,j) ((void)0) /* no op! */ +#endif + +#if defined(LUA_COMPAT_OPENLIB) +#define luaI_openlib luaL_openlib +#endif + + +/* extra error code for `luaL_load' */ +#define LUA_ERRFILE (LUA_ERRERR+1) + + +typedef struct luaL_Reg { + const char *name; + lua_CFunction func; +} luaL_Reg; + + + +LUALIB_API void (luaI_openlib) (lua_State *L, const char *libname, + const luaL_Reg *l, int nup); +LUALIB_API void (luaL_register) (lua_State *L, const char *libname, + const luaL_Reg *l); +LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); +LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); +LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); +LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); +LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, + size_t *l); +LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, + const char *def, size_t *l); +LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); +LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); + +LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); +LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, + lua_Integer def); + +LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); +LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); +LUALIB_API void (luaL_checkany) (lua_State *L, int narg); + +LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); +LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); + +LUALIB_API void (luaL_where) (lua_State *L, int lvl); +LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); + +LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, + const char *const lst[]); + +LUALIB_API int (luaL_ref) (lua_State *L, int t); +LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); + +LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); +LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, + const char *name); +LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); + +LUALIB_API lua_State *(luaL_newstate) (void); + + +LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, + const char *r); + +LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx, + const char *fname, int szhint); + + + + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + +#define luaL_argcheck(L, cond,numarg,extramsg) \ + ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) +#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) +#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) +#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) +#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) +#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) +#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) + +#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) + +#define luaL_dofile(L, fn) \ + (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_dostring(L, s) \ + (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) + +#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + + + +typedef struct luaL_Buffer { + char *p; /* current position in buffer */ + int lvl; /* number of strings in the stack (level) */ + lua_State *L; + char buffer[LUAL_BUFFERSIZE]; +} luaL_Buffer; + +#define luaL_addchar(B,c) \ + ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ + (*(B)->p++ = (char)(c))) + +/* compatibility only */ +#define luaL_putchar(B,c) luaL_addchar(B,c) + +#define luaL_addsize(B,n) ((B)->p += (n)) + +LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); +LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B); +LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); +LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); +LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); +LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); + + +/* }====================================================== */ + + +/* compatibility with ref system */ + +/* pre-defined references */ +#define LUA_NOREF (-2) +#define LUA_REFNIL (-1) + +#define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \ + (lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0)) + +#define lua_unref(L,ref) luaL_unref(L, LUA_REGISTRYINDEX, (ref)) + +#define lua_getref(L,ref) lua_rawgeti(L, LUA_REGISTRYINDEX, (ref)) + + +#define luaL_reg luaL_Reg + +#endif + + diff --git a/lua/src/lbaselib.c b/lua/src/lbaselib.c new file mode 100644 index 0000000..147a727 --- /dev/null +++ b/lua/src/lbaselib.c @@ -0,0 +1,643 @@ +/* +** $Id: lbaselib.c,v 1.191a 2006/06/02 15:34:00 roberto Exp $ +** Basic library +** See Copyright Notice in lua.h +*/ + + + +#include +#include +#include +#include + +#define lbaselib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + + + +/* +** If your system does not support `stdout', you can just remove this function. +** If you need, you can define your own `print' function, following this +** model but changing `fputs' to put the strings at a proper place +** (a console window or a log file, for instance). +*/ +static int luaB_print (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + int i; + lua_getglobal(L, "tostring"); + for (i=1; i<=n; i++) { + const char *s; + lua_pushvalue(L, -1); /* function to be called */ + lua_pushvalue(L, i); /* value to print */ + lua_call(L, 1, 1); + s = lua_tostring(L, -1); /* get result */ + if (s == NULL) + return luaL_error(L, LUA_QL("tostring") " must return a string to " + LUA_QL("print")); + if (i>1) fputs("\t", stdout); + fputs(s, stdout); + lua_pop(L, 1); /* pop result */ + } + fputs("\n", stdout); + return 0; +} + + +static int luaB_tonumber (lua_State *L) { + int base = luaL_optint(L, 2, 10); + if (base == 10) { /* standard conversion */ + luaL_checkany(L, 1); + if (lua_isnumber(L, 1)) { + lua_pushnumber(L, lua_tonumber(L, 1)); + return 1; + } + } + else { + const char *s1 = luaL_checkstring(L, 1); + char *s2; + unsigned long n; + luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range"); + n = strtoul(s1, &s2, base); + if (s1 != s2) { /* at least one valid digit? */ + while (isspace((unsigned char)(*s2))) s2++; /* skip trailing spaces */ + if (*s2 == '\0') { /* no invalid trailing characters? */ + lua_pushnumber(L, (lua_Number)n); + return 1; + } + } + } + lua_pushnil(L); /* else not a number */ + return 1; +} + + +static int luaB_error (lua_State *L) { + int level = luaL_optint(L, 2, 1); + lua_settop(L, 1); + if (lua_isstring(L, 1) && level > 0) { /* add extra information? */ + luaL_where(L, level); + lua_pushvalue(L, 1); + lua_concat(L, 2); + } + return lua_error(L); +} + + +static int luaB_getmetatable (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_getmetatable(L, 1)) { + lua_pushnil(L); + return 1; /* no metatable */ + } + luaL_getmetafield(L, 1, "__metatable"); + return 1; /* returns either __metatable field (if present) or metatable */ +} + + +static int luaB_setmetatable (lua_State *L) { + int t = lua_type(L, 2); + luaL_checktype(L, 1, LUA_TTABLE); + luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, + "nil or table expected"); + if (luaL_getmetafield(L, 1, "__metatable")) + luaL_error(L, "cannot change a protected metatable"); + lua_settop(L, 2); + lua_setmetatable(L, 1); + return 1; +} + + +static void getfunc (lua_State *L, int opt) { + if (lua_isfunction(L, 1)) lua_pushvalue(L, 1); + else { + lua_Debug ar; + int level = opt ? luaL_optint(L, 1, 1) : luaL_checkint(L, 1); + luaL_argcheck(L, level >= 0, 1, "level must be non-negative"); + if (lua_getstack(L, level, &ar) == 0) + luaL_argerror(L, 1, "invalid level"); + lua_getinfo(L, "f", &ar); + if (lua_isnil(L, -1)) + luaL_error(L, "no function environment for tail call at level %d", + level); + } +} + + +static int luaB_getfenv (lua_State *L) { + getfunc(L, 1); + if (lua_iscfunction(L, -1)) /* is a C function? */ + lua_pushvalue(L, LUA_GLOBALSINDEX); /* return the thread's global env. */ + else + lua_getfenv(L, -1); + return 1; +} + + +static int luaB_setfenv (lua_State *L) { + luaL_checktype(L, 2, LUA_TTABLE); + getfunc(L, 0); + lua_pushvalue(L, 2); + if (lua_isnumber(L, 1) && lua_tonumber(L, 1) == 0) { + /* change environment of current thread */ + lua_pushthread(L); + lua_insert(L, -2); + lua_setfenv(L, -2); + return 0; + } + else if (lua_iscfunction(L, -2) || lua_setfenv(L, -2) == 0) + luaL_error(L, + LUA_QL("setfenv") " cannot change environment of given object"); + return 1; +} + + +static int luaB_rawequal (lua_State *L) { + luaL_checkany(L, 1); + luaL_checkany(L, 2); + lua_pushboolean(L, lua_rawequal(L, 1, 2)); + return 1; +} + + +static int luaB_rawget (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checkany(L, 2); + lua_settop(L, 2); + lua_rawget(L, 1); + return 1; +} + +static int luaB_rawset (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checkany(L, 2); + luaL_checkany(L, 3); + lua_settop(L, 3); + lua_rawset(L, 1); + return 1; +} + + +static int luaB_gcinfo (lua_State *L) { + lua_pushinteger(L, lua_getgccount(L)); + return 1; +} + + +static int luaB_collectgarbage (lua_State *L) { + static const char *const opts[] = {"stop", "restart", "collect", + "count", "step", "setpause", "setstepmul", NULL}; + static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART, LUA_GCCOLLECT, + LUA_GCCOUNT, LUA_GCSTEP, LUA_GCSETPAUSE, LUA_GCSETSTEPMUL}; + int o = luaL_checkoption(L, 1, "collect", opts); + int ex = luaL_optint(L, 2, 0); + int res = lua_gc(L, optsnum[o], ex); + switch (optsnum[o]) { + case LUA_GCCOUNT: { + int b = lua_gc(L, LUA_GCCOUNTB, 0); + lua_pushnumber(L, res + ((lua_Number)b/1024)); + return 1; + } + case LUA_GCSTEP: { + lua_pushboolean(L, res); + return 1; + } + default: { + lua_pushnumber(L, res); + return 1; + } + } +} + + +static int luaB_type (lua_State *L) { + luaL_checkany(L, 1); + lua_pushstring(L, luaL_typename(L, 1)); + return 1; +} + + +static int luaB_next (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + lua_settop(L, 2); /* create a 2nd argument if there isn't one */ + if (lua_next(L, 1)) + return 2; + else { + lua_pushnil(L); + return 1; + } +} + + +static int luaB_pairs (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */ + lua_pushvalue(L, 1); /* state, */ + lua_pushnil(L); /* and initial value */ + return 3; +} + + +static int ipairsaux (lua_State *L) { + int i = luaL_checkint(L, 2); + luaL_checktype(L, 1, LUA_TTABLE); + i++; /* next value */ + lua_pushinteger(L, i); + lua_rawgeti(L, 1, i); + return (lua_isnil(L, -1)) ? 0 : 2; +} + + +static int luaB_ipairs (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */ + lua_pushvalue(L, 1); /* state, */ + lua_pushinteger(L, 0); /* and initial value */ + return 3; +} + + +static int load_aux (lua_State *L, int status) { + if (status == 0) /* OK? */ + return 1; + else { + lua_pushnil(L); + lua_insert(L, -2); /* put before error message */ + return 2; /* return nil plus error message */ + } +} + + +static int luaB_loadstring (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + const char *chunkname = luaL_optstring(L, 2, s); + return load_aux(L, luaL_loadbuffer(L, s, l, chunkname)); +} + + +static int luaB_loadfile (lua_State *L) { + const char *fname = luaL_optstring(L, 1, NULL); + return load_aux(L, luaL_loadfile(L, fname)); +} + + +/* +** Reader for generic `load' function: `lua_load' uses the +** stack for internal stuff, so the reader cannot change the +** stack top. Instead, it keeps its resulting string in a +** reserved slot inside the stack. +*/ +static const char *generic_reader (lua_State *L, void *ud, size_t *size) { + (void)ud; /* to avoid warnings */ + luaL_checkstack(L, 2, "too many nested functions"); + lua_pushvalue(L, 1); /* get function */ + lua_call(L, 0, 1); /* call it */ + if (lua_isnil(L, -1)) { + *size = 0; + return NULL; + } + else if (lua_isstring(L, -1)) { + lua_replace(L, 3); /* save string in a reserved stack slot */ + return lua_tolstring(L, 3, size); + } + else luaL_error(L, "reader function must return a string"); + return NULL; /* to avoid warnings */ +} + + +static int luaB_load (lua_State *L) { + int status; + const char *cname = luaL_optstring(L, 2, "=(load)"); + luaL_checktype(L, 1, LUA_TFUNCTION); + lua_settop(L, 3); /* function, eventual name, plus one reserved slot */ + status = lua_load(L, generic_reader, NULL, cname); + return load_aux(L, status); +} + + +static int luaB_dofile (lua_State *L) { + const char *fname = luaL_optstring(L, 1, NULL); + int n = lua_gettop(L); + if (luaL_loadfile(L, fname) != 0) lua_error(L); + lua_call(L, 0, LUA_MULTRET); + return lua_gettop(L) - n; +} + + +static int luaB_assert (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_toboolean(L, 1)) + return luaL_error(L, "%s", luaL_optstring(L, 2, "assertion failed!")); + return lua_gettop(L); +} + + +static int luaB_unpack (lua_State *L) { + int i, e, n; + luaL_checktype(L, 1, LUA_TTABLE); + i = luaL_optint(L, 2, 1); + e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1)); + n = e - i + 1; /* number of elements */ + if (n <= 0) return 0; /* empty range */ + luaL_checkstack(L, n, "table too big to unpack"); + for (; i<=e; i++) /* push arg[i...e] */ + lua_rawgeti(L, 1, i); + return n; +} + + +static int luaB_select (lua_State *L) { + int n = lua_gettop(L); + if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') { + lua_pushinteger(L, n-1); + return 1; + } + else { + int i = luaL_checkint(L, 1); + if (i < 0) i = n + i; + else if (i > n) i = n; + luaL_argcheck(L, 1 <= i, 1, "index out of range"); + return n - i; + } +} + + +static int luaB_pcall (lua_State *L) { + int status; + luaL_checkany(L, 1); + status = lua_pcall(L, lua_gettop(L) - 1, LUA_MULTRET, 0); + lua_pushboolean(L, (status == 0)); + lua_insert(L, 1); + return lua_gettop(L); /* return status + all results */ +} + + +static int luaB_xpcall (lua_State *L) { + int status; + luaL_checkany(L, 2); + lua_settop(L, 2); + lua_insert(L, 1); /* put error function under function to be called */ + status = lua_pcall(L, 0, LUA_MULTRET, 1); + lua_pushboolean(L, (status == 0)); + lua_replace(L, 1); + return lua_gettop(L); /* return status + all results */ +} + + +static int luaB_tostring (lua_State *L) { + luaL_checkany(L, 1); + if (luaL_callmeta(L, 1, "__tostring")) /* is there a metafield? */ + return 1; /* use its value */ + switch (lua_type(L, 1)) { + case LUA_TNUMBER: + lua_pushstring(L, lua_tostring(L, 1)); + break; + case LUA_TSTRING: + lua_pushvalue(L, 1); + break; + case LUA_TBOOLEAN: + lua_pushstring(L, (lua_toboolean(L, 1) ? "true" : "false")); + break; + case LUA_TNIL: + lua_pushliteral(L, "nil"); + break; + default: + lua_pushfstring(L, "%s: %p", luaL_typename(L, 1), lua_topointer(L, 1)); + break; + } + return 1; +} + + +static int luaB_newproxy (lua_State *L) { + lua_settop(L, 1); + lua_newuserdata(L, 0); /* create proxy */ + if (lua_toboolean(L, 1) == 0) + return 1; /* no metatable */ + else if (lua_isboolean(L, 1)) { + lua_newtable(L); /* create a new metatable `m' ... */ + lua_pushvalue(L, -1); /* ... and mark `m' as a valid metatable */ + lua_pushboolean(L, 1); + lua_rawset(L, lua_upvalueindex(1)); /* weaktable[m] = true */ + } + else { + int validproxy = 0; /* to check if weaktable[metatable(u)] == true */ + if (lua_getmetatable(L, 1)) { + lua_rawget(L, lua_upvalueindex(1)); + validproxy = lua_toboolean(L, -1); + lua_pop(L, 1); /* remove value */ + } + luaL_argcheck(L, validproxy, 1, "boolean or proxy expected"); + lua_getmetatable(L, 1); /* metatable is valid; get it */ + } + lua_setmetatable(L, 2); + return 1; +} + + +static const luaL_Reg base_funcs[] = { + {"assert", luaB_assert}, + {"collectgarbage", luaB_collectgarbage}, + {"dofile", luaB_dofile}, + {"error", luaB_error}, + {"gcinfo", luaB_gcinfo}, + {"getfenv", luaB_getfenv}, + {"getmetatable", luaB_getmetatable}, + {"loadfile", luaB_loadfile}, + {"load", luaB_load}, + {"loadstring", luaB_loadstring}, + {"next", luaB_next}, + {"pcall", luaB_pcall}, + {"print", luaB_print}, + {"rawequal", luaB_rawequal}, + {"rawget", luaB_rawget}, + {"rawset", luaB_rawset}, + {"select", luaB_select}, + {"setfenv", luaB_setfenv}, + {"setmetatable", luaB_setmetatable}, + {"tonumber", luaB_tonumber}, + {"tostring", luaB_tostring}, + {"type", luaB_type}, + {"unpack", luaB_unpack}, + {"xpcall", luaB_xpcall}, + {NULL, NULL} +}; + + +/* +** {====================================================== +** Coroutine library +** ======================================================= +*/ + +static int auxresume (lua_State *L, lua_State *co, int narg) { + int status; + if (!lua_checkstack(co, narg)) + luaL_error(L, "too many arguments to resume"); + if (lua_status(co) == 0 && lua_gettop(co) == 0) { + lua_pushliteral(L, "cannot resume dead coroutine"); + return -1; /* error flag */ + } + lua_xmove(L, co, narg); + status = lua_resume(co, narg); + if (status == 0 || status == LUA_YIELD) { + int nres = lua_gettop(co); + if (!lua_checkstack(L, nres)) + luaL_error(L, "too many results to resume"); + lua_xmove(co, L, nres); /* move yielded values */ + return nres; + } + else { + lua_xmove(co, L, 1); /* move error message */ + return -1; /* error flag */ + } +} + + +static int luaB_coresume (lua_State *L) { + lua_State *co = lua_tothread(L, 1); + int r; + luaL_argcheck(L, co, 1, "coroutine expected"); + r = auxresume(L, co, lua_gettop(L) - 1); + if (r < 0) { + lua_pushboolean(L, 0); + lua_insert(L, -2); + return 2; /* return false + error message */ + } + else { + lua_pushboolean(L, 1); + lua_insert(L, -(r + 1)); + return r + 1; /* return true + `resume' returns */ + } +} + + +static int luaB_auxwrap (lua_State *L) { + lua_State *co = lua_tothread(L, lua_upvalueindex(1)); + int r = auxresume(L, co, lua_gettop(L)); + if (r < 0) { + if (lua_isstring(L, -1)) { /* error object is a string? */ + luaL_where(L, 1); /* add extra info */ + lua_insert(L, -2); + lua_concat(L, 2); + } + lua_error(L); /* propagate error */ + } + return r; +} + + +static int luaB_cocreate (lua_State *L) { + lua_State *NL = lua_newthread(L); + luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1, + "Lua function expected"); + lua_pushvalue(L, 1); /* move function to top */ + lua_xmove(L, NL, 1); /* move function from L to NL */ + return 1; +} + + +static int luaB_cowrap (lua_State *L) { + luaB_cocreate(L); + lua_pushcclosure(L, luaB_auxwrap, 1); + return 1; +} + + +static int luaB_yield (lua_State *L) { + return lua_yield(L, lua_gettop(L)); +} + + +static int luaB_costatus (lua_State *L) { + lua_State *co = lua_tothread(L, 1); + luaL_argcheck(L, co, 1, "coroutine expected"); + if (L == co) lua_pushliteral(L, "running"); + else { + switch (lua_status(co)) { + case LUA_YIELD: + lua_pushliteral(L, "suspended"); + break; + case 0: { + lua_Debug ar; + if (lua_getstack(co, 0, &ar) > 0) /* does it have frames? */ + lua_pushliteral(L, "normal"); /* it is running */ + else if (lua_gettop(co) == 0) + lua_pushliteral(L, "dead"); + else + lua_pushliteral(L, "suspended"); /* initial state */ + break; + } + default: /* some error occured */ + lua_pushliteral(L, "dead"); + break; + } + } + return 1; +} + + +static int luaB_corunning (lua_State *L) { + if (lua_pushthread(L)) + return 0; /* main thread is not a coroutine */ + else + return 1; +} + + +static const luaL_Reg co_funcs[] = { + {"create", luaB_cocreate}, + {"resume", luaB_coresume}, + {"running", luaB_corunning}, + {"status", luaB_costatus}, + {"wrap", luaB_cowrap}, + {"yield", luaB_yield}, + {NULL, NULL} +}; + +/* }====================================================== */ + + +static void auxopen (lua_State *L, const char *name, + lua_CFunction f, lua_CFunction u) { + lua_pushcfunction(L, u); + lua_pushcclosure(L, f, 1); + lua_setfield(L, -2, name); +} + + +static void base_open (lua_State *L) { + /* set global _G */ + lua_pushvalue(L, LUA_GLOBALSINDEX); + lua_setglobal(L, "_G"); + /* open lib into global table */ + luaL_register(L, "_G", base_funcs); + lua_pushliteral(L, LUA_VERSION); + lua_setglobal(L, "_VERSION"); /* set global _VERSION */ + /* `ipairs' and `pairs' need auxliliary functions as upvalues */ + auxopen(L, "ipairs", luaB_ipairs, ipairsaux); + auxopen(L, "pairs", luaB_pairs, luaB_next); + /* `newproxy' needs a weaktable as upvalue */ + lua_createtable(L, 0, 1); /* new table `w' */ + lua_pushvalue(L, -1); /* `w' will be its own metatable */ + lua_setmetatable(L, -2); + lua_pushliteral(L, "kv"); + lua_setfield(L, -2, "__mode"); /* metatable(w).__mode = "kv" */ + lua_pushcclosure(L, luaB_newproxy, 1); + lua_setglobal(L, "newproxy"); /* set global `newproxy' */ +} + + +LUALIB_API int luaopen_base (lua_State *L) { + base_open(L); + luaL_register(L, LUA_COLIBNAME, co_funcs); + return 2; +} + diff --git a/lua/src/lcode.c b/lua/src/lcode.c new file mode 100644 index 0000000..9ce515a --- /dev/null +++ b/lua/src/lcode.c @@ -0,0 +1,839 @@ +/* +** $Id: lcode.c,v 2.25a 2006/03/21 19:28:49 roberto Exp $ +** Code generator for Lua +** See Copyright Notice in lua.h +*/ + + +#include + +#define lcode_c +#define LUA_CORE + +#include "lua.h" + +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "llex.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "ltable.h" + + +#define hasjumps(e) ((e)->t != (e)->f) + + +static int isnumeral(expdesc *e) { + return (e->k == VKNUM && e->t == NO_JUMP && e->f == NO_JUMP); +} + + +void luaK_nil (FuncState *fs, int from, int n) { + Instruction *previous; + if (fs->pc > fs->lasttarget) { /* no jumps to current position? */ + if (fs->pc == 0) { /* function start? */ + if (from >= fs->nactvar) + return; /* positions are already clean */ + } + else { + previous = &fs->f->code[fs->pc-1]; + if (GET_OPCODE(*previous) == OP_LOADNIL) { + int pfrom = GETARG_A(*previous); + int pto = GETARG_B(*previous); + if (pfrom <= from && from <= pto+1) { /* can connect both? */ + if (from+n-1 > pto) + SETARG_B(*previous, from+n-1); + return; + } + } + } + } + luaK_codeABC(fs, OP_LOADNIL, from, from+n-1, 0); /* else no optimization */ +} + + +int luaK_jump (FuncState *fs) { + int jpc = fs->jpc; /* save list of jumps to here */ + int j; + fs->jpc = NO_JUMP; + j = luaK_codeAsBx(fs, OP_JMP, 0, NO_JUMP); + luaK_concat(fs, &j, jpc); /* keep them on hold */ + return j; +} + + +void luaK_ret (FuncState *fs, int first, int nret) { + luaK_codeABC(fs, OP_RETURN, first, nret+1, 0); +} + + +static int condjump (FuncState *fs, OpCode op, int A, int B, int C) { + luaK_codeABC(fs, op, A, B, C); + return luaK_jump(fs); +} + + +static void fixjump (FuncState *fs, int pc, int dest) { + Instruction *jmp = &fs->f->code[pc]; + int offset = dest-(pc+1); + lua_assert(dest != NO_JUMP); + if (abs(offset) > MAXARG_sBx) + luaX_syntaxerror(fs->ls, "control structure too long"); + SETARG_sBx(*jmp, offset); +} + + +/* +** returns current `pc' and marks it as a jump target (to avoid wrong +** optimizations with consecutive instructions not in the same basic block). +*/ +int luaK_getlabel (FuncState *fs) { + fs->lasttarget = fs->pc; + return fs->pc; +} + + +static int getjump (FuncState *fs, int pc) { + int offset = GETARG_sBx(fs->f->code[pc]); + if (offset == NO_JUMP) /* point to itself represents end of list */ + return NO_JUMP; /* end of list */ + else + return (pc+1)+offset; /* turn offset into absolute position */ +} + + +static Instruction *getjumpcontrol (FuncState *fs, int pc) { + Instruction *pi = &fs->f->code[pc]; + if (pc >= 1 && testTMode(GET_OPCODE(*(pi-1)))) + return pi-1; + else + return pi; +} + + +/* +** check whether list has any jump that do not produce a value +** (or produce an inverted value) +*/ +static int need_value (FuncState *fs, int list) { + for (; list != NO_JUMP; list = getjump(fs, list)) { + Instruction i = *getjumpcontrol(fs, list); + if (GET_OPCODE(i) != OP_TESTSET) return 1; + } + return 0; /* not found */ +} + + +static int patchtestreg (FuncState *fs, int node, int reg) { + Instruction *i = getjumpcontrol(fs, node); + if (GET_OPCODE(*i) != OP_TESTSET) + return 0; /* cannot patch other instructions */ + if (reg != NO_REG && reg != GETARG_B(*i)) + SETARG_A(*i, reg); + else /* no register to put value or register already has the value */ + *i = CREATE_ABC(OP_TEST, GETARG_B(*i), 0, GETARG_C(*i)); + + return 1; +} + + +static void removevalues (FuncState *fs, int list) { + for (; list != NO_JUMP; list = getjump(fs, list)) + patchtestreg(fs, list, NO_REG); +} + + +static void patchlistaux (FuncState *fs, int list, int vtarget, int reg, + int dtarget) { + while (list != NO_JUMP) { + int next = getjump(fs, list); + if (patchtestreg(fs, list, reg)) + fixjump(fs, list, vtarget); + else + fixjump(fs, list, dtarget); /* jump to default target */ + list = next; + } +} + + +static void dischargejpc (FuncState *fs) { + patchlistaux(fs, fs->jpc, fs->pc, NO_REG, fs->pc); + fs->jpc = NO_JUMP; +} + + +void luaK_patchlist (FuncState *fs, int list, int target) { + if (target == fs->pc) + luaK_patchtohere(fs, list); + else { + lua_assert(target < fs->pc); + patchlistaux(fs, list, target, NO_REG, target); + } +} + + +void luaK_patchtohere (FuncState *fs, int list) { + luaK_getlabel(fs); + luaK_concat(fs, &fs->jpc, list); +} + + +void luaK_concat (FuncState *fs, int *l1, int l2) { + if (l2 == NO_JUMP) return; + else if (*l1 == NO_JUMP) + *l1 = l2; + else { + int list = *l1; + int next; + while ((next = getjump(fs, list)) != NO_JUMP) /* find last element */ + list = next; + fixjump(fs, list, l2); + } +} + + +void luaK_checkstack (FuncState *fs, int n) { + int newstack = fs->freereg + n; + if (newstack > fs->f->maxstacksize) { + if (newstack >= MAXSTACK) + luaX_syntaxerror(fs->ls, "function or expression too complex"); + fs->f->maxstacksize = cast_byte(newstack); + } +} + + +void luaK_reserveregs (FuncState *fs, int n) { + luaK_checkstack(fs, n); + fs->freereg += n; +} + + +static void freereg (FuncState *fs, int reg) { + if (!ISK(reg) && reg >= fs->nactvar) { + fs->freereg--; + lua_assert(reg == fs->freereg); + } +} + + +static void freeexp (FuncState *fs, expdesc *e) { + if (e->k == VNONRELOC) + freereg(fs, e->u.s.info); +} + + +static int addk (FuncState *fs, TValue *k, TValue *v) { + lua_State *L = fs->L; + TValue *idx = luaH_set(L, fs->h, k); + Proto *f = fs->f; + int oldsize = f->sizek; + if (ttisnumber(idx)) { + lua_assert(luaO_rawequalObj(&fs->f->k[cast_int(nvalue(idx))], v)); + return cast_int(nvalue(idx)); + } + else { /* constant not found; create a new entry */ + setnvalue(idx, cast_num(fs->nk)); + luaM_growvector(L, f->k, fs->nk, f->sizek, TValue, + MAXARG_Bx, "constant table overflow"); + while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]); + setobj(L, &f->k[fs->nk], v); + luaC_barrier(L, f, v); + return fs->nk++; + } +} + + +int luaK_stringK (FuncState *fs, TString *s) { + TValue o; + setsvalue(fs->L, &o, s); + return addk(fs, &o, &o); +} + + +int luaK_numberK (FuncState *fs, lua_Number r) { + TValue o; + setnvalue(&o, r); + return addk(fs, &o, &o); +} + + +static int boolK (FuncState *fs, int b) { + TValue o; + setbvalue(&o, b); + return addk(fs, &o, &o); +} + + +static int nilK (FuncState *fs) { + TValue k, v; + setnilvalue(&v); + /* cannot use nil as key; instead use table itself to represent nil */ + sethvalue(fs->L, &k, fs->h); + return addk(fs, &k, &v); +} + + +void luaK_setreturns (FuncState *fs, expdesc *e, int nresults) { + if (e->k == VCALL) { /* expression is an open function call? */ + SETARG_C(getcode(fs, e), nresults+1); + } + else if (e->k == VVARARG) { + SETARG_B(getcode(fs, e), nresults+1); + SETARG_A(getcode(fs, e), fs->freereg); + luaK_reserveregs(fs, 1); + } +} + + +void luaK_setoneret (FuncState *fs, expdesc *e) { + if (e->k == VCALL) { /* expression is an open function call? */ + e->k = VNONRELOC; + e->u.s.info = GETARG_A(getcode(fs, e)); + } + else if (e->k == VVARARG) { + SETARG_B(getcode(fs, e), 2); + e->k = VRELOCABLE; /* can relocate its simple result */ + } +} + + +void luaK_dischargevars (FuncState *fs, expdesc *e) { + switch (e->k) { + case VLOCAL: { + e->k = VNONRELOC; + break; + } + case VUPVAL: { + e->u.s.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.s.info, 0); + e->k = VRELOCABLE; + break; + } + case VGLOBAL: { + e->u.s.info = luaK_codeABx(fs, OP_GETGLOBAL, 0, e->u.s.info); + e->k = VRELOCABLE; + break; + } + case VINDEXED: { + freereg(fs, e->u.s.aux); + freereg(fs, e->u.s.info); + e->u.s.info = luaK_codeABC(fs, OP_GETTABLE, 0, e->u.s.info, e->u.s.aux); + e->k = VRELOCABLE; + break; + } + case VVARARG: + case VCALL: { + luaK_setoneret(fs, e); + break; + } + default: break; /* there is one value available (somewhere) */ + } +} + + +static int code_label (FuncState *fs, int A, int b, int jump) { + luaK_getlabel(fs); /* those instructions may be jump targets */ + return luaK_codeABC(fs, OP_LOADBOOL, A, b, jump); +} + + +static void discharge2reg (FuncState *fs, expdesc *e, int reg) { + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: { + luaK_nil(fs, reg, 1); + break; + } + case VFALSE: case VTRUE: { + luaK_codeABC(fs, OP_LOADBOOL, reg, e->k == VTRUE, 0); + break; + } + case VK: { + luaK_codeABx(fs, OP_LOADK, reg, e->u.s.info); + break; + } + case VKNUM: { + luaK_codeABx(fs, OP_LOADK, reg, luaK_numberK(fs, e->u.nval)); + break; + } + case VRELOCABLE: { + Instruction *pc = &getcode(fs, e); + SETARG_A(*pc, reg); + break; + } + case VNONRELOC: { + if (reg != e->u.s.info) + luaK_codeABC(fs, OP_MOVE, reg, e->u.s.info, 0); + break; + } + default: { + lua_assert(e->k == VVOID || e->k == VJMP); + return; /* nothing to do... */ + } + } + e->u.s.info = reg; + e->k = VNONRELOC; +} + + +static void discharge2anyreg (FuncState *fs, expdesc *e) { + if (e->k != VNONRELOC) { + luaK_reserveregs(fs, 1); + discharge2reg(fs, e, fs->freereg-1); + } +} + + +static void exp2reg (FuncState *fs, expdesc *e, int reg) { + discharge2reg(fs, e, reg); + if (e->k == VJMP) + luaK_concat(fs, &e->t, e->u.s.info); /* put this jump in `t' list */ + if (hasjumps(e)) { + int final; /* position after whole expression */ + int p_f = NO_JUMP; /* position of an eventual LOAD false */ + int p_t = NO_JUMP; /* position of an eventual LOAD true */ + if (need_value(fs, e->t) || need_value(fs, e->f)) { + int fj = (e->k == VJMP) ? NO_JUMP : luaK_jump(fs); + p_f = code_label(fs, reg, 0, 1); + p_t = code_label(fs, reg, 1, 0); + luaK_patchtohere(fs, fj); + } + final = luaK_getlabel(fs); + patchlistaux(fs, e->f, final, reg, p_f); + patchlistaux(fs, e->t, final, reg, p_t); + } + e->f = e->t = NO_JUMP; + e->u.s.info = reg; + e->k = VNONRELOC; +} + + +void luaK_exp2nextreg (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + freeexp(fs, e); + luaK_reserveregs(fs, 1); + exp2reg(fs, e, fs->freereg - 1); +} + + +int luaK_exp2anyreg (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + if (e->k == VNONRELOC) { + if (!hasjumps(e)) return e->u.s.info; /* exp is already in a register */ + if (e->u.s.info >= fs->nactvar) { /* reg. is not a local? */ + exp2reg(fs, e, e->u.s.info); /* put value on it */ + return e->u.s.info; + } + } + luaK_exp2nextreg(fs, e); /* default */ + return e->u.s.info; +} + + +void luaK_exp2val (FuncState *fs, expdesc *e) { + if (hasjumps(e)) + luaK_exp2anyreg(fs, e); + else + luaK_dischargevars(fs, e); +} + + +int luaK_exp2RK (FuncState *fs, expdesc *e) { + luaK_exp2val(fs, e); + switch (e->k) { + case VKNUM: + case VTRUE: + case VFALSE: + case VNIL: { + if (fs->nk <= MAXINDEXRK) { /* constant fit in RK operand? */ + e->u.s.info = (e->k == VNIL) ? nilK(fs) : + (e->k == VKNUM) ? luaK_numberK(fs, e->u.nval) : + boolK(fs, (e->k == VTRUE)); + e->k = VK; + return RKASK(e->u.s.info); + } + else break; + } + case VK: { + if (e->u.s.info <= MAXINDEXRK) /* constant fit in argC? */ + return RKASK(e->u.s.info); + else break; + } + default: break; + } + /* not a constant in the right range: put it in a register */ + return luaK_exp2anyreg(fs, e); +} + + +void luaK_storevar (FuncState *fs, expdesc *var, expdesc *ex) { + switch (var->k) { + case VLOCAL: { + freeexp(fs, ex); + exp2reg(fs, ex, var->u.s.info); + return; + } + case VUPVAL: { + int e = luaK_exp2anyreg(fs, ex); + luaK_codeABC(fs, OP_SETUPVAL, e, var->u.s.info, 0); + break; + } + case VGLOBAL: { + int e = luaK_exp2anyreg(fs, ex); + luaK_codeABx(fs, OP_SETGLOBAL, e, var->u.s.info); + break; + } + case VINDEXED: { + int e = luaK_exp2RK(fs, ex); + luaK_codeABC(fs, OP_SETTABLE, var->u.s.info, var->u.s.aux, e); + break; + } + default: { + lua_assert(0); /* invalid var kind to store */ + break; + } + } + freeexp(fs, ex); +} + + +void luaK_self (FuncState *fs, expdesc *e, expdesc *key) { + int func; + luaK_exp2anyreg(fs, e); + freeexp(fs, e); + func = fs->freereg; + luaK_reserveregs(fs, 2); + luaK_codeABC(fs, OP_SELF, func, e->u.s.info, luaK_exp2RK(fs, key)); + freeexp(fs, key); + e->u.s.info = func; + e->k = VNONRELOC; +} + + +static void invertjump (FuncState *fs, expdesc *e) { + Instruction *pc = getjumpcontrol(fs, e->u.s.info); + lua_assert(testTMode(GET_OPCODE(*pc)) && GET_OPCODE(*pc) != OP_TESTSET && + GET_OPCODE(*pc) != OP_TEST); + SETARG_A(*pc, !(GETARG_A(*pc))); +} + + +static int jumponcond (FuncState *fs, expdesc *e, int cond) { + if (e->k == VRELOCABLE) { + Instruction ie = getcode(fs, e); + if (GET_OPCODE(ie) == OP_NOT) { + fs->pc--; /* remove previous OP_NOT */ + return condjump(fs, OP_TEST, GETARG_B(ie), 0, !cond); + } + /* else go through */ + } + discharge2anyreg(fs, e); + freeexp(fs, e); + return condjump(fs, OP_TESTSET, NO_REG, e->u.s.info, cond); +} + + +void luaK_goiftrue (FuncState *fs, expdesc *e) { + int pc; /* pc of last jump */ + luaK_dischargevars(fs, e); + switch (e->k) { + case VK: case VKNUM: case VTRUE: { + pc = NO_JUMP; /* always true; do nothing */ + break; + } + case VFALSE: { + pc = luaK_jump(fs); /* always jump */ + break; + } + case VJMP: { + invertjump(fs, e); + pc = e->u.s.info; + break; + } + default: { + pc = jumponcond(fs, e, 0); + break; + } + } + luaK_concat(fs, &e->f, pc); /* insert last jump in `f' list */ + luaK_patchtohere(fs, e->t); + e->t = NO_JUMP; +} + + +static void luaK_goiffalse (FuncState *fs, expdesc *e) { + int pc; /* pc of last jump */ + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: case VFALSE: { + pc = NO_JUMP; /* always false; do nothing */ + break; + } + case VTRUE: { + pc = luaK_jump(fs); /* always jump */ + break; + } + case VJMP: { + pc = e->u.s.info; + break; + } + default: { + pc = jumponcond(fs, e, 1); + break; + } + } + luaK_concat(fs, &e->t, pc); /* insert last jump in `t' list */ + luaK_patchtohere(fs, e->f); + e->f = NO_JUMP; +} + + +static void codenot (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: case VFALSE: { + e->k = VTRUE; + break; + } + case VK: case VKNUM: case VTRUE: { + e->k = VFALSE; + break; + } + case VJMP: { + invertjump(fs, e); + break; + } + case VRELOCABLE: + case VNONRELOC: { + discharge2anyreg(fs, e); + freeexp(fs, e); + e->u.s.info = luaK_codeABC(fs, OP_NOT, 0, e->u.s.info, 0); + e->k = VRELOCABLE; + break; + } + default: { + lua_assert(0); /* cannot happen */ + break; + } + } + /* interchange true and false lists */ + { int temp = e->f; e->f = e->t; e->t = temp; } + removevalues(fs, e->f); + removevalues(fs, e->t); +} + + +void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) { + t->u.s.aux = luaK_exp2RK(fs, k); + t->k = VINDEXED; +} + + +static int constfolding (OpCode op, expdesc *e1, expdesc *e2) { + lua_Number v1, v2, r; + if (!isnumeral(e1) || !isnumeral(e2)) return 0; + v1 = e1->u.nval; + v2 = e2->u.nval; + switch (op) { + case OP_ADD: r = luai_numadd(v1, v2); break; + case OP_SUB: r = luai_numsub(v1, v2); break; + case OP_MUL: r = luai_nummul(v1, v2); break; + case OP_DIV: + if (v2 == 0) return 0; /* do not attempt to divide by 0 */ + r = luai_numdiv(v1, v2); break; + case OP_MOD: + if (v2 == 0) return 0; /* do not attempt to divide by 0 */ + r = luai_nummod(v1, v2); break; + case OP_POW: r = luai_numpow(v1, v2); break; + case OP_UNM: r = luai_numunm(v1); break; + case OP_LEN: return 0; /* no constant folding for 'len' */ + default: lua_assert(0); r = 0; break; + } + if (luai_numisnan(r)) return 0; /* do not attempt to produce NaN */ + e1->u.nval = r; + return 1; +} + + +static void codearith (FuncState *fs, OpCode op, expdesc *e1, expdesc *e2) { + if (constfolding(op, e1, e2)) + return; + else { + int o2 = (op != OP_UNM && op != OP_LEN) ? luaK_exp2RK(fs, e2) : 0; + int o1 = luaK_exp2RK(fs, e1); + if (o1 > o2) { + freeexp(fs, e1); + freeexp(fs, e2); + } + else { + freeexp(fs, e2); + freeexp(fs, e1); + } + e1->u.s.info = luaK_codeABC(fs, op, 0, o1, o2); + e1->k = VRELOCABLE; + } +} + + +static void codecomp (FuncState *fs, OpCode op, int cond, expdesc *e1, + expdesc *e2) { + int o1 = luaK_exp2RK(fs, e1); + int o2 = luaK_exp2RK(fs, e2); + freeexp(fs, e2); + freeexp(fs, e1); + if (cond == 0 && op != OP_EQ) { + int temp; /* exchange args to replace by `<' or `<=' */ + temp = o1; o1 = o2; o2 = temp; /* o1 <==> o2 */ + cond = 1; + } + e1->u.s.info = condjump(fs, op, cond, o1, o2); + e1->k = VJMP; +} + + +void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e) { + expdesc e2; + e2.t = e2.f = NO_JUMP; e2.k = VKNUM; e2.u.nval = 0; + switch (op) { + case OPR_MINUS: { + if (e->k == VK) + luaK_exp2anyreg(fs, e); /* cannot operate on non-numeric constants */ + codearith(fs, OP_UNM, e, &e2); + break; + } + case OPR_NOT: codenot(fs, e); break; + case OPR_LEN: { + luaK_exp2anyreg(fs, e); /* cannot operate on constants */ + codearith(fs, OP_LEN, e, &e2); + break; + } + default: lua_assert(0); + } +} + + +void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) { + switch (op) { + case OPR_AND: { + luaK_goiftrue(fs, v); + break; + } + case OPR_OR: { + luaK_goiffalse(fs, v); + break; + } + case OPR_CONCAT: { + luaK_exp2nextreg(fs, v); /* operand must be on the `stack' */ + break; + } + case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV: + case OPR_MOD: case OPR_POW: { + if (!isnumeral(v)) luaK_exp2RK(fs, v); + break; + } + default: { + luaK_exp2RK(fs, v); + break; + } + } +} + + +void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2) { + switch (op) { + case OPR_AND: { + lua_assert(e1->t == NO_JUMP); /* list must be closed */ + luaK_dischargevars(fs, e2); + luaK_concat(fs, &e2->f, e1->f); + *e1 = *e2; + break; + } + case OPR_OR: { + lua_assert(e1->f == NO_JUMP); /* list must be closed */ + luaK_dischargevars(fs, e2); + luaK_concat(fs, &e2->t, e1->t); + *e1 = *e2; + break; + } + case OPR_CONCAT: { + luaK_exp2val(fs, e2); + if (e2->k == VRELOCABLE && GET_OPCODE(getcode(fs, e2)) == OP_CONCAT) { + lua_assert(e1->u.s.info == GETARG_B(getcode(fs, e2))-1); + freeexp(fs, e1); + SETARG_B(getcode(fs, e2), e1->u.s.info); + e1->k = VRELOCABLE; e1->u.s.info = e2->u.s.info; + } + else { + luaK_exp2nextreg(fs, e2); /* operand must be on the 'stack' */ + codearith(fs, OP_CONCAT, e1, e2); + } + break; + } + case OPR_ADD: codearith(fs, OP_ADD, e1, e2); break; + case OPR_SUB: codearith(fs, OP_SUB, e1, e2); break; + case OPR_MUL: codearith(fs, OP_MUL, e1, e2); break; + case OPR_DIV: codearith(fs, OP_DIV, e1, e2); break; + case OPR_MOD: codearith(fs, OP_MOD, e1, e2); break; + case OPR_POW: codearith(fs, OP_POW, e1, e2); break; + case OPR_EQ: codecomp(fs, OP_EQ, 1, e1, e2); break; + case OPR_NE: codecomp(fs, OP_EQ, 0, e1, e2); break; + case OPR_LT: codecomp(fs, OP_LT, 1, e1, e2); break; + case OPR_LE: codecomp(fs, OP_LE, 1, e1, e2); break; + case OPR_GT: codecomp(fs, OP_LT, 0, e1, e2); break; + case OPR_GE: codecomp(fs, OP_LE, 0, e1, e2); break; + default: lua_assert(0); + } +} + + +void luaK_fixline (FuncState *fs, int line) { + fs->f->lineinfo[fs->pc - 1] = line; +} + + +static int luaK_code (FuncState *fs, Instruction i, int line) { + Proto *f = fs->f; + dischargejpc(fs); /* `pc' will change */ + /* put new instruction in code array */ + luaM_growvector(fs->L, f->code, fs->pc, f->sizecode, Instruction, + MAX_INT, "code size overflow"); + f->code[fs->pc] = i; + /* save corresponding line information */ + luaM_growvector(fs->L, f->lineinfo, fs->pc, f->sizelineinfo, int, + MAX_INT, "code size overflow"); + f->lineinfo[fs->pc] = line; + return fs->pc++; +} + + +int luaK_codeABC (FuncState *fs, OpCode o, int a, int b, int c) { + lua_assert(getOpMode(o) == iABC); + lua_assert(getBMode(o) != OpArgN || b == 0); + lua_assert(getCMode(o) != OpArgN || c == 0); + return luaK_code(fs, CREATE_ABC(o, a, b, c), fs->ls->lastline); +} + + +int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) { + lua_assert(getOpMode(o) == iABx || getOpMode(o) == iAsBx); + lua_assert(getCMode(o) == OpArgN); + return luaK_code(fs, CREATE_ABx(o, a, bc), fs->ls->lastline); +} + + +void luaK_setlist (FuncState *fs, int base, int nelems, int tostore) { + int c = (nelems - 1)/LFIELDS_PER_FLUSH + 1; + int b = (tostore == LUA_MULTRET) ? 0 : tostore; + lua_assert(tostore != 0); + if (c <= MAXARG_C) + luaK_codeABC(fs, OP_SETLIST, base, b, c); + else { + luaK_codeABC(fs, OP_SETLIST, base, b, 0); + luaK_code(fs, cast(Instruction, c), fs->ls->lastline); + } + fs->freereg = base + 1; /* free registers with list values */ +} + diff --git a/lua/src/lcode.h b/lua/src/lcode.h new file mode 100644 index 0000000..c02cb2b --- /dev/null +++ b/lua/src/lcode.h @@ -0,0 +1,76 @@ +/* +** $Id: lcode.h,v 1.48 2006/03/21 19:28:03 roberto Exp $ +** Code generator for Lua +** See Copyright Notice in lua.h +*/ + +#ifndef lcode_h +#define lcode_h + +#include "llex.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" + + +/* +** Marks the end of a patch list. It is an invalid value both as an absolute +** address, and as a list link (would link an element to itself). +*/ +#define NO_JUMP (-1) + + +/* +** grep "ORDER OPR" if you change these enums +*/ +typedef enum BinOpr { + OPR_ADD, OPR_SUB, OPR_MUL, OPR_DIV, OPR_MOD, OPR_POW, + OPR_CONCAT, + OPR_NE, OPR_EQ, + OPR_LT, OPR_LE, OPR_GT, OPR_GE, + OPR_AND, OPR_OR, + OPR_NOBINOPR +} BinOpr; + + +typedef enum UnOpr { OPR_MINUS, OPR_NOT, OPR_LEN, OPR_NOUNOPR } UnOpr; + + +#define getcode(fs,e) ((fs)->f->code[(e)->u.s.info]) + +#define luaK_codeAsBx(fs,o,A,sBx) luaK_codeABx(fs,o,A,(sBx)+MAXARG_sBx) + +#define luaK_setmultret(fs,e) luaK_setreturns(fs, e, LUA_MULTRET) + +LUAI_FUNC int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx); +LUAI_FUNC int luaK_codeABC (FuncState *fs, OpCode o, int A, int B, int C); +LUAI_FUNC void luaK_fixline (FuncState *fs, int line); +LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n); +LUAI_FUNC void luaK_reserveregs (FuncState *fs, int n); +LUAI_FUNC void luaK_checkstack (FuncState *fs, int n); +LUAI_FUNC int luaK_stringK (FuncState *fs, TString *s); +LUAI_FUNC int luaK_numberK (FuncState *fs, lua_Number r); +LUAI_FUNC void luaK_dischargevars (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_exp2anyreg (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2nextreg (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2val (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_exp2RK (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_self (FuncState *fs, expdesc *e, expdesc *key); +LUAI_FUNC void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k); +LUAI_FUNC void luaK_goiftrue (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_storevar (FuncState *fs, expdesc *var, expdesc *e); +LUAI_FUNC void luaK_setreturns (FuncState *fs, expdesc *e, int nresults); +LUAI_FUNC void luaK_setoneret (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_jump (FuncState *fs); +LUAI_FUNC void luaK_ret (FuncState *fs, int first, int nret); +LUAI_FUNC void luaK_patchlist (FuncState *fs, int list, int target); +LUAI_FUNC void luaK_patchtohere (FuncState *fs, int list); +LUAI_FUNC void luaK_concat (FuncState *fs, int *l1, int l2); +LUAI_FUNC int luaK_getlabel (FuncState *fs); +LUAI_FUNC void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v); +LUAI_FUNC void luaK_infix (FuncState *fs, BinOpr op, expdesc *v); +LUAI_FUNC void luaK_posfix (FuncState *fs, BinOpr op, expdesc *v1, expdesc *v2); +LUAI_FUNC void luaK_setlist (FuncState *fs, int base, int nelems, int tostore); + + +#endif diff --git a/lua/src/ldblib.c b/lua/src/ldblib.c new file mode 100644 index 0000000..26a19b6 --- /dev/null +++ b/lua/src/ldblib.c @@ -0,0 +1,397 @@ +/* +** $Id: ldblib.c,v 1.104 2005/12/29 15:32:11 roberto Exp $ +** Interface from Lua to its debug API +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define ldblib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + + +static int db_getregistry (lua_State *L) { + lua_pushvalue(L, LUA_REGISTRYINDEX); + return 1; +} + + +static int db_getmetatable (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_getmetatable(L, 1)) { + lua_pushnil(L); /* no metatable */ + } + return 1; +} + + +static int db_setmetatable (lua_State *L) { + int t = lua_type(L, 2); + luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, + "nil or table expected"); + lua_settop(L, 2); + lua_pushboolean(L, lua_setmetatable(L, 1)); + return 1; +} + + +static int db_getfenv (lua_State *L) { + lua_getfenv(L, 1); + return 1; +} + + +static int db_setfenv (lua_State *L) { + luaL_checktype(L, 2, LUA_TTABLE); + lua_settop(L, 2); + if (lua_setfenv(L, 1) == 0) + luaL_error(L, LUA_QL("setfenv") + " cannot change environment of given object"); + return 1; +} + + +static void settabss (lua_State *L, const char *i, const char *v) { + lua_pushstring(L, v); + lua_setfield(L, -2, i); +} + + +static void settabsi (lua_State *L, const char *i, int v) { + lua_pushinteger(L, v); + lua_setfield(L, -2, i); +} + + +static lua_State *getthread (lua_State *L, int *arg) { + if (lua_isthread(L, 1)) { + *arg = 1; + return lua_tothread(L, 1); + } + else { + *arg = 0; + return L; + } +} + + +static void treatstackoption (lua_State *L, lua_State *L1, const char *fname) { + if (L == L1) { + lua_pushvalue(L, -2); + lua_remove(L, -3); + } + else + lua_xmove(L1, L, 1); + lua_setfield(L, -2, fname); +} + + +static int db_getinfo (lua_State *L) { + lua_Debug ar; + int arg; + lua_State *L1 = getthread(L, &arg); + const char *options = luaL_optstring(L, arg+2, "flnSu"); + if (lua_isnumber(L, arg+1)) { + if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), &ar)) { + lua_pushnil(L); /* level out of range */ + return 1; + } + } + else if (lua_isfunction(L, arg+1)) { + lua_pushfstring(L, ">%s", options); + options = lua_tostring(L, -1); + lua_pushvalue(L, arg+1); + lua_xmove(L, L1, 1); + } + else + return luaL_argerror(L, arg+1, "function or level expected"); + if (!lua_getinfo(L1, options, &ar)) + return luaL_argerror(L, arg+2, "invalid option"); + lua_createtable(L, 0, 2); + if (strchr(options, 'S')) { + settabss(L, "source", ar.source); + settabss(L, "short_src", ar.short_src); + settabsi(L, "linedefined", ar.linedefined); + settabsi(L, "lastlinedefined", ar.lastlinedefined); + settabss(L, "what", ar.what); + } + if (strchr(options, 'l')) + settabsi(L, "currentline", ar.currentline); + if (strchr(options, 'u')) + settabsi(L, "nups", ar.nups); + if (strchr(options, 'n')) { + settabss(L, "name", ar.name); + settabss(L, "namewhat", ar.namewhat); + } + if (strchr(options, 'L')) + treatstackoption(L, L1, "activelines"); + if (strchr(options, 'f')) + treatstackoption(L, L1, "func"); + return 1; /* return table */ +} + + +static int db_getlocal (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + const char *name; + if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ + return luaL_argerror(L, arg+1, "level out of range"); + name = lua_getlocal(L1, &ar, luaL_checkint(L, arg+2)); + if (name) { + lua_xmove(L1, L, 1); + lua_pushstring(L, name); + lua_pushvalue(L, -2); + return 2; + } + else { + lua_pushnil(L); + return 1; + } +} + + +static int db_setlocal (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ + return luaL_argerror(L, arg+1, "level out of range"); + luaL_checkany(L, arg+3); + lua_settop(L, arg+3); + lua_xmove(L, L1, 1); + lua_pushstring(L, lua_setlocal(L1, &ar, luaL_checkint(L, arg+2))); + return 1; +} + + +static int auxupvalue (lua_State *L, int get) { + const char *name; + int n = luaL_checkint(L, 2); + luaL_checktype(L, 1, LUA_TFUNCTION); + if (lua_iscfunction(L, 1)) return 0; /* cannot touch C upvalues from Lua */ + name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n); + if (name == NULL) return 0; + lua_pushstring(L, name); + lua_insert(L, -(get+1)); + return get + 1; +} + + +static int db_getupvalue (lua_State *L) { + return auxupvalue(L, 1); +} + + +static int db_setupvalue (lua_State *L) { + luaL_checkany(L, 3); + return auxupvalue(L, 0); +} + + + +static const char KEY_HOOK = 'h'; + + +static void hookf (lua_State *L, lua_Debug *ar) { + static const char *const hooknames[] = + {"call", "return", "line", "count", "tail return"}; + lua_pushlightuserdata(L, (void *)&KEY_HOOK); + lua_rawget(L, LUA_REGISTRYINDEX); + lua_pushlightuserdata(L, L); + lua_rawget(L, -2); + if (lua_isfunction(L, -1)) { + lua_pushstring(L, hooknames[(int)ar->event]); + if (ar->currentline >= 0) + lua_pushinteger(L, ar->currentline); + else lua_pushnil(L); + lua_assert(lua_getinfo(L, "lS", ar)); + lua_call(L, 2, 0); + } +} + + +static int makemask (const char *smask, int count) { + int mask = 0; + if (strchr(smask, 'c')) mask |= LUA_MASKCALL; + if (strchr(smask, 'r')) mask |= LUA_MASKRET; + if (strchr(smask, 'l')) mask |= LUA_MASKLINE; + if (count > 0) mask |= LUA_MASKCOUNT; + return mask; +} + + +static char *unmakemask (int mask, char *smask) { + int i = 0; + if (mask & LUA_MASKCALL) smask[i++] = 'c'; + if (mask & LUA_MASKRET) smask[i++] = 'r'; + if (mask & LUA_MASKLINE) smask[i++] = 'l'; + smask[i] = '\0'; + return smask; +} + + +static void gethooktable (lua_State *L) { + lua_pushlightuserdata(L, (void *)&KEY_HOOK); + lua_rawget(L, LUA_REGISTRYINDEX); + if (!lua_istable(L, -1)) { + lua_pop(L, 1); + lua_createtable(L, 0, 1); + lua_pushlightuserdata(L, (void *)&KEY_HOOK); + lua_pushvalue(L, -2); + lua_rawset(L, LUA_REGISTRYINDEX); + } +} + + +static int db_sethook (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + if (lua_isnoneornil(L, arg+1)) { + lua_settop(L, arg+1); + lua_sethook(L1, NULL, 0, 0); /* turn off hooks */ + } + else { + const char *smask = luaL_checkstring(L, arg+2); + int count = luaL_optint(L, arg+3, 0); + luaL_checktype(L, arg+1, LUA_TFUNCTION); + lua_sethook(L1, hookf, makemask(smask, count), count); + } + gethooktable(L1); + lua_pushlightuserdata(L1, L1); + lua_pushvalue(L, arg+1); + lua_xmove(L, L1, 1); + lua_rawset(L1, -3); /* set new hook */ + lua_pop(L1, 1); /* remove hook table */ + return 0; +} + + +static int db_gethook (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + char buff[5]; + int mask = lua_gethookmask(L1); + lua_Hook hook = lua_gethook(L1); + if (hook != NULL && hook != hookf) /* external hook? */ + lua_pushliteral(L, "external hook"); + else { + gethooktable(L1); + lua_pushlightuserdata(L1, L1); + lua_rawget(L1, -2); /* get hook */ + lua_remove(L1, -2); /* remove hook table */ + lua_xmove(L1, L, 1); + } + lua_pushstring(L, unmakemask(mask, buff)); + lua_pushinteger(L, lua_gethookcount(L1)); + return 3; +} + + +static int db_debug (lua_State *L) { + for (;;) { + char buffer[250]; + fputs("lua_debug> ", stderr); + if (fgets(buffer, sizeof(buffer), stdin) == 0 || + strcmp(buffer, "cont\n") == 0) + return 0; + if (luaL_loadbuffer(L, buffer, strlen(buffer), "=(debug command)") || + lua_pcall(L, 0, 0, 0)) { + fputs(lua_tostring(L, -1), stderr); + fputs("\n", stderr); + } + lua_settop(L, 0); /* remove eventual returns */ + } +} + + +#define LEVELS1 12 /* size of the first part of the stack */ +#define LEVELS2 10 /* size of the second part of the stack */ + +static int db_errorfb (lua_State *L) { + int level; + int firstpart = 1; /* still before eventual `...' */ + int arg; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + if (lua_isnumber(L, arg+2)) { + level = (int)lua_tointeger(L, arg+2); + lua_pop(L, 1); + } + else + level = (L == L1) ? 1 : 0; /* level 0 may be this own function */ + if (lua_gettop(L) == arg) + lua_pushliteral(L, ""); + else if (!lua_isstring(L, arg+1)) return 1; /* message is not a string */ + else lua_pushliteral(L, "\n"); + lua_pushliteral(L, "stack traceback:"); + while (lua_getstack(L1, level++, &ar)) { + if (level > LEVELS1 && firstpart) { + /* no more than `LEVELS2' more levels? */ + if (!lua_getstack(L1, level+LEVELS2, &ar)) + level--; /* keep going */ + else { + lua_pushliteral(L, "\n\t..."); /* too many levels */ + while (lua_getstack(L1, level+LEVELS2, &ar)) /* find last levels */ + level++; + } + firstpart = 0; + continue; + } + lua_pushliteral(L, "\n\t"); + lua_getinfo(L1, "Snl", &ar); + lua_pushfstring(L, "%s:", ar.short_src); + if (ar.currentline > 0) + lua_pushfstring(L, "%d:", ar.currentline); + if (*ar.namewhat != '\0') /* is there a name? */ + lua_pushfstring(L, " in function " LUA_QS, ar.name); + else { + if (*ar.what == 'm') /* main? */ + lua_pushfstring(L, " in main chunk"); + else if (*ar.what == 'C' || *ar.what == 't') + lua_pushliteral(L, " ?"); /* C function or tail call */ + else + lua_pushfstring(L, " in function <%s:%d>", + ar.short_src, ar.linedefined); + } + lua_concat(L, lua_gettop(L) - arg); + } + lua_concat(L, lua_gettop(L) - arg); + return 1; +} + + +static const luaL_Reg dblib[] = { + {"debug", db_debug}, + {"getfenv", db_getfenv}, + {"gethook", db_gethook}, + {"getinfo", db_getinfo}, + {"getlocal", db_getlocal}, + {"getregistry", db_getregistry}, + {"getmetatable", db_getmetatable}, + {"getupvalue", db_getupvalue}, + {"setfenv", db_setfenv}, + {"sethook", db_sethook}, + {"setlocal", db_setlocal}, + {"setmetatable", db_setmetatable}, + {"setupvalue", db_setupvalue}, + {"traceback", db_errorfb}, + {NULL, NULL} +}; + + +LUALIB_API int luaopen_debug (lua_State *L) { + luaL_register(L, LUA_DBLIBNAME, dblib); + return 1; +} + diff --git a/lua/src/ldebug.c b/lua/src/ldebug.c new file mode 100644 index 0000000..9c8bdf2 --- /dev/null +++ b/lua/src/ldebug.c @@ -0,0 +1,622 @@ +/* +** $Id: ldebug.c,v 2.29a 2005/12/22 16:19:56 roberto Exp $ +** Debug Interface +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + + +#define ldebug_c +#define LUA_CORE + +#include "lua.h" + +#include "lapi.h" +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lvm.h" + + + +static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name); + + +static int currentpc (lua_State *L, CallInfo *ci) { + if (!isLua(ci)) return -1; /* function is not a Lua function? */ + if (ci == L->ci) + ci->savedpc = L->savedpc; + return pcRel(ci->savedpc, ci_func(ci)->l.p); +} + + +static int currentline (lua_State *L, CallInfo *ci) { + int pc = currentpc(L, ci); + if (pc < 0) + return -1; /* only active lua functions have current-line information */ + else + return getline(ci_func(ci)->l.p, pc); +} + + +/* +** this function can be called asynchronous (e.g. during a signal) +*/ +LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count) { + if (func == NULL || mask == 0) { /* turn off hooks? */ + mask = 0; + func = NULL; + } + L->hook = func; + L->basehookcount = count; + resethookcount(L); + L->hookmask = cast_byte(mask); + return 1; +} + + +LUA_API lua_Hook lua_gethook (lua_State *L) { + return L->hook; +} + + +LUA_API int lua_gethookmask (lua_State *L) { + return L->hookmask; +} + + +LUA_API int lua_gethookcount (lua_State *L) { + return L->basehookcount; +} + + +LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar) { + int status; + CallInfo *ci; + lua_lock(L); + for (ci = L->ci; level > 0 && ci > L->base_ci; ci--) { + level--; + if (f_isLua(ci)) /* Lua function? */ + level -= ci->tailcalls; /* skip lost tail calls */ + } + if (level == 0 && ci > L->base_ci) { /* level found? */ + status = 1; + ar->i_ci = cast_int(ci - L->base_ci); + } + else if (level < 0) { /* level is of a lost tail call? */ + status = 1; + ar->i_ci = 0; + } + else status = 0; /* no such level */ + lua_unlock(L); + return status; +} + + +static Proto *getluaproto (CallInfo *ci) { + return (isLua(ci) ? ci_func(ci)->l.p : NULL); +} + + +static const char *findlocal (lua_State *L, CallInfo *ci, int n) { + const char *name; + Proto *fp = getluaproto(ci); + if (fp && (name = luaF_getlocalname(fp, n, currentpc(L, ci))) != NULL) + return name; /* is a local variable in a Lua function */ + else { + StkId limit = (ci == L->ci) ? L->top : (ci+1)->func; + if (limit - ci->base >= n && n > 0) /* is 'n' inside 'ci' stack? */ + return "(*temporary)"; + else + return NULL; + } +} + + +LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n) { + CallInfo *ci = L->base_ci + ar->i_ci; + const char *name = findlocal(L, ci, n); + lua_lock(L); + if (name) + luaA_pushobject(L, ci->base + (n - 1)); + lua_unlock(L); + return name; +} + + +LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) { + CallInfo *ci = L->base_ci + ar->i_ci; + const char *name = findlocal(L, ci, n); + lua_lock(L); + if (name) + setobjs2s(L, ci->base + (n - 1), L->top - 1); + L->top--; /* pop value */ + lua_unlock(L); + return name; +} + + +static void funcinfo (lua_Debug *ar, Closure *cl) { + if (cl->c.isC) { + ar->source = "=[C]"; + ar->linedefined = -1; + ar->lastlinedefined = -1; + ar->what = "C"; + } + else { + ar->source = getstr(cl->l.p->source); + ar->linedefined = cl->l.p->linedefined; + ar->lastlinedefined = cl->l.p->lastlinedefined; + ar->what = (ar->linedefined == 0) ? "main" : "Lua"; + } + luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); +} + + +static void info_tailcall (lua_Debug *ar) { + ar->name = ar->namewhat = ""; + ar->what = "tail"; + ar->lastlinedefined = ar->linedefined = ar->currentline = -1; + ar->source = "=(tail call)"; + luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); + ar->nups = 0; +} + + +static void collectvalidlines (lua_State *L, Closure *f) { + if (f == NULL || f->c.isC) { + setnilvalue(L->top); + } + else { + Table *t = luaH_new(L, 0, 0); + int *lineinfo = f->l.p->lineinfo; + int i; + for (i=0; il.p->sizelineinfo; i++) + setbvalue(luaH_setnum(L, t, lineinfo[i]), 1); + sethvalue(L, L->top, t); + } + incr_top(L); +} + + +static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, + Closure *f, CallInfo *ci) { + int status = 1; + if (f == NULL) { + info_tailcall(ar); + return status; + } + for (; *what; what++) { + switch (*what) { + case 'S': { + funcinfo(ar, f); + break; + } + case 'l': { + ar->currentline = (ci) ? currentline(L, ci) : -1; + break; + } + case 'u': { + ar->nups = f->c.nupvalues; + break; + } + case 'n': { + ar->namewhat = (ci) ? getfuncname(L, ci, &ar->name) : NULL; + if (ar->namewhat == NULL) { + ar->namewhat = ""; /* not found */ + ar->name = NULL; + } + break; + } + case 'L': + case 'f': /* handled by lua_getinfo */ + break; + default: status = 0; /* invalid option */ + } + } + return status; +} + + +LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) { + int status; + Closure *f = NULL; + CallInfo *ci = NULL; + lua_lock(L); + if (*what == '>') { + StkId func = L->top - 1; + luai_apicheck(L, ttisfunction(func)); + what++; /* skip the '>' */ + f = clvalue(func); + L->top--; /* pop function */ + } + else if (ar->i_ci != 0) { /* no tail call? */ + ci = L->base_ci + ar->i_ci; + lua_assert(ttisfunction(ci->func)); + f = clvalue(ci->func); + } + status = auxgetinfo(L, what, ar, f, ci); + if (strchr(what, 'f')) { + if (f == NULL) setnilvalue(L->top); + else setclvalue(L, L->top, f); + incr_top(L); + } + if (strchr(what, 'L')) + collectvalidlines(L, f); + lua_unlock(L); + return status; +} + + +/* +** {====================================================== +** Symbolic Execution and code checker +** ======================================================= +*/ + +#define check(x) if (!(x)) return 0; + +#define checkjump(pt,pc) check(0 <= pc && pc < pt->sizecode) + +#define checkreg(pt,reg) check((reg) < (pt)->maxstacksize) + + + +static int precheck (const Proto *pt) { + check(pt->maxstacksize <= MAXSTACK); + lua_assert(pt->numparams+(pt->is_vararg & VARARG_HASARG) <= pt->maxstacksize); + lua_assert(!(pt->is_vararg & VARARG_NEEDSARG) || + (pt->is_vararg & VARARG_HASARG)); + check(pt->sizeupvalues <= pt->nups); + check(pt->sizelineinfo == pt->sizecode || pt->sizelineinfo == 0); + check(GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN); + return 1; +} + + +#define checkopenop(pt,pc) luaG_checkopenop((pt)->code[(pc)+1]) + +int luaG_checkopenop (Instruction i) { + switch (GET_OPCODE(i)) { + case OP_CALL: + case OP_TAILCALL: + case OP_RETURN: + case OP_SETLIST: { + check(GETARG_B(i) == 0); + return 1; + } + default: return 0; /* invalid instruction after an open call */ + } +} + + +static int checkArgMode (const Proto *pt, int r, enum OpArgMask mode) { + switch (mode) { + case OpArgN: check(r == 0); break; + case OpArgU: break; + case OpArgR: checkreg(pt, r); break; + case OpArgK: + check(ISK(r) ? INDEXK(r) < pt->sizek : r < pt->maxstacksize); + break; + } + return 1; +} + + +static Instruction symbexec (const Proto *pt, int lastpc, int reg) { + int pc; + int last; /* stores position of last instruction that changed `reg' */ + last = pt->sizecode-1; /* points to final return (a `neutral' instruction) */ + check(precheck(pt)); + for (pc = 0; pc < lastpc; pc++) { + Instruction i = pt->code[pc]; + OpCode op = GET_OPCODE(i); + int a = GETARG_A(i); + int b = 0; + int c = 0; + check(op < NUM_OPCODES); + checkreg(pt, a); + switch (getOpMode(op)) { + case iABC: { + b = GETARG_B(i); + c = GETARG_C(i); + check(checkArgMode(pt, b, getBMode(op))); + check(checkArgMode(pt, c, getCMode(op))); + break; + } + case iABx: { + b = GETARG_Bx(i); + if (getBMode(op) == OpArgK) check(b < pt->sizek); + break; + } + case iAsBx: { + b = GETARG_sBx(i); + if (getBMode(op) == OpArgR) { + int dest = pc+1+b; + check(0 <= dest && dest < pt->sizecode); + if (dest > 0) { + /* cannot jump to a setlist count */ + Instruction d = pt->code[dest-1]; + check(!(GET_OPCODE(d) == OP_SETLIST && GETARG_C(d) == 0)); + } + } + break; + } + } + if (testAMode(op)) { + if (a == reg) last = pc; /* change register `a' */ + } + if (testTMode(op)) { + check(pc+2 < pt->sizecode); /* check skip */ + check(GET_OPCODE(pt->code[pc+1]) == OP_JMP); + } + switch (op) { + case OP_LOADBOOL: { + check(c == 0 || pc+2 < pt->sizecode); /* check its jump */ + break; + } + case OP_LOADNIL: { + if (a <= reg && reg <= b) + last = pc; /* set registers from `a' to `b' */ + break; + } + case OP_GETUPVAL: + case OP_SETUPVAL: { + check(b < pt->nups); + break; + } + case OP_GETGLOBAL: + case OP_SETGLOBAL: { + check(ttisstring(&pt->k[b])); + break; + } + case OP_SELF: { + checkreg(pt, a+1); + if (reg == a+1) last = pc; + break; + } + case OP_CONCAT: { + check(b < c); /* at least two operands */ + break; + } + case OP_TFORLOOP: { + check(c >= 1); /* at least one result (control variable) */ + checkreg(pt, a+2+c); /* space for results */ + if (reg >= a+2) last = pc; /* affect all regs above its base */ + break; + } + case OP_FORLOOP: + case OP_FORPREP: + checkreg(pt, a+3); + /* go through */ + case OP_JMP: { + int dest = pc+1+b; + /* not full check and jump is forward and do not skip `lastpc'? */ + if (reg != NO_REG && pc < dest && dest <= lastpc) + pc += b; /* do the jump */ + break; + } + case OP_CALL: + case OP_TAILCALL: { + if (b != 0) { + checkreg(pt, a+b-1); + } + c--; /* c = num. returns */ + if (c == LUA_MULTRET) { + check(checkopenop(pt, pc)); + } + else if (c != 0) + checkreg(pt, a+c-1); + if (reg >= a) last = pc; /* affect all registers above base */ + break; + } + case OP_RETURN: { + b--; /* b = num. returns */ + if (b > 0) checkreg(pt, a+b-1); + break; + } + case OP_SETLIST: { + if (b > 0) checkreg(pt, a + b); + if (c == 0) pc++; + break; + } + case OP_CLOSURE: { + int nup, j; + check(b < pt->sizep); + nup = pt->p[b]->nups; + check(pc + nup < pt->sizecode); + for (j = 1; j <= nup; j++) { + OpCode op1 = GET_OPCODE(pt->code[pc + j]); + check(op1 == OP_GETUPVAL || op1 == OP_MOVE); + } + if (reg != NO_REG) /* tracing? */ + pc += nup; /* do not 'execute' these pseudo-instructions */ + break; + } + case OP_VARARG: { + check((pt->is_vararg & VARARG_ISVARARG) && + !(pt->is_vararg & VARARG_NEEDSARG)); + b--; + if (b == LUA_MULTRET) check(checkopenop(pt, pc)); + checkreg(pt, a+b-1); + break; + } + default: break; + } + } + return pt->code[last]; +} + +#undef check +#undef checkjump +#undef checkreg + +/* }====================================================== */ + + +int luaG_checkcode (const Proto *pt) { + return (symbexec(pt, pt->sizecode, NO_REG) != 0); +} + + +static const char *kname (Proto *p, int c) { + if (ISK(c) && ttisstring(&p->k[INDEXK(c)])) + return svalue(&p->k[INDEXK(c)]); + else + return "?"; +} + + +static const char *getobjname (lua_State *L, CallInfo *ci, int stackpos, + const char **name) { + if (isLua(ci)) { /* a Lua function? */ + Proto *p = ci_func(ci)->l.p; + int pc = currentpc(L, ci); + Instruction i; + *name = luaF_getlocalname(p, stackpos+1, pc); + if (*name) /* is a local? */ + return "local"; + i = symbexec(p, pc, stackpos); /* try symbolic execution */ + lua_assert(pc != -1); + switch (GET_OPCODE(i)) { + case OP_GETGLOBAL: { + int g = GETARG_Bx(i); /* global index */ + lua_assert(ttisstring(&p->k[g])); + *name = svalue(&p->k[g]); + return "global"; + } + case OP_MOVE: { + int a = GETARG_A(i); + int b = GETARG_B(i); /* move from `b' to `a' */ + if (b < a) + return getobjname(L, ci, b, name); /* get name for `b' */ + break; + } + case OP_GETTABLE: { + int k = GETARG_C(i); /* key index */ + *name = kname(p, k); + return "field"; + } + case OP_GETUPVAL: { + int u = GETARG_B(i); /* upvalue index */ + *name = p->upvalues ? getstr(p->upvalues[u]) : "?"; + return "upvalue"; + } + case OP_SELF: { + int k = GETARG_C(i); /* key index */ + *name = kname(p, k); + return "method"; + } + default: break; + } + } + return NULL; /* no useful name found */ +} + + +static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) { + Instruction i; + if ((isLua(ci) && ci->tailcalls > 0) || !isLua(ci - 1)) + return NULL; /* calling function is not Lua (or is unknown) */ + ci--; /* calling function */ + i = ci_func(ci)->l.p->code[currentpc(L, ci)]; + if (GET_OPCODE(i) == OP_CALL || GET_OPCODE(i) == OP_TAILCALL || + GET_OPCODE(i) == OP_TFORLOOP) + return getobjname(L, ci, GETARG_A(i), name); + else + return NULL; /* no useful name can be found */ +} + + +/* only ANSI way to check whether a pointer points to an array */ +static int isinstack (CallInfo *ci, const TValue *o) { + StkId p; + for (p = ci->base; p < ci->top; p++) + if (o == p) return 1; + return 0; +} + + +void luaG_typeerror (lua_State *L, const TValue *o, const char *op) { + const char *name = NULL; + const char *t = luaT_typenames[ttype(o)]; + const char *kind = (isinstack(L->ci, o)) ? + getobjname(L, L->ci, cast_int(o - L->base), &name) : + NULL; + if (kind) + luaG_runerror(L, "attempt to %s %s " LUA_QS " (a %s value)", + op, kind, name, t); + else + luaG_runerror(L, "attempt to %s a %s value", op, t); +} + + +void luaG_concaterror (lua_State *L, StkId p1, StkId p2) { + if (ttisstring(p1)) p1 = p2; + lua_assert(!ttisstring(p1)); + luaG_typeerror(L, p1, "concatenate"); +} + + +void luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p2) { + TValue temp; + if (luaV_tonumber(p1, &temp) == NULL) + p2 = p1; /* first operand is wrong */ + luaG_typeerror(L, p2, "perform arithmetic on"); +} + + +int luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2) { + const char *t1 = luaT_typenames[ttype(p1)]; + const char *t2 = luaT_typenames[ttype(p2)]; + if (t1[2] == t2[2]) + luaG_runerror(L, "attempt to compare two %s values", t1); + else + luaG_runerror(L, "attempt to compare %s with %s", t1, t2); + return 0; +} + + +static void addinfo (lua_State *L, const char *msg) { + CallInfo *ci = L->ci; + if (isLua(ci)) { /* is Lua code? */ + char buff[LUA_IDSIZE]; /* add file:line information */ + int line = currentline(L, ci); + luaO_chunkid(buff, getstr(getluaproto(ci)->source), LUA_IDSIZE); + luaO_pushfstring(L, "%s:%d: %s", buff, line, msg); + } +} + + +void luaG_errormsg (lua_State *L) { + if (L->errfunc != 0) { /* is there an error handling function? */ + StkId errfunc = restorestack(L, L->errfunc); + if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR); + setobjs2s(L, L->top, L->top - 1); /* move argument */ + setobjs2s(L, L->top - 1, errfunc); /* push function */ + incr_top(L); + luaD_call(L, L->top - 2, 1); /* call it */ + } + luaD_throw(L, LUA_ERRRUN); +} + + +void luaG_runerror (lua_State *L, const char *fmt, ...) { + va_list argp; + va_start(argp, fmt); + addinfo(L, luaO_pushvfstring(L, fmt, argp)); + va_end(argp); + luaG_errormsg(L); +} + diff --git a/lua/src/ldebug.h b/lua/src/ldebug.h new file mode 100644 index 0000000..9c76aa1 --- /dev/null +++ b/lua/src/ldebug.h @@ -0,0 +1,33 @@ +/* +** $Id: ldebug.h,v 2.3 2005/04/25 19:24:10 roberto Exp $ +** Auxiliary functions from Debug Interface module +** See Copyright Notice in lua.h +*/ + +#ifndef ldebug_h +#define ldebug_h + + +#include "lstate.h" + + +#define pcRel(pc, p) (cast(int, (pc) - (p)->code) - 1) + +#define getline(f,pc) (((f)->lineinfo) ? (f)->lineinfo[pc] : 0) + +#define resethookcount(L) (L->hookcount = L->basehookcount) + + +LUAI_FUNC void luaG_typeerror (lua_State *L, const TValue *o, + const char *opname); +LUAI_FUNC void luaG_concaterror (lua_State *L, StkId p1, StkId p2); +LUAI_FUNC void luaG_aritherror (lua_State *L, const TValue *p1, + const TValue *p2); +LUAI_FUNC int luaG_ordererror (lua_State *L, const TValue *p1, + const TValue *p2); +LUAI_FUNC void luaG_runerror (lua_State *L, const char *fmt, ...); +LUAI_FUNC void luaG_errormsg (lua_State *L); +LUAI_FUNC int luaG_checkcode (const Proto *pt); +LUAI_FUNC int luaG_checkopenop (Instruction i); + +#endif diff --git a/lua/src/ldo.c b/lua/src/ldo.c new file mode 100644 index 0000000..ab86fb7 --- /dev/null +++ b/lua/src/ldo.c @@ -0,0 +1,516 @@ +/* +** $Id: ldo.c,v 2.38 2006/06/05 19:36:14 roberto Exp $ +** Stack and Call structure of Lua +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define ldo_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lundump.h" +#include "lvm.h" +#include "lzio.h" + + + + +/* +** {====================================================== +** Error-recovery functions +** ======================================================= +*/ + + +/* chain list of long jump buffers */ +struct lua_longjmp { + struct lua_longjmp *previous; + luai_jmpbuf b; + volatile int status; /* error code */ +}; + + +void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop) { + switch (errcode) { + case LUA_ERRMEM: { + setsvalue2s(L, oldtop, luaS_newliteral(L, MEMERRMSG)); + break; + } + case LUA_ERRERR: { + setsvalue2s(L, oldtop, luaS_newliteral(L, "error in error handling")); + break; + } + case LUA_ERRSYNTAX: + case LUA_ERRRUN: { + setobjs2s(L, oldtop, L->top - 1); /* error message on current top */ + break; + } + } + L->top = oldtop + 1; +} + + +static void restore_stack_limit (lua_State *L) { + lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK - 1); + if (L->size_ci > LUAI_MAXCALLS) { /* there was an overflow? */ + int inuse = cast_int(L->ci - L->base_ci); + if (inuse + 1 < LUAI_MAXCALLS) /* can `undo' overflow? */ + luaD_reallocCI(L, LUAI_MAXCALLS); + } +} + + +static void resetstack (lua_State *L, int status) { + L->ci = L->base_ci; + L->base = L->ci->base; + luaF_close(L, L->base); /* close eventual pending closures */ + luaD_seterrorobj(L, status, L->base); + L->nCcalls = 0; + L->allowhook = 1; + restore_stack_limit(L); + L->errfunc = 0; + L->errorJmp = NULL; +} + + +void luaD_throw (lua_State *L, int errcode) { + if (L->errorJmp) { + L->errorJmp->status = errcode; + LUAI_THROW(L, L->errorJmp); + } + else { + L->status = cast_byte(errcode); + if (G(L)->panic) { + resetstack(L, errcode); + lua_unlock(L); + G(L)->panic(L); + } + exit(EXIT_FAILURE); + } +} + + +int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) { + struct lua_longjmp lj; + lj.status = 0; + lj.previous = L->errorJmp; /* chain new error handler */ + L->errorJmp = &lj; + LUAI_TRY(L, &lj, + (*f)(L, ud); + ); + L->errorJmp = lj.previous; /* restore old error handler */ + return lj.status; +} + +/* }====================================================== */ + + +static void correctstack (lua_State *L, TValue *oldstack) { + CallInfo *ci; + GCObject *up; + L->top = (L->top - oldstack) + L->stack; + for (up = L->openupval; up != NULL; up = up->gch.next) + gco2uv(up)->v = (gco2uv(up)->v - oldstack) + L->stack; + for (ci = L->base_ci; ci <= L->ci; ci++) { + ci->top = (ci->top - oldstack) + L->stack; + ci->base = (ci->base - oldstack) + L->stack; + ci->func = (ci->func - oldstack) + L->stack; + } + L->base = (L->base - oldstack) + L->stack; +} + + +void luaD_reallocstack (lua_State *L, int newsize) { + TValue *oldstack = L->stack; + int realsize = newsize + 1 + EXTRA_STACK; + lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK - 1); + luaM_reallocvector(L, L->stack, L->stacksize, realsize, TValue); + L->stacksize = realsize; + L->stack_last = L->stack+newsize; + correctstack(L, oldstack); +} + + +void luaD_reallocCI (lua_State *L, int newsize) { + CallInfo *oldci = L->base_ci; + luaM_reallocvector(L, L->base_ci, L->size_ci, newsize, CallInfo); + L->size_ci = newsize; + L->ci = (L->ci - oldci) + L->base_ci; + L->end_ci = L->base_ci + L->size_ci - 1; +} + + +void luaD_growstack (lua_State *L, int n) { + if (n <= L->stacksize) /* double size is enough? */ + luaD_reallocstack(L, 2*L->stacksize); + else + luaD_reallocstack(L, L->stacksize + n); +} + + +static CallInfo *growCI (lua_State *L) { + if (L->size_ci > LUAI_MAXCALLS) /* overflow while handling overflow? */ + luaD_throw(L, LUA_ERRERR); + else { + luaD_reallocCI(L, 2*L->size_ci); + if (L->size_ci > LUAI_MAXCALLS) + luaG_runerror(L, "stack overflow"); + } + return ++L->ci; +} + + +void luaD_callhook (lua_State *L, int event, int line) { + lua_Hook hook = L->hook; + if (hook && L->allowhook) { + ptrdiff_t top = savestack(L, L->top); + ptrdiff_t ci_top = savestack(L, L->ci->top); + lua_Debug ar; + ar.event = event; + ar.currentline = line; + if (event == LUA_HOOKTAILRET) + ar.i_ci = 0; /* tail call; no debug information about it */ + else + ar.i_ci = cast_int(L->ci - L->base_ci); + luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ + L->ci->top = L->top + LUA_MINSTACK; + lua_assert(L->ci->top <= L->stack_last); + L->allowhook = 0; /* cannot call hooks inside a hook */ + lua_unlock(L); + (*hook)(L, &ar); + lua_lock(L); + lua_assert(!L->allowhook); + L->allowhook = 1; + L->ci->top = restorestack(L, ci_top); + L->top = restorestack(L, top); + } +} + + +static StkId adjust_varargs (lua_State *L, Proto *p, int actual) { + int i; + int nfixargs = p->numparams; + Table *htab = NULL; + StkId base, fixed; + for (; actual < nfixargs; ++actual) + setnilvalue(L->top++); +#if defined(LUA_COMPAT_VARARG) + if (p->is_vararg & VARARG_NEEDSARG) { /* compat. with old-style vararg? */ + int nvar = actual - nfixargs; /* number of extra arguments */ + lua_assert(p->is_vararg & VARARG_HASARG); + luaC_checkGC(L); + htab = luaH_new(L, nvar, 1); /* create `arg' table */ + for (i=0; itop - nvar + i); + /* store counter in field `n' */ + setnvalue(luaH_setstr(L, htab, luaS_newliteral(L, "n")), cast_num(nvar)); + } +#endif + /* move fixed parameters to final position */ + fixed = L->top - actual; /* first fixed argument */ + base = L->top; /* final position of first argument */ + for (i=0; itop++, fixed+i); + setnilvalue(fixed+i); + } + /* add `arg' parameter */ + if (htab) { + sethvalue(L, L->top++, htab); + lua_assert(iswhite(obj2gco(htab))); + } + return base; +} + + +static StkId tryfuncTM (lua_State *L, StkId func) { + const TValue *tm = luaT_gettmbyobj(L, func, TM_CALL); + StkId p; + ptrdiff_t funcr = savestack(L, func); + if (!ttisfunction(tm)) + luaG_typeerror(L, func, "call"); + /* Open a hole inside the stack at `func' */ + for (p = L->top; p > func; p--) setobjs2s(L, p, p-1); + incr_top(L); + func = restorestack(L, funcr); /* previous call may change stack */ + setobj2s(L, func, tm); /* tag method is the new function to be called */ + return func; +} + + + +#define inc_ci(L) \ + ((L->ci == L->end_ci) ? growCI(L) : \ + (condhardstacktests(luaD_reallocCI(L, L->size_ci)), ++L->ci)) + + +int luaD_precall (lua_State *L, StkId func, int nresults) { + LClosure *cl; + ptrdiff_t funcr; + if (!ttisfunction(func)) /* `func' is not a function? */ + func = tryfuncTM(L, func); /* check the `function' tag method */ + funcr = savestack(L, func); + cl = &clvalue(func)->l; + L->ci->savedpc = L->savedpc; + if (!cl->isC) { /* Lua function? prepare its call */ + CallInfo *ci; + StkId st, base; + Proto *p = cl->p; + luaD_checkstack(L, p->maxstacksize); + func = restorestack(L, funcr); + if (!p->is_vararg) { /* no varargs? */ + base = func + 1; + if (L->top > base + p->numparams) + L->top = base + p->numparams; + } + else { /* vararg function */ + int nargs = cast_int(L->top - func) - 1; + base = adjust_varargs(L, p, nargs); + func = restorestack(L, funcr); /* previous call may change the stack */ + } + ci = inc_ci(L); /* now `enter' new function */ + ci->func = func; + L->base = ci->base = base; + ci->top = L->base + p->maxstacksize; + lua_assert(ci->top <= L->stack_last); + L->savedpc = p->code; /* starting point */ + ci->tailcalls = 0; + ci->nresults = nresults; + for (st = L->top; st < ci->top; st++) + setnilvalue(st); + L->top = ci->top; + if (L->hookmask & LUA_MASKCALL) { + L->savedpc++; /* hooks assume 'pc' is already incremented */ + luaD_callhook(L, LUA_HOOKCALL, -1); + L->savedpc--; /* correct 'pc' */ + } + return PCRLUA; + } + else { /* if is a C function, call it */ + CallInfo *ci; + int n; + luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ + ci = inc_ci(L); /* now `enter' new function */ + ci->func = restorestack(L, funcr); + L->base = ci->base = ci->func + 1; + ci->top = L->top + LUA_MINSTACK; + lua_assert(ci->top <= L->stack_last); + ci->nresults = nresults; + if (L->hookmask & LUA_MASKCALL) + luaD_callhook(L, LUA_HOOKCALL, -1); + lua_unlock(L); + n = (*curr_func(L)->c.f)(L); /* do the actual call */ + lua_lock(L); + if (n < 0) /* yielding? */ + return PCRYIELD; + else { + luaD_poscall(L, L->top - n); + return PCRC; + } + } +} + + +static StkId callrethooks (lua_State *L, StkId firstResult) { + ptrdiff_t fr = savestack(L, firstResult); /* next call may change stack */ + luaD_callhook(L, LUA_HOOKRET, -1); + if (f_isLua(L->ci)) { /* Lua function? */ + while (L->ci->tailcalls--) /* call hook for eventual tail calls */ + luaD_callhook(L, LUA_HOOKTAILRET, -1); + } + return restorestack(L, fr); +} + + +int luaD_poscall (lua_State *L, StkId firstResult) { + StkId res; + int wanted, i; + CallInfo *ci; + if (L->hookmask & LUA_MASKRET) + firstResult = callrethooks(L, firstResult); + ci = L->ci--; + res = ci->func; /* res == final position of 1st result */ + wanted = ci->nresults; + L->base = (ci - 1)->base; /* restore base */ + L->savedpc = (ci - 1)->savedpc; /* restore savedpc */ + /* move results to correct place */ + for (i = wanted; i != 0 && firstResult < L->top; i--) + setobjs2s(L, res++, firstResult++); + while (i-- > 0) + setnilvalue(res++); + L->top = res; + return (wanted - LUA_MULTRET); /* 0 iff wanted == LUA_MULTRET */ +} + + +/* +** Call a function (C or Lua). The function to be called is at *func. +** The arguments are on the stack, right after the function. +** When returns, all the results are on the stack, starting at the original +** function position. +*/ +void luaD_call (lua_State *L, StkId func, int nResults) { + if (++L->nCcalls >= LUAI_MAXCCALLS) { + if (L->nCcalls == LUAI_MAXCCALLS) + luaG_runerror(L, "C stack overflow"); + else if (L->nCcalls >= (LUAI_MAXCCALLS + (LUAI_MAXCCALLS>>3))) + luaD_throw(L, LUA_ERRERR); /* error while handing stack error */ + } + if (luaD_precall(L, func, nResults) == PCRLUA) /* is a Lua function? */ + luaV_execute(L, 1); /* call it */ + L->nCcalls--; + luaC_checkGC(L); +} + + +static void resume (lua_State *L, void *ud) { + StkId firstArg = cast(StkId, ud); + CallInfo *ci = L->ci; + if (L->status == 0) { /* start coroutine? */ + lua_assert(ci == L->base_ci && firstArg > L->base); + if (luaD_precall(L, firstArg - 1, LUA_MULTRET) != PCRLUA) + return; + } + else { /* resuming from previous yield */ + lua_assert(L->status == LUA_YIELD); + L->status = 0; + if (!f_isLua(ci)) { /* `common' yield? */ + /* finish interrupted execution of `OP_CALL' */ + lua_assert(GET_OPCODE(*((ci-1)->savedpc - 1)) == OP_CALL || + GET_OPCODE(*((ci-1)->savedpc - 1)) == OP_TAILCALL); + if (luaD_poscall(L, firstArg)) /* complete it... */ + L->top = L->ci->top; /* and correct top if not multiple results */ + } + else /* yielded inside a hook: just continue its execution */ + L->base = L->ci->base; + } + luaV_execute(L, cast_int(L->ci - L->base_ci)); +} + + +static int resume_error (lua_State *L, const char *msg) { + L->top = L->ci->base; + setsvalue2s(L, L->top, luaS_new(L, msg)); + incr_top(L); + lua_unlock(L); + return LUA_ERRRUN; +} + + +LUA_API int lua_resume (lua_State *L, int nargs) { + int status; + lua_lock(L); + if (L->status != LUA_YIELD) { + if (L->status != 0) + return resume_error(L, "cannot resume dead coroutine"); + else if (L->ci != L->base_ci) + return resume_error(L, "cannot resume non-suspended coroutine"); + } + luai_userstateresume(L, nargs); + lua_assert(L->errfunc == 0 && L->nCcalls == 0); + status = luaD_rawrunprotected(L, resume, L->top - nargs); + if (status != 0) { /* error? */ + L->status = cast_byte(status); /* mark thread as `dead' */ + luaD_seterrorobj(L, status, L->top); + L->ci->top = L->top; + } + else + status = L->status; + lua_unlock(L); + return status; +} + + +LUA_API int lua_yield (lua_State *L, int nresults) { + luai_userstateyield(L, nresults); + lua_lock(L); + if (L->nCcalls > 0) + luaG_runerror(L, "attempt to yield across metamethod/C-call boundary"); + L->base = L->top - nresults; /* protect stack slots below */ + L->status = LUA_YIELD; + lua_unlock(L); + return -1; +} + + +int luaD_pcall (lua_State *L, Pfunc func, void *u, + ptrdiff_t old_top, ptrdiff_t ef) { + int status; + unsigned short oldnCcalls = L->nCcalls; + ptrdiff_t old_ci = saveci(L, L->ci); + lu_byte old_allowhooks = L->allowhook; + ptrdiff_t old_errfunc = L->errfunc; + L->errfunc = ef; + status = luaD_rawrunprotected(L, func, u); + if (status != 0) { /* an error occurred? */ + StkId oldtop = restorestack(L, old_top); + luaF_close(L, oldtop); /* close eventual pending closures */ + luaD_seterrorobj(L, status, oldtop); + L->nCcalls = oldnCcalls; + L->ci = restoreci(L, old_ci); + L->base = L->ci->base; + L->savedpc = L->ci->savedpc; + L->allowhook = old_allowhooks; + restore_stack_limit(L); + } + L->errfunc = old_errfunc; + return status; +} + + + +/* +** Execute a protected parser. +*/ +struct SParser { /* data to `f_parser' */ + ZIO *z; + Mbuffer buff; /* buffer to be used by the scanner */ + const char *name; +}; + +static void f_parser (lua_State *L, void *ud) { + int i; + Proto *tf; + Closure *cl; + struct SParser *p = cast(struct SParser *, ud); + int c = luaZ_lookahead(p->z); + luaC_checkGC(L); + tf = ((c == LUA_SIGNATURE[0]) ? luaU_undump : luaY_parser)(L, p->z, + &p->buff, p->name); + cl = luaF_newLclosure(L, tf->nups, hvalue(gt(L))); + cl->l.p = tf; + for (i = 0; i < tf->nups; i++) /* initialize eventual upvalues */ + cl->l.upvals[i] = luaF_newupval(L); + setclvalue(L, L->top, cl); + incr_top(L); +} + + +int luaD_protectedparser (lua_State *L, ZIO *z, const char *name) { + struct SParser p; + int status; + p.z = z; p.name = name; + luaZ_initbuffer(L, &p.buff); + status = luaD_pcall(L, f_parser, &p, savestack(L, L->top), L->errfunc); + luaZ_freebuffer(L, &p.buff); + return status; +} + + diff --git a/lua/src/ldo.h b/lua/src/ldo.h new file mode 100644 index 0000000..b2de92b --- /dev/null +++ b/lua/src/ldo.h @@ -0,0 +1,57 @@ +/* +** $Id: ldo.h,v 2.7 2005/08/24 16:15:49 roberto Exp $ +** Stack and Call structure of Lua +** See Copyright Notice in lua.h +*/ + +#ifndef ldo_h +#define ldo_h + + +#include "lobject.h" +#include "lstate.h" +#include "lzio.h" + + +#define luaD_checkstack(L,n) \ + if ((char *)L->stack_last - (char *)L->top <= (n)*(int)sizeof(TValue)) \ + luaD_growstack(L, n); \ + else condhardstacktests(luaD_reallocstack(L, L->stacksize - EXTRA_STACK - 1)); + + +#define incr_top(L) {luaD_checkstack(L,1); L->top++;} + +#define savestack(L,p) ((char *)(p) - (char *)L->stack) +#define restorestack(L,n) ((TValue *)((char *)L->stack + (n))) + +#define saveci(L,p) ((char *)(p) - (char *)L->base_ci) +#define restoreci(L,n) ((CallInfo *)((char *)L->base_ci + (n))) + + +/* results from luaD_precall */ +#define PCRLUA 0 /* initiated a call to a Lua function */ +#define PCRC 1 /* did a call to a C function */ +#define PCRYIELD 2 /* C funtion yielded */ + + +/* type of protected functions, to be ran by `runprotected' */ +typedef void (*Pfunc) (lua_State *L, void *ud); + +LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name); +LUAI_FUNC void luaD_callhook (lua_State *L, int event, int line); +LUAI_FUNC int luaD_precall (lua_State *L, StkId func, int nresults); +LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults); +LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u, + ptrdiff_t oldtop, ptrdiff_t ef); +LUAI_FUNC int luaD_poscall (lua_State *L, StkId firstResult); +LUAI_FUNC void luaD_reallocCI (lua_State *L, int newsize); +LUAI_FUNC void luaD_reallocstack (lua_State *L, int newsize); +LUAI_FUNC void luaD_growstack (lua_State *L, int n); + +LUAI_FUNC void luaD_throw (lua_State *L, int errcode); +LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud); + +LUAI_FUNC void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop); + +#endif + diff --git a/lua/src/ldump.c b/lua/src/ldump.c new file mode 100644 index 0000000..f08277d --- /dev/null +++ b/lua/src/ldump.c @@ -0,0 +1,164 @@ +/* +** $Id: ldump.c,v 1.15 2006/02/16 15:53:49 lhf Exp $ +** save precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#include + +#define ldump_c +#define LUA_CORE + +#include "lua.h" + +#include "lobject.h" +#include "lstate.h" +#include "lundump.h" + +typedef struct { + lua_State* L; + lua_Writer writer; + void* data; + int strip; + int status; +} DumpState; + +#define DumpMem(b,n,size,D) DumpBlock(b,(n)*(size),D) +#define DumpVar(x,D) DumpMem(&x,1,sizeof(x),D) + +static void DumpBlock(const void* b, size_t size, DumpState* D) +{ + if (D->status==0) + { + lua_unlock(D->L); + D->status=(*D->writer)(D->L,b,size,D->data); + lua_lock(D->L); + } +} + +static void DumpChar(int y, DumpState* D) +{ + char x=(char)y; + DumpVar(x,D); +} + +static void DumpInt(int x, DumpState* D) +{ + DumpVar(x,D); +} + +static void DumpNumber(lua_Number x, DumpState* D) +{ + DumpVar(x,D); +} + +static void DumpVector(const void* b, int n, size_t size, DumpState* D) +{ + DumpInt(n,D); + DumpMem(b,n,size,D); +} + +static void DumpString(const TString* s, DumpState* D) +{ + if (s==NULL || getstr(s)==NULL) + { + size_t size=0; + DumpVar(size,D); + } + else + { + size_t size=s->tsv.len+1; /* include trailing '\0' */ + DumpVar(size,D); + DumpBlock(getstr(s),size,D); + } +} + +#define DumpCode(f,D) DumpVector(f->code,f->sizecode,sizeof(Instruction),D) + +static void DumpFunction(const Proto* f, const TString* p, DumpState* D); + +static void DumpConstants(const Proto* f, DumpState* D) +{ + int i,n=f->sizek; + DumpInt(n,D); + for (i=0; ik[i]; + DumpChar(ttype(o),D); + switch (ttype(o)) + { + case LUA_TNIL: + break; + case LUA_TBOOLEAN: + DumpChar(bvalue(o),D); + break; + case LUA_TNUMBER: + DumpNumber(nvalue(o),D); + break; + case LUA_TSTRING: + DumpString(rawtsvalue(o),D); + break; + default: + lua_assert(0); /* cannot happen */ + break; + } + } + n=f->sizep; + DumpInt(n,D); + for (i=0; ip[i],f->source,D); +} + +static void DumpDebug(const Proto* f, DumpState* D) +{ + int i,n; + n= (D->strip) ? 0 : f->sizelineinfo; + DumpVector(f->lineinfo,n,sizeof(int),D); + n= (D->strip) ? 0 : f->sizelocvars; + DumpInt(n,D); + for (i=0; ilocvars[i].varname,D); + DumpInt(f->locvars[i].startpc,D); + DumpInt(f->locvars[i].endpc,D); + } + n= (D->strip) ? 0 : f->sizeupvalues; + DumpInt(n,D); + for (i=0; iupvalues[i],D); +} + +static void DumpFunction(const Proto* f, const TString* p, DumpState* D) +{ + DumpString((f->source==p || D->strip) ? NULL : f->source,D); + DumpInt(f->linedefined,D); + DumpInt(f->lastlinedefined,D); + DumpChar(f->nups,D); + DumpChar(f->numparams,D); + DumpChar(f->is_vararg,D); + DumpChar(f->maxstacksize,D); + DumpCode(f,D); + DumpConstants(f,D); + DumpDebug(f,D); +} + +static void DumpHeader(DumpState* D) +{ + char h[LUAC_HEADERSIZE]; + luaU_header(h); + DumpBlock(h,LUAC_HEADERSIZE,D); +} + +/* +** dump Lua function as precompiled chunk +*/ +int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) +{ + DumpState D; + D.L=L; + D.writer=w; + D.data=data; + D.strip=strip; + D.status=0; + DumpHeader(&D); + DumpFunction(f,NULL,&D); + return D.status; +} diff --git a/lua/src/lfunc.c b/lua/src/lfunc.c new file mode 100644 index 0000000..05bd5ff --- /dev/null +++ b/lua/src/lfunc.c @@ -0,0 +1,174 @@ +/* +** $Id: lfunc.c,v 2.12a 2005/12/22 16:19:56 roberto Exp $ +** Auxiliary functions to manipulate prototypes and closures +** See Copyright Notice in lua.h +*/ + + +#include + +#define lfunc_c +#define LUA_CORE + +#include "lua.h" + +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" + + + +Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e) { + Closure *c = cast(Closure *, luaM_malloc(L, sizeCclosure(nelems))); + luaC_link(L, obj2gco(c), LUA_TFUNCTION); + c->c.isC = 1; + c->c.env = e; + c->c.nupvalues = cast_byte(nelems); + return c; +} + + +Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e) { + Closure *c = cast(Closure *, luaM_malloc(L, sizeLclosure(nelems))); + luaC_link(L, obj2gco(c), LUA_TFUNCTION); + c->l.isC = 0; + c->l.env = e; + c->l.nupvalues = cast_byte(nelems); + while (nelems--) c->l.upvals[nelems] = NULL; + return c; +} + + +UpVal *luaF_newupval (lua_State *L) { + UpVal *uv = luaM_new(L, UpVal); + luaC_link(L, obj2gco(uv), LUA_TUPVAL); + uv->v = &uv->u.value; + setnilvalue(uv->v); + return uv; +} + + +UpVal *luaF_findupval (lua_State *L, StkId level) { + global_State *g = G(L); + GCObject **pp = &L->openupval; + UpVal *p; + UpVal *uv; + while (*pp != NULL && (p = ngcotouv(*pp))->v >= level) { + lua_assert(p->v != &p->u.value); + if (p->v == level) { /* found a corresponding upvalue? */ + if (isdead(g, obj2gco(p))) /* is it dead? */ + changewhite(obj2gco(p)); /* ressurect it */ + return p; + } + pp = &p->next; + } + uv = luaM_new(L, UpVal); /* not found: create a new one */ + uv->tt = LUA_TUPVAL; + uv->marked = luaC_white(g); + uv->v = level; /* current value lives in the stack */ + uv->next = *pp; /* chain it in the proper position */ + *pp = obj2gco(uv); + uv->u.l.prev = &g->uvhead; /* double link it in `uvhead' list */ + uv->u.l.next = g->uvhead.u.l.next; + uv->u.l.next->u.l.prev = uv; + g->uvhead.u.l.next = uv; + lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); + return uv; +} + + +static void unlinkupval (UpVal *uv) { + lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); + uv->u.l.next->u.l.prev = uv->u.l.prev; /* remove from `uvhead' list */ + uv->u.l.prev->u.l.next = uv->u.l.next; +} + + +void luaF_freeupval (lua_State *L, UpVal *uv) { + if (uv->v != &uv->u.value) /* is it open? */ + unlinkupval(uv); /* remove from open list */ + luaM_free(L, uv); /* free upvalue */ +} + + +void luaF_close (lua_State *L, StkId level) { + UpVal *uv; + global_State *g = G(L); + while (L->openupval != NULL && (uv = ngcotouv(L->openupval))->v >= level) { + GCObject *o = obj2gco(uv); + lua_assert(!isblack(o) && uv->v != &uv->u.value); + L->openupval = uv->next; /* remove from `open' list */ + if (isdead(g, o)) + luaF_freeupval(L, uv); /* free upvalue */ + else { + unlinkupval(uv); + setobj(L, &uv->u.value, uv->v); + uv->v = &uv->u.value; /* now current value lives here */ + luaC_linkupval(L, uv); /* link upvalue into `gcroot' list */ + } + } +} + + +Proto *luaF_newproto (lua_State *L) { + Proto *f = luaM_new(L, Proto); + luaC_link(L, obj2gco(f), LUA_TPROTO); + f->k = NULL; + f->sizek = 0; + f->p = NULL; + f->sizep = 0; + f->code = NULL; + f->sizecode = 0; + f->sizelineinfo = 0; + f->sizeupvalues = 0; + f->nups = 0; + f->upvalues = NULL; + f->numparams = 0; + f->is_vararg = 0; + f->maxstacksize = 0; + f->lineinfo = NULL; + f->sizelocvars = 0; + f->locvars = NULL; + f->linedefined = 0; + f->lastlinedefined = 0; + f->source = NULL; + return f; +} + + +void luaF_freeproto (lua_State *L, Proto *f) { + luaM_freearray(L, f->code, f->sizecode, Instruction); + luaM_freearray(L, f->p, f->sizep, Proto *); + luaM_freearray(L, f->k, f->sizek, TValue); + luaM_freearray(L, f->lineinfo, f->sizelineinfo, int); + luaM_freearray(L, f->locvars, f->sizelocvars, struct LocVar); + luaM_freearray(L, f->upvalues, f->sizeupvalues, TString *); + luaM_free(L, f); +} + + +void luaF_freeclosure (lua_State *L, Closure *c) { + int size = (c->c.isC) ? sizeCclosure(c->c.nupvalues) : + sizeLclosure(c->l.nupvalues); + luaM_freemem(L, c, size); +} + + +/* +** Look for n-th local variable at line `line' in function `func'. +** Returns NULL if not found. +*/ +const char *luaF_getlocalname (const Proto *f, int local_number, int pc) { + int i; + for (i = 0; isizelocvars && f->locvars[i].startpc <= pc; i++) { + if (pc < f->locvars[i].endpc) { /* is variable active? */ + local_number--; + if (local_number == 0) + return getstr(f->locvars[i].varname); + } + } + return NULL; /* not found */ +} + diff --git a/lua/src/lfunc.h b/lua/src/lfunc.h new file mode 100644 index 0000000..2e02419 --- /dev/null +++ b/lua/src/lfunc.h @@ -0,0 +1,34 @@ +/* +** $Id: lfunc.h,v 2.4 2005/04/25 19:24:10 roberto Exp $ +** Auxiliary functions to manipulate prototypes and closures +** See Copyright Notice in lua.h +*/ + +#ifndef lfunc_h +#define lfunc_h + + +#include "lobject.h" + + +#define sizeCclosure(n) (cast(int, sizeof(CClosure)) + \ + cast(int, sizeof(TValue)*((n)-1))) + +#define sizeLclosure(n) (cast(int, sizeof(LClosure)) + \ + cast(int, sizeof(TValue *)*((n)-1))) + + +LUAI_FUNC Proto *luaF_newproto (lua_State *L); +LUAI_FUNC Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e); +LUAI_FUNC Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e); +LUAI_FUNC UpVal *luaF_newupval (lua_State *L); +LUAI_FUNC UpVal *luaF_findupval (lua_State *L, StkId level); +LUAI_FUNC void luaF_close (lua_State *L, StkId level); +LUAI_FUNC void luaF_freeproto (lua_State *L, Proto *f); +LUAI_FUNC void luaF_freeclosure (lua_State *L, Closure *c); +LUAI_FUNC void luaF_freeupval (lua_State *L, UpVal *uv); +LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number, + int pc); + + +#endif diff --git a/lua/src/lgc.c b/lua/src/lgc.c new file mode 100644 index 0000000..2d24a12 --- /dev/null +++ b/lua/src/lgc.c @@ -0,0 +1,711 @@ +/* +** $Id: lgc.c,v 2.38 2006/05/24 14:34:06 roberto Exp $ +** Garbage Collector +** See Copyright Notice in lua.h +*/ + +#include + +#define lgc_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + +#define GCSTEPSIZE 1024u +#define GCSWEEPMAX 40 +#define GCSWEEPCOST 10 +#define GCFINALIZECOST 100 + + +#define maskmarks cast_byte(~(bitmask(BLACKBIT)|WHITEBITS)) + +#define makewhite(g,x) \ + ((x)->gch.marked = cast_byte(((x)->gch.marked & maskmarks) | luaC_white(g))) + +#define white2gray(x) reset2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT) +#define black2gray(x) resetbit((x)->gch.marked, BLACKBIT) + +#define stringmark(s) reset2bits((s)->tsv.marked, WHITE0BIT, WHITE1BIT) + + +#define isfinalized(u) testbit((u)->marked, FINALIZEDBIT) +#define markfinalized(u) l_setbit((u)->marked, FINALIZEDBIT) + + +#define KEYWEAK bitmask(KEYWEAKBIT) +#define VALUEWEAK bitmask(VALUEWEAKBIT) + + + +#define markvalue(g,o) { checkconsistency(o); \ + if (iscollectable(o) && iswhite(gcvalue(o))) reallymarkobject(g,gcvalue(o)); } + +#define markobject(g,t) { if (iswhite(obj2gco(t))) \ + reallymarkobject(g, obj2gco(t)); } + + +#define setthreshold(g) (g->GCthreshold = (g->estimate/100) * g->gcpause) + + +static void removeentry (Node *n) { + lua_assert(ttisnil(gval(n))); + if (iscollectable(gkey(n))) + setttype(gkey(n), LUA_TDEADKEY); /* dead key; remove it */ +} + + +static void reallymarkobject (global_State *g, GCObject *o) { + lua_assert(iswhite(o) && !isdead(g, o)); + white2gray(o); + switch (o->gch.tt) { + case LUA_TSTRING: { + return; + } + case LUA_TUSERDATA: { + Table *mt = gco2u(o)->metatable; + gray2black(o); /* udata are never gray */ + if (mt) markobject(g, mt); + markobject(g, gco2u(o)->env); + return; + } + case LUA_TUPVAL: { + UpVal *uv = gco2uv(o); + markvalue(g, uv->v); + if (uv->v == &uv->u.value) /* closed? */ + gray2black(o); /* open upvalues are never black */ + return; + } + case LUA_TFUNCTION: { + gco2cl(o)->c.gclist = g->gray; + g->gray = o; + break; + } + case LUA_TTABLE: { + gco2h(o)->gclist = g->gray; + g->gray = o; + break; + } + case LUA_TTHREAD: { + gco2th(o)->gclist = g->gray; + g->gray = o; + break; + } + case LUA_TPROTO: { + gco2p(o)->gclist = g->gray; + g->gray = o; + break; + } + default: lua_assert(0); + } +} + + +static void marktmu (global_State *g) { + GCObject *u = g->tmudata; + if (u) { + do { + u = u->gch.next; + makewhite(g, u); /* may be marked, if left from previous GC */ + reallymarkobject(g, u); + } while (u != g->tmudata); + } +} + + +/* move `dead' udata that need finalization to list `tmudata' */ +size_t luaC_separateudata (lua_State *L, int all) { + global_State *g = G(L); + size_t deadmem = 0; + GCObject **p = &g->mainthread->next; + GCObject *curr; + while ((curr = *p) != NULL) { + if (!(iswhite(curr) || all) || isfinalized(gco2u(curr))) + p = &curr->gch.next; /* don't bother with them */ + else if (fasttm(L, gco2u(curr)->metatable, TM_GC) == NULL) { + markfinalized(gco2u(curr)); /* don't need finalization */ + p = &curr->gch.next; + } + else { /* must call its gc method */ + deadmem += sizeudata(gco2u(curr)); + markfinalized(gco2u(curr)); + *p = curr->gch.next; + /* link `curr' at the end of `tmudata' list */ + if (g->tmudata == NULL) /* list is empty? */ + g->tmudata = curr->gch.next = curr; /* creates a circular list */ + else { + curr->gch.next = g->tmudata->gch.next; + g->tmudata->gch.next = curr; + g->tmudata = curr; + } + } + } + return deadmem; +} + + +static int traversetable (global_State *g, Table *h) { + int i; + int weakkey = 0; + int weakvalue = 0; + const TValue *mode; + if (h->metatable) + markobject(g, h->metatable); + mode = gfasttm(g, h->metatable, TM_MODE); + if (mode && ttisstring(mode)) { /* is there a weak mode? */ + weakkey = (strchr(svalue(mode), 'k') != NULL); + weakvalue = (strchr(svalue(mode), 'v') != NULL); + if (weakkey || weakvalue) { /* is really weak? */ + h->marked &= ~(KEYWEAK | VALUEWEAK); /* clear bits */ + h->marked |= cast_byte((weakkey << KEYWEAKBIT) | + (weakvalue << VALUEWEAKBIT)); + h->gclist = g->weak; /* must be cleared after GC, ... */ + g->weak = obj2gco(h); /* ... so put in the appropriate list */ + } + } + if (weakkey && weakvalue) return 1; + if (!weakvalue) { + i = h->sizearray; + while (i--) + markvalue(g, &h->array[i]); + } + i = sizenode(h); + while (i--) { + Node *n = gnode(h, i); + lua_assert(ttype(gkey(n)) != LUA_TDEADKEY || ttisnil(gval(n))); + if (ttisnil(gval(n))) + removeentry(n); /* remove empty entries */ + else { + lua_assert(!ttisnil(gkey(n))); + if (!weakkey) markvalue(g, gkey(n)); + if (!weakvalue) markvalue(g, gval(n)); + } + } + return weakkey || weakvalue; +} + + +/* +** All marks are conditional because a GC may happen while the +** prototype is still being created +*/ +static void traverseproto (global_State *g, Proto *f) { + int i; + if (f->source) stringmark(f->source); + for (i=0; isizek; i++) /* mark literals */ + markvalue(g, &f->k[i]); + for (i=0; isizeupvalues; i++) { /* mark upvalue names */ + if (f->upvalues[i]) + stringmark(f->upvalues[i]); + } + for (i=0; isizep; i++) { /* mark nested protos */ + if (f->p[i]) + markobject(g, f->p[i]); + } + for (i=0; isizelocvars; i++) { /* mark local-variable names */ + if (f->locvars[i].varname) + stringmark(f->locvars[i].varname); + } +} + + + +static void traverseclosure (global_State *g, Closure *cl) { + markobject(g, cl->c.env); + if (cl->c.isC) { + int i; + for (i=0; ic.nupvalues; i++) /* mark its upvalues */ + markvalue(g, &cl->c.upvalue[i]); + } + else { + int i; + lua_assert(cl->l.nupvalues == cl->l.p->nups); + markobject(g, cl->l.p); + for (i=0; il.nupvalues; i++) /* mark its upvalues */ + markobject(g, cl->l.upvals[i]); + } +} + + +static void checkstacksizes (lua_State *L, StkId max) { + int ci_used = cast_int(L->ci - L->base_ci); /* number of `ci' in use */ + int s_used = cast_int(max - L->stack); /* part of stack in use */ + if (L->size_ci > LUAI_MAXCALLS) /* handling overflow? */ + return; /* do not touch the stacks */ + if (4*ci_used < L->size_ci && 2*BASIC_CI_SIZE < L->size_ci) + luaD_reallocCI(L, L->size_ci/2); /* still big enough... */ + condhardstacktests(luaD_reallocCI(L, ci_used + 1)); + if (4*s_used < L->stacksize && + 2*(BASIC_STACK_SIZE+EXTRA_STACK) < L->stacksize) + luaD_reallocstack(L, L->stacksize/2); /* still big enough... */ + condhardstacktests(luaD_reallocstack(L, s_used)); +} + + +static void traversestack (global_State *g, lua_State *l) { + StkId o, lim; + CallInfo *ci; + markvalue(g, gt(l)); + lim = l->top; + for (ci = l->base_ci; ci <= l->ci; ci++) { + lua_assert(ci->top <= l->stack_last); + if (lim < ci->top) lim = ci->top; + } + for (o = l->stack; o < l->top; o++) + markvalue(g, o); + for (; o <= lim; o++) + setnilvalue(o); + checkstacksizes(l, lim); +} + + +/* +** traverse one gray object, turning it to black. +** Returns `quantity' traversed. +*/ +static l_mem propagatemark (global_State *g) { + GCObject *o = g->gray; + lua_assert(isgray(o)); + gray2black(o); + switch (o->gch.tt) { + case LUA_TTABLE: { + Table *h = gco2h(o); + g->gray = h->gclist; + if (traversetable(g, h)) /* table is weak? */ + black2gray(o); /* keep it gray */ + return sizeof(Table) + sizeof(TValue) * h->sizearray + + sizeof(Node) * sizenode(h); + } + case LUA_TFUNCTION: { + Closure *cl = gco2cl(o); + g->gray = cl->c.gclist; + traverseclosure(g, cl); + return (cl->c.isC) ? sizeCclosure(cl->c.nupvalues) : + sizeLclosure(cl->l.nupvalues); + } + case LUA_TTHREAD: { + lua_State *th = gco2th(o); + g->gray = th->gclist; + th->gclist = g->grayagain; + g->grayagain = o; + black2gray(o); + traversestack(g, th); + return sizeof(lua_State) + sizeof(TValue) * th->stacksize + + sizeof(CallInfo) * th->size_ci; + } + case LUA_TPROTO: { + Proto *p = gco2p(o); + g->gray = p->gclist; + traverseproto(g, p); + return sizeof(Proto) + sizeof(Instruction) * p->sizecode + + sizeof(Proto *) * p->sizep + + sizeof(TValue) * p->sizek + + sizeof(int) * p->sizelineinfo + + sizeof(LocVar) * p->sizelocvars + + sizeof(TString *) * p->sizeupvalues; + } + default: lua_assert(0); return 0; + } +} + + +static size_t propagateall (global_State *g) { + size_t m = 0; + while (g->gray) m += propagatemark(g); + return m; +} + + +/* +** The next function tells whether a key or value can be cleared from +** a weak table. Non-collectable objects are never removed from weak +** tables. Strings behave as `values', so are never removed too. for +** other objects: if really collected, cannot keep them; for userdata +** being finalized, keep them in keys, but not in values +*/ +static int iscleared (const TValue *o, int iskey) { + if (!iscollectable(o)) return 0; + if (ttisstring(o)) { + stringmark(rawtsvalue(o)); /* strings are `values', so are never weak */ + return 0; + } + return iswhite(gcvalue(o)) || + (ttisuserdata(o) && (!iskey && isfinalized(uvalue(o)))); +} + + +/* +** clear collected entries from weaktables +*/ +static void cleartable (GCObject *l) { + while (l) { + Table *h = gco2h(l); + int i = h->sizearray; + lua_assert(testbit(h->marked, VALUEWEAKBIT) || + testbit(h->marked, KEYWEAKBIT)); + if (testbit(h->marked, VALUEWEAKBIT)) { + while (i--) { + TValue *o = &h->array[i]; + if (iscleared(o, 0)) /* value was collected? */ + setnilvalue(o); /* remove value */ + } + } + i = sizenode(h); + while (i--) { + Node *n = gnode(h, i); + if (!ttisnil(gval(n)) && /* non-empty entry? */ + (iscleared(key2tval(n), 1) || iscleared(gval(n), 0))) { + setnilvalue(gval(n)); /* remove value ... */ + removeentry(n); /* remove entry from table */ + } + } + l = h->gclist; + } +} + + +static void freeobj (lua_State *L, GCObject *o) { + switch (o->gch.tt) { + case LUA_TPROTO: luaF_freeproto(L, gco2p(o)); break; + case LUA_TFUNCTION: luaF_freeclosure(L, gco2cl(o)); break; + case LUA_TUPVAL: luaF_freeupval(L, gco2uv(o)); break; + case LUA_TTABLE: luaH_free(L, gco2h(o)); break; + case LUA_TTHREAD: { + lua_assert(gco2th(o) != L && gco2th(o) != G(L)->mainthread); + luaE_freethread(L, gco2th(o)); + break; + } + case LUA_TSTRING: { + G(L)->strt.nuse--; + luaM_freemem(L, o, sizestring(gco2ts(o))); + break; + } + case LUA_TUSERDATA: { + luaM_freemem(L, o, sizeudata(gco2u(o))); + break; + } + default: lua_assert(0); + } +} + + + +#define sweepwholelist(L,p) sweeplist(L,p,MAX_LUMEM) + + +static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) { + GCObject *curr; + global_State *g = G(L); + int deadmask = otherwhite(g); + while ((curr = *p) != NULL && count-- > 0) { + if (curr->gch.tt == LUA_TTHREAD) /* sweep open upvalues of each thread */ + sweepwholelist(L, &gco2th(curr)->openupval); + if ((curr->gch.marked ^ WHITEBITS) & deadmask) { /* not dead? */ + lua_assert(!isdead(g, curr) || testbit(curr->gch.marked, FIXEDBIT)); + makewhite(g, curr); /* make it white (for next cycle) */ + p = &curr->gch.next; + } + else { /* must erase `curr' */ + lua_assert(isdead(g, curr) || deadmask == bitmask(SFIXEDBIT)); + *p = curr->gch.next; + if (curr == g->rootgc) /* is the first element of the list? */ + g->rootgc = curr->gch.next; /* adjust first */ + freeobj(L, curr); + } + } + return p; +} + + +static void checkSizes (lua_State *L) { + global_State *g = G(L); + /* check size of string hash */ + if (g->strt.nuse < cast(lu_int32, g->strt.size/4) && + g->strt.size > MINSTRTABSIZE*2) + luaS_resize(L, g->strt.size/2); /* table is too big */ + /* check size of buffer */ + if (luaZ_sizebuffer(&g->buff) > LUA_MINBUFFER*2) { /* buffer too big? */ + size_t newsize = luaZ_sizebuffer(&g->buff) / 2; + luaZ_resizebuffer(L, &g->buff, newsize); + } +} + + +static void GCTM (lua_State *L) { + global_State *g = G(L); + GCObject *o = g->tmudata->gch.next; /* get first element */ + Udata *udata = rawgco2u(o); + const TValue *tm; + /* remove udata from `tmudata' */ + if (o == g->tmudata) /* last element? */ + g->tmudata = NULL; + else + g->tmudata->gch.next = udata->uv.next; + udata->uv.next = g->mainthread->next; /* return it to `root' list */ + g->mainthread->next = o; + makewhite(g, o); + tm = fasttm(L, udata->uv.metatable, TM_GC); + if (tm != NULL) { + lu_byte oldah = L->allowhook; + lu_mem oldt = g->GCthreshold; + L->allowhook = 0; /* stop debug hooks during GC tag method */ + g->GCthreshold = 2*g->totalbytes; /* avoid GC steps */ + setobj2s(L, L->top, tm); + setuvalue(L, L->top+1, udata); + L->top += 2; + luaD_call(L, L->top - 2, 0); + L->allowhook = oldah; /* restore hooks */ + g->GCthreshold = oldt; /* restore threshold */ + } +} + + +/* +** Call all GC tag methods +*/ +void luaC_callGCTM (lua_State *L) { + while (G(L)->tmudata) + GCTM(L); +} + + +void luaC_freeall (lua_State *L) { + global_State *g = G(L); + int i; + g->currentwhite = WHITEBITS | bitmask(SFIXEDBIT); /* mask to collect all elements */ + sweepwholelist(L, &g->rootgc); + for (i = 0; i < g->strt.size; i++) /* free all string lists */ + sweepwholelist(L, &g->strt.hash[i]); +} + + +static void markmt (global_State *g) { + int i; + for (i=0; imt[i]) markobject(g, g->mt[i]); +} + + +/* mark root set */ +static void markroot (lua_State *L) { + global_State *g = G(L); + g->gray = NULL; + g->grayagain = NULL; + g->weak = NULL; + markobject(g, g->mainthread); + /* make global table be traversed before main stack */ + markvalue(g, gt(g->mainthread)); + markvalue(g, registry(L)); + markmt(g); + g->gcstate = GCSpropagate; +} + + +static void remarkupvals (global_State *g) { + UpVal *uv; + for (uv = g->uvhead.u.l.next; uv != &g->uvhead; uv = uv->u.l.next) { + lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); + if (isgray(obj2gco(uv))) + markvalue(g, uv->v); + } +} + + +static void atomic (lua_State *L) { + global_State *g = G(L); + size_t udsize; /* total size of userdata to be finalized */ + /* remark occasional upvalues of (maybe) dead threads */ + remarkupvals(g); + /* traverse objects cautch by write barrier and by 'remarkupvals' */ + propagateall(g); + /* remark weak tables */ + g->gray = g->weak; + g->weak = NULL; + lua_assert(!iswhite(obj2gco(g->mainthread))); + markobject(g, L); /* mark running thread */ + markmt(g); /* mark basic metatables (again) */ + propagateall(g); + /* remark gray again */ + g->gray = g->grayagain; + g->grayagain = NULL; + propagateall(g); + udsize = luaC_separateudata(L, 0); /* separate userdata to be finalized */ + marktmu(g); /* mark `preserved' userdata */ + udsize += propagateall(g); /* remark, to propagate `preserveness' */ + cleartable(g->weak); /* remove collected objects from weak tables */ + /* flip current white */ + g->currentwhite = cast_byte(otherwhite(g)); + g->sweepstrgc = 0; + g->sweepgc = &g->rootgc; + g->gcstate = GCSsweepstring; + g->estimate = g->totalbytes - udsize; /* first estimate */ +} + + +static l_mem singlestep (lua_State *L) { + global_State *g = G(L); + /*lua_checkmemory(L);*/ + switch (g->gcstate) { + case GCSpause: { + markroot(L); /* start a new collection */ + return 0; + } + case GCSpropagate: { + if (g->gray) + return propagatemark(g); + else { /* no more `gray' objects */ + atomic(L); /* finish mark phase */ + return 0; + } + } + case GCSsweepstring: { + lu_mem old = g->totalbytes; + sweepwholelist(L, &g->strt.hash[g->sweepstrgc++]); + if (g->sweepstrgc >= g->strt.size) /* nothing more to sweep? */ + g->gcstate = GCSsweep; /* end sweep-string phase */ + lua_assert(old >= g->totalbytes); + g->estimate -= old - g->totalbytes; + return GCSWEEPCOST; + } + case GCSsweep: { + lu_mem old = g->totalbytes; + g->sweepgc = sweeplist(L, g->sweepgc, GCSWEEPMAX); + if (*g->sweepgc == NULL) { /* nothing more to sweep? */ + checkSizes(L); + g->gcstate = GCSfinalize; /* end sweep phase */ + } + lua_assert(old >= g->totalbytes); + g->estimate -= old - g->totalbytes; + return GCSWEEPMAX*GCSWEEPCOST; + } + case GCSfinalize: { + if (g->tmudata) { + GCTM(L); + if (g->estimate > GCFINALIZECOST) + g->estimate -= GCFINALIZECOST; + return GCFINALIZECOST; + } + else { + g->gcstate = GCSpause; /* end collection */ + g->gcdept = 0; + return 0; + } + } + default: lua_assert(0); return 0; + } +} + + +void luaC_step (lua_State *L) { + global_State *g = G(L); + l_mem lim = (GCSTEPSIZE/100) * g->gcstepmul; + if (lim == 0) + lim = (MAX_LUMEM-1)/2; /* no limit */ + g->gcdept += g->totalbytes - g->GCthreshold; + do { + lim -= singlestep(L); + if (g->gcstate == GCSpause) + break; + } while (lim > 0); + if (g->gcstate != GCSpause) { + if (g->gcdept < GCSTEPSIZE) + g->GCthreshold = g->totalbytes + GCSTEPSIZE; /* - lim/g->gcstepmul;*/ + else { + g->gcdept -= GCSTEPSIZE; + g->GCthreshold = g->totalbytes; + } + } + else { + lua_assert(g->totalbytes >= g->estimate); + setthreshold(g); + } +} + + +void luaC_fullgc (lua_State *L) { + global_State *g = G(L); + if (g->gcstate <= GCSpropagate) { + /* reset sweep marks to sweep all elements (returning them to white) */ + g->sweepstrgc = 0; + g->sweepgc = &g->rootgc; + /* reset other collector lists */ + g->gray = NULL; + g->grayagain = NULL; + g->weak = NULL; + g->gcstate = GCSsweepstring; + } + lua_assert(g->gcstate != GCSpause && g->gcstate != GCSpropagate); + /* finish any pending sweep phase */ + while (g->gcstate != GCSfinalize) { + lua_assert(g->gcstate == GCSsweepstring || g->gcstate == GCSsweep); + singlestep(L); + } + markroot(L); + while (g->gcstate != GCSpause) { + singlestep(L); + } + setthreshold(g); +} + + +void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v) { + global_State *g = G(L); + lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o)); + lua_assert(g->gcstate != GCSfinalize && g->gcstate != GCSpause); + lua_assert(ttype(&o->gch) != LUA_TTABLE); + /* must keep invariant? */ + if (g->gcstate == GCSpropagate) + reallymarkobject(g, v); /* restore invariant */ + else /* don't mind */ + makewhite(g, o); /* mark as white just to avoid other barriers */ +} + + +void luaC_barrierback (lua_State *L, Table *t) { + global_State *g = G(L); + GCObject *o = obj2gco(t); + lua_assert(isblack(o) && !isdead(g, o)); + lua_assert(g->gcstate != GCSfinalize && g->gcstate != GCSpause); + black2gray(o); /* make table gray (again) */ + t->gclist = g->grayagain; + g->grayagain = o; +} + + +void luaC_link (lua_State *L, GCObject *o, lu_byte tt) { + global_State *g = G(L); + o->gch.next = g->rootgc; + g->rootgc = o; + o->gch.marked = luaC_white(g); + o->gch.tt = tt; +} + + +void luaC_linkupval (lua_State *L, UpVal *uv) { + global_State *g = G(L); + GCObject *o = obj2gco(uv); + o->gch.next = g->rootgc; /* link upvalue into `rootgc' list */ + g->rootgc = o; + if (isgray(o)) { + if (g->gcstate == GCSpropagate) { + gray2black(o); /* closed upvalues need barrier */ + luaC_barrier(L, uv, uv->v); + } + else { /* sweep phase: sweep it (turning it into white) */ + makewhite(g, o); + lua_assert(g->gcstate != GCSfinalize && g->gcstate != GCSpause); + } + } +} + diff --git a/lua/src/lgc.h b/lua/src/lgc.h new file mode 100644 index 0000000..5f69acb --- /dev/null +++ b/lua/src/lgc.h @@ -0,0 +1,110 @@ +/* +** $Id: lgc.h,v 2.15 2005/08/24 16:15:49 roberto Exp $ +** Garbage Collector +** See Copyright Notice in lua.h +*/ + +#ifndef lgc_h +#define lgc_h + + +#include "lobject.h" + + +/* +** Possible states of the Garbage Collector +*/ +#define GCSpause 0 +#define GCSpropagate 1 +#define GCSsweepstring 2 +#define GCSsweep 3 +#define GCSfinalize 4 + + +/* +** some userful bit tricks +*/ +#define resetbits(x,m) ((x) &= cast(lu_byte, ~(m))) +#define setbits(x,m) ((x) |= (m)) +#define testbits(x,m) ((x) & (m)) +#define bitmask(b) (1<<(b)) +#define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2)) +#define l_setbit(x,b) setbits(x, bitmask(b)) +#define resetbit(x,b) resetbits(x, bitmask(b)) +#define testbit(x,b) testbits(x, bitmask(b)) +#define set2bits(x,b1,b2) setbits(x, (bit2mask(b1, b2))) +#define reset2bits(x,b1,b2) resetbits(x, (bit2mask(b1, b2))) +#define test2bits(x,b1,b2) testbits(x, (bit2mask(b1, b2))) + + + +/* +** Layout for bit use in `marked' field: +** bit 0 - object is white (type 0) +** bit 1 - object is white (type 1) +** bit 2 - object is black +** bit 3 - for userdata: has been finalized +** bit 3 - for tables: has weak keys +** bit 4 - for tables: has weak values +** bit 5 - object is fixed (should not be collected) +** bit 6 - object is "super" fixed (only the main thread) +*/ + + +#define WHITE0BIT 0 +#define WHITE1BIT 1 +#define BLACKBIT 2 +#define FINALIZEDBIT 3 +#define KEYWEAKBIT 3 +#define VALUEWEAKBIT 4 +#define FIXEDBIT 5 +#define SFIXEDBIT 6 +#define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT) + + +#define iswhite(x) test2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT) +#define isblack(x) testbit((x)->gch.marked, BLACKBIT) +#define isgray(x) (!isblack(x) && !iswhite(x)) + +#define otherwhite(g) (g->currentwhite ^ WHITEBITS) +#define isdead(g,v) ((v)->gch.marked & otherwhite(g) & WHITEBITS) + +#define changewhite(x) ((x)->gch.marked ^= WHITEBITS) +#define gray2black(x) l_setbit((x)->gch.marked, BLACKBIT) + +#define valiswhite(x) (iscollectable(x) && iswhite(gcvalue(x))) + +#define luaC_white(g) cast(lu_byte, (g)->currentwhite & WHITEBITS) + + +#define luaC_checkGC(L) { \ + condhardstacktests(luaD_reallocstack(L, L->stacksize - EXTRA_STACK - 1)); \ + if (G(L)->totalbytes >= G(L)->GCthreshold) \ + luaC_step(L); } + + +#define luaC_barrier(L,p,v) { if (valiswhite(v) && isblack(obj2gco(p))) \ + luaC_barrierf(L,obj2gco(p),gcvalue(v)); } + +#define luaC_barriert(L,t,v) { if (valiswhite(v) && isblack(obj2gco(t))) \ + luaC_barrierback(L,t); } + +#define luaC_objbarrier(L,p,o) \ + { if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) \ + luaC_barrierf(L,obj2gco(p),obj2gco(o)); } + +#define luaC_objbarriert(L,t,o) \ + { if (iswhite(obj2gco(o)) && isblack(obj2gco(t))) luaC_barrierback(L,t); } + +LUAI_FUNC size_t luaC_separateudata (lua_State *L, int all); +LUAI_FUNC void luaC_callGCTM (lua_State *L); +LUAI_FUNC void luaC_freeall (lua_State *L); +LUAI_FUNC void luaC_step (lua_State *L); +LUAI_FUNC void luaC_fullgc (lua_State *L); +LUAI_FUNC void luaC_link (lua_State *L, GCObject *o, lu_byte tt); +LUAI_FUNC void luaC_linkupval (lua_State *L, UpVal *uv); +LUAI_FUNC void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v); +LUAI_FUNC void luaC_barrierback (lua_State *L, Table *t); + + +#endif diff --git a/lua/src/linit.c b/lua/src/linit.c new file mode 100644 index 0000000..483d9c8 --- /dev/null +++ b/lua/src/linit.c @@ -0,0 +1,38 @@ +/* +** $Id: linit.c,v 1.14 2005/12/29 15:32:11 roberto Exp $ +** Initialization of libraries for lua.c +** See Copyright Notice in lua.h +*/ + + +#define linit_c +#define LUA_LIB + +#include "lua.h" + +#include "lualib.h" +#include "lauxlib.h" + + +static const luaL_Reg lualibs[] = { + {"", luaopen_base}, + {LUA_LOADLIBNAME, luaopen_package}, + {LUA_TABLIBNAME, luaopen_table}, + {LUA_IOLIBNAME, luaopen_io}, + {LUA_OSLIBNAME, luaopen_os}, + {LUA_STRLIBNAME, luaopen_string}, + {LUA_MATHLIBNAME, luaopen_math}, + {LUA_DBLIBNAME, luaopen_debug}, + {NULL, NULL} +}; + + +LUALIB_API void luaL_openlibs (lua_State *L) { + const luaL_Reg *lib = lualibs; + for (; lib->func; lib++) { + lua_pushcfunction(L, lib->func); + lua_pushstring(L, lib->name); + lua_call(L, 1, 0); + } +} + diff --git a/lua/src/liolib.c b/lua/src/liolib.c new file mode 100644 index 0000000..be60972 --- /dev/null +++ b/lua/src/liolib.c @@ -0,0 +1,532 @@ +/* +** $Id: liolib.c,v 2.73 2006/05/08 20:14:16 roberto Exp $ +** Standard I/O (and system) library +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include + +#define liolib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + + +#define IO_INPUT 1 +#define IO_OUTPUT 2 + + +static const char *const fnames[] = {"input", "output"}; + + +static int pushresult (lua_State *L, int i, const char *filename) { + int en = errno; /* calls to Lua API may change this value */ + if (i) { + lua_pushboolean(L, 1); + return 1; + } + else { + lua_pushnil(L); + if (filename) + lua_pushfstring(L, "%s: %s", filename, strerror(en)); + else + lua_pushfstring(L, "%s", strerror(en)); + lua_pushinteger(L, en); + return 3; + } +} + + +static void fileerror (lua_State *L, int arg, const char *filename) { + lua_pushfstring(L, "%s: %s", filename, strerror(errno)); + luaL_argerror(L, arg, lua_tostring(L, -1)); +} + + +#define topfile(L) ((FILE **)luaL_checkudata(L, 1, LUA_FILEHANDLE)) + + +static int io_type (lua_State *L) { + void *ud; + luaL_checkany(L, 1); + ud = lua_touserdata(L, 1); + lua_getfield(L, LUA_REGISTRYINDEX, LUA_FILEHANDLE); + if (ud == NULL || !lua_getmetatable(L, 1) || !lua_rawequal(L, -2, -1)) + lua_pushnil(L); /* not a file */ + else if (*((FILE **)ud) == NULL) + lua_pushliteral(L, "closed file"); + else + lua_pushliteral(L, "file"); + return 1; +} + + +static FILE *tofile (lua_State *L) { + FILE **f = topfile(L); + if (*f == NULL) + luaL_error(L, "attempt to use a closed file"); + return *f; +} + + + +/* +** When creating file handles, always creates a `closed' file handle +** before opening the actual file; so, if there is a memory error, the +** file is not left opened. +*/ +static FILE **newfile (lua_State *L) { + FILE **pf = (FILE **)lua_newuserdata(L, sizeof(FILE *)); + *pf = NULL; /* file handle is currently `closed' */ + luaL_getmetatable(L, LUA_FILEHANDLE); + lua_setmetatable(L, -2); + return pf; +} + + +/* +** this function has a separated environment, which defines the +** correct __close for 'popen' files +*/ +static int io_pclose (lua_State *L) { + FILE **p = topfile(L); + int ok = lua_pclose(L, *p); + *p = NULL; + return pushresult(L, ok, NULL); +} + + +static int io_fclose (lua_State *L) { + FILE **p = topfile(L); + int ok = (fclose(*p) == 0); + *p = NULL; + return pushresult(L, ok, NULL); +} + + +static int aux_close (lua_State *L) { + lua_getfenv(L, 1); + lua_getfield(L, -1, "__close"); + return (lua_tocfunction(L, -1))(L); +} + + +static int io_close (lua_State *L) { + if (lua_isnone(L, 1)) + lua_rawgeti(L, LUA_ENVIRONINDEX, IO_OUTPUT); + tofile(L); /* make sure argument is a file */ + return aux_close(L); +} + + +static int io_gc (lua_State *L) { + FILE *f = *topfile(L); + /* ignore closed files and standard files */ + if (f != NULL && f != stdin && f != stdout && f != stderr) + aux_close(L); + return 0; +} + + +static int io_tostring (lua_State *L) { + FILE *f = *topfile(L); + if (f == NULL) + lua_pushstring(L, "file (closed)"); + else + lua_pushfstring(L, "file (%p)", f); + return 1; +} + + +static int io_open (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + const char *mode = luaL_optstring(L, 2, "r"); + FILE **pf = newfile(L); + *pf = fopen(filename, mode); + return (*pf == NULL) ? pushresult(L, 0, filename) : 1; +} + + +static int io_popen (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + const char *mode = luaL_optstring(L, 2, "r"); + FILE **pf = newfile(L); + *pf = lua_popen(L, filename, mode); + return (*pf == NULL) ? pushresult(L, 0, filename) : 1; +} + + +static int io_tmpfile (lua_State *L) { + FILE **pf = newfile(L); + *pf = tmpfile(); + return (*pf == NULL) ? pushresult(L, 0, NULL) : 1; +} + + +static FILE *getiofile (lua_State *L, int findex) { + FILE *f; + lua_rawgeti(L, LUA_ENVIRONINDEX, findex); + f = *(FILE **)lua_touserdata(L, -1); + if (f == NULL) + luaL_error(L, "standard %s file is closed", fnames[findex - 1]); + return f; +} + + +static int g_iofile (lua_State *L, int f, const char *mode) { + if (!lua_isnoneornil(L, 1)) { + const char *filename = lua_tostring(L, 1); + if (filename) { + FILE **pf = newfile(L); + *pf = fopen(filename, mode); + if (*pf == NULL) + fileerror(L, 1, filename); + } + else { + tofile(L); /* check that it's a valid file handle */ + lua_pushvalue(L, 1); + } + lua_rawseti(L, LUA_ENVIRONINDEX, f); + } + /* return current value */ + lua_rawgeti(L, LUA_ENVIRONINDEX, f); + return 1; +} + + +static int io_input (lua_State *L) { + return g_iofile(L, IO_INPUT, "r"); +} + + +static int io_output (lua_State *L) { + return g_iofile(L, IO_OUTPUT, "w"); +} + + +static int io_readline (lua_State *L); + + +static void aux_lines (lua_State *L, int idx, int toclose) { + lua_pushvalue(L, idx); + lua_pushboolean(L, toclose); /* close/not close file when finished */ + lua_pushcclosure(L, io_readline, 2); +} + + +static int f_lines (lua_State *L) { + tofile(L); /* check that it's a valid file handle */ + aux_lines(L, 1, 0); + return 1; +} + + +static int io_lines (lua_State *L) { + if (lua_isnoneornil(L, 1)) { /* no arguments? */ + /* will iterate over default input */ + lua_rawgeti(L, LUA_ENVIRONINDEX, IO_INPUT); + return f_lines(L); + } + else { + const char *filename = luaL_checkstring(L, 1); + FILE **pf = newfile(L); + *pf = fopen(filename, "r"); + if (*pf == NULL) + fileerror(L, 1, filename); + aux_lines(L, lua_gettop(L), 1); + return 1; + } +} + + +/* +** {====================================================== +** READ +** ======================================================= +*/ + + +static int read_number (lua_State *L, FILE *f) { + lua_Number d; + if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) { + lua_pushnumber(L, d); + return 1; + } + else return 0; /* read fails */ +} + + +static int test_eof (lua_State *L, FILE *f) { + int c = getc(f); + ungetc(c, f); + lua_pushlstring(L, NULL, 0); + return (c != EOF); +} + + +static int read_line (lua_State *L, FILE *f) { + luaL_Buffer b; + luaL_buffinit(L, &b); + for (;;) { + size_t l; + char *p = luaL_prepbuffer(&b); + if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) { /* eof? */ + luaL_pushresult(&b); /* close buffer */ + return (lua_strlen(L, -1) > 0); /* check whether read something */ + } + l = strlen(p); + if (l == 0 || p[l-1] != '\n') + luaL_addsize(&b, l); + else { + luaL_addsize(&b, l - 1); /* do not include `eol' */ + luaL_pushresult(&b); /* close buffer */ + return 1; /* read at least an `eol' */ + } + } +} + + +static int read_chars (lua_State *L, FILE *f, size_t n) { + size_t rlen; /* how much to read */ + size_t nr; /* number of chars actually read */ + luaL_Buffer b; + luaL_buffinit(L, &b); + rlen = LUAL_BUFFERSIZE; /* try to read that much each time */ + do { + char *p = luaL_prepbuffer(&b); + if (rlen > n) rlen = n; /* cannot read more than asked */ + nr = fread(p, sizeof(char), rlen, f); + luaL_addsize(&b, nr); + n -= nr; /* still have to read `n' chars */ + } while (n > 0 && nr == rlen); /* until end of count or eof */ + luaL_pushresult(&b); /* close buffer */ + return (n == 0 || lua_strlen(L, -1) > 0); +} + + +static int g_read (lua_State *L, FILE *f, int first) { + int nargs = lua_gettop(L) - 1; + int success; + int n; + clearerr(f); + if (nargs == 0) { /* no arguments? */ + success = read_line(L, f); + n = first+1; /* to return 1 result */ + } + else { /* ensure stack space for all results and for auxlib's buffer */ + luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments"); + success = 1; + for (n = first; nargs-- && success; n++) { + if (lua_type(L, n) == LUA_TNUMBER) { + size_t l = (size_t)lua_tointeger(L, n); + success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l); + } + else { + const char *p = lua_tostring(L, n); + luaL_argcheck(L, p && p[0] == '*', n, "invalid option"); + switch (p[1]) { + case 'n': /* number */ + success = read_number(L, f); + break; + case 'l': /* line */ + success = read_line(L, f); + break; + case 'a': /* file */ + read_chars(L, f, ~((size_t)0)); /* read MAX_SIZE_T chars */ + success = 1; /* always success */ + break; + default: + return luaL_argerror(L, n, "invalid format"); + } + } + } + } + if (ferror(f)) + return pushresult(L, 0, NULL); + if (!success) { + lua_pop(L, 1); /* remove last result */ + lua_pushnil(L); /* push nil instead */ + } + return n - first; +} + + +static int io_read (lua_State *L) { + return g_read(L, getiofile(L, IO_INPUT), 1); +} + + +static int f_read (lua_State *L) { + return g_read(L, tofile(L), 2); +} + + +static int io_readline (lua_State *L) { + FILE *f = *(FILE **)lua_touserdata(L, lua_upvalueindex(1)); + int sucess; + if (f == NULL) /* file is already closed? */ + luaL_error(L, "file is already closed"); + sucess = read_line(L, f); + if (ferror(f)) + return luaL_error(L, "%s", strerror(errno)); + if (sucess) return 1; + else { /* EOF */ + if (lua_toboolean(L, lua_upvalueindex(2))) { /* generator created file? */ + lua_settop(L, 0); + lua_pushvalue(L, lua_upvalueindex(1)); + aux_close(L); /* close it */ + } + return 0; + } +} + +/* }====================================================== */ + + +static int g_write (lua_State *L, FILE *f, int arg) { + int nargs = lua_gettop(L) - 1; + int status = 1; + for (; nargs--; arg++) { + if (lua_type(L, arg) == LUA_TNUMBER) { + /* optimization: could be done exactly as for strings */ + status = status && + fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0; + } + else { + size_t l; + const char *s = luaL_checklstring(L, arg, &l); + status = status && (fwrite(s, sizeof(char), l, f) == l); + } + } + return pushresult(L, status, NULL); +} + + +static int io_write (lua_State *L) { + return g_write(L, getiofile(L, IO_OUTPUT), 1); +} + + +static int f_write (lua_State *L) { + return g_write(L, tofile(L), 2); +} + + +static int f_seek (lua_State *L) { + static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; + static const char *const modenames[] = {"set", "cur", "end", NULL}; + FILE *f = tofile(L); + int op = luaL_checkoption(L, 2, "cur", modenames); + long offset = luaL_optlong(L, 3, 0); + op = fseek(f, offset, mode[op]); + if (op) + return pushresult(L, 0, NULL); /* error */ + else { + lua_pushinteger(L, ftell(f)); + return 1; + } +} + + +static int f_setvbuf (lua_State *L) { + static const int mode[] = {_IONBF, _IOFBF, _IOLBF}; + static const char *const modenames[] = {"no", "full", "line", NULL}; + FILE *f = tofile(L); + int op = luaL_checkoption(L, 2, NULL, modenames); + lua_Integer sz = luaL_optinteger(L, 3, LUAL_BUFFERSIZE); + int res = setvbuf(f, NULL, mode[op], sz); + return pushresult(L, res == 0, NULL); +} + + + +static int io_flush (lua_State *L) { + return pushresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL); +} + + +static int f_flush (lua_State *L) { + return pushresult(L, fflush(tofile(L)) == 0, NULL); +} + + +static const luaL_Reg iolib[] = { + {"close", io_close}, + {"flush", io_flush}, + {"input", io_input}, + {"lines", io_lines}, + {"open", io_open}, + {"output", io_output}, + {"popen", io_popen}, + {"read", io_read}, + {"tmpfile", io_tmpfile}, + {"type", io_type}, + {"write", io_write}, + {NULL, NULL} +}; + + +static const luaL_Reg flib[] = { + {"close", io_close}, + {"flush", f_flush}, + {"lines", f_lines}, + {"read", f_read}, + {"seek", f_seek}, + {"setvbuf", f_setvbuf}, + {"write", f_write}, + {"__gc", io_gc}, + {"__tostring", io_tostring}, + {NULL, NULL} +}; + + +static void createmeta (lua_State *L) { + luaL_newmetatable(L, LUA_FILEHANDLE); /* create metatable for file handles */ + lua_pushvalue(L, -1); /* push metatable */ + lua_setfield(L, -2, "__index"); /* metatable.__index = metatable */ + luaL_register(L, NULL, flib); /* file methods */ +} + + +static void createstdfile (lua_State *L, FILE *f, int k, const char *fname) { + *newfile(L) = f; + if (k > 0) { + lua_pushvalue(L, -1); + lua_rawseti(L, LUA_ENVIRONINDEX, k); + } + lua_setfield(L, -2, fname); +} + + +LUALIB_API int luaopen_io (lua_State *L) { + createmeta(L); + /* create (private) environment (with fields IO_INPUT, IO_OUTPUT, __close) */ + lua_createtable(L, 2, 1); + lua_replace(L, LUA_ENVIRONINDEX); + /* open library */ + luaL_register(L, LUA_IOLIBNAME, iolib); + /* create (and set) default files */ + createstdfile(L, stdin, IO_INPUT, "stdin"); + createstdfile(L, stdout, IO_OUTPUT, "stdout"); + createstdfile(L, stderr, 0, "stderr"); + /* create environment for 'popen' */ + lua_getfield(L, -1, "popen"); + lua_createtable(L, 0, 1); + lua_pushcfunction(L, io_pclose); + lua_setfield(L, -2, "__close"); + lua_setfenv(L, -2); + lua_pop(L, 1); /* pop 'popen' */ + /* set default close function */ + lua_pushcfunction(L, io_fclose); + lua_setfield(L, LUA_ENVIRONINDEX, "__close"); + return 1; +} + diff --git a/lua/src/llex.c b/lua/src/llex.c new file mode 100644 index 0000000..1c07cad --- /dev/null +++ b/lua/src/llex.c @@ -0,0 +1,461 @@ +/* +** $Id: llex.c,v 2.20 2006/03/09 18:14:31 roberto Exp $ +** Lexical Analyzer +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define llex_c +#define LUA_CORE + +#include "lua.h" + +#include "ldo.h" +#include "llex.h" +#include "lobject.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "lzio.h" + + + +#define next(ls) (ls->current = zgetc(ls->z)) + + + + +#define currIsNewline(ls) (ls->current == '\n' || ls->current == '\r') + + +/* ORDER RESERVED */ +const char *const luaX_tokens [] = { + "and", "break", "do", "else", "elseif", + "end", "false", "for", "function", "if", + "in", "local", "nil", "not", "or", "repeat", + "return", "then", "true", "until", "while", + "..", "...", "==", ">=", "<=", "~=", + "", "", "", "", + NULL +}; + + +#define save_and_next(ls) (save(ls, ls->current), next(ls)) + + +static void save (LexState *ls, int c) { + Mbuffer *b = ls->buff; + if (b->n + 1 > b->buffsize) { + size_t newsize; + if (b->buffsize >= MAX_SIZET/2) + luaX_lexerror(ls, "lexical element too long", 0); + newsize = b->buffsize * 2; + luaZ_resizebuffer(ls->L, b, newsize); + } + b->buffer[b->n++] = cast(char, c); +} + + +void luaX_init (lua_State *L) { + int i; + for (i=0; itsv.reserved = cast_byte(i+1); /* reserved word */ + } +} + + +#define MAXSRC 80 + + +const char *luaX_token2str (LexState *ls, int token) { + if (token < FIRST_RESERVED) { + lua_assert(token == cast(unsigned char, token)); + return (iscntrl(token)) ? luaO_pushfstring(ls->L, "char(%d)", token) : + luaO_pushfstring(ls->L, "%c", token); + } + else + return luaX_tokens[token-FIRST_RESERVED]; +} + + +static const char *txtToken (LexState *ls, int token) { + switch (token) { + case TK_NAME: + case TK_STRING: + case TK_NUMBER: + save(ls, '\0'); + return luaZ_buffer(ls->buff); + default: + return luaX_token2str(ls, token); + } +} + + +void luaX_lexerror (LexState *ls, const char *msg, int token) { + char buff[MAXSRC]; + luaO_chunkid(buff, getstr(ls->source), MAXSRC); + msg = luaO_pushfstring(ls->L, "%s:%d: %s", buff, ls->linenumber, msg); + if (token) + luaO_pushfstring(ls->L, "%s near " LUA_QS, msg, txtToken(ls, token)); + luaD_throw(ls->L, LUA_ERRSYNTAX); +} + + +void luaX_syntaxerror (LexState *ls, const char *msg) { + luaX_lexerror(ls, msg, ls->t.token); +} + + +TString *luaX_newstring (LexState *ls, const char *str, size_t l) { + lua_State *L = ls->L; + TString *ts = luaS_newlstr(L, str, l); + TValue *o = luaH_setstr(L, ls->fs->h, ts); /* entry for `str' */ + if (ttisnil(o)) + setbvalue(o, 1); /* make sure `str' will not be collected */ + return ts; +} + + +static void inclinenumber (LexState *ls) { + int old = ls->current; + lua_assert(currIsNewline(ls)); + next(ls); /* skip `\n' or `\r' */ + if (currIsNewline(ls) && ls->current != old) + next(ls); /* skip `\n\r' or `\r\n' */ + if (++ls->linenumber >= MAX_INT) + luaX_syntaxerror(ls, "chunk has too many lines"); +} + + +void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source) { + ls->decpoint = '.'; + ls->L = L; + ls->lookahead.token = TK_EOS; /* no look-ahead token */ + ls->z = z; + ls->fs = NULL; + ls->linenumber = 1; + ls->lastline = 1; + ls->source = source; + luaZ_resizebuffer(ls->L, ls->buff, LUA_MINBUFFER); /* initialize buffer */ + next(ls); /* read first char */ +} + + + +/* +** ======================================================= +** LEXICAL ANALYZER +** ======================================================= +*/ + + + +static int check_next (LexState *ls, const char *set) { + if (!strchr(set, ls->current)) + return 0; + save_and_next(ls); + return 1; +} + + +static void buffreplace (LexState *ls, char from, char to) { + size_t n = luaZ_bufflen(ls->buff); + char *p = luaZ_buffer(ls->buff); + while (n--) + if (p[n] == from) p[n] = to; +} + + +static void trydecpoint (LexState *ls, SemInfo *seminfo) { + /* format error: try to update decimal point separator */ + struct lconv *cv = localeconv(); + char old = ls->decpoint; + ls->decpoint = (cv ? cv->decimal_point[0] : '.'); + buffreplace(ls, old, ls->decpoint); /* try updated decimal separator */ + if (!luaO_str2d(luaZ_buffer(ls->buff), &seminfo->r)) { + /* format error with correct decimal point: no more options */ + buffreplace(ls, ls->decpoint, '.'); /* undo change (for error message) */ + luaX_lexerror(ls, "malformed number", TK_NUMBER); + } +} + + +/* LUA_NUMBER */ +static void read_numeral (LexState *ls, SemInfo *seminfo) { + lua_assert(isdigit(ls->current)); + do { + save_and_next(ls); + } while (isdigit(ls->current) || ls->current == '.'); + if (check_next(ls, "Ee")) /* `E'? */ + check_next(ls, "+-"); /* optional exponent sign */ + while (isalnum(ls->current) || ls->current == '_') + save_and_next(ls); + save(ls, '\0'); + buffreplace(ls, '.', ls->decpoint); /* follow locale for decimal point */ + if (!luaO_str2d(luaZ_buffer(ls->buff), &seminfo->r)) /* format error? */ + trydecpoint(ls, seminfo); /* try to update decimal point separator */ +} + + +static int skip_sep (LexState *ls) { + int count = 0; + int s = ls->current; + lua_assert(s == '[' || s == ']'); + save_and_next(ls); + while (ls->current == '=') { + save_and_next(ls); + count++; + } + return (ls->current == s) ? count : (-count) - 1; +} + + +static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) { + int cont = 0; + (void)(cont); /* avoid warnings when `cont' is not used */ + save_and_next(ls); /* skip 2nd `[' */ + if (currIsNewline(ls)) /* string starts with a newline? */ + inclinenumber(ls); /* skip it */ + for (;;) { + switch (ls->current) { + case EOZ: + luaX_lexerror(ls, (seminfo) ? "unfinished long string" : + "unfinished long comment", TK_EOS); + break; /* to avoid warnings */ +#if defined(LUA_COMPAT_LSTR) + case '[': { + if (skip_sep(ls) == sep) { + save_and_next(ls); /* skip 2nd `[' */ + cont++; +#if LUA_COMPAT_LSTR == 1 + if (sep == 0) + luaX_lexerror(ls, "nesting of [[...]] is deprecated", '['); +#endif + } + break; + } +#endif + case ']': { + if (skip_sep(ls) == sep) { + save_and_next(ls); /* skip 2nd `]' */ +#if defined(LUA_COMPAT_LSTR) && LUA_COMPAT_LSTR == 2 + cont--; + if (sep == 0 && cont >= 0) break; +#endif + goto endloop; + } + break; + } + case '\n': + case '\r': { + save(ls, '\n'); + inclinenumber(ls); + if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */ + break; + } + default: { + if (seminfo) save_and_next(ls); + else next(ls); + } + } + } endloop: + if (seminfo) + seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep), + luaZ_bufflen(ls->buff) - 2*(2 + sep)); +} + + +static void read_string (LexState *ls, int del, SemInfo *seminfo) { + save_and_next(ls); + while (ls->current != del) { + switch (ls->current) { + case EOZ: + luaX_lexerror(ls, "unfinished string", TK_EOS); + continue; /* to avoid warnings */ + case '\n': + case '\r': + luaX_lexerror(ls, "unfinished string", TK_STRING); + continue; /* to avoid warnings */ + case '\\': { + int c; + next(ls); /* do not save the `\' */ + switch (ls->current) { + case 'a': c = '\a'; break; + case 'b': c = '\b'; break; + case 'f': c = '\f'; break; + case 'n': c = '\n'; break; + case 'r': c = '\r'; break; + case 't': c = '\t'; break; + case 'v': c = '\v'; break; + case '\n': /* go through */ + case '\r': save(ls, '\n'); inclinenumber(ls); continue; + case EOZ: continue; /* will raise an error next loop */ + default: { + if (!isdigit(ls->current)) + save_and_next(ls); /* handles \\, \", \', and \? */ + else { /* \xxx */ + int i = 0; + c = 0; + do { + c = 10*c + (ls->current-'0'); + next(ls); + } while (++i<3 && isdigit(ls->current)); + if (c > UCHAR_MAX) + luaX_lexerror(ls, "escape sequence too large", TK_STRING); + save(ls, c); + } + continue; + } + } + save(ls, c); + next(ls); + continue; + } + default: + save_and_next(ls); + } + } + save_and_next(ls); /* skip delimiter */ + seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + 1, + luaZ_bufflen(ls->buff) - 2); +} + + +static int llex (LexState *ls, SemInfo *seminfo) { + luaZ_resetbuffer(ls->buff); + for (;;) { + switch (ls->current) { + case '\n': + case '\r': { + inclinenumber(ls); + continue; + } + case '-': { + next(ls); + if (ls->current != '-') return '-'; + /* else is a comment */ + next(ls); + if (ls->current == '[') { + int sep = skip_sep(ls); + luaZ_resetbuffer(ls->buff); /* `skip_sep' may dirty the buffer */ + if (sep >= 0) { + read_long_string(ls, NULL, sep); /* long comment */ + luaZ_resetbuffer(ls->buff); + continue; + } + } + /* else short comment */ + while (!currIsNewline(ls) && ls->current != EOZ) + next(ls); + continue; + } + case '[': { + int sep = skip_sep(ls); + if (sep >= 0) { + read_long_string(ls, seminfo, sep); + return TK_STRING; + } + else if (sep == -1) return '['; + else luaX_lexerror(ls, "invalid long string delimiter", TK_STRING); + } + case '=': { + next(ls); + if (ls->current != '=') return '='; + else { next(ls); return TK_EQ; } + } + case '<': { + next(ls); + if (ls->current != '=') return '<'; + else { next(ls); return TK_LE; } + } + case '>': { + next(ls); + if (ls->current != '=') return '>'; + else { next(ls); return TK_GE; } + } + case '~': { + next(ls); + if (ls->current != '=') return '~'; + else { next(ls); return TK_NE; } + } + case '"': + case '\'': { + read_string(ls, ls->current, seminfo); + return TK_STRING; + } + case '.': { + save_and_next(ls); + if (check_next(ls, ".")) { + if (check_next(ls, ".")) + return TK_DOTS; /* ... */ + else return TK_CONCAT; /* .. */ + } + else if (!isdigit(ls->current)) return '.'; + else { + read_numeral(ls, seminfo); + return TK_NUMBER; + } + } + case EOZ: { + return TK_EOS; + } + default: { + if (isspace(ls->current)) { + lua_assert(!currIsNewline(ls)); + next(ls); + continue; + } + else if (isdigit(ls->current)) { + read_numeral(ls, seminfo); + return TK_NUMBER; + } + else if (isalpha(ls->current) || ls->current == '_') { + /* identifier or reserved word */ + TString *ts; + do { + save_and_next(ls); + } while (isalnum(ls->current) || ls->current == '_'); + ts = luaX_newstring(ls, luaZ_buffer(ls->buff), + luaZ_bufflen(ls->buff)); + if (ts->tsv.reserved > 0) /* reserved word? */ + return ts->tsv.reserved - 1 + FIRST_RESERVED; + else { + seminfo->ts = ts; + return TK_NAME; + } + } + else { + int c = ls->current; + next(ls); + return c; /* single-char tokens (+ - / ...) */ + } + } + } + } +} + + +void luaX_next (LexState *ls) { + ls->lastline = ls->linenumber; + if (ls->lookahead.token != TK_EOS) { /* is there a look-ahead token? */ + ls->t = ls->lookahead; /* use this one */ + ls->lookahead.token = TK_EOS; /* and discharge it */ + } + else + ls->t.token = llex(ls, &ls->t.seminfo); /* read next token */ +} + + +void luaX_lookahead (LexState *ls) { + lua_assert(ls->lookahead.token == TK_EOS); + ls->lookahead.token = llex(ls, &ls->lookahead.seminfo); +} + diff --git a/lua/src/llex.h b/lua/src/llex.h new file mode 100644 index 0000000..ff07e83 --- /dev/null +++ b/lua/src/llex.h @@ -0,0 +1,81 @@ +/* +** $Id: llex.h,v 1.58 2006/03/23 18:23:32 roberto Exp $ +** Lexical Analyzer +** See Copyright Notice in lua.h +*/ + +#ifndef llex_h +#define llex_h + +#include "lobject.h" +#include "lzio.h" + + +#define FIRST_RESERVED 257 + +/* maximum length of a reserved word */ +#define TOKEN_LEN (sizeof("function")/sizeof(char)) + + +/* +* WARNING: if you change the order of this enumeration, +* grep "ORDER RESERVED" +*/ +enum RESERVED { + /* terminal symbols denoted by reserved words */ + TK_AND = FIRST_RESERVED, TK_BREAK, + TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION, + TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT, + TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE, + /* other terminal symbols */ + TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_NUMBER, + TK_NAME, TK_STRING, TK_EOS +}; + +/* number of reserved words */ +#define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1)) + + +/* array with token `names' */ +LUAI_DATA const char *const luaX_tokens []; + + +typedef union { + lua_Number r; + TString *ts; +} SemInfo; /* semantics information */ + + +typedef struct Token { + int token; + SemInfo seminfo; +} Token; + + +typedef struct LexState { + int current; /* current character (charint) */ + int linenumber; /* input line counter */ + int lastline; /* line of last token `consumed' */ + Token t; /* current token */ + Token lookahead; /* look ahead token */ + struct FuncState *fs; /* `FuncState' is private to the parser */ + struct lua_State *L; + ZIO *z; /* input stream */ + Mbuffer *buff; /* buffer for tokens */ + TString *source; /* current source name */ + char decpoint; /* locale decimal point */ +} LexState; + + +LUAI_FUNC void luaX_init (lua_State *L); +LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, + TString *source); +LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l); +LUAI_FUNC void luaX_next (LexState *ls); +LUAI_FUNC void luaX_lookahead (LexState *ls); +LUAI_FUNC void luaX_lexerror (LexState *ls, const char *msg, int token); +LUAI_FUNC void luaX_syntaxerror (LexState *ls, const char *s); +LUAI_FUNC const char *luaX_token2str (LexState *ls, int token); + + +#endif diff --git a/lua/src/llimits.h b/lua/src/llimits.h new file mode 100644 index 0000000..b03221a --- /dev/null +++ b/lua/src/llimits.h @@ -0,0 +1,128 @@ +/* +** $Id: llimits.h,v 1.69 2005/12/27 17:12:00 roberto Exp $ +** Limits, basic types, and some other `installation-dependent' definitions +** See Copyright Notice in lua.h +*/ + +#ifndef llimits_h +#define llimits_h + + +#include +#include + + +#include "lua.h" + + +typedef LUAI_UINT32 lu_int32; + +typedef LUAI_UMEM lu_mem; + +typedef LUAI_MEM l_mem; + + + +/* chars used as small naturals (so that `char' is reserved for characters) */ +typedef unsigned char lu_byte; + + +#define MAX_SIZET ((size_t)(~(size_t)0)-2) + +#define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2) + + +#define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */ + +/* +** conversion of pointer to integer +** this is for hashing only; there is no problem if the integer +** cannot hold the whole pointer value +*/ +#define IntPoint(p) ((unsigned int)(lu_mem)(p)) + + + +/* type to ensure maximum alignment */ +typedef LUAI_USER_ALIGNMENT_T L_Umaxalign; + + +/* result of a `usual argument conversion' over lua_Number */ +typedef LUAI_UACNUMBER l_uacNumber; + + +/* internal assertions for in-house debugging */ +#ifdef lua_assert + +#define check_exp(c,e) (lua_assert(c), (e)) +#define api_check(l,e) lua_assert(e) + +#else + +#define lua_assert(c) ((void)0) +#define check_exp(c,e) (e) +#define api_check luai_apicheck + +#endif + + +#ifndef UNUSED +#define UNUSED(x) ((void)(x)) /* to avoid warnings */ +#endif + + +#ifndef cast +#define cast(t, exp) ((t)(exp)) +#endif + +#define cast_byte(i) cast(lu_byte, (i)) +#define cast_num(i) cast(lua_Number, (i)) +#define cast_int(i) cast(int, (i)) + + + +/* +** type for virtual-machine instructions +** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) +*/ +typedef lu_int32 Instruction; + + + +/* maximum stack for a Lua function */ +#define MAXSTACK 250 + + + +/* minimum size for the string table (must be power of 2) */ +#ifndef MINSTRTABSIZE +#define MINSTRTABSIZE 32 +#endif + + +/* minimum size for string buffer */ +#ifndef LUA_MINBUFFER +#define LUA_MINBUFFER 32 +#endif + + +#ifndef lua_lock +#define lua_lock(L) ((void) 0) +#define lua_unlock(L) ((void) 0) +#endif + +#ifndef luai_threadyield +#define luai_threadyield(L) {lua_unlock(L); lua_lock(L);} +#endif + + +/* +** macro to control inclusion of some hard tests on stack reallocation +*/ +#ifndef HARDSTACKTESTS +#define condhardstacktests(x) ((void)0) +#else +#define condhardstacktests(x) x +#endif + +#endif diff --git a/lua/src/lmathlib.c b/lua/src/lmathlib.c new file mode 100644 index 0000000..d181a73 --- /dev/null +++ b/lua/src/lmathlib.c @@ -0,0 +1,263 @@ +/* +** $Id: lmathlib.c,v 1.67 2005/08/26 17:36:32 roberto Exp $ +** Standard mathematical library +** See Copyright Notice in lua.h +*/ + + +#include +#include + +#define lmathlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#undef PI +#define PI (3.14159265358979323846) +#define RADIANS_PER_DEGREE (PI/180.0) + + + +static int math_abs (lua_State *L) { + lua_pushnumber(L, fabs(luaL_checknumber(L, 1))); + return 1; +} + +static int math_sin (lua_State *L) { + lua_pushnumber(L, sin(luaL_checknumber(L, 1))); + return 1; +} + +static int math_sinh (lua_State *L) { + lua_pushnumber(L, sinh(luaL_checknumber(L, 1))); + return 1; +} + +static int math_cos (lua_State *L) { + lua_pushnumber(L, cos(luaL_checknumber(L, 1))); + return 1; +} + +static int math_cosh (lua_State *L) { + lua_pushnumber(L, cosh(luaL_checknumber(L, 1))); + return 1; +} + +static int math_tan (lua_State *L) { + lua_pushnumber(L, tan(luaL_checknumber(L, 1))); + return 1; +} + +static int math_tanh (lua_State *L) { + lua_pushnumber(L, tanh(luaL_checknumber(L, 1))); + return 1; +} + +static int math_asin (lua_State *L) { + lua_pushnumber(L, asin(luaL_checknumber(L, 1))); + return 1; +} + +static int math_acos (lua_State *L) { + lua_pushnumber(L, acos(luaL_checknumber(L, 1))); + return 1; +} + +static int math_atan (lua_State *L) { + lua_pushnumber(L, atan(luaL_checknumber(L, 1))); + return 1; +} + +static int math_atan2 (lua_State *L) { + lua_pushnumber(L, atan2(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); + return 1; +} + +static int math_ceil (lua_State *L) { + lua_pushnumber(L, ceil(luaL_checknumber(L, 1))); + return 1; +} + +static int math_floor (lua_State *L) { + lua_pushnumber(L, floor(luaL_checknumber(L, 1))); + return 1; +} + +static int math_fmod (lua_State *L) { + lua_pushnumber(L, fmod(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); + return 1; +} + +static int math_modf (lua_State *L) { + double ip; + double fp = modf(luaL_checknumber(L, 1), &ip); + lua_pushnumber(L, ip); + lua_pushnumber(L, fp); + return 2; +} + +static int math_sqrt (lua_State *L) { + lua_pushnumber(L, sqrt(luaL_checknumber(L, 1))); + return 1; +} + +static int math_pow (lua_State *L) { + lua_pushnumber(L, pow(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); + return 1; +} + +static int math_log (lua_State *L) { + lua_pushnumber(L, log(luaL_checknumber(L, 1))); + return 1; +} + +static int math_log10 (lua_State *L) { + lua_pushnumber(L, log10(luaL_checknumber(L, 1))); + return 1; +} + +static int math_exp (lua_State *L) { + lua_pushnumber(L, exp(luaL_checknumber(L, 1))); + return 1; +} + +static int math_deg (lua_State *L) { + lua_pushnumber(L, luaL_checknumber(L, 1)/RADIANS_PER_DEGREE); + return 1; +} + +static int math_rad (lua_State *L) { + lua_pushnumber(L, luaL_checknumber(L, 1)*RADIANS_PER_DEGREE); + return 1; +} + +static int math_frexp (lua_State *L) { + int e; + lua_pushnumber(L, frexp(luaL_checknumber(L, 1), &e)); + lua_pushinteger(L, e); + return 2; +} + +static int math_ldexp (lua_State *L) { + lua_pushnumber(L, ldexp(luaL_checknumber(L, 1), luaL_checkint(L, 2))); + return 1; +} + + + +static int math_min (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + lua_Number dmin = luaL_checknumber(L, 1); + int i; + for (i=2; i<=n; i++) { + lua_Number d = luaL_checknumber(L, i); + if (d < dmin) + dmin = d; + } + lua_pushnumber(L, dmin); + return 1; +} + + +static int math_max (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + lua_Number dmax = luaL_checknumber(L, 1); + int i; + for (i=2; i<=n; i++) { + lua_Number d = luaL_checknumber(L, i); + if (d > dmax) + dmax = d; + } + lua_pushnumber(L, dmax); + return 1; +} + + +static int math_random (lua_State *L) { + /* the `%' avoids the (rare) case of r==1, and is needed also because on + some systems (SunOS!) `rand()' may return a value larger than RAND_MAX */ + lua_Number r = (lua_Number)(rand()%RAND_MAX) / (lua_Number)RAND_MAX; + switch (lua_gettop(L)) { /* check number of arguments */ + case 0: { /* no arguments */ + lua_pushnumber(L, r); /* Number between 0 and 1 */ + break; + } + case 1: { /* only upper limit */ + int u = luaL_checkint(L, 1); + luaL_argcheck(L, 1<=u, 1, "interval is empty"); + lua_pushnumber(L, floor(r*u)+1); /* int between 1 and `u' */ + break; + } + case 2: { /* lower and upper limits */ + int l = luaL_checkint(L, 1); + int u = luaL_checkint(L, 2); + luaL_argcheck(L, l<=u, 2, "interval is empty"); + lua_pushnumber(L, floor(r*(u-l+1))+l); /* int between `l' and `u' */ + break; + } + default: return luaL_error(L, "wrong number of arguments"); + } + return 1; +} + + +static int math_randomseed (lua_State *L) { + srand(luaL_checkint(L, 1)); + return 0; +} + + +static const luaL_Reg mathlib[] = { + {"abs", math_abs}, + {"acos", math_acos}, + {"asin", math_asin}, + {"atan2", math_atan2}, + {"atan", math_atan}, + {"ceil", math_ceil}, + {"cosh", math_cosh}, + {"cos", math_cos}, + {"deg", math_deg}, + {"exp", math_exp}, + {"floor", math_floor}, + {"fmod", math_fmod}, + {"frexp", math_frexp}, + {"ldexp", math_ldexp}, + {"log10", math_log10}, + {"log", math_log}, + {"max", math_max}, + {"min", math_min}, + {"modf", math_modf}, + {"pow", math_pow}, + {"rad", math_rad}, + {"random", math_random}, + {"randomseed", math_randomseed}, + {"sinh", math_sinh}, + {"sin", math_sin}, + {"sqrt", math_sqrt}, + {"tanh", math_tanh}, + {"tan", math_tan}, + {NULL, NULL} +}; + + +/* +** Open math library +*/ +LUALIB_API int luaopen_math (lua_State *L) { + luaL_register(L, LUA_MATHLIBNAME, mathlib); + lua_pushnumber(L, PI); + lua_setfield(L, -2, "pi"); + lua_pushnumber(L, HUGE_VAL); + lua_setfield(L, -2, "huge"); +#if defined(LUA_COMPAT_MOD) + lua_getfield(L, -1, "fmod"); + lua_setfield(L, -2, "mod"); +#endif + return 1; +} + diff --git a/lua/src/lmem.c b/lua/src/lmem.c new file mode 100644 index 0000000..cef2bc5 --- /dev/null +++ b/lua/src/lmem.c @@ -0,0 +1,86 @@ +/* +** $Id: lmem.c,v 1.70 2005/12/26 13:35:47 roberto Exp $ +** Interface to Memory Manager +** See Copyright Notice in lua.h +*/ + + +#include + +#define lmem_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" + + + +/* +** About the realloc function: +** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize); +** (`osize' is the old size, `nsize' is the new size) +** +** Lua ensures that (ptr == NULL) iff (osize == 0). +** +** * frealloc(ud, NULL, 0, x) creates a new block of size `x' +** +** * frealloc(ud, p, x, 0) frees the block `p' +** (in this specific case, frealloc must return NULL). +** particularly, frealloc(ud, NULL, 0, 0) does nothing +** (which is equivalent to free(NULL) in ANSI C) +** +** frealloc returns NULL if it cannot create or reallocate the area +** (any reallocation to an equal or smaller size cannot fail!) +*/ + + + +#define MINSIZEARRAY 4 + + +void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems, + int limit, const char *errormsg) { + void *newblock; + int newsize; + if (*size >= limit/2) { /* cannot double it? */ + if (*size >= limit) /* cannot grow even a little? */ + luaG_runerror(L, errormsg); + newsize = limit; /* still have at least one free place */ + } + else { + newsize = (*size)*2; + if (newsize < MINSIZEARRAY) + newsize = MINSIZEARRAY; /* minimum size */ + } + newblock = luaM_reallocv(L, block, *size, newsize, size_elems); + *size = newsize; /* update only when everything else is OK */ + return newblock; +} + + +void *luaM_toobig (lua_State *L) { + luaG_runerror(L, "memory allocation error: block too big"); + return NULL; /* to avoid warnings */ +} + + + +/* +** generic allocation routine. +*/ +void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) { + global_State *g = G(L); + lua_assert((osize == 0) == (block == NULL)); + block = (*g->frealloc)(g->ud, block, osize, nsize); + if (block == NULL && nsize > 0) + luaD_throw(L, LUA_ERRMEM); + lua_assert((nsize == 0) == (block == NULL)); + g->totalbytes = (g->totalbytes - osize) + nsize; + return block; +} + diff --git a/lua/src/lmem.h b/lua/src/lmem.h new file mode 100644 index 0000000..19df1fb --- /dev/null +++ b/lua/src/lmem.h @@ -0,0 +1,49 @@ +/* +** $Id: lmem.h,v 1.31 2005/04/25 19:24:10 roberto Exp $ +** Interface to Memory Manager +** See Copyright Notice in lua.h +*/ + +#ifndef lmem_h +#define lmem_h + + +#include + +#include "llimits.h" +#include "lua.h" + +#define MEMERRMSG "not enough memory" + + +#define luaM_reallocv(L,b,on,n,e) \ + ((cast(size_t, (n)+1) <= MAX_SIZET/(e)) ? /* +1 to avoid warnings */ \ + luaM_realloc_(L, (b), (on)*(e), (n)*(e)) : \ + luaM_toobig(L)) + +#define luaM_freemem(L, b, s) luaM_realloc_(L, (b), (s), 0) +#define luaM_free(L, b) luaM_realloc_(L, (b), sizeof(*(b)), 0) +#define luaM_freearray(L, b, n, t) luaM_reallocv(L, (b), n, 0, sizeof(t)) + +#define luaM_malloc(L,t) luaM_realloc_(L, NULL, 0, (t)) +#define luaM_new(L,t) cast(t *, luaM_malloc(L, sizeof(t))) +#define luaM_newvector(L,n,t) \ + cast(t *, luaM_reallocv(L, NULL, 0, n, sizeof(t))) + +#define luaM_growvector(L,v,nelems,size,t,limit,e) \ + if ((nelems)+1 > (size)) \ + ((v)=cast(t *, luaM_growaux_(L,v,&(size),sizeof(t),limit,e))) + +#define luaM_reallocvector(L, v,oldn,n,t) \ + ((v)=cast(t *, luaM_reallocv(L, v, oldn, n, sizeof(t)))) + + +LUAI_FUNC void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize, + size_t size); +LUAI_FUNC void *luaM_toobig (lua_State *L); +LUAI_FUNC void *luaM_growaux_ (lua_State *L, void *block, int *size, + size_t size_elem, int limit, + const char *errormsg); + +#endif + diff --git a/lua/src/loadlib.c b/lua/src/loadlib.c new file mode 100644 index 0000000..808368b --- /dev/null +++ b/lua/src/loadlib.c @@ -0,0 +1,664 @@ +/* +** $Id: loadlib.c,v 1.54a 2006/07/03 20:16:49 roberto Exp $ +** Dynamic library loader for Lua +** See Copyright Notice in lua.h +** +** This module contains an implementation of loadlib for Unix systems +** that have dlfcn, an implementation for Darwin (Mac OS X), an +** implementation for Windows, and a stub for other systems. +*/ + + +#include +#include + + +#define loadlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* prefix for open functions in C libraries */ +#define LUA_POF "luaopen_" + +/* separator for open functions in C libraries */ +#define LUA_OFSEP "_" + + +#define LIBPREFIX "LOADLIB: " + +#define POF LUA_POF +#define LIB_FAIL "open" + + +/* error codes for ll_loadfunc */ +#define ERRLIB 1 +#define ERRFUNC 2 + +#define setprogdir(L) ((void)0) + + +static void ll_unloadlib (void *lib); +static void *ll_load (lua_State *L, const char *path); +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym); + + + +#if defined(LUA_DL_DLOPEN) +/* +** {======================================================================== +** This is an implementation of loadlib based on the dlfcn interface. +** The dlfcn interface is available in Linux, SunOS, Solaris, IRIX, FreeBSD, +** NetBSD, AIX 4.2, HPUX 11, and probably most other Unix flavors, at least +** as an emulation layer on top of native functions. +** ========================================================================= +*/ + +#include + +static void ll_unloadlib (void *lib) { + dlclose(lib); +} + + +static void *ll_load (lua_State *L, const char *path) { + void *lib = dlopen(path, RTLD_NOW); + if (lib == NULL) lua_pushstring(L, dlerror()); + return lib; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + lua_CFunction f = (lua_CFunction)dlsym(lib, sym); + if (f == NULL) lua_pushstring(L, dlerror()); + return f; +} + +/* }====================================================== */ + + + +#elif defined(LUA_DL_DLL) +/* +** {====================================================================== +** This is an implementation of loadlib for Windows using native functions. +** ======================================================================= +*/ + +#include + + +#undef setprogdir + +static void setprogdir (lua_State *L) { + char buff[MAX_PATH + 1]; + char *lb; + DWORD nsize = sizeof(buff)/sizeof(char); + DWORD n = GetModuleFileNameA(NULL, buff, nsize); + if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL) + luaL_error(L, "unable to get ModuleFileName"); + else { + *lb = '\0'; + luaL_gsub(L, lua_tostring(L, -1), LUA_EXECDIR, buff); + lua_remove(L, -2); /* remove original string */ + } +} + + +static void pusherror (lua_State *L) { + int error = GetLastError(); + char buffer[128]; + if (FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, error, 0, buffer, sizeof(buffer), NULL)) + lua_pushstring(L, buffer); + else + lua_pushfstring(L, "system error %d\n", error); +} + +static void ll_unloadlib (void *lib) { + FreeLibrary((HINSTANCE)lib); +} + + +static void *ll_load (lua_State *L, const char *path) { + HINSTANCE lib = LoadLibraryA(path); + if (lib == NULL) pusherror(L); + return lib; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + lua_CFunction f = (lua_CFunction)GetProcAddress((HINSTANCE)lib, sym); + if (f == NULL) pusherror(L); + return f; +} + +/* }====================================================== */ + + + +#elif defined(LUA_DL_DYLD) +/* +** {====================================================================== +** Native Mac OS X / Darwin Implementation +** ======================================================================= +*/ + +#include + + +/* Mac appends a `_' before C function names */ +#undef POF +#define POF "_" LUA_POF + + +static void pusherror (lua_State *L) { + const char *err_str; + const char *err_file; + NSLinkEditErrors err; + int err_num; + NSLinkEditError(&err, &err_num, &err_file, &err_str); + lua_pushstring(L, err_str); +} + + +static const char *errorfromcode (NSObjectFileImageReturnCode ret) { + switch (ret) { + case NSObjectFileImageInappropriateFile: + return "file is not a bundle"; + case NSObjectFileImageArch: + return "library is for wrong CPU type"; + case NSObjectFileImageFormat: + return "bad format"; + case NSObjectFileImageAccess: + return "cannot access file"; + case NSObjectFileImageFailure: + default: + return "unable to load library"; + } +} + + +static void ll_unloadlib (void *lib) { + NSUnLinkModule((NSModule)lib, NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES); +} + + +static void *ll_load (lua_State *L, const char *path) { + NSObjectFileImage img; + NSObjectFileImageReturnCode ret; + /* this would be a rare case, but prevents crashing if it happens */ + if(!_dyld_present()) { + lua_pushliteral(L, "dyld not present"); + return NULL; + } + ret = NSCreateObjectFileImageFromFile(path, &img); + if (ret == NSObjectFileImageSuccess) { + NSModule mod = NSLinkModule(img, path, NSLINKMODULE_OPTION_PRIVATE | + NSLINKMODULE_OPTION_RETURN_ON_ERROR); + NSDestroyObjectFileImage(img); + if (mod == NULL) pusherror(L); + return mod; + } + lua_pushstring(L, errorfromcode(ret)); + return NULL; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + NSSymbol nss = NSLookupSymbolInModule((NSModule)lib, sym); + if (nss == NULL) { + lua_pushfstring(L, "symbol " LUA_QS " not found", sym); + return NULL; + } + return (lua_CFunction)NSAddressOfSymbol(nss); +} + +/* }====================================================== */ + + + +#else +/* +** {====================================================== +** Fallback for other systems +** ======================================================= +*/ + +#undef LIB_FAIL +#define LIB_FAIL "absent" + + +#define DLMSG "dynamic libraries not enabled; check your Lua installation" + + +static void ll_unloadlib (void *lib) { + (void)lib; /* to avoid warnings */ +} + + +static void *ll_load (lua_State *L, const char *path) { + (void)path; /* to avoid warnings */ + lua_pushliteral(L, DLMSG); + return NULL; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + (void)lib; (void)sym; /* to avoid warnings */ + lua_pushliteral(L, DLMSG); + return NULL; +} + +/* }====================================================== */ +#endif + + + +static void **ll_register (lua_State *L, const char *path) { + void **plib; + lua_pushfstring(L, "%s%s", LIBPREFIX, path); + lua_gettable(L, LUA_REGISTRYINDEX); /* check library in registry? */ + if (!lua_isnil(L, -1)) /* is there an entry? */ + plib = (void **)lua_touserdata(L, -1); + else { /* no entry yet; create one */ + lua_pop(L, 1); + plib = (void **)lua_newuserdata(L, sizeof(const void *)); + *plib = NULL; + luaL_getmetatable(L, "_LOADLIB"); + lua_setmetatable(L, -2); + lua_pushfstring(L, "%s%s", LIBPREFIX, path); + lua_pushvalue(L, -2); + lua_settable(L, LUA_REGISTRYINDEX); + } + return plib; +} + + +/* +** __gc tag method: calls library's `ll_unloadlib' function with the lib +** handle +*/ +static int gctm (lua_State *L) { + void **lib = (void **)luaL_checkudata(L, 1, "_LOADLIB"); + if (*lib) ll_unloadlib(*lib); + *lib = NULL; /* mark library as closed */ + return 0; +} + + +static int ll_loadfunc (lua_State *L, const char *path, const char *sym) { + void **reg = ll_register(L, path); + if (*reg == NULL) *reg = ll_load(L, path); + if (*reg == NULL) + return ERRLIB; /* unable to load library */ + else { + lua_CFunction f = ll_sym(L, *reg, sym); + if (f == NULL) + return ERRFUNC; /* unable to find function */ + lua_pushcfunction(L, f); + return 0; /* return function */ + } +} + + +static int ll_loadlib (lua_State *L) { + const char *path = luaL_checkstring(L, 1); + const char *init = luaL_checkstring(L, 2); + int stat = ll_loadfunc(L, path, init); + if (stat == 0) /* no errors? */ + return 1; /* return the loaded function */ + else { /* error; error message is on stack top */ + lua_pushnil(L); + lua_insert(L, -2); + lua_pushstring(L, (stat == ERRLIB) ? LIB_FAIL : "init"); + return 3; /* return nil, error message, and where */ + } +} + + + +/* +** {====================================================== +** 'require' function +** ======================================================= +*/ + + +static int readable (const char *filename) { + FILE *f = fopen(filename, "r"); /* try to open file */ + if (f == NULL) return 0; /* open failed */ + fclose(f); + return 1; +} + + +static const char *pushnexttemplate (lua_State *L, const char *path) { + const char *l; + while (*path == *LUA_PATHSEP) path++; /* skip separators */ + if (*path == '\0') return NULL; /* no more templates */ + l = strchr(path, *LUA_PATHSEP); /* find next separator */ + if (l == NULL) l = path + strlen(path); + lua_pushlstring(L, path, l - path); /* template */ + return l; +} + + +static const char *findfile (lua_State *L, const char *name, + const char *pname) { + const char *path; + name = luaL_gsub(L, name, ".", LUA_DIRSEP); + lua_getfield(L, LUA_ENVIRONINDEX, pname); + path = lua_tostring(L, -1); + if (path == NULL) + luaL_error(L, LUA_QL("package.%s") " must be a string", pname); + lua_pushliteral(L, ""); /* error accumulator */ + while ((path = pushnexttemplate(L, path)) != NULL) { + const char *filename; + filename = luaL_gsub(L, lua_tostring(L, -1), LUA_PATH_MARK, name); + lua_remove(L, -2); /* remove path template */ + if (readable(filename)) /* does file exist and is readable? */ + return filename; /* return that file name */ + lua_pushfstring(L, "\n\tno file " LUA_QS, filename); + lua_remove(L, -2); /* remove file name */ + lua_concat(L, 2); /* add entry to possible error message */ + } + return NULL; /* not found */ +} + + +static void loaderror (lua_State *L, const char *filename) { + luaL_error(L, "error loading module " LUA_QS " from file " LUA_QS ":\n\t%s", + lua_tostring(L, 1), filename, lua_tostring(L, -1)); +} + + +static int loader_Lua (lua_State *L) { + const char *filename; + const char *name = luaL_checkstring(L, 1); + filename = findfile(L, name, "path"); + if (filename == NULL) return 1; /* library not found in this path */ + if (luaL_loadfile(L, filename) != 0) + loaderror(L, filename); + return 1; /* library loaded successfully */ +} + + +static const char *mkfuncname (lua_State *L, const char *modname) { + const char *funcname; + const char *mark = strchr(modname, *LUA_IGMARK); + if (mark) modname = mark + 1; + funcname = luaL_gsub(L, modname, ".", LUA_OFSEP); + funcname = lua_pushfstring(L, POF"%s", funcname); + lua_remove(L, -2); /* remove 'gsub' result */ + return funcname; +} + + +static int loader_C (lua_State *L) { + const char *funcname; + const char *name = luaL_checkstring(L, 1); + const char *filename = findfile(L, name, "cpath"); + if (filename == NULL) return 1; /* library not found in this path */ + funcname = mkfuncname(L, name); + if (ll_loadfunc(L, filename, funcname) != 0) + loaderror(L, filename); + return 1; /* library loaded successfully */ +} + + +static int loader_Croot (lua_State *L) { + const char *funcname; + const char *filename; + const char *name = luaL_checkstring(L, 1); + const char *p = strchr(name, '.'); + int stat; + if (p == NULL) return 0; /* is root */ + lua_pushlstring(L, name, p - name); + filename = findfile(L, lua_tostring(L, -1), "cpath"); + if (filename == NULL) return 1; /* root not found */ + funcname = mkfuncname(L, name); + if ((stat = ll_loadfunc(L, filename, funcname)) != 0) { + if (stat != ERRFUNC) loaderror(L, filename); /* real error */ + lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, + name, filename); + return 1; /* function not found */ + } + return 1; +} + + +static int loader_preload (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + lua_getfield(L, LUA_ENVIRONINDEX, "preload"); + if (!lua_istable(L, -1)) + luaL_error(L, LUA_QL("package.preload") " must be a table"); + lua_getfield(L, -1, name); + if (lua_isnil(L, -1)) /* not found? */ + lua_pushfstring(L, "\n\tno field package.preload['%s']", name); + return 1; +} + + +static const int sentinel_ = 0; +#define sentinel ((void *)&sentinel_) + + +static int ll_require (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + int i; + lua_settop(L, 1); /* _LOADED table will be at index 2 */ + lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); + lua_getfield(L, 2, name); + if (lua_toboolean(L, -1)) { /* is it there? */ + if (lua_touserdata(L, -1) == sentinel) /* check loops */ + luaL_error(L, "loop or previous error loading module " LUA_QS, name); + return 1; /* package is already loaded */ + } + /* else must load it; iterate over available loaders */ + lua_getfield(L, LUA_ENVIRONINDEX, "loaders"); + if (!lua_istable(L, -1)) + luaL_error(L, LUA_QL("package.loaders") " must be a table"); + lua_pushliteral(L, ""); /* error message accumulator */ + for (i=1; ; i++) { + lua_rawgeti(L, -2, i); /* get a loader */ + if (lua_isnil(L, -1)) + luaL_error(L, "module " LUA_QS " not found:%s", + name, lua_tostring(L, -2)); + lua_pushstring(L, name); + lua_call(L, 1, 1); /* call it */ + if (lua_isfunction(L, -1)) /* did it find module? */ + break; /* module loaded successfully */ + else if (lua_isstring(L, -1)) /* loader returned error message? */ + lua_concat(L, 2); /* accumulate it */ + else + lua_pop(L, 1); + } + lua_pushlightuserdata(L, sentinel); + lua_setfield(L, 2, name); /* _LOADED[name] = sentinel */ + lua_pushstring(L, name); /* pass name as argument to module */ + lua_call(L, 1, 1); /* run loaded module */ + if (!lua_isnil(L, -1)) /* non-nil return? */ + lua_setfield(L, 2, name); /* _LOADED[name] = returned value */ + lua_getfield(L, 2, name); + if (lua_touserdata(L, -1) == sentinel) { /* module did not set a value? */ + lua_pushboolean(L, 1); /* use true as result */ + lua_pushvalue(L, -1); /* extra copy to be returned */ + lua_setfield(L, 2, name); /* _LOADED[name] = true */ + } + return 1; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** 'module' function +** ======================================================= +*/ + + +static void setfenv (lua_State *L) { + lua_Debug ar; + lua_getstack(L, 1, &ar); + lua_getinfo(L, "f", &ar); + lua_pushvalue(L, -2); + lua_setfenv(L, -2); + lua_pop(L, 1); +} + + +static void dooptions (lua_State *L, int n) { + int i; + for (i = 2; i <= n; i++) { + lua_pushvalue(L, i); /* get option (a function) */ + lua_pushvalue(L, -2); /* module */ + lua_call(L, 1, 0); + } +} + + +static void modinit (lua_State *L, const char *modname) { + const char *dot; + lua_pushvalue(L, -1); + lua_setfield(L, -2, "_M"); /* module._M = module */ + lua_pushstring(L, modname); + lua_setfield(L, -2, "_NAME"); + dot = strrchr(modname, '.'); /* look for last dot in module name */ + if (dot == NULL) dot = modname; + else dot++; + /* set _PACKAGE as package name (full module name minus last part) */ + lua_pushlstring(L, modname, dot - modname); + lua_setfield(L, -2, "_PACKAGE"); +} + + +static int ll_module (lua_State *L) { + const char *modname = luaL_checkstring(L, 1); + int loaded = lua_gettop(L) + 1; /* index of _LOADED table */ + lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); + lua_getfield(L, loaded, modname); /* get _LOADED[modname] */ + if (!lua_istable(L, -1)) { /* not found? */ + lua_pop(L, 1); /* remove previous result */ + /* try global variable (and create one if it does not exist) */ + if (luaL_findtable(L, LUA_GLOBALSINDEX, modname, 1) != NULL) + return luaL_error(L, "name conflict for module " LUA_QS, modname); + lua_pushvalue(L, -1); + lua_setfield(L, loaded, modname); /* _LOADED[modname] = new table */ + } + /* check whether table already has a _NAME field */ + lua_getfield(L, -1, "_NAME"); + if (!lua_isnil(L, -1)) /* is table an initialized module? */ + lua_pop(L, 1); + else { /* no; initialize it */ + lua_pop(L, 1); + modinit(L, modname); + } + lua_pushvalue(L, -1); + setfenv(L); + dooptions(L, loaded - 1); + return 0; +} + + +static int ll_seeall (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + if (!lua_getmetatable(L, 1)) { + lua_createtable(L, 0, 1); /* create new metatable */ + lua_pushvalue(L, -1); + lua_setmetatable(L, 1); + } + lua_pushvalue(L, LUA_GLOBALSINDEX); + lua_setfield(L, -2, "__index"); /* mt.__index = _G */ + return 0; +} + + +/* }====================================================== */ + + + +/* auxiliary mark (for internal use) */ +#define AUXMARK "\1" + +static void setpath (lua_State *L, const char *fieldname, const char *envname, + const char *def) { + const char *path = getenv(envname); + if (path == NULL) /* no environment variable? */ + lua_pushstring(L, def); /* use default */ + else { + /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */ + path = luaL_gsub(L, path, LUA_PATHSEP LUA_PATHSEP, + LUA_PATHSEP AUXMARK LUA_PATHSEP); + luaL_gsub(L, path, AUXMARK, def); + lua_remove(L, -2); + } + setprogdir(L); + lua_setfield(L, -2, fieldname); +} + + +static const luaL_Reg pk_funcs[] = { + {"loadlib", ll_loadlib}, + {"seeall", ll_seeall}, + {NULL, NULL} +}; + + +static const luaL_Reg ll_funcs[] = { + {"module", ll_module}, + {"require", ll_require}, + {NULL, NULL} +}; + + +static const lua_CFunction loaders[] = + {loader_preload, loader_Lua, loader_C, loader_Croot, NULL}; + + +LUALIB_API int luaopen_package (lua_State *L) { + int i; + /* create new type _LOADLIB */ + luaL_newmetatable(L, "_LOADLIB"); + lua_pushcfunction(L, gctm); + lua_setfield(L, -2, "__gc"); + /* create `package' table */ + luaL_register(L, LUA_LOADLIBNAME, pk_funcs); +#if defined(LUA_COMPAT_LOADLIB) + lua_getfield(L, -1, "loadlib"); + lua_setfield(L, LUA_GLOBALSINDEX, "loadlib"); +#endif + lua_pushvalue(L, -1); + lua_replace(L, LUA_ENVIRONINDEX); + /* create `loaders' table */ + lua_createtable(L, 0, sizeof(loaders)/sizeof(loaders[0]) - 1); + /* fill it with pre-defined loaders */ + for (i=0; loaders[i] != NULL; i++) { + lua_pushcfunction(L, loaders[i]); + lua_rawseti(L, -2, i+1); + } + lua_setfield(L, -2, "loaders"); /* put it in field `loaders' */ + setpath(L, "path", LUA_PATH, LUA_PATH_DEFAULT); /* set field `path' */ + setpath(L, "cpath", LUA_CPATH, LUA_CPATH_DEFAULT); /* set field `cpath' */ + /* store config information */ + lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n" + LUA_EXECDIR "\n" LUA_IGMARK); + lua_setfield(L, -2, "config"); + /* set field `loaded' */ + luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 2); + lua_setfield(L, -2, "loaded"); + /* set field `preload' */ + lua_newtable(L); + lua_setfield(L, -2, "preload"); + lua_pushvalue(L, LUA_GLOBALSINDEX); + luaL_register(L, NULL, ll_funcs); /* open lib into global table */ + lua_pop(L, 1); + return 1; /* return 'package' table */ +} + diff --git a/lua/src/lobject.c b/lua/src/lobject.c new file mode 100644 index 0000000..acde82c --- /dev/null +++ b/lua/src/lobject.c @@ -0,0 +1,214 @@ +/* +** $Id: lobject.c,v 2.22 2006/02/10 17:43:52 roberto Exp $ +** Some generic functions over Lua objects +** See Copyright Notice in lua.h +*/ + +#include +#include +#include +#include +#include + +#define lobject_c +#define LUA_CORE + +#include "lua.h" + +#include "ldo.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "lvm.h" + + + +const TValue luaO_nilobject_ = {{NULL}, LUA_TNIL}; + + +/* +** converts an integer to a "floating point byte", represented as +** (eeeeexxx), where the real value is (1xxx) * 2^(eeeee - 1) if +** eeeee != 0 and (xxx) otherwise. +*/ +int luaO_int2fb (unsigned int x) { + int e = 0; /* expoent */ + while (x >= 16) { + x = (x+1) >> 1; + e++; + } + if (x < 8) return x; + else return ((e+1) << 3) | (cast_int(x) - 8); +} + + +/* converts back */ +int luaO_fb2int (int x) { + int e = (x >> 3) & 31; + if (e == 0) return x; + else return ((x & 7)+8) << (e - 1); +} + + +int luaO_log2 (unsigned int x) { + static const lu_byte log_2[256] = { + 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 + }; + int l = -1; + while (x >= 256) { l += 8; x >>= 8; } + return l + log_2[x]; + +} + + +int luaO_rawequalObj (const TValue *t1, const TValue *t2) { + if (ttype(t1) != ttype(t2)) return 0; + else switch (ttype(t1)) { + case LUA_TNIL: + return 1; + case LUA_TNUMBER: + return luai_numeq(nvalue(t1), nvalue(t2)); + case LUA_TBOOLEAN: + return bvalue(t1) == bvalue(t2); /* boolean true must be 1 !! */ + case LUA_TLIGHTUSERDATA: + return pvalue(t1) == pvalue(t2); + default: + lua_assert(iscollectable(t1)); + return gcvalue(t1) == gcvalue(t2); + } +} + + +int luaO_str2d (const char *s, lua_Number *result) { + char *endptr; + *result = lua_str2number(s, &endptr); + if (endptr == s) return 0; /* conversion failed */ + if (*endptr == 'x' || *endptr == 'X') /* maybe an hexadecimal constant? */ + *result = cast_num(strtoul(s, &endptr, 16)); + if (*endptr == '\0') return 1; /* most common case */ + while (isspace(cast(unsigned char, *endptr))) endptr++; + if (*endptr != '\0') return 0; /* invalid trailing characters? */ + return 1; +} + + + +static void pushstr (lua_State *L, const char *str) { + setsvalue2s(L, L->top, luaS_new(L, str)); + incr_top(L); +} + + +/* this function handles only `%d', `%c', %f, %p, and `%s' formats */ +const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) { + int n = 1; + pushstr(L, ""); + for (;;) { + const char *e = strchr(fmt, '%'); + if (e == NULL) break; + setsvalue2s(L, L->top, luaS_newlstr(L, fmt, e-fmt)); + incr_top(L); + switch (*(e+1)) { + case 's': { + const char *s = va_arg(argp, char *); + if (s == NULL) s = "(null)"; + pushstr(L, s); + break; + } + case 'c': { + char buff[2]; + buff[0] = cast(char, va_arg(argp, int)); + buff[1] = '\0'; + pushstr(L, buff); + break; + } + case 'd': { + setnvalue(L->top, cast_num(va_arg(argp, int))); + incr_top(L); + break; + } + case 'f': { + setnvalue(L->top, cast_num(va_arg(argp, l_uacNumber))); + incr_top(L); + break; + } + case 'p': { + char buff[4*sizeof(void *) + 8]; /* should be enough space for a `%p' */ + sprintf(buff, "%p", va_arg(argp, void *)); + pushstr(L, buff); + break; + } + case '%': { + pushstr(L, "%"); + break; + } + default: { + char buff[3]; + buff[0] = '%'; + buff[1] = *(e+1); + buff[2] = '\0'; + pushstr(L, buff); + break; + } + } + n += 2; + fmt = e+2; + } + pushstr(L, fmt); + luaV_concat(L, n+1, cast_int(L->top - L->base) - 1); + L->top -= n; + return svalue(L->top - 1); +} + + +const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) { + const char *msg; + va_list argp; + va_start(argp, fmt); + msg = luaO_pushvfstring(L, fmt, argp); + va_end(argp); + return msg; +} + + +void luaO_chunkid (char *out, const char *source, size_t bufflen) { + if (*source == '=') { + strncpy(out, source+1, bufflen); /* remove first char */ + out[bufflen-1] = '\0'; /* ensures null termination */ + } + else { /* out = "source", or "...source" */ + if (*source == '@') { + size_t l; + source++; /* skip the `@' */ + bufflen -= sizeof(" '...' "); + l = strlen(source); + strcpy(out, ""); + if (l > bufflen) { + source += (l-bufflen); /* get last part of file name */ + strcat(out, "..."); + } + strcat(out, source); + } + else { /* out = [string "string"] */ + size_t len = strcspn(source, "\n\r"); /* stop at first newline */ + bufflen -= sizeof(" [string \"...\"] "); + if (len > bufflen) len = bufflen; + strcpy(out, "[string \""); + if (source[len] != '\0') { /* must truncate? */ + strncat(out, source, len); + strcat(out, "..."); + } + else + strcat(out, source); + strcat(out, "\"]"); + } + } +} diff --git a/lua/src/lobject.h b/lua/src/lobject.h new file mode 100644 index 0000000..8ce4405 --- /dev/null +++ b/lua/src/lobject.h @@ -0,0 +1,381 @@ +/* +** $Id: lobject.h,v 2.20 2006/01/18 11:37:34 roberto Exp $ +** Type definitions for Lua objects +** See Copyright Notice in lua.h +*/ + + +#ifndef lobject_h +#define lobject_h + + +#include + + +#include "llimits.h" +#include "lua.h" + + +/* tags for values visible from Lua */ +#define LAST_TAG LUA_TTHREAD + +#define NUM_TAGS (LAST_TAG+1) + + +/* +** Extra tags for non-values +*/ +#define LUA_TPROTO (LAST_TAG+1) +#define LUA_TUPVAL (LAST_TAG+2) +#define LUA_TDEADKEY (LAST_TAG+3) + + +/* +** Union of all collectable objects +*/ +typedef union GCObject GCObject; + + +/* +** Common Header for all collectable objects (in macro form, to be +** included in other objects) +*/ +#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked + + +/* +** Common header in struct form +*/ +typedef struct GCheader { + CommonHeader; +} GCheader; + + + + +/* +** Union of all Lua values +*/ +typedef union { + GCObject *gc; + void *p; + lua_Number n; + int b; +} Value; + + +/* +** Tagged Values +*/ + +#define TValuefields Value value; int tt + +typedef struct lua_TValue { + TValuefields; +} TValue; + + +/* Macros to test type */ +#define ttisnil(o) (ttype(o) == LUA_TNIL) +#define ttisnumber(o) (ttype(o) == LUA_TNUMBER) +#define ttisstring(o) (ttype(o) == LUA_TSTRING) +#define ttistable(o) (ttype(o) == LUA_TTABLE) +#define ttisfunction(o) (ttype(o) == LUA_TFUNCTION) +#define ttisboolean(o) (ttype(o) == LUA_TBOOLEAN) +#define ttisuserdata(o) (ttype(o) == LUA_TUSERDATA) +#define ttisthread(o) (ttype(o) == LUA_TTHREAD) +#define ttislightuserdata(o) (ttype(o) == LUA_TLIGHTUSERDATA) + +/* Macros to access values */ +#define ttype(o) ((o)->tt) +#define gcvalue(o) check_exp(iscollectable(o), (o)->value.gc) +#define pvalue(o) check_exp(ttislightuserdata(o), (o)->value.p) +#define nvalue(o) check_exp(ttisnumber(o), (o)->value.n) +#define rawtsvalue(o) check_exp(ttisstring(o), &(o)->value.gc->ts) +#define tsvalue(o) (&rawtsvalue(o)->tsv) +#define rawuvalue(o) check_exp(ttisuserdata(o), &(o)->value.gc->u) +#define uvalue(o) (&rawuvalue(o)->uv) +#define clvalue(o) check_exp(ttisfunction(o), &(o)->value.gc->cl) +#define hvalue(o) check_exp(ttistable(o), &(o)->value.gc->h) +#define bvalue(o) check_exp(ttisboolean(o), (o)->value.b) +#define thvalue(o) check_exp(ttisthread(o), &(o)->value.gc->th) + +#define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0)) + +/* +** for internal debug only +*/ +#define checkconsistency(obj) \ + lua_assert(!iscollectable(obj) || (ttype(obj) == (obj)->value.gc->gch.tt)) + +#define checkliveness(g,obj) \ + lua_assert(!iscollectable(obj) || \ + ((ttype(obj) == (obj)->value.gc->gch.tt) && !isdead(g, (obj)->value.gc))) + + +/* Macros to set values */ +#define setnilvalue(obj) ((obj)->tt=LUA_TNIL) + +#define setnvalue(obj,x) \ + { TValue *i_o=(obj); i_o->value.n=(x); i_o->tt=LUA_TNUMBER; } + +#define setpvalue(obj,x) \ + { TValue *i_o=(obj); i_o->value.p=(x); i_o->tt=LUA_TLIGHTUSERDATA; } + +#define setbvalue(obj,x) \ + { TValue *i_o=(obj); i_o->value.b=(x); i_o->tt=LUA_TBOOLEAN; } + +#define setsvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TSTRING; \ + checkliveness(G(L),i_o); } + +#define setuvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TUSERDATA; \ + checkliveness(G(L),i_o); } + +#define setthvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTHREAD; \ + checkliveness(G(L),i_o); } + +#define setclvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TFUNCTION; \ + checkliveness(G(L),i_o); } + +#define sethvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTABLE; \ + checkliveness(G(L),i_o); } + +#define setptvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TPROTO; \ + checkliveness(G(L),i_o); } + + + + +#define setobj(L,obj1,obj2) \ + { const TValue *o2=(obj2); TValue *o1=(obj1); \ + o1->value = o2->value; o1->tt=o2->tt; \ + checkliveness(G(L),o1); } + + +/* +** different types of sets, according to destination +*/ + +/* from stack to (same) stack */ +#define setobjs2s setobj +/* to stack (not from same stack) */ +#define setobj2s setobj +#define setsvalue2s setsvalue +#define sethvalue2s sethvalue +#define setptvalue2s setptvalue +/* from table to same table */ +#define setobjt2t setobj +/* to table */ +#define setobj2t setobj +/* to new object */ +#define setobj2n setobj +#define setsvalue2n setsvalue + +#define setttype(obj, tt) (ttype(obj) = (tt)) + + +#define iscollectable(o) (ttype(o) >= LUA_TSTRING) + + + +typedef TValue *StkId; /* index to stack elements */ + + +/* +** String headers for string table +*/ +typedef union TString { + L_Umaxalign dummy; /* ensures maximum alignment for strings */ + struct { + CommonHeader; + lu_byte reserved; + unsigned int hash; + size_t len; + } tsv; +} TString; + + +#define getstr(ts) cast(const char *, (ts) + 1) +#define svalue(o) getstr(tsvalue(o)) + + + +typedef union Udata { + L_Umaxalign dummy; /* ensures maximum alignment for `local' udata */ + struct { + CommonHeader; + struct Table *metatable; + struct Table *env; + size_t len; + } uv; +} Udata; + + + + +/* +** Function Prototypes +*/ +typedef struct Proto { + CommonHeader; + TValue *k; /* constants used by the function */ + Instruction *code; + struct Proto **p; /* functions defined inside the function */ + int *lineinfo; /* map from opcodes to source lines */ + struct LocVar *locvars; /* information about local variables */ + TString **upvalues; /* upvalue names */ + TString *source; + int sizeupvalues; + int sizek; /* size of `k' */ + int sizecode; + int sizelineinfo; + int sizep; /* size of `p' */ + int sizelocvars; + int linedefined; + int lastlinedefined; + GCObject *gclist; + lu_byte nups; /* number of upvalues */ + lu_byte numparams; + lu_byte is_vararg; + lu_byte maxstacksize; +} Proto; + + +/* masks for new-style vararg */ +#define VARARG_HASARG 1 +#define VARARG_ISVARARG 2 +#define VARARG_NEEDSARG 4 + + +typedef struct LocVar { + TString *varname; + int startpc; /* first point where variable is active */ + int endpc; /* first point where variable is dead */ +} LocVar; + + + +/* +** Upvalues +*/ + +typedef struct UpVal { + CommonHeader; + TValue *v; /* points to stack or to its own value */ + union { + TValue value; /* the value (when closed) */ + struct { /* double linked list (when open) */ + struct UpVal *prev; + struct UpVal *next; + } l; + } u; +} UpVal; + + +/* +** Closures +*/ + +#define ClosureHeader \ + CommonHeader; lu_byte isC; lu_byte nupvalues; GCObject *gclist; \ + struct Table *env + +typedef struct CClosure { + ClosureHeader; + lua_CFunction f; + TValue upvalue[1]; +} CClosure; + + +typedef struct LClosure { + ClosureHeader; + struct Proto *p; + UpVal *upvals[1]; +} LClosure; + + +typedef union Closure { + CClosure c; + LClosure l; +} Closure; + + +#define iscfunction(o) (ttype(o) == LUA_TFUNCTION && clvalue(o)->c.isC) +#define isLfunction(o) (ttype(o) == LUA_TFUNCTION && !clvalue(o)->c.isC) + + +/* +** Tables +*/ + +typedef union TKey { + struct { + TValuefields; + struct Node *next; /* for chaining */ + } nk; + TValue tvk; +} TKey; + + +typedef struct Node { + TValue i_val; + TKey i_key; +} Node; + + +typedef struct Table { + CommonHeader; + lu_byte flags; /* 1<

    lsizenode)) + + +#define luaO_nilobject (&luaO_nilobject_) + +LUAI_DATA const TValue luaO_nilobject_; + +#define ceillog2(x) (luaO_log2((x)-1) + 1) + +LUAI_FUNC int luaO_log2 (unsigned int x); +LUAI_FUNC int luaO_int2fb (unsigned int x); +LUAI_FUNC int luaO_fb2int (int x); +LUAI_FUNC int luaO_rawequalObj (const TValue *t1, const TValue *t2); +LUAI_FUNC int luaO_str2d (const char *s, lua_Number *result); +LUAI_FUNC const char *luaO_pushvfstring (lua_State *L, const char *fmt, + va_list argp); +LUAI_FUNC const char *luaO_pushfstring (lua_State *L, const char *fmt, ...); +LUAI_FUNC void luaO_chunkid (char *out, const char *source, size_t len); + + +#endif + diff --git a/lua/src/lopcodes.c b/lua/src/lopcodes.c new file mode 100644 index 0000000..bf9cd52 --- /dev/null +++ b/lua/src/lopcodes.c @@ -0,0 +1,102 @@ +/* +** $Id: lopcodes.c,v 1.37 2005/11/08 19:45:36 roberto Exp $ +** See Copyright Notice in lua.h +*/ + + +#define lopcodes_c +#define LUA_CORE + + +#include "lopcodes.h" + + +/* ORDER OP */ + +const char *const luaP_opnames[NUM_OPCODES+1] = { + "MOVE", + "LOADK", + "LOADBOOL", + "LOADNIL", + "GETUPVAL", + "GETGLOBAL", + "GETTABLE", + "SETGLOBAL", + "SETUPVAL", + "SETTABLE", + "NEWTABLE", + "SELF", + "ADD", + "SUB", + "MUL", + "DIV", + "MOD", + "POW", + "UNM", + "NOT", + "LEN", + "CONCAT", + "JMP", + "EQ", + "LT", + "LE", + "TEST", + "TESTSET", + "CALL", + "TAILCALL", + "RETURN", + "FORLOOP", + "FORPREP", + "TFORLOOP", + "SETLIST", + "CLOSE", + "CLOSURE", + "VARARG", + NULL +}; + + +#define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m)) + +const lu_byte luaP_opmodes[NUM_OPCODES] = { +/* T A B C mode opcode */ + opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_MOVE */ + ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_LOADK */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LOADNIL */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */ + ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_GETGLOBAL */ + ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETTABLE */ + ,opmode(0, 0, OpArgK, OpArgN, iABx) /* OP_SETGLOBAL */ + ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_SETUPVAL */ + ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABLE */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */ + ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_ADD */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SUB */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MUL */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MOD */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LEN */ + ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */ + ,opmode(0, 0, OpArgR, OpArgN, iAsBx) /* OP_JMP */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_EQ */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LT */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LE */ + ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TEST */ + ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_TAILCALL */ + ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_RETURN */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORLOOP */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORPREP */ + ,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TFORLOOP */ + ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */ + ,opmode(0, 0, OpArgN, OpArgN, iABC) /* OP_CLOSE */ + ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */ +}; + diff --git a/lua/src/lopcodes.h b/lua/src/lopcodes.h new file mode 100644 index 0000000..48105f1 --- /dev/null +++ b/lua/src/lopcodes.h @@ -0,0 +1,268 @@ +/* +** $Id: lopcodes.h,v 1.125 2006/03/14 19:04:44 roberto Exp $ +** Opcodes for Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#ifndef lopcodes_h +#define lopcodes_h + +#include "llimits.h" + + +/*=========================================================================== + We assume that instructions are unsigned numbers. + All instructions have an opcode in the first 6 bits. + Instructions can have the following fields: + `A' : 8 bits + `B' : 9 bits + `C' : 9 bits + `Bx' : 18 bits (`B' and `C' together) + `sBx' : signed Bx + + A signed argument is represented in excess K; that is, the number + value is the unsigned value minus K. K is exactly the maximum value + for that argument (so that -max is represented by 0, and +max is + represented by 2*max), which is half the maximum for the corresponding + unsigned argument. +===========================================================================*/ + + +enum OpMode {iABC, iABx, iAsBx}; /* basic instruction format */ + + +/* +** size and position of opcode arguments. +*/ +#define SIZE_C 9 +#define SIZE_B 9 +#define SIZE_Bx (SIZE_C + SIZE_B) +#define SIZE_A 8 + +#define SIZE_OP 6 + +#define POS_OP 0 +#define POS_A (POS_OP + SIZE_OP) +#define POS_C (POS_A + SIZE_A) +#define POS_B (POS_C + SIZE_C) +#define POS_Bx POS_C + + +/* +** limits for opcode arguments. +** we use (signed) int to manipulate most arguments, +** so they must fit in LUAI_BITSINT-1 bits (-1 for sign) +*/ +#if SIZE_Bx < LUAI_BITSINT-1 +#define MAXARG_Bx ((1<>1) /* `sBx' is signed */ +#else +#define MAXARG_Bx MAX_INT +#define MAXARG_sBx MAX_INT +#endif + + +#define MAXARG_A ((1<>POS_OP) & MASK1(SIZE_OP,0))) +#define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,POS_OP)) | \ + ((cast(Instruction, o)<>POS_A) & MASK1(SIZE_A,0))) +#define SETARG_A(i,u) ((i) = (((i)&MASK0(SIZE_A,POS_A)) | \ + ((cast(Instruction, u)<>POS_B) & MASK1(SIZE_B,0))) +#define SETARG_B(i,b) ((i) = (((i)&MASK0(SIZE_B,POS_B)) | \ + ((cast(Instruction, b)<>POS_C) & MASK1(SIZE_C,0))) +#define SETARG_C(i,b) ((i) = (((i)&MASK0(SIZE_C,POS_C)) | \ + ((cast(Instruction, b)<>POS_Bx) & MASK1(SIZE_Bx,0))) +#define SETARG_Bx(i,b) ((i) = (((i)&MASK0(SIZE_Bx,POS_Bx)) | \ + ((cast(Instruction, b)< C) then pc++ */ +OP_TESTSET,/* A B C if (R(B) <=> C) then R(A) := R(B) else pc++ */ + +OP_CALL,/* A B C R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */ +OP_TAILCALL,/* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */ +OP_RETURN,/* A B return R(A), ... ,R(A+B-2) (see note) */ + +OP_FORLOOP,/* A sBx R(A)+=R(A+2); + if R(A) =) R(A)*/ +OP_CLOSURE,/* A Bx R(A) := closure(KPROTO[Bx], R(A), ... ,R(A+n)) */ + +OP_VARARG/* A B R(A), R(A+1), ..., R(A+B-1) = vararg */ +} OpCode; + + +#define NUM_OPCODES (cast(int, OP_VARARG) + 1) + + + +/*=========================================================================== + Notes: + (*) In OP_CALL, if (B == 0) then B = top. C is the number of returns - 1, + and can be 0: OP_CALL then sets `top' to last_result+1, so + next open instruction (OP_CALL, OP_RETURN, OP_SETLIST) may use `top'. + + (*) In OP_VARARG, if (B == 0) then use actual number of varargs and + set top (like in OP_CALL with C == 0). + + (*) In OP_RETURN, if (B == 0) then return up to `top' + + (*) In OP_SETLIST, if (B == 0) then B = `top'; + if (C == 0) then next `instruction' is real C + + (*) For comparisons, A specifies what condition the test should accept + (true or false). + + (*) All `skips' (pc++) assume that next instruction is a jump +===========================================================================*/ + + +/* +** masks for instruction properties. The format is: +** bits 0-1: op mode +** bits 2-3: C arg mode +** bits 4-5: B arg mode +** bit 6: instruction set register A +** bit 7: operator is a test +*/ + +enum OpArgMask { + OpArgN, /* argument is not used */ + OpArgU, /* argument is used */ + OpArgR, /* argument is a register or a jump offset */ + OpArgK /* argument is a constant or register/constant */ +}; + +LUAI_DATA const lu_byte luaP_opmodes[NUM_OPCODES]; + +#define getOpMode(m) (cast(enum OpMode, luaP_opmodes[m] & 3)) +#define getBMode(m) (cast(enum OpArgMask, (luaP_opmodes[m] >> 4) & 3)) +#define getCMode(m) (cast(enum OpArgMask, (luaP_opmodes[m] >> 2) & 3)) +#define testAMode(m) (luaP_opmodes[m] & (1 << 6)) +#define testTMode(m) (luaP_opmodes[m] & (1 << 7)) + + +LUAI_DATA const char *const luaP_opnames[NUM_OPCODES+1]; /* opcode names */ + + +/* number of list items to accumulate before a SETLIST instruction */ +#define LFIELDS_PER_FLUSH 50 + + +#endif diff --git a/lua/src/loslib.c b/lua/src/loslib.c new file mode 100644 index 0000000..fdda474 --- /dev/null +++ b/lua/src/loslib.c @@ -0,0 +1,244 @@ +/* +** $Id: loslib.c,v 1.20 2006/09/19 13:57:08 roberto Exp $ +** Standard Operating System library +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include +#include + +#define loslib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +static int os_pushresult (lua_State *L, int i, const char *filename) { + int en = errno; /* calls to Lua API may change this value */ + if (i) { + lua_pushboolean(L, 1); + return 1; + } + else { + lua_pushnil(L); + lua_pushfstring(L, "%s: %s", filename, strerror(en)); + lua_pushinteger(L, en); + return 3; + } +} + + +static int os_execute (lua_State *L) { + lua_pushinteger(L, system(luaL_optstring(L, 1, NULL))); + return 1; +} + + +static int os_remove (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + return os_pushresult(L, remove(filename) == 0, filename); +} + + +static int os_rename (lua_State *L) { + const char *fromname = luaL_checkstring(L, 1); + const char *toname = luaL_checkstring(L, 2); + return os_pushresult(L, rename(fromname, toname) == 0, fromname); +} + + +static int os_tmpname (lua_State *L) { + char buff[LUA_TMPNAMBUFSIZE]; + int err; + lua_tmpnam(buff, err); + if (err) + return luaL_error(L, "unable to generate a unique filename"); + lua_pushstring(L, buff); + return 1; +} + + +static int os_getenv (lua_State *L) { + lua_pushstring(L, getenv(luaL_checkstring(L, 1))); /* if NULL push nil */ + return 1; +} + + +static int os_clock (lua_State *L) { + lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC); + return 1; +} + + +/* +** {====================================================== +** Time/Date operations +** { year=%Y, month=%m, day=%d, hour=%H, min=%M, sec=%S, +** wday=%w+1, yday=%j, isdst=? } +** ======================================================= +*/ + +static void setfield (lua_State *L, const char *key, int value) { + lua_pushinteger(L, value); + lua_setfield(L, -2, key); +} + +static void setboolfield (lua_State *L, const char *key, int value) { + if (value < 0) /* undefined? */ + return; /* does not set field */ + lua_pushboolean(L, value); + lua_setfield(L, -2, key); +} + +static int getboolfield (lua_State *L, const char *key) { + int res; + lua_getfield(L, -1, key); + res = lua_isnil(L, -1) ? -1 : lua_toboolean(L, -1); + lua_pop(L, 1); + return res; +} + + +static int getfield (lua_State *L, const char *key, int d) { + int res; + lua_getfield(L, -1, key); + if (lua_isnumber(L, -1)) + res = (int)lua_tointeger(L, -1); + else { + if (d < 0) + return luaL_error(L, "field " LUA_QS " missing in date table", key); + res = d; + } + lua_pop(L, 1); + return res; +} + + +static int os_date (lua_State *L) { + const char *s = luaL_optstring(L, 1, "%c"); + time_t t = luaL_opt(L, (time_t)luaL_checknumber, 2, time(NULL)); + struct tm *stm; + if (*s == '!') { /* UTC? */ + stm = gmtime(&t); + s++; /* skip `!' */ + } + else + stm = localtime(&t); + if (stm == NULL) /* invalid date? */ + lua_pushnil(L); + else if (strcmp(s, "*t") == 0) { + lua_createtable(L, 0, 9); /* 9 = number of fields */ + setfield(L, "sec", stm->tm_sec); + setfield(L, "min", stm->tm_min); + setfield(L, "hour", stm->tm_hour); + setfield(L, "day", stm->tm_mday); + setfield(L, "month", stm->tm_mon+1); + setfield(L, "year", stm->tm_year+1900); + setfield(L, "wday", stm->tm_wday+1); + setfield(L, "yday", stm->tm_yday+1); + setboolfield(L, "isdst", stm->tm_isdst); + } + else { + char cc[3]; + luaL_Buffer b; + cc[0] = '%'; cc[2] = '\0'; + luaL_buffinit(L, &b); + for (; *s; s++) { + if (*s != '%' || *(s + 1) == '\0') /* no conversion specifier? */ + luaL_addchar(&b, *s); + else { + size_t reslen; + char buff[200]; /* should be big enough for any conversion result */ + cc[1] = *(++s); + reslen = strftime(buff, sizeof(buff), cc, stm); + luaL_addlstring(&b, buff, reslen); + } + } + luaL_pushresult(&b); + } + return 1; +} + + +static int os_time (lua_State *L) { + time_t t; + if (lua_isnoneornil(L, 1)) /* called without args? */ + t = time(NULL); /* get current time */ + else { + struct tm ts; + luaL_checktype(L, 1, LUA_TTABLE); + lua_settop(L, 1); /* make sure table is at the top */ + ts.tm_sec = getfield(L, "sec", 0); + ts.tm_min = getfield(L, "min", 0); + ts.tm_hour = getfield(L, "hour", 12); + ts.tm_mday = getfield(L, "day", -1); + ts.tm_mon = getfield(L, "month", -1) - 1; + ts.tm_year = getfield(L, "year", -1) - 1900; + ts.tm_isdst = getboolfield(L, "isdst"); + t = mktime(&ts); + } + if (t == (time_t)(-1)) + lua_pushnil(L); + else + lua_pushnumber(L, (lua_Number)t); + return 1; +} + + +static int os_difftime (lua_State *L) { + lua_pushnumber(L, difftime((time_t)(luaL_checknumber(L, 1)), + (time_t)(luaL_optnumber(L, 2, 0)))); + return 1; +} + +/* }====================================================== */ + + +static int os_setlocale (lua_State *L) { + static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, + LC_NUMERIC, LC_TIME}; + static const char *const catnames[] = {"all", "collate", "ctype", "monetary", + "numeric", "time", NULL}; + const char *l = luaL_optstring(L, 1, NULL); + int op = luaL_checkoption(L, 2, "all", catnames); + lua_pushstring(L, setlocale(cat[op], l)); + return 1; +} + + +static int os_exit (lua_State *L) { + exit(luaL_optint(L, 1, EXIT_SUCCESS)); + return 0; /* to avoid warnings */ +} + +static const luaL_Reg syslib[] = { + {"clock", os_clock}, + {"date", os_date}, + {"difftime", os_difftime}, + {"execute", os_execute}, + {"exit", os_exit}, + {"getenv", os_getenv}, + {"remove", os_remove}, + {"rename", os_rename}, + {"setlocale", os_setlocale}, + {"time", os_time}, + {"tmpname", os_tmpname}, + {NULL, NULL} +}; + +/* }====================================================== */ + + + +LUALIB_API int luaopen_os (lua_State *L) { + luaL_register(L, LUA_OSLIBNAME, syslib); + return 1; +} + diff --git a/lua/src/lparser.c b/lua/src/lparser.c new file mode 100644 index 0000000..6c473c4 --- /dev/null +++ b/lua/src/lparser.c @@ -0,0 +1,1337 @@ +/* +** $Id: lparser.c,v 2.42a 2006/06/05 15:57:59 roberto Exp $ +** Lua Parser +** See Copyright Notice in lua.h +*/ + + +#include + +#define lparser_c +#define LUA_CORE + +#include "lua.h" + +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "llex.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" + + + +#define hasmultret(k) ((k) == VCALL || (k) == VVARARG) + +#define getlocvar(fs, i) ((fs)->f->locvars[(fs)->actvar[i]]) + +#define luaY_checklimit(fs,v,l,m) if ((v)>(l)) errorlimit(fs,l,m) + + +/* +** nodes for block list (list of active blocks) +*/ +typedef struct BlockCnt { + struct BlockCnt *previous; /* chain */ + int breaklist; /* list of jumps out of this loop */ + lu_byte nactvar; /* # active locals outside the breakable structure */ + lu_byte upval; /* true if some variable in the block is an upvalue */ + lu_byte isbreakable; /* true if `block' is a loop */ +} BlockCnt; + + + +/* +** prototypes for recursive non-terminal functions +*/ +static void chunk (LexState *ls); +static void expr (LexState *ls, expdesc *v); + + +static void anchor_token (LexState *ls) { + if (ls->t.token == TK_NAME || ls->t.token == TK_STRING) { + TString *ts = ls->t.seminfo.ts; + luaX_newstring(ls, getstr(ts), ts->tsv.len); + } +} + + +static void error_expected (LexState *ls, int token) { + luaX_syntaxerror(ls, + luaO_pushfstring(ls->L, LUA_QS " expected", luaX_token2str(ls, token))); +} + + +static void errorlimit (FuncState *fs, int limit, const char *what) { + const char *msg = (fs->f->linedefined == 0) ? + luaO_pushfstring(fs->L, "main function has more than %d %s", limit, what) : + luaO_pushfstring(fs->L, "function at line %d has more than %d %s", + fs->f->linedefined, limit, what); + luaX_lexerror(fs->ls, msg, 0); +} + + +static int testnext (LexState *ls, int c) { + if (ls->t.token == c) { + luaX_next(ls); + return 1; + } + else return 0; +} + + +static void check (LexState *ls, int c) { + if (ls->t.token != c) + error_expected(ls, c); +} + +static void checknext (LexState *ls, int c) { + check(ls, c); + luaX_next(ls); +} + + +#define check_condition(ls,c,msg) { if (!(c)) luaX_syntaxerror(ls, msg); } + + + +static void check_match (LexState *ls, int what, int who, int where) { + if (!testnext(ls, what)) { + if (where == ls->linenumber) + error_expected(ls, what); + else { + luaX_syntaxerror(ls, luaO_pushfstring(ls->L, + LUA_QS " expected (to close " LUA_QS " at line %d)", + luaX_token2str(ls, what), luaX_token2str(ls, who), where)); + } + } +} + + +static TString *str_checkname (LexState *ls) { + TString *ts; + check(ls, TK_NAME); + ts = ls->t.seminfo.ts; + luaX_next(ls); + return ts; +} + + +static void init_exp (expdesc *e, expkind k, int i) { + e->f = e->t = NO_JUMP; + e->k = k; + e->u.s.info = i; +} + + +static void codestring (LexState *ls, expdesc *e, TString *s) { + init_exp(e, VK, luaK_stringK(ls->fs, s)); +} + + +static void checkname(LexState *ls, expdesc *e) { + codestring(ls, e, str_checkname(ls)); +} + + +static int registerlocalvar (LexState *ls, TString *varname) { + FuncState *fs = ls->fs; + Proto *f = fs->f; + int oldsize = f->sizelocvars; + luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, + LocVar, SHRT_MAX, "too many local variables"); + while (oldsize < f->sizelocvars) f->locvars[oldsize++].varname = NULL; + f->locvars[fs->nlocvars].varname = varname; + luaC_objbarrier(ls->L, f, varname); + return fs->nlocvars++; +} + + +#define new_localvarliteral(ls,v,n) \ + new_localvar(ls, luaX_newstring(ls, "" v, (sizeof(v)/sizeof(char))-1), n) + + +static void new_localvar (LexState *ls, TString *name, int n) { + FuncState *fs = ls->fs; + luaY_checklimit(fs, fs->nactvar+n+1, LUAI_MAXVARS, "local variables"); + fs->actvar[fs->nactvar+n] = cast(unsigned short, registerlocalvar(ls, name)); +} + + +static void adjustlocalvars (LexState *ls, int nvars) { + FuncState *fs = ls->fs; + fs->nactvar = cast_byte(fs->nactvar + nvars); + for (; nvars; nvars--) { + getlocvar(fs, fs->nactvar - nvars).startpc = fs->pc; + } +} + + +static void removevars (LexState *ls, int tolevel) { + FuncState *fs = ls->fs; + while (fs->nactvar > tolevel) + getlocvar(fs, --fs->nactvar).endpc = fs->pc; +} + + +static int indexupvalue (FuncState *fs, TString *name, expdesc *v) { + int i; + Proto *f = fs->f; + int oldsize = f->sizeupvalues; + for (i=0; inups; i++) { + if (fs->upvalues[i].k == v->k && fs->upvalues[i].info == v->u.s.info) { + lua_assert(f->upvalues[i] == name); + return i; + } + } + /* new one */ + luaY_checklimit(fs, f->nups + 1, LUAI_MAXUPVALUES, "upvalues"); + luaM_growvector(fs->L, f->upvalues, f->nups, f->sizeupvalues, + TString *, MAX_INT, ""); + while (oldsize < f->sizeupvalues) f->upvalues[oldsize++] = NULL; + f->upvalues[f->nups] = name; + luaC_objbarrier(fs->L, f, name); + lua_assert(v->k == VLOCAL || v->k == VUPVAL); + fs->upvalues[f->nups].k = cast_byte(v->k); + fs->upvalues[f->nups].info = cast_byte(v->u.s.info); + return f->nups++; +} + + +static int searchvar (FuncState *fs, TString *n) { + int i; + for (i=fs->nactvar-1; i >= 0; i--) { + if (n == getlocvar(fs, i).varname) + return i; + } + return -1; /* not found */ +} + + +static void markupval (FuncState *fs, int level) { + BlockCnt *bl = fs->bl; + while (bl && bl->nactvar > level) bl = bl->previous; + if (bl) bl->upval = 1; +} + + +static int singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { + if (fs == NULL) { /* no more levels? */ + init_exp(var, VGLOBAL, NO_REG); /* default is global variable */ + return VGLOBAL; + } + else { + int v = searchvar(fs, n); /* look up at current level */ + if (v >= 0) { + init_exp(var, VLOCAL, v); + if (!base) + markupval(fs, v); /* local will be used as an upval */ + return VLOCAL; + } + else { /* not found at current level; try upper one */ + if (singlevaraux(fs->prev, n, var, 0) == VGLOBAL) + return VGLOBAL; + var->u.s.info = indexupvalue(fs, n, var); /* else was LOCAL or UPVAL */ + var->k = VUPVAL; /* upvalue in this level */ + return VUPVAL; + } + } +} + + +static void singlevar (LexState *ls, expdesc *var) { + TString *varname = str_checkname(ls); + FuncState *fs = ls->fs; + if (singlevaraux(fs, varname, var, 1) == VGLOBAL) + var->u.s.info = luaK_stringK(fs, varname); /* info points to global name */ +} + + +static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) { + FuncState *fs = ls->fs; + int extra = nvars - nexps; + if (hasmultret(e->k)) { + extra++; /* includes call itself */ + if (extra < 0) extra = 0; + luaK_setreturns(fs, e, extra); /* last exp. provides the difference */ + if (extra > 1) luaK_reserveregs(fs, extra-1); + } + else { + if (e->k != VVOID) luaK_exp2nextreg(fs, e); /* close last expression */ + if (extra > 0) { + int reg = fs->freereg; + luaK_reserveregs(fs, extra); + luaK_nil(fs, reg, extra); + } + } +} + + +static void enterlevel (LexState *ls) { + if (++ls->L->nCcalls > LUAI_MAXCCALLS) + luaX_lexerror(ls, "chunk has too many syntax levels", 0); +} + + +#define leavelevel(ls) ((ls)->L->nCcalls--) + + +static void enterblock (FuncState *fs, BlockCnt *bl, lu_byte isbreakable) { + bl->breaklist = NO_JUMP; + bl->isbreakable = isbreakable; + bl->nactvar = fs->nactvar; + bl->upval = 0; + bl->previous = fs->bl; + fs->bl = bl; + lua_assert(fs->freereg == fs->nactvar); +} + + +static void leaveblock (FuncState *fs) { + BlockCnt *bl = fs->bl; + fs->bl = bl->previous; + removevars(fs->ls, bl->nactvar); + if (bl->upval) + luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); + /* a block either controls scope or breaks (never both) */ + lua_assert(!bl->isbreakable || !bl->upval); + lua_assert(bl->nactvar == fs->nactvar); + fs->freereg = fs->nactvar; /* free registers */ + luaK_patchtohere(fs, bl->breaklist); +} + + +static void pushclosure (LexState *ls, FuncState *func, expdesc *v) { + FuncState *fs = ls->fs; + Proto *f = fs->f; + int oldsize = f->sizep; + int i; + luaM_growvector(ls->L, f->p, fs->np, f->sizep, Proto *, + MAXARG_Bx, "constant table overflow"); + while (oldsize < f->sizep) f->p[oldsize++] = NULL; + f->p[fs->np++] = func->f; + luaC_objbarrier(ls->L, f, func->f); + init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np-1)); + for (i=0; if->nups; i++) { + OpCode o = (func->upvalues[i].k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; + luaK_codeABC(fs, o, 0, func->upvalues[i].info, 0); + } +} + + +static void open_func (LexState *ls, FuncState *fs) { + lua_State *L = ls->L; + Proto *f = luaF_newproto(L); + fs->f = f; + fs->prev = ls->fs; /* linked list of funcstates */ + fs->ls = ls; + fs->L = L; + ls->fs = fs; + fs->pc = 0; + fs->lasttarget = -1; + fs->jpc = NO_JUMP; + fs->freereg = 0; + fs->nk = 0; + fs->np = 0; + fs->nlocvars = 0; + fs->nactvar = 0; + fs->bl = NULL; + f->source = ls->source; + f->maxstacksize = 2; /* registers 0/1 are always valid */ + fs->h = luaH_new(L, 0, 0); + /* anchor table of constants and prototype (to avoid being collected) */ + sethvalue2s(L, L->top, fs->h); + incr_top(L); + setptvalue2s(L, L->top, f); + incr_top(L); +} + + +static void close_func (LexState *ls) { + lua_State *L = ls->L; + FuncState *fs = ls->fs; + Proto *f = fs->f; + removevars(ls, 0); + luaK_ret(fs, 0, 0); /* final return */ + luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); + f->sizecode = fs->pc; + luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int); + f->sizelineinfo = fs->pc; + luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue); + f->sizek = fs->nk; + luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); + f->sizep = fs->np; + luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); + f->sizelocvars = fs->nlocvars; + luaM_reallocvector(L, f->upvalues, f->sizeupvalues, f->nups, TString *); + f->sizeupvalues = f->nups; + lua_assert(luaG_checkcode(f)); + lua_assert(fs->bl == NULL); + ls->fs = fs->prev; + L->top -= 2; /* remove table and prototype from the stack */ + /* last token read was anchored in defunct function; must reanchor it */ + if (fs) anchor_token(ls); +} + + +Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) { + struct LexState lexstate; + struct FuncState funcstate; + lexstate.buff = buff; + luaX_setinput(L, &lexstate, z, luaS_new(L, name)); + open_func(&lexstate, &funcstate); + funcstate.f->is_vararg = VARARG_ISVARARG; /* main func. is always vararg */ + luaX_next(&lexstate); /* read first token */ + chunk(&lexstate); + check(&lexstate, TK_EOS); + close_func(&lexstate); + lua_assert(funcstate.prev == NULL); + lua_assert(funcstate.f->nups == 0); + lua_assert(lexstate.fs == NULL); + return funcstate.f; +} + + + +/*============================================================*/ +/* GRAMMAR RULES */ +/*============================================================*/ + + +static void field (LexState *ls, expdesc *v) { + /* field -> ['.' | ':'] NAME */ + FuncState *fs = ls->fs; + expdesc key; + luaK_exp2anyreg(fs, v); + luaX_next(ls); /* skip the dot or colon */ + checkname(ls, &key); + luaK_indexed(fs, v, &key); +} + + +static void yindex (LexState *ls, expdesc *v) { + /* index -> '[' expr ']' */ + luaX_next(ls); /* skip the '[' */ + expr(ls, v); + luaK_exp2val(ls->fs, v); + checknext(ls, ']'); +} + + +/* +** {====================================================================== +** Rules for Constructors +** ======================================================================= +*/ + + +struct ConsControl { + expdesc v; /* last list item read */ + expdesc *t; /* table descriptor */ + int nh; /* total number of `record' elements */ + int na; /* total number of array elements */ + int tostore; /* number of array elements pending to be stored */ +}; + + +static void recfield (LexState *ls, struct ConsControl *cc) { + /* recfield -> (NAME | `['exp1`]') = exp1 */ + FuncState *fs = ls->fs; + int reg = ls->fs->freereg; + expdesc key, val; + int rkkey; + if (ls->t.token == TK_NAME) { + luaY_checklimit(fs, cc->nh, MAX_INT, "items in a constructor"); + checkname(ls, &key); + } + else /* ls->t.token == '[' */ + yindex(ls, &key); + cc->nh++; + checknext(ls, '='); + rkkey = luaK_exp2RK(fs, &key); + expr(ls, &val); + luaK_codeABC(fs, OP_SETTABLE, cc->t->u.s.info, rkkey, luaK_exp2RK(fs, &val)); + fs->freereg = reg; /* free registers */ +} + + +static void closelistfield (FuncState *fs, struct ConsControl *cc) { + if (cc->v.k == VVOID) return; /* there is no list item */ + luaK_exp2nextreg(fs, &cc->v); + cc->v.k = VVOID; + if (cc->tostore == LFIELDS_PER_FLUSH) { + luaK_setlist(fs, cc->t->u.s.info, cc->na, cc->tostore); /* flush */ + cc->tostore = 0; /* no more items pending */ + } +} + + +static void lastlistfield (FuncState *fs, struct ConsControl *cc) { + if (cc->tostore == 0) return; + if (hasmultret(cc->v.k)) { + luaK_setmultret(fs, &cc->v); + luaK_setlist(fs, cc->t->u.s.info, cc->na, LUA_MULTRET); + cc->na--; /* do not count last expression (unknown number of elements) */ + } + else { + if (cc->v.k != VVOID) + luaK_exp2nextreg(fs, &cc->v); + luaK_setlist(fs, cc->t->u.s.info, cc->na, cc->tostore); + } +} + + +static void listfield (LexState *ls, struct ConsControl *cc) { + expr(ls, &cc->v); + luaY_checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor"); + cc->na++; + cc->tostore++; +} + + +static void constructor (LexState *ls, expdesc *t) { + /* constructor -> ?? */ + FuncState *fs = ls->fs; + int line = ls->linenumber; + int pc = luaK_codeABC(fs, OP_NEWTABLE, 0, 0, 0); + struct ConsControl cc; + cc.na = cc.nh = cc.tostore = 0; + cc.t = t; + init_exp(t, VRELOCABLE, pc); + init_exp(&cc.v, VVOID, 0); /* no value (yet) */ + luaK_exp2nextreg(ls->fs, t); /* fix it at stack top (for gc) */ + checknext(ls, '{'); + do { + lua_assert(cc.v.k == VVOID || cc.tostore > 0); + if (ls->t.token == '}') break; + closelistfield(fs, &cc); + switch(ls->t.token) { + case TK_NAME: { /* may be listfields or recfields */ + luaX_lookahead(ls); + if (ls->lookahead.token != '=') /* expression? */ + listfield(ls, &cc); + else + recfield(ls, &cc); + break; + } + case '[': { /* constructor_item -> recfield */ + recfield(ls, &cc); + break; + } + default: { /* constructor_part -> listfield */ + listfield(ls, &cc); + break; + } + } + } while (testnext(ls, ',') || testnext(ls, ';')); + check_match(ls, '}', '{', line); + lastlistfield(fs, &cc); + SETARG_B(fs->f->code[pc], luaO_int2fb(cc.na)); /* set initial array size */ + SETARG_C(fs->f->code[pc], luaO_int2fb(cc.nh)); /* set initial table size */ +} + +/* }====================================================================== */ + + + +static void parlist (LexState *ls) { + /* parlist -> [ param { `,' param } ] */ + FuncState *fs = ls->fs; + Proto *f = fs->f; + int nparams = 0; + f->is_vararg = 0; + if (ls->t.token != ')') { /* is `parlist' not empty? */ + do { + switch (ls->t.token) { + case TK_NAME: { /* param -> NAME */ + new_localvar(ls, str_checkname(ls), nparams++); + break; + } + case TK_DOTS: { /* param -> `...' */ + luaX_next(ls); +#if defined(LUA_COMPAT_VARARG) + /* use `arg' as default name */ + new_localvarliteral(ls, "arg", nparams++); + f->is_vararg = VARARG_HASARG | VARARG_NEEDSARG; +#endif + f->is_vararg |= VARARG_ISVARARG; + break; + } + default: luaX_syntaxerror(ls, " or " LUA_QL("...") " expected"); + } + } while (!f->is_vararg && testnext(ls, ',')); + } + adjustlocalvars(ls, nparams); + f->numparams = cast_byte(fs->nactvar - (f->is_vararg & VARARG_HASARG)); + luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ +} + + +static void body (LexState *ls, expdesc *e, int needself, int line) { + /* body -> `(' parlist `)' chunk END */ + FuncState new_fs; + open_func(ls, &new_fs); + new_fs.f->linedefined = line; + checknext(ls, '('); + if (needself) { + new_localvarliteral(ls, "self", 0); + adjustlocalvars(ls, 1); + } + parlist(ls); + checknext(ls, ')'); + chunk(ls); + new_fs.f->lastlinedefined = ls->linenumber; + check_match(ls, TK_END, TK_FUNCTION, line); + close_func(ls); + pushclosure(ls, &new_fs, e); +} + + +static int explist1 (LexState *ls, expdesc *v) { + /* explist1 -> expr { `,' expr } */ + int n = 1; /* at least one expression */ + expr(ls, v); + while (testnext(ls, ',')) { + luaK_exp2nextreg(ls->fs, v); + expr(ls, v); + n++; + } + return n; +} + + +static void funcargs (LexState *ls, expdesc *f) { + FuncState *fs = ls->fs; + expdesc args; + int base, nparams; + int line = ls->linenumber; + switch (ls->t.token) { + case '(': { /* funcargs -> `(' [ explist1 ] `)' */ + if (line != ls->lastline) + luaX_syntaxerror(ls,"ambiguous syntax (function call x new statement)"); + luaX_next(ls); + if (ls->t.token == ')') /* arg list is empty? */ + args.k = VVOID; + else { + explist1(ls, &args); + luaK_setmultret(fs, &args); + } + check_match(ls, ')', '(', line); + break; + } + case '{': { /* funcargs -> constructor */ + constructor(ls, &args); + break; + } + case TK_STRING: { /* funcargs -> STRING */ + codestring(ls, &args, ls->t.seminfo.ts); + luaX_next(ls); /* must use `seminfo' before `next' */ + break; + } + default: { + luaX_syntaxerror(ls, "function arguments expected"); + return; + } + } + lua_assert(f->k == VNONRELOC); + base = f->u.s.info; /* base register for call */ + if (hasmultret(args.k)) + nparams = LUA_MULTRET; /* open call */ + else { + if (args.k != VVOID) + luaK_exp2nextreg(fs, &args); /* close last argument */ + nparams = fs->freereg - (base+1); + } + init_exp(f, VCALL, luaK_codeABC(fs, OP_CALL, base, nparams+1, 2)); + luaK_fixline(fs, line); + fs->freereg = base+1; /* call remove function and arguments and leaves + (unless changed) one result */ +} + + + + +/* +** {====================================================================== +** Expression parsing +** ======================================================================= +*/ + + +static void prefixexp (LexState *ls, expdesc *v) { + /* prefixexp -> NAME | '(' expr ')' */ + switch (ls->t.token) { + case '(': { + int line = ls->linenumber; + luaX_next(ls); + expr(ls, v); + check_match(ls, ')', '(', line); + luaK_dischargevars(ls->fs, v); + return; + } + case TK_NAME: { + singlevar(ls, v); + return; + } + default: { + luaX_syntaxerror(ls, "unexpected symbol"); + return; + } + } +} + + +static void primaryexp (LexState *ls, expdesc *v) { + /* primaryexp -> + prefixexp { `.' NAME | `[' exp `]' | `:' NAME funcargs | funcargs } */ + FuncState *fs = ls->fs; + prefixexp(ls, v); + for (;;) { + switch (ls->t.token) { + case '.': { /* field */ + field(ls, v); + break; + } + case '[': { /* `[' exp1 `]' */ + expdesc key; + luaK_exp2anyreg(fs, v); + yindex(ls, &key); + luaK_indexed(fs, v, &key); + break; + } + case ':': { /* `:' NAME funcargs */ + expdesc key; + luaX_next(ls); + checkname(ls, &key); + luaK_self(fs, v, &key); + funcargs(ls, v); + break; + } + case '(': case TK_STRING: case '{': { /* funcargs */ + luaK_exp2nextreg(fs, v); + funcargs(ls, v); + break; + } + default: return; + } + } +} + + +static void simpleexp (LexState *ls, expdesc *v) { + /* simpleexp -> NUMBER | STRING | NIL | true | false | ... | + constructor | FUNCTION body | primaryexp */ + switch (ls->t.token) { + case TK_NUMBER: { + init_exp(v, VKNUM, 0); + v->u.nval = ls->t.seminfo.r; + break; + } + case TK_STRING: { + codestring(ls, v, ls->t.seminfo.ts); + break; + } + case TK_NIL: { + init_exp(v, VNIL, 0); + break; + } + case TK_TRUE: { + init_exp(v, VTRUE, 0); + break; + } + case TK_FALSE: { + init_exp(v, VFALSE, 0); + break; + } + case TK_DOTS: { /* vararg */ + FuncState *fs = ls->fs; + check_condition(ls, fs->f->is_vararg, + "cannot use " LUA_QL("...") " outside a vararg function"); + fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */ + init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); + break; + } + case '{': { /* constructor */ + constructor(ls, v); + return; + } + case TK_FUNCTION: { + luaX_next(ls); + body(ls, v, 0, ls->linenumber); + return; + } + default: { + primaryexp(ls, v); + return; + } + } + luaX_next(ls); +} + + +static UnOpr getunopr (int op) { + switch (op) { + case TK_NOT: return OPR_NOT; + case '-': return OPR_MINUS; + case '#': return OPR_LEN; + default: return OPR_NOUNOPR; + } +} + + +static BinOpr getbinopr (int op) { + switch (op) { + case '+': return OPR_ADD; + case '-': return OPR_SUB; + case '*': return OPR_MUL; + case '/': return OPR_DIV; + case '%': return OPR_MOD; + case '^': return OPR_POW; + case TK_CONCAT: return OPR_CONCAT; + case TK_NE: return OPR_NE; + case TK_EQ: return OPR_EQ; + case '<': return OPR_LT; + case TK_LE: return OPR_LE; + case '>': return OPR_GT; + case TK_GE: return OPR_GE; + case TK_AND: return OPR_AND; + case TK_OR: return OPR_OR; + default: return OPR_NOBINOPR; + } +} + + +static const struct { + lu_byte left; /* left priority for each binary operator */ + lu_byte right; /* right priority */ +} priority[] = { /* ORDER OPR */ + {6, 6}, {6, 6}, {7, 7}, {7, 7}, {7, 7}, /* `+' `-' `/' `%' */ + {10, 9}, {5, 4}, /* power and concat (right associative) */ + {3, 3}, {3, 3}, /* equality and inequality */ + {3, 3}, {3, 3}, {3, 3}, {3, 3}, /* order */ + {2, 2}, {1, 1} /* logical (and/or) */ +}; + +#define UNARY_PRIORITY 8 /* priority for unary operators */ + + +/* +** subexpr -> (simpleexp | unop subexpr) { binop subexpr } +** where `binop' is any binary operator with a priority higher than `limit' +*/ +static BinOpr subexpr (LexState *ls, expdesc *v, unsigned int limit) { + BinOpr op; + UnOpr uop; + enterlevel(ls); + uop = getunopr(ls->t.token); + if (uop != OPR_NOUNOPR) { + luaX_next(ls); + subexpr(ls, v, UNARY_PRIORITY); + luaK_prefix(ls->fs, uop, v); + } + else simpleexp(ls, v); + /* expand while operators have priorities higher than `limit' */ + op = getbinopr(ls->t.token); + while (op != OPR_NOBINOPR && priority[op].left > limit) { + expdesc v2; + BinOpr nextop; + luaX_next(ls); + luaK_infix(ls->fs, op, v); + /* read sub-expression with higher priority */ + nextop = subexpr(ls, &v2, priority[op].right); + luaK_posfix(ls->fs, op, v, &v2); + op = nextop; + } + leavelevel(ls); + return op; /* return first untreated operator */ +} + + +static void expr (LexState *ls, expdesc *v) { + subexpr(ls, v, 0); +} + +/* }==================================================================== */ + + + +/* +** {====================================================================== +** Rules for Statements +** ======================================================================= +*/ + + +static int block_follow (int token) { + switch (token) { + case TK_ELSE: case TK_ELSEIF: case TK_END: + case TK_UNTIL: case TK_EOS: + return 1; + default: return 0; + } +} + + +static void block (LexState *ls) { + /* block -> chunk */ + FuncState *fs = ls->fs; + BlockCnt bl; + enterblock(fs, &bl, 0); + chunk(ls); + lua_assert(bl.breaklist == NO_JUMP); + leaveblock(fs); +} + + +/* +** structure to chain all variables in the left-hand side of an +** assignment +*/ +struct LHS_assign { + struct LHS_assign *prev; + expdesc v; /* variable (global, local, upvalue, or indexed) */ +}; + + +/* +** check whether, in an assignment to a local variable, the local variable +** is needed in a previous assignment (to a table). If so, save original +** local value in a safe place and use this safe copy in the previous +** assignment. +*/ +static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc *v) { + FuncState *fs = ls->fs; + int extra = fs->freereg; /* eventual position to save local variable */ + int conflict = 0; + for (; lh; lh = lh->prev) { + if (lh->v.k == VINDEXED) { + if (lh->v.u.s.info == v->u.s.info) { /* conflict? */ + conflict = 1; + lh->v.u.s.info = extra; /* previous assignment will use safe copy */ + } + if (lh->v.u.s.aux == v->u.s.info) { /* conflict? */ + conflict = 1; + lh->v.u.s.aux = extra; /* previous assignment will use safe copy */ + } + } + } + if (conflict) { + luaK_codeABC(fs, OP_MOVE, fs->freereg, v->u.s.info, 0); /* make copy */ + luaK_reserveregs(fs, 1); + } +} + + +static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) { + expdesc e; + check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED, + "syntax error"); + if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */ + struct LHS_assign nv; + nv.prev = lh; + primaryexp(ls, &nv.v); + if (nv.v.k == VLOCAL) + check_conflict(ls, lh, &nv.v); + assignment(ls, &nv, nvars+1); + } + else { /* assignment -> `=' explist1 */ + int nexps; + checknext(ls, '='); + nexps = explist1(ls, &e); + if (nexps != nvars) { + adjust_assign(ls, nvars, nexps, &e); + if (nexps > nvars) + ls->fs->freereg -= nexps - nvars; /* remove extra values */ + } + else { + luaK_setoneret(ls->fs, &e); /* close last expression */ + luaK_storevar(ls->fs, &lh->v, &e); + return; /* avoid default */ + } + } + init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */ + luaK_storevar(ls->fs, &lh->v, &e); +} + + +static int cond (LexState *ls) { + /* cond -> exp */ + expdesc v; + expr(ls, &v); /* read condition */ + if (v.k == VNIL) v.k = VFALSE; /* `falses' are all equal here */ + luaK_goiftrue(ls->fs, &v); + return v.f; +} + + +static void breakstat (LexState *ls) { + FuncState *fs = ls->fs; + BlockCnt *bl = fs->bl; + int upval = 0; + while (bl && !bl->isbreakable) { + upval |= bl->upval; + bl = bl->previous; + } + if (!bl) + luaX_syntaxerror(ls, "no loop to break"); + if (upval) + luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); + luaK_concat(fs, &bl->breaklist, luaK_jump(fs)); +} + + +static void whilestat (LexState *ls, int line) { + /* whilestat -> WHILE cond DO block END */ + FuncState *fs = ls->fs; + int whileinit; + int condexit; + BlockCnt bl; + luaX_next(ls); /* skip WHILE */ + whileinit = luaK_getlabel(fs); + condexit = cond(ls); + enterblock(fs, &bl, 1); + checknext(ls, TK_DO); + block(ls); + luaK_patchlist(fs, luaK_jump(fs), whileinit); + check_match(ls, TK_END, TK_WHILE, line); + leaveblock(fs); + luaK_patchtohere(fs, condexit); /* false conditions finish the loop */ +} + + +static void repeatstat (LexState *ls, int line) { + /* repeatstat -> REPEAT block UNTIL cond */ + int condexit; + FuncState *fs = ls->fs; + int repeat_init = luaK_getlabel(fs); + BlockCnt bl1, bl2; + enterblock(fs, &bl1, 1); /* loop block */ + enterblock(fs, &bl2, 0); /* scope block */ + luaX_next(ls); /* skip REPEAT */ + chunk(ls); + check_match(ls, TK_UNTIL, TK_REPEAT, line); + condexit = cond(ls); /* read condition (inside scope block) */ + if (!bl2.upval) { /* no upvalues? */ + leaveblock(fs); /* finish scope */ + luaK_patchlist(ls->fs, condexit, repeat_init); /* close the loop */ + } + else { /* complete semantics when there are upvalues */ + breakstat(ls); /* if condition then break */ + luaK_patchtohere(ls->fs, condexit); /* else... */ + leaveblock(fs); /* finish scope... */ + luaK_patchlist(ls->fs, luaK_jump(fs), repeat_init); /* and repeat */ + } + leaveblock(fs); /* finish loop */ +} + + +static int exp1 (LexState *ls) { + expdesc e; + int k; + expr(ls, &e); + k = e.k; + luaK_exp2nextreg(ls->fs, &e); + return k; +} + + +static void forbody (LexState *ls, int base, int line, int nvars, int isnum) { + /* forbody -> DO block */ + BlockCnt bl; + FuncState *fs = ls->fs; + int prep, endfor; + adjustlocalvars(ls, 3); /* control variables */ + checknext(ls, TK_DO); + prep = isnum ? luaK_codeAsBx(fs, OP_FORPREP, base, NO_JUMP) : luaK_jump(fs); + enterblock(fs, &bl, 0); /* scope for declared variables */ + adjustlocalvars(ls, nvars); + luaK_reserveregs(fs, nvars); + block(ls); + leaveblock(fs); /* end of scope for declared variables */ + luaK_patchtohere(fs, prep); + endfor = (isnum) ? luaK_codeAsBx(fs, OP_FORLOOP, base, NO_JUMP) : + luaK_codeABC(fs, OP_TFORLOOP, base, 0, nvars); + luaK_fixline(fs, line); /* pretend that `OP_FOR' starts the loop */ + luaK_patchlist(fs, (isnum ? endfor : luaK_jump(fs)), prep + 1); +} + + +static void fornum (LexState *ls, TString *varname, int line) { + /* fornum -> NAME = exp1,exp1[,exp1] forbody */ + FuncState *fs = ls->fs; + int base = fs->freereg; + new_localvarliteral(ls, "(for index)", 0); + new_localvarliteral(ls, "(for limit)", 1); + new_localvarliteral(ls, "(for step)", 2); + new_localvar(ls, varname, 3); + checknext(ls, '='); + exp1(ls); /* initial value */ + checknext(ls, ','); + exp1(ls); /* limit */ + if (testnext(ls, ',')) + exp1(ls); /* optional step */ + else { /* default step = 1 */ + luaK_codeABx(fs, OP_LOADK, fs->freereg, luaK_numberK(fs, 1)); + luaK_reserveregs(fs, 1); + } + forbody(ls, base, line, 1, 1); +} + + +static void forlist (LexState *ls, TString *indexname) { + /* forlist -> NAME {,NAME} IN explist1 forbody */ + FuncState *fs = ls->fs; + expdesc e; + int nvars = 0; + int line; + int base = fs->freereg; + /* create control variables */ + new_localvarliteral(ls, "(for generator)", nvars++); + new_localvarliteral(ls, "(for state)", nvars++); + new_localvarliteral(ls, "(for control)", nvars++); + /* create declared variables */ + new_localvar(ls, indexname, nvars++); + while (testnext(ls, ',')) + new_localvar(ls, str_checkname(ls), nvars++); + checknext(ls, TK_IN); + line = ls->linenumber; + adjust_assign(ls, 3, explist1(ls, &e), &e); + luaK_checkstack(fs, 3); /* extra space to call generator */ + forbody(ls, base, line, nvars - 3, 0); +} + + +static void forstat (LexState *ls, int line) { + /* forstat -> FOR (fornum | forlist) END */ + FuncState *fs = ls->fs; + TString *varname; + BlockCnt bl; + enterblock(fs, &bl, 1); /* scope for loop and control variables */ + luaX_next(ls); /* skip `for' */ + varname = str_checkname(ls); /* first variable name */ + switch (ls->t.token) { + case '=': fornum(ls, varname, line); break; + case ',': case TK_IN: forlist(ls, varname); break; + default: luaX_syntaxerror(ls, LUA_QL("=") " or " LUA_QL("in") " expected"); + } + check_match(ls, TK_END, TK_FOR, line); + leaveblock(fs); /* loop scope (`break' jumps to this point) */ +} + + +static int test_then_block (LexState *ls) { + /* test_then_block -> [IF | ELSEIF] cond THEN block */ + int condexit; + luaX_next(ls); /* skip IF or ELSEIF */ + condexit = cond(ls); + checknext(ls, TK_THEN); + block(ls); /* `then' part */ + return condexit; +} + + +static void ifstat (LexState *ls, int line) { + /* ifstat -> IF cond THEN block {ELSEIF cond THEN block} [ELSE block] END */ + FuncState *fs = ls->fs; + int flist; + int escapelist = NO_JUMP; + flist = test_then_block(ls); /* IF cond THEN block */ + while (ls->t.token == TK_ELSEIF) { + luaK_concat(fs, &escapelist, luaK_jump(fs)); + luaK_patchtohere(fs, flist); + flist = test_then_block(ls); /* ELSEIF cond THEN block */ + } + if (ls->t.token == TK_ELSE) { + luaK_concat(fs, &escapelist, luaK_jump(fs)); + luaK_patchtohere(fs, flist); + luaX_next(ls); /* skip ELSE (after patch, for correct line info) */ + block(ls); /* `else' part */ + } + else + luaK_concat(fs, &escapelist, flist); + luaK_patchtohere(fs, escapelist); + check_match(ls, TK_END, TK_IF, line); +} + + +static void localfunc (LexState *ls) { + expdesc v, b; + FuncState *fs = ls->fs; + new_localvar(ls, str_checkname(ls), 0); + init_exp(&v, VLOCAL, fs->freereg); + luaK_reserveregs(fs, 1); + adjustlocalvars(ls, 1); + body(ls, &b, 0, ls->linenumber); + luaK_storevar(fs, &v, &b); + /* debug information will only see the variable after this point! */ + getlocvar(fs, fs->nactvar - 1).startpc = fs->pc; +} + + +static void localstat (LexState *ls) { + /* stat -> LOCAL NAME {`,' NAME} [`=' explist1] */ + int nvars = 0; + int nexps; + expdesc e; + do { + new_localvar(ls, str_checkname(ls), nvars++); + } while (testnext(ls, ',')); + if (testnext(ls, '=')) + nexps = explist1(ls, &e); + else { + e.k = VVOID; + nexps = 0; + } + adjust_assign(ls, nvars, nexps, &e); + adjustlocalvars(ls, nvars); +} + + +static int funcname (LexState *ls, expdesc *v) { + /* funcname -> NAME {field} [`:' NAME] */ + int needself = 0; + singlevar(ls, v); + while (ls->t.token == '.') + field(ls, v); + if (ls->t.token == ':') { + needself = 1; + field(ls, v); + } + return needself; +} + + +static void funcstat (LexState *ls, int line) { + /* funcstat -> FUNCTION funcname body */ + int needself; + expdesc v, b; + luaX_next(ls); /* skip FUNCTION */ + needself = funcname(ls, &v); + body(ls, &b, needself, line); + luaK_storevar(ls->fs, &v, &b); + luaK_fixline(ls->fs, line); /* definition `happens' in the first line */ +} + + +static void exprstat (LexState *ls) { + /* stat -> func | assignment */ + FuncState *fs = ls->fs; + struct LHS_assign v; + primaryexp(ls, &v.v); + if (v.v.k == VCALL) /* stat -> func */ + SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */ + else { /* stat -> assignment */ + v.prev = NULL; + assignment(ls, &v, 1); + } +} + + +static void retstat (LexState *ls) { + /* stat -> RETURN explist */ + FuncState *fs = ls->fs; + expdesc e; + int first, nret; /* registers with returned values */ + luaX_next(ls); /* skip RETURN */ + if (block_follow(ls->t.token) || ls->t.token == ';') + first = nret = 0; /* return no values */ + else { + nret = explist1(ls, &e); /* optional return values */ + if (hasmultret(e.k)) { + luaK_setmultret(fs, &e); + if (e.k == VCALL && nret == 1) { /* tail call? */ + SET_OPCODE(getcode(fs,&e), OP_TAILCALL); + lua_assert(GETARG_A(getcode(fs,&e)) == fs->nactvar); + } + first = fs->nactvar; + nret = LUA_MULTRET; /* return all values */ + } + else { + if (nret == 1) /* only one single value? */ + first = luaK_exp2anyreg(fs, &e); + else { + luaK_exp2nextreg(fs, &e); /* values must go to the `stack' */ + first = fs->nactvar; /* return all `active' values */ + lua_assert(nret == fs->freereg - first); + } + } + } + luaK_ret(fs, first, nret); +} + + +static int statement (LexState *ls) { + int line = ls->linenumber; /* may be needed for error messages */ + switch (ls->t.token) { + case TK_IF: { /* stat -> ifstat */ + ifstat(ls, line); + return 0; + } + case TK_WHILE: { /* stat -> whilestat */ + whilestat(ls, line); + return 0; + } + case TK_DO: { /* stat -> DO block END */ + luaX_next(ls); /* skip DO */ + block(ls); + check_match(ls, TK_END, TK_DO, line); + return 0; + } + case TK_FOR: { /* stat -> forstat */ + forstat(ls, line); + return 0; + } + case TK_REPEAT: { /* stat -> repeatstat */ + repeatstat(ls, line); + return 0; + } + case TK_FUNCTION: { + funcstat(ls, line); /* stat -> funcstat */ + return 0; + } + case TK_LOCAL: { /* stat -> localstat */ + luaX_next(ls); /* skip LOCAL */ + if (testnext(ls, TK_FUNCTION)) /* local function? */ + localfunc(ls); + else + localstat(ls); + return 0; + } + case TK_RETURN: { /* stat -> retstat */ + retstat(ls); + return 1; /* must be last statement */ + } + case TK_BREAK: { /* stat -> breakstat */ + luaX_next(ls); /* skip BREAK */ + breakstat(ls); + return 1; /* must be last statement */ + } + default: { + exprstat(ls); + return 0; /* to avoid warnings */ + } + } +} + + +static void chunk (LexState *ls) { + /* chunk -> { stat [`;'] } */ + int islast = 0; + enterlevel(ls); + while (!islast && !block_follow(ls->t.token)) { + islast = statement(ls); + testnext(ls, ';'); + lua_assert(ls->fs->f->maxstacksize >= ls->fs->freereg && + ls->fs->freereg >= ls->fs->nactvar); + ls->fs->freereg = ls->fs->nactvar; /* free registers */ + } + leavelevel(ls); +} + +/* }====================================================================== */ diff --git a/lua/src/lparser.h b/lua/src/lparser.h new file mode 100644 index 0000000..e5b5b57 --- /dev/null +++ b/lua/src/lparser.h @@ -0,0 +1,82 @@ +/* +** $Id: lparser.h,v 1.57 2006/03/09 18:14:31 roberto Exp $ +** Lua Parser +** See Copyright Notice in lua.h +*/ + +#ifndef lparser_h +#define lparser_h + +#include "llimits.h" +#include "lobject.h" +#include "lzio.h" + + +/* +** Expression descriptor +*/ + +typedef enum { + VVOID, /* no value */ + VNIL, + VTRUE, + VFALSE, + VK, /* info = index of constant in `k' */ + VKNUM, /* nval = numerical value */ + VLOCAL, /* info = local register */ + VUPVAL, /* info = index of upvalue in `upvalues' */ + VGLOBAL, /* info = index of table; aux = index of global name in `k' */ + VINDEXED, /* info = table register; aux = index register (or `k') */ + VJMP, /* info = instruction pc */ + VRELOCABLE, /* info = instruction pc */ + VNONRELOC, /* info = result register */ + VCALL, /* info = instruction pc */ + VVARARG /* info = instruction pc */ +} expkind; + +typedef struct expdesc { + expkind k; + union { + struct { int info, aux; } s; + lua_Number nval; + } u; + int t; /* patch list of `exit when true' */ + int f; /* patch list of `exit when false' */ +} expdesc; + + +typedef struct upvaldesc { + lu_byte k; + lu_byte info; +} upvaldesc; + + +struct BlockCnt; /* defined in lparser.c */ + + +/* state needed to generate code for a given function */ +typedef struct FuncState { + Proto *f; /* current function header */ + Table *h; /* table to find (and reuse) elements in `k' */ + struct FuncState *prev; /* enclosing function */ + struct LexState *ls; /* lexical state */ + struct lua_State *L; /* copy of the Lua state */ + struct BlockCnt *bl; /* chain of current blocks */ + int pc; /* next position to code (equivalent to `ncode') */ + int lasttarget; /* `pc' of last `jump target' */ + int jpc; /* list of pending jumps to `pc' */ + int freereg; /* first free register */ + int nk; /* number of elements in `k' */ + int np; /* number of elements in `p' */ + short nlocvars; /* number of elements in `locvars' */ + lu_byte nactvar; /* number of active local variables */ + upvaldesc upvalues[LUAI_MAXUPVALUES]; /* upvalues */ + unsigned short actvar[LUAI_MAXVARS]; /* declared-variable stack */ +} FuncState; + + +LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, + const char *name); + + +#endif diff --git a/lua/src/lstate.c b/lua/src/lstate.c new file mode 100644 index 0000000..4bcb759 --- /dev/null +++ b/lua/src/lstate.c @@ -0,0 +1,214 @@ +/* +** $Id: lstate.c,v 2.36 2006/05/24 14:15:50 roberto Exp $ +** Global State +** See Copyright Notice in lua.h +*/ + + +#include + +#define lstate_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "llex.h" +#include "lmem.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + +#define state_size(x) (sizeof(x) + LUAI_EXTRASPACE) +#define fromstate(l) (cast(lu_byte *, (l)) - LUAI_EXTRASPACE) +#define tostate(l) (cast(lua_State *, cast(lu_byte *, l) + LUAI_EXTRASPACE)) + + +/* +** Main thread combines a thread state and the global state +*/ +typedef struct LG { + lua_State l; + global_State g; +} LG; + + + +static void stack_init (lua_State *L1, lua_State *L) { + /* initialize CallInfo array */ + L1->base_ci = luaM_newvector(L, BASIC_CI_SIZE, CallInfo); + L1->ci = L1->base_ci; + L1->size_ci = BASIC_CI_SIZE; + L1->end_ci = L1->base_ci + L1->size_ci - 1; + /* initialize stack array */ + L1->stack = luaM_newvector(L, BASIC_STACK_SIZE + EXTRA_STACK, TValue); + L1->stacksize = BASIC_STACK_SIZE + EXTRA_STACK; + L1->top = L1->stack; + L1->stack_last = L1->stack+(L1->stacksize - EXTRA_STACK)-1; + /* initialize first ci */ + L1->ci->func = L1->top; + setnilvalue(L1->top++); /* `function' entry for this `ci' */ + L1->base = L1->ci->base = L1->top; + L1->ci->top = L1->top + LUA_MINSTACK; +} + + +static void freestack (lua_State *L, lua_State *L1) { + luaM_freearray(L, L1->base_ci, L1->size_ci, CallInfo); + luaM_freearray(L, L1->stack, L1->stacksize, TValue); +} + + +/* +** open parts that may cause memory-allocation errors +*/ +static void f_luaopen (lua_State *L, void *ud) { + global_State *g = G(L); + UNUSED(ud); + stack_init(L, L); /* init stack */ + sethvalue(L, gt(L), luaH_new(L, 0, 2)); /* table of globals */ + sethvalue(L, registry(L), luaH_new(L, 0, 2)); /* registry */ + luaS_resize(L, MINSTRTABSIZE); /* initial size of string table */ + luaT_init(L); + luaX_init(L); + luaS_fix(luaS_newliteral(L, MEMERRMSG)); + g->GCthreshold = 4*g->totalbytes; +} + + +static void preinit_state (lua_State *L, global_State *g) { + G(L) = g; + L->stack = NULL; + L->stacksize = 0; + L->errorJmp = NULL; + L->hook = NULL; + L->hookmask = 0; + L->basehookcount = 0; + L->allowhook = 1; + resethookcount(L); + L->openupval = NULL; + L->size_ci = 0; + L->nCcalls = 0; + L->status = 0; + L->base_ci = L->ci = NULL; + L->savedpc = NULL; + L->errfunc = 0; + setnilvalue(gt(L)); +} + + +static void close_state (lua_State *L) { + global_State *g = G(L); + luaF_close(L, L->stack); /* close all upvalues for this thread */ + luaC_freeall(L); /* collect all objects */ + lua_assert(g->rootgc == obj2gco(L)); + lua_assert(g->strt.nuse == 0); + luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size, TString *); + luaZ_freebuffer(L, &g->buff); + freestack(L, L); + lua_assert(g->totalbytes == sizeof(LG)); + (*g->frealloc)(g->ud, fromstate(L), state_size(LG), 0); +} + + +lua_State *luaE_newthread (lua_State *L) { + lua_State *L1 = tostate(luaM_malloc(L, state_size(lua_State))); + luaC_link(L, obj2gco(L1), LUA_TTHREAD); + preinit_state(L1, G(L)); + stack_init(L1, L); /* init stack */ + setobj2n(L, gt(L1), gt(L)); /* share table of globals */ + L1->hookmask = L->hookmask; + L1->basehookcount = L->basehookcount; + L1->hook = L->hook; + resethookcount(L1); + lua_assert(iswhite(obj2gco(L1))); + return L1; +} + + +void luaE_freethread (lua_State *L, lua_State *L1) { + luaF_close(L1, L1->stack); /* close all upvalues for this thread */ + lua_assert(L1->openupval == NULL); + luai_userstatefree(L1); + freestack(L, L1); + luaM_freemem(L, fromstate(L1), state_size(lua_State)); +} + + +LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { + int i; + lua_State *L; + global_State *g; + void *l = (*f)(ud, NULL, 0, state_size(LG)); + if (l == NULL) return NULL; + L = tostate(l); + g = &((LG *)L)->g; + L->next = NULL; + L->tt = LUA_TTHREAD; + g->currentwhite = bit2mask(WHITE0BIT, FIXEDBIT); + L->marked = luaC_white(g); + set2bits(L->marked, FIXEDBIT, SFIXEDBIT); + preinit_state(L, g); + g->frealloc = f; + g->ud = ud; + g->mainthread = L; + g->uvhead.u.l.prev = &g->uvhead; + g->uvhead.u.l.next = &g->uvhead; + g->GCthreshold = 0; /* mark it as unfinished state */ + g->strt.size = 0; + g->strt.nuse = 0; + g->strt.hash = NULL; + setnilvalue(registry(L)); + luaZ_initbuffer(L, &g->buff); + g->panic = NULL; + g->gcstate = GCSpause; + g->rootgc = obj2gco(L); + g->sweepstrgc = 0; + g->sweepgc = &g->rootgc; + g->gray = NULL; + g->grayagain = NULL; + g->weak = NULL; + g->tmudata = NULL; + g->totalbytes = sizeof(LG); + g->gcpause = LUAI_GCPAUSE; + g->gcstepmul = LUAI_GCMUL; + g->gcdept = 0; + for (i=0; imt[i] = NULL; + if (luaD_rawrunprotected(L, f_luaopen, NULL) != 0) { + /* memory allocation error: free partial state */ + close_state(L); + L = NULL; + } + else + luai_userstateopen(L); + return L; +} + + +static void callallgcTM (lua_State *L, void *ud) { + UNUSED(ud); + luaC_callGCTM(L); /* call GC metamethods for all udata */ +} + + +LUA_API void lua_close (lua_State *L) { + L = G(L)->mainthread; /* only the main thread can be closed */ + lua_lock(L); + luaF_close(L, L->stack); /* close all upvalues for this thread */ + luaC_separateudata(L, 1); /* separate udata that have GC metamethods */ + L->errfunc = 0; /* no error function during GC metamethods */ + do { /* repeat until no more errors */ + L->ci = L->base_ci; + L->base = L->top = L->ci->base; + L->nCcalls = 0; + } while (luaD_rawrunprotected(L, callallgcTM, NULL) != 0); + lua_assert(G(L)->tmudata == NULL); + luai_userstateclose(L); + close_state(L); +} + diff --git a/lua/src/lstate.h b/lua/src/lstate.h new file mode 100644 index 0000000..d296a4c --- /dev/null +++ b/lua/src/lstate.h @@ -0,0 +1,168 @@ +/* +** $Id: lstate.h,v 2.24 2006/02/06 18:27:59 roberto Exp $ +** Global State +** See Copyright Notice in lua.h +*/ + +#ifndef lstate_h +#define lstate_h + +#include "lua.h" + +#include "lobject.h" +#include "ltm.h" +#include "lzio.h" + + + +struct lua_longjmp; /* defined in ldo.c */ + + +/* table of globals */ +#define gt(L) (&L->l_gt) + +/* registry */ +#define registry(L) (&G(L)->l_registry) + + +/* extra stack space to handle TM calls and some other extras */ +#define EXTRA_STACK 5 + + +#define BASIC_CI_SIZE 8 + +#define BASIC_STACK_SIZE (2*LUA_MINSTACK) + + + +typedef struct stringtable { + GCObject **hash; + lu_int32 nuse; /* number of elements */ + int size; +} stringtable; + + +/* +** informations about a call +*/ +typedef struct CallInfo { + StkId base; /* base for this function */ + StkId func; /* function index in the stack */ + StkId top; /* top for this function */ + const Instruction *savedpc; + int nresults; /* expected number of results from this function */ + int tailcalls; /* number of tail calls lost under this entry */ +} CallInfo; + + + +#define curr_func(L) (clvalue(L->ci->func)) +#define ci_func(ci) (clvalue((ci)->func)) +#define f_isLua(ci) (!ci_func(ci)->c.isC) +#define isLua(ci) (ttisfunction((ci)->func) && f_isLua(ci)) + + +/* +** `global state', shared by all threads of this state +*/ +typedef struct global_State { + stringtable strt; /* hash table for strings */ + lua_Alloc frealloc; /* function to reallocate memory */ + void *ud; /* auxiliary data to `frealloc' */ + lu_byte currentwhite; + lu_byte gcstate; /* state of garbage collector */ + int sweepstrgc; /* position of sweep in `strt' */ + GCObject *rootgc; /* list of all collectable objects */ + GCObject **sweepgc; /* position of sweep in `rootgc' */ + GCObject *gray; /* list of gray objects */ + GCObject *grayagain; /* list of objects to be traversed atomically */ + GCObject *weak; /* list of weak tables (to be cleared) */ + GCObject *tmudata; /* last element of list of userdata to be GC */ + Mbuffer buff; /* temporary buffer for string concatentation */ + lu_mem GCthreshold; + lu_mem totalbytes; /* number of bytes currently allocated */ + lu_mem estimate; /* an estimate of number of bytes actually in use */ + lu_mem gcdept; /* how much GC is `behind schedule' */ + int gcpause; /* size of pause between successive GCs */ + int gcstepmul; /* GC `granularity' */ + lua_CFunction panic; /* to be called in unprotected errors */ + TValue l_registry; + struct lua_State *mainthread; + UpVal uvhead; /* head of double-linked list of all open upvalues */ + struct Table *mt[NUM_TAGS]; /* metatables for basic types */ + TString *tmname[TM_N]; /* array with tag-method names */ +} global_State; + + +/* +** `per thread' state +*/ +struct lua_State { + CommonHeader; + lu_byte status; + StkId top; /* first free slot in the stack */ + StkId base; /* base of current function */ + global_State *l_G; + CallInfo *ci; /* call info for current function */ + const Instruction *savedpc; /* `savedpc' of current function */ + StkId stack_last; /* last free slot in the stack */ + StkId stack; /* stack base */ + CallInfo *end_ci; /* points after end of ci array*/ + CallInfo *base_ci; /* array of CallInfo's */ + int stacksize; + int size_ci; /* size of array `base_ci' */ + unsigned short nCcalls; /* number of nested C calls */ + lu_byte hookmask; + lu_byte allowhook; + int basehookcount; + int hookcount; + lua_Hook hook; + TValue l_gt; /* table of globals */ + TValue env; /* temporary place for environments */ + GCObject *openupval; /* list of open upvalues in this stack */ + GCObject *gclist; + struct lua_longjmp *errorJmp; /* current error recover point */ + ptrdiff_t errfunc; /* current error handling function (stack index) */ +}; + + +#define G(L) (L->l_G) + + +/* +** Union of all collectable objects +*/ +union GCObject { + GCheader gch; + union TString ts; + union Udata u; + union Closure cl; + struct Table h; + struct Proto p; + struct UpVal uv; + struct lua_State th; /* thread */ +}; + + +/* macros to convert a GCObject into a specific value */ +#define rawgco2ts(o) check_exp((o)->gch.tt == LUA_TSTRING, &((o)->ts)) +#define gco2ts(o) (&rawgco2ts(o)->tsv) +#define rawgco2u(o) check_exp((o)->gch.tt == LUA_TUSERDATA, &((o)->u)) +#define gco2u(o) (&rawgco2u(o)->uv) +#define gco2cl(o) check_exp((o)->gch.tt == LUA_TFUNCTION, &((o)->cl)) +#define gco2h(o) check_exp((o)->gch.tt == LUA_TTABLE, &((o)->h)) +#define gco2p(o) check_exp((o)->gch.tt == LUA_TPROTO, &((o)->p)) +#define gco2uv(o) check_exp((o)->gch.tt == LUA_TUPVAL, &((o)->uv)) +#define ngcotouv(o) \ + check_exp((o) == NULL || (o)->gch.tt == LUA_TUPVAL, &((o)->uv)) +#define gco2th(o) check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th)) + +/* macro to convert any Lua object into a GCObject */ +#define obj2gco(v) (cast(GCObject *, (v))) + + +LUAI_FUNC lua_State *luaE_newthread (lua_State *L); +LUAI_FUNC void luaE_freethread (lua_State *L, lua_State *L1); + +#endif + diff --git a/lua/src/lstring.c b/lua/src/lstring.c new file mode 100644 index 0000000..4319930 --- /dev/null +++ b/lua/src/lstring.c @@ -0,0 +1,111 @@ +/* +** $Id: lstring.c,v 2.8 2005/12/22 16:19:56 roberto Exp $ +** String table (keeps all strings handled by Lua) +** See Copyright Notice in lua.h +*/ + + +#include + +#define lstring_c +#define LUA_CORE + +#include "lua.h" + +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" + + + +void luaS_resize (lua_State *L, int newsize) { + GCObject **newhash; + stringtable *tb; + int i; + if (G(L)->gcstate == GCSsweepstring) + return; /* cannot resize during GC traverse */ + newhash = luaM_newvector(L, newsize, GCObject *); + tb = &G(L)->strt; + for (i=0; isize; i++) { + GCObject *p = tb->hash[i]; + while (p) { /* for each node in the list */ + GCObject *next = p->gch.next; /* save next */ + unsigned int h = gco2ts(p)->hash; + int h1 = lmod(h, newsize); /* new position */ + lua_assert(cast_int(h%newsize) == lmod(h, newsize)); + p->gch.next = newhash[h1]; /* chain it */ + newhash[h1] = p; + p = next; + } + } + luaM_freearray(L, tb->hash, tb->size, TString *); + tb->size = newsize; + tb->hash = newhash; +} + + +static TString *newlstr (lua_State *L, const char *str, size_t l, + unsigned int h) { + TString *ts; + stringtable *tb; + if (l+1 > (MAX_SIZET - sizeof(TString))/sizeof(char)) + luaM_toobig(L); + ts = cast(TString *, luaM_malloc(L, (l+1)*sizeof(char)+sizeof(TString))); + ts->tsv.len = l; + ts->tsv.hash = h; + ts->tsv.marked = luaC_white(G(L)); + ts->tsv.tt = LUA_TSTRING; + ts->tsv.reserved = 0; + memcpy(ts+1, str, l*sizeof(char)); + ((char *)(ts+1))[l] = '\0'; /* ending 0 */ + tb = &G(L)->strt; + h = lmod(h, tb->size); + ts->tsv.next = tb->hash[h]; /* chain new entry */ + tb->hash[h] = obj2gco(ts); + tb->nuse++; + if (tb->nuse > cast(lu_int32, tb->size) && tb->size <= MAX_INT/2) + luaS_resize(L, tb->size*2); /* too crowded */ + return ts; +} + + +TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { + GCObject *o; + unsigned int h = cast(unsigned int, l); /* seed */ + size_t step = (l>>5)+1; /* if string is too long, don't hash all its chars */ + size_t l1; + for (l1=l; l1>=step; l1-=step) /* compute hash */ + h = h ^ ((h<<5)+(h>>2)+cast(unsigned char, str[l1-1])); + for (o = G(L)->strt.hash[lmod(h, G(L)->strt.size)]; + o != NULL; + o = o->gch.next) { + TString *ts = rawgco2ts(o); + if (ts->tsv.len == l && (memcmp(str, getstr(ts), l) == 0)) { + /* string may be dead */ + if (isdead(G(L), o)) changewhite(o); + return ts; + } + } + return newlstr(L, str, l, h); /* not found */ +} + + +Udata *luaS_newudata (lua_State *L, size_t s, Table *e) { + Udata *u; + if (s > MAX_SIZET - sizeof(Udata)) + luaM_toobig(L); + u = cast(Udata *, luaM_malloc(L, s + sizeof(Udata))); + u->uv.marked = luaC_white(G(L)); /* is not finalized */ + u->uv.tt = LUA_TUSERDATA; + u->uv.len = s; + u->uv.metatable = NULL; + u->uv.env = e; + /* chain it on udata list (after main thread) */ + u->uv.next = G(L)->mainthread->next; + G(L)->mainthread->next = obj2gco(u); + return u; +} + diff --git a/lua/src/lstring.h b/lua/src/lstring.h new file mode 100644 index 0000000..1d2e91e --- /dev/null +++ b/lua/src/lstring.h @@ -0,0 +1,31 @@ +/* +** $Id: lstring.h,v 1.43 2005/04/25 19:24:10 roberto Exp $ +** String table (keep all strings handled by Lua) +** See Copyright Notice in lua.h +*/ + +#ifndef lstring_h +#define lstring_h + + +#include "lgc.h" +#include "lobject.h" +#include "lstate.h" + + +#define sizestring(s) (sizeof(union TString)+((s)->len+1)*sizeof(char)) + +#define sizeudata(u) (sizeof(union Udata)+(u)->len) + +#define luaS_new(L, s) (luaS_newlstr(L, s, strlen(s))) +#define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \ + (sizeof(s)/sizeof(char))-1)) + +#define luaS_fix(s) l_setbit((s)->tsv.marked, FIXEDBIT) + +LUAI_FUNC void luaS_resize (lua_State *L, int newsize); +LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s, Table *e); +LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); + + +#endif diff --git a/lua/src/lstrlib.c b/lua/src/lstrlib.c new file mode 100644 index 0000000..fc7ae48 --- /dev/null +++ b/lua/src/lstrlib.c @@ -0,0 +1,868 @@ +/* +** $Id: lstrlib.c,v 1.132a 2006/04/26 20:41:19 roberto Exp $ +** Standard library for string operations and pattern-matching +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include +#include + +#define lstrlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* macro to `unsign' a character */ +#define uchar(c) ((unsigned char)(c)) + + + +static int str_len (lua_State *L) { + size_t l; + luaL_checklstring(L, 1, &l); + lua_pushinteger(L, l); + return 1; +} + + +static ptrdiff_t posrelat (ptrdiff_t pos, size_t len) { + /* relative string position: negative means back from end */ + return (pos>=0) ? pos : (ptrdiff_t)len+pos+1; +} + + +static int str_sub (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + ptrdiff_t start = posrelat(luaL_checkinteger(L, 2), l); + ptrdiff_t end = posrelat(luaL_optinteger(L, 3, -1), l); + if (start < 1) start = 1; + if (end > (ptrdiff_t)l) end = (ptrdiff_t)l; + if (start <= end) + lua_pushlstring(L, s+start-1, end-start+1); + else lua_pushliteral(L, ""); + return 1; +} + + +static int str_reverse (lua_State *L) { + size_t l; + luaL_Buffer b; + const char *s = luaL_checklstring(L, 1, &l); + luaL_buffinit(L, &b); + while (l--) luaL_addchar(&b, s[l]); + luaL_pushresult(&b); + return 1; +} + + +static int str_lower (lua_State *L) { + size_t l; + size_t i; + luaL_Buffer b; + const char *s = luaL_checklstring(L, 1, &l); + luaL_buffinit(L, &b); + for (i=0; i 0) + luaL_addlstring(&b, s, l); + luaL_pushresult(&b); + return 1; +} + + +static int str_byte (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + ptrdiff_t posi = posrelat(luaL_optinteger(L, 2, 1), l); + ptrdiff_t pose = posrelat(luaL_optinteger(L, 3, posi), l); + int n, i; + if (posi <= 0) posi = 1; + if ((size_t)pose > l) pose = l; + if (posi > pose) return 0; /* empty interval; return no values */ + n = (int)(pose - posi + 1); + if (posi + n <= pose) /* overflow? */ + luaL_error(L, "string slice too long"); + luaL_checkstack(L, n, "string slice too long"); + for (i=0; i= ms->level || ms->capture[l].len == CAP_UNFINISHED) + return luaL_error(ms->L, "invalid capture index"); + return l; +} + + +static int capture_to_close (MatchState *ms) { + int level = ms->level; + for (level--; level>=0; level--) + if (ms->capture[level].len == CAP_UNFINISHED) return level; + return luaL_error(ms->L, "invalid pattern capture"); +} + + +static const char *classend (MatchState *ms, const char *p) { + switch (*p++) { + case L_ESC: { + if (*p == '\0') + luaL_error(ms->L, "malformed pattern (ends with " LUA_QL("%%") ")"); + return p+1; + } + case '[': { + if (*p == '^') p++; + do { /* look for a `]' */ + if (*p == '\0') + luaL_error(ms->L, "malformed pattern (missing " LUA_QL("]") ")"); + if (*(p++) == L_ESC && *p != '\0') + p++; /* skip escapes (e.g. `%]') */ + } while (*p != ']'); + return p+1; + } + default: { + return p; + } + } +} + + +static int match_class (int c, int cl) { + int res; + switch (tolower(cl)) { + case 'a' : res = isalpha(c); break; + case 'c' : res = iscntrl(c); break; + case 'd' : res = isdigit(c); break; + case 'l' : res = islower(c); break; + case 'p' : res = ispunct(c); break; + case 's' : res = isspace(c); break; + case 'u' : res = isupper(c); break; + case 'w' : res = isalnum(c); break; + case 'x' : res = isxdigit(c); break; + case 'z' : res = (c == 0); break; + default: return (cl == c); + } + return (islower(cl) ? res : !res); +} + + +static int matchbracketclass (int c, const char *p, const char *ec) { + int sig = 1; + if (*(p+1) == '^') { + sig = 0; + p++; /* skip the `^' */ + } + while (++p < ec) { + if (*p == L_ESC) { + p++; + if (match_class(c, uchar(*p))) + return sig; + } + else if ((*(p+1) == '-') && (p+2 < ec)) { + p+=2; + if (uchar(*(p-2)) <= c && c <= uchar(*p)) + return sig; + } + else if (uchar(*p) == c) return sig; + } + return !sig; +} + + +static int singlematch (int c, const char *p, const char *ep) { + switch (*p) { + case '.': return 1; /* matches any char */ + case L_ESC: return match_class(c, uchar(*(p+1))); + case '[': return matchbracketclass(c, p, ep-1); + default: return (uchar(*p) == c); + } +} + + +static const char *match (MatchState *ms, const char *s, const char *p); + + +static const char *matchbalance (MatchState *ms, const char *s, + const char *p) { + if (*p == 0 || *(p+1) == 0) + luaL_error(ms->L, "unbalanced pattern"); + if (*s != *p) return NULL; + else { + int b = *p; + int e = *(p+1); + int cont = 1; + while (++s < ms->src_end) { + if (*s == e) { + if (--cont == 0) return s+1; + } + else if (*s == b) cont++; + } + } + return NULL; /* string ends out of balance */ +} + + +static const char *max_expand (MatchState *ms, const char *s, + const char *p, const char *ep) { + ptrdiff_t i = 0; /* counts maximum expand for item */ + while ((s+i)src_end && singlematch(uchar(*(s+i)), p, ep)) + i++; + /* keeps trying to match with the maximum repetitions */ + while (i>=0) { + const char *res = match(ms, (s+i), ep+1); + if (res) return res; + i--; /* else didn't match; reduce 1 repetition to try again */ + } + return NULL; +} + + +static const char *min_expand (MatchState *ms, const char *s, + const char *p, const char *ep) { + for (;;) { + const char *res = match(ms, s, ep+1); + if (res != NULL) + return res; + else if (ssrc_end && singlematch(uchar(*s), p, ep)) + s++; /* try with one more repetition */ + else return NULL; + } +} + + +static const char *start_capture (MatchState *ms, const char *s, + const char *p, int what) { + const char *res; + int level = ms->level; + if (level >= LUA_MAXCAPTURES) luaL_error(ms->L, "too many captures"); + ms->capture[level].init = s; + ms->capture[level].len = what; + ms->level = level+1; + if ((res=match(ms, s, p)) == NULL) /* match failed? */ + ms->level--; /* undo capture */ + return res; +} + + +static const char *end_capture (MatchState *ms, const char *s, + const char *p) { + int l = capture_to_close(ms); + const char *res; + ms->capture[l].len = s - ms->capture[l].init; /* close capture */ + if ((res = match(ms, s, p)) == NULL) /* match failed? */ + ms->capture[l].len = CAP_UNFINISHED; /* undo capture */ + return res; +} + + +static const char *match_capture (MatchState *ms, const char *s, int l) { + size_t len; + l = check_capture(ms, l); + len = ms->capture[l].len; + if ((size_t)(ms->src_end-s) >= len && + memcmp(ms->capture[l].init, s, len) == 0) + return s+len; + else return NULL; +} + + +static const char *match (MatchState *ms, const char *s, const char *p) { + init: /* using goto's to optimize tail recursion */ + switch (*p) { + case '(': { /* start capture */ + if (*(p+1) == ')') /* position capture? */ + return start_capture(ms, s, p+2, CAP_POSITION); + else + return start_capture(ms, s, p+1, CAP_UNFINISHED); + } + case ')': { /* end capture */ + return end_capture(ms, s, p+1); + } + case L_ESC: { + switch (*(p+1)) { + case 'b': { /* balanced string? */ + s = matchbalance(ms, s, p+2); + if (s == NULL) return NULL; + p+=4; goto init; /* else return match(ms, s, p+4); */ + } + case 'f': { /* frontier? */ + const char *ep; char previous; + p += 2; + if (*p != '[') + luaL_error(ms->L, "missing " LUA_QL("[") " after " + LUA_QL("%%f") " in pattern"); + ep = classend(ms, p); /* points to what is next */ + previous = (s == ms->src_init) ? '\0' : *(s-1); + if (matchbracketclass(uchar(previous), p, ep-1) || + !matchbracketclass(uchar(*s), p, ep-1)) return NULL; + p=ep; goto init; /* else return match(ms, s, ep); */ + } + default: { + if (isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */ + s = match_capture(ms, s, uchar(*(p+1))); + if (s == NULL) return NULL; + p+=2; goto init; /* else return match(ms, s, p+2) */ + } + goto dflt; /* case default */ + } + } + } + case '\0': { /* end of pattern */ + return s; /* match succeeded */ + } + case '$': { + if (*(p+1) == '\0') /* is the `$' the last char in pattern? */ + return (s == ms->src_end) ? s : NULL; /* check end of string */ + else goto dflt; + } + default: dflt: { /* it is a pattern item */ + const char *ep = classend(ms, p); /* points to what is next */ + int m = ssrc_end && singlematch(uchar(*s), p, ep); + switch (*ep) { + case '?': { /* optional */ + const char *res; + if (m && ((res=match(ms, s+1, ep+1)) != NULL)) + return res; + p=ep+1; goto init; /* else return match(ms, s, ep+1); */ + } + case '*': { /* 0 or more repetitions */ + return max_expand(ms, s, p, ep); + } + case '+': { /* 1 or more repetitions */ + return (m ? max_expand(ms, s+1, p, ep) : NULL); + } + case '-': { /* 0 or more repetitions (minimum) */ + return min_expand(ms, s, p, ep); + } + default: { + if (!m) return NULL; + s++; p=ep; goto init; /* else return match(ms, s+1, ep); */ + } + } + } + } +} + + + +static const char *lmemfind (const char *s1, size_t l1, + const char *s2, size_t l2) { + if (l2 == 0) return s1; /* empty strings are everywhere */ + else if (l2 > l1) return NULL; /* avoids a negative `l1' */ + else { + const char *init; /* to search for a `*s2' inside `s1' */ + l2--; /* 1st char will be checked by `memchr' */ + l1 = l1-l2; /* `s2' cannot be found after that */ + while (l1 > 0 && (init = (const char *)memchr(s1, *s2, l1)) != NULL) { + init++; /* 1st char is already checked */ + if (memcmp(init, s2+1, l2) == 0) + return init-1; + else { /* correct `l1' and `s1' to try again */ + l1 -= init-s1; + s1 = init; + } + } + return NULL; /* not found */ + } +} + + +static void push_onecapture (MatchState *ms, int i, const char *s, + const char *e) { + if (i >= ms->level) { + if (i == 0) /* ms->level == 0, too */ + lua_pushlstring(ms->L, s, e - s); /* add whole match */ + else + luaL_error(ms->L, "invalid capture index"); + } + else { + ptrdiff_t l = ms->capture[i].len; + if (l == CAP_UNFINISHED) luaL_error(ms->L, "unfinished capture"); + if (l == CAP_POSITION) + lua_pushinteger(ms->L, ms->capture[i].init - ms->src_init + 1); + else + lua_pushlstring(ms->L, ms->capture[i].init, l); + } +} + + +static int push_captures (MatchState *ms, const char *s, const char *e) { + int i; + int nlevels = (ms->level == 0 && s) ? 1 : ms->level; + luaL_checkstack(ms->L, nlevels, "too many captures"); + for (i = 0; i < nlevels; i++) + push_onecapture(ms, i, s, e); + return nlevels; /* number of strings pushed */ +} + + +static int str_find_aux (lua_State *L, int find) { + size_t l1, l2; + const char *s = luaL_checklstring(L, 1, &l1); + const char *p = luaL_checklstring(L, 2, &l2); + ptrdiff_t init = posrelat(luaL_optinteger(L, 3, 1), l1) - 1; + if (init < 0) init = 0; + else if ((size_t)(init) > l1) init = (ptrdiff_t)l1; + if (find && (lua_toboolean(L, 4) || /* explicit request? */ + strpbrk(p, SPECIALS) == NULL)) { /* or no special characters? */ + /* do a plain search */ + const char *s2 = lmemfind(s+init, l1-init, p, l2); + if (s2) { + lua_pushinteger(L, s2-s+1); + lua_pushinteger(L, s2-s+l2); + return 2; + } + } + else { + MatchState ms; + int anchor = (*p == '^') ? (p++, 1) : 0; + const char *s1=s+init; + ms.L = L; + ms.src_init = s; + ms.src_end = s+l1; + do { + const char *res; + ms.level = 0; + if ((res=match(&ms, s1, p)) != NULL) { + if (find) { + lua_pushinteger(L, s1-s+1); /* start */ + lua_pushinteger(L, res-s); /* end */ + return push_captures(&ms, NULL, 0) + 2; + } + else + return push_captures(&ms, s1, res); + } + } while (s1++ < ms.src_end && !anchor); + } + lua_pushnil(L); /* not found */ + return 1; +} + + +static int str_find (lua_State *L) { + return str_find_aux(L, 1); +} + + +static int str_match (lua_State *L) { + return str_find_aux(L, 0); +} + + +static int gmatch_aux (lua_State *L) { + MatchState ms; + size_t ls; + const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls); + const char *p = lua_tostring(L, lua_upvalueindex(2)); + const char *src; + ms.L = L; + ms.src_init = s; + ms.src_end = s+ls; + for (src = s + (size_t)lua_tointeger(L, lua_upvalueindex(3)); + src <= ms.src_end; + src++) { + const char *e; + ms.level = 0; + if ((e = match(&ms, src, p)) != NULL) { + lua_Integer newstart = e-s; + if (e == src) newstart++; /* empty match? go at least one position */ + lua_pushinteger(L, newstart); + lua_replace(L, lua_upvalueindex(3)); + return push_captures(&ms, src, e); + } + } + return 0; /* not found */ +} + + +static int gmatch (lua_State *L) { + luaL_checkstring(L, 1); + luaL_checkstring(L, 2); + lua_settop(L, 2); + lua_pushinteger(L, 0); + lua_pushcclosure(L, gmatch_aux, 3); + return 1; +} + + +static int gfind_nodef (lua_State *L) { + return luaL_error(L, LUA_QL("string.gfind") " was renamed to " + LUA_QL("string.gmatch")); +} + + +static void add_s (MatchState *ms, luaL_Buffer *b, const char *s, + const char *e) { + size_t l, i; + const char *news = lua_tolstring(ms->L, 3, &l); + for (i = 0; i < l; i++) { + if (news[i] != L_ESC) + luaL_addchar(b, news[i]); + else { + i++; /* skip ESC */ + if (!isdigit(uchar(news[i]))) + luaL_addchar(b, news[i]); + else if (news[i] == '0') + luaL_addlstring(b, s, e - s); + else { + push_onecapture(ms, news[i] - '1', s, e); + luaL_addvalue(b); /* add capture to accumulated result */ + } + } + } +} + + +static void add_value (MatchState *ms, luaL_Buffer *b, const char *s, + const char *e) { + lua_State *L = ms->L; + switch (lua_type(L, 3)) { + case LUA_TNUMBER: + case LUA_TSTRING: { + add_s(ms, b, s, e); + return; + } + case LUA_TFUNCTION: { + int n; + lua_pushvalue(L, 3); + n = push_captures(ms, s, e); + lua_call(L, n, 1); + break; + } + case LUA_TTABLE: { + push_onecapture(ms, 0, s, e); + lua_gettable(L, 3); + break; + } + default: { + luaL_argerror(L, 3, "string/function/table expected"); + return; + } + } + if (!lua_toboolean(L, -1)) { /* nil or false? */ + lua_pop(L, 1); + lua_pushlstring(L, s, e - s); /* keep original text */ + } + else if (!lua_isstring(L, -1)) + luaL_error(L, "invalid replacement value (a %s)", luaL_typename(L, -1)); + luaL_addvalue(b); /* add result to accumulator */ +} + + +static int str_gsub (lua_State *L) { + size_t srcl; + const char *src = luaL_checklstring(L, 1, &srcl); + const char *p = luaL_checkstring(L, 2); + int max_s = luaL_optint(L, 4, srcl+1); + int anchor = (*p == '^') ? (p++, 1) : 0; + int n = 0; + MatchState ms; + luaL_Buffer b; + luaL_buffinit(L, &b); + ms.L = L; + ms.src_init = src; + ms.src_end = src+srcl; + while (n < max_s) { + const char *e; + ms.level = 0; + e = match(&ms, src, p); + if (e) { + n++; + add_value(&ms, &b, src, e); + } + if (e && e>src) /* non empty match? */ + src = e; /* skip it */ + else if (src < ms.src_end) + luaL_addchar(&b, *src++); + else break; + if (anchor) break; + } + luaL_addlstring(&b, src, ms.src_end-src); + luaL_pushresult(&b); + lua_pushinteger(L, n); /* number of substitutions */ + return 2; +} + +/* }====================================================== */ + + +/* maximum size of each formatted item (> len(format('%99.99f', -1e308))) */ +#define MAX_ITEM 512 +/* valid flags in a format specification */ +#define FLAGS "-+ #0" +/* +** maximum size of each format specification (such as '%-099.99d') +** (+10 accounts for %99.99x plus margin of error) +*/ +#define MAX_FORMAT (sizeof(FLAGS) + sizeof(LUA_INTFRMLEN) + 10) + + +static void addquoted (lua_State *L, luaL_Buffer *b, int arg) { + size_t l; + const char *s = luaL_checklstring(L, arg, &l); + luaL_addchar(b, '"'); + while (l--) { + switch (*s) { + case '"': case '\\': case '\n': { + luaL_addchar(b, '\\'); + luaL_addchar(b, *s); + break; + } + case '\r': { + luaL_addlstring(b, "\\r", 2); + break; + } + case '\0': { + luaL_addlstring(b, "\\000", 4); + break; + } + default: { + luaL_addchar(b, *s); + break; + } + } + s++; + } + luaL_addchar(b, '"'); +} + +static const char *scanformat (lua_State *L, const char *strfrmt, char *form) { + const char *p = strfrmt; + while (*p != '\0' && strchr(FLAGS, *p) != NULL) p++; /* skip flags */ + if ((size_t)(p - strfrmt) >= sizeof(FLAGS)) + luaL_error(L, "invalid format (repeated flags)"); + if (isdigit(uchar(*p))) p++; /* skip width */ + if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ + if (*p == '.') { + p++; + if (isdigit(uchar(*p))) p++; /* skip precision */ + if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ + } + if (isdigit(uchar(*p))) + luaL_error(L, "invalid format (width or precision too long)"); + *(form++) = '%'; + strncpy(form, strfrmt, p - strfrmt + 1); + form += p - strfrmt + 1; + *form = '\0'; + return p; +} + + +static void addintlen (char *form) { + size_t l = strlen(form); + char spec = form[l - 1]; + strcpy(form + l - 1, LUA_INTFRMLEN); + form[l + sizeof(LUA_INTFRMLEN) - 2] = spec; + form[l + sizeof(LUA_INTFRMLEN) - 1] = '\0'; +} + + +static int str_format (lua_State *L) { + int arg = 1; + size_t sfl; + const char *strfrmt = luaL_checklstring(L, arg, &sfl); + const char *strfrmt_end = strfrmt+sfl; + luaL_Buffer b; + luaL_buffinit(L, &b); + while (strfrmt < strfrmt_end) { + if (*strfrmt != L_ESC) + luaL_addchar(&b, *strfrmt++); + else if (*++strfrmt == L_ESC) + luaL_addchar(&b, *strfrmt++); /* %% */ + else { /* format item */ + char form[MAX_FORMAT]; /* to store the format (`%...') */ + char buff[MAX_ITEM]; /* to store the formatted item */ + arg++; + strfrmt = scanformat(L, strfrmt, form); + switch (*strfrmt++) { + case 'c': { + sprintf(buff, form, (int)luaL_checknumber(L, arg)); + break; + } + case 'd': case 'i': { + addintlen(form); + sprintf(buff, form, (LUA_INTFRM_T)luaL_checknumber(L, arg)); + break; + } + case 'o': case 'u': case 'x': case 'X': { + addintlen(form); + sprintf(buff, form, (unsigned LUA_INTFRM_T)luaL_checknumber(L, arg)); + break; + } + case 'e': case 'E': case 'f': + case 'g': case 'G': { + sprintf(buff, form, (double)luaL_checknumber(L, arg)); + break; + } + case 'q': { + addquoted(L, &b, arg); + continue; /* skip the 'addsize' at the end */ + } + case 's': { + size_t l; + const char *s = luaL_checklstring(L, arg, &l); + if (!strchr(form, '.') && l >= 100) { + /* no precision and string is too long to be formatted; + keep original string */ + lua_pushvalue(L, arg); + luaL_addvalue(&b); + continue; /* skip the `addsize' at the end */ + } + else { + sprintf(buff, form, s); + break; + } + } + default: { /* also treat cases `pnLlh' */ + return luaL_error(L, "invalid option " LUA_QL("%%%c") " to " + LUA_QL("format"), *(strfrmt - 1)); + } + } + luaL_addlstring(&b, buff, strlen(buff)); + } + } + luaL_pushresult(&b); + return 1; +} + + +static const luaL_Reg strlib[] = { + {"byte", str_byte}, + {"char", str_char}, + {"dump", str_dump}, + {"find", str_find}, + {"format", str_format}, + {"gfind", gfind_nodef}, + {"gmatch", gmatch}, + {"gsub", str_gsub}, + {"len", str_len}, + {"lower", str_lower}, + {"match", str_match}, + {"rep", str_rep}, + {"reverse", str_reverse}, + {"sub", str_sub}, + {"upper", str_upper}, + {NULL, NULL} +}; + + +static void createmetatable (lua_State *L) { + lua_createtable(L, 0, 1); /* create metatable for strings */ + lua_pushliteral(L, ""); /* dummy string */ + lua_pushvalue(L, -2); + lua_setmetatable(L, -2); /* set string metatable */ + lua_pop(L, 1); /* pop dummy string */ + lua_pushvalue(L, -2); /* string library... */ + lua_setfield(L, -2, "__index"); /* ...is the __index metamethod */ + lua_pop(L, 1); /* pop metatable */ +} + + +/* +** Open string library +*/ +LUALIB_API int luaopen_string (lua_State *L) { + luaL_register(L, LUA_STRLIBNAME, strlib); +#if defined(LUA_COMPAT_GFIND) + lua_getfield(L, -1, "gmatch"); + lua_setfield(L, -2, "gfind"); +#endif + createmetatable(L); + return 1; +} + diff --git a/lua/src/ltable.c b/lua/src/ltable.c new file mode 100644 index 0000000..bc91cac --- /dev/null +++ b/lua/src/ltable.c @@ -0,0 +1,588 @@ +/* +** $Id: ltable.c,v 2.32 2006/01/18 11:49:02 roberto Exp $ +** Lua tables (hash) +** See Copyright Notice in lua.h +*/ + + +/* +** Implementation of tables (aka arrays, objects, or hash tables). +** Tables keep its elements in two parts: an array part and a hash part. +** Non-negative integer keys are all candidates to be kept in the array +** part. The actual size of the array is the largest `n' such that at +** least half the slots between 0 and n are in use. +** Hash uses a mix of chained scatter table with Brent's variation. +** A main invariant of these tables is that, if an element is not +** in its main position (i.e. the `original' position that its hash gives +** to it), then the colliding element is in its own main position. +** Hence even when the load factor reaches 100%, performance remains good. +*/ + +#include +#include + +#define ltable_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "ltable.h" + + +/* +** max size of array part is 2^MAXBITS +*/ +#if LUAI_BITSINT > 26 +#define MAXBITS 26 +#else +#define MAXBITS (LUAI_BITSINT-2) +#endif + +#define MAXASIZE (1 << MAXBITS) + + +#define hashpow2(t,n) (gnode(t, lmod((n), sizenode(t)))) + +#define hashstr(t,str) hashpow2(t, (str)->tsv.hash) +#define hashboolean(t,p) hashpow2(t, p) + + +/* +** for some types, it is better to avoid modulus by power of 2, as +** they tend to have many 2 factors. +*/ +#define hashmod(t,n) (gnode(t, ((n) % ((sizenode(t)-1)|1)))) + + +#define hashpointer(t,p) hashmod(t, IntPoint(p)) + + +/* +** number of ints inside a lua_Number +*/ +#define numints cast_int(sizeof(lua_Number)/sizeof(int)) + + + +#define dummynode (&dummynode_) + +static const Node dummynode_ = { + {{NULL}, LUA_TNIL}, /* value */ + {{{NULL}, LUA_TNIL, NULL}} /* key */ +}; + + +/* +** hash for lua_Numbers +*/ +static Node *hashnum (const Table *t, lua_Number n) { + unsigned int a[numints]; + int i; + n += 1; /* normalize number (avoid -0) */ + lua_assert(sizeof(a) <= sizeof(n)); + memcpy(a, &n, sizeof(a)); + for (i = 1; i < numints; i++) a[0] += a[i]; + return hashmod(t, a[0]); +} + + + +/* +** returns the `main' position of an element in a table (that is, the index +** of its hash value) +*/ +static Node *mainposition (const Table *t, const TValue *key) { + switch (ttype(key)) { + case LUA_TNUMBER: + return hashnum(t, nvalue(key)); + case LUA_TSTRING: + return hashstr(t, rawtsvalue(key)); + case LUA_TBOOLEAN: + return hashboolean(t, bvalue(key)); + case LUA_TLIGHTUSERDATA: + return hashpointer(t, pvalue(key)); + default: + return hashpointer(t, gcvalue(key)); + } +} + + +/* +** returns the index for `key' if `key' is an appropriate key to live in +** the array part of the table, -1 otherwise. +*/ +static int arrayindex (const TValue *key) { + if (ttisnumber(key)) { + lua_Number n = nvalue(key); + int k; + lua_number2int(k, n); + if (luai_numeq(cast_num(k), n)) + return k; + } + return -1; /* `key' did not match some condition */ +} + + +/* +** returns the index of a `key' for table traversals. First goes all +** elements in the array part, then elements in the hash part. The +** beginning of a traversal is signalled by -1. +*/ +static int findindex (lua_State *L, Table *t, StkId key) { + int i; + if (ttisnil(key)) return -1; /* first iteration */ + i = arrayindex(key); + if (0 < i && i <= t->sizearray) /* is `key' inside array part? */ + return i-1; /* yes; that's the index (corrected to C) */ + else { + Node *n = mainposition(t, key); + do { /* check whether `key' is somewhere in the chain */ + /* key may be dead already, but it is ok to use it in `next' */ + if (luaO_rawequalObj(key2tval(n), key) || + (ttype(gkey(n)) == LUA_TDEADKEY && iscollectable(key) && + gcvalue(gkey(n)) == gcvalue(key))) { + i = cast_int(n - gnode(t, 0)); /* key index in hash table */ + /* hash elements are numbered after array ones */ + return i + t->sizearray; + } + else n = gnext(n); + } while (n); + luaG_runerror(L, "invalid key to " LUA_QL("next")); /* key not found */ + return 0; /* to avoid warnings */ + } +} + + +int luaH_next (lua_State *L, Table *t, StkId key) { + int i = findindex(L, t, key); /* find original element */ + for (i++; i < t->sizearray; i++) { /* try first array part */ + if (!ttisnil(&t->array[i])) { /* a non-nil value? */ + setnvalue(key, cast_num(i+1)); + setobj2s(L, key+1, &t->array[i]); + return 1; + } + } + for (i -= t->sizearray; i < sizenode(t); i++) { /* then hash part */ + if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */ + setobj2s(L, key, key2tval(gnode(t, i))); + setobj2s(L, key+1, gval(gnode(t, i))); + return 1; + } + } + return 0; /* no more elements */ +} + + +/* +** {============================================================= +** Rehash +** ============================================================== +*/ + + +static int computesizes (int nums[], int *narray) { + int i; + int twotoi; /* 2^i */ + int a = 0; /* number of elements smaller than 2^i */ + int na = 0; /* number of elements to go to array part */ + int n = 0; /* optimal size for array part */ + for (i = 0, twotoi = 1; twotoi/2 < *narray; i++, twotoi *= 2) { + if (nums[i] > 0) { + a += nums[i]; + if (a > twotoi/2) { /* more than half elements present? */ + n = twotoi; /* optimal size (till now) */ + na = a; /* all elements smaller than n will go to array part */ + } + } + if (a == *narray) break; /* all elements already counted */ + } + *narray = n; + lua_assert(*narray/2 <= na && na <= *narray); + return na; +} + + +static int countint (const TValue *key, int *nums) { + int k = arrayindex(key); + if (0 < k && k <= MAXASIZE) { /* is `key' an appropriate array index? */ + nums[ceillog2(k)]++; /* count as such */ + return 1; + } + else + return 0; +} + + +static int numusearray (const Table *t, int *nums) { + int lg; + int ttlg; /* 2^lg */ + int ause = 0; /* summation of `nums' */ + int i = 1; /* count to traverse all array keys */ + for (lg=0, ttlg=1; lg<=MAXBITS; lg++, ttlg*=2) { /* for each slice */ + int lc = 0; /* counter */ + int lim = ttlg; + if (lim > t->sizearray) { + lim = t->sizearray; /* adjust upper limit */ + if (i > lim) + break; /* no more elements to count */ + } + /* count elements in range (2^(lg-1), 2^lg] */ + for (; i <= lim; i++) { + if (!ttisnil(&t->array[i-1])) + lc++; + } + nums[lg] += lc; + ause += lc; + } + return ause; +} + + +static int numusehash (const Table *t, int *nums, int *pnasize) { + int totaluse = 0; /* total number of elements */ + int ause = 0; /* summation of `nums' */ + int i = sizenode(t); + while (i--) { + Node *n = &t->node[i]; + if (!ttisnil(gval(n))) { + ause += countint(key2tval(n), nums); + totaluse++; + } + } + *pnasize += ause; + return totaluse; +} + + +static void setarrayvector (lua_State *L, Table *t, int size) { + int i; + luaM_reallocvector(L, t->array, t->sizearray, size, TValue); + for (i=t->sizearray; iarray[i]); + t->sizearray = size; +} + + +static void setnodevector (lua_State *L, Table *t, int size) { + int lsize; + if (size == 0) { /* no elements to hash part? */ + t->node = cast(Node *, dummynode); /* use common `dummynode' */ + lsize = 0; + } + else { + int i; + lsize = ceillog2(size); + if (lsize > MAXBITS) + luaG_runerror(L, "table overflow"); + size = twoto(lsize); + t->node = luaM_newvector(L, size, Node); + for (i=0; ilsizenode = cast_byte(lsize); + t->lastfree = gnode(t, size); /* all positions are free */ +} + + +static void resize (lua_State *L, Table *t, int nasize, int nhsize) { + int i; + int oldasize = t->sizearray; + int oldhsize = t->lsizenode; + Node *nold = t->node; /* save old hash ... */ + if (nasize > oldasize) /* array part must grow? */ + setarrayvector(L, t, nasize); + /* create new hash part with appropriate size */ + setnodevector(L, t, nhsize); + if (nasize < oldasize) { /* array part must shrink? */ + t->sizearray = nasize; + /* re-insert elements from vanishing slice */ + for (i=nasize; iarray[i])) + setobjt2t(L, luaH_setnum(L, t, i+1), &t->array[i]); + } + /* shrink array */ + luaM_reallocvector(L, t->array, oldasize, nasize, TValue); + } + /* re-insert elements from hash part */ + for (i = twoto(oldhsize) - 1; i >= 0; i--) { + Node *old = nold+i; + if (!ttisnil(gval(old))) + setobjt2t(L, luaH_set(L, t, key2tval(old)), gval(old)); + } + if (nold != dummynode) + luaM_freearray(L, nold, twoto(oldhsize), Node); /* free old array */ +} + + +void luaH_resizearray (lua_State *L, Table *t, int nasize) { + int nsize = (t->node == dummynode) ? 0 : sizenode(t); + resize(L, t, nasize, nsize); +} + + +static void rehash (lua_State *L, Table *t, const TValue *ek) { + int nasize, na; + int nums[MAXBITS+1]; /* nums[i] = number of keys between 2^(i-1) and 2^i */ + int i; + int totaluse; + for (i=0; i<=MAXBITS; i++) nums[i] = 0; /* reset counts */ + nasize = numusearray(t, nums); /* count keys in array part */ + totaluse = nasize; /* all those keys are integer keys */ + totaluse += numusehash(t, nums, &nasize); /* count keys in hash part */ + /* count extra key */ + nasize += countint(ek, nums); + totaluse++; + /* compute new size for array part */ + na = computesizes(nums, &nasize); + /* resize the table to new computed sizes */ + resize(L, t, nasize, totaluse - na); +} + + + +/* +** }============================================================= +*/ + + +Table *luaH_new (lua_State *L, int narray, int nhash) { + Table *t = luaM_new(L, Table); + luaC_link(L, obj2gco(t), LUA_TTABLE); + t->metatable = NULL; + t->flags = cast_byte(~0); + /* temporary values (kept only if some malloc fails) */ + t->array = NULL; + t->sizearray = 0; + t->lsizenode = 0; + t->node = cast(Node *, dummynode); + setarrayvector(L, t, narray); + setnodevector(L, t, nhash); + return t; +} + + +void luaH_free (lua_State *L, Table *t) { + if (t->node != dummynode) + luaM_freearray(L, t->node, sizenode(t), Node); + luaM_freearray(L, t->array, t->sizearray, TValue); + luaM_free(L, t); +} + + +static Node *getfreepos (Table *t) { + while (t->lastfree-- > t->node) { + if (ttisnil(gkey(t->lastfree))) + return t->lastfree; + } + return NULL; /* could not find a free place */ +} + + + +/* +** inserts a new key into a hash table; first, check whether key's main +** position is free. If not, check whether colliding node is in its main +** position or not: if it is not, move colliding node to an empty place and +** put new key in its main position; otherwise (colliding node is in its main +** position), new key goes to an empty position. +*/ +static TValue *newkey (lua_State *L, Table *t, const TValue *key) { + Node *mp = mainposition(t, key); + if (!ttisnil(gval(mp)) || mp == dummynode) { + Node *othern; + Node *n = getfreepos(t); /* get a free place */ + if (n == NULL) { /* cannot find a free place? */ + rehash(L, t, key); /* grow table */ + return luaH_set(L, t, key); /* re-insert key into grown table */ + } + lua_assert(n != dummynode); + othern = mainposition(t, key2tval(mp)); + if (othern != mp) { /* is colliding node out of its main position? */ + /* yes; move colliding node into free position */ + while (gnext(othern) != mp) othern = gnext(othern); /* find previous */ + gnext(othern) = n; /* redo the chain with `n' in place of `mp' */ + *n = *mp; /* copy colliding node into free pos. (mp->next also goes) */ + gnext(mp) = NULL; /* now `mp' is free */ + setnilvalue(gval(mp)); + } + else { /* colliding node is in its own main position */ + /* new node will go into free position */ + gnext(n) = gnext(mp); /* chain new position */ + gnext(mp) = n; + mp = n; + } + } + gkey(mp)->value = key->value; gkey(mp)->tt = key->tt; + luaC_barriert(L, t, key); + lua_assert(ttisnil(gval(mp))); + return gval(mp); +} + + +/* +** search function for integers +*/ +const TValue *luaH_getnum (Table *t, int key) { + /* (1 <= key && key <= t->sizearray) */ + if (cast(unsigned int, key-1) < cast(unsigned int, t->sizearray)) + return &t->array[key-1]; + else { + lua_Number nk = cast_num(key); + Node *n = hashnum(t, nk); + do { /* check whether `key' is somewhere in the chain */ + if (ttisnumber(gkey(n)) && luai_numeq(nvalue(gkey(n)), nk)) + return gval(n); /* that's it */ + else n = gnext(n); + } while (n); + return luaO_nilobject; + } +} + + +/* +** search function for strings +*/ +const TValue *luaH_getstr (Table *t, TString *key) { + Node *n = hashstr(t, key); + do { /* check whether `key' is somewhere in the chain */ + if (ttisstring(gkey(n)) && rawtsvalue(gkey(n)) == key) + return gval(n); /* that's it */ + else n = gnext(n); + } while (n); + return luaO_nilobject; +} + + +/* +** main search function +*/ +const TValue *luaH_get (Table *t, const TValue *key) { + switch (ttype(key)) { + case LUA_TNIL: return luaO_nilobject; + case LUA_TSTRING: return luaH_getstr(t, rawtsvalue(key)); + case LUA_TNUMBER: { + int k; + lua_Number n = nvalue(key); + lua_number2int(k, n); + if (luai_numeq(cast_num(k), nvalue(key))) /* index is int? */ + return luaH_getnum(t, k); /* use specialized version */ + /* else go through */ + } + default: { + Node *n = mainposition(t, key); + do { /* check whether `key' is somewhere in the chain */ + if (luaO_rawequalObj(key2tval(n), key)) + return gval(n); /* that's it */ + else n = gnext(n); + } while (n); + return luaO_nilobject; + } + } +} + + +TValue *luaH_set (lua_State *L, Table *t, const TValue *key) { + const TValue *p = luaH_get(t, key); + t->flags = 0; + if (p != luaO_nilobject) + return cast(TValue *, p); + else { + if (ttisnil(key)) luaG_runerror(L, "table index is nil"); + else if (ttisnumber(key) && luai_numisnan(nvalue(key))) + luaG_runerror(L, "table index is NaN"); + return newkey(L, t, key); + } +} + + +TValue *luaH_setnum (lua_State *L, Table *t, int key) { + const TValue *p = luaH_getnum(t, key); + if (p != luaO_nilobject) + return cast(TValue *, p); + else { + TValue k; + setnvalue(&k, cast_num(key)); + return newkey(L, t, &k); + } +} + + +TValue *luaH_setstr (lua_State *L, Table *t, TString *key) { + const TValue *p = luaH_getstr(t, key); + if (p != luaO_nilobject) + return cast(TValue *, p); + else { + TValue k; + setsvalue(L, &k, key); + return newkey(L, t, &k); + } +} + + +static int unbound_search (Table *t, unsigned int j) { + unsigned int i = j; /* i is zero or a present index */ + j++; + /* find `i' and `j' such that i is present and j is not */ + while (!ttisnil(luaH_getnum(t, j))) { + i = j; + j *= 2; + if (j > cast(unsigned int, MAX_INT)) { /* overflow? */ + /* table was built with bad purposes: resort to linear search */ + i = 1; + while (!ttisnil(luaH_getnum(t, i))) i++; + return i - 1; + } + } + /* now do a binary search between them */ + while (j - i > 1) { + unsigned int m = (i+j)/2; + if (ttisnil(luaH_getnum(t, m))) j = m; + else i = m; + } + return i; +} + + +/* +** Try to find a boundary in table `t'. A `boundary' is an integer index +** such that t[i] is non-nil and t[i+1] is nil (and 0 if t[1] is nil). +*/ +int luaH_getn (Table *t) { + unsigned int j = t->sizearray; + if (j > 0 && ttisnil(&t->array[j - 1])) { + /* there is a boundary in the array part: (binary) search for it */ + unsigned int i = 0; + while (j - i > 1) { + unsigned int m = (i+j)/2; + if (ttisnil(&t->array[m - 1])) j = m; + else i = m; + } + return i; + } + /* else must find a boundary in hash part */ + else if (t->node == dummynode) /* hash part is empty? */ + return j; /* that is easy... */ + else return unbound_search(t, j); +} + + + +#if defined(LUA_DEBUG) + +Node *luaH_mainposition (const Table *t, const TValue *key) { + return mainposition(t, key); +} + +int luaH_isdummy (Node *n) { return n == dummynode; } + +#endif diff --git a/lua/src/ltable.h b/lua/src/ltable.h new file mode 100644 index 0000000..09193cd --- /dev/null +++ b/lua/src/ltable.h @@ -0,0 +1,40 @@ +/* +** $Id: ltable.h,v 2.10 2006/01/10 13:13:06 roberto Exp $ +** Lua tables (hash) +** See Copyright Notice in lua.h +*/ + +#ifndef ltable_h +#define ltable_h + +#include "lobject.h" + + +#define gnode(t,i) (&(t)->node[i]) +#define gkey(n) (&(n)->i_key.nk) +#define gval(n) (&(n)->i_val) +#define gnext(n) ((n)->i_key.nk.next) + +#define key2tval(n) (&(n)->i_key.tvk) + + +LUAI_FUNC const TValue *luaH_getnum (Table *t, int key); +LUAI_FUNC TValue *luaH_setnum (lua_State *L, Table *t, int key); +LUAI_FUNC const TValue *luaH_getstr (Table *t, TString *key); +LUAI_FUNC TValue *luaH_setstr (lua_State *L, Table *t, TString *key); +LUAI_FUNC const TValue *luaH_get (Table *t, const TValue *key); +LUAI_FUNC TValue *luaH_set (lua_State *L, Table *t, const TValue *key); +LUAI_FUNC Table *luaH_new (lua_State *L, int narray, int lnhash); +LUAI_FUNC void luaH_resizearray (lua_State *L, Table *t, int nasize); +LUAI_FUNC void luaH_free (lua_State *L, Table *t); +LUAI_FUNC int luaH_next (lua_State *L, Table *t, StkId key); +LUAI_FUNC int luaH_getn (Table *t); + + +#if defined(LUA_DEBUG) +LUAI_FUNC Node *luaH_mainposition (const Table *t, const TValue *key); +LUAI_FUNC int luaH_isdummy (Node *n); +#endif + + +#endif diff --git a/lua/src/ltablib.c b/lua/src/ltablib.c new file mode 100644 index 0000000..453b23b --- /dev/null +++ b/lua/src/ltablib.c @@ -0,0 +1,278 @@ +/* +** $Id: ltablib.c,v 1.38 2005/10/23 17:38:15 roberto Exp $ +** Library for Table Manipulation +** See Copyright Notice in lua.h +*/ + + +#include + +#define ltablib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#define aux_getn(L,n) (luaL_checktype(L, n, LUA_TTABLE), luaL_getn(L, n)) + + +static int foreachi (lua_State *L) { + int i; + int n = aux_getn(L, 1); + luaL_checktype(L, 2, LUA_TFUNCTION); + for (i=1; i <= n; i++) { + lua_pushvalue(L, 2); /* function */ + lua_pushinteger(L, i); /* 1st argument */ + lua_rawgeti(L, 1, i); /* 2nd argument */ + lua_call(L, 2, 1); + if (!lua_isnil(L, -1)) + return 1; + lua_pop(L, 1); /* remove nil result */ + } + return 0; +} + + +static int foreach (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checktype(L, 2, LUA_TFUNCTION); + lua_pushnil(L); /* first key */ + while (lua_next(L, 1)) { + lua_pushvalue(L, 2); /* function */ + lua_pushvalue(L, -3); /* key */ + lua_pushvalue(L, -3); /* value */ + lua_call(L, 2, 1); + if (!lua_isnil(L, -1)) + return 1; + lua_pop(L, 2); /* remove value and result */ + } + return 0; +} + + +static int maxn (lua_State *L) { + lua_Number max = 0; + luaL_checktype(L, 1, LUA_TTABLE); + lua_pushnil(L); /* first key */ + while (lua_next(L, 1)) { + lua_pop(L, 1); /* remove value */ + if (lua_type(L, -1) == LUA_TNUMBER) { + lua_Number v = lua_tonumber(L, -1); + if (v > max) max = v; + } + } + lua_pushnumber(L, max); + return 1; +} + + +static int getn (lua_State *L) { + lua_pushinteger(L, aux_getn(L, 1)); + return 1; +} + + +static int setn (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); +#ifndef luaL_setn + luaL_setn(L, 1, luaL_checkint(L, 2)); +#else + luaL_error(L, LUA_QL("setn") " is obsolete"); +#endif + lua_pushvalue(L, 1); + return 1; +} + + +static int tinsert (lua_State *L) { + int e = aux_getn(L, 1) + 1; /* first empty element */ + int pos; /* where to insert new element */ + switch (lua_gettop(L)) { + case 2: { /* called with only 2 arguments */ + pos = e; /* insert new element at the end */ + break; + } + case 3: { + int i; + pos = luaL_checkint(L, 2); /* 2nd argument is the position */ + if (pos > e) e = pos; /* `grow' array if necessary */ + for (i = e; i > pos; i--) { /* move up elements */ + lua_rawgeti(L, 1, i-1); + lua_rawseti(L, 1, i); /* t[i] = t[i-1] */ + } + break; + } + default: { + return luaL_error(L, "wrong number of arguments to " LUA_QL("insert")); + } + } + luaL_setn(L, 1, e); /* new size */ + lua_rawseti(L, 1, pos); /* t[pos] = v */ + return 0; +} + + +static int tremove (lua_State *L) { + int e = aux_getn(L, 1); + int pos = luaL_optint(L, 2, e); + if (e == 0) return 0; /* table is `empty' */ + luaL_setn(L, 1, e - 1); /* t.n = n-1 */ + lua_rawgeti(L, 1, pos); /* result = t[pos] */ + for ( ;pos= P */ + while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) { + if (i>u) luaL_error(L, "invalid order function for sorting"); + lua_pop(L, 1); /* remove a[i] */ + } + /* repeat --j until a[j] <= P */ + while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) { + if (j + +#define ltm_c +#define LUA_CORE + +#include "lua.h" + +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + + +const char *const luaT_typenames[] = { + "nil", "boolean", "userdata", "number", + "string", "table", "function", "userdata", "thread", + "proto", "upval" +}; + + +void luaT_init (lua_State *L) { + static const char *const luaT_eventname[] = { /* ORDER TM */ + "__index", "__newindex", + "__gc", "__mode", "__eq", + "__add", "__sub", "__mul", "__div", "__mod", + "__pow", "__unm", "__len", "__lt", "__le", + "__concat", "__call" + }; + int i; + for (i=0; itmname[i] = luaS_new(L, luaT_eventname[i]); + luaS_fix(G(L)->tmname[i]); /* never collect these names */ + } +} + + +/* +** function to be used with macro "fasttm": optimized for absence of +** tag methods +*/ +const TValue *luaT_gettm (Table *events, TMS event, TString *ename) { + const TValue *tm = luaH_getstr(events, ename); + lua_assert(event <= TM_EQ); + if (ttisnil(tm)) { /* no tag method? */ + events->flags |= cast_byte(1u<metatable; + break; + case LUA_TUSERDATA: + mt = uvalue(o)->metatable; + break; + default: + mt = G(L)->mt[ttype(o)]; + } + return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject); +} + diff --git a/lua/src/ltm.h b/lua/src/ltm.h new file mode 100644 index 0000000..866c796 --- /dev/null +++ b/lua/src/ltm.h @@ -0,0 +1,54 @@ +/* +** $Id: ltm.h,v 2.6 2005/06/06 13:30:25 roberto Exp $ +** Tag methods +** See Copyright Notice in lua.h +*/ + +#ifndef ltm_h +#define ltm_h + + +#include "lobject.h" + + +/* +* WARNING: if you change the order of this enumeration, +* grep "ORDER TM" +*/ +typedef enum { + TM_INDEX, + TM_NEWINDEX, + TM_GC, + TM_MODE, + TM_EQ, /* last tag method with `fast' access */ + TM_ADD, + TM_SUB, + TM_MUL, + TM_DIV, + TM_MOD, + TM_POW, + TM_UNM, + TM_LEN, + TM_LT, + TM_LE, + TM_CONCAT, + TM_CALL, + TM_N /* number of elements in the enum */ +} TMS; + + + +#define gfasttm(g,et,e) ((et) == NULL ? NULL : \ + ((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e])) + +#define fasttm(l,et,e) gfasttm(G(l), et, e) + +LUAI_DATA const char *const luaT_typenames[]; + + +LUAI_FUNC const TValue *luaT_gettm (Table *events, TMS event, TString *ename); +LUAI_FUNC const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, + TMS event); +LUAI_FUNC void luaT_init (lua_State *L); + +#endif diff --git a/lua/src/lua.c b/lua/src/lua.c new file mode 100644 index 0000000..5cee7fa --- /dev/null +++ b/lua/src/lua.c @@ -0,0 +1,390 @@ +/* +** $Id: lua.c,v 1.160 2006/06/02 15:34:00 roberto Exp $ +** Lua stand-alone interpreter +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include + +#define lua_c + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + + +static lua_State *globalL = NULL; + +static const char *progname = LUA_PROGNAME; + + + +static void lstop (lua_State *L, lua_Debug *ar) { + (void)ar; /* unused arg. */ + lua_sethook(L, NULL, 0, 0); + luaL_error(L, "interrupted!"); +} + + +static void laction (int i) { + signal(i, SIG_DFL); /* if another SIGINT happens before lstop, + terminate process (default action) */ + lua_sethook(globalL, lstop, LUA_MASKCALL | LUA_MASKRET | LUA_MASKCOUNT, 1); +} + + +static void print_usage (void) { + fprintf(stderr, + "usage: %s [options] [script [args]].\n" + "Available options are:\n" + " -e stat execute string " LUA_QL("stat") "\n" + " -l name require library " LUA_QL("name") "\n" + " -i enter interactive mode after executing " LUA_QL("script") "\n" + " -v show version information\n" + " -- stop handling options\n" + " - execute stdin and stop handling options\n" + , + progname); + fflush(stderr); +} + + +static void l_message (const char *pname, const char *msg) { + if (pname) fprintf(stderr, "%s: ", pname); + fprintf(stderr, "%s\n", msg); + fflush(stderr); +} + + +static int report (lua_State *L, int status) { + if (status && !lua_isnil(L, -1)) { + const char *msg = lua_tostring(L, -1); + if (msg == NULL) msg = "(error object is not a string)"; + l_message(progname, msg); + lua_pop(L, 1); + } + return status; +} + + +static int traceback (lua_State *L) { + lua_getfield(L, LUA_GLOBALSINDEX, "debug"); + if (!lua_istable(L, -1)) { + lua_pop(L, 1); + return 1; + } + lua_getfield(L, -1, "traceback"); + if (!lua_isfunction(L, -1)) { + lua_pop(L, 2); + return 1; + } + lua_pushvalue(L, 1); /* pass error message */ + lua_pushinteger(L, 2); /* skip this function and traceback */ + lua_call(L, 2, 1); /* call debug.traceback */ + return 1; +} + + +static int docall (lua_State *L, int narg, int clear) { + int status; + int base = lua_gettop(L) - narg; /* function index */ + lua_pushcfunction(L, traceback); /* push traceback function */ + lua_insert(L, base); /* put it under chunk and args */ + signal(SIGINT, laction); + status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base); + signal(SIGINT, SIG_DFL); + lua_remove(L, base); /* remove traceback function */ + /* force a complete garbage collection in case of errors */ + if (status != 0) lua_gc(L, LUA_GCCOLLECT, 0); + return status; +} + + +static void print_version (void) { + l_message(NULL, LUA_RELEASE " " LUA_COPYRIGHT); +} + + +static int getargs (lua_State *L, char **argv, int n) { + int narg; + int i; + int argc = 0; + while (argv[argc]) argc++; /* count total number of arguments */ + narg = argc - (n + 1); /* number of arguments to the script */ + luaL_checkstack(L, narg + 3, "too many arguments to script"); + for (i=n+1; i < argc; i++) + lua_pushstring(L, argv[i]); + lua_createtable(L, narg, n + 1); + for (i=0; i < argc; i++) { + lua_pushstring(L, argv[i]); + lua_rawseti(L, -2, i - n); + } + return narg; +} + + +static int dofile (lua_State *L, const char *name) { + int status = luaL_loadfile(L, name) || docall(L, 0, 1); + return report(L, status); +} + + +static int dostring (lua_State *L, const char *s, const char *name) { + int status = luaL_loadbuffer(L, s, strlen(s), name) || docall(L, 0, 1); + return report(L, status); +} + + +static int dolibrary (lua_State *L, const char *name) { + lua_getglobal(L, "require"); + lua_pushstring(L, name); + return report(L, lua_pcall(L, 1, 0, 0)); +} + + +static const char *get_prompt (lua_State *L, int firstline) { + const char *p; + lua_getfield(L, LUA_GLOBALSINDEX, firstline ? "_PROMPT" : "_PROMPT2"); + p = lua_tostring(L, -1); + if (p == NULL) p = (firstline ? LUA_PROMPT : LUA_PROMPT2); + lua_pop(L, 1); /* remove global */ + return p; +} + + +static int incomplete (lua_State *L, int status) { + if (status == LUA_ERRSYNTAX) { + size_t lmsg; + const char *msg = lua_tolstring(L, -1, &lmsg); + const char *tp = msg + lmsg - (sizeof(LUA_QL("")) - 1); + if (strstr(msg, LUA_QL("")) == tp) { + lua_pop(L, 1); + return 1; + } + } + return 0; /* else... */ +} + + +static int pushline (lua_State *L, int firstline) { + char buffer[LUA_MAXINPUT]; + char *b = buffer; + size_t l; + const char *prmt = get_prompt(L, firstline); + if (lua_readline(L, b, prmt) == 0) + return 0; /* no input */ + l = strlen(b); + if (l > 0 && b[l-1] == '\n') /* line ends with newline? */ + b[l-1] = '\0'; /* remove it */ + if (firstline && b[0] == '=') /* first line starts with `=' ? */ + lua_pushfstring(L, "return %s", b+1); /* change it to `return' */ + else + lua_pushstring(L, b); + lua_freeline(L, b); + return 1; +} + + +static int loadline (lua_State *L) { + int status; + lua_settop(L, 0); + if (!pushline(L, 1)) + return -1; /* no input */ + for (;;) { /* repeat until gets a complete line */ + status = luaL_loadbuffer(L, lua_tostring(L, 1), lua_strlen(L, 1), "=stdin"); + if (!incomplete(L, status)) break; /* cannot try to add lines? */ + if (!pushline(L, 0)) /* no more input? */ + return -1; + lua_pushliteral(L, "\n"); /* add a new line... */ + lua_insert(L, -2); /* ...between the two lines */ + lua_concat(L, 3); /* join them */ + } + lua_saveline(L, 1); + lua_remove(L, 1); /* remove line */ + return status; +} + + +static void dotty (lua_State *L) { + int status; + const char *oldprogname = progname; + progname = NULL; + while ((status = loadline(L)) != -1) { + if (status == 0) status = docall(L, 0, 0); + report(L, status); + if (status == 0 && lua_gettop(L) > 0) { /* any result to print? */ + lua_getglobal(L, "print"); + lua_insert(L, 1); + if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0) + l_message(progname, lua_pushfstring(L, + "error calling " LUA_QL("print") " (%s)", + lua_tostring(L, -1))); + } + } + lua_settop(L, 0); /* clear stack */ + fputs("\n", stdout); + fflush(stdout); + progname = oldprogname; +} + + +static int handle_script (lua_State *L, char **argv, int n) { + int status; + const char *fname; + int narg = getargs(L, argv, n); /* collect arguments */ + lua_setglobal(L, "arg"); + fname = argv[n]; + if (strcmp(fname, "-") == 0 && strcmp(argv[n-1], "--") != 0) + fname = NULL; /* stdin */ + status = luaL_loadfile(L, fname); + lua_insert(L, -(narg+1)); + if (status == 0) + status = docall(L, narg, 0); + else + lua_pop(L, narg); + return report(L, status); +} + + +/* check that argument has no extra characters at the end */ +#define notail(x) {if ((x)[2] != '\0') return -1;} + + +static int collectargs (char **argv, int *pi, int *pv, int *pe) { + int i; + for (i = 1; argv[i] != NULL; i++) { + if (argv[i][0] != '-') /* not an option? */ + return i; + switch (argv[i][1]) { /* option */ + case '-': + notail(argv[i]); + return (argv[i+1] != NULL ? i+1 : 0); + case '\0': + return i; + case 'i': + notail(argv[i]); + *pi = 1; /* go through */ + case 'v': + notail(argv[i]); + *pv = 1; + break; + case 'e': + *pe = 1; /* go through */ + case 'l': + if (argv[i][2] == '\0') { + i++; + if (argv[i] == NULL) return -1; + } + break; + default: return -1; /* invalid option */ + } + } + return 0; +} + + +static int runargs (lua_State *L, char **argv, int n) { + int i; + for (i = 1; i < n; i++) { + if (argv[i] == NULL) continue; + lua_assert(argv[i][0] == '-'); + switch (argv[i][1]) { /* option */ + case 'e': { + const char *chunk = argv[i] + 2; + if (*chunk == '\0') chunk = argv[++i]; + lua_assert(chunk != NULL); + if (dostring(L, chunk, "=(command line)") != 0) + return 1; + break; + } + case 'l': { + const char *filename = argv[i] + 2; + if (*filename == '\0') filename = argv[++i]; + lua_assert(filename != NULL); + if (dolibrary(L, filename)) + return 1; /* stop if file fails */ + break; + } + default: break; + } + } + return 0; +} + + +static int handle_luainit (lua_State *L) { + const char *init = getenv(LUA_INIT); + if (init == NULL) return 0; /* status OK */ + else if (init[0] == '@') + return dofile(L, init+1); + else + return dostring(L, init, "=" LUA_INIT); +} + + +struct Smain { + int argc; + char **argv; + int status; +}; + + +static int pmain (lua_State *L) { + struct Smain *s = (struct Smain *)lua_touserdata(L, 1); + char **argv = s->argv; + int script; + int has_i = 0, has_v = 0, has_e = 0; + globalL = L; + if (argv[0] && argv[0][0]) progname = argv[0]; + lua_gc(L, LUA_GCSTOP, 0); /* stop collector during initialization */ + luaL_openlibs(L); /* open libraries */ + lua_gc(L, LUA_GCRESTART, 0); + s->status = handle_luainit(L); + if (s->status != 0) return 0; + script = collectargs(argv, &has_i, &has_v, &has_e); + if (script < 0) { /* invalid args? */ + print_usage(); + s->status = 1; + return 0; + } + if (has_v) print_version(); + s->status = runargs(L, argv, (script > 0) ? script : s->argc); + if (s->status != 0) return 0; + if (script) + s->status = handle_script(L, argv, script); + if (s->status != 0) return 0; + if (has_i) + dotty(L); + else if (script == 0 && !has_e && !has_v) { + if (lua_stdin_is_tty()) { + print_version(); + dotty(L); + } + else dofile(L, NULL); /* executes stdin as a file */ + } + return 0; +} + + +int main (int argc, char **argv) { + int status; + struct Smain s; + lua_State *L = lua_open(); /* create state */ + if (L == NULL) { + l_message(argv[0], "cannot create state: not enough memory"); + return EXIT_FAILURE; + } + s.argc = argc; + s.argv = argv; + status = lua_cpcall(L, &pmain, &s); + report(L, status); + lua_close(L); + return (status || s.status) ? EXIT_FAILURE : EXIT_SUCCESS; +} + diff --git a/lua/src/lua.h b/lua/src/lua.h new file mode 100644 index 0000000..2865a7f --- /dev/null +++ b/lua/src/lua.h @@ -0,0 +1,385 @@ +/* +** $Id: lua.h,v 1.218a 2006/06/02 15:34:00 roberto Exp $ +** Lua - An Extensible Extension Language +** Lua.org, PUC-Rio, Brazil (http://www.lua.org) +** See Copyright Notice at the end of this file +*/ + + +#ifndef lua_h +#define lua_h + +#include +#include + + +#include "luaconf.h" + + +#define LUA_VERSION "Lua 5.1" +#define LUA_RELEASE "Lua 5.1.2" +#define LUA_VERSION_NUM 501 +#define LUA_COPYRIGHT "Copyright (C) 1994-2007 Lua.org, PUC-Rio" +#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes" + + +/* mark for precompiled code (`Lua') */ +#define LUA_SIGNATURE "\033Lua" + +/* option for multiple returns in `lua_pcall' and `lua_call' */ +#define LUA_MULTRET (-1) + + +/* +** pseudo-indices +*/ +#define LUA_REGISTRYINDEX (-10000) +#define LUA_ENVIRONINDEX (-10001) +#define LUA_GLOBALSINDEX (-10002) +#define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i)) + + +/* thread status; 0 is OK */ +#define LUA_YIELD 1 +#define LUA_ERRRUN 2 +#define LUA_ERRSYNTAX 3 +#define LUA_ERRMEM 4 +#define LUA_ERRERR 5 + + +typedef struct lua_State lua_State; + +typedef int (*lua_CFunction) (lua_State *L); + + +/* +** functions that read/write blocks when loading/dumping Lua chunks +*/ +typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); + +typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); + + +/* +** prototype for memory-allocation functions +*/ +typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); + + +/* +** basic types +*/ +#define LUA_TNONE (-1) + +#define LUA_TNIL 0 +#define LUA_TBOOLEAN 1 +#define LUA_TLIGHTUSERDATA 2 +#define LUA_TNUMBER 3 +#define LUA_TSTRING 4 +#define LUA_TTABLE 5 +#define LUA_TFUNCTION 6 +#define LUA_TUSERDATA 7 +#define LUA_TTHREAD 8 + + + +/* minimum Lua stack available to a C function */ +#define LUA_MINSTACK 20 + + +/* +** generic extra include file +*/ +#if defined(LUA_USER_H) +#include LUA_USER_H +#endif + + +/* type of numbers in Lua */ +typedef LUA_NUMBER lua_Number; + + +/* type for integer functions */ +typedef LUA_INTEGER lua_Integer; + + + +/* +** state manipulation +*/ +LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); +LUA_API void (lua_close) (lua_State *L); +LUA_API lua_State *(lua_newthread) (lua_State *L); + +LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); + + +/* +** basic stack manipulation +*/ +LUA_API int (lua_gettop) (lua_State *L); +LUA_API void (lua_settop) (lua_State *L, int idx); +LUA_API void (lua_pushvalue) (lua_State *L, int idx); +LUA_API void (lua_remove) (lua_State *L, int idx); +LUA_API void (lua_insert) (lua_State *L, int idx); +LUA_API void (lua_replace) (lua_State *L, int idx); +LUA_API int (lua_checkstack) (lua_State *L, int sz); + +LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); + + +/* +** access functions (stack -> C) +*/ + +LUA_API int (lua_isnumber) (lua_State *L, int idx); +LUA_API int (lua_isstring) (lua_State *L, int idx); +LUA_API int (lua_iscfunction) (lua_State *L, int idx); +LUA_API int (lua_isuserdata) (lua_State *L, int idx); +LUA_API int (lua_type) (lua_State *L, int idx); +LUA_API const char *(lua_typename) (lua_State *L, int tp); + +LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2); +LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); +LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2); + +LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx); +LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx); +LUA_API int (lua_toboolean) (lua_State *L, int idx); +LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); +LUA_API size_t (lua_objlen) (lua_State *L, int idx); +LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); +LUA_API void *(lua_touserdata) (lua_State *L, int idx); +LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); +LUA_API const void *(lua_topointer) (lua_State *L, int idx); + + +/* +** push functions (C -> stack) +*/ +LUA_API void (lua_pushnil) (lua_State *L); +LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); +LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); +LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l); +LUA_API void (lua_pushstring) (lua_State *L, const char *s); +LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, + va_list argp); +LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); +LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); +LUA_API void (lua_pushboolean) (lua_State *L, int b); +LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); +LUA_API int (lua_pushthread) (lua_State *L); + + +/* +** get functions (Lua -> stack) +*/ +LUA_API void (lua_gettable) (lua_State *L, int idx); +LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_rawget) (lua_State *L, int idx); +LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); +LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); +LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); +LUA_API int (lua_getmetatable) (lua_State *L, int objindex); +LUA_API void (lua_getfenv) (lua_State *L, int idx); + + +/* +** set functions (stack -> Lua) +*/ +LUA_API void (lua_settable) (lua_State *L, int idx); +LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_rawset) (lua_State *L, int idx); +LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); +LUA_API int (lua_setmetatable) (lua_State *L, int objindex); +LUA_API int (lua_setfenv) (lua_State *L, int idx); + + +/* +** `load' and `call' functions (load and run Lua code) +*/ +LUA_API void (lua_call) (lua_State *L, int nargs, int nresults); +LUA_API int (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc); +LUA_API int (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud); +LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, + const char *chunkname); + +LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); + + +/* +** coroutine functions +*/ +LUA_API int (lua_yield) (lua_State *L, int nresults); +LUA_API int (lua_resume) (lua_State *L, int narg); +LUA_API int (lua_status) (lua_State *L); + +/* +** garbage-collection function and options +*/ + +#define LUA_GCSTOP 0 +#define LUA_GCRESTART 1 +#define LUA_GCCOLLECT 2 +#define LUA_GCCOUNT 3 +#define LUA_GCCOUNTB 4 +#define LUA_GCSTEP 5 +#define LUA_GCSETPAUSE 6 +#define LUA_GCSETSTEPMUL 7 + +LUA_API int (lua_gc) (lua_State *L, int what, int data); + + +/* +** miscellaneous functions +*/ + +LUA_API int (lua_error) (lua_State *L); + +LUA_API int (lua_next) (lua_State *L, int idx); + +LUA_API void (lua_concat) (lua_State *L, int n); + +LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); +LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); + + + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + +#define lua_pop(L,n) lua_settop(L, -(n)-1) + +#define lua_newtable(L) lua_createtable(L, 0, 0) + +#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) + +#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) + +#define lua_strlen(L,i) lua_objlen(L, (i)) + +#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) +#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) +#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) +#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) +#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) +#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) +#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) +#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) + +#define lua_pushliteral(L, s) \ + lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) + +#define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s)) +#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) + +#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) + + + +/* +** compatibility macros and functions +*/ + +#define lua_open() luaL_newstate() + +#define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX) + +#define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0) + +#define lua_Chunkreader lua_Reader +#define lua_Chunkwriter lua_Writer + + + +/* +** {====================================================================== +** Debug API +** ======================================================================= +*/ + + +/* +** Event codes +*/ +#define LUA_HOOKCALL 0 +#define LUA_HOOKRET 1 +#define LUA_HOOKLINE 2 +#define LUA_HOOKCOUNT 3 +#define LUA_HOOKTAILRET 4 + + +/* +** Event masks +*/ +#define LUA_MASKCALL (1 << LUA_HOOKCALL) +#define LUA_MASKRET (1 << LUA_HOOKRET) +#define LUA_MASKLINE (1 << LUA_HOOKLINE) +#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) + +typedef struct lua_Debug lua_Debug; /* activation record */ + + +/* Functions to be called by the debuger in specific events */ +typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); + + +LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar); +LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); +LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n); +LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n); + +LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count); +LUA_API lua_Hook lua_gethook (lua_State *L); +LUA_API int lua_gethookmask (lua_State *L); +LUA_API int lua_gethookcount (lua_State *L); + + +struct lua_Debug { + int event; + const char *name; /* (n) */ + const char *namewhat; /* (n) `global', `local', `field', `method' */ + const char *what; /* (S) `Lua', `C', `main', `tail' */ + const char *source; /* (S) */ + int currentline; /* (l) */ + int nups; /* (u) number of upvalues */ + int linedefined; /* (S) */ + int lastlinedefined; /* (S) */ + char short_src[LUA_IDSIZE]; /* (S) */ + /* private part */ + int i_ci; /* active function */ +}; + +/* }====================================================================== */ + + +/****************************************************************************** +* Copyright (C) 1994-2007 Lua.org, PUC-Rio. All rights reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +******************************************************************************/ + + +#endif diff --git a/lua/src/luac.c b/lua/src/luac.c new file mode 100644 index 0000000..d070173 --- /dev/null +++ b/lua/src/luac.c @@ -0,0 +1,200 @@ +/* +** $Id: luac.c,v 1.54 2006/06/02 17:37:11 lhf Exp $ +** Lua compiler (saves bytecodes to files; also list bytecodes) +** See Copyright Notice in lua.h +*/ + +#include +#include +#include +#include + +#define luac_c +#define LUA_CORE + +#include "lua.h" +#include "lauxlib.h" + +#include "ldo.h" +#include "lfunc.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstring.h" +#include "lundump.h" + +#define PROGNAME "luac" /* default program name */ +#define OUTPUT PROGNAME ".out" /* default output file */ + +static int listing=0; /* list bytecodes? */ +static int dumping=1; /* dump bytecodes? */ +static int stripping=0; /* strip debug information? */ +static char Output[]={ OUTPUT }; /* default output file name */ +static const char* output=Output; /* actual output file name */ +static const char* progname=PROGNAME; /* actual program name */ + +static void fatal(const char* message) +{ + fprintf(stderr,"%s: %s\n",progname,message); + exit(EXIT_FAILURE); +} + +static void cannot(const char* what) +{ + fprintf(stderr,"%s: cannot %s %s: %s\n",progname,what,output,strerror(errno)); + exit(EXIT_FAILURE); +} + +static void usage(const char* message) +{ + if (*message=='-') + fprintf(stderr,"%s: unrecognized option " LUA_QS "\n",progname,message); + else + fprintf(stderr,"%s: %s\n",progname,message); + fprintf(stderr, + "usage: %s [options] [filenames].\n" + "Available options are:\n" + " - process stdin\n" + " -l list\n" + " -o name output to file " LUA_QL("name") " (default is \"%s\")\n" + " -p parse only\n" + " -s strip debug information\n" + " -v show version information\n" + " -- stop handling options\n", + progname,Output); + exit(EXIT_FAILURE); +} + +#define IS(s) (strcmp(argv[i],s)==0) + +static int doargs(int argc, char* argv[]) +{ + int i; + int version=0; + if (argv[0]!=NULL && *argv[0]!=0) progname=argv[0]; + for (i=1; itop+(i))->l.p) + +static const Proto* combine(lua_State* L, int n) +{ + if (n==1) + return toproto(L,-1); + else + { + int i,pc; + Proto* f=luaF_newproto(L); + setptvalue2s(L,L->top,f); incr_top(L); + f->source=luaS_newliteral(L,"=(" PROGNAME ")"); + f->maxstacksize=1; + pc=2*n+1; + f->code=luaM_newvector(L,pc,Instruction); + f->sizecode=pc; + f->p=luaM_newvector(L,n,Proto*); + f->sizep=n; + pc=0; + for (i=0; ip[i]=toproto(L,i-n-1); + f->code[pc++]=CREATE_ABx(OP_CLOSURE,0,i); + f->code[pc++]=CREATE_ABC(OP_CALL,0,1,1); + } + f->code[pc++]=CREATE_ABC(OP_RETURN,0,1,0); + return f; + } +} + +static int writer(lua_State* L, const void* p, size_t size, void* u) +{ + UNUSED(L); + return (fwrite(p,size,1,(FILE*)u)!=1) && (size!=0); +} + +struct Smain { + int argc; + char** argv; +}; + +static int pmain(lua_State* L) +{ + struct Smain* s = (struct Smain*)lua_touserdata(L, 1); + int argc=s->argc; + char** argv=s->argv; + const Proto* f; + int i; + if (!lua_checkstack(L,argc)) fatal("too many input files"); + for (i=0; i1); + if (dumping) + { + FILE* D= (output==NULL) ? stdout : fopen(output,"wb"); + if (D==NULL) cannot("open"); + lua_lock(L); + luaU_dump(L,f,writer,D,stripping); + lua_unlock(L); + if (ferror(D)) cannot("write"); + if (fclose(D)) cannot("close"); + } + return 0; +} + +int main(int argc, char* argv[]) +{ + lua_State* L; + struct Smain s; + int i=doargs(argc,argv); + argc-=i; argv+=i; + if (argc<=0) usage("no input files given"); + L=lua_open(); + if (L==NULL) fatal("not enough memory for state"); + s.argc=argc; + s.argv=argv; + if (lua_cpcall(L,pmain,&s)!=0) fatal(lua_tostring(L,-1)); + lua_close(L); + return EXIT_SUCCESS; +} diff --git a/lua/src/luaconf.h b/lua/src/luaconf.h new file mode 100644 index 0000000..8be8338 --- /dev/null +++ b/lua/src/luaconf.h @@ -0,0 +1,762 @@ +/* +** $Id: luaconf.h,v 1.82a 2006/04/10 18:27:23 roberto Exp $ +** Configuration file for Lua +** See Copyright Notice in lua.h +*/ + + +#ifndef lconfig_h +#define lconfig_h + +#include +#include + + +/* +** ================================================================== +** Search for "@@" to find all configurable definitions. +** =================================================================== +*/ + + +/* +@@ LUA_ANSI controls the use of non-ansi features. +** CHANGE it (define it) if you want Lua to avoid the use of any +** non-ansi feature or library. +*/ +#if defined(__STRICT_ANSI__) +#define LUA_ANSI +#endif + + +#if !defined(LUA_ANSI) && defined(_WIN32) +#define LUA_WIN +#endif + +#if defined(LUA_USE_LINUX) +#define LUA_USE_POSIX +#define LUA_USE_DLOPEN /* needs an extra library: -ldl */ +#define LUA_USE_READLINE /* needs some extra libraries */ +#endif + +#if defined(LUA_USE_MACOSX) +#define LUA_USE_POSIX +#define LUA_DL_DYLD /* does not need extra library */ +#endif + + + +/* +@@ LUA_USE_POSIX includes all functionallity listed as X/Open System +@* Interfaces Extension (XSI). +** CHANGE it (define it) if your system is XSI compatible. +*/ +#if defined(LUA_USE_POSIX) +#define LUA_USE_MKSTEMP +#define LUA_USE_ISATTY +#define LUA_USE_POPEN +#define LUA_USE_ULONGJMP +#endif + + +/* +@@ LUA_PATH and LUA_CPATH are the names of the environment variables that +@* Lua check to set its paths. +@@ LUA_INIT is the name of the environment variable that Lua +@* checks for initialization code. +** CHANGE them if you want different names. +*/ +#define LUA_PATH "LUA_PATH" +#define LUA_CPATH "LUA_CPATH" +#define LUA_INIT "LUA_INIT" + + +/* +@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for +@* Lua libraries. +@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for +@* C libraries. +** CHANGE them if your machine has a non-conventional directory +** hierarchy or if you want to install your libraries in +** non-conventional directories. +*/ +#if defined(_WIN32) +/* +** In Windows, any exclamation mark ('!') in the path is replaced by the +** path of the directory of the executable file of the current process. +*/ +#define LUA_LDIR "!\\lua\\" +#define LUA_CDIR "!\\" +#define LUA_PATH_DEFAULT \ + ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua" +#define LUA_CPATH_DEFAULT \ + ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" + +#else +#define LUA_ROOT "/usr/local/" +#define LUA_LDIR LUA_ROOT "share/lua/5.1/" +#define LUA_CDIR LUA_ROOT "lib/lua/5.1/" +#define LUA_PATH_DEFAULT \ + "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" +#define LUA_CPATH_DEFAULT \ + "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" +#endif + + +/* +@@ LUA_DIRSEP is the directory separator (for submodules). +** CHANGE it if your machine does not use "/" as the directory separator +** and is not Windows. (On Windows Lua automatically uses "\".) +*/ +#if defined(_WIN32) +#define LUA_DIRSEP "\\" +#else +#define LUA_DIRSEP "/" +#endif + + +/* +@@ LUA_PATHSEP is the character that separates templates in a path. +@@ LUA_PATH_MARK is the string that marks the substitution points in a +@* template. +@@ LUA_EXECDIR in a Windows path is replaced by the executable's +@* directory. +@@ LUA_IGMARK is a mark to ignore all before it when bulding the +@* luaopen_ function name. +** CHANGE them if for some reason your system cannot use those +** characters. (E.g., if one of those characters is a common character +** in file/directory names.) Probably you do not need to change them. +*/ +#define LUA_PATHSEP ";" +#define LUA_PATH_MARK "?" +#define LUA_EXECDIR "!" +#define LUA_IGMARK "-" + + +/* +@@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger. +** CHANGE that if ptrdiff_t is not adequate on your machine. (On most +** machines, ptrdiff_t gives a good choice between int or long.) +*/ +#define LUA_INTEGER ptrdiff_t + + +/* +@@ LUA_API is a mark for all core API functions. +@@ LUALIB_API is a mark for all standard library functions. +** CHANGE them if you need to define those functions in some special way. +** For instance, if you want to create one Windows DLL with the core and +** the libraries, you may want to use the following definition (define +** LUA_BUILD_AS_DLL to get it). +*/ +#if defined(LUA_BUILD_AS_DLL) + +#if defined(LUA_CORE) || defined(LUA_LIB) +#define LUA_API __declspec(dllexport) +#else +#define LUA_API __declspec(dllimport) +#endif + +#else + +#define LUA_API extern + +#endif + +/* more often than not the libs go together with the core */ +#define LUALIB_API LUA_API + + +/* +@@ LUAI_FUNC is a mark for all extern functions that are not to be +@* exported to outside modules. +@@ LUAI_DATA is a mark for all extern (const) variables that are not to +@* be exported to outside modules. +** CHANGE them if you need to mark them in some special way. Elf/gcc +** (versions 3.2 and later) mark them as "hidden" to optimize access +** when Lua is compiled as a shared library. +*/ +#if defined(luaall_c) +#define LUAI_FUNC static +#define LUAI_DATA /* empty */ + +#elif defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ + defined(__ELF__) +#define LUAI_FUNC __attribute__((visibility("hidden"))) extern +#define LUAI_DATA LUAI_FUNC + +#else +#define LUAI_FUNC extern +#define LUAI_DATA extern +#endif + + + +/* +@@ LUA_QL describes how error messages quote program elements. +** CHANGE it if you want a different appearance. +*/ +#define LUA_QL(x) "'" x "'" +#define LUA_QS LUA_QL("%s") + + +/* +@@ LUA_IDSIZE gives the maximum size for the description of the source +@* of a function in debug information. +** CHANGE it if you want a different size. +*/ +#define LUA_IDSIZE 60 + + +/* +** {================================================================== +** Stand-alone configuration +** =================================================================== +*/ + +#if defined(lua_c) || defined(luaall_c) + +/* +@@ lua_stdin_is_tty detects whether the standard input is a 'tty' (that +@* is, whether we're running lua interactively). +** CHANGE it if you have a better definition for non-POSIX/non-Windows +** systems. +*/ +#if defined(LUA_USE_ISATTY) +#include +#define lua_stdin_is_tty() isatty(0) +#elif defined(LUA_WIN) +#include +#include +#define lua_stdin_is_tty() _isatty(_fileno(stdin)) +#else +#define lua_stdin_is_tty() 1 /* assume stdin is a tty */ +#endif + + +/* +@@ LUA_PROMPT is the default prompt used by stand-alone Lua. +@@ LUA_PROMPT2 is the default continuation prompt used by stand-alone Lua. +** CHANGE them if you want different prompts. (You can also change the +** prompts dynamically, assigning to globals _PROMPT/_PROMPT2.) +*/ +#define LUA_PROMPT "> " +#define LUA_PROMPT2 ">> " + + +/* +@@ LUA_PROGNAME is the default name for the stand-alone Lua program. +** CHANGE it if your stand-alone interpreter has a different name and +** your system is not able to detect that name automatically. +*/ +#define LUA_PROGNAME "lua" + + +/* +@@ LUA_MAXINPUT is the maximum length for an input line in the +@* stand-alone interpreter. +** CHANGE it if you need longer lines. +*/ +#define LUA_MAXINPUT 512 + + +/* +@@ lua_readline defines how to show a prompt and then read a line from +@* the standard input. +@@ lua_saveline defines how to "save" a read line in a "history". +@@ lua_freeline defines how to free a line read by lua_readline. +** CHANGE them if you want to improve this functionality (e.g., by using +** GNU readline and history facilities). +*/ +#if defined(LUA_USE_READLINE) +#include +#include +#include +#define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) +#define lua_saveline(L,idx) \ + if (lua_strlen(L,idx) > 0) /* non-empty line? */ \ + add_history(lua_tostring(L, idx)); /* add it to history */ +#define lua_freeline(L,b) ((void)L, free(b)) +#else +#define lua_readline(L,b,p) \ + ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ + fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */ +#define lua_saveline(L,idx) { (void)L; (void)idx; } +#define lua_freeline(L,b) { (void)L; (void)b; } +#endif + +#endif + +/* }================================================================== */ + + +/* +@@ LUAI_GCPAUSE defines the default pause between garbage-collector cycles +@* as a percentage. +** CHANGE it if you want the GC to run faster or slower (higher values +** mean larger pauses which mean slower collection.) You can also change +** this value dynamically. +*/ +#define LUAI_GCPAUSE 200 /* 200% (wait memory to double before next GC) */ + + +/* +@@ LUAI_GCMUL defines the default speed of garbage collection relative to +@* memory allocation as a percentage. +** CHANGE it if you want to change the granularity of the garbage +** collection. (Higher values mean coarser collections. 0 represents +** infinity, where each step performs a full collection.) You can also +** change this value dynamically. +*/ +#define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ + + + +/* +@@ LUA_COMPAT_GETN controls compatibility with old getn behavior. +** CHANGE it (define it) if you want exact compatibility with the +** behavior of setn/getn in Lua 5.0. +*/ +#undef LUA_COMPAT_GETN + +/* +@@ LUA_COMPAT_LOADLIB controls compatibility about global loadlib. +** CHANGE it to undefined as soon as you do not need a global 'loadlib' +** function (the function is still available as 'package.loadlib'). +*/ +#undef LUA_COMPAT_LOADLIB + +/* +@@ LUA_COMPAT_VARARG controls compatibility with old vararg feature. +** CHANGE it to undefined as soon as your programs use only '...' to +** access vararg parameters (instead of the old 'arg' table). +*/ +#define LUA_COMPAT_VARARG + +/* +@@ LUA_COMPAT_MOD controls compatibility with old math.mod function. +** CHANGE it to undefined as soon as your programs use 'math.fmod' or +** the new '%' operator instead of 'math.mod'. +*/ +#define LUA_COMPAT_MOD + +/* +@@ LUA_COMPAT_LSTR controls compatibility with old long string nesting +@* facility. +** CHANGE it to 2 if you want the old behaviour, or undefine it to turn +** off the advisory error when nesting [[...]]. +*/ +#define LUA_COMPAT_LSTR 1 + +/* +@@ LUA_COMPAT_GFIND controls compatibility with old 'string.gfind' name. +** CHANGE it to undefined as soon as you rename 'string.gfind' to +** 'string.gmatch'. +*/ +#define LUA_COMPAT_GFIND + +/* +@@ LUA_COMPAT_OPENLIB controls compatibility with old 'luaL_openlib' +@* behavior. +** CHANGE it to undefined as soon as you replace to 'luaL_register' +** your uses of 'luaL_openlib' +*/ +#define LUA_COMPAT_OPENLIB + + + +/* +@@ luai_apicheck is the assert macro used by the Lua-C API. +** CHANGE luai_apicheck if you want Lua to perform some checks in the +** parameters it gets from API calls. This may slow down the interpreter +** a bit, but may be quite useful when debugging C code that interfaces +** with Lua. A useful redefinition is to use assert.h. +*/ +#if defined(LUA_USE_APICHECK) +#include +#define luai_apicheck(L,o) { (void)L; assert(o); } +#else +#define luai_apicheck(L,o) { (void)L; } +#endif + + +/* +@@ LUAI_BITSINT defines the number of bits in an int. +** CHANGE here if Lua cannot automatically detect the number of bits of +** your machine. Probably you do not need to change this. +*/ +/* avoid overflows in comparison */ +#if INT_MAX-20 < 32760 +#define LUAI_BITSINT 16 +#elif INT_MAX > 2147483640L +/* int has at least 32 bits */ +#define LUAI_BITSINT 32 +#else +#error "you must define LUA_BITSINT with number of bits in an integer" +#endif + + +/* +@@ LUAI_UINT32 is an unsigned integer with at least 32 bits. +@@ LUAI_INT32 is an signed integer with at least 32 bits. +@@ LUAI_UMEM is an unsigned integer big enough to count the total +@* memory used by Lua. +@@ LUAI_MEM is a signed integer big enough to count the total memory +@* used by Lua. +** CHANGE here if for some weird reason the default definitions are not +** good enough for your machine. (The definitions in the 'else' +** part always works, but may waste space on machines with 64-bit +** longs.) Probably you do not need to change this. +*/ +#if LUAI_BITSINT >= 32 +#define LUAI_UINT32 unsigned int +#define LUAI_INT32 int +#define LUAI_MAXINT32 INT_MAX +#define LUAI_UMEM size_t +#define LUAI_MEM ptrdiff_t +#else +/* 16-bit ints */ +#define LUAI_UINT32 unsigned long +#define LUAI_INT32 long +#define LUAI_MAXINT32 LONG_MAX +#define LUAI_UMEM unsigned long +#define LUAI_MEM long +#endif + + +/* +@@ LUAI_MAXCALLS limits the number of nested calls. +** CHANGE it if you need really deep recursive calls. This limit is +** arbitrary; its only purpose is to stop infinite recursion before +** exhausting memory. +*/ +#define LUAI_MAXCALLS 20000 + + +/* +@@ LUAI_MAXCSTACK limits the number of Lua stack slots that a C function +@* can use. +** CHANGE it if you need lots of (Lua) stack space for your C +** functions. This limit is arbitrary; its only purpose is to stop C +** functions to consume unlimited stack space. +*/ +#define LUAI_MAXCSTACK 2048 + + + +/* +** {================================================================== +** CHANGE (to smaller values) the following definitions if your system +** has a small C stack. (Or you may want to change them to larger +** values if your system has a large C stack and these limits are +** too rigid for you.) Some of these constants control the size of +** stack-allocated arrays used by the compiler or the interpreter, while +** others limit the maximum number of recursive calls that the compiler +** or the interpreter can perform. Values too large may cause a C stack +** overflow for some forms of deep constructs. +** =================================================================== +*/ + + +/* +@@ LUAI_MAXCCALLS is the maximum depth for nested C calls (short) and +@* syntactical nested non-terminals in a program. +*/ +#define LUAI_MAXCCALLS 200 + + +/* +@@ LUAI_MAXVARS is the maximum number of local variables per function +@* (must be smaller than 250). +*/ +#define LUAI_MAXVARS 200 + + +/* +@@ LUAI_MAXUPVALUES is the maximum number of upvalues per function +@* (must be smaller than 250). +*/ +#define LUAI_MAXUPVALUES 60 + + +/* +@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. +*/ +#define LUAL_BUFFERSIZE BUFSIZ + +/* }================================================================== */ + + + + +/* +** {================================================================== +@@ LUA_NUMBER is the type of numbers in Lua. +** CHANGE the following definitions only if you want to build Lua +** with a number type different from double. You may also need to +** change lua_number2int & lua_number2integer. +** =================================================================== +*/ + +#define LUA_NUMBER_DOUBLE +#define LUA_NUMBER double + +/* +@@ LUAI_UACNUMBER is the result of an 'usual argument conversion' +@* over a number. +*/ +#define LUAI_UACNUMBER double + + +/* +@@ LUA_NUMBER_SCAN is the format for reading numbers. +@@ LUA_NUMBER_FMT is the format for writing numbers. +@@ lua_number2str converts a number to a string. +@@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. +@@ lua_str2number converts a string to a number. +*/ +#define LUA_NUMBER_SCAN "%lf" +#define LUA_NUMBER_FMT "%.14g" +#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) +#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ +#define lua_str2number(s,p) strtod((s), (p)) + + +/* +@@ The luai_num* macros define the primitive operations over numbers. +*/ +#if defined(LUA_CORE) +#include +#define luai_numadd(a,b) ((a)+(b)) +#define luai_numsub(a,b) ((a)-(b)) +#define luai_nummul(a,b) ((a)*(b)) +#define luai_numdiv(a,b) ((a)/(b)) +#define luai_nummod(a,b) ((a) - floor((a)/(b))*(b)) +#define luai_numpow(a,b) (pow(a,b)) +#define luai_numunm(a) (-(a)) +#define luai_numeq(a,b) ((a)==(b)) +#define luai_numlt(a,b) ((a)<(b)) +#define luai_numle(a,b) ((a)<=(b)) +#define luai_numisnan(a) (!luai_numeq((a), (a))) +#endif + + +/* +@@ lua_number2int is a macro to convert lua_Number to int. +@@ lua_number2integer is a macro to convert lua_Number to lua_Integer. +** CHANGE them if you know a faster way to convert a lua_Number to +** int (with any rounding method and without throwing errors) in your +** system. In Pentium machines, a naive typecast from double to int +** in C is extremely slow, so any alternative is worth trying. +*/ + +/* On a Pentium, resort to a trick */ +#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) && !defined(__SSE2__) && \ + (defined(__i386) || defined (_M_IX86) || defined(__i386__)) + +/* On a Microsoft compiler, use assembler */ +#if defined(_MSC_VER) + +#define lua_number2int(i,d) __asm fld d __asm fistp i +#define lua_number2integer(i,n) lua_number2int(i, n) + +/* the next trick should work on any Pentium, but sometimes clashes + with a DirectX idiosyncrasy */ +#else + +union luai_Cast { double l_d; long l_l; }; +#define lua_number2int(i,d) \ + { volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; } +#define lua_number2integer(i,n) lua_number2int(i, n) + +#endif + + +/* this option always works, but may be slow */ +#else +#define lua_number2int(i,d) ((i)=(int)(d)) +#define lua_number2integer(i,d) ((i)=(lua_Integer)(d)) + +#endif + +/* }================================================================== */ + + +/* +@@ LUAI_USER_ALIGNMENT_T is a type that requires maximum alignment. +** CHANGE it if your system requires alignments larger than double. (For +** instance, if your system supports long doubles and they must be +** aligned in 16-byte boundaries, then you should add long double in the +** union.) Probably you do not need to change this. +*/ +#define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; } + + +/* +@@ LUAI_THROW/LUAI_TRY define how Lua does exception handling. +** CHANGE them if you prefer to use longjmp/setjmp even with C++ +** or if want/don't to use _longjmp/_setjmp instead of regular +** longjmp/setjmp. By default, Lua handles errors with exceptions when +** compiling as C++ code, with _longjmp/_setjmp when asked to use them, +** and with longjmp/setjmp otherwise. +*/ +#if defined(__cplusplus) +/* C++ exceptions */ +#define LUAI_THROW(L,c) throw(c) +#define LUAI_TRY(L,c,a) try { a } catch(...) \ + { if ((c)->status == 0) (c)->status = -1; } +#define luai_jmpbuf int /* dummy variable */ + +#elif defined(LUA_USE_ULONGJMP) +/* in Unix, try _longjmp/_setjmp (more efficient) */ +#define LUAI_THROW(L,c) _longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#else +/* default handling with long jumps */ +#define LUAI_THROW(L,c) longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#endif + + +/* +@@ LUA_MAXCAPTURES is the maximum number of captures that a pattern +@* can do during pattern-matching. +** CHANGE it if you need more captures. This limit is arbitrary. +*/ +#define LUA_MAXCAPTURES 32 + + +/* +@@ lua_tmpnam is the function that the OS library uses to create a +@* temporary name. +@@ LUA_TMPNAMBUFSIZE is the maximum size of a name created by lua_tmpnam. +** CHANGE them if you have an alternative to tmpnam (which is considered +** insecure) or if you want the original tmpnam anyway. By default, Lua +** uses tmpnam except when POSIX is available, where it uses mkstemp. +*/ +#if defined(loslib_c) || defined(luaall_c) + +#if defined(LUA_USE_MKSTEMP) +#include +#define LUA_TMPNAMBUFSIZE 32 +#define lua_tmpnam(b,e) { \ + strcpy(b, "/tmp/lua_XXXXXX"); \ + e = mkstemp(b); \ + if (e != -1) close(e); \ + e = (e == -1); } + +#else +#define LUA_TMPNAMBUFSIZE L_tmpnam +#define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); } +#endif + +#endif + + +/* +@@ lua_popen spawns a new process connected to the current one through +@* the file streams. +** CHANGE it if you have a way to implement it in your system. +*/ +#if defined(LUA_USE_POPEN) + +#define lua_popen(L,c,m) ((void)L, popen(c,m)) +#define lua_pclose(L,file) ((void)L, (pclose(file) != -1)) + +#elif defined(LUA_WIN) + +#define lua_popen(L,c,m) ((void)L, _popen(c,m)) +#define lua_pclose(L,file) ((void)L, (_pclose(file) != -1)) + +#else + +#define lua_popen(L,c,m) ((void)((void)c, m), \ + luaL_error(L, LUA_QL("popen") " not supported"), (FILE*)0) +#define lua_pclose(L,file) ((void)((void)L, file), 0) + +#endif + +/* +@@ LUA_DL_* define which dynamic-library system Lua should use. +** CHANGE here if Lua has problems choosing the appropriate +** dynamic-library system for your platform (either Windows' DLL, Mac's +** dyld, or Unix's dlopen). If your system is some kind of Unix, there +** is a good chance that it has dlopen, so LUA_DL_DLOPEN will work for +** it. To use dlopen you also need to adapt the src/Makefile (probably +** adding -ldl to the linker options), so Lua does not select it +** automatically. (When you change the makefile to add -ldl, you must +** also add -DLUA_USE_DLOPEN.) +** If you do not want any kind of dynamic library, undefine all these +** options. +** By default, _WIN32 gets LUA_DL_DLL and MAC OS X gets LUA_DL_DYLD. +*/ +#if defined(LUA_USE_DLOPEN) +#define LUA_DL_DLOPEN +#endif + +#if defined(LUA_WIN) +#define LUA_DL_DLL +#endif + + +/* +@@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State +@* (the data goes just *before* the lua_State pointer). +** CHANGE (define) this if you really need that. This value must be +** a multiple of the maximum alignment required for your machine. +*/ +#define LUAI_EXTRASPACE 0 + + +/* +@@ luai_userstate* allow user-specific actions on threads. +** CHANGE them if you defined LUAI_EXTRASPACE and need to do something +** extra when a thread is created/deleted/resumed/yielded. +*/ +#define luai_userstateopen(L) ((void)L) +#define luai_userstateclose(L) ((void)L) +#define luai_userstatethread(L,L1) ((void)L) +#define luai_userstatefree(L) ((void)L) +#define luai_userstateresume(L,n) ((void)L) +#define luai_userstateyield(L,n) ((void)L) + + +/* +@@ LUA_INTFRMLEN is the length modifier for integer conversions +@* in 'string.format'. +@@ LUA_INTFRM_T is the integer type correspoding to the previous length +@* modifier. +** CHANGE them if your system supports long long or does not support long. +*/ + +#if defined(LUA_USELONGLONG) + +#define LUA_INTFRMLEN "ll" +#define LUA_INTFRM_T long long + +#else + +#define LUA_INTFRMLEN "l" +#define LUA_INTFRM_T long + +#endif + + + +/* =================================================================== */ + +/* +** Local configuration. You can use this space to add your redefinitions +** without modifying the main part of the file. +*/ + + + +#endif + diff --git a/lua/src/lualib.h b/lua/src/lualib.h new file mode 100644 index 0000000..0c76232 --- /dev/null +++ b/lua/src/lualib.h @@ -0,0 +1,53 @@ +/* +** $Id: lualib.h,v 1.36 2005/12/27 17:12:00 roberto Exp $ +** Lua standard libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lualib_h +#define lualib_h + +#include "lua.h" + + +/* Key to file-handle type */ +#define LUA_FILEHANDLE "FILE*" + + +#define LUA_COLIBNAME "coroutine" +LUALIB_API int (luaopen_base) (lua_State *L); + +#define LUA_TABLIBNAME "table" +LUALIB_API int (luaopen_table) (lua_State *L); + +#define LUA_IOLIBNAME "io" +LUALIB_API int (luaopen_io) (lua_State *L); + +#define LUA_OSLIBNAME "os" +LUALIB_API int (luaopen_os) (lua_State *L); + +#define LUA_STRLIBNAME "string" +LUALIB_API int (luaopen_string) (lua_State *L); + +#define LUA_MATHLIBNAME "math" +LUALIB_API int (luaopen_math) (lua_State *L); + +#define LUA_DBLIBNAME "debug" +LUALIB_API int (luaopen_debug) (lua_State *L); + +#define LUA_LOADLIBNAME "package" +LUALIB_API int (luaopen_package) (lua_State *L); + + +/* open all previous libraries */ +LUALIB_API void (luaL_openlibs) (lua_State *L); + + + +#ifndef lua_assert +#define lua_assert(x) ((void)0) +#endif + + +#endif diff --git a/lua/src/lundump.c b/lua/src/lundump.c new file mode 100644 index 0000000..7fc635e --- /dev/null +++ b/lua/src/lundump.c @@ -0,0 +1,223 @@ +/* +** $Id: lundump.c,v 1.60 2006/02/16 15:53:49 lhf Exp $ +** load precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#include + +#define lundump_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstring.h" +#include "lundump.h" +#include "lzio.h" + +typedef struct { + lua_State* L; + ZIO* Z; + Mbuffer* b; + const char* name; +} LoadState; + +#ifdef LUAC_TRUST_BINARIES +#define IF(c,s) +#else +#define IF(c,s) if (c) error(S,s) + +static void error(LoadState* S, const char* why) +{ + luaO_pushfstring(S->L,"%s: %s in precompiled chunk",S->name,why); + luaD_throw(S->L,LUA_ERRSYNTAX); +} +#endif + +#define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size)) +#define LoadByte(S) (lu_byte)LoadChar(S) +#define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x)) +#define LoadVector(S,b,n,size) LoadMem(S,b,n,size) + +static void LoadBlock(LoadState* S, void* b, size_t size) +{ + size_t r=luaZ_read(S->Z,b,size); + IF (r!=0, "unexpected end"); +} + +static int LoadChar(LoadState* S) +{ + char x; + LoadVar(S,x); + return x; +} + +static int LoadInt(LoadState* S) +{ + int x; + LoadVar(S,x); + IF (x<0, "bad integer"); + return x; +} + +static lua_Number LoadNumber(LoadState* S) +{ + lua_Number x; + LoadVar(S,x); + return x; +} + +static TString* LoadString(LoadState* S) +{ + size_t size; + LoadVar(S,size); + if (size==0) + return NULL; + else + { + char* s=luaZ_openspace(S->L,S->b,size); + LoadBlock(S,s,size); + return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ + } +} + +static void LoadCode(LoadState* S, Proto* f) +{ + int n=LoadInt(S); + f->code=luaM_newvector(S->L,n,Instruction); + f->sizecode=n; + LoadVector(S,f->code,n,sizeof(Instruction)); +} + +static Proto* LoadFunction(LoadState* S, TString* p); + +static void LoadConstants(LoadState* S, Proto* f) +{ + int i,n; + n=LoadInt(S); + f->k=luaM_newvector(S->L,n,TValue); + f->sizek=n; + for (i=0; ik[i]); + for (i=0; ik[i]; + int t=LoadChar(S); + switch (t) + { + case LUA_TNIL: + setnilvalue(o); + break; + case LUA_TBOOLEAN: + setbvalue(o,LoadChar(S)); + break; + case LUA_TNUMBER: + setnvalue(o,LoadNumber(S)); + break; + case LUA_TSTRING: + setsvalue2n(S->L,o,LoadString(S)); + break; + default: + IF (1, "bad constant"); + break; + } + } + n=LoadInt(S); + f->p=luaM_newvector(S->L,n,Proto*); + f->sizep=n; + for (i=0; ip[i]=NULL; + for (i=0; ip[i]=LoadFunction(S,f->source); +} + +static void LoadDebug(LoadState* S, Proto* f) +{ + int i,n; + n=LoadInt(S); + f->lineinfo=luaM_newvector(S->L,n,int); + f->sizelineinfo=n; + LoadVector(S,f->lineinfo,n,sizeof(int)); + n=LoadInt(S); + f->locvars=luaM_newvector(S->L,n,LocVar); + f->sizelocvars=n; + for (i=0; ilocvars[i].varname=NULL; + for (i=0; ilocvars[i].varname=LoadString(S); + f->locvars[i].startpc=LoadInt(S); + f->locvars[i].endpc=LoadInt(S); + } + n=LoadInt(S); + f->upvalues=luaM_newvector(S->L,n,TString*); + f->sizeupvalues=n; + for (i=0; iupvalues[i]=NULL; + for (i=0; iupvalues[i]=LoadString(S); +} + +static Proto* LoadFunction(LoadState* S, TString* p) +{ + Proto* f=luaF_newproto(S->L); + setptvalue2s(S->L,S->L->top,f); incr_top(S->L); + f->source=LoadString(S); if (f->source==NULL) f->source=p; + f->linedefined=LoadInt(S); + f->lastlinedefined=LoadInt(S); + f->nups=LoadByte(S); + f->numparams=LoadByte(S); + f->is_vararg=LoadByte(S); + f->maxstacksize=LoadByte(S); + LoadCode(S,f); + LoadConstants(S,f); + LoadDebug(S,f); + IF (!luaG_checkcode(f), "bad code"); + S->L->top--; + return f; +} + +static void LoadHeader(LoadState* S) +{ + char h[LUAC_HEADERSIZE]; + char s[LUAC_HEADERSIZE]; + luaU_header(h); + LoadBlock(S,s,LUAC_HEADERSIZE); + IF (memcmp(h,s,LUAC_HEADERSIZE)!=0, "bad header"); +} + +/* +** load precompiled chunk +*/ +Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name) +{ + LoadState S; + if (*name=='@' || *name=='=') + S.name=name+1; + else if (*name==LUA_SIGNATURE[0]) + S.name="binary string"; + else + S.name=name; + S.L=L; + S.Z=Z; + S.b=buff; + LoadHeader(&S); + return LoadFunction(&S,luaS_newliteral(L,"=?")); +} + +/* +* make header +*/ +void luaU_header (char* h) +{ + int x=1; + memcpy(h,LUA_SIGNATURE,sizeof(LUA_SIGNATURE)-1); + h+=sizeof(LUA_SIGNATURE)-1; + *h++=(char)LUAC_VERSION; + *h++=(char)LUAC_FORMAT; + *h++=(char)*(char*)&x; /* endianness */ + *h++=(char)sizeof(int); + *h++=(char)sizeof(size_t); + *h++=(char)sizeof(Instruction); + *h++=(char)sizeof(lua_Number); + *h++=(char)(((lua_Number)0.5)==0); /* is lua_Number integral? */ +} diff --git a/lua/src/lundump.h b/lua/src/lundump.h new file mode 100644 index 0000000..58cca5d --- /dev/null +++ b/lua/src/lundump.h @@ -0,0 +1,36 @@ +/* +** $Id: lundump.h,v 1.40 2005/11/11 14:03:13 lhf Exp $ +** load precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#ifndef lundump_h +#define lundump_h + +#include "lobject.h" +#include "lzio.h" + +/* load one chunk; from lundump.c */ +LUAI_FUNC Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name); + +/* make header; from lundump.c */ +LUAI_FUNC void luaU_header (char* h); + +/* dump one chunk; from ldump.c */ +LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip); + +#ifdef luac_c +/* print one chunk; from print.c */ +LUAI_FUNC void luaU_print (const Proto* f, int full); +#endif + +/* for header of binary files -- this is Lua 5.1 */ +#define LUAC_VERSION 0x51 + +/* for header of binary files -- this is the official format */ +#define LUAC_FORMAT 0 + +/* size of header of binary files */ +#define LUAC_HEADERSIZE 12 + +#endif diff --git a/lua/src/lvm.c b/lua/src/lvm.c new file mode 100644 index 0000000..08802f4 --- /dev/null +++ b/lua/src/lvm.c @@ -0,0 +1,765 @@ +/* +** $Id: lvm.c,v 2.63a 2006/06/05 15:58:59 roberto Exp $ +** Lua virtual machine +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define lvm_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lvm.h" + + + +/* limit for table tag-method chains (to avoid loops) */ +#define MAXTAGLOOP 100 + + +const TValue *luaV_tonumber (const TValue *obj, TValue *n) { + lua_Number num; + if (ttisnumber(obj)) return obj; + if (ttisstring(obj) && luaO_str2d(svalue(obj), &num)) { + setnvalue(n, num); + return n; + } + else + return NULL; +} + + +int luaV_tostring (lua_State *L, StkId obj) { + if (!ttisnumber(obj)) + return 0; + else { + char s[LUAI_MAXNUMBER2STR]; + lua_Number n = nvalue(obj); + lua_number2str(s, n); + setsvalue2s(L, obj, luaS_new(L, s)); + return 1; + } +} + + +static void traceexec (lua_State *L, const Instruction *pc) { + lu_byte mask = L->hookmask; + const Instruction *oldpc = L->savedpc; + L->savedpc = pc; + if (mask > LUA_MASKLINE) { /* instruction-hook set? */ + if (L->hookcount == 0) { + resethookcount(L); + luaD_callhook(L, LUA_HOOKCOUNT, -1); + } + } + if (mask & LUA_MASKLINE) { + Proto *p = ci_func(L->ci)->l.p; + int npc = pcRel(pc, p); + int newline = getline(p, npc); + /* call linehook when enter a new function, when jump back (loop), + or when enter a new line */ + if (npc == 0 || pc <= oldpc || newline != getline(p, pcRel(oldpc, p))) + luaD_callhook(L, LUA_HOOKLINE, newline); + } +} + + +static void callTMres (lua_State *L, StkId res, const TValue *f, + const TValue *p1, const TValue *p2) { + ptrdiff_t result = savestack(L, res); + setobj2s(L, L->top, f); /* push function */ + setobj2s(L, L->top+1, p1); /* 1st argument */ + setobj2s(L, L->top+2, p2); /* 2nd argument */ + luaD_checkstack(L, 3); + L->top += 3; + luaD_call(L, L->top - 3, 1); + res = restorestack(L, result); + L->top--; + setobjs2s(L, res, L->top); +} + + + +static void callTM (lua_State *L, const TValue *f, const TValue *p1, + const TValue *p2, const TValue *p3) { + setobj2s(L, L->top, f); /* push function */ + setobj2s(L, L->top+1, p1); /* 1st argument */ + setobj2s(L, L->top+2, p2); /* 2nd argument */ + setobj2s(L, L->top+3, p3); /* 3th argument */ + luaD_checkstack(L, 4); + L->top += 4; + luaD_call(L, L->top - 4, 0); +} + + +void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val) { + int loop; + for (loop = 0; loop < MAXTAGLOOP; loop++) { + const TValue *tm; + if (ttistable(t)) { /* `t' is a table? */ + Table *h = hvalue(t); + const TValue *res = luaH_get(h, key); /* do a primitive get */ + if (!ttisnil(res) || /* result is no nil? */ + (tm = fasttm(L, h->metatable, TM_INDEX)) == NULL) { /* or no TM? */ + setobj2s(L, val, res); + return; + } + /* else will try the tag method */ + } + else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_INDEX))) + luaG_typeerror(L, t, "index"); + if (ttisfunction(tm)) { + callTMres(L, val, tm, t, key); + return; + } + t = tm; /* else repeat with `tm' */ + } + luaG_runerror(L, "loop in gettable"); +} + + +void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) { + int loop; + for (loop = 0; loop < MAXTAGLOOP; loop++) { + const TValue *tm; + if (ttistable(t)) { /* `t' is a table? */ + Table *h = hvalue(t); + TValue *oldval = luaH_set(L, h, key); /* do a primitive set */ + if (!ttisnil(oldval) || /* result is no nil? */ + (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */ + setobj2t(L, oldval, val); + luaC_barriert(L, h, val); + return; + } + /* else will try the tag method */ + } + else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))) + luaG_typeerror(L, t, "index"); + if (ttisfunction(tm)) { + callTM(L, tm, t, key, val); + return; + } + t = tm; /* else repeat with `tm' */ + } + luaG_runerror(L, "loop in settable"); +} + + +static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2, + StkId res, TMS event) { + const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ + if (ttisnil(tm)) + tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ + if (ttisnil(tm)) return 0; + callTMres(L, res, tm, p1, p2); + return 1; +} + + +static const TValue *get_compTM (lua_State *L, Table *mt1, Table *mt2, + TMS event) { + const TValue *tm1 = fasttm(L, mt1, event); + const TValue *tm2; + if (tm1 == NULL) return NULL; /* no metamethod */ + if (mt1 == mt2) return tm1; /* same metatables => same metamethods */ + tm2 = fasttm(L, mt2, event); + if (tm2 == NULL) return NULL; /* no metamethod */ + if (luaO_rawequalObj(tm1, tm2)) /* same metamethods? */ + return tm1; + return NULL; +} + + +static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2, + TMS event) { + const TValue *tm1 = luaT_gettmbyobj(L, p1, event); + const TValue *tm2; + if (ttisnil(tm1)) return -1; /* no metamethod? */ + tm2 = luaT_gettmbyobj(L, p2, event); + if (!luaO_rawequalObj(tm1, tm2)) /* different metamethods? */ + return -1; + callTMres(L, L->top, tm1, p1, p2); + return !l_isfalse(L->top); +} + + +static int l_strcmp (const TString *ls, const TString *rs) { + const char *l = getstr(ls); + size_t ll = ls->tsv.len; + const char *r = getstr(rs); + size_t lr = rs->tsv.len; + for (;;) { + int temp = strcoll(l, r); + if (temp != 0) return temp; + else { /* strings are equal up to a `\0' */ + size_t len = strlen(l); /* index of first `\0' in both strings */ + if (len == lr) /* r is finished? */ + return (len == ll) ? 0 : 1; + else if (len == ll) /* l is finished? */ + return -1; /* l is smaller than r (because r is not finished) */ + /* both strings longer than `len'; go on comparing (after the `\0') */ + len++; + l += len; ll -= len; r += len; lr -= len; + } + } +} + + +int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) { + int res; + if (ttype(l) != ttype(r)) + return luaG_ordererror(L, l, r); + else if (ttisnumber(l)) + return luai_numlt(nvalue(l), nvalue(r)); + else if (ttisstring(l)) + return l_strcmp(rawtsvalue(l), rawtsvalue(r)) < 0; + else if ((res = call_orderTM(L, l, r, TM_LT)) != -1) + return res; + return luaG_ordererror(L, l, r); +} + + +static int lessequal (lua_State *L, const TValue *l, const TValue *r) { + int res; + if (ttype(l) != ttype(r)) + return luaG_ordererror(L, l, r); + else if (ttisnumber(l)) + return luai_numle(nvalue(l), nvalue(r)); + else if (ttisstring(l)) + return l_strcmp(rawtsvalue(l), rawtsvalue(r)) <= 0; + else if ((res = call_orderTM(L, l, r, TM_LE)) != -1) /* first try `le' */ + return res; + else if ((res = call_orderTM(L, r, l, TM_LT)) != -1) /* else try `lt' */ + return !res; + return luaG_ordererror(L, l, r); +} + + +int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2) { + const TValue *tm; + lua_assert(ttype(t1) == ttype(t2)); + switch (ttype(t1)) { + case LUA_TNIL: return 1; + case LUA_TNUMBER: return luai_numeq(nvalue(t1), nvalue(t2)); + case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ + case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); + case LUA_TUSERDATA: { + if (uvalue(t1) == uvalue(t2)) return 1; + tm = get_compTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, + TM_EQ); + break; /* will try TM */ + } + case LUA_TTABLE: { + if (hvalue(t1) == hvalue(t2)) return 1; + tm = get_compTM(L, hvalue(t1)->metatable, hvalue(t2)->metatable, TM_EQ); + break; /* will try TM */ + } + default: return gcvalue(t1) == gcvalue(t2); + } + if (tm == NULL) return 0; /* no TM? */ + callTMres(L, L->top, tm, t1, t2); /* call TM */ + return !l_isfalse(L->top); +} + + +void luaV_concat (lua_State *L, int total, int last) { + do { + StkId top = L->base + last + 1; + int n = 2; /* number of elements handled in this pass (at least 2) */ + if (!(ttisstring(top-2) || ttisnumber(top-2)) || !tostring(L, top-1)) { + if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) + luaG_concaterror(L, top-2, top-1); + } else if (tsvalue(top-1)->len == 0) /* second op is empty? */ + (void)tostring(L, top - 2); /* result is first op (as string) */ + else { + /* at least two string values; get as many as possible */ + size_t tl = tsvalue(top-1)->len; + char *buffer; + int i; + /* collect total length */ + for (n = 1; n < total && tostring(L, top-n-1); n++) { + size_t l = tsvalue(top-n-1)->len; + if (l >= MAX_SIZET - tl) luaG_runerror(L, "string length overflow"); + tl += l; + } + buffer = luaZ_openspace(L, &G(L)->buff, tl); + tl = 0; + for (i=n; i>0; i--) { /* concat all strings */ + size_t l = tsvalue(top-i)->len; + memcpy(buffer+tl, svalue(top-i), l); + tl += l; + } + setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl)); + } + total -= n-1; /* got `n' strings to create 1 new */ + last -= n-1; + } while (total > 1); /* repeat until only 1 result left */ +} + + +static void Arith (lua_State *L, StkId ra, const TValue *rb, + const TValue *rc, TMS op) { + TValue tempb, tempc; + const TValue *b, *c; + if ((b = luaV_tonumber(rb, &tempb)) != NULL && + (c = luaV_tonumber(rc, &tempc)) != NULL) { + lua_Number nb = nvalue(b), nc = nvalue(c); + switch (op) { + case TM_ADD: setnvalue(ra, luai_numadd(nb, nc)); break; + case TM_SUB: setnvalue(ra, luai_numsub(nb, nc)); break; + case TM_MUL: setnvalue(ra, luai_nummul(nb, nc)); break; + case TM_DIV: setnvalue(ra, luai_numdiv(nb, nc)); break; + case TM_MOD: setnvalue(ra, luai_nummod(nb, nc)); break; + case TM_POW: setnvalue(ra, luai_numpow(nb, nc)); break; + case TM_UNM: setnvalue(ra, luai_numunm(nb)); break; + default: lua_assert(0); break; + } + } + else if (!call_binTM(L, rb, rc, ra, op)) + luaG_aritherror(L, rb, rc); +} + + + +/* +** some macros for common tasks in `luaV_execute' +*/ + +#define runtime_check(L, c) { if (!(c)) break; } + +#define RA(i) (base+GETARG_A(i)) +/* to be used after possible stack reallocation */ +#define RB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_B(i)) +#define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i)) +#define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \ + ISK(GETARG_B(i)) ? k+INDEXK(GETARG_B(i)) : base+GETARG_B(i)) +#define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \ + ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i)) +#define KBx(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, k+GETARG_Bx(i)) + + +#define dojump(L,pc,i) {(pc) += (i); luai_threadyield(L);} + + +#define Protect(x) { L->savedpc = pc; {x;}; base = L->base; } + + +#define arith_op(op,tm) { \ + TValue *rb = RKB(i); \ + TValue *rc = RKC(i); \ + if (ttisnumber(rb) && ttisnumber(rc)) { \ + lua_Number nb = nvalue(rb), nc = nvalue(rc); \ + setnvalue(ra, op(nb, nc)); \ + } \ + else \ + Protect(Arith(L, ra, rb, rc, tm)); \ + } + + + +void luaV_execute (lua_State *L, int nexeccalls) { + LClosure *cl; + StkId base; + TValue *k; + const Instruction *pc; + reentry: /* entry point */ + lua_assert(isLua(L->ci)); + pc = L->savedpc; + cl = &clvalue(L->ci->func)->l; + base = L->base; + k = cl->p->k; + /* main loop of interpreter */ + for (;;) { + const Instruction i = *pc++; + StkId ra; + if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && + (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { + traceexec(L, pc); + if (L->status == LUA_YIELD) { /* did hook yield? */ + L->savedpc = pc - 1; + return; + } + base = L->base; + } + /* warning!! several calls may realloc the stack and invalidate `ra' */ + ra = RA(i); + lua_assert(base == L->base && L->base == L->ci->base); + lua_assert(base <= L->top && L->top <= L->stack + L->stacksize); + lua_assert(L->top == L->ci->top || luaG_checkopenop(i)); + switch (GET_OPCODE(i)) { + case OP_MOVE: { + setobjs2s(L, ra, RB(i)); + continue; + } + case OP_LOADK: { + setobj2s(L, ra, KBx(i)); + continue; + } + case OP_LOADBOOL: { + setbvalue(ra, GETARG_B(i)); + if (GETARG_C(i)) pc++; /* skip next instruction (if C) */ + continue; + } + case OP_LOADNIL: { + TValue *rb = RB(i); + do { + setnilvalue(rb--); + } while (rb >= ra); + continue; + } + case OP_GETUPVAL: { + int b = GETARG_B(i); + setobj2s(L, ra, cl->upvals[b]->v); + continue; + } + case OP_GETGLOBAL: { + TValue g; + TValue *rb = KBx(i); + sethvalue(L, &g, cl->env); + lua_assert(ttisstring(rb)); + Protect(luaV_gettable(L, &g, rb, ra)); + continue; + } + case OP_GETTABLE: { + Protect(luaV_gettable(L, RB(i), RKC(i), ra)); + continue; + } + case OP_SETGLOBAL: { + TValue g; + sethvalue(L, &g, cl->env); + lua_assert(ttisstring(KBx(i))); + Protect(luaV_settable(L, &g, KBx(i), ra)); + continue; + } + case OP_SETUPVAL: { + UpVal *uv = cl->upvals[GETARG_B(i)]; + setobj(L, uv->v, ra); + luaC_barrier(L, uv, ra); + continue; + } + case OP_SETTABLE: { + Protect(luaV_settable(L, ra, RKB(i), RKC(i))); + continue; + } + case OP_NEWTABLE: { + int b = GETARG_B(i); + int c = GETARG_C(i); + sethvalue(L, ra, luaH_new(L, luaO_fb2int(b), luaO_fb2int(c))); + Protect(luaC_checkGC(L)); + continue; + } + case OP_SELF: { + StkId rb = RB(i); + setobjs2s(L, ra+1, rb); + Protect(luaV_gettable(L, rb, RKC(i), ra)); + continue; + } + case OP_ADD: { + arith_op(luai_numadd, TM_ADD); + continue; + } + case OP_SUB: { + arith_op(luai_numsub, TM_SUB); + continue; + } + case OP_MUL: { + arith_op(luai_nummul, TM_MUL); + continue; + } + case OP_DIV: { + arith_op(luai_numdiv, TM_DIV); + continue; + } + case OP_MOD: { + arith_op(luai_nummod, TM_MOD); + continue; + } + case OP_POW: { + arith_op(luai_numpow, TM_POW); + continue; + } + case OP_UNM: { + TValue *rb = RB(i); + if (ttisnumber(rb)) { + lua_Number nb = nvalue(rb); + setnvalue(ra, luai_numunm(nb)); + } + else { + Protect(Arith(L, ra, rb, rb, TM_UNM)); + } + continue; + } + case OP_NOT: { + int res = l_isfalse(RB(i)); /* next assignment may change this value */ + setbvalue(ra, res); + continue; + } + case OP_LEN: { + const TValue *rb = RB(i); + switch (ttype(rb)) { + case LUA_TTABLE: { + setnvalue(ra, cast_num(luaH_getn(hvalue(rb)))); + break; + } + case LUA_TSTRING: { + setnvalue(ra, cast_num(tsvalue(rb)->len)); + break; + } + default: { /* try metamethod */ + Protect( + if (!call_binTM(L, rb, luaO_nilobject, ra, TM_LEN)) + luaG_typeerror(L, rb, "get length of"); + ) + } + } + continue; + } + case OP_CONCAT: { + int b = GETARG_B(i); + int c = GETARG_C(i); + Protect(luaV_concat(L, c-b+1, c); luaC_checkGC(L)); + setobjs2s(L, RA(i), base+b); + continue; + } + case OP_JMP: { + dojump(L, pc, GETARG_sBx(i)); + continue; + } + case OP_EQ: { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + Protect( + if (equalobj(L, rb, rc) == GETARG_A(i)) + dojump(L, pc, GETARG_sBx(*pc)); + ) + pc++; + continue; + } + case OP_LT: { + Protect( + if (luaV_lessthan(L, RKB(i), RKC(i)) == GETARG_A(i)) + dojump(L, pc, GETARG_sBx(*pc)); + ) + pc++; + continue; + } + case OP_LE: { + Protect( + if (lessequal(L, RKB(i), RKC(i)) == GETARG_A(i)) + dojump(L, pc, GETARG_sBx(*pc)); + ) + pc++; + continue; + } + case OP_TEST: { + if (l_isfalse(ra) != GETARG_C(i)) + dojump(L, pc, GETARG_sBx(*pc)); + pc++; + continue; + } + case OP_TESTSET: { + TValue *rb = RB(i); + if (l_isfalse(rb) != GETARG_C(i)) { + setobjs2s(L, ra, rb); + dojump(L, pc, GETARG_sBx(*pc)); + } + pc++; + continue; + } + case OP_CALL: { + int b = GETARG_B(i); + int nresults = GETARG_C(i) - 1; + if (b != 0) L->top = ra+b; /* else previous instruction set top */ + L->savedpc = pc; + switch (luaD_precall(L, ra, nresults)) { + case PCRLUA: { + nexeccalls++; + goto reentry; /* restart luaV_execute over new Lua function */ + } + case PCRC: { + /* it was a C function (`precall' called it); adjust results */ + if (nresults >= 0) L->top = L->ci->top; + base = L->base; + continue; + } + default: { + return; /* yield */ + } + } + } + case OP_TAILCALL: { + int b = GETARG_B(i); + if (b != 0) L->top = ra+b; /* else previous instruction set top */ + L->savedpc = pc; + lua_assert(GETARG_C(i) - 1 == LUA_MULTRET); + switch (luaD_precall(L, ra, LUA_MULTRET)) { + case PCRLUA: { + /* tail call: put new frame in place of previous one */ + CallInfo *ci = L->ci - 1; /* previous frame */ + int aux; + StkId func = ci->func; + StkId pfunc = (ci+1)->func; /* previous function index */ + if (L->openupval) luaF_close(L, ci->base); + L->base = ci->base = ci->func + ((ci+1)->base - pfunc); + for (aux = 0; pfunc+aux < L->top; aux++) /* move frame down */ + setobjs2s(L, func+aux, pfunc+aux); + ci->top = L->top = func+aux; /* correct top */ + lua_assert(L->top == L->base + clvalue(func)->l.p->maxstacksize); + ci->savedpc = L->savedpc; + ci->tailcalls++; /* one more call lost */ + L->ci--; /* remove new frame */ + goto reentry; + } + case PCRC: { /* it was a C function (`precall' called it) */ + base = L->base; + continue; + } + default: { + return; /* yield */ + } + } + } + case OP_RETURN: { + int b = GETARG_B(i); + if (b != 0) L->top = ra+b-1; + if (L->openupval) luaF_close(L, base); + L->savedpc = pc; + b = luaD_poscall(L, ra); + if (--nexeccalls == 0) /* was previous function running `here'? */ + return; /* no: return */ + else { /* yes: continue its execution */ + if (b) L->top = L->ci->top; + lua_assert(isLua(L->ci)); + lua_assert(GET_OPCODE(*((L->ci)->savedpc - 1)) == OP_CALL); + goto reentry; + } + } + case OP_FORLOOP: { + lua_Number step = nvalue(ra+2); + lua_Number idx = luai_numadd(nvalue(ra), step); /* increment index */ + lua_Number limit = nvalue(ra+1); + if (luai_numlt(0, step) ? luai_numle(idx, limit) + : luai_numle(limit, idx)) { + dojump(L, pc, GETARG_sBx(i)); /* jump back */ + setnvalue(ra, idx); /* update internal index... */ + setnvalue(ra+3, idx); /* ...and external index */ + } + continue; + } + case OP_FORPREP: { + const TValue *init = ra; + const TValue *plimit = ra+1; + const TValue *pstep = ra+2; + L->savedpc = pc; /* next steps may throw errors */ + if (!tonumber(init, ra)) + luaG_runerror(L, LUA_QL("for") " initial value must be a number"); + else if (!tonumber(plimit, ra+1)) + luaG_runerror(L, LUA_QL("for") " limit must be a number"); + else if (!tonumber(pstep, ra+2)) + luaG_runerror(L, LUA_QL("for") " step must be a number"); + setnvalue(ra, luai_numsub(nvalue(ra), nvalue(pstep))); + dojump(L, pc, GETARG_sBx(i)); + continue; + } + case OP_TFORLOOP: { + StkId cb = ra + 3; /* call base */ + setobjs2s(L, cb+2, ra+2); + setobjs2s(L, cb+1, ra+1); + setobjs2s(L, cb, ra); + L->top = cb+3; /* func. + 2 args (state and index) */ + Protect(luaD_call(L, cb, GETARG_C(i))); + L->top = L->ci->top; + cb = RA(i) + 3; /* previous call may change the stack */ + if (!ttisnil(cb)) { /* continue loop? */ + setobjs2s(L, cb-1, cb); /* save control variable */ + dojump(L, pc, GETARG_sBx(*pc)); /* jump back */ + } + pc++; + continue; + } + case OP_SETLIST: { + int n = GETARG_B(i); + int c = GETARG_C(i); + int last; + Table *h; + if (n == 0) { + n = cast_int(L->top - ra) - 1; + L->top = L->ci->top; + } + if (c == 0) c = cast_int(*pc++); + runtime_check(L, ttistable(ra)); + h = hvalue(ra); + last = ((c-1)*LFIELDS_PER_FLUSH) + n; + if (last > h->sizearray) /* needs more space? */ + luaH_resizearray(L, h, last); /* pre-alloc it at once */ + for (; n > 0; n--) { + TValue *val = ra+n; + setobj2t(L, luaH_setnum(L, h, last--), val); + luaC_barriert(L, h, val); + } + continue; + } + case OP_CLOSE: { + luaF_close(L, ra); + continue; + } + case OP_CLOSURE: { + Proto *p; + Closure *ncl; + int nup, j; + p = cl->p->p[GETARG_Bx(i)]; + nup = p->nups; + ncl = luaF_newLclosure(L, nup, cl->env); + ncl->l.p = p; + for (j=0; jl.upvals[j] = cl->upvals[GETARG_B(*pc)]; + else { + lua_assert(GET_OPCODE(*pc) == OP_MOVE); + ncl->l.upvals[j] = luaF_findupval(L, base + GETARG_B(*pc)); + } + } + setclvalue(L, ra, ncl); + Protect(luaC_checkGC(L)); + continue; + } + case OP_VARARG: { + int b = GETARG_B(i) - 1; + int j; + CallInfo *ci = L->ci; + int n = cast_int(ci->base - ci->func) - cl->p->numparams - 1; + if (b == LUA_MULTRET) { + Protect(luaD_checkstack(L, n)); + ra = RA(i); /* previous call may change the stack */ + b = n; + L->top = ra + n; + } + for (j = 0; j < b; j++) { + if (j < n) { + setobjs2s(L, ra + j, ci->base - n + j); + } + else { + setnilvalue(ra + j); + } + } + continue; + } + } + } +} + diff --git a/lua/src/lvm.h b/lua/src/lvm.h new file mode 100644 index 0000000..788423f --- /dev/null +++ b/lua/src/lvm.h @@ -0,0 +1,36 @@ +/* +** $Id: lvm.h,v 2.5 2005/08/22 18:54:49 roberto Exp $ +** Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#ifndef lvm_h +#define lvm_h + + +#include "ldo.h" +#include "lobject.h" +#include "ltm.h" + + +#define tostring(L,o) ((ttype(o) == LUA_TSTRING) || (luaV_tostring(L, o))) + +#define tonumber(o,n) (ttype(o) == LUA_TNUMBER || \ + (((o) = luaV_tonumber(o,n)) != NULL)) + +#define equalobj(L,o1,o2) \ + (ttype(o1) == ttype(o2) && luaV_equalval(L, o1, o2)) + + +LUAI_FUNC int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r); +LUAI_FUNC int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2); +LUAI_FUNC const TValue *luaV_tonumber (const TValue *obj, TValue *n); +LUAI_FUNC int luaV_tostring (lua_State *L, StkId obj); +LUAI_FUNC void luaV_gettable (lua_State *L, const TValue *t, TValue *key, + StkId val); +LUAI_FUNC void luaV_settable (lua_State *L, const TValue *t, TValue *key, + StkId val); +LUAI_FUNC void luaV_execute (lua_State *L, int nexeccalls); +LUAI_FUNC void luaV_concat (lua_State *L, int total, int last); + +#endif diff --git a/lua/src/lzio.c b/lua/src/lzio.c new file mode 100644 index 0000000..5121ada --- /dev/null +++ b/lua/src/lzio.c @@ -0,0 +1,82 @@ +/* +** $Id: lzio.c,v 1.31 2005/06/03 20:15:29 roberto Exp $ +** a generic input stream interface +** See Copyright Notice in lua.h +*/ + + +#include + +#define lzio_c +#define LUA_CORE + +#include "lua.h" + +#include "llimits.h" +#include "lmem.h" +#include "lstate.h" +#include "lzio.h" + + +int luaZ_fill (ZIO *z) { + size_t size; + lua_State *L = z->L; + const char *buff; + lua_unlock(L); + buff = z->reader(L, z->data, &size); + lua_lock(L); + if (buff == NULL || size == 0) return EOZ; + z->n = size - 1; + z->p = buff; + return char2int(*(z->p++)); +} + + +int luaZ_lookahead (ZIO *z) { + if (z->n == 0) { + if (luaZ_fill(z) == EOZ) + return EOZ; + else { + z->n++; /* luaZ_fill removed first byte; put back it */ + z->p--; + } + } + return char2int(*z->p); +} + + +void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) { + z->L = L; + z->reader = reader; + z->data = data; + z->n = 0; + z->p = NULL; +} + + +/* --------------------------------------------------------------- read --- */ +size_t luaZ_read (ZIO *z, void *b, size_t n) { + while (n) { + size_t m; + if (luaZ_lookahead(z) == EOZ) + return n; /* return number of missing bytes */ + m = (n <= z->n) ? n : z->n; /* min. between n and z->n */ + memcpy(b, z->p, m); + z->n -= m; + z->p += m; + b = (char *)b + m; + n -= m; + } + return 0; +} + +/* ------------------------------------------------------------------------ */ +char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) { + if (n > buff->buffsize) { + if (n < LUA_MINBUFFER) n = LUA_MINBUFFER; + luaZ_resizebuffer(L, buff, n); + } + return buff->buffer; +} + + diff --git a/lua/src/lzio.h b/lua/src/lzio.h new file mode 100644 index 0000000..8f403b8 --- /dev/null +++ b/lua/src/lzio.h @@ -0,0 +1,67 @@ +/* +** $Id: lzio.h,v 1.21 2005/05/17 19:49:15 roberto Exp $ +** Buffered streams +** See Copyright Notice in lua.h +*/ + + +#ifndef lzio_h +#define lzio_h + +#include "lua.h" + +#include "lmem.h" + + +#define EOZ (-1) /* end of stream */ + +typedef struct Zio ZIO; + +#define char2int(c) cast(int, cast(unsigned char, (c))) + +#define zgetc(z) (((z)->n--)>0 ? char2int(*(z)->p++) : luaZ_fill(z)) + +typedef struct Mbuffer { + char *buffer; + size_t n; + size_t buffsize; +} Mbuffer; + +#define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0) + +#define luaZ_buffer(buff) ((buff)->buffer) +#define luaZ_sizebuffer(buff) ((buff)->buffsize) +#define luaZ_bufflen(buff) ((buff)->n) + +#define luaZ_resetbuffer(buff) ((buff)->n = 0) + + +#define luaZ_resizebuffer(L, buff, size) \ + (luaM_reallocvector(L, (buff)->buffer, (buff)->buffsize, size, char), \ + (buff)->buffsize = size) + +#define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) + + +LUAI_FUNC char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n); +LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, + void *data); +LUAI_FUNC size_t luaZ_read (ZIO* z, void* b, size_t n); /* read next n bytes */ +LUAI_FUNC int luaZ_lookahead (ZIO *z); + + + +/* --------- Private Part ------------------ */ + +struct Zio { + size_t n; /* bytes still unread */ + const char *p; /* current position in buffer */ + lua_Reader reader; + void* data; /* additional data */ + lua_State *L; /* Lua state (for reader) */ +}; + + +LUAI_FUNC int luaZ_fill (ZIO *z); + +#endif diff --git a/lua/src/print.c b/lua/src/print.c new file mode 100644 index 0000000..e240cfc --- /dev/null +++ b/lua/src/print.c @@ -0,0 +1,227 @@ +/* +** $Id: print.c,v 1.55a 2006/05/31 13:30:05 lhf Exp $ +** print bytecodes +** See Copyright Notice in lua.h +*/ + +#include +#include + +#define luac_c +#define LUA_CORE + +#include "ldebug.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lundump.h" + +#define PrintFunction luaU_print + +#define Sizeof(x) ((int)sizeof(x)) +#define VOID(p) ((const void*)(p)) + +static void PrintString(const TString* ts) +{ + const char* s=getstr(ts); + size_t i,n=ts->tsv.len; + putchar('"'); + for (i=0; ik[i]; + switch (ttype(o)) + { + case LUA_TNIL: + printf("nil"); + break; + case LUA_TBOOLEAN: + printf(bvalue(o) ? "true" : "false"); + break; + case LUA_TNUMBER: + printf(LUA_NUMBER_FMT,nvalue(o)); + break; + case LUA_TSTRING: + PrintString(rawtsvalue(o)); + break; + default: /* cannot happen */ + printf("? type=%d",ttype(o)); + break; + } +} + +static void PrintCode(const Proto* f) +{ + const Instruction* code=f->code; + int pc,n=f->sizecode; + for (pc=0; pc0) printf("[%d]\t",line); else printf("[-]\t"); + printf("%-9s\t",luaP_opnames[o]); + switch (getOpMode(o)) + { + case iABC: + printf("%d",a); + if (getBMode(o)!=OpArgN) printf(" %d",ISK(b) ? (-1-INDEXK(b)) : b); + if (getCMode(o)!=OpArgN) printf(" %d",ISK(c) ? (-1-INDEXK(c)) : c); + break; + case iABx: + if (getBMode(o)==OpArgK) printf("%d %d",a,-1-bx); else printf("%d %d",a,bx); + break; + case iAsBx: + if (o==OP_JMP) printf("%d",sbx); else printf("%d %d",a,sbx); + break; + } + switch (o) + { + case OP_LOADK: + printf("\t; "); PrintConstant(f,bx); + break; + case OP_GETUPVAL: + case OP_SETUPVAL: + printf("\t; %s", (f->sizeupvalues>0) ? getstr(f->upvalues[b]) : "-"); + break; + case OP_GETGLOBAL: + case OP_SETGLOBAL: + printf("\t; %s",svalue(&f->k[bx])); + break; + case OP_GETTABLE: + case OP_SELF: + if (ISK(c)) { printf("\t; "); PrintConstant(f,INDEXK(c)); } + break; + case OP_SETTABLE: + case OP_ADD: + case OP_SUB: + case OP_MUL: + case OP_DIV: + case OP_POW: + case OP_EQ: + case OP_LT: + case OP_LE: + if (ISK(b) || ISK(c)) + { + printf("\t; "); + if (ISK(b)) PrintConstant(f,INDEXK(b)); else printf("-"); + printf(" "); + if (ISK(c)) PrintConstant(f,INDEXK(c)); else printf("-"); + } + break; + case OP_JMP: + case OP_FORLOOP: + case OP_FORPREP: + printf("\t; to %d",sbx+pc+2); + break; + case OP_CLOSURE: + printf("\t; %p",VOID(f->p[bx])); + break; + case OP_SETLIST: + if (c==0) printf("\t; %d",(int)code[++pc]); + else printf("\t; %d",c); + break; + default: + break; + } + printf("\n"); + } +} + +#define SS(x) (x==1)?"":"s" +#define S(x) x,SS(x) + +static void PrintHeader(const Proto* f) +{ + const char* s=getstr(f->source); + if (*s=='@' || *s=='=') + s++; + else if (*s==LUA_SIGNATURE[0]) + s="(bstring)"; + else + s="(string)"; + printf("\n%s <%s:%d,%d> (%d instruction%s, %d bytes at %p)\n", + (f->linedefined==0)?"main":"function",s, + f->linedefined,f->lastlinedefined, + S(f->sizecode),f->sizecode*Sizeof(Instruction),VOID(f)); + printf("%d%s param%s, %d slot%s, %d upvalue%s, ", + f->numparams,f->is_vararg?"+":"",SS(f->numparams), + S(f->maxstacksize),S(f->nups)); + printf("%d local%s, %d constant%s, %d function%s\n", + S(f->sizelocvars),S(f->sizek),S(f->sizep)); +} + +static void PrintConstants(const Proto* f) +{ + int i,n=f->sizek; + printf("constants (%d) for %p:\n",n,VOID(f)); + for (i=0; isizelocvars; + printf("locals (%d) for %p:\n",n,VOID(f)); + for (i=0; ilocvars[i].varname),f->locvars[i].startpc+1,f->locvars[i].endpc+1); + } +} + +static void PrintUpvalues(const Proto* f) +{ + int i,n=f->sizeupvalues; + printf("upvalues (%d) for %p:\n",n,VOID(f)); + if (f->upvalues==NULL) return; + for (i=0; iupvalues[i])); + } +} + +void PrintFunction(const Proto* f, int full) +{ + int i,n=f->sizep; + PrintHeader(f); + PrintCode(f); + if (full) + { + PrintConstants(f); + PrintLocals(f); + PrintUpvalues(f); + } + for (i=0; ip[i],full); +} diff --git a/lua/test/README b/lua/test/README new file mode 100644 index 0000000..0c7f38b --- /dev/null +++ b/lua/test/README @@ -0,0 +1,26 @@ +These are simple tests for Lua. Some of them contain useful code. +They are meant to be run to make sure Lua is built correctly and also +to be read, to see how Lua programs look. + +Here is a one-line summary of each program: + + bisect.lua bisection method for solving non-linear equations + cf.lua temperature conversion table (celsius to farenheit) + echo.lua echo command line arguments + env.lua environment variables as automatic global variables + factorial.lua factorial without recursion + fib.lua fibonacci function with cache + fibfor.lua fibonacci numbers with coroutines and generators + globals.lua report global variable usage + hello.lua the first program in every language + life.lua Conway's Game of Life + luac.lua bare-bones luac + printf.lua an implementation of printf + readonly.lua make global variables readonly + sieve.lua the sieve of of Eratosthenes programmed with coroutines + sort.lua two implementations of a sort function + table.lua make table, grouping all data for the same item + trace-calls.lua trace calls + trace-globals.lua trace assigments to global variables + xd.lua hex dump + diff --git a/lua/test/bisect.lua b/lua/test/bisect.lua new file mode 100644 index 0000000..f91e69b --- /dev/null +++ b/lua/test/bisect.lua @@ -0,0 +1,27 @@ +-- bisection method for solving non-linear equations + +delta=1e-6 -- tolerance + +function bisect(f,a,b,fa,fb) + local c=(a+b)/2 + io.write(n," c=",c," a=",a," b=",b,"\n") + if c==a or c==b or math.abs(a-b) posted to lua-l +-- modified to use ANSI terminal escape sequences +-- modified to use for instead of while + +local write=io.write + +ALIVE="¥" DEAD="þ" +ALIVE="O" DEAD="-" + +function delay() -- NOTE: SYSTEM-DEPENDENT, adjust as necessary + for i=1,10000 do end + -- local i=os.clock()+1 while(os.clock() 0 do + local xm1,x,xp1,xi=self.w-1,self.w,1,self.w + while xi > 0 do + local sum = self[ym1][xm1] + self[ym1][x] + self[ym1][xp1] + + self[y][xm1] + self[y][xp1] + + self[yp1][xm1] + self[yp1][x] + self[yp1][xp1] + next[y][x] = ((sum==2) and self[y][x]) or ((sum==3) and 1) or 0 + xm1,x,xp1,xi = x,xp1,xp1+1,xi-1 + end + ym1,y,yp1,yi = y,yp1,yp1+1,yi-1 + end +end + +-- output the array to screen +function _CELLS:draw() + local out="" -- accumulate to reduce flicker + for y=1,self.h do + for x=1,self.w do + out=out..(((self[y][x]>0) and ALIVE) or DEAD) + end + out=out.."\n" + end + write(out) +end + +-- constructor +function CELLS(w,h) + local c = ARRAY2D(w,h) + c.spawn = _CELLS.spawn + c.evolve = _CELLS.evolve + c.draw = _CELLS.draw + return c +end + +-- +-- shapes suitable for use with spawn() above +-- +HEART = { 1,0,1,1,0,1,1,1,1; w=3,h=3 } +GLIDER = { 0,0,1,1,0,1,0,1,1; w=3,h=3 } +EXPLODE = { 0,1,0,1,1,1,1,0,1,0,1,0; w=3,h=4 } +FISH = { 0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0; w=5,h=4 } +BUTTERFLY = { 1,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1; w=5,h=5 } + +-- the main routine +function LIFE(w,h) + -- create two arrays + local thisgen = CELLS(w,h) + local nextgen = CELLS(w,h) + + -- create some life + -- about 1000 generations of fun, then a glider steady-state + thisgen:spawn(GLIDER,5,4) + thisgen:spawn(EXPLODE,25,10) + thisgen:spawn(FISH,4,12) + + -- run until break + local gen=1 + write("\027[2J") -- ANSI clear screen + while 1 do + thisgen:evolve(nextgen) + thisgen,nextgen = nextgen,thisgen + write("\027[H") -- ANSI home cursor + thisgen:draw() + write("Life - generation ",gen,"\n") + gen=gen+1 + if gen>2000 then break end + --delay() -- no delay + end +end + +LIFE(40,20) diff --git a/lua/test/luac.lua b/lua/test/luac.lua new file mode 100644 index 0000000..96a0a97 --- /dev/null +++ b/lua/test/luac.lua @@ -0,0 +1,7 @@ +-- bare-bones luac in Lua +-- usage: lua luac.lua file.lua + +assert(arg[1]~=nil and arg[2]==nil,"usage: lua luac.lua file.lua") +f=assert(io.open("luac.out","wb")) +assert(f:write(string.dump(assert(loadfile(arg[1]))))) +assert(f:close()) diff --git a/lua/test/printf.lua b/lua/test/printf.lua new file mode 100644 index 0000000..58c63ff --- /dev/null +++ b/lua/test/printf.lua @@ -0,0 +1,7 @@ +-- an implementation of printf + +function printf(...) + io.write(string.format(...)) +end + +printf("Hello %s from %s on %s\n",os.getenv"USER" or "there",_VERSION,os.date()) diff --git a/lua/test/readonly.lua b/lua/test/readonly.lua new file mode 100644 index 0000000..85c0b4e --- /dev/null +++ b/lua/test/readonly.lua @@ -0,0 +1,12 @@ +-- make global variables readonly + +local f=function (t,i) error("cannot redefine global variable `"..i.."'",2) end +local g={} +local G=getfenv() +setmetatable(g,{__index=G,__newindex=f}) +setfenv(1,g) + +-- an example +rawset(g,"x",3) +x=2 +y=1 -- cannot redefine `y' diff --git a/lua/test/sieve.lua b/lua/test/sieve.lua new file mode 100644 index 0000000..0871bb2 --- /dev/null +++ b/lua/test/sieve.lua @@ -0,0 +1,29 @@ +-- the sieve of of Eratosthenes programmed with coroutines +-- typical usage: lua -e N=1000 sieve.lua | column + +-- generate all the numbers from 2 to n +function gen (n) + return coroutine.wrap(function () + for i=2,n do coroutine.yield(i) end + end) +end + +-- filter the numbers generated by `g', removing multiples of `p' +function filter (p, g) + return coroutine.wrap(function () + while 1 do + local n = g() + if n == nil then return end + if math.mod(n, p) ~= 0 then coroutine.yield(n) end + end + end) +end + +N=N or 1000 -- from command line +x = gen(N) -- generate primes up to N +while 1 do + local n = x() -- pick a number until done + if n == nil then break end + print(n) -- must be a prime number + x = filter(n, x) -- now remove its multiples +end diff --git a/lua/test/sort.lua b/lua/test/sort.lua new file mode 100644 index 0000000..0bcb15f --- /dev/null +++ b/lua/test/sort.lua @@ -0,0 +1,66 @@ +-- two implementations of a sort function +-- this is an example only. Lua has now a built-in function "sort" + +-- extracted from Programming Pearls, page 110 +function qsort(x,l,u,f) + if ly end) + show("after reverse selection sort",x) + qsort(x,1,n,function (x,y) return x>> ",string.rep(" ",level)) + if t~=nil and t.currentline>=0 then io.write(t.short_src,":",t.currentline," ") end + t=debug.getinfo(2) + if event=="call" then + level=level+1 + else + level=level-1 if level<0 then level=0 end + end + if t.what=="main" then + if event=="call" then + io.write("begin ",t.short_src) + else + io.write("end ",t.short_src) + end + elseif t.what=="Lua" then +-- table.foreach(t,print) + io.write(event," ",t.name or "(Lua)"," <",t.linedefined,":",t.short_src,">") + else + io.write(event," ",t.name or "(C)"," [",t.what,"] ") + end + io.write("\n") +end + +debug.sethook(hook,"cr") +level=0 diff --git a/lua/test/trace-globals.lua b/lua/test/trace-globals.lua new file mode 100644 index 0000000..295e670 --- /dev/null +++ b/lua/test/trace-globals.lua @@ -0,0 +1,38 @@ +-- trace assigments to global variables + +do + -- a tostring that quotes strings. note the use of the original tostring. + local _tostring=tostring + local tostring=function(a) + if type(a)=="string" then + return string.format("%q",a) + else + return _tostring(a) + end + end + + local log=function (name,old,new) + local t=debug.getinfo(3,"Sl") + local line=t.currentline + io.write(t.short_src) + if line>=0 then io.write(":",line) end + io.write(": ",name," is now ",tostring(new)," (was ",tostring(old),")","\n") + end + + local g={} + local set=function (t,name,value) + log(name,g[name],value) + g[name]=value + end + setmetatable(getfenv(),{__index=g,__newindex=set}) +end + +-- an example + +a=1 +b=2 +a=10 +b=20 +b=nil +b=200 +print(a,b,c) diff --git a/lua/test/xd.lua b/lua/test/xd.lua new file mode 100644 index 0000000..ebc3eff --- /dev/null +++ b/lua/test/xd.lua @@ -0,0 +1,14 @@ +-- hex dump +-- usage: lua xd.lua < file + +local offset=0 +while true do + local s=io.read(16) + if s==nil then return end + io.write(string.format("%08X ",offset)) + string.gsub(s,"(.)", + function (c) io.write(string.format("%02X ",string.byte(c))) end) + io.write(string.rep(" ",3*(16-string.len(s)))) + io.write(" ",string.gsub(s,"%c","."),"\n") + offset=offset+16 +end diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..6ec9339 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,11 @@ +DartTestfile.txt +Makefile +cmake_install.cmake +moc_*.cpp +ui_*.h +*_automoc.cpp +tagua +tagua.shell +*_automoc.cpp.files +*/*_automoc.cpp.files +*/*/*_automoc.cpp.files diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..1dca045 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,177 @@ +set(tagua_SRC + controllers/editgame.cpp + controllers/abstract.cpp + controllers/editposition.cpp + controllers/entitytoken.cpp + + loader/image.cpp + loader/theme.cpp + loader/context.cpp + + luaapi/lfunclib.c + luaapi/options.cpp + luaapi/luahl.cpp + luaapi/genericwrapper.cpp + luaapi/loader.cpp + luaapi/imaging.cpp + luaapi/luavalue.cpp + + entities/gameentity.cpp + entities/userentity.cpp + entities/examinationentity.cpp + entities/entity.cpp + entities/engineentity.cpp + entities/icsentity.cpp + + actioncollection.cpp + agentgroup.cpp + animation.cpp + animationmanager.cpp + chessboard.cpp + chesstable.cpp + clock.cpp + common.cpp + components.cpp + connection.cpp + console.cpp + constrainedtext.cpp + crash.cpp + decoratedmove.cpp + engine.cpp + engineinfo.cpp + flash.cpp + game.cpp + gameinfo.cpp + gnushogiengine.cpp + graphicalgame.cpp + graphicalsystem.cpp + histlineedit.cpp + hline.cpp + icsconnection.cpp + icsgamedata.cpp + imageeffects.cpp + index.cpp + infodisplay.cpp + location.cpp + mainanimation.cpp + mainwindow.cpp + mastersettings.cpp + movelist.cpp + movelist_table.cpp + movelist_textual.cpp + movelist_widget.cpp + movement.cpp + namedsprite_utils.cpp + newgame.cpp + option.cpp + option_p.cpp + pgnparser.cpp + piecepool.cpp + pixmaploader.cpp + poolinfo.cpp + positioninfo.cpp + pref_board.cpp + pref_engines.cpp + pref_movelist.cpp + pref_preferences.cpp + pref_theme.cpp + qconnect.cpp + random.cpp + settings.cpp + sprite.cpp + tabwidget.cpp + themeinfo.cpp + ui.cpp + variant.cpp + variants.cpp + xboardengine.cpp +) + +# remove spurious xpressive warnings +set_source_files_properties(icsconnection.cpp + PROPERTIES COMPILE_FLAGS -Wno-extra) + +kde4_add_ui_files(tagua_SRC + ui/pref_highlight.ui + ui/newgamedialog.ui + ui/pref_engines.ui + ui/preferences.ui + ui/gametags.ui + ui/pref_movelist.ui + ui/quickconnect.ui + ui/pref_theme.ui + ui/pref_theme_page.ui + ui/pref_board.ui +) + +include_directories( + ${KDE4_INCLUDES} + ${LUA_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${BLITZ_INCLUDES} + ${CMAKE_CURRENT_BINARY_DIR} +) + +add_definitions( + ${LUA_CFLAGS} +) + +if(NOT DEFINED COMPILER_HAVE_X86_MMX) + check_cxx_source_compiles(" int main() { __asm__(\"pxor %mm0, %mm0\") ; }" COMPILER_HAVE_X86_MMX) +endif(NOT DEFINED COMPILER_HAVE_X86_MMX) + +if(NOT DEFINED COMPILER_HAVE_X86_SSE2) + check_cxx_source_compiles(" int main() { __asm__(\"xorpd %xmm0, %xmm0\"); }" COMPILER_HAVE_X86_SSE2) +endif(NOT DEFINED COMPILER_HAVE_X86_SSE2) + +if(COMPILER_HAVE_X86_MMX) + list(APPEND tagua_SRC imageeffects_mmx.cpp) + set_source_files_properties(imageeffects_mmx.cpp PROPERTIES COMPILE_FLAGS -mmmx) + set_source_files_properties(imageeffects.cpp PROPERTIES COMPILE_FLAGS -DHAVE_X86_MMX) +endif(COMPILER_HAVE_X86_MMX) + +if(COMPILER_HAVE_X86_SSE2) + list(APPEND tagua_SRC imageeffects_sse.cpp) + set_source_files_properties(imageeffects_sse.cpp PROPERTIES COMPILE_FLAGS -msse2) + set_source_files_properties(imageeffects.cpp PROPERTIES COMPILE_FLAGS -DHAVE_X86_SSE2) +endif(COMPILER_HAVE_X86_SSE2) + +if(DEBUG_BUILD) + set(TAGUA_TARGET taguaprivate) + + kde4_add_library(taguaprivate SHARED ${tagua_SRC}) + kde4_add_executable(tagua main.cpp) +else(DEBUG_BUILD) + set(TAGUA_TARGET tagua) + kde4_add_executable(tagua main.cpp ${tagua_SRC}) +endif(DEBUG_BUILD) + +add_subdirectory(core) +add_subdirectory(variants) + +link_directories( + ${LUA_LIBRARY_DIRS} + ${Boost_LIBRARY_DIRS} + ${CMAKE_BINARY_DIR}/lib +) +target_link_libraries(${TAGUA_TARGET} + ${LUA_LINK_FLAGS} + ${KDE4_KDEUI_LIBS} + ${KDE4_KIO_LIBS} + ${BLITZ_LIBRARIES} + dl + kdegames + taguacore +) + + + +if(DEBUG_BUILD) + target_link_libraries(tagua taguaprivate) + install(TARGETS taguaprivate DESTINATION ${LIB_INSTALL_DIR}) +endif(DEBUG_BUILD) + + +INSTALL(TARGETS tagua DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +install(FILES tagua.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) +install(FILES taguaui.rc DESTINATION ${DATA_INSTALL_DIR}/tagua) diff --git a/src/Doxyfile b/src/Doxyfile new file mode 100644 index 0000000..b8447a7 --- /dev/null +++ b/src/Doxyfile @@ -0,0 +1,240 @@ +# Doxyfile 1.5.5 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = Tagua +PROJECT_NUMBER = 1.0 +OUTPUT_DIRECTORY = doxy/en +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 2 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = NO +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = YES +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = YES +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = ui_* \ + moc_* +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 2 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = doxy/header.html +HTML_FOOTER = doxy/footer.html +HTML_STYLESHEET = doxy/doxygen.css +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +HTML_DYNAMIC_SECTIONS = YES +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = YES +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = YES +CALLER_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/src/actioncollection.cpp b/src/actioncollection.cpp new file mode 100644 index 0000000..cca5767 --- /dev/null +++ b/src/actioncollection.cpp @@ -0,0 +1,25 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "actioncollection.h" + +#include + +ActionCollection::ActionCollection() { } + +void ActionCollection::add(QAction* action) { + m_actions.append(action); +} + +QList ActionCollection::actions() const { + return m_actions; +} + + diff --git a/src/actioncollection.h b/src/actioncollection.h new file mode 100644 index 0000000..2a32f67 --- /dev/null +++ b/src/actioncollection.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ACTIONCOLLECTION_H +#define ACTIONCOLLECTION_H + +#include +#include +#include +#include + +class QAction; + +class ActionCollection : public QObject { +Q_OBJECT + QList m_actions; +public: + ActionCollection(); + + void add(QAction* action); + QList actions() const; +}; + +#endif // ACTIONCOLLECTION_H + diff --git a/src/agent.h b/src/agent.h new file mode 100644 index 0000000..35faf38 --- /dev/null +++ b/src/agent.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef AGENT_H +#define AGENT_H + +class Index; + +class Agent { +protected: + bool m_active; +public: + virtual ~Agent() { } + Agent() : m_active(true) { } + virtual void notifyClockUpdate(int, int) = 0; + virtual void notifyMove(const Index& index) = 0; + virtual void notifyBack() = 0; + virtual void notifyForward() = 0; + virtual void notifyGotoFirst() = 0; + virtual void notifyGotoLast() = 0; + virtual void stop() { m_active = false; } + bool active() const { return m_active; } +}; + +#endif // AGENT_H diff --git a/src/agentgroup.cpp b/src/agentgroup.cpp new file mode 100644 index 0000000..86a4c2b --- /dev/null +++ b/src/agentgroup.cpp @@ -0,0 +1,88 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "agentgroup.h" + +using namespace boost; + +void AgentGroup::addAgent(const AgentPtr& agent) { + m_agents.insert(agent); +} + +#define FORWARD(method, args) \ + for (weak_set::iterator i = m_agents.begin(); \ + i != m_agents.end(); \ + ++i) { \ + if (i.get() != source) { \ + i->method args; \ + } \ + } + +void AgentGroup::clockUpdate(Agent* source, int white, int black) { + FORWARD(notifyClockUpdate, (white, black)) +} + +void AgentGroup::move(Agent* source, const Index& index) { + FORWARD(notifyMove, (index)) +} + +void AgentGroup::back(Agent* source) { + FORWARD(notifyBack, ()) +} + +void AgentGroup::forward(Agent* source) { + FORWARD(notifyForward, ()) +} + +void AgentGroup::gotoFirst(Agent* source) { + FORWARD(notifyGotoFirst, ()) +} + +void AgentGroup::gotoLast(Agent* source) { + FORWARD(notifyGotoLast, ()) +} +#undef FORWARD + + + + +AgentGroupDispatcher::AgentGroupDispatcher(AgentGroup* group, Agent* agent) +: m_group(group) +, m_agent(agent) { } + +void AgentGroupDispatcher::clockUpdate(int white, int black) { + m_group->clockUpdate(m_agent, white, black); +} + +bool AgentGroupDispatcher::move(const Index& index) { + m_group->move(m_agent, index); + return true; +} + +bool AgentGroupDispatcher::back() { + m_group->back(m_agent); + return true; +} + +bool AgentGroupDispatcher::forward() { + m_group->forward(m_agent); + return true; +} + +bool AgentGroupDispatcher::gotoFirst() { + m_group->gotoFirst(m_agent); + return true; +} + +bool AgentGroupDispatcher::gotoLast() { + m_group->gotoLast(m_agent); + return true; +} + diff --git a/src/agentgroup.h b/src/agentgroup.h new file mode 100644 index 0000000..5b7b39a --- /dev/null +++ b/src/agentgroup.h @@ -0,0 +1,50 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef AGENTGROUP_H +#define AGENTGROUP_H + +#include +#include +#include "weakset.h" +#include "agent.h" + +class AgentGroup { + typedef boost::shared_ptr AgentPtr; + typedef std::vector AgentList; + + weak_set m_agents; +public: + void addAgent(const AgentPtr& agent); + + void clockUpdate(Agent* source, int, int); + void move(Agent* source, const Index&); + void back(Agent* source); + void forward(Agent* source); + void gotoFirst(Agent* source); + void gotoLast(Agent* source); +}; + +class AgentGroupDispatcher { + AgentGroup* m_group; + Agent* m_agent; +public: + AgentGroupDispatcher(AgentGroup* group, Agent* agent); + virtual ~AgentGroupDispatcher(){} + + virtual void clockUpdate(int, int); + virtual bool move(const Index&); + virtual bool back(); + virtual bool forward(); + virtual bool gotoFirst(); + virtual bool gotoLast(); +}; + +#endif // AGENTGROUP_H diff --git a/src/animation.cpp b/src/animation.cpp new file mode 100644 index 0000000..3c247be --- /dev/null +++ b/src/animation.cpp @@ -0,0 +1,737 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include +#include + +#include "common.h" +#include "animation.h" +#include +#include "sprite.h" +#include "movement.h" + +using namespace std; +using namespace boost; + +#undef ANIMATION_DEBUG + +//BEGIN ConcreteAnimation + +ConcreteAnimation::ConcreteAnimation(const SpritePtr& piece) +: m_piece(piece) { } + +//END ConcreteAnimation + +//BEGIN MovementAnimation + +MovementAnimation::MovementAnimation(const SpritePtr& piece, + const QPoint& destination, + bool rotate, double speed) +: ConcreteAnimation(piece) +, m_source(piece) +, m_target(piece) +, m_destination(destination) +, m_speed(speed) +, m_state(Inactive) +, m_rotate(rotate) { +#ifdef ANIMATION_DEBUG + kDebug() << "creating animation " << this << " for piece " << piece.get() << endl; +#endif +} + +MovementAnimation::~MovementAnimation() { +#ifdef ANIMATION_DEBUG + kDebug() << "destroying animation " << this << " for piece " << m_piece.get() << endl; + if (m_piece->movementAnimation().lock()) + kDebug() << " *********** BUG **************" << endl; +#endif +// m_piece->setMovementAnimation(0); +} + +void MovementAnimation::setTarget(const SpritePtr& target) { + m_target = target; +} + +void MovementAnimation::setSource(const SpritePtr& source) { + m_source = source; +} + +boost::shared_ptr +MovementAnimation::createMovement(const QPoint& from, const QPoint& to) const { + return boost::shared_ptr(new SigmoidalMovement(from, to, m_rotate)); +} + +void MovementAnimation::start() { +#ifdef ANIMATION_DEBUG + kDebug() << "starting movement animation " << this + << " on piece " << m_piece.get() << endl; +#endif + + { + if (shared_ptr animation = m_source->movementAnimation().lock()) { +#ifdef ANIMATION_DEBUG + kDebug() << "aborting movement animation " << animation + << " on piece " << m_source.get() << endl; +#endif + animation->abort(); + } + } + + m_source->setMovementAnimation(shared_ptr()); + m_target->setMovementAnimation(shared_from_this()); + + m_piece->raise(); + m_movement = createMovement(m_piece->pos(), m_destination); + + // The total time of the animation is proportional to the square root + // of the distance and to the inverse of the speed factor. + double distance = Point(m_destination - m_piece->pos()).norm(); + + Q_ASSERT(m_speed > 0.0); + m_time = 35 * sqrt(distance) / m_speed; + m_state = m_time > 0 ? Active : Inactive; +} + +Animation::State MovementAnimation::animationAdvance(int msec) { + switch (m_state) { + case Inactive: + m_start = msec; + start(); + if (m_state == Inactive) abort(); + break; + case Aborted: + break; + case Active: + { + // reparameterize the time variable in [0,1] + Q_ASSERT(m_time > 0); + double t = (msec - m_start) / m_time; + Q_ASSERT(t >= 0); + +#ifdef ANIMATION_DEBUG + kDebug() << "active: t = " << t << endl; +#endif + + if (t >= 1) + stop(); + else { + QPoint to = m_movement->pos(t); + m_piece->moveTo(to); + m_piece->setRotation(m_movement->rotation(t)); + } + } + + break; + } + +#ifdef ANIMATION_DEBUG + kDebug() << "advance (" << this << ") state = " << m_state << endl; +#endif + return m_state; +} + +void MovementAnimation::stop() { +#ifdef ANIMATION_DEBUG + kDebug() << "stopping animation " << this + << " on piece " << m_piece.get() << endl; +#endif + m_piece->moveTo(m_destination); + m_piece->setRotation(0); + abort(); + m_state = Inactive; +} + +void MovementAnimation::abort() { +#ifdef ANIMATION_DEBUG + kDebug() << "aborting animation " << this + << " on piece " << m_piece.get() << endl; +#endif + m_state = Aborted; + m_target->setMovementAnimation(shared_ptr()); +} + +//END MovementAnimation + +//BEGIN KnightMovementAnimation + +KnightMovementAnimation::KnightMovementAnimation(const SpritePtr& piece, const QPoint& destination, + bool rotate, double speed) +: MovementAnimation(piece, destination, rotate, speed){ +} + +boost::shared_ptr +KnightMovementAnimation::createMovement(const QPoint& from, const QPoint& to) const { + return boost::shared_ptr(new SigmoidalMovement(from, to, m_rotate)); +} + +//END KnightMovementAnimation + +//BEGIN OneShotAnimation + +OneShotAnimation::OneShotAnimation(const SpritePtr& piece) +: ConcreteAnimation(piece) { } + +Animation::State OneShotAnimation::animationAdvance(int) { + shoot(); + return Inactive; +} + +//END OneShotAnimation + +//BEGIN InstantAnimation + +InstantAnimation::InstantAnimation(const SpritePtr& piece, const QPoint& destination) +: OneShotAnimation(piece) +, m_destination(destination) { } + +void InstantAnimation::shoot() { + m_piece->moveTo(m_destination); + + if (shared_ptr animation = m_piece->movementAnimation().lock()) { + animation->abort(); + m_piece->setMovementAnimation(shared_ptr()); + } +} + +//END InstantAnimation + +//BEGIN CaptureAnimation + +CaptureAnimation::CaptureAnimation(const SpritePtr& piece) +: OneShotAnimation(piece) { } + +void CaptureAnimation::shoot() { + m_piece->hide(); + + if (shared_ptr animation = m_piece->movementAnimation().lock()) { + animation->abort(); + m_piece->setMovementAnimation(shared_ptr()); + } + +} + +//END CaptureAnimation + +//BEGIN DropAnimation + +DropAnimation::DropAnimation(const SpritePtr& piece) +: OneShotAnimation(piece) +, m_valid_position(false) { } + +DropAnimation::DropAnimation(const SpritePtr& piece, const QPoint& pos) +: OneShotAnimation(piece) +, m_valid_position(true) +, m_position(pos) { } + +void DropAnimation::shoot() { + if (m_valid_position) + m_piece->moveTo(m_position); + m_piece->show(); +} + +//END DropAnimation + +//BEGIN PromotionAnimation + +PromotionAnimation::PromotionAnimation(const SpritePtr& piece, + const SpritePtr& promoted) +: OneShotAnimation(piece) +, m_promoted(promoted) { } + +void PromotionAnimation::shoot() { + m_piece->hide(); + m_promoted->show(); +} + +//END PromotionAnimation + +//BEGIN CrossFadingAnimation + +CrossFadingAnimation::CrossFadingAnimation(const SpritePtr& piece, + const SpritePtr& promoted) +: m_piece(piece) { + addPreAnimation(shared_ptr(new FadeAnimation(piece, 255, 0))); + addPreAnimation(shared_ptr(new FadeAnimation(promoted, 0, 255))); +} + +void CrossFadingAnimation::start() { + AnimationGroup::start(); +} + +//END CrossFadingAnimation + + + +//BEGIN DelayAnimation + +DelayAnimation::DelayAnimation(int secs) +: Animation() +, m_state(Inactive) +, m_msecs(secs) { } + +void DelayAnimation::start() { + m_state = Active; +} + +Animation::State DelayAnimation::animationAdvance(int msec) { + switch (m_state) { + case Inactive: + m_start = msec; + start(); + break; + case Aborted: + break; + case Active: + if(msec > m_start + m_msecs) + stop(); + break; + } + + return m_state; +} + +void DelayAnimation::stop() { + m_state = Inactive; +} + +void DelayAnimation::abort() { + m_state = Aborted; +} + + +//END DelayAnimation + + +//BEGIN FadeAnimation + +FadeAnimation::FadeAnimation(const SpritePtr& sprite, const QPoint& to, + int fadeFrom, int fadeTo) +: ConcreteAnimation(sprite) +, m_fadeFrom(fadeFrom) +, m_fadeTo(fadeTo) +, m_to(to) +, m_state(Inactive) { } + +FadeAnimation::FadeAnimation(const SpritePtr& sprite, int fadeFrom, int fadeTo) +: ConcreteAnimation(sprite) +, m_fadeFrom(fadeFrom) +, m_fadeTo(fadeTo) +, m_to(Point::invalid()) +, m_state(Inactive) { } + +void FadeAnimation::start() { + m_state = Active; + + if (m_to != Point::invalid()) { + m_piece->moveTo(m_to); + } + + m_piece->setOpacity(m_fadeFrom); + m_piece->show(); +} + +Animation::State FadeAnimation::animationAdvance(int msec) { + switch (m_state) { + case Inactive: + m_start = msec; + start(); + break; + case Aborted: + break; + case Active: + { + double t = (msec - m_start) / 400.0; + Q_ASSERT(t >= 0); + + if(t >= 1) + stop(); + else { + int op = static_cast(m_fadeTo * t + m_fadeFrom * (1 - t)); + m_piece->setOpacity(op); + } + } + break; + } + + return m_state; +} + +void FadeAnimation::stop() { + m_piece->setOpacity(m_fadeTo); + m_state = Inactive; +} + +void FadeAnimation::abort() { + m_state = Aborted; +} + + +//END FadeAnimation + + + +//BEGIN GrowAnimation + +GrowAnimation::GrowAnimation(const SpritePtr& sprite) +: ConcreteAnimation(sprite) +, m_state(Inactive) { } + +void GrowAnimation::start() { + m_state = Active; + + m_piece->show(); + m_piece->setScale(0.0); +} + +Animation::State GrowAnimation::animationAdvance(int msec) { + switch (m_state) { + case Inactive: + m_start = msec; + start(); + break; + case Aborted: + break; + case Active: + { + double t = (msec - m_start) / 700.0; + Q_ASSERT(t >= 0); + + if(t >= 1) + stop(); + else { + t = sin(t*M_PI/2); + m_piece->setScale(t); + } + } + break; + } + + return m_state; +} + +void GrowAnimation::stop() { + m_piece->setScale(1.0); + m_state = Inactive; +} + +void GrowAnimation::abort() { + m_state = Aborted; +} + + +//END GrowAnimation + + +//BEGIN ExplodeAnimation + +ExplodeAnimation::ExplodeAnimation(const SpritePtr& sprite, Random& random) +: ConcreteAnimation(sprite) +, m_state(Inactive) +, m_random(random) { } + +void ExplodeAnimation::start() { + m_state = Active; + + m_piece->show(); + m_piece->setupExplosion(m_random); +} + +Animation::State ExplodeAnimation::animationAdvance(int msec) { + switch (m_state) { + case Inactive: + m_start = msec; + start(); + break; + case Aborted: + break; + case Active: + { + double t = (msec - m_start) / 700.0; + Q_ASSERT(t >= 0); + + if(t >= 1) + stop(); + else { + t = sin(t*M_PI/2); + m_piece->setExplosionStep(sin(t*M_PI/2)*0.7); + //m_piece->setScale(1.0+t*0.2); + m_piece->setOpacity(int(cos(t*M_PI/2)*255)); + } + } + break; + } + + return m_state; +} + +void ExplodeAnimation::stop() { + m_piece->setExplosionStep(0.7); + //m_piece->setScale(1.2); + m_state = Inactive; +} + +void ExplodeAnimation::abort() { + m_state = Aborted; +} + + +//END ExplodeAnimation + +//BEGIN AnimationGroup + +AnimationGroup::AnimationGroup(bool persistent) + : Animation() + , m_active(false) + , m_persistent(persistent) + , m_chain_abortions(!persistent) { +} + +void AnimationGroup::start() { + m_active = true; +} + +bool AnimationGroup::empty() const { + return pre.empty() && post.empty(); +} + +Animation::State AnimationGroup::animationAdvance(int msec) { + if (!m_active) { + start(); + } + + + if (!pre.empty()) { + // advance pre-animations + for (Iterator i = pre.begin(); i != pre.end(); ) { + State animation_state = (*i)->animationAdvance(msec); + switch (animation_state) { + case Aborted: +#if 0 + if (m_chain_abortions) { + for (Iterator j = pre.begin(); j != pre.end(); ) { + (*j)->stop(); + j = pre.erase(j); + } + post.clear(); + return Aborted; + } +#endif + case Inactive: + // the animation ended or has been aborted, + // remove it from the list + i = pre.erase(i); + break; + case Active: + // handle next animation + ++i; + break; + } + } + + // if there are still pre-animations, we're done + if (!pre.empty()) + return Active; + } + else { + // no pre-animations: handle post animations + for (Iterator i = post.begin(); i != post.end(); ) { + State animation_state = (*i)->animationAdvance(msec); + switch (animation_state) { + case Aborted: +#if 0 + if (m_chain_abortions) { + return Aborted; + } +#endif + case Inactive: + // the animation ended or has been aborted, + // remove it from the list + i = pre.erase(i); + break; + case Active: + // handle next animation + ++i; + break; + } + } + } + + // go on animating if there are still animations left + // or the group is persistent + m_active = m_persistent || !post.empty(); + return m_active ? Active : Inactive; +} + +void AnimationGroup::addPreAnimation(AnimationPtr anim) { + if (!anim) return; + + if (m_active) + // cannot dynamically add pre-animations + // adding it as a post-animation, instead + addPostAnimation(anim); + else + pre.push_back(anim); +} + +void AnimationGroup::addPostAnimation(AnimationPtr anim) { + if (!anim) return; + post.push_back(anim); +} + +void AnimationGroup::stop() { + // stop all animations + for (Iterator i = pre.begin(); i != pre.end(); ) { + (*i)->stop(); + i = pre.erase(i); + } + for (Iterator i = post.begin(); i != post.end(); ) { + (*i)->stop(); + i = post.erase(i); + } + + if (!m_persistent) + m_active = false; +} + +//END AnimationGroup + +//BEGIN TeleportAnimation + +TeleportAnimation::TeleportAnimation(const SpritePtr& sprite, + const QPoint& from, const QPoint& to) + : AnimationGroup(1.0) { + + SpritePtr copy(sprite->duplicate()); + copy->show(); + + addPreAnimation(AnimationPtr(new FadeAnimation(copy, from, 255, 0))); + addPreAnimation(AnimationPtr(new FadeAnimation(sprite, to, 0, 255))); +} + +TeleportAnimation::TeleportAnimation(const SpritePtr& sprite, + const QPoint& to) + : AnimationGroup(1.0) { + + SpritePtr copy(sprite->duplicate()); + copy->show(); + + addPreAnimation(AnimationPtr(new FadeAnimation(copy, copy->pos(), 255, 0))); + addPreAnimation(AnimationPtr(new FadeAnimation(sprite, to, 0, 255))); +} + + +//END TeleportAnimation + +//BEGIN DelayedAnimationSet + +DelayedAnimationSet::DelayedAnimationSet(Random& random) +: m_random(random) +, m_state(Inactive) { } + +void DelayedAnimationSet::addAnimation(const shared_ptr& animation) { + if (animation && m_state == Inactive) + m_animations.push_back(animation); +} + +void DelayedAnimationSet::start() { + const int n = m_animations.size(); + + if (n == 0) + m_state = Inactive; + else { + // animation time is proportional to the + // number of animations + m_time = 100 * n; + + // one animation starts immediately + int immediate = m_random.rand(0, n - 1)(); + m_events.push_back(Event(immediate, m_start)); + + // generate event times + Random::IntegerGenerator event_time = m_random.rand(m_start, m_start + m_time); + for (int i = 0; i < n; i++) { + if (i == immediate) continue; + m_events.push_back(Event(i, event_time())); + } + + // sort events + sort(m_events.begin(), m_events.end()); + + // set next event + m_next_event = m_events.begin(); + + m_state = Active; + } +} + +Animation::State DelayedAnimationSet::animationAdvance(int msec) { + switch (m_state) { + case Inactive: + m_start = msec; + start(); + if (m_state == Inactive) abort(); + break; + case Aborted: + break; + case Active: + { + // if there are still events left + if (m_next_event != m_events.end()) { + + // if the event period is elapsed + if (msec >= m_start + m_time) { + // execute all remaining animations + while (m_next_event != m_events.end()) + execute((m_next_event++)->index()); + } + + else { + // if the event time has elapsed + while (m_next_event != m_events.end() && msec >= m_next_event->time()) { + // run the corresponding animation + execute((m_next_event++)->index()); + } + } + } + + // step all active animations + // continue animating until m_group is over + m_state = m_group.animationAdvance(msec); + } + + break; + } + + return m_state; +} + +void DelayedAnimationSet::execute(int index) { + // start animation adding it to m_group + m_group.addPostAnimation(m_animations[index]); + + // remove it from the animation vector + m_animations[index] = shared_ptr(); +} + +void DelayedAnimationSet::stop() { + m_group.stop(); + m_animations.clear(); + m_state = Inactive; +} + +void DelayedAnimationSet::abort() { + m_state = Aborted; + m_animations.clear(); +} + +//END DelayedAnimationSet diff --git a/src/animation.h b/src/animation.h new file mode 100644 index 0000000..4a3f570 --- /dev/null +++ b/src/animation.h @@ -0,0 +1,260 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ANIMATION_H +#define ANIMATION_H + +#include +#include +#include +#include +#include + +#include +#include +#include "sprite.h" + +class Movement; +class Random; + +class ConflictingAnimation { +public: + virtual ~ConflictingAnimation() { } + virtual void setTarget(const SpritePtr&) = 0; + virtual void setSource(const SpritePtr&) = 0; +}; + +class ConcreteAnimation : public Animation { +protected: + SpritePtr m_piece; +public: + ConcreteAnimation(const SpritePtr& piece); + virtual void stop() { } +}; + +class OneShotAnimation : public ConcreteAnimation { +protected: + virtual void shoot() = 0; +public: + OneShotAnimation(const SpritePtr& piece); + virtual State animationAdvance(int); + virtual void abort() { } +}; + +class InstantAnimation : public OneShotAnimation + , public ConflictingAnimation { + QPoint m_destination; + SpritePtr m_source; +public: + InstantAnimation(const SpritePtr& piece, const QPoint& destination); + virtual void shoot(); + virtual void setTarget(const SpritePtr&) { } + virtual void setSource(const SpritePtr& source) { m_source = source; } +}; + + +class MovementAnimation : public ConcreteAnimation + , public ConflictingAnimation { +protected: + SpritePtr m_source; + SpritePtr m_target; + QPoint m_destination; + double m_speed; + State m_state; + + double m_time; + int m_start; + boost::shared_ptr m_movement; + bool m_rotate; + + virtual boost::shared_ptr createMovement(const QPoint& from, const QPoint& to) const; + void start(); +public: + MovementAnimation(const SpritePtr& piece, const QPoint& destination, bool rotate = false, double speed = 1.0); + virtual ~MovementAnimation(); + virtual State animationAdvance(int msec); + virtual void stop(); + virtual void abort(); + + virtual void setTarget(const SpritePtr& target); + virtual void setSource(const SpritePtr& source); +}; + +class KnightMovementAnimation : public MovementAnimation { +protected: + virtual boost::shared_ptr createMovement(const QPoint& from, const QPoint& to) const; +public: + KnightMovementAnimation(const SpritePtr& piece, const QPoint& destination, + bool rotate, double speed = 1.0); +}; + +class CaptureAnimation : public OneShotAnimation { +protected: + virtual void shoot(); +public: + CaptureAnimation(const SpritePtr& piece); +}; + +class DropAnimation : public OneShotAnimation { + bool m_valid_position; + QPoint m_position; +protected: + virtual void shoot(); +public: + DropAnimation(const SpritePtr& piece); + DropAnimation(const SpritePtr& piece, const QPoint&); +}; + +class PromotionAnimation : public OneShotAnimation { +protected: + SpritePtr m_promoted; + virtual void shoot(); +public: + PromotionAnimation(const SpritePtr& piece, const SpritePtr& promoted); +}; + +class DelayAnimation : public Animation { + State m_state; + + int m_msecs; + int m_start; + void start(); +public: + DelayAnimation(int msecs); + virtual State animationAdvance(int msec); + virtual void stop(); + virtual void abort(); +}; + +class FadeAnimation : public ConcreteAnimation { + int m_fadeFrom; + int m_fadeTo; + QPoint m_to; + State m_state; + + int m_start; + void start(); +public: + FadeAnimation(const SpritePtr& sprite, const QPoint& pos, int fadeFrom, int fadeTo); + FadeAnimation(const SpritePtr& sprite, int fadeFrom, int fadeTo); + virtual State animationAdvance(int msec); + virtual void stop(); + virtual void abort(); +}; + +class GrowAnimation : public ConcreteAnimation { + State m_state; + int m_start; + + void start(); +public: + GrowAnimation(const SpritePtr& sprite); + virtual State animationAdvance(int msec); + virtual void stop(); + virtual void abort(); +}; + +class ExplodeAnimation : public ConcreteAnimation { + State m_state; + Random& m_random; + + int m_start; + void start(); +public: + ExplodeAnimation(const SpritePtr& sprite, Random& random); + virtual State animationAdvance(int msec); + virtual void stop(); + virtual void abort(); +}; + +/** + * @brief Two groups of animations, to be executed one after the other. + * + * A double list of animations: pre-animations and post-animations. + * When an AnimationGroup is advanced, pre-animations are handled first, + * and removed from the list as they finish animating. + * When all pre-animations are gone, post-animations are handled. + */ +class AnimationGroup : public Animation { +private: + typedef std::list AnimationList; + typedef AnimationList::iterator Iterator; + AnimationList pre; + AnimationList post; + +protected: + bool m_active; + bool m_persistent; + bool m_chain_abortions; + + virtual void start(); + bool empty() const; +public: + AnimationGroup(bool persistent = false); + + virtual bool sticky() const { return m_persistent; } + void setPersistent(bool value) { m_persistent = value; } + void setChainAbortions(bool value) { m_chain_abortions = value; } + + virtual void addPreAnimation(AnimationPtr); + virtual void addPostAnimation(AnimationPtr); + + virtual State animationAdvance(int msec); + virtual void stop(); + virtual void abort() { stop(); } +}; + +class TeleportAnimation : public AnimationGroup { +public: + TeleportAnimation(const SpritePtr& sprite, const QPoint& from, const QPoint& to); + TeleportAnimation(const SpritePtr& sprite, const QPoint& to); +}; + +class CrossFadingAnimation : public AnimationGroup { + SpritePtr m_piece; +protected: + virtual void start(); +public: + CrossFadingAnimation(const SpritePtr& piece, const SpritePtr& promoted); +}; + +class DelayedAnimationSet : public Animation { + class Event { + int m_index; + int m_time; + public: + Event(int index, int time) + : m_index(index), m_time(time) { } + int index() const { return m_index; } + int time() const { return m_time; } + + bool operator<(const Event& other) const { return m_time < other.m_time; } + }; + + int m_time; + int m_start; + Random& m_random; + State m_state; + std::vector > m_animations; + AnimationGroup m_group; + std::vector m_events; + std::vector::iterator m_next_event; + + void execute(int); +public: + DelayedAnimationSet(Random& random); + void addAnimation(const boost::shared_ptr& animation); + void start(); + virtual State animationAdvance(int msec); + virtual void stop(); + virtual void abort(); +}; + +#endif // ANIMATION_H diff --git a/src/animationmanager.cpp b/src/animationmanager.cpp new file mode 100644 index 0000000..affd6c9 --- /dev/null +++ b/src/animationmanager.cpp @@ -0,0 +1,96 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "animationmanager.h" +#include +#include "animation.h" +#include "mainanimation.h" +#include "mastersettings.h" +#include "core/namedsprite.h" + +AnimationManager::AnimationManager() { + m_main = new MainAnimation(1.0); + + reload(); +} + +AnimationManager::~AnimationManager() { delete m_main; } + +void AnimationManager::reload() { + Settings s = settings().group("animations"); + + enabled = s.flag("enabled", true); + maxSequence = + s.group("sequence").flag("enabled", true) + ? s.group("sequence")["max"].value() + : 0; + movement = s["movement"].flag("enabled", true); + explode = s["explode"].flag("enabled", true); + fading = s["fading"].flag("enabled", true); + transform = s["transform"].flag("enabled", true); + + Settings s_anim = settings().group("animations"); + int speed = (s_anim["speed"] | 16); + int smoothness = (s_anim["smoothness"] | 16); + m_main->setSpeed( 0.4*pow(10.0, speed/32.0) ); + m_main->setDelay( int(70.0*pow(10.0, -smoothness/32.0)) ); +} + +void AnimationManager::enqueue(const AnimationPtr& a) { + m_main->addAnimation(a); +} + +void AnimationManager::stop() { m_main->stop(); } + +AnimationPtr AnimationManager::appear(const NamedSprite& sprite, + const QString& flags) const { + if (fading && flags != "instant") + return AnimationPtr(new FadeAnimation(sprite.sprite(), 0, 255)); + + return AnimationPtr(new DropAnimation(sprite.sprite())); +} + +AnimationPtr AnimationManager::disappear(const NamedSprite& sprite, + const QString& flags) const { + if (explode && flags == "destroy") + return AnimationPtr(new ExplodeAnimation(sprite.sprite(), Random::instance())); + + if (fading && flags != "instant") + return AnimationPtr(new FadeAnimation(sprite.sprite(), 255, 0)); + + return AnimationPtr(new CaptureAnimation(sprite.sprite())); +} + +AnimationPtr AnimationManager::move(const NamedSprite& sprite, + const QPoint& destination, + bool far, + const QString& flags) const { + QStringList flagList = flags.split(" "); + bool rotate = transform && flagList.contains("rotating"); + + if (movement && !flagList.contains("instant")) { + if (far && flagList.contains("lshaped")) { + return AnimationPtr(new KnightMovementAnimation(sprite.sprite(), destination, rotate)); + } + else + return AnimationPtr(new MovementAnimation(sprite.sprite(), destination, rotate)); + } + + return AnimationPtr(new InstantAnimation(sprite.sprite(), destination)); +} + +AnimationPtr AnimationManager::morph(const NamedSprite& sprite1, + const NamedSprite& sprite2, + const QString& flags) const { + if (fading && flags != "instant") + return AnimationPtr(new CrossFadingAnimation(sprite1.sprite(), sprite2.sprite())); + + return AnimationPtr(new PromotionAnimation(sprite1.sprite(), sprite2.sprite())); +} + diff --git a/src/animationmanager.h b/src/animationmanager.h new file mode 100644 index 0000000..880ec96 --- /dev/null +++ b/src/animationmanager.h @@ -0,0 +1,50 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ANIMATIONMANAGER_H +#define ANIMATIONMANAGER_H + +#include +#include + +class MainAnimation; +class NamedSprite; +class QPoint; + +class AnimationManager { + MainAnimation* m_main; +public: + bool enabled; + + int maxSequence; + bool movement; + bool explode; + bool fading; + bool transform; + + AnimationManager(); + ~AnimationManager(); + + void reload(); + void enqueue(const AnimationPtr& a); + void stop(); + + AnimationPtr group(const QString& flags) const; + AnimationPtr appear(const NamedSprite& sprite, const QString& flags) const; + AnimationPtr disappear(const NamedSprite& sprite, const QString& flags) const; + AnimationPtr move(const NamedSprite& sprite, + const QPoint& destination, + bool far, + const QString& flags) const; + AnimationPtr morph(const NamedSprite& sprite1, + const NamedSprite& sprite2, + const QString& flags) const; +}; + +#endif // ANIMATIONMANAGER_H diff --git a/src/chessboard.cpp b/src/chessboard.cpp new file mode 100644 index 0000000..1cbd185 --- /dev/null +++ b/src/chessboard.cpp @@ -0,0 +1,721 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include + +#include + +#include "animation.h" +#include "animationmanager.h" +#include "chessboard.h" +#include "components.h" +#include "constrainedtext.h" +#include "entities/userentity.h" +#include "mastersettings.h" +#include "sprite.h" + +using namespace boost; + +/** inherit instead of typedef to ease forward declaration :) */ +class BoardTags : public std::map > > { +}; + +ChessBoard::ChessBoard(Components* components, + AnimationManager* animManager, + KGameCanvasAbstract* parent) +: ClickableCanvas(parent) +, m_flipped(false) +, m_square_size(0) +, m_border_size(0) +, m_sprites(0,0) +, m_hinting_pos(Point::invalid()) +, selection(Point::invalid()) +, lastSelection(Point::invalid()) +, m_dropped_pool(0) +, m_dropped_index(-1) +, m_anim_manager(animManager) { + + m_tags = BoardTagsPtr(new BoardTags); + + m_canvas_background = new KGameCanvasGroup(this); + m_canvas_background->show(); + + m_canvas_border = new KGameCanvasGroup(this); + m_canvas_border->show(); + + m_canvas_border_text = new KGameCanvasGroup(this); + m_canvas_border_text->show(); + + m_pieces_group = new KGameCanvasGroup(this); + m_pieces_group->show(); + + m_namer = components->namer(); + + settingsChanged(); +} + +ChessBoard::~ChessBoard() { + delete m_pieces_group; + + while(!m_canvas_background->items()->isEmpty()) + delete m_canvas_background->items()->first(); + delete m_canvas_background; + + while(!m_canvas_border->items()->isEmpty()) + delete m_canvas_border->items()->first(); + delete m_canvas_border; +} + +void ChessBoard::settingsChanged() { + m_anim_manager->reload(); + m_border_text_color = m_controls_loader.getStaticValue("border_color"); + m_border_font = m_controls_loader.getStaticValue("border_font"); + + recreateBorder(); +} + +void ChessBoard::updateBackground() { + while(!m_canvas_background->items()->isEmpty()) + delete m_canvas_background->items()->first(); + + if(!m_square_size) + return; + + Loader::PixmapOrMap bg = m_tags_loader.getValue("background"); + if(const QPixmap* p = boost::get(&bg)) { + KGameCanvasTiledPixmap *t = new KGameCanvasTiledPixmap(*p, boardRect().size(), QPoint(), + true, m_canvas_background); + t->show(); + } + else if(const Loader::PixmapMap* p = boost::get(&bg)) { + for(Loader::PixmapMap::const_iterator it = p->begin(); it != p->end(); ++it) { + KGameCanvasTiledPixmap *t = new KGameCanvasTiledPixmap(it->second, it->first.size(), + QPoint(), true, m_canvas_background); + t->moveTo(it->first.topLeft()); + t->show(); + } + } + else + kError() << "Unexpected type in boost::variant"; +} + +void ChessBoard::adjustSprite(const Point& p, bool immediate) { + SpritePtr sprite = m_sprites[p].sprite(); + + if(!sprite) + return; + + m_anim_manager->enqueue( + 1 /*BROKEN m_anim_movement*/ && !immediate + ? AnimationPtr(new MovementAnimation(sprite, converter()->toReal(p), 1.0)) + : AnimationPtr(new InstantAnimation(sprite, converter()->toReal(p))) + ); +} + +boost::shared_ptr ChessBoard::addTag(const QString& name, Point pt, bool over) { + if(!m_sprites.valid(pt)) + return boost::shared_ptr(); + + QPixmap p = m_tags_loader.getPixmap(name); + boost::shared_ptr item = + boost::shared_ptr(new KGameCanvasPixmap(p, this)); + item->moveTo(converter()->toReal(pt)); + if(over) + item->stackOver(m_pieces_group); + else + item->stackUnder(m_pieces_group); + item->show(); + + (*m_tags)[name][pt] = item; + return item; +} + +void ChessBoard::clearTags(const QString& name) { + m_tags->erase(name); +} + +void ChessBoard::clearTags() { + m_tags->clear(); +} + +void ChessBoard::setTags(const QString& name, Point p1, Point p2, Point p3, + Point p4, Point p5, Point p6 ) { + //TODO: maybe this could be optimized a bit + clearTags(name); + addTag(name, p1); + addTag(name, p2); + addTag(name, p3); + addTag(name, p4); + addTag(name, p5); + addTag(name, p6); +} + +void ChessBoard::recreateBorder() { + m_border_text.clear(); + while(!m_canvas_border_text->items()->isEmpty()) + delete m_canvas_border_text->items()->first(); + + if(m_border_coords.size() == 0) + return; + + Point s = m_sprites.getSize(); + for(int w = 0; w<2; w++) + for(int i = 0;ic ? m_border_coords[c] : QString(); + ConstrainedText *item = new ConstrainedText(m_canvas_border_text); + item->setColor(m_border_text_color); + item->setText(l); + item->setFont(m_border_font); + item->setColor(m_border_text_color); + item->show(); + m_border_text.push_back(item); + } + + for(int w = 0; w<2; w++) + for(int i = 0;ic ? m_border_coords[c] : QString(); + ConstrainedText *item = new ConstrainedText(m_canvas_border_text); + item->setColor(m_border_text_color); + item->setText(n); + item->setFont(m_border_font); + item->setColor(m_border_text_color); + item->show(); + m_border_text.push_back(item); + } + + m_pieces_group->raise(); + + updateBorder(); +} + +void ChessBoard::updateBorder() { + while(!m_canvas_border->items()->isEmpty()) + delete m_canvas_border->items()->first(); + + if(!m_square_size) + return; + + int at = 0; + for(int w = 0; w<2; w++) + for(int i = 0;isetVisible(m_border_text_near != m_border_text_far); + m_border_text[at]->setConstrainRect(QRect(x,y,m_square_size,m_border_text_far-m_border_text_near)); + at++; + } + + for(int w = 0; w<2; w++) + for(int i = 0;isetVisible(m_border_text_near != m_border_text_far); + m_border_text[at]->setConstrainRect(QRect(x-m_square_size/2,y,m_square_size,m_border_text_far-m_border_text_near)); + at++; + } + + ::LuaApi::LuaValueMap params; + params["width"] = m_square_size*m_sprites.getSize().x; + params["height"] = m_square_size*m_sprites.getSize().y; + Loader::PixmapOrMap bord = m_controls_loader.getValue("border", ¶ms); + if(const QPixmap* p = boost::get(&bord)) { + KGameCanvasTiledPixmap *t = new KGameCanvasTiledPixmap(*p, boardRect().size(), QPoint(), + true, m_canvas_border); + t->show(); + } + else if(const Loader::PixmapMap* p = boost::get(&bord)) { + for(Loader::PixmapMap::const_iterator it = p->begin(); it != p->end(); ++it) { + KGameCanvasTiledPixmap *t = new KGameCanvasTiledPixmap(it->second, it->first.size(), + QPoint(), true, m_canvas_border); + t->moveTo(it->first.topLeft()); + t->show(); + } + } + else + kError() << "Unexpected type in boost::variant"; +} + +void ChessBoard::createGrid(Point p, const QStringList& border_coords) { + m_border_coords = border_coords; + m_sprites = PieceGrid(p.x,p.y); + recreateBorder(); +} + +QPixmap ChessBoard::loadSprite(const QString& id) { + return m_loader.piecePixmap(id, m_flipped); +} + +QRect ChessBoard::computeRect(Point p) const { + QPoint realPoint = converter()->toReal(p); + return squareRect(realPoint.x(), realPoint.y()); +} + +QRect ChessBoard::squareRect(int x, int y) const { + return QRect(x, y, m_square_size, m_square_size); +} + +QRegion ChessBoard::computeRegion(Point p) const { + return QRegion(computeRect(p)); +} + +// selection +void ChessBoard::setSelection(const Point& p) { + lastSelection = selection; + selection = p; + setTags("selection", p); +} + +void ChessBoard::cancelSelection() { + lastSelection = selection; + selection = Point::invalid(); + clearTags("selection"); +} + +// premove + +void ChessBoard::setPremove(const Move& premove) { + m_premove_from = premove.src(); + m_premove_to = premove.dst(); + setTags("premove", m_premove_from, m_premove_to); +} + +void ChessBoard::cancelPremove() { + m_premove_from = Point::invalid(); + m_premove_to = Point::invalid(); + clearTags("premove"); +} + +void ChessBoard::updateSprites() { + // adjust piece positions + for (Point i = m_sprites.first(); i <= m_sprites.last(); i = m_sprites.next(i)) { + boost::shared_ptr p = m_sprites[i].sprite(); + + if (p) { + // drawing sprite + p->setPixmap(loadSprite(m_sprites[i].name())); + adjustSprite(i, true); + } + } +} + +void ChessBoard::updateTags() { + if(!m_square_size) + return; + + for(BoardTags::iterator tit = m_tags->begin(); tit != m_tags->end(); ++tit) + for(std::map >::iterator pt = + tit->second.begin(); pt != tit->second.end(); ++pt) { + pt->second->moveTo(converter()->toReal(pt->first)); + pt->second->setPixmap(m_tags_loader.getPixmap(tit->first)); + } +} + + +bool ChessBoard::doMove(Move& m) { + if (m_entity.lock()->oneClickMoves() || m_entity.lock()->validTurn(m.src()) == Moving) { + if (m_entity.lock()->testMove(m)) { + m_entity.lock()->executeMove(m); + return true; + } + } + + kDebug() << "invalid move"; + error(InvalidMove); + + return false; +} + + +void ChessBoard::onResize(int new_size, int border_size, int border_text_near, + int border_text_far, bool force_reload) { + if(m_square_size == new_size && !force_reload) + return; + + m_square_size = new_size; + m_border_size = border_size; + m_border_text_near = border_text_near; + m_border_text_far = border_text_far; + + // update the size of the piece loader + m_loader.setSize(m_square_size); + + // update the size of the tag loader + m_tags_loader.setSize(m_square_size); + + // update the size of the controls loader + m_controls_loader.setSize(m_border_size); + + // update canvas background + updateBackground(); + + // update the sprites + updateSprites(); + + // update piece tags + updateTags(); + + // update border + updateBorder(); +} + +void ChessBoard::onMousePress(const QPoint& pos, int button) { + Point point = converter()->toLogical(pos); + if (!m_sprites.valid(point)) + return; + + //BEGIN left click + + if (button == Qt::LeftButton) { + if (m_entity.lock()->oneClickMoves()) { + Move m(Point::invalid(), point); + doMove(m); + } + else { + shared_ptr piece = m_sprites[point].sprite(); + + if (piece && m_entity.lock()->movable(point)) { + cancelSelection(); + m_drag_info = DragInfoPtr(new DragInfo(point, pos, piece, + m_entity.lock()->validTurn(point)) ); + piece->raise(); + } + + // if selection is valid, (pre)move to point + else if (selection != Point::invalid()) { + piece = m_sprites[selection].sprite(); + Q_ASSERT(piece); + Move m(selection, point); + + switch(m_entity.lock()->validTurn(selection)) { + + case Moving: + doMove(m); + cancelSelection(); + break; + + case Premoving: + if (m_entity.lock()->testPremove(m)) { + m_entity.lock()->addPremove(m); + setPremove(m); + cancelSelection(); + } + break; + + default: + break; + } + } + } + } + + //END left click + + //BEGIN right click + + else if (button == Qt::RightButton) { + cancelSelection(); + if (point == m_premove_from || point == m_premove_to) + cancelPremove(); + m_entity.lock()->handleRightClick(point); + } + + //END right click +} + +void ChessBoard::onMouseRelease(const QPoint& pos, int button) { + Point point = converter()->toLogical(pos); + + //BEGIN left click + + if (button == Qt::LeftButton) { + + if (m_drag_info) { +// Q_ASSERT(m_drag_info->piece); + Q_ASSERT(m_drag_info->sprite); + bool moved = false; + + // remove valid move highlighting + clearTags("validmove"); + + // toggle selection if the piece didn't move + if (m_drag_info->from == point) { + if (lastSelection == point) + cancelSelection(); + else + setSelection(point); + } + + else { + Point dst = point; + if (!m_sprites.valid(point)) + dst = Point::invalid(); + Move m(m_drag_info->from, dst); + + switch (m_entity.lock()->validTurn(m.src())) { + case Moving: + if (doMove(m)) + moved = true; + break; + + case Premoving: + if (m_entity.lock()->testPremove(m)) { + m_entity.lock()->addPremove(m); + setPremove(m); + } + break; + + default: + break; + } + } + + shared_ptr s = m_sprites[m_drag_info->from].sprite(); + if (!moved && s && s->pos() != converter()->toReal(m_drag_info->from)) { + Q_ASSERT(s); + QPoint real = converter()->toReal(m_drag_info->from); + if( (point == m_drag_info->from) ? 0/* !m_anim_movement*/ : 0 /* !m_anim_fade*/) //BROKEN + m_anim_manager->enqueue(shared_ptr(new InstantAnimation(s, real))); + else if (point == m_drag_info->from) + m_anim_manager->enqueue(shared_ptr(new MovementAnimation(s, real))); + else + m_anim_manager->enqueue(shared_ptr(new TeleportAnimation(s, s->pos(), real))); + } + + m_drag_info = DragInfoPtr(); + } + } + + //END left button +} + +void ChessBoard::onMouseMove(const QPoint& pos, int /*button*/) { + Point point = converter()->toLogical(pos); + static Point cachedPoint = Point(); + static bool cachedValid; + + if (m_drag_info) { + Q_ASSERT(m_drag_info->sprite); + // check drag threshold + if (!m_drag_info->dragStarted) { + QPoint delta = pos - m_drag_info->real; + if (delta.x() * delta.x() + delta.y() * delta.y() > DragInfo::DRAG_THRESHOLD) { + m_drag_info->dragStarted = true; + } + } + if (m_drag_info->dragStarted) + m_drag_info->sprite->moveTo(pos - QPoint(m_square_size / 2, m_square_size / 2) ); + + // highlight valid moves + Move move(m_drag_info->from, point); + bool valid = m_sprites.valid(point); + if (valid) { + InteractionType action = m_entity.lock()->validTurn(move.src()); + if (action == Moving) + if (point == cachedPoint) + valid = cachedValid; + else { + valid = m_entity.lock()->testMove(move); + cachedPoint = point; + cachedValid = valid; + } + } + + if (valid) + setTags("validmove", point); + else + clearTags("validmove"); + } + else if (m_entity.lock()->oneClickMoves()) { + if(point == m_hinting_pos) + return; + + Piece hint; + + if (m_sprites.valid(point)) { + Move move(Point::invalid(), point); + if (m_entity.lock()->testMove(move)) { + // set move hint + hint = m_entity.lock()->moveHint(move); + } + } + + updateHinting(point, hint); + } +} + +void ChessBoard::onPositionChanged() { + if (m_entity.lock() && m_entity.lock()->oneClickMoves() && m_sprites.valid(m_hinting_pos)) { + Piece hint; + + Move move(Point::invalid(), m_hinting_pos); + if (m_entity.lock()->testMove(move)) { + // set move hint + hint = m_entity.lock()->moveHint(move); + } + + updateHinting(move.dst(), hint); + } +} + +void ChessBoard::onMouseLeave() { + updateHinting(Point::invalid(), Piece()); +} + +void ChessBoard::updateHinting(Point pt, Piece piece) { + if(!m_sprites.valid(pt)) + piece = Piece(); + + + QString piece_name = m_namer->name(piece); + if(piece != Piece() || !m_sprites.valid(pt)) { + if(m_hinting.sprite()) { + if(1 /*BROKEN m_anim_fade*/) + m_anim_manager->enqueue( boost::shared_ptr(new FadeAnimation(m_hinting.sprite(), + m_hinting.sprite()->pos(), 160, 0)) ); + else + m_anim_manager->enqueue( boost::shared_ptr(new CaptureAnimation(m_hinting.sprite())) ); + } + + m_hinting_pos = Point::invalid(); + m_hinting = NamedSprite(); + } + else { + if(pt == m_hinting_pos) { + if (piece_name != m_hinting.name()) { + m_hinting = NamedSprite(piece_name, m_hinting.sprite()); + m_hinting.sprite()->setPixmap(loadSprite(piece_name)); + } + } + else { + if(m_hinting.sprite()) { + if(1 /*BROKEN m_anim_fade*/) + m_anim_manager->enqueue( boost::shared_ptr(new FadeAnimation(m_hinting.sprite(), + m_hinting.sprite()->pos(), 160, 0)) ); + else + m_anim_manager->enqueue( boost::shared_ptr(new CaptureAnimation(m_hinting.sprite())) ); + } + + QPixmap pix = loadSprite(piece_name); + SpritePtr sprite(new Sprite(pix, piecesGroup(), converter()->toReal(pt))); + sprite->setOpacity(160); + sprite->raise(); + sprite->show(); + + m_hinting_pos = pt; + m_hinting = NamedSprite(piece_name, sprite); + + /*if(m_anim_fade) + m_anim_manager->enqueue( boost::shared_ptr(new FadeAnimation(m_hinting.sprite(), + m_hinting.sprite()->pos(), 0, 160)) ); + else { + m_hinting.sprite()->setOpacity(160); + m_anim_manager->enqueue(boost::shared_ptr(new DropAnimation(m_hinting.sprite())) ); + }*/ + } + } +} + +void ChessBoard::reset() { + clearTags(); + cancelSelection(); + cancelPremove(); + m_anim_manager->stop(); +} + +void ChessBoard::flip(bool flipped) +{ + if (m_flipped != flipped) { + m_flipped = flipped; + + // update sprite positions + for (Point i = m_sprites.first(); i <= m_sprites.last(); i = m_sprites.next(i)) { + SpritePtr p = m_sprites[i].sprite(); + if (p) { + p->setPixmap(loadSprite(m_sprites[i].name())); + adjustSprite(i, true); + } + } + + updateTags(); + updateBorder(); + } +} + +void ChessBoard::draggingOn(const IColor* pool, int index, const QPoint& point) { + Point to = converter()->toLogical(point); + + if (m_sprites.valid(to)) + switch (m_entity.lock()->validTurn(pool)) { + case Moving: { + Move m(pool, index, to); + if (m_entity.lock()->testMove(m)) { + setTags("validmove", to); + return; + } + break; + } + + case Premoving: + setTags("validmove", to); + return; + + default: + break; + } + + clearTags("validmove"); +} + +bool ChessBoard::dropOn(const IColor* pool, int index, const QPoint& point) { + + Point to = converter()->toLogical(point); + if (!m_sprites.valid(to)) + return false; + + clearTags("validmove"); + + switch (m_entity.lock()->validTurn(pool)) { + + case Moving: { + Move m(pool, index, to); + if (m_entity.lock()->testMove(m)) { + m_entity.lock()->executeMove(m); + return true; + } + break; + } + + case Premoving: { + Move m(pool, index, to); + if (m_entity.lock()->testPremove(m)) { + m_entity.lock()->addPremove(m); + setPremove(m); + } + break; + } + + default: + break; + } + + kDebug() << "invalid move"; + error(InvalidMove); + return false; +} + diff --git a/src/chessboard.h b/src/chessboard.h new file mode 100644 index 0000000..9da00f5 --- /dev/null +++ b/src/chessboard.h @@ -0,0 +1,307 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESSBOARD_H +#define CHESSBOARD_H + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "entities/userentity.h" +#include "common.h" +#include "grid.h" +#include "usermove.h" +#include "pointconverter.h" +#include "pixmaploader.h" +#include "clickablecanvas.h" + +class Animation; +class AnimationManager; +class BoardTags; +class Components; +class ConstrainedText; +class DragInfo; +class IColor; +class INamer; +class UserEntity; + +typedef boost::shared_ptr BoardTagsPtr; + +/** + * @brief Board visualization class + * + * This class is a KGameCanvasItem that displaying a board filled with pieces. + * You can set custom tags for each square. + * @sa Table, @sa PiecePool, @sa Sprite + */ +class ChessBoard : public QObject, public ClickableCanvas, protected PointConverter { + Q_OBJECT + +public: + friend class GraphicalSystem; + friend class PiecePool; + typedef Grid PieceGrid; + +private: + class DragInfo { + public: + static const int DRAG_THRESHOLD = 100; // pixels ^ 2 + boost::shared_ptr sprite; + Point from; // logical coordinates + QPoint real; /// real starting point, used to honor drag threshold + bool dragging; + bool dragStarted; + bool droppedOut; + InteractionType action; + + DragInfo(Point from, const QPoint& real, + const boost::shared_ptr& sprite, + InteractionType action) + : sprite(sprite) + , from(from) + , real(real) + , dragging(false) + , dragStarted(false) + , droppedOut(false) + , action(action) {} + }; + + typedef boost::shared_ptr DragInfoPtr; + + /** true if the board is flipped */ + bool m_flipped; + + /** size of a square in points */ + int m_square_size; + + /** size of the border */ + int m_border_size; + + /** margin for text */ + int m_border_text_near; + + /** far margin for text */ + int m_border_text_far; + + /** loader class, to load pieces */ + PixmapLoader m_loader; + + /** the piece being dragged */ + DragInfoPtr m_drag_info; + + /** displayed m_sprites */ + PieceGrid m_sprites; + + /** the visual move hint */ + NamedSprite m_hinting; + Point m_hinting_pos; + + /** the canvas group that holds the pieces */ + KGameCanvasGroup *m_pieces_group; + + /** the canvas item that holds the background of the board */ + KGameCanvasGroup *m_canvas_background; + + /** the canvas item that holds board border */ + KGameCanvasGroup *m_canvas_border; + + /** the canvas item that holds board border text */ + KGameCanvasGroup *m_canvas_border_text; + + /** all the tags on the board */ + BoardTagsPtr m_tags; + + /** the @a PixmapLoader used to create tags */ + PixmapLoader m_tags_loader; + + /** the @a PixmapLoader used for controls */ + PixmapLoader m_controls_loader; + + /** the entity responsible of all the interctions with the board */ + boost::weak_ptr m_entity; + + /** The currently selected square */ + Point selection; + + /** The reviously selected square */ + Point lastSelection; + + /** premove */ + Point m_premove_from; + Point m_premove_to; + + QColor m_border_text_color; + + QFont m_border_font; + + QStringList m_border_coords; + + const IColor* m_dropped_pool; + int m_dropped_index; + + AnimationManager* m_anim_manager; + + INamer* m_namer; + + /** the text items for the border */ + std::vector m_border_text; + + /** this internal function updates the background after the board has been resized */ + void updateBackground(); + + /** this internal function updates the border after the board has been resized */ + void updateBorder(); + + /** this internal function creates a new border, if needed */ + void recreateBorder(); + + void updateHinting(Point pt, Piece piece); + + /** this internal function updates the sprites after the board has been resized */ + void updateSprites(); + + /** this internal function updates the tags after the board has been resized */ + void updateTags(); + + void setPremove(const Move& move); + void updatePremove(); + void setSelection(const Point& p); + + QRect computeRect(Point) const; + QRegion computeRegion(Point) const; + QRect squareRect(int x, int y) const; + + /** this function tries to notify the move to the entity */ + bool doMove(Move&); + +public: + /** constructor, requires the canvas parent */ + ChessBoard(Components* components, + AnimationManager* animManager, + KGameCanvasAbstract* parent); + ~ChessBoard(); + + /** set the board flipping */ + void flip(bool flipped); + + /** flips the board */ + void flip() { flip(!m_flipped); } + + /** returns the flipped value */ + bool flipped() const { return m_flipped; } + + /** returns the size of a square */ + int squareSize() const { return m_square_size; } + + /** returns the area covered by the piece grid */ + QRect boardRect() { return QRect(pos(), QSize(m_square_size*gridSize().x, + m_square_size*gridSize().y)); } + + /** returns the size of the grid */ + Point gridSize() const { return m_sprites.getSize(); } + + /** recreates the board underlying grid */ + void createGrid(Point p, const QStringList& border_coords); + + /** return the group that contains the pieces */ + KGameCanvasAbstract* piecesGroup() { return m_pieces_group; } + + /** returns the point converter class */ + PointConverter* converter() { return static_cast(this); } + + /** returns the point converter class */ + const PointConverter* converter() const { return static_cast(this); } + + /** returns the sprite loader */ + PixmapLoader* loader() { return &m_loader; } + + /** Load a sprite using the sprite loader */ + QPixmap loadSprite(const QString& id); + + /** returns the sprite loader */ + const PixmapLoader* loader() const { return &m_loader; } + + + /** adds a tag with name name, the tag will stay over the pieces if over is true */ + boost::shared_ptr addTag(const QString& name, Point at, bool over=false); + + /** clears the tags with name name */ + void clearTags(const QString& name); + + /** clears all the tags */ + void clearTags(); + + /** clear all the tags twith name name, than sets them to the valid given ones */ + void setTags(const QString& name, Point p1 = Point::invalid(), Point p2 = Point::invalid(), + Point p3 = Point::invalid(), Point p4 = Point::invalid(), + Point p5 = Point::invalid(), Point p6 = Point::invalid() ); + + /** returns a reference to the loader used to load tag pixmaps */ + PixmapLoader* tagsLoader() { return &m_tags_loader; } + + /** returns a reference to the loader used to load controls pixmaps */ + PixmapLoader* controlsLoader() { return &m_controls_loader; } + + + void cancelPremove(); + + void cancelSelection(); + + /** Brings the sprite to its correct position */ + void adjustSprite(const Point& p, bool immediate = false); + + /** sets the controlling entity */ + inline void setEntity(const boost::shared_ptr& entity) { m_entity = entity; } + + + /** Notifies to the board that a certain piece is being dragged over the board */ + void draggingOn(const IColor* pool, int index, const QPoint& p); + + /** Executes a drop. This function id typically called by by a PiecePool */ + bool dropOn(const IColor* pool, int index, const QPoint& point); + + /** mouse release event */ + virtual void onMouseRelease(const QPoint& pos, int button); + + /** mouse press event */ + virtual void onMousePress(const QPoint& pos, int button); + + /** mouse move event */ + virtual void onMouseMove(const QPoint& pos, int button); + + /** mouse leave event */ + virtual void onMouseLeave(); + + /** resize event (new_size is the new size of a SQUARE) */ + virtual void onResize(int new_size, int border_size, int border_text_near, + int border_text_far, bool force_reload = false); + + /** the position changed (will update the move highlighting) */ + virtual void onPositionChanged(); + + /** changed settings handler */ + virtual void settingsChanged(); + + /** resets all tags and stops all animations */ + void reset(); + +Q_SIGNALS: + void error(ErrorCode code); +}; + +#endif // CHESSBOARD_H diff --git a/src/chesstable.cpp b/src/chesstable.cpp new file mode 100644 index 0000000..dc6edc5 --- /dev/null +++ b/src/chesstable.cpp @@ -0,0 +1,355 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include +#include +#include "chesstable.h" +#include "game.h" +#include "gameinfo.h" +#include "connection.h" +#include "piecepool.h" +#include "clock.h" +#include "mastersettings.h" +#include "movelist_table.h" +#include "infodisplay.h" + +using namespace boost; + +ChessTable::ChessTable(Variant* variant, QWidget* parent) +: KGameCanvasWidget(parent) +, m_wallpaper(NULL) +, m_current(NULL) +, m_mousegrab(NULL) +, m_need_reload(false) +, m_components(variant) { + + setMouseTracking(true); + + // create m_board + m_board = new ChessBoard(&m_components, &m_anim_manager, this); + m_board->show(); + + // create move list + m_movelist = new MoveList::Table; + + // create clocks + for(int i=0;i<2;i++) { + m_clocks[i] = new Clock(i, this); + m_clocks[i]->show(); + } + m_clocks[0]->activate(0); + + // create info display + m_info = new InfoDisplay(this); +// m_info->show(); + + // create pools + // FIXME what to do for more than 2 players? + for (int i = 0; i < 2; i++) { + const IColor* color = m_components.player(i); + if (color) { + m_pools[i] = new PiecePool(color, m_board, &m_anim_manager, this); + m_pools[i]->show(); + } + } + + m_board->raise(); + settingsChanged(); +} + +ChessTable::~ChessTable() { + for(int i=0;i<2;i++) + delete m_clocks[i]; + delete m_movelist; + delete m_board; + for(int i=0;i<2;i++) + delete m_pools[i]; + delete m_info; +} + +void ChessTable::settingsChanged() { + m_anim_manager.reload(); + + m_board->settingsChanged(); + for(int i=0;i<2;i++) + m_clocks[i]->settingsChanged(); + m_info->settingsChanged(); + for(int i=0;i<2;i++) + m_pools[i]->settingsChanged(); + + if(m_wallpaper) + delete m_wallpaper; + + QPixmap bg = m_board->controlsLoader()->getStaticValue("wallpaper", 0, true); + if (!bg.isNull()) { + m_wallpaper = new KGameCanvasTiledPixmap(bg, QSize(), QPoint(), false, this); + m_wallpaper->lower(); + m_wallpaper->show(); + } + else + m_wallpaper = 0; + + /* redo the layout, forcing reload */ + if(isVisible()) + layout(true); + else + m_need_reload = true; +} + +ClickableCanvas* ChessTable::eventItemAt(QPoint pos) { + if (m_board->boardRect().contains(pos)) + return m_board; + + for (int i=0; i<2; i++) + if (m_pools[i]->boardRect().contains(pos)) + return m_pools[i]; + + for (int i=0; i<2; i++) + if (m_clocks[i]->rect().contains(pos)) + return m_clocks[i]; + + return NULL; +} + +void ChessTable::setEntity(const boost::shared_ptr& entity) { + m_board->setEntity(entity); +} + +void ChessTable::layout(bool force_reload) { + force_reload |= m_need_reload; + m_need_reload = false; + + if (m_wallpaper) { + m_wallpaper->setSize(size()); + QSize delta = (m_wallpaper->pixmap().size()-size())/2; + m_wallpaper->setOrigin(QPoint(delta.width(), delta.height())); + } + + ::LuaApi::LuaValueMap params; + params["width"] = width(); + params["height"] = height(); + params["grid_size"] = QPointF(m_board->gridSize()); + + ::LuaApi::LuaValueMap lvals = m_board->controlsLoader()->getStaticValue< ::LuaApi::LuaValueMap>("layout", ¶ms); + +#if 0 + for(::LuaApi::LuaValueMap::iterator it = lvals.begin(); it != lvals.end(); ++it) + if(double* val = boost::get(&it.value())) + kDebug() << "lvals[" << it.key() << "] = " << *val; + else if(QPointF* val = boost::get(&it.value())) + kDebug() << "lvals[" << it.key() << "] = Point(" << val->x() << "," << val->y() << ")"; + else if(QRectF* val = boost::get(&it.value())) + kDebug() << "lvals[" << it.key() << "] = Rect(" << val->x() << "," << val->y() + << "," << val->width() << "," << val->height() << ")"; +#endif + +#define GET_INT(name) \ + int name = 0; \ + {::LuaApi::LuaValueMap::iterator it = lvals.find(#name);\ + if(double* val = (it==lvals.end()) ? 0 : boost::get(&lvals[#name]) ) \ + name = (int)*val; \ + else \ + kError() << "Theme error:" << #name << "should be set to a number in the layout";} + +#define GET_POINT(name) \ + QPoint name; \ + {::LuaApi::LuaValueMap::iterator it = lvals.find(#name);\ + if(QPointF* val = (it==lvals.end()) ? 0 : boost::get(&lvals[#name]) ) \ + name = val->toPoint(); \ + else \ + kError() << "Theme error:" << #name << "should be set to a point in the layout";} + + GET_POINT(board_position); + GET_INT(square_size); + GET_INT(border_size); + GET_INT(border_text_near); + GET_INT(border_text_far); + GET_POINT(clock0_position); + GET_POINT(clock1_position); + GET_INT(clock_size); + GET_POINT(pool0_position); + GET_POINT(pool1_position); + GET_INT(pool_piece_size); + GET_INT(pool_width); + + m_board->moveTo(board_position.x(), board_position.y()); + m_board->onResize( square_size, border_size, border_text_near, border_text_far, force_reload); + + int x = !m_board->flipped(); + + m_clocks[x]->resize(clock_size); + m_clocks[x]->moveTo(clock0_position.x(), clock0_position.y()); +// kDebug() << "moving clock " << x << " to " << clock0_position.y(); + + m_clocks[!x]->resize(clock_size); + m_clocks[!x]->moveTo(clock1_position.x(), clock1_position.y()); +// kDebug() << "moving clock " << !x << " to " << clock1_position.y(); + + m_pools[x]->m_flipped = false; + m_pools[x]->onResize(pool_piece_size, force_reload); + m_pools[x]->moveTo(pool0_position.x(), pool0_position.y()); + m_pools[x]->setGridWidth(pool_width); + + m_pools[!x]->m_flipped = true; + m_pools[!x]->onResize(pool_piece_size, force_reload); + m_pools[!x]->moveTo(pool1_position.x(), pool1_position.y()); + m_pools[!x]->setGridWidth(pool_width); +} + +void ChessTable::resizeEvent(QResizeEvent* /*e*/) { + layout(); +} + +void ChessTable::mouseReleaseEvent(QMouseEvent* e) { + + if(m_mousegrab) { + m_mousegrab->onMouseRelease(e->pos() - m_mousegrab->pos(), e->button() ); + if(!e->buttons()) { + m_mousegrab = NULL; + + ClickableCanvas* cb = eventItemAt(e->pos()); + if(cb != m_current) { + if(m_current) + m_current->onMouseLeave(); + if(cb) { + cb->onMouseEnter(); + cb->onMouseMove(e->pos() - cb->pos(), 0); + } + m_current = cb; + } + } + return; + } +} + +void ChessTable::mousePressEvent(QMouseEvent* e) { + if(m_mousegrab) { + m_mousegrab->onMousePress(e->pos() - m_mousegrab->pos(), e->button() ); + return; + } + + ClickableCanvas* cb = eventItemAt(e->pos()); + if(cb != m_current) { + if(m_current) + m_current->onMouseLeave(); + if(cb) + cb->onMouseEnter(); + m_current = cb; + } + if(cb) { + cb->onMousePress(e->pos() - cb->pos(), e->button() ); + m_mousegrab = cb; + } +} + +void ChessTable::mouseMoveEvent(QMouseEvent* e) { + if(m_mousegrab) { + m_mousegrab->onMouseMove(e->pos() - m_mousegrab->pos(), e->button() ); + return; + } + + ClickableCanvas* cb = eventItemAt(e->pos()); + if(cb != m_current) { + if(m_current) + m_current->onMouseLeave(); + if(cb) + cb->onMouseEnter(); + m_current = cb; + } + if(cb) + cb->onMouseMove(e->pos() - cb->pos(), e->button() ); +} + +void ChessTable::enterEvent(QEvent*) { } + +void ChessTable::leaveEvent(QEvent*) { + if(m_current) + m_current->onMouseLeave(); + m_current = NULL; +} + +void ChessTable::flip() { + m_board->flip(); + + int delta = qAbs(m_pools[0]->pos().y() - m_pools[1]->pos().y()); + for(int i=0;i<2;i++) + m_pools[i]->flipAndMoveBy( QPoint(0, delta) ); + + // flip clocks + QPoint pos = m_clocks[0]->pos(); + m_clocks[0]->moveTo(m_clocks[1]->pos()); + m_clocks[1]->moveTo(pos); +} + +void ChessTable::flip(bool flipped) { + if(m_board->flipped() != flipped) + flip(); +} + +void ChessTable::changeClock(int color) { + if(m_clocks[0]->running() || m_clocks[1]->running()) + for(int i=0;i<2;i++) { + if ( (i == color) != m_clocks[i]->running() ) + if( i==color ) + m_clocks[i]->start(); + else + m_clocks[i]->stop(); + } +} + +void ChessTable::updateTurn(int color) { + for(int i=0; i<2; i++) + m_clocks[i]->activate(color == i); +} + +void ChessTable::stopClocks() { + for(int i=0; i<2; i++) + m_clocks[i]->stop(); +} + +void ChessTable::updateTime(int white, int black) { + m_clocks[0]->setTime(white); + m_clocks[1]->setTime(black); +} + +void ChessTable::resetClock() { + stopClocks(); + updateTime(0, 0); + for(int i=0; i<2; i++) + m_clocks[i]->setPlayer(Player()); +} + +void ChessTable::setPlayers(const Player& white, const Player& black) { + m_clocks[0]->setPlayer(white); + m_clocks[1]->setPlayer(black); +} + +void ChessTable::run() { + for(int i=0;i<2;i++) + if(m_clocks[i]->active() && !m_clocks[i]->running()) + m_clocks[i]->start(); +} + +void ChessTable::displayMessage(const QString& msg) { + kDebug() << msg; + message(msg); +} + +AnimationManager* ChessTable::animationManager() { return &m_anim_manager; } +const AnimationManager* ChessTable::animationManager() const { return &m_anim_manager; } + +void ChessTable::setVariant(Variant* variant) { + m_components.setVariant(variant); +} + +Components* ChessTable::components() { return &m_components; } diff --git a/src/chesstable.h b/src/chesstable.h new file mode 100644 index 0000000..fa2924d --- /dev/null +++ b/src/chesstable.h @@ -0,0 +1,91 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESSTABLE_H +#define CHESSTABLE_H + +#include +#include "animationmanager.h" +#include "positioninfo.h" +#include "chessboard.h" +#include "common.h" +#include "components.h" + +class PiecePool; +class Player; +class Clock; +class InfoDisplay; +class Variant; +namespace MoveList { class Table; } + +class ChessTable : public KGameCanvasWidget { + Q_OBJECT + KGameCanvasTiledPixmap* m_wallpaper; + + Clock* m_clocks[2]; + ChessBoard* m_board; + PiecePool* m_pools[2]; + MoveList::Table* m_movelist; + InfoDisplay* m_info; + + ClickableCanvas* m_current; + ClickableCanvas* m_mousegrab; + bool m_need_reload; + + ClickableCanvas* eventItemAt(QPoint pos); + + void layout(bool force_reload = false); + + AnimationManager m_anim_manager; + Components m_components; +public: + explicit ChessTable(Variant* variant, QWidget* parent = 0); + ~ChessTable(); + + inline ChessBoard* board() const { return m_board; } + inline PiecePool* pool(int index) const { return m_pools[index]; } + inline MoveList::Table* moveListTable() const { return m_movelist; } + inline Clock* clock(int index) const { return m_clocks[index]; } + inline InfoDisplay* info() const { return m_info; } + + void flip(bool); + void flip(); + void run(); + void stopClocks(); + + void setEntity(const boost::shared_ptr& entity); + + void displayMessage(const QString&); + + virtual void resizeEvent(QResizeEvent*); + virtual void mouseReleaseEvent(QMouseEvent*); + virtual void mousePressEvent(QMouseEvent*); + virtual void mouseMoveEvent(QMouseEvent*); + virtual void enterEvent (QEvent * event); + virtual void leaveEvent (QEvent * event); + + void settingsChanged(); //called by GraphicalInfo, for better theme change + AnimationManager* animationManager(); + const AnimationManager* animationManager() const; + Components* components(); + void setVariant(Variant* variant); +public Q_SLOTS: + void updateTurn(int color); + void changeClock(int color); + void updateTime(int white, int black); + void setPlayers(const Player&, const Player&); + void resetClock(); + +Q_SIGNALS: + void message(const QString&); + void error(ErrorCode); +}; + +#endif // CHESSTABLE_H diff --git a/src/clickablecanvas.h b/src/clickablecanvas.h new file mode 100644 index 0000000..9c77938 --- /dev/null +++ b/src/clickablecanvas.h @@ -0,0 +1,26 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CLICKABLECANVAS_H +#define CLICKABLECANVAS_H + +#include "kgamecanvas.h" + +class ClickableCanvas : public KGameCanvasGroup { +public: + ClickableCanvas(KGameCanvasAbstract* canvas = NULL) : KGameCanvasGroup(canvas) { } + virtual void onMousePress(const QPoint& point, int button) = 0; + virtual void onMouseMove(const QPoint& point, int button) = 0; + virtual void onMouseRelease(const QPoint& point, int button) = 0; + virtual void onMouseEnter() {} + virtual void onMouseLeave() {} +}; + +#endif // CLICKABLECANVAS_H diff --git a/src/clock.cpp b/src/clock.cpp new file mode 100644 index 0000000..1a9e6e5 --- /dev/null +++ b/src/clock.cpp @@ -0,0 +1,172 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "clock.h" +#include "constrainedtext.h" +#include +#include + +Clock::Clock(int col, KGameCanvasAbstract* canvas) +: ClickableCanvas(canvas) +, m_color(col) +, m_running(false) { + m_background = new KGameCanvasPixmap(this); + m_caption = new ConstrainedText(this); + m_time_label = new ConstrainedText(this); + m_player_name = new ConstrainedText(this); + m_decs = new ConstrainedText(this); + + m_background->show(); + m_caption->show(); + m_time_label->show(); + m_player_name->show(); + + setTime(0); + setPlayer(Player()); + m_caption->setText(col == 0 ? "White" : "Black"); + connect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); +} + +Clock::~Clock() { + delete m_background; + delete m_caption; + delete m_time_label; + delete m_player_name; + delete m_decs; +} + +void Clock::start() { + m_running = true; + m_time.start(); + m_timer.start(100); +} + +void Clock::stop() { + if (m_running) m_total_time -= m_time.elapsed(); + m_running = false; + m_timer.stop(); +} + +void Clock::activate(bool a) { + if(m_active == a) + return; + + m_active = a; + m_background->setPixmap(m_active ? m_active_pixmap : m_inactive_pixmap); + + m_time_label->setColor(m_active ? m_active_text : m_inactive_text); + m_player_name->setColor(m_active ? m_active_text : m_inactive_text); + m_caption->setColor(m_active ? m_active_text : m_inactive_text); +} + +void Clock::tick() { + computeTime(); +} + +void Clock::computeTime() { + int time = m_total_time; + if (m_running) time -= m_time.elapsed(); + + bool positive; + int total_secs; + int decs = -1; + + if (time > 0 && time < 10000) { + int total_decs = static_cast(ceil(time / 100.0)); + positive = total_decs >= 0; + if (!positive) total_decs = -total_decs; + decs = total_decs % 10; + total_secs = total_decs / 10; + } + else { + total_secs = static_cast(ceil(time / 1000.0)); + positive = total_secs >= 0; + if (!positive) total_secs = -total_secs; + } + + + int secs = total_secs % 60; + int mins = total_secs / 60; + QString timeText; + + { + QString secText = QString::number(secs); + if (secText.length() < 2) secText = "0" + secText; + + QString minText = QString::number(mins); + if (minText.length() < 2) minText = "0" + minText; + + timeText = minText + ":" + secText; + if (!positive) + timeText = "-" + timeText; + +#if 0 + if (positive && decs != -1) { + int dec = static_cast(ceil(time / 100.0)) % 10; + + m_decs->moveTo(m_time_label->rect().bottomRight() + QPoint(2, 0)); + m_decs->setText(":" + QString::number(dec)); + m_decs->show(); + } + else + m_decs->hide(); +#endif + } + + m_time_label->setText(timeText); +} + +QString Clock::playerString(const Player& player) { + QString rating = player.rating != -1 ? QString(" (%1)").arg(player.rating) : QString(); + return QString("%1").arg(player.name) + rating; +} + +void Clock::setPlayer(const Player& player) { + m_player_name->setText(playerString(player)); +} + +void Clock::setTime(int t) { + m_total_time = t; + tick(); +} + +void Clock::onMousePress(const QPoint& /*pos*/, int /*button*/) { +} + +void Clock::resize(int size) { + m_controls_loader.setSize(size); + + m_height = (int)m_controls_loader.getValue("clock_height"); + + m_active_pixmap = m_controls_loader.getValue("clock_active_background"); + m_inactive_pixmap = m_controls_loader.getValue("clock_inactive_background"); + + m_active_text = m_controls_loader.getValue("clock_active_text").color(); + m_inactive_text = m_controls_loader.getValue("clock_inactive_text").color(); + + m_background->setPixmap(m_active ? m_active_pixmap : m_inactive_pixmap); + m_background->moveTo(m_controls_loader.getValue("clock_background_offset").toPoint()); + + m_time_label->setConstrainRect(m_controls_loader.getValue("clock_time_rect").toRect()); + m_time_label->setColor(m_active ? m_active_text : m_inactive_text); + + m_player_name->setConstrainRect(m_controls_loader.getValue("clock_player_rect").toRect()); + m_player_name->setColor(m_active ? m_active_text : m_inactive_text); + + m_caption->setConstrainRect(m_controls_loader.getValue("clock_caption_rect").toRect()); + m_caption->setColor(m_active ? m_active_text : m_inactive_text); +} + +void Clock::settingsChanged() { + m_caption->setFont(m_controls_loader.getStaticValue("clock_caption_font")); + m_player_name->setFont(m_controls_loader.getStaticValue("clock_player_font")); + m_time_label->setFont(m_controls_loader.getStaticValue("clock_time_font")); +} + diff --git a/src/clock.h b/src/clock.h new file mode 100644 index 0000000..00c52f8 --- /dev/null +++ b/src/clock.h @@ -0,0 +1,89 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CLOCK_H +#define CLOCK_H + +#include +#include +#include +#include "kgamecanvas.h" +#include "player.h" +#include "pixmaploader.h" +#include "clickablecanvas.h" + + +class ConstrainedText; + +class Clock : public QObject, public ClickableCanvas { +Q_OBJECT + + int m_color; + QTimer m_timer; + QTime m_time; + int m_total_time; + + bool m_running; + bool m_active; + + KGameCanvasPixmap* m_background; + ConstrainedText* m_caption; + ConstrainedText* m_time_label; + ConstrainedText* m_player_name; + ConstrainedText* m_decs; + + QPixmap m_active_pixmap; + QPixmap m_inactive_pixmap; + + QColor m_active_text; + QColor m_inactive_text; + + int m_height; + + + /** the @a PixmapLoader used for controls */ + PixmapLoader m_controls_loader; + + + void computeTime(); + static QString playerString(const Player& player); + +public: + Clock(int col, KGameCanvasAbstract* canvas); + ~Clock(); + + /** returns a reference to the loader used to load controls pixmaps */ + PixmapLoader* controlsLoader() { return &m_controls_loader; } + + bool running() { return m_running; } + void start(); + void stop(); + bool active() { return m_active; } + void activate(bool); + + void setPlayer(const Player& p); + void setTime(int t); + + virtual void onMousePress(const QPoint& pos, int button); + virtual void onMouseRelease(const QPoint& /*pos*/, int /*button*/) { } + virtual void onMouseMove(const QPoint& /*pos*/, int /*button*/) { } + + void resize(int size); + int height() { return m_height; } + void settingsChanged(); + +private Q_SLOTS: + void tick(); + +Q_SIGNALS: + void labelClicked(int); +}; + +#endif // CLOCK_H diff --git a/src/common.cpp b/src/common.cpp new file mode 100644 index 0000000..d00ac7e --- /dev/null +++ b/src/common.cpp @@ -0,0 +1,40 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "common.h" +#include + +/** + * @brief Namespace holding Boost stubs. + */ +namespace boost { +// throw exception: used by boost +void throw_exception(std::exception const &) { + kError() << "[bug] boost exception"; +} +} + +#ifdef Q_CC_GNU + #include + #include +#endif //Q_CC_GNU + +QString prettyTypeName(const char* name) { +#ifdef Q_CC_GNU + int s; + const char* res = abi::__cxa_demangle(name, NULL, NULL, &s); + if(res) { + QString retv(res); + free((void*)res); + return retv; + } +#endif //Q_CC_GNU + return QString(name); +} diff --git a/src/common.h b/src/common.h new file mode 100644 index 0000000..e68ce42 --- /dev/null +++ b/src/common.h @@ -0,0 +1,30 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef COMMON_H +#define COMMON_H + +#include "export.h" +#include + +class QString; + +enum ErrorCode { + InvalidMove +}; + +QString prettyTypeName(const char* name); + +#ifndef M_PI + #define M_PI 3.1415926 +#endif + +#endif // COMMON_H + diff --git a/src/components.cpp b/src/components.cpp new file mode 100644 index 0000000..b044340 --- /dev/null +++ b/src/components.cpp @@ -0,0 +1,86 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "components.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +Components::Components(Variant* variant) { + setVariant(variant); +} + +void Components::setVariant(Variant* variant) { + if (!variant) + kError() << "Creating a component collection using a null variant"; + + m_variant = std::auto_ptr(variant); + + m_animator_factory = requestComponent( + m_variant.get(), "animator_factory"); + m_state = requestComponent( + m_variant.get(), "state"); + + Repository::ComponentMap serializers = + m_variant->repository()->listComponents("move_serializer/"); + for (Repository::ComponentMap::iterator it = serializers.begin(), + end = serializers.end(); it != end; ++it) { + IMoveSerializer* s = requestInterface(it.value()); + if (s) m_move_serializers[it.key()] = s; + } + + m_namer = requestComponent(m_variant.get(), "namer"); + m_policy = requestComponent(m_variant.get(), "policy"); + m_validator = requestComponent(m_variant.get(), "validator"); + + Repository::ComponentMap players = + m_variant->repository()->listComponents("player"); + for (Repository::ComponentMap::iterator it = players.begin(), + end = players.end(); it != end; ++it) { + bool ok; + int index = it.key().toInt(&ok); + if (!ok) continue; + IColor* color = requestInterface(it.value()); + if (!color) continue; + + m_players[index] = color; + } +} + +IAnimator* Components::createAnimator(TaguaAPI* api) const { + return m_animator_factory->create(api, m_namer); +} + +IState* Components::createState() const { + return m_state->clone(); +} + +IMoveSerializer* Components::moveSerializer(const QString& type) { + return m_move_serializers[type]; +} + +INamer* Components::namer() { return m_namer; } + +IPolicy* Components::policy() { return m_policy; } + +IValidator* Components::validator() { return m_validator; } + +IColor* Components::player(int index) { return m_players[index]; } + +QMap Components::players() { return m_players; } + +Variant* Components::variant() { return m_variant.get(); } diff --git a/src/components.h b/src/components.h new file mode 100644 index 0000000..28bb583 --- /dev/null +++ b/src/components.h @@ -0,0 +1,70 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef COMPONENTS_H +#define COMPONENTS_H + +#include +#include + +#include "variant.h" + +class IAnimator; +class IAnimatorFactory; +class IColor; +class IMoveSerializer; +class INamer; +class IPolicy; +class IState; +class IValidator; +class TaguaAPI; +class Variant; + +/** + * @brief A utility class to simplify the interaction with variant components. + * + * A component object holds all official components of a variant, and exposes + * utility methods to retrieve them, or create them using the appropriate + * factories. + * + * Most methods return a component owned by the variant, but those that start + * with 'create' use a factory to instantiate a new component that will be + * owned by the caller. + */ +class Components { + std::auto_ptr m_variant; + + IAnimatorFactory* m_animator_factory; + IState* m_state; + + QMap m_move_serializers; + INamer* m_namer; + IPolicy* m_policy; + IValidator* m_validator; + QMap m_players; +public: + explicit Components(Variant*); + + void setVariant(Variant*); + + IAnimator* createAnimator(TaguaAPI* api) const; + IState* createState() const; + + IMoveSerializer* moveSerializer(const QString& type); + INamer* namer(); + IPolicy* policy(); + IValidator* validator(); + IColor* player(int index); + QMap players(); + + Variant* variant(); +}; + +#endif // COMPONENTS_H + diff --git a/src/config.xsd b/src/config.xsd new file mode 100644 index 0000000..d14c792 --- /dev/null +++ b/src/config.xsd @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/connection.cpp b/src/connection.cpp new file mode 100644 index 0000000..54313bd --- /dev/null +++ b/src/connection.cpp @@ -0,0 +1,164 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "connection.h" +#include +#include +#include +#include +#include +#include +#include +#include "common.h" +#include "settings.h" + +Connection::Connection() +: m_device(NULL) +, m_connected(false) +, m_initialized(false) { + QString logFileName; + if (!logFileName.isEmpty()) { + logFile = new QFile(logFileName); + logFile->open(QIODevice::WriteOnly); + logStream = 0; //= new QTextStream(logFile); + } + else + logStream = 0; +} + +Connection::~Connection() { + if (logStream) { + delete logStream; + logFile->close(); + delete logFile; + } + if (m_device) { + KProcess* p = qobject_cast(m_device); + if (p) + p->kill(); + delete m_device; + } +} + +void Connection::establish(const char* host, quint16 port, + const QString& helper, const QString& helper_cmd) { + if (m_device) { + KProcess* p = qobject_cast(m_device); + if (p) + p->kill(); + delete m_device; + } + + strncpy(m_host, host, 256); + m_port = port; + m_helper = helper; + m_helper_cmd = helper_cmd; + + if (helper.isEmpty()) { + QTcpSocket *s = new QTcpSocket(this); + s->setObjectName("IcsSocket"); + + connect(s, SIGNAL(hostFound()), this, SIGNAL(hostFound())); + connect(s, SIGNAL(connected()), this, SIGNAL(established())); + + hostLookup(); + s->connectToHost(m_host, m_port); + + m_device = s; + m_connected = true; + } + else { + m_device = new KProcess(this); + m_device->setObjectName("IcsHelper"); + + if (m_helper_cmd.contains("$(HOST_IP)")) { + QHostInfo::lookupHost(m_host, this, SLOT(lookedUp(const QHostInfo))); + } + else { + lookedUp(QHostInfo()); + } + } + + connect(m_device, SIGNAL(readyRead()), this, SLOT(processLine())); +} + +void Connection::lookedUp(const QHostInfo &hi) { + KProcess* p = m_device ? qobject_cast(m_device) : NULL; + if (p) { + QString args = m_helper_cmd; + args.replace("$(HOST_NAME)", QString(m_host) ); + args.replace("$(HOST_IP)", hi.addresses().isEmpty() ? QString() : + hi.addresses().first().toString () ); + args.replace("$(PORT)", QString::number(m_port)); + p->setOutputChannelMode(KProcess::OnlyStdoutChannel); + p->setProgram(m_helper, args.split(' ')); + p->start(); + + m_connected = true; + if(!m_unsent_text.isEmpty()) { + QTextStream os(m_device); + os << m_unsent_text; + + if (logStream) + (*logStream) << "> " << m_unsent_text; + m_unsent_text = QString(); + } + } +} + +void Connection::processLine() { + if(!m_device) { + kError() << "No device"; + return; + } + + while (m_device->canReadLine()) { + QString line = m_device->readLine(); + line = buffer + line.replace("\r", ""); + receivedLine(line, buffer.length()); + if (logStream) + (*logStream) << "< " << line << "\n"; + buffer = ""; + } + + int size; + if ((size = m_device->bytesAvailable()) > 0) { + char* data = new char[size + 1]; + m_device->read(data, size); + data[size] = '\0'; + int offset = buffer.length(); + buffer += QString(data).replace("\r", ""); + delete[] data; + + receivedText(buffer, offset); + } +} + +void Connection::sendText(const QString& text) { + if(!m_connected) { + m_unsent_text += text + "\n"; + return; + } + + if(!m_device) { + kDebug() << "No device"; + return; + } + + processLine(); + QTextStream os(m_device); + os << text << "\n"; + + if (logStream) + (*logStream) << "> " << text << "\n"; +} + + + diff --git a/src/connection.h b/src/connection.h new file mode 100644 index 0000000..45fca51 --- /dev/null +++ b/src/connection.h @@ -0,0 +1,119 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CONNECTION_H +#define CONNECTION_H + +#include + +class QTextStream; +class QIODevice; +class QFile; +class QHostInfo; + +/** + * @brief Manage a connection with a remote server. + * + * This class can be used to manage a connection with a chess server. Once connected, + * it emits the signal @ref receivedLine whenever a new whole line is received. + * Partial lines are kept in an internal buffer. + * The Connection class supports the use of a helper such as timeseal. + */ +class Connection : public QObject { +Q_OBJECT + QIODevice* m_device; + QString buffer; + QFile* logFile; + QTextStream* logStream; + bool m_connected; + bool m_initialized; + QString m_unsent_text; + + char m_host[256]; + quint16 m_port; + QString m_helper; + QString m_helper_cmd; + +public: + /** + * Create a new connection object. No actual connection is made + * until @ref establish is called. + */ + Connection(); + + /** + * Destroy the object and kill the helper, if present. + */ + virtual ~Connection(); + + /** + * Create an actual connection to an internet host. + * @param host Fully qualified name of the host. + * @param port Host port to connect to. + * @param helper Full path of a helper. A null or empty string if no helper is needed. + * @param args Helper arguments. They can optionally contain variabiles which will be expaded + * before they are passed to the helper. + * Supported variables: $(HOST_NAME), $(HOST_IP), $(PORT). + */ + void establish(const char* host, quint16 port, + const QString& helper, const QString& args); + + /** + * Whether the connection has been initialized. + */ + inline bool initialized() const { return m_initialized; } + + /** + * Set the inizialized flag of the connection. Use this after you have + * sent initial commands. + */ + inline void setInitialized() { m_initialized = true; } + +public Q_SLOTS: + /** + * Send some text to the server using the connection. A newline will be sent afterwards. + */ + void sendText(const QString&); + void lookedUp(const QHostInfo &host); + +protected Q_SLOTS: + /** + * Read data from the socket and appropriate signals. + */ + void processLine(); + +Q_SIGNALS: + void hostLookup(); + void hostFound(); + void established(); + + /** + * Emitted when a partial line is received. + * + * @param text Received text. + * @param newDataOffset Offset where new data starts. + * @note Whenever a partial line is received, is it recorded in an internal buffer, + * and an offset is incremented, to distinguish new data from old data + * as the next payload arrives. + */ + void receivedText(QString text, int newDataOffset); + + /** + * Emitted when a full line is received. + * + * @param line Received line. + * @param newDataOffset Offset where new data starts. + * + * @sa receivedText + */ + void receivedLine(QString line, int newDataOffset); +}; + +#endif // CONNECTION_H diff --git a/src/console.cpp b/src/console.cpp new file mode 100644 index 0000000..51f7fce --- /dev/null +++ b/src/console.cpp @@ -0,0 +1,289 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "console.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "common.h" +#include "foreach.h" +#include "histlineedit.h" +#include "highlighter.h" +#include "mastersettings.h" + + +class BackInserterPatternIteratorAdaptor : public PatternListAdaptorOutputIterator { + std::vector& m_vector; +public: + BackInserterPatternIteratorAdaptor(std::vector& vector) + : m_vector(vector) { } + + virtual void add(const Highlighter::Pattern& p) { + m_vector.push_back(p); + } +}; + + +ConsoleOutput::ConsoleOutput(QTextEdit* edit, bool force_scroll) +: m_edit(edit) { + m_old_val = m_edit->verticalScrollBar()->value(); + m_scroll_to = force_scroll || (m_edit->verticalScrollBar()->value() + >= m_edit->verticalScrollBar()->maximum() ); + + QTextCursor cursor = m_edit->textCursor(); + cursor.movePosition(QTextCursor::End); + m_edit->setTextCursor(cursor); +} + +ConsoleOutput::~ConsoleOutput() { + if(m_scroll_to) + m_edit->verticalScrollBar()->setValue(m_edit->verticalScrollBar()->maximum()); + else + m_edit->verticalScrollBar()->setValue(m_old_val); + //m_edit->ensureCursorVisible(); +} + +void ConsoleOutput::operator()(const QString& text) { + m_edit->insertPlainText(text); +} + +LuaConsoleHighlighter::LuaConsoleHighlighter() +: m_display(0) { + KStandardDirs* dirs = KGlobal::dirs(); + + QString luaHighlightingLibrary = dirs->locate("appdata", "scripts/hllib.lua"); + kDebug() << "lua lib: " << luaHighlightingLibrary; + m_api.runFile(qPrintable(luaHighlightingLibrary)); + + QStringList highlighting = dirs->findAllResources("appdata", "highlighting/*.lua", KStandardDirs::Recursive); + foreach (QString f, highlighting) { + kDebug() << "lua highlighting file: " << f; + m_api.runFile(qPrintable(f)); + } +} + +void LuaConsoleHighlighter::setDisplay(QTextEdit* display) { + m_display = display; +} + +LuaConsoleHighlighter::Executor::Executor(QTextEdit* display, ConsoleOutput& output) +: m_display(display) +, m_output(output) { } + +void LuaConsoleHighlighter::Executor::writeChunk(const QString& text) { + m_output(text); +} + +void LuaConsoleHighlighter::Executor::setFormat(const QTextCharFormat& format) { + m_display->setCurrentCharFormat(format); +} + +LuaConsoleHighlighter::Executor::~Executor() { +// m_output("\n"); +} + +void LuaConsoleHighlighter::operator()(const QString& text, ConsoleOutput& output) { + QStringList lines = text.split('\n'); + + for (int i = 0; i < lines.size(); i++) { + const QString& line = lines[i]; + boost::scoped_ptr hline(m_api.highlight(line)); + if (hline) { + Executor executor(m_display, output); + hline->run(executor); + if (i < lines.size() - 1) output("\n"); + } + } +} + +#if 0 +ConsoleHighlighter::ConsoleHighlighter() +: m_display(0) { + BackInserterPatternIteratorAdaptor out(m_patterns); + Highlighter::load(out); +} + +void ConsoleHighlighter::setDisplay(QTextEdit* display) { + m_display = display; + m_basic_format = m_display->currentCharFormat(); +} + +void ConsoleHighlighter::operator()(const QString& text, ConsoleOutput& output) { + Q_ASSERT(m_display); + + int offset = 0; + m_display->setCurrentCharFormat(m_basic_format); + + while (true) { + int best = -1; + int best_offset = -1; + int best_length = 0; + + // try each pattern and find the closest matching one + for (uint i = 0; i < m_patterns.size(); i++) { + int match_offset = text.indexOf(m_patterns[i].pattern, offset); + if (match_offset >= 0 && + (best_offset == -1 || match_offset < best_offset)) { + int length = m_patterns[i].pattern.matchedLength(); + if (length > 0) { + best = i; + best_offset = match_offset; + best_length = length; + } + } + } + + if (best >= 0) { + // output the portion of the text before the matching + // substring +// kDebug() << "outputting plain: " << text.mid(offset, best_offset - offset); +// kDebug() << "weight = " << m_display->currentCharFormat().fontWeight(); + output(text.mid(offset, best_offset - offset)); + + // change format + m_display->setCurrentCharFormat(m_patterns[best].format); + + // output the matching substring +// kDebug() << "outputting formatted: " << text.mid(best_offset, best_length); +// kDebug() << "weight = " << m_display->currentCharFormat().fontWeight(); + output(text.mid(best_offset, best_length)); + + // restore basic format + m_display->setCurrentCharFormat(m_basic_format); +// kDebug() << "restored"; +// kDebug() << "weight = " << m_display->currentCharFormat().fontWeight(); + + // update offset + offset = best_offset + best_length; + } + else break; + } + + // output the last portion of the text +// kDebug() << "outputting plain: " << text.mid(offset); + output(text.mid(offset)); +// kDebug() << "weight = " << m_display->currentCharFormat().fontWeight(); +} +#endif + +QRegExp Console::promptRegexp("([a-zA-Z0-9]*% )"); + +Console::Console(QWidget* parent, const QString& caption) +: QWidget(parent) { + setObjectName("console"); + + resize(600,600); + setWindowTitle(caption); + + QBoxLayout* layout = new QVBoxLayout(this); + QHBoxLayout* promptLayout = new QHBoxLayout; + layout->setMargin(0); + layout->setSpacing(0); + promptLayout->setMargin(0); + promptLayout->setSpacing(0); + + edit = new HistLineEdit(this); + display = new QTextEdit(this); + prompt = new QLabel(this); + + setFocusProxy(edit); + + layout->addWidget(display); + layout->addLayout(promptLayout); + + promptLayout->addWidget(prompt); + promptLayout->addWidget(edit); + + display->setFocusProxy(edit); + display->setReadOnly(true); + ////display->setTextFormat(QTextEdit::PlainText); + display->setAcceptRichText(false); + display->setWordWrapMode (QTextOption::NoWrap); + display->setUndoRedoEnabled (false); + Settings s_console = settings().group("console"); + if (!s_console["font"]) { + QFont f = QApplication::font(); + f.setFamily("Monospace"); + s_console["font"] = f; + } + display->setFont(s_console["font"].value()); + + display->setFontWeight(QFont::Normal); + m_highlighter.setDisplay(display); + + connect(edit, SIGNAL(receivedInput(const QString&)), + this, SLOT(input(const QString&))); +} + +void Console::echo(const QString& text) { + ConsoleOutput output(display, true); + display->setFontWeight(QFont::Bold); + output(text + "\n"); + display->setFontWeight(QFont::Normal); +} + +void Console::input(const QString& text) { + if (edit->echoMode() == QLineEdit::Password) { +// edit->setEchoMode(QLineEdit::Normal); + echo("(password sent)"); + } + else { + // echo inputted text + echo(text); + } + + if (m_notifier) + m_notifier->textNotify(text); + receivedInput(text); +} + +void Console::displayText(QString text, int offset) { + if (offset == 0 && promptRegexp.indexIn(text) == 0) { + prompt->setText(" " + promptRegexp.cap(1)); + offset += promptRegexp.cap(1).length(); + } + + text = text.mid(offset); + text.replace("\t", " "); + + QByteArray bytes = text.toAscii(); + if (bytes.contains("\xff\xfc\x01")) { + edit->setEchoMode(QLineEdit::Normal); + } + else if (bytes.contains("\xff\xfb\x01")) { + edit->setEchoMode(QLineEdit::Password); + } + + if (text[offset].isPrint()) { + ConsoleOutput output(display); + m_highlighter(text, output); + } +} + +void Console::clear() { + display->clear(); +} + + + + diff --git a/src/console.h b/src/console.h new file mode 100644 index 0000000..6f7d0a1 --- /dev/null +++ b/src/console.h @@ -0,0 +1,53 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CONSOLE_H +#define CONSOLE_H + +#include +#include +#include +#include "histlineedit.h" +#include "console_p.h" + +class QLabel; +class QTextEdit; +class TextNotifier; + +class Console : public QWidget { +Q_OBJECT + HistLineEdit* edit; + QTextEdit* display; + QLabel* prompt; + static QRegExp promptRegexp; + boost::shared_ptr m_notifier; + LuaConsoleHighlighter m_highlighter; +public: + Console(QWidget* parent, const QString& caption); + inline QLineEdit* commandLine() const { return edit; } + void clear(); + void setNotifier(const boost::shared_ptr& notifier) { m_notifier = notifier; } +public Q_SLOTS: + void displayText(QString, int offset); + void echo(const QString&); +protected Q_SLOTS: + void input(const QString&); +Q_SIGNALS: + void receivedInput(const QString&); + void notify(); +}; + +class TextNotifier { +public: + virtual ~TextNotifier() { } + virtual void textNotify(const QString& text) = 0; +}; + +#endif // CONSOLE_H diff --git a/src/console_p.h b/src/console_p.h new file mode 100644 index 0000000..879e6cb --- /dev/null +++ b/src/console_p.h @@ -0,0 +1,69 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CONSOLE_P_H +#define CONSOLE_P_H + +#include "highlighter.h" +#include "hline.h" +#include "luaapi/luahl.h" +#include +class QTextEdit; + +//BEGIN ConsoleOutput --------------------------------------- + +/** + * An utility class to perform a simple output operation + * on a QTextEdit with RAII. + */ +class ConsoleOutput { + QTextEdit* m_edit; + int m_old_val; + bool m_scroll_to; +public: + ConsoleOutput(QTextEdit* edit, bool force_scroll = false); + + virtual ~ConsoleOutput(); + + virtual void operator()(const QString& text); +}; + +class ConsoleHighlighter { + std::vector m_patterns; + QTextEdit* m_display; + QTextCharFormat m_basic_format; +public: + ConsoleHighlighter(); + + void setDisplay(QTextEdit* display); + + void operator()(const QString& text, ConsoleOutput& output); +}; + +class LuaConsoleHighlighter { + QTextEdit* m_display; + LuaApi::Api m_api; + class Executor : public HLineExecutor { + QTextEdit* m_display; + ConsoleOutput& m_output; + public: + Executor(QTextEdit* display, ConsoleOutput& output); + virtual ~Executor(); + virtual void writeChunk(const QString& text); + virtual void setFormat(const QTextCharFormat& format); + }; +public: + LuaConsoleHighlighter(); + void setDisplay(QTextEdit* display); + void operator()(const QString& text, ConsoleOutput& output); +}; + + +#endif // CONSOLE_P_H diff --git a/src/constrainedtext.cpp b/src/constrainedtext.cpp new file mode 100644 index 0000000..7210d38 --- /dev/null +++ b/src/constrainedtext.cpp @@ -0,0 +1,99 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "constrainedtext.h" +#include + + +ConstrainedText::ConstrainedText(const QString& text, const QColor& color, + const QFont& font, const QRect& rect, + KGameCanvasAbstract* Constrained) + : KGameCanvasItem(Constrained) + , m_text(text) + , m_color(color) + , m_font(font) + , m_constr(rect) { + calcBoundingRect(); +} + +ConstrainedText::ConstrainedText(KGameCanvasAbstract* Constrained) + : KGameCanvasItem(Constrained) + //, m_text("") + , m_color(Qt::black) + , m_font(QApplication::font()) { + +} + +ConstrainedText::~ConstrainedText() { + +} + +void ConstrainedText::calcBoundingRect() { + QString test; + for(int i=0;isetPen(m_color); + p->setFont(m_font); + + double fact = qMin(double(m_constr.width())/m_bounding_rect_max.width(), + double(m_constr.height())/m_bounding_rect_max.height()); + QMatrix savem = p->matrix(); + //p->fillRect( m_constr, Qt::blue ); + p->translate(QRectF(m_constr).center()); + p->scale(fact, fact); + p->translate(-QRectF(m_bounding_rect_max).center()); + //p->fillRect( m_bounding_rect_max, Qt::red ); + p->drawText( QPoint((m_bounding_rect_max.width()-m_bounding_rect.width())/2,0), m_text); + p->setMatrix(savem); +} + +QRect ConstrainedText::rect() const { + return m_constr; //suboptimal. oh, well... +} diff --git a/src/constrainedtext.h b/src/constrainedtext.h new file mode 100644 index 0000000..234ada4 --- /dev/null +++ b/src/constrainedtext.h @@ -0,0 +1,51 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CONSTRAINEDTEXT_H +#define CONSTRAINEDTEXT_H + +#include + +class ConstrainedText : public KGameCanvasItem +{ +private: + QString m_text; + QColor m_color; + QFont m_font; + QRect m_constr; + QRect m_bounding_rect; + QRect m_bounding_rect_max; + + void calcBoundingRect(); + +public: + ConstrainedText(const QString& text, const QColor& color, + const QFont& font, const QRect& rect, + KGameCanvasAbstract* canvas = NULL); + + ConstrainedText(KGameCanvasAbstract* canvas = NULL); + + virtual ~ConstrainedText(); + + QRect constrainRect() const { return m_constr; } + void setConstrainRect(const QRect& ); + QString text() const { return m_text; } + void setText(const QString& text); + QColor color() const { return m_color; } + void setColor(const QColor& color); + QFont font() const { return m_font; } + void setFont(const QFont& font); + + virtual void paint(QPainter* p); + virtual QRect rect() const; + virtual bool layered() const { return false; } +}; + +#endif //CONSTRAINEDTEXT_H diff --git a/src/controllers/abstract.cpp b/src/controllers/abstract.cpp new file mode 100644 index 0000000..57a494a --- /dev/null +++ b/src/controllers/abstract.cpp @@ -0,0 +1,61 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "abstract.h" +#include "entities/userentity.h" + +Controller::Controller(ChessTable* view) +: m_view(view) { } + +Controller::~Controller() { } + +bool Controller::undo() { + return entity()->undo(); +} + +bool Controller::redo() { + return entity()->redo(); +} + +bool Controller::truncate() { + return entity()->truncate(); +} + +bool Controller::promoteVariation() { + return entity()->promoteVariation(); +} + +bool Controller::back() { + return entity()->back(); +} + +bool Controller::forward() { + return entity()->forward(); +} + +void Controller::gotoFirst() { + entity()->gotoFirst(); +} + +void Controller::gotoLast() { + entity()->gotoLast(); +} + +QString Controller::save() { + return entity()->save(); +} + +void Controller::loadPGN(const PGN& pgn) { + entity()->loadPGN(pgn); +} + +KUrl Controller::url() const { return m_url; } +void Controller::setUrl(const KUrl& url) { m_url = url; } + diff --git a/src/controllers/abstract.h b/src/controllers/abstract.h new file mode 100644 index 0000000..e45fadb --- /dev/null +++ b/src/controllers/abstract.h @@ -0,0 +1,207 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CONTROLLER_H +#define CONTROLLER_H + +#include +#include +#include +#include +#include "common.h" +#include "entitytoken.h" + +class ActionCollection; +class ChessTable; +class Engine; +class IColor; +class PGN; +class UI; +class UserEntity; + +/** + * @b Controller is the base abstract class for all controllers in Tagua. + * Tagua can be used in different modes, such as game editing or position editing. + * Each mode corresponds to a concrete subclass of Controller, and defines its behaviour + * in response to user events (history navigation, move executions...). + * By default, events are routed to the user entity returned by the virtual function + * entity. + */ +class Controller : public boost::enable_shared_from_this { +protected: + ChessTable* m_view; + virtual boost::shared_ptr entity() const = 0; + KUrl m_url; +public: + Controller(ChessTable* view); + virtual ~Controller(); + + /** + * Variant specific actions. + */ + virtual ActionCollection* variantActions() const = 0; + + /** + * Variant associated to the controller. + */ + virtual QString variant() const = 0; + + /** + * Terminate activity, create another controller and delegate everything to it. + * @return The delegate controller, or simply @b this if controller does not need + * to be terminated. + */ + virtual boost::shared_ptr end() { return shared_from_this(); } + + /** + * Detach from resources without disposing them. + */ + virtual void detach() { } + + /** + * Clear board. Undefined for almost all controllers. + * @return Whether the action has been successfully executed. + */ + virtual bool clearBoard() { return false; } + + /** + * Set starting position on the board. Undefined for almost all controllers. + * @return Whether the action has been successfully executed. + */ + virtual bool setStartingPosition() { return false; } + + /** + * Set a position on the board. Undefined for almost all controllers. + * @param fen The position to be set, in FEN notation. + * @return Whether the action has been successfully executed. + */ + virtual bool setFEN(const QString&) { return false; } + + /** + * Get a FEN string representing the current position on the board. + */ + virtual QString fen() { return ""; } + + /** + * @return current position, or a null shared_ptr if no current position + * concept is defined for this controller. + */ + virtual StatePtr currentPosition() const { return StatePtr(); } + + /** + * Change turn. Used for example in edit position mode. + */ + virtual void setTurn(int) { } + + /** + * Forward a movelist undo call. + */ + virtual bool undo(); + + /** + * Forward a movelist redo call. + */ + virtual bool redo(); + + /** + * Forward a movelist truncate call. + */ + virtual bool truncate(); + + /** + * Forward a movelist promote variation call. + */ + virtual bool promoteVariation(); + + /** + * Navigate back in history. + */ + virtual bool back(); + + /** + * Navigate forward in history. + */ + virtual bool forward(); + + /** + * Warp to the beginning of the history. + */ + virtual void gotoFirst(); + + /** + * Warp to the end of the history. + */ + virtual void gotoLast(); + + /** + * Save game. + */ + virtual QString save(); + + /** + * Load game from a PGN. + */ + virtual void loadPGN(const PGN&); + + /** + * Create a CTRL Action. + * @sa UI::createCtrlAction + */ + virtual void createCtrlAction() { } + + /** + * Destroy a CTRL Action. + * @sa UI::createCtrlAction. + */ + virtual void destroyCtrlAction() { }; + + /** + * Let an engine play as player @a side. + * @return a token which uniquely identifies the engine entity + * and can be used to remove it from the entity list. + */ + virtual EntityToken addPlayingEngine(const IColor* /*side*/, + const boost::shared_ptr&) { return EntityToken(); } + + /** + * Remove an entity from the controller list. + */ + virtual void removeEntity(const EntityToken&) { } + + virtual void reloadSettings() = 0; + + /** + * Set owning user interface. + * Used to setup callbacks towards the main window, like action state + * change notifications. + */ + virtual void setUI(UI& ui) = 0; + + /** + * Called whenever a controller becomes active in the main window. + */ + virtual void activate() = 0; + + /** + * Each controller has an associated URL that will be used for saving + * its content. + * @return The URL associated with this controller. + */ + virtual KUrl url() const; + + /** + * Set this controller's URL. + * @sa url() + */ + virtual void setUrl(const KUrl& url); +}; + + +#endif diff --git a/src/controllers/editgame.cpp b/src/controllers/editgame.cpp new file mode 100644 index 0000000..516cd85 --- /dev/null +++ b/src/controllers/editgame.cpp @@ -0,0 +1,331 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "editgame.h" +#include + +#include +#include +#include +#include + +#include "components.h" +#include "graphicalgame.h" +#include "graphicalsystem.h" +#include "xboardengine.h" +#include "entities/engineentity.h" +#include "entities/gameentity.h" +#include "entities/icsentity.h" +#include "entities/examinationentity.h" +#include "movelist_table.h" +#include "console.h" +#include "icsconnection.h" +#include "chesstable.h" +#include "foreach.h" +#include "actioncollection.h" +#include "ui.h" + +using namespace boost; + +class ClockAgent : public Agent { + ChessTable* m_view; + shared_ptr m_game; +public: + ClockAgent(ChessTable* view, const shared_ptr& game) + : m_view(view) + , m_game(game) { } + + virtual void notifyClockUpdate(int, int) { } + virtual void notifyMove(const Index& index) { + // start clock after the first 2 moves + if (index.totalNumMoves() >= 2) + m_view->run(); + + m_view->changeClock(m_game->position(index)->turn()->index()); + } + virtual void notifyBack() { } + virtual void notifyForward() { } + virtual void notifyGotoFirst() { } + virtual void notifyGotoLast() { } + virtual void stop() { + Agent::stop(); m_view->stopClocks(); + } +}; + +class ClockUpdateAgent : public Agent { + ChessTable* m_view; +public: + ClockUpdateAgent(ChessTable* view) + : m_view(view) { } + + virtual void notifyClockUpdate(int white, int black) { + m_view->updateTime(white, black); + } + virtual void notifyMove(const Index&) { } + virtual void notifyBack() { } + virtual void notifyForward() { } + virtual void notifyGotoFirst() { } + virtual void notifyGotoLast() { } +}; + +EditGameController::EditGameController(ChessTable* view, + const StatePtr& startingPosition) +: Controller(view) +, m_components(view->components()) { + + StatePtr state = startingPosition; + if (!state) { + state = StatePtr(m_components->createState()); + state->setup(); + } + + m_graphical = shared_ptr(new GraphicalSystem(m_view, state, m_components)); + + m_game = shared_ptr(new GraphicalGame(m_graphical.get(), + m_view->moveListTable())); + m_game->reset(state); + + m_entity = shared_ptr(new GameEntity(m_components, m_game, m_view->board(), &m_agents)); + m_entity->enableEditingTools(true); + + m_graphical->setup(m_entity); + m_game->setEntity(m_entity); + + init(state); +} + +EditGameController::~EditGameController() { } + +void EditGameController::init(const StatePtr& startingPosition) { + foreach (const IColor* c, m_components->players()) { + m_players[c] = m_entity; + m_entity->turnTest().setSimplePolicy(c, true); + } + + if (startingPosition) { + // TODO update to the starting position + } + + // add user agent + m_agents.addAgent(m_entity); + + m_clock_agent = shared_ptr(new ClockAgent(m_view, m_game)); + m_update_agent = shared_ptr(new ClockUpdateAgent(m_view)); + + // add clock update agent + m_agents.addAgent(m_update_agent); +} + +ActionCollection* EditGameController::variantActions() const { + return 0; // FIXME restore variant actions + // return m_components->actions(); +} + +QString EditGameController::variant() const { + return m_components->variant()->name(); +} + +void EditGameController::onNavigation() { } + +EntityToken EditGameController::addPlayingEngine(const IColor* side, const shared_ptr& engine) { + if (!engine) + return EntityToken(); + + if (m_players[side]->canDetach()) { + shared_ptr entity(new EngineEntity(m_components, m_game, side, + engine, &m_agents)); + entity->setup(); + + m_agents.addAgent(entity); + m_players[side] = entity; + + // the user cannot move the entity's pieces + m_entity->turnTest().setSimplePolicy(side, false); + + return EntityToken(entity); + } + else { + kDebug() << "** could not detach entity playing " << side << "**"; + } + + return EntityToken(); +} + +void EditGameController::removeEntity(const EntityToken& token) { + shared_ptr entity = token.entity(); + if (entity) { + // check players + for (Players::iterator it = m_players.begin(), end = m_players.end(); + it != end; ++it) { + if (entity == it->second) { + it->second = m_entity; + m_entity->turnTest().setSimplePolicy(it->first, true); + } + } + + // check other entities + std::set >::iterator it = m_entities.find(entity); + if (it != m_entities.end()) { + m_entities.erase(it); + } + } + kDebug() << "there are " << m_entities.size() << " entities left"; +} + +bool EditGameController::addICSPlayer(const IColor* side, int game_number, + const shared_ptr& connection) { + if (m_players[side]->canDetach()) { + shared_ptr entity(new ICSEntity(m_components, m_game, + side, game_number, connection, &m_agents)); + + if (entity->attach()) { + kDebug() << "added ICS agent " << entity.get(); + m_agents.addAgent(entity); + + m_players[side] = entity; + connection->setListener(game_number, entity); + + entity->setupTurnTest(m_entity->turnTest()); + // FIXME: flip if we are black when playing in ICS +// m_view->flip(m_players[1] == m_entity); // flip if we're black! + + m_agents.addAgent(m_clock_agent); + } + else { + kDebug() << "** could not attach ics entity **"; + return false; + } + } + else { + kDebug() << "** could not detach entity playing " << side << "**"; + return false; + } + + return true; +} + +bool EditGameController::setExaminationMode(int game_number, const shared_ptr& connection) { + kDebug() << "setting examination mode"; + + if (detachAllPlayerEntities()) { + shared_ptr entity(new ExaminationEntity(m_components, m_game, + game_number, connection, &m_agents)); + if (entity->attach()) { + m_entity = entity; + m_view->setEntity(entity); + m_agents.addAgent(entity); + for (Players::iterator it = m_players.begin(), end = m_players.end(); + it != end; ++it) { + it->second = entity; + } + + connection->setListener(game_number, entity); + m_view->flip(false); + m_entity->turnTest().clear(); + + return true; + } + else { + kWarning() << "Could not attach examination entity"; + } + } + return false; +} + +bool EditGameController::setObserveMode(int game_number, const shared_ptr& connection) { + if (detachAllPlayerEntities()) { + shared_ptr entity(new ObservingEntity(m_components, m_game, + game_number, connection, &m_agents)); + + if (entity->attach()) { + m_agents.addAgent(entity); + for (Players::iterator it = m_players.begin(), end = m_players.end(); + it != end; ++it) { + it->second = entity; + } + + connection->setListener(game_number, entity); + m_view->flip(false); + m_entity->turnTest().clear(); + return true; + } + else + kWarning() << "Could not attach ics entity for observe mode"; + } + else + kWarning() << "Could not detach entity"; + + return false; +} + +void EditGameController::loadPGN(const PGN& pgn) { + end(); + m_view->resetClock(); + entity()->loadPGN(pgn); +} + +void EditGameController::createCtrlAction() { + m_game->createCtrlAction(); +} + +void EditGameController::destroyCtrlAction() { + m_game->destroyCtrlAction(); +} + +void EditGameController::detach() { + m_entity->detach(); + detachAllPlayerEntities(); + + foreach (shared_ptr entity, m_entities) + entity->detach(); +} + +shared_ptr EditGameController::end() { + // stop clocks + if (m_clock_agent) { + m_clock_agent->stop(); + m_clock_agent = shared_ptr(new ClockAgent(m_view, m_game)); + } + + // return to edit game mode + for (Players::iterator it = m_players.begin(), end = m_players.end(); + it != end; ++it) { + it->second = m_entity; + m_entity->turnTest().setSimplePolicy(it->first, true); + } + + return Controller::end(); +} + +void EditGameController::reloadSettings() { + m_graphical->settingsChanged(); +} + +void EditGameController::setUI(UI& ui) { + m_game->setActionStateObserver(ui.createActionStateObserver(shared_from_this())); + m_game->onActionStateChange(); +} + +void EditGameController::activate() { + m_game->onActionStateChange(); +} + + +bool EditGameController::detachAllPlayerEntities() { + for (Players::iterator it = m_players.begin(), end = m_players.end(); + it != end; ++it) { + if (!it->second->canDetach()) { + kWarning() << "Could not detach entity" << it->second.get(); + return false; + } + } + + return true; +} diff --git a/src/controllers/editgame.h b/src/controllers/editgame.h new file mode 100644 index 0000000..10654a8 --- /dev/null +++ b/src/controllers/editgame.h @@ -0,0 +1,88 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef EDITGAMECONTROLLER_H +#define EDITGAMECONTROLLER_H + +#include +#include +#include +#include +#include "abstract.h" +#include "agentgroup.h" + +class Entity; +class Engine; +class Agent; +class IColor; +class ICSConnection; +class UserEntity; +class GraphicalGame; +class GraphicalSystem; +class Components; + + +/** + * @brief A controller to edit or play games. + * + * EditGameController is used to play games, either locally or + * on an ICS server. A pair of entities #m_players, representing + * the two players, is mantained as well as a set of additional entities, + * #m_entities. + * If an entity needs to be notified about how the game progresses, one + * should register it as an agent, adding it to #m_agents. + */ +class EditGameController : public Controller { + void init(const StatePtr& state); + boost::shared_ptr m_clock_agent; + boost::shared_ptr m_update_agent; + typedef std::map > Players; +protected: + virtual void onNavigation(); + + boost::shared_ptr m_entity; + boost::shared_ptr m_graphical; + AgentGroup m_agents; + Components* m_components; + boost::shared_ptr m_game; + virtual boost::shared_ptr entity() const { return m_entity; } + Players m_players; + std::set > m_entities; + + bool detachAllPlayerEntities(); +public: + EditGameController(ChessTable*, const StatePtr& startingPos = StatePtr()); + ~EditGameController(); + + virtual ActionCollection* variantActions() const; + virtual QString variant() const; + EntityToken addPlayingEngine(const IColor* side, const boost::shared_ptr& engine); +// EntityToken addAnalysingEngine(const boost::shared_ptr& engine); + void removeEntity(const EntityToken& token); + bool addICSPlayer(const IColor* side, int game_number, + const boost::shared_ptr& connection); + bool setExaminationMode(int game_number, const boost::shared_ptr& connection); + bool setObserveMode(int game_number, const boost::shared_ptr& connection); + + virtual void loadPGN(const PGN&); + + virtual void createCtrlAction(); + virtual void destroyCtrlAction(); + + virtual boost::shared_ptr end(); + virtual void detach(); + + virtual void reloadSettings(); + virtual void setUI(UI& ui); + virtual void activate(); +}; + + +#endif diff --git a/src/controllers/editposition.cpp b/src/controllers/editposition.cpp new file mode 100644 index 0000000..ebebe9b --- /dev/null +++ b/src/controllers/editposition.cpp @@ -0,0 +1,355 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "editposition.h" +#include "graphicalsystem.h" +#include "entities/userentity.h" +#include "piecefunction.h" + +#if 0 +//BROKEN +using namespace boost; + +//BEGIN UndoHistory + +UndoHistory::UndoHistory() { + m_index = 0; +} + +void UndoHistory::add(const UndoAction& action) { + m_history.erase(m_history.begin() + m_index, + m_history.end()); + m_history.push_back(action); + m_index++; +} + +const UndoAction* UndoHistory::undo() { + if (m_index <= 0) return 0; + + m_index--; + return &m_history[m_index]; +} + +const UndoAction* UndoHistory::redo() { + if (m_index >= m_history.size()) return 0; + + UndoAction* res = &m_history[m_index]; + m_index++; + return res; +} + +//END UndoHistory + +class EditAction : public AbstractMove { + typedef variant UserMove; + UserMove m_move; + + class ConvertToNormalUserMove : public static_visitor { + public: + NormalUserMove operator()(const NormalUserMove& m) const { + return m; + } + + NormalUserMove operator()(const DropUserMove& m) const { + return NormalUserMove(Point::invalid(), m.m_to); + } + }; +public: + EditAction(const UserMove& move) + : m_move(move) { } + virtual QString SAN(boost::shared_ptr) const { return QString(); } + virtual DecoratedMove toDecoratedMove(boost::shared_ptr) const { + return DecoratedMove(); } + virtual QString toString(boost::shared_ptr) const { return QString(); } + virtual NormalUserMove toUserMove() const { + return apply_visitor(ConvertToNormalUserMove(), m_move); + } + virtual AbstractPiece::Ptr pieceHint() const { + if (const DropUserMove* move = get(&m_move)) + return move->m_piece; + else + return AbstractPiece::Ptr(); + } + virtual bool equals(AbstractMove::Ptr /*other*/) const { +// EditAction* move = dynamic_cast(other.get()); +// return move && (m_move == move->m_move); + // FIXME: the above does not compile + return false; + } + + UserMove& move() { return m_move; } +}; + +class EditPositionEntity : public UserEntity { + struct EditPositionEntityInternal { + shared_ptr m_graphical; + VariantInfo* m_variant; + EditPositionEntityInternal(const shared_ptr& graphical, + VariantInfo* variant) + : m_graphical(graphical) + , m_variant(variant) { } + }; + EditPositionEntityInternal m_data; + UndoHistory& m_undo_history; + + class ExecuteMoveVisitor : public static_visitor { + EditPositionEntityInternal& m_data; + public: + ExecuteMoveVisitor(EditPositionEntityInternal& data) + : m_data(data) { } + + UndoAction operator()(const NormalUserMove& move) { + if (move.to.valid()) { + Element removedElement = m_data.m_graphical->getElement(move.to); + m_data.m_graphical->setElement( + move.to, + m_data.m_graphical->getElement(move.from)); + m_data.m_graphical->adjustSprite(move.to); + m_data.m_graphical->removeElement(move.from); + return MoveAction(move.from, move.to, removedElement.piece()); + } + else { + Element removedElement = m_data.m_graphical->getElement(move.from); + m_data.m_graphical->removeElement(move.from); + return RemoveAction(move.from, removedElement.piece()); + } + } + + UndoAction operator()(const DropUserMove& move) { + AbstractPiece::Ptr dropped = move.m_piece; + m_data.m_graphical->setPiece( + move.m_to, + dropped, + true); + m_data.m_graphical->adjustSprite(move.m_to); + return DropAction(move.m_to, dropped); + } + }; + + class UndoActionVisitor : public static_visitor { + EditPositionEntityInternal& m_data; + public: + UndoActionVisitor(EditPositionEntityInternal& data) + : m_data(data) { } + + void operator()(const DropAction& action) { + m_data.m_graphical->removeElement(action.m_to); + } + + void operator()(const RemoveAction& action) { + if (action.m_piece) + m_data.m_graphical->setPiece(action.m_to, action.m_piece); + } + + void operator()(const MoveAction& action) { + m_data.m_graphical->setElement( + action.m_from, + m_data.m_graphical->getElement(action.m_to)); + if (action.m_piece) + m_data.m_graphical->setPiece(action.m_to, action.m_piece); + else + m_data.m_graphical->removeElement(action.m_to); + m_data.m_graphical->adjustSprite(action.m_from); + } + + void operator()(const WarpAction& action) { + kDebug() << "undo warp from:"; + kDebug() << action.m_from->fen(0, 0); + kDebug() << "to"; + kDebug() << action.m_to->fen(0, 0); + m_data.m_graphical->warp(AbstractMove::Ptr(), action.m_from); + } + }; + + class RedoActionVisitor : public static_visitor { + EditPositionEntityInternal& m_data; + public: + RedoActionVisitor(EditPositionEntityInternal& data) + : m_data(data) { } + + void operator()(const DropAction& action) { + if (action.m_piece) + m_data.m_graphical->setPiece(action.m_to, action.m_piece); + } + + void operator()(const RemoveAction& action) { + m_data.m_graphical->removeElement(action.m_to); + } + + void operator()(const MoveAction& action) { + m_data.m_graphical->setElement( + action.m_to, + m_data.m_graphical->getElement(action.m_from)); + m_data.m_graphical->removeElement(action.m_from); + m_data.m_graphical->adjustSprite(action.m_to); + } + + void operator()(const WarpAction& action) { + m_data.m_graphical->warp(AbstractMove::Ptr(), action.m_to); + } + }; +public: + EditPositionEntity(VariantInfo* variant, + const shared_ptr& graphical, + UndoHistory& undo_history) + : UserEntity(0) + , m_data(graphical, variant) + , m_undo_history(undo_history) { } + + virtual QString save() const { return ""; } + virtual void loadPGN(const PGN&) { } + + virtual AbstractMove::Ptr testMove(const NormalUserMove& m) const { + return AbstractMove::Ptr(new EditAction(m)); + } + + virtual AbstractMove::Ptr testMove(const DropUserMove& m) const { + return AbstractMove::Ptr(new EditAction(m)); + } + + virtual bool testPremove(const NormalUserMove&) const { return false; } + virtual bool testPremove(const DropUserMove&) const { return false; } + + virtual void executeMove(AbstractMove::Ptr move) { + EditAction* action = dynamic_cast(move.get()); + if (action) { + ExecuteMoveVisitor visitor(m_data); + UndoAction undo_action = apply_visitor(visitor, action->move()); + m_undo_history.add(undo_action); + } + } + + virtual void handleRightClick(const Point& p) const { + Element removedElement = m_data.m_graphical->getElement(p); + UndoAction action = RemoveAction(p, removedElement.piece()); + m_data.m_graphical->removeElement(p); + m_undo_history.add(action); + } + + virtual void addPremove(const NormalUserMove&) { } + virtual void addPremove(const DropUserMove&) { } + virtual void cancelPremove() { } + + virtual Action validTurn(const Point&) const { return Moving; } + virtual Action validTurn(int) const { return Moving; } + virtual bool movable(const Point&) const { return true; } + virtual bool jump(const Index&) { return false; } + virtual bool goTo(const Index&) { return false; } + virtual bool gotoFirst() { return false; } + virtual bool gotoLast() { return false; } + virtual bool forward() { return false; } + virtual bool back() { return false; } + + virtual bool undo() { + if (const UndoAction* action = m_undo_history.undo()) { + UndoActionVisitor visitor(m_data); + apply_visitor(visitor, *action); + return true; + } + else return false; + } + + virtual bool redo() { + if (const UndoAction* action = m_undo_history.redo()) { + RedoActionVisitor visitor(m_data); + apply_visitor(visitor, *action); + return true; + } + else return false; + } + + virtual bool truncate() { return false; } + virtual bool promoteVariation() { return false; } + + virtual void notifyClockUpdate(int, int) { } + virtual void notifyMove(AbstractMove::Ptr, AbstractPosition::Ptr) { } + virtual void notifyBack() { } + virtual void notifyForward() { } + virtual void notifyGotoFirst() { } + virtual void notifyGotoLast() { } +}; + +class FillPool : public PieceFunction { + shared_ptr m_graphical; + VariantInfo* m_variant; +public: + FillPool(VariantInfo* variant, const shared_ptr& graphical) + : m_graphical(graphical) + , m_variant(variant) { } + + virtual void operator()(int color, int type) { + m_graphical->addToPool( + m_variant->createPiece(color, type), + 1 + ); + } +}; + +EditPositionController::EditPositionController(ChessTable* view, VariantInfo* variant) +: Controller(view) +, m_variant(variant) { + m_graphical = shared_ptr( + new GraphicalInfo(m_view, AbstractPosition::Ptr(), m_variant)); + m_entity = shared_ptr( + new EditPositionEntity(m_variant, m_graphical, m_undo_history)); + m_graphical->setup(m_entity); + + FillPool fill_pool(m_variant, m_graphical); + m_variant->forallPieces(fill_pool); +} + +shared_ptr EditPositionController::entity() const { + return m_entity; +} + +bool EditPositionController::clearBoard() { + AbstractPosition::Ptr position = m_variant->createPosition(); + m_undo_history.add(WarpAction(m_graphical->position()->clone(), position)); + m_graphical->warp(AbstractMove::Ptr(), position); + return true; +} + +bool EditPositionController::setStartingPosition() { + AbstractPosition::Ptr startingPosition = m_variant->createPosition(); + startingPosition->setup(); + kDebug() << "adding warp to undo history:"; + kDebug() << m_graphical->position()->fen(0, 0); + kDebug() << startingPosition->fen(0, 0); + m_undo_history.add(WarpAction(m_graphical->position()->clone(), startingPosition)); + m_graphical->warp(AbstractMove::Ptr(), startingPosition); + return true; +} + +QString EditPositionController::fen() { + return m_graphical->position()->fen(0,0); +} + +bool EditPositionController::setFEN(const QString& fen) { + AbstractPosition::Ptr pos = m_variant->createPositionFromFEN(fen); + if (pos) { + kDebug() << "warping to fen " << fen; + m_undo_history.add(WarpAction(m_graphical->position()->clone(), pos)); + m_graphical->warp(AbstractMove::Ptr(), pos); + return true; + } + else { + kDebug() << "invalid fen"; + return false; + } +} + +void EditPositionController::setTurn(int turn) { + m_graphical->setTurn(turn); +} + +AbstractPosition::Ptr EditPositionController::currentPosition() const { + return m_graphical->position(); +} +#endif diff --git a/src/controllers/editposition.h b/src/controllers/editposition.h new file mode 100644 index 0000000..5d8b5a4 --- /dev/null +++ b/src/controllers/editposition.h @@ -0,0 +1,108 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef EDITPOSITIONCONTROLLER_H +#define EDITPOSITIONCONTROLLER_H + +#include "abstract.h" +#include +#include +#include + +#if 0 +//BROKEN +class VariantInfo; +class GraphicalInfo; +class EditPositionEntity; + +//BEGIN UndoAction + +class DropAction { +public: + Point m_to; + AbstractPiece::Ptr m_piece; + DropAction(const Point& to, AbstractPiece::Ptr piece) + : m_to(to) + , m_piece(piece) { } +}; + +class RemoveAction { +public: + Point m_to; + AbstractPiece::Ptr m_piece; + RemoveAction(const Point& to, AbstractPiece::Ptr piece) + : m_to(to) + , m_piece(piece) { } +}; + +class MoveAction { +public: + Point m_from; + Point m_to; + AbstractPiece::Ptr m_piece; + MoveAction(const Point& from, const Point& to, AbstractPiece::Ptr piece) + : m_from(from) + , m_to(to) + , m_piece(piece) { } +}; + +class WarpAction { +public: + AbstractPosition::Ptr m_from; + AbstractPosition::Ptr m_to; + WarpAction(AbstractPosition::Ptr from, AbstractPosition::Ptr to) + : m_from(from) + , m_to(to) { } +}; + +typedef boost::variant UndoAction; + +class UndoHistory { + typedef std::vector Vector; + Vector m_history; + uint m_index; +public: + UndoHistory(); + void add(const UndoAction& action); + const UndoAction* undo(); + const UndoAction* redo(); +}; + +//END UndoAction + +class EditPositionController : public Controller { + boost::shared_ptr m_graphical; + boost::shared_ptr m_entity; + UndoHistory m_undo_history; + VariantInfo* m_variant; +protected: + virtual boost::shared_ptr entity() const; +public: + EditPositionController(ChessTable* view, VariantInfo* variant); + virtual boost::shared_ptr end() { return shared_from_this(); } + virtual bool clearBoard(); + virtual bool setStartingPosition(); + virtual bool setFEN(const QString&); + virtual QString fen(); + + virtual void setPromotionType(int) { } + + virtual void setTurn(int); + + virtual void handleMoveList(const class PGN&) { } + virtual QString save() { return ""; } + virtual void loadPGN(const PGN&) { } + + virtual AbstractPosition::Ptr currentPosition() const; + +}; +#endif + +#endif // EDITPOSITIONCONTROLLER_H diff --git a/src/controllers/entitytoken.cpp b/src/controllers/entitytoken.cpp new file mode 100644 index 0000000..f00c1d4 --- /dev/null +++ b/src/controllers/entitytoken.cpp @@ -0,0 +1,20 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "entitytoken.h" + +EntityToken::EntityToken(const boost::shared_ptr& entity) +: m_entity(entity) { } + +EntityToken::EntityToken() { } + +boost::shared_ptr EntityToken::entity() const { return m_entity.lock(); } + +bool EntityToken::valid() const { return entity(); } diff --git a/src/controllers/entitytoken.h b/src/controllers/entitytoken.h new file mode 100644 index 0000000..612567c --- /dev/null +++ b/src/controllers/entitytoken.h @@ -0,0 +1,30 @@ +/* + Copyright (c) 2006-2007 Paolo Capriotti + (c) 2006-2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ENTITYTOKEN_H +#define ENTITYTOKEN_H + +#include +#include +#include + +class Entity; + +class EntityToken { + boost::weak_ptr m_entity; +public: + EntityToken(const boost::shared_ptr& entity); + EntityToken(); + + boost::shared_ptr entity() const; + bool valid() const; +}; + +#endif // ENTITYTOKEN_H diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt new file mode 100644 index 0000000..d26e4da --- /dev/null +++ b/src/core/CMakeLists.txt @@ -0,0 +1,47 @@ +set(taguacore_SRCS + animation.cpp + animator.cpp + baseanimator.cpp + behaviour.cpp + board.cpp + color.cpp + component.cpp + defaultpolicy.cpp + defaultpool.cpp + defaultpoolcollection.cpp + defaultstate.cpp + defaulttype.cpp + dropanimator.cpp + move.cpp + moveserializer.cpp + namer.cpp + namedsprite.cpp + pathinfo.cpp + piece.cpp + point.cpp + policy.cpp + pool.cpp + poolcollection.cpp + promotionmanager.cpp + repository.cpp + state.cpp + statefactory.cpp + taguaapi.cpp + taguaobject.cpp + type.cpp + turnpolicy.cpp + validator.cpp + variantloader.cpp +) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +kde4_add_library(taguacore SHARED ${taguacore_SRCS}) + +target_link_libraries(taguacore + ${KDE4_KDECORE_LIBS} +) + +install(TARGETS taguacore DESTINATION ${LIB_INSTALL_DIR}) + +install(FILES tagua-variant.desktop + DESTINATION ${SERVICETYPES_INSTALL_DIR}) diff --git a/src/core/animation.cpp b/src/core/animation.cpp new file mode 100644 index 0000000..b105735 --- /dev/null +++ b/src/core/animation.cpp @@ -0,0 +1,19 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "animation.h" + +Animation::~Animation() { } + +bool Animation::sticky() const { return false; } + +void Animation::addPreAnimation(AnimationPtr) { } + +void Animation::addPostAnimation(AnimationPtr) { } + diff --git a/src/core/animation.h b/src/core/animation.h new file mode 100644 index 0000000..c7d186a --- /dev/null +++ b/src/core/animation.h @@ -0,0 +1,37 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__ANIMATION_H +#define CORE__ANIMATION_H + +#include +#include "animation_fwd.h" +#include "export.h" + +class TAGUA_EXPORT Animation : public boost::enable_shared_from_this { +protected: + enum State { + Active, + Inactive, + Aborted + }; +public: + virtual ~Animation(); + virtual bool sticky() const; + + virtual State animationAdvance(int msec) = 0; + virtual void stop() = 0; + virtual void abort() = 0; + + virtual void addPreAnimation(AnimationPtr anim); + virtual void addPostAnimation(AnimationPtr anim); +}; + +#endif // CORE__ANIMATION_H + diff --git a/src/core/animation_fwd.h b/src/core/animation_fwd.h new file mode 100644 index 0000000..08be6c9 --- /dev/null +++ b/src/core/animation_fwd.h @@ -0,0 +1,19 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__ANIMATION_FWD_H +#define CORE__ANIMATION_FWD_H + +#include + +class Animation; +typedef boost::shared_ptr AnimationPtr; + +#endif // CORE__ANIMATION_FWD_H + diff --git a/src/core/animator.cpp b/src/core/animator.cpp new file mode 100644 index 0000000..03e889e --- /dev/null +++ b/src/core/animator.cpp @@ -0,0 +1,17 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "animator.h" + +IWarper::~IWarper() { } + +IAnimator::~IAnimator() { } + +IAnimatorFactory::~IAnimatorFactory() { } + diff --git a/src/core/animator.h b/src/core/animator.h new file mode 100644 index 0000000..60cc524 --- /dev/null +++ b/src/core/animator.h @@ -0,0 +1,76 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__ANIMATOR_H +#define CORE__ANIMATOR_H + +#include "animation_fwd.h" +#include "export.h" + +class INamer; +class IState; +class Move; +class TaguaAPI; + +/** + * @brief A Warper defines graphical transition between unrelated states. + */ +class TAGUA_EXPORT IWarper { +public: + virtual ~IWarper(); + + /** + * Instantly update the graphical position using the given state. + */ + virtual AnimationPtr warp(const IState* state) = 0; +}; + +/** + * @brief An Animator defines graphical transition between two game states. + * + * An animator is a class which is given a difference between a graphical + * position and a game state, and schedules an animation which performs the + * update. + * + * If the difference is due to a move, the animator tries to interpret it + * following the rules of the game to get to the final state. + * + * If the process does not succeed exactly (i.e. if the updated graphical + * position does not equal the given final state), the animator is required + * to force equality using a direct update. + */ +class TAGUA_EXPORT IAnimator : public IWarper { +public: + virtual ~IAnimator(); + + /** + * Animate forward syncing to the given state. + */ + virtual AnimationPtr forward(const Move& move, const IState* state) = 0; + + /** + * Animate backward syncing to the given state. + */ + virtual AnimationPtr back(const Move& move, const IState* state) = 0; + + /** + * Set the warper object. + */ + virtual void setWarper(IWarper* warper) = 0; +}; + +class TAGUA_EXPORT IAnimatorFactory { +public: + virtual ~IAnimatorFactory(); + + virtual IAnimator* create(TaguaAPI* api, const INamer* namer) const = 0; +}; + +#endif // CORE__ANIMATOR_H + diff --git a/src/core/baseanimator.cpp b/src/core/baseanimator.cpp new file mode 100644 index 0000000..4c068f7 --- /dev/null +++ b/src/core/baseanimator.cpp @@ -0,0 +1,66 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "baseanimator.h" + +#include "animation.h" +#include "board.h" +#include "namer.h" +#include "piece.h" +#include "state.h" +#include "taguaapi.h" + +BaseAnimator::BaseAnimator(TaguaAPI* api, const INamer* namer) +: m_api(api) +, m_namer(namer) { } + +AnimationPtr BaseAnimator::warp(const IState* state) { + const IState* current = m_api->state(); + AnimationPtr res = m_api->group("default"); + + for (int i = 0; i < current->board()->size().x; i++) { + for (int j = 0; j < current->board()->size().y; j++) { + Point p(i, j); + + NamedSprite sprite = m_api->getSprite(p); + const Piece* piece = state->board()->get(p); + AnimationPtr anim; + + if (!sprite && piece != NULL && *piece != Piece()) { + anim = m_api->appear(m_api->setPiece(p, *piece, false), "instant"); + } + + else if (sprite && (piece == NULL || *piece == Piece())) { + m_api->takeSprite(p); + anim = m_api->disappear(sprite, "instant"); + } + + // sprite and piece differ + else if (sprite && piece != NULL && *piece != Piece() && + m_namer->name(*piece) != sprite.name()) { + m_api->takeSprite(p); + anim = m_api->morph(sprite, m_api->setPiece(p, *piece, false), "instant"); + } + + res->addPreAnimation(anim); + } + } + + return res; +} + +AnimationPtr BaseAnimator::forward(const Move&, const IState*) { + return AnimationPtr(); +} + +AnimationPtr BaseAnimator::back(const Move&, const IState*) { + return AnimationPtr(); +} + + diff --git a/src/core/baseanimator.h b/src/core/baseanimator.h new file mode 100644 index 0000000..022a7ea --- /dev/null +++ b/src/core/baseanimator.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__BASEANIMATOR_H +#define CORE__BASEANIMATOR_H + +#include "component.h" +#include "animation_fwd.h" +#include "animator.h" + +class INamer; +class TaguaAPI; + +class TAGUA_EXPORT BaseAnimator : public Component, public IAnimator { +protected: + TaguaAPI* m_api; + const INamer* m_namer; +public: + BaseAnimator(TaguaAPI* api, const INamer* namer); + + virtual AnimationPtr warp(const IState* state); + virtual AnimationPtr forward(const Move& move, const IState* state); + virtual AnimationPtr back(const Move& move, const IState* state); +}; + +#endif // CORE__BASEANIMATOR_H + diff --git a/src/core/behaviour.cpp b/src/core/behaviour.cpp new file mode 100644 index 0000000..b4a3a9f --- /dev/null +++ b/src/core/behaviour.cpp @@ -0,0 +1,13 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "behaviour.h" + +IBehaviour::~IBehaviour() { } + diff --git a/src/core/behaviour.h b/src/core/behaviour.h new file mode 100644 index 0000000..c5f345d --- /dev/null +++ b/src/core/behaviour.h @@ -0,0 +1,65 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__BEHAVIOUR_H +#define CORE__BEHAVIOUR_H + +#include "export.h" +#include "point.h" + +class IColor; +class IState; +class Move; + +/** + * @brief Encapsulates general rules on piece movement. + */ +class TAGUA_EXPORT IBehaviour { +public: + virtual ~IBehaviour(); + + /** + * Perform a capture on a given square. In variants with drops, this + * adds the captured piece to the opponent pool. In games like chess, + * this does nothing. + */ + virtual void captureOn(IState* state, const Point& square) const = 0; + + /** + * Set the moving piece in its destination square, without affecting + * the current turn or flags. + * This is a helper function normally called by move. + */ + virtual void move(IState* state, const Move& m) const = 0; + + /** + * Set next turn as the current turn. + */ + virtual void advanceTurn(IState* state) const = 0; + + /** + * @return The square where a given move would capture if executed. + */ + virtual Point captureSquare(const IState* state, const Move& m) const = 0; + + /** + * @return The opponent of @a color. + */ + virtual const IColor* opponent(const IColor* player) const = 0; + + /** + * Players can have associated directions. For example, in chess, + * white pieces move towards the 8th rank. + * Associated directions are often used during move validation. + * @return Direction associated with @a player. + */ + virtual Point direction(const IColor* player) const = 0; +}; + +#endif // CORE__BEHAVIOUR_H diff --git a/src/core/board.cpp b/src/core/board.cpp new file mode 100644 index 0000000..1fed6de --- /dev/null +++ b/src/core/board.cpp @@ -0,0 +1,128 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "board.h" +#include "piece.h" + +#include + +Board::Board(const Point& size) +: m_size(size) { + m_data.resize(m_size.x * m_size.y); +} + +Board::Board(const Board* other) +: m_size(other->m_size) +, m_data(other->m_data) { } + +bool Board::equals(const Board* other) const { + if (m_size != other->m_size) + return false; + + const unsigned int total = m_data.size(); + for (unsigned int i = 0; i < total; i++) { + if (m_data[i] != other->m_data[i]) + return false; + } + + return true; +} + +Point Board::size() const { return m_size; } + +const Piece* Board::get(const Point& p) const { + if (valid(p)) { + return &m_data[p.x + p.y * m_size.x]; + } + else { + return NULL; + } +} + +// FIXME: solve this code duplication +Piece* Board::get(const Point& p) { + if (valid(p)) { + return &m_data[p.x + p.y * m_size.x]; + } + else { + return NULL; + } +} + +void Board::set(const Point& p, const Piece& piece) { + if (valid(p)) { + m_data[p.x + p.y * m_size.x] = piece; + } + else + kError() << "point is not valid" << p; +} + +bool Board::valid(const Point& p) const { + return p.x < m_size.x && + p.x >= 0 && + p.y < m_size.y && + p.y >= 0; +} + +PathInfo Board::path(const Point& from, const Point& to) const { + if (!valid(from) || !valid(to)) + return PathInfo(PathInfo::Undefined, 0); + + Point delta = to - from; + PathInfo::Direction direction; + + if (delta.x == 0) + direction = PathInfo::Vertical; + else if (delta.y == 0) + direction = PathInfo::Horizontal; + else if (delta.x == delta.y) + direction = PathInfo::Diagonal1; + else if (delta.x == -delta.y) + direction = PathInfo::Diagonal2; + else + direction = PathInfo::Undefined; + + int num_obs = 0; + if (direction != PathInfo::Undefined) { + Point step = delta.normalizeInfinity(); + Point position = from; + while ((position += step) != to) { + if (get(position) == NULL || + *get(position) == Piece()) + continue; + num_obs++; + } + } + + return PathInfo(direction, num_obs); +} + +Point Board::find(const Piece& piece) const { + for (int i = 0; i < m_size.x; i++) { + for (int j = 0; j < m_size.y; j++) { + Point p(i, j); + if (*get(p) == piece) + return p; + } + } + + return Point::invalid(); +} + +QStringList Board::borderCoords() const { + QStringList retv; + Point p = size(); + for (int i = 0; i < p.x; i++) + retv << Point(i, 0).col(); + for (int i = 1; i <= p.y; i++) + retv << QString::number(i); + return retv + retv; +} + diff --git a/src/core/board.h b/src/core/board.h new file mode 100644 index 0000000..10caf39 --- /dev/null +++ b/src/core/board.h @@ -0,0 +1,93 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__BOARD_H +#define CORE__BOARD_H + +#include +#include + +#include "point.h" +#include "pathinfo.h" + +class Piece; + +// TODO: make Board a component + +/** + * @brief A grid of pieces. + * + * The board class maintains a rectangular grid of Piece objects, + * providing methods to access, add, remove and find them. + */ +class TAGUA_EXPORT Board { + Point m_size; + std::vector m_data; +public: + /** + * Create a new Board with the given size. + */ + explicit Board(const Point& size); + + /** + * Create a Board copying a given one. + */ + explicit Board(const Board* other); + + /** + * Compare two boards for equality. + */ + bool equals(const Board* other) const; + + /** + * @return Board size. + */ + Point size() const; + + /** + * Retrieve a piece from the board. + * @param p Coordinates of the piece. + * @return Pointer to the piece at that square, or NULL, if the square is out of the board. + */ + Piece* get(const Point& p); + const Piece* get(const Point& p) const; + + /** + * Add a piece to the board. + * @param p Coordinates of the piece. + * @param piece The piece to add. + * @note This function does nothing if @a p is out of the board. + */ + void set(const Point& p, const Piece& piece); + + /** + * @return Whether @a p is a valid board square. + */ + bool valid(const Point& p) const; + + /** + * @return Information on the path joining @a from and @a to. + */ + PathInfo path(const Point& from, const Point& to) const; + + /** + * Searches the board for a given piece. + * @return The first square where the piece is found, or an + * invalid point, if no such piece exists on the board. + */ + Point find(const Piece& piece) const; + + /** + * Coordinates displayed at the board border. + */ + QStringList borderCoords() const; +}; + +#endif // CORE__BOARD_H diff --git a/src/core/color.cpp b/src/core/color.cpp new file mode 100644 index 0000000..3d862fc --- /dev/null +++ b/src/core/color.cpp @@ -0,0 +1,35 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "color.h" + +IColor::~IColor() { } + +White::White() { } + +QString White::name() const { return "white"; } + +White* White::self() { + static White s_instance; + return &s_instance; +} + +int White::index() const { return 0; } + +Black::Black() { } + +QString Black::name() const { return "black"; } + +Black* Black::self() { + static Black s_instance; + return &s_instance; +} + +int Black::index() const { return 1; } diff --git a/src/core/color.h b/src/core/color.h new file mode 100644 index 0000000..3c7df64 --- /dev/null +++ b/src/core/color.h @@ -0,0 +1,57 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__COLOR_H +#define CORE__COLOR_H + +#include "component.h" + +/** + * @brief A player in a game. + * + * Each color represents a different player, and possibly the ownership + * of pieces on the board. + */ +class TAGUA_EXPORT IColor { +public: + virtual ~IColor(); + + /** + * @return The color name. + */ + virtual QString name() const = 0; + + /** + * @return The color index. + */ + virtual int index() const = 0; +}; + +class TAGUA_EXPORT White : public Component, public IColor { +Q_OBJECT + White(); +public: + virtual QString name() const; + virtual int index() const; + + static White* self(); +}; + +class TAGUA_EXPORT Black : public Component, public IColor { +Q_OBJECT + Black(); +public: + virtual QString name() const; + virtual int index() const; + + static Black* self(); +}; + +#endif // CORE__COLOR_H diff --git a/src/core/common.h b/src/core/common.h new file mode 100644 index 0000000..1357fa4 --- /dev/null +++ b/src/core/common.h @@ -0,0 +1,61 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef COMMON_H +#define COMMON_H + +#include +#include "export.h" + + +class QString; + +enum ErrorCode { + InvalidMove +}; + +struct null_deleter { + void operator()(void const *) const { } +}; + +//class ChessPiece; + +template class Grid; +template class PointerGrid; +//typedef PointerGrid PieceGrid; + + +TAGUA_EXPORT std::ostream &operator <<(std::ostream &os, const QString& s); + +inline const char* wrap_cptr(const char* ptr) { + return ptr ? ptr : "[NULL]"; +} + +QString qPrintf(const char* fmt, ...); + +TAGUA_EXPORT QString prettyTypeName(const char* name); + +inline void TRAP() { +#if defined(Q_CC_GNU) + __asm__ __volatile__("int $3\n\t"); +#endif +} + +#ifndef M_PI + #define M_PI 3.1415926 +#endif + +#define DEBUG_MSG(header, msg) (std::cerr << header << msg << "\n" \ + << " in " << __PRETTY_FUNCTION__ << ", line " << __LINE__ << " of " << __FILE__ << std::endl) +#define ERROR(x) DEBUG_MSG("Error: ", x) +#define WARNING(x) DEBUG_MSG("Warning: ", x) + +#endif // COMMON_H + diff --git a/src/core/component.cpp b/src/core/component.cpp new file mode 100644 index 0000000..aad4c39 --- /dev/null +++ b/src/core/component.cpp @@ -0,0 +1,13 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "component.h" + +Component::Component() { } diff --git a/src/core/component.h b/src/core/component.h new file mode 100644 index 0000000..bf022a0 --- /dev/null +++ b/src/core/component.h @@ -0,0 +1,27 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__COMPONENT_H +#define CORE__COMPONENT_H + +#include "component_fwd.h" +#include "export.h" +#include + +/** + * @brief A Component is a reusable unit in the description of a Tagua variant. + */ +class TAGUA_EXPORT Component : public QObject { +Q_OBJECT +public: + Component(); +}; + +#endif // CORE__COMPONENT_H diff --git a/src/core/component_fwd.h b/src/core/component_fwd.h new file mode 100644 index 0000000..1c5bbcb --- /dev/null +++ b/src/core/component_fwd.h @@ -0,0 +1,19 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__COMPONENT_FWD_H +#define CORE__COMPONENT_FWD_H + +#include + +class Component; +typedef Component* ComponentPtr; + +#endif // CORE__COMPONENT_FWD_H diff --git a/src/core/defaultpolicy.cpp b/src/core/defaultpolicy.cpp new file mode 100644 index 0000000..c40b2d0 --- /dev/null +++ b/src/core/defaultpolicy.cpp @@ -0,0 +1,32 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "defaultpolicy.h" +#include "board.h" +#include "piece.h" +#include "state.h" + +InteractionType DefaultPolicy::movable(const IState* state, + const TurnTest& test, + const Point& p) const { + const Piece* piece = state->board()->get(p); + if (piece == NULL || *piece == Piece() || !test(piece->color())) + return NoAction; + + return piece->color() == state->turn() ? Moving : Premoving; +} + +InteractionType DefaultPolicy::droppable(const IState* state, + const TurnTest& test, + const IColor* pool) const { + if (!test(pool)) + return NoAction; + + return pool == state->turn() ? Moving : Premoving; +} diff --git a/src/core/defaultpolicy.h b/src/core/defaultpolicy.h new file mode 100644 index 0000000..52bb4cb --- /dev/null +++ b/src/core/defaultpolicy.h @@ -0,0 +1,29 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__DEFAULTPOLICY_H +#define CORE__DEFAULTPOLICY_H + +#include "component.h" +#include "policy.h" + +class TAGUA_EXPORT DefaultPolicy : public Component, public IPolicy { +Q_OBJECT +public Q_SLOTS: + virtual InteractionType movable(const IState* state, + const TurnTest& test, + const Point& p) const; + + virtual InteractionType droppable(const IState* state, + const TurnTest& test, + const IColor* pool) const; +}; + +#endif // CORE__DEFAULTPOLICY_H + diff --git a/src/core/defaultpool.cpp b/src/core/defaultpool.cpp new file mode 100644 index 0000000..c3608f3 --- /dev/null +++ b/src/core/defaultpool.cpp @@ -0,0 +1,135 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "defaultpool.h" +#include "piece.h" +#include "taguacast.h" +#include "type.h" + +DefaultPool::Key::Key(const IType* type) : type(type) { } + +bool DefaultPool::Key::operator<(const Key& other) const { + return type->index() < other.type->index(); +} + +DefaultPool::DefaultPool(const IColor* owner) +: m_owner(owner) { } + +DefaultPool::~DefaultPool() { } + +IPool* DefaultPool::clone() const { + DefaultPool* c = new DefaultPool(m_owner); + c->m_data = m_data; + return c; +} + +bool DefaultPool::equals(const IPool* other_) const { + TAGUA_CAST(other, const DefaultPool, false); + return other->m_data == m_data; +} + +bool DefaultPool::empty() const { + for (Data::const_iterator it = m_data.begin(), + end = m_data.end(); it != end; ++it) { + if (it.value() > 0) return false; + } + + return true; +} + +int DefaultPool::size() const { + int res = 0; + for (Data::const_iterator it = m_data.begin(), + end = m_data.end(); it != end; ++it) { + res += it.value(); + } + return res; +} + +int DefaultPool::insert(int index, const Piece& piece) { + int fill = 0; + for (Data::const_iterator it = m_data.begin(), + end = m_data.end(); + it != end && it.key() < Key(piece.type()); + ++it) { + fill += it.value(); + } + + int nump = add(piece.type()); + + if (index < fill) + return fill; + if (index >= fill + nump) + return fill + nump - 1; + return index; +} + +Piece DefaultPool::get(int index) const { + if (index < 0) + return Piece(); + + int fill = 0; + for (Data::const_iterator it = m_data.begin(), + end = m_data.end(); it != end; ++it) { + if (index < fill + it.value()) + return Piece(m_owner, it.key().type); + fill += it.value(); + } + + return Piece(); +} + +Piece DefaultPool::take(int index) { + if (index < 0) + return Piece(); + + int fill = 0; + for (Data::const_iterator it = m_data.begin(), + end = m_data.end(); it != end; ++it) { + if (index < fill + it.value()) { + const IType* type = it.key().type; + remove(type); + return Piece(m_owner, type); + } + + fill += it.value(); + } + + return Piece(); +} + +bool DefaultPool::take(const Piece& piece) { + if (m_data[Key(piece.type())] <= 0) return false; + remove(piece.type()); + return true; +} + +const IColor* DefaultPool::color() const { + return m_owner; +} + +int DefaultPool::add(const IType* type) { + return ++m_data[Key(type)]; +} + +int DefaultPool::remove(const IType* type) { + Key key(type); + int n = --m_data[key]; + if (n <= 0) { + m_data.remove(key); + return 0; + } + + return n; +} + +int DefaultPool::count(const IType* type) const { + return m_data.value(Key(type)); +} diff --git a/src/core/defaultpool.h b/src/core/defaultpool.h new file mode 100644 index 0000000..510adf1 --- /dev/null +++ b/src/core/defaultpool.h @@ -0,0 +1,82 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__DEFAULTPOOL_H +#define CORE__DEFAULTPOOL_H + +#include + +#include "pool.h" +#include "export.h" + +class IColor; +class IType; + +/** + * @brief Convenience IPool implementation for shogi-like games. + * + * A DefaultPool holds pieces of the same color. It doesn't + * actually contains pieces, but creates them on the fly whenever it + * is asked one. + * + * Pieces are maintained using an association type -> number of pieces + * of that type. Indexes are computed as if all pieces where ordered by + * type. + */ +class TAGUA_EXPORT DefaultPool : public IPool { + /** + * @brief Wrapper of an IType pointer, used to sort types by index. + */ + struct Key { + public: + const IType* type; + Key(const IType* type); + bool operator<(const Key& other) const; + }; + typedef QMap Data; + Data m_data; + const IColor* m_owner; +public: + DefaultPool(const IColor* owner); + virtual ~DefaultPool(); + + virtual IPool* clone() const; + virtual bool equals(const IPool* other) const; + virtual bool empty() const; + virtual int size() const; + virtual int insert(int index, const Piece& piece); + virtual Piece get(int index) const; + virtual Piece take(int index); + virtual bool take(const Piece& piece); + + /** + * @return The common color of the pieces. + */ + virtual const IColor* color() const; + + /** + * @return The number of pieces of the given type. + */ + virtual int count(const IType* type) const; + + /** + * Add a piece of the given type to the pool. + * @return The new number of pieces of the given type. + */ + virtual int add(const IType* type); + + /** + * Remove a piece of the given type from the pool. + * @return The new number of pieces of the given type. + */ + virtual int remove(const IType* type); +}; + +#endif // CORE__DEFAULTPOOL_H diff --git a/src/core/defaultpoolcollection.cpp b/src/core/defaultpoolcollection.cpp new file mode 100644 index 0000000..dd9df26 --- /dev/null +++ b/src/core/defaultpoolcollection.cpp @@ -0,0 +1,70 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "defaultpoolcollection.h" +#include "pool.h" +#include "taguacast.h" + +DefaultPoolCollection::DefaultPoolCollection() { } + +DefaultPoolCollection::~DefaultPoolCollection() { + for (PoolMap::const_iterator it = m_pools.begin(), + end = m_pools.end(); it != end; ++it) { + delete it.value(); + } +} + +IPoolCollection* DefaultPoolCollection::clone() const { + DefaultPoolCollection* c = new DefaultPoolCollection; + + for (PoolMap::const_iterator it = m_pools.begin(), + end = m_pools.end(); it != end; ++it) { + c->m_pools.insert(it.key(), it.value()->clone()); + } + + return c; +} + +bool DefaultPoolCollection::equals(const IPoolCollection* other_) const { + PoolMap::const_iterator it1 = m_pools.begin(); + PoolMap::const_iterator end1 = m_pools.end(); + TAGUA_CAST(other, const DefaultPoolCollection, false); + PoolMap::const_iterator it2 = other->m_pools.begin(); + PoolMap::const_iterator end2 = other->m_pools.end(); + + while (it1 != end1 || it2 != end2) { + if (it2 == end2 || it1.key() < it2.key()) { + if (!it1.value()->empty()) return false; + ++it1; + } + else if (it1 == end1 || it1.key() > it1.key()) { + if (!it2.value()->empty()) return false; + ++it2; + } + else { + if (!it1.value()->equals(it2.value())) return false; + ++it1; + ++it2; + } + } + + return true; +} + +IPool* DefaultPoolCollection::pool(const IColor* player) { + return m_pools.value(player); +} + +const IPool* DefaultPoolCollection::pool(const IColor* player) const { + return m_pools.value(player); +} + +void DefaultPoolCollection::addPool(const IColor* color, IPool* pool) { + m_pools.insert(color, pool); +} diff --git a/src/core/defaultpoolcollection.h b/src/core/defaultpoolcollection.h new file mode 100644 index 0000000..55c4547 --- /dev/null +++ b/src/core/defaultpoolcollection.h @@ -0,0 +1,36 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__DEFAULTPOOLCOLLECTION_H +#define CORE__DEFAULTPOOLCOLLECTION_H + +#include + +#include "component.h" +#include "poolcollection.h" + +class TAGUA_EXPORT DefaultPoolCollection +: public Component +, public IPoolCollection { + typedef QMap PoolMap; + PoolMap m_pools; +public: + DefaultPoolCollection(); + virtual ~DefaultPoolCollection(); + + virtual IPoolCollection* clone() const; + virtual bool equals(const IPoolCollection* other) const; + virtual IPool* pool(const IColor* player); + virtual const IPool* pool(const IColor* player) const; + + virtual void addPool(const IColor* color, IPool* pool); +}; + +#endif // CORE__DEFAULTPOOLCOLLECTION_H + diff --git a/src/core/defaultstate.cpp b/src/core/defaultstate.cpp new file mode 100644 index 0000000..f275e47 --- /dev/null +++ b/src/core/defaultstate.cpp @@ -0,0 +1,39 @@ +#include "behaviour.h" +#include "board.h" +#include "defaultstate.h" +#include "defaulttype.h" + +std::vector DefaultState::theoreticalMoves(const Piece& piece, + const Point& src) const { + std::vector destinations; + + const IBehaviour* behaviour = this->behaviour(); + if (!behaviour) return destinations; // empty + + const std::vector * defs = + dynamic_cast(piece.type())->movesDefinitions(); + if (!defs) return destinations; // empty + + //kDebug() << "looking at moves from " << src; + for (unsigned direction=0; direction < defs->size(); direction++) + for (int distance=1; + (*defs)[direction].distance ? (distance <= (*defs)[direction].distance) : 1; + distance++) { + Point* candidate = new Point(src.x + ((*defs)[direction].x * distance * + -behaviour->direction(piece.color()).y), + src.y + ((*defs)[direction].y * distance * + behaviour->direction(piece.color()).y)); + if (!board()->valid(*candidate)) + // end of board: don't look further in that direction + break; + + destinations.push_back(candidate); + + // stop looking in direction if there is a piece blocking move here + const Piece* otherPiece = board()->get(*candidate); + if (otherPiece && (*otherPiece != Piece())) + break; + } + + return destinations; +} diff --git a/src/core/defaultstate.h b/src/core/defaultstate.h new file mode 100644 index 0000000..6c602b2 --- /dev/null +++ b/src/core/defaultstate.h @@ -0,0 +1,17 @@ + +#ifndef CORE__DEFAULT_STATE_H +#define CORE__DEFAULT_STATE_H + +#include "piece.h" +#include "point.h" +#include "state.h" + +#include + +class TAGUA_EXPORT DefaultState : virtual public IState { +public: + virtual std::vector theoreticalMoves(const Piece& piece, + const Point& src) const; +}; + +#endif // CORE__DEFAULT_STATE_H diff --git a/src/core/defaulttype.cpp b/src/core/defaulttype.cpp new file mode 100644 index 0000000..889b4f2 --- /dev/null +++ b/src/core/defaulttype.cpp @@ -0,0 +1,27 @@ +#include "defaultstate.h" +#include "defaulttype.h" +#include "move.h" + +#include + +bool DefaultType::canMove(const Piece& piece, const Piece&, + Move& move, const IState* state) const { + const DefaultState* dstate = dynamic_cast(state); + if (dstate == NULL) { + kDebug() << "use of a non-DefaultState-derived state with DefaultType"; + return false; + } + std::vector moves = dstate->theoreticalMoves(piece, move.src()); + std::vector::const_iterator it; + for (it = moves.begin(); it != moves.end(); it++) { + if (move.dst() == **it) + return true; + delete *it; + } + + // delete remaining points in the vector + for (; it != moves.end(); it++) + delete *it; + + return false; +} diff --git a/src/core/defaulttype.h b/src/core/defaulttype.h new file mode 100644 index 0000000..f93c2c8 --- /dev/null +++ b/src/core/defaulttype.h @@ -0,0 +1,24 @@ +#ifndef CORE__DEFAULT_TYPE_H +#define CORE__DEFAULT_TYPE_H + +#include "type.h" + +#include + +class IState; +class Move; +class Piece; + +typedef struct { + unsigned x, y; + int distance; +} MoveDefinition; + +class TAGUA_EXPORT DefaultType: public IType { +public: + virtual const std::vector * const movesDefinitions() const = 0; + virtual bool canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const; +}; + +#endif // CORE__DEFAULT_TYPE_H diff --git a/src/core/delegators/behaviour.h b/src/core/delegators/behaviour.h new file mode 100644 index 0000000..1f890ec --- /dev/null +++ b/src/core/delegators/behaviour.h @@ -0,0 +1,44 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef DELEGATORS__BEHAVIOUR_H +#define DELEGATORS__BEHAVIOUR_H + +#include "../behaviour.h" + +namespace Delegators { + +class Behaviour : public IBehaviour { +protected: + const IBehaviour* m_behaviour; +public: + Behaviour(const IBehaviour* behaviour) : m_behaviour(behaviour) { } + virtual ~Behaviour() { delete m_behaviour; } + + virtual void captureOn(IState* state, const Point& square) const { + m_behaviour->captureOn(state, square); + } + virtual void move(IState* state, const Move& m) const { m_behaviour->move(state, m); } + virtual void advanceTurn(IState* state) const { m_behaviour->advanceTurn(state); } + virtual Point captureSquare(const IState* state, const Move& m) const { + return m_behaviour->captureSquare(state, m); + } + virtual const IColor* opponent(const IColor* player) const { + return m_behaviour->opponent(player); + } + virtual Point direction(const IColor* player) const { + return m_behaviour->direction(player); + } +}; + +} + +#endif // DELEGATORS__BEHAVIOUR_H + + diff --git a/src/core/delegators/defaultstate.h b/src/core/delegators/defaultstate.h new file mode 100644 index 0000000..35e93a9 --- /dev/null +++ b/src/core/delegators/defaultstate.h @@ -0,0 +1,38 @@ +#ifndef DELEGATORS__DEFAULT_STATE_H +#define DELEGATORS__DEFAULT_STATE_H + +#include "state.h" +#include "../defaultstate.h" + +#include + +#include + +namespace Delegators { + +class DefaultState : public State, public ::DefaultState { +protected: + ::DefaultState* m_state; +public: + DefaultState(IState* state) + : State(state) { + ::DefaultState* dstate = dynamic_cast< ::DefaultState*>(state); + if (dstate == NULL) { + kError() << "Delegators::DefaultState needs a ::DefaultState, cannot use a" + << typeid(state).name(); + abort(); + } + + m_state = dstate; + m_state->setDelegator(this); + } + virtual ~DefaultState() { delete m_state; } + + virtual std::vector theoreticalMoves(const Piece& piece, + const Point& src) const + { return m_state->theoreticalMoves(piece, src); } +}; + +} // namespace Delegators + +#endif // DELEGATORS__DEFAULT_STATE_H diff --git a/src/core/delegators/moveserializer.h b/src/core/delegators/moveserializer.h new file mode 100644 index 0000000..8a11a3d --- /dev/null +++ b/src/core/delegators/moveserializer.h @@ -0,0 +1,49 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef DELEGATORS__MOVESERIALIZER_H +#define DELEGATORS__MOVESERIALIZER_H + +#include "../moveserializer.h" +#include "../move.h" + +namespace Delegators { + +class MoveSerializer : public IMoveSerializer { +protected: + IMoveSerializer* m_serializer; +public: + MoveSerializer(IMoveSerializer* serializer) + : m_serializer(serializer) { + m_serializer->setDelegator(this); + } + virtual ~MoveSerializer() { delete m_serializer; } + virtual QString serialize(const Move& move, const IState* ref) const { + return m_serializer->serialize(move, ref); + } + virtual Move deserialize(const QString& str, const IState* ref) const { + return m_serializer->deserialize(str, ref); + } + virtual QString symbol(const IType* type) const { return m_serializer->symbol(type); } + virtual QString suffix(const Move& move, const IState* ref) const { + return m_serializer->suffix(move, ref); + } + virtual QString type() const { return m_serializer->type(); } + virtual void setDelegator(IMoveSerializer* delegator) { + m_serializer->setDelegator(delegator); + } + virtual QString san(const Move& move, const IState* ref) const { + return m_serializer->san(move, ref); + } +}; + +} // namespace Delegators + +#endif // DELEGATORS__MOVESERIALIZER_H + diff --git a/src/core/delegators/state.h b/src/core/delegators/state.h new file mode 100644 index 0000000..a2155ae --- /dev/null +++ b/src/core/delegators/state.h @@ -0,0 +1,47 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef DELEGATORS__STATE_H +#define DELEGATORS__STATE_H + +#include "../state.h" + +/** + * @brief Namespace holding delegators to core Tagua components. + */ +namespace Delegators { + +class State : virtual public IState { +protected: + IState* m_state; +public: + State(IState* state) : m_state(state) { m_state->setDelegator(this); } + virtual ~State() { delete m_state; } + + virtual IState* clone() const { return new State(m_state->clone()); } + virtual void setup() { m_state->setup(); } + virtual const Board* board() const { return m_state->board(); } + virtual Board* board() { return m_state->board(); } + virtual const IColor* turn() const { return m_state->turn(); } + virtual void setTurn(const IColor* turn) { m_state->setTurn(turn); } + virtual bool equals(IState* other) const { return m_state->equals(other); } + virtual void assign(const IState* other) { m_state->assign(other); } + virtual void move(const Move& move) { m_state->move(move); } + virtual TaguaObject* flags() { return m_state->flags(); } + virtual const TaguaObject* flags() const { return m_state->flags(); } + virtual int rank(int n, const IColor* turn) const { return m_state->rank(n, turn); } + virtual const IPoolCollection* pools() const { return m_state->pools(); } + virtual IPoolCollection* pools() { return m_state->pools(); } + virtual const IBehaviour* behaviour() const { return m_state->behaviour(); } + virtual void setDelegator(IState* state) { m_state->setDelegator(state); } +}; + +} + +#endif // DELEGATORS__STATE_H diff --git a/src/core/delegators/validator.h b/src/core/delegators/validator.h new file mode 100644 index 0000000..4a021dd --- /dev/null +++ b/src/core/delegators/validator.h @@ -0,0 +1,46 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef DELEGATORS_VALIDATOR_H +#define DELEGATORS_VALIDATOR_H + +#include "../validator.h" + +namespace Delegators { + +class Validator : public IValidator { +protected: + IValidator* m_validator; +public: + Validator(IValidator* validator) + : m_validator(validator) { + m_validator->setDelegator(this); + } + virtual ~Validator() { delete m_validator; } + virtual bool pseudolegal(const IState* state, Move& move) const { + return m_validator->pseudolegal(state, move); + } + virtual bool legal(const IState* state, Move& move) const { + return m_validator->legal(state, move); + } + virtual bool attacks(const IState* state, const IColor* player, + const Point& square, const Piece& target = Piece()) const { + return m_validator->attacks(state, player, square, target); + } + virtual const IColor* mover(const IState* state, const Move& move) const { + return m_validator->mover(state, move); + } + virtual void setDelegator(IValidator* delegator) { + return m_validator->setDelegator(delegator); + } +}; + +} + +#endif // DELEGATORS_VALIDATOR_H diff --git a/src/core/dropanimator.cpp b/src/core/dropanimator.cpp new file mode 100644 index 0000000..b1b3296 --- /dev/null +++ b/src/core/dropanimator.cpp @@ -0,0 +1,129 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "animation.h" + +#include "dropanimator.h" +#include "move.h" +#include "namer.h" +#include "piece.h" +#include "pool.h" +#include "poolcollection.h" +#include "state.h" +#include "taguaapi.h" + +DropAnimator::~DropAnimator() { delete m_base; } + +DropAnimator::DropAnimator(IAnimator* base, + TaguaAPI* api, + const INamer* namer, + const IColor** players) +: BaseAnimator(api, namer) +, m_base(base) +, m_players(players) { + m_warper = this; +} + +AnimationPtr DropAnimator::warp(const IState* state) { + updatePool(state); + return BaseAnimator::warp(state); +} + +AnimationPtr DropAnimator::forward(const Move& move, const IState* state) { + if (move.drop() != Piece()) { + AnimationPtr res = m_api->group("default"); + + NamedSprite captured = m_api->takeSprite(move.dst()); + + std::pair dropped = m_api->droppedPoolPiece(); + if (dropped.first && dropped.second != -1 && + m_api->state()->pools()-> + pool(dropped.first)->get(dropped.second) == move.drop()) { + NamedSprite drop = m_api->takePoolSprite(dropped.first, dropped.second); + m_api->setSprite(move.dst(), drop); + res->addPreAnimation(m_api->move(drop, move.dst(), "default")); + } + else { + NamedSprite drop = m_api->setPiece(move.dst(), move.drop(), false); + res->addPreAnimation(m_api->appear(drop, "default")); + } + + if (captured) + res->addPostAnimation(m_api->disappear(captured, "destroy")); + res->addPostAnimation(m_warper->warp(state)); + + return res; + } + else { + return m_base->forward(move, state); + } +} + +AnimationPtr DropAnimator::back(const Move& move, const IState* state) { + if (move.drop() != Piece()) { + AnimationPtr res = m_api->group("default"); + NamedSprite drop = m_api->takeSprite(move.dst()); + res->addPostAnimation(m_api->disappear(drop, "default")); + + res->addPostAnimation(m_warper->warp(state)); + return res; + } + + return m_base->back(move, state); +} + +void DropAnimator::updatePool(const IState* final) { + for (int color = 0; color < 2; color++) { + const IColor* c = m_players[color]; + const IPool* pool = final->pools()->pool(c); + const int n = pool->size(); + + for (int index = 0; index < n; ) { + // precondition: pool and graphical pool match up to index + + // no more sprites on the graphical pool + if (index >= m_api->poolSize(color)) { + // add extra sprites + for (int i = index; i < n; i++) + m_api->insertPoolPiece(c, i, pool->get(i)); + + // done + break; + } + + NamedSprite sprite = m_api->getPoolSprite(c, index); + int i; + + // find a matching piece on the pool + for (i = index; i < n; i++) { + if (m_namer->name(pool->get(i)) == sprite.name()) + break; + } + + if (i < n) { + // matching piece found on the pool + // insert all pieces before this one on the graphical pool + for (int j = index; j < i; j++) + m_api->insertPoolPiece(c, j, pool->get(j)); + index = i + 1; + } + else { + // no such piece found: remove it from the graphical pool + m_api->removePoolSprite(c, index); + } + } + + // remove extra pieces from the graphical pool + while (m_api->poolSize(color) > n) + m_api->removePoolSprite(c, n); + } +} + +void DropAnimator::setWarper(IWarper* warper) { m_warper = warper; } + diff --git a/src/core/dropanimator.h b/src/core/dropanimator.h new file mode 100644 index 0000000..da5dd08 --- /dev/null +++ b/src/core/dropanimator.h @@ -0,0 +1,40 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__DROPANIMATOR_H +#define CORE__DROPANIMATOR_H + +#include "baseanimator.h" +#include "component.h" +#include "export.h" + +class IColor; +class INamer; +class TaguaAPI; + +class TAGUA_EXPORT DropAnimator : public BaseAnimator { +Q_OBJECT + IWarper* m_warper; + IAnimator* m_base; + const IColor** m_players; +public: + virtual ~DropAnimator(); + + DropAnimator(IAnimator* base, TaguaAPI* api, + const INamer* namer, const IColor** players); + + virtual AnimationPtr warp(const IState* state); + virtual AnimationPtr forward(const Move& move, const IState* state); + virtual AnimationPtr back(const Move& move, const IState* state); + virtual void setWarper(IWarper* warper); +protected Q_SLOTS: + virtual void updatePool(const IState* final); +}; + +#endif // CORE__DROPANIMATOR_H diff --git a/src/core/export.h b/src/core/export.h new file mode 100644 index 0000000..d992d77 --- /dev/null +++ b/src/core/export.h @@ -0,0 +1,16 @@ +#ifndef EXPORT_H +#define EXPORT_H + +#include + +#ifdef TAGUA_DEBUG + #ifdef MAKE_TAGUAPRIVATE_LIB + #define TAGUA_EXPORT KDE_EXPORT + #else + #define TAGUA_EXPORT KDE_IMPORT + #endif // MAKE_TAGUAPRIVATE_LIB +#else // TAGUA_DEBUG + #define TAGUA_EXPORT +#endif // TAGUA_DEBUG + +#endif // EXPORT_H diff --git a/src/core/interactiontype.h b/src/core/interactiontype.h new file mode 100644 index 0000000..95470d2 --- /dev/null +++ b/src/core/interactiontype.h @@ -0,0 +1,25 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef INTERACTIONTYPE_H +#define INTERACTIONTYPE_H + + +/** + * @brief An enumerated type to specify the type of an interaction with a position + */ +enum InteractionType { + NoAction, + Moving, + Premoving +}; + + +#endif //INTERACTIONTYPE_H diff --git a/src/core/move.cpp b/src/core/move.cpp new file mode 100644 index 0000000..56d0135 --- /dev/null +++ b/src/core/move.cpp @@ -0,0 +1,77 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "move.h" + +Move::Move() +: m_src(Point::invalid()) +, m_dst(Point::invalid()) +, m_promotion(0) +, m_pool(0) +, m_index(-1) { } + +Move::Move(const Point& src, const Point& dst, const IType* promotion) +: m_src(src) +, m_dst(dst) +, m_promotion(promotion) +, m_pool(0) +, m_index(-1) { } + +Move::Move(const IColor* pool, int index, const Point& dst) +: m_src(Point::invalid()) +, m_dst(dst) +, m_promotion(0) +, m_pool(pool) +, m_index(index) { } + +Point Move::src() const { return m_src; } + +Point Move::dst() const { return m_dst; } + +Point Move::delta() const { return dst() - src(); } + +Piece Move::drop() const { return m_drop; } + +void Move::setDrop(const Piece& piece) { m_drop = piece; } + +bool Move::isDrop() const { return m_pool != 0 && m_index != -1; } + +const IColor* Move::pool() const { return m_pool; } + +int Move::index() const { return m_index; } + +QString Move::type() const { return m_type; } + +void Move::setType(const QString& type) { m_type = type; } + +const IType* Move::promotion() const { return m_promotion; } + +void Move::setPromotion(const IType* prom) { m_promotion = prom; } + +bool Move::operator==(const Move& mv) const { + if (!TaguaObject::operator==(mv)) return false; + if (m_type != mv.m_type) return false; + + if (m_pool) { + return m_pool == mv.m_pool && + m_index == mv.m_index && + m_dst == mv.m_dst && + m_promotion == mv.m_promotion; + } + else { + return m_src == mv.m_src && + m_dst == mv.m_dst && + m_promotion == mv.m_promotion; + } +} + +bool Move::operator!=(const Move& mv) const { + return !(operator==(mv)); +} diff --git a/src/core/move.h b/src/core/move.h new file mode 100644 index 0000000..d31b4e9 --- /dev/null +++ b/src/core/move.h @@ -0,0 +1,58 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__MOVE_H +#define CORE__MOVE_H + +#include +#include "taguaobject.h" +#include "point.h" +#include "piece.h" + +class TAGUA_EXPORT Move : public TaguaObject { + Point m_src; + Point m_dst; + const IType* m_promotion; + + // for drops + const IColor* m_pool; + int m_index; + Piece m_drop; + + QString m_type; +public: + Move(); + Move(const Point& src, const Point& dst, const IType* promotion = 0); + Move(const IColor* pool, int index, const Point& dst); + + Point src() const; + Point dst() const; + Piece drop() const; + void setDrop(const Piece& piece); + Point delta() const; + + QString type() const; + void setType(const QString&); + + const IType* promotion() const; + void setPromotion(const IType* promotion); + + bool isDrop() const; + + const IColor* pool() const; + int index() const; + + bool operator==(const Move& mv) const; + bool operator!=(const Move& mv) const; +}; + +Q_DECLARE_METATYPE(Move) + +#endif // CORE__MOVE_H diff --git a/src/core/moveserializer.cpp b/src/core/moveserializer.cpp new file mode 100644 index 0000000..7814d70 --- /dev/null +++ b/src/core/moveserializer.cpp @@ -0,0 +1,13 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "moveserializer.h" + +IMoveSerializer::~IMoveSerializer() { } diff --git a/src/core/moveserializer.h b/src/core/moveserializer.h new file mode 100644 index 0000000..bb9d626 --- /dev/null +++ b/src/core/moveserializer.h @@ -0,0 +1,69 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__MOVE_SERIALIZER_H +#define CORE__MOVE_SERIALIZER_H + +#include +#include "export.h" + +class IState; +class IType; +class Move; + +/** + * @brief MoveSerializer takes care of converting moves to a displayable form and vice-versa. + */ +class TAGUA_EXPORT IMoveSerializer { +public: + virtual ~IMoveSerializer(); + + /** + * Serialize a move given a reference game state. + * It is assumed that the move has already been tested against @a ref. + * Calling this function on an untested or illegal move is safe but its return + * value is undefined. + * Do not try to call this function on an invalid move. + * @param ref The position in which this move shall be executed. + * @return A string representation for this move. + */ + virtual QString serialize(const Move& move, const IState* ref) const = 0; + + /** + * Convert a string representation of a move back to a move object. + * @param ref The position in which this move shall be executed. + * @return A move corresponding to the given string representation. + */ + virtual Move deserialize(const QString& str, const IState* ref) const = 0; + + /** + * @return The symbol associated to the given type. + */ + virtual QString symbol(const IType* type) const = 0; + + /** + * Compute a move suffix (e.g. to represent checkmate). + * @param ref The position in which this move shall be executed. + * @return A suffix for the given move. + */ + virtual QString suffix(const Move& move, const IState* ref) const = 0; + + /** + * @return Serializer type. + */ + virtual QString type() const = 0; + + virtual QString san(const Move& move, const IState* ref) const = 0; + + virtual void setDelegator(IMoveSerializer* delegator) = 0; +}; + +#endif // CORE__MOVE_SERIALIZER_H + diff --git a/src/core/namedsprite.cpp b/src/core/namedsprite.cpp new file mode 100644 index 0000000..1d4d2b8 --- /dev/null +++ b/src/core/namedsprite.cpp @@ -0,0 +1,19 @@ +/* + Copyright (c) 2006-2007 Paolo Capriotti + (c) 2006-2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "namedsprite.h" + +NamedSprite::NamedSprite() { } + +NamedSprite::NamedSprite(const QString& name, const SpritePtr& s) +: m_name(name) +, m_sprite(s) { } + + diff --git a/src/core/namedsprite.h b/src/core/namedsprite.h new file mode 100644 index 0000000..357c87e --- /dev/null +++ b/src/core/namedsprite.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2006-2007 Paolo Capriotti + (c) 2006-2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef NAMEDSPRITE_H +#define NAMEDSPRITE_H + +#include +#include +#include "export.h" + +class Sprite; +typedef boost::shared_ptr SpritePtr; + +class TAGUA_EXPORT NamedSprite { +public: + QString m_name; + SpritePtr m_sprite; + + NamedSprite(); + NamedSprite(const QString& name, const SpritePtr& s); + + QString name() const { return m_name; } + SpritePtr sprite() const { return m_sprite; } + operator bool() const { return !!m_sprite; } +}; + +#endif //NAMEDSPRITE_H diff --git a/src/core/namer.cpp b/src/core/namer.cpp new file mode 100644 index 0000000..931ade1 --- /dev/null +++ b/src/core/namer.cpp @@ -0,0 +1,13 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "namer.h" + +INamer::~INamer() { } + diff --git a/src/core/namer.h b/src/core/namer.h new file mode 100644 index 0000000..54ebde7 --- /dev/null +++ b/src/core/namer.h @@ -0,0 +1,29 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__NAMER_H +#define CORE__NAMER_H + +#include +#include "export.h" + +class Piece; + +/** + * @brief A simple component used to retrieve symbolic piece names. + */ +class TAGUA_EXPORT INamer { +public: + virtual ~INamer(); + + virtual QString name(const Piece& piece) const = 0; +}; + +#endif // CORE__NAMER_H + diff --git a/src/core/pathinfo.cpp b/src/core/pathinfo.cpp new file mode 100644 index 0000000..0f79e7e --- /dev/null +++ b/src/core/pathinfo.cpp @@ -0,0 +1,14 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "pathinfo.h" + +PathInfo::PathInfo(PathInfo::Direction direction, int num_obstacles) +: m_direction(direction), m_num_obstacles(num_obstacles) {} diff --git a/src/core/pathinfo.h b/src/core/pathinfo.h new file mode 100644 index 0000000..69b5517 --- /dev/null +++ b/src/core/pathinfo.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__PATHINFO_H +#define CORE__PATHINFO_H + +#include "export.h" + +class TAGUA_EXPORT PathInfo { +public: + enum Direction { + Undefined, + Horizontal, + Vertical, + Diagonal1, + Diagonal2 + }; +private: + Direction m_direction; + int m_num_obstacles; +public: + PathInfo(Direction direction, int num_obstacles); + + Direction direction() const { return m_direction; } + bool parallel() const { return m_direction == Horizontal || m_direction == Vertical; } + bool diagonal() const { return m_direction == Diagonal1 || m_direction == Diagonal2; } + bool clear() const { return m_num_obstacles == 0; } + int numObstacles() const { return m_num_obstacles; } + bool valid() const { return m_direction != Undefined; } +}; + +#endif // CORE__PATHINFO_H diff --git a/src/core/piece.cpp b/src/core/piece.cpp new file mode 100644 index 0000000..84a4841 --- /dev/null +++ b/src/core/piece.cpp @@ -0,0 +1,29 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "piece.h" + +Piece::Piece(const IColor* color, const IType* type) +: m_type(type) +, m_color(color) { } + +const IColor* Piece::color() const { return m_color; } + +const IType* Piece::type() const { return m_type; } +void Piece::setType(const IType* type) { m_type = type; } + +bool Piece::operator==(const Piece& piece) const { + return m_type == piece.type() && + m_color == piece.color(); +} + +bool Piece::operator!=(const Piece& piece) const { + return !(operator==(piece)); +} diff --git a/src/core/piece.h b/src/core/piece.h new file mode 100644 index 0000000..2711254 --- /dev/null +++ b/src/core/piece.h @@ -0,0 +1,37 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__PIECE_H +#define CORE__PIECE_H + +#include +#include "taguaobject.h" + +class IType; +class IColor; + +class TAGUA_EXPORT Piece : public TaguaObject { + const IType* m_type; + const IColor* m_color; +public: + Piece(const IColor* color = 0, const IType* type = 0); + + const IColor* color() const; + const IType* type() const; + void setType(const IType* type); + + bool operator==(const Piece& other) const; + bool operator!=(const Piece& other) const; +}; + +Q_DECLARE_METATYPE(Piece) + +#endif // CORE__PIECE_H + diff --git a/src/core/point.cpp b/src/core/point.cpp new file mode 100644 index 0000000..9bfeeae --- /dev/null +++ b/src/core/point.cpp @@ -0,0 +1,177 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include "point.h" + +Point::Point(int x, int y) + : x(x), y(y) +{ + +} + +Point::Point(const QPoint& p) + : x(p.x()), y(p.y()) +{ + +} + +Point::Point() +{ + +} + +Point::Point(const QString& str, int ysize) { + x = y = -1; + int length = str.length(); + if(length == 0) + return; + if(str[0].isLetter()) { + char c = str[0].toAscii(); + if(c >= 'a' && c <= 'z') + x = c-'a'; + else if(c >= 'A' && c <= 'Z') + x = c-'A'; + if(length>1) + y = ysize - str.mid(1).toInt(); + } + else + y = ysize - str.toInt(); +} + +QString Point::row(int ysize) const { + if (y != -1) + return QString::number(ysize - y); + else + return QString(); +} +QString Point::numcol(int xsize) const { + if (x != -1) + return QString::number(xsize - x); + else + return QString(); +} + +QString Point::col() const { + if (x != -1) { + if(x >= 26) + return QChar(static_cast(x - 26 + 'A')); + else + return QChar(static_cast(x + 'a')); + } + else + return QString(); +} +QString Point::alpharow() const { + if (y != -1) { + if(y >= 26) + return QChar(static_cast(y - 26 + 'A')); + else + return QChar(static_cast(y + 'a')); + } + else + return QString(); +} + +QString Point::toString(int ysize) const { + return col() + row(ysize); +} + +Point Point::operator+(const Point& other) const { + return Point(x + other.x, y + other.y); +} + +Point Point::operator+=(const Point& other) { + return *this = *this + other; +} + +Point Point::operator-() const { + return Point(-x, -y); +} + +Point Point::operator-(const Point& other) const { + return Point(x - other.x, y - other.y); +} + +Point Point::operator*(int n) const { + return Point(x * n, y * n); +} + +Point Point::operator/(int n) const { + return Point(x / n, y / n); +} + +Point Point::div(int n) const { + return Point(x >= 0 ? x / n : x / n - 1, + y >= 0 ? y / n : y / n - 1); +} + +bool Point::operator==(const Point& other) const { + return x == other.x && y == other.y; +} + +bool Point::operator!=(const Point& other) const +{ + return !(*this == other); +} + +bool Point::operator<(const Point& other) const +{ + return y < other.y || (y == other.y && x < other.x); +} + +bool Point::operator<=(const Point& other) const +{ + return y <= other.y || (y == other.y && x <= other.x); +} + +bool Point::resembles(const Point& other) const +{ + return (other.x == -1 || x == other.x) && + (other.y == -1 || y == other.y); +} + +Point::operator QPoint() const +{ + return QPoint(x,y); +} + +Point Point::normalizeInfinity() const +{ + return Point( + normalizeInfinityHelper(x), + normalizeInfinityHelper(y) + ); +} + +double Point::norm() const +{ + return sqrt((double)(x*x + y*y)); +} + +int Point::normalizeInfinityHelper(int n) const +{ + if (n == 0) + return 0; + else + return n > 0 ? 1 : -1; +} + +QDebug operator<<(QDebug dbg, const Point& p) +{ + dbg << "(" << (p.x == -1 ? "?" : qPrintable(QString::number(p.x))) + << ", " << (p.y == -1 ? "?" : qPrintable(QString::number(p.y))) << ")"; + return dbg; +} + + + diff --git a/src/core/point.h b/src/core/point.h new file mode 100644 index 0000000..8fe209e --- /dev/null +++ b/src/core/point.h @@ -0,0 +1,69 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef POINT_H +#define POINT_H + +#include +#include +#include + +#include "export.h" + +struct TAGUA_EXPORT Point { + static Point invalid() { return Point(-1, -1); } + bool valid() const { return x != -1 && y != -1; } + + int x, y; + Point(int x, int y); + Point(); + + QString row(int ysize) const; + QString numcol(int xsize) const; + QString col() const; + QString alpharow() const; + + explicit Point(const QString& str, int ysize); + explicit Point(const QPoint&); + + QString toString(int ysize) const; + + Point operator+(const Point& other) const; + Point operator+=(const Point& other); + Point operator-() const; + Point operator-(const Point& other) const; + Point operator*(int n) const; + Point operator/(int n) const; + Point div(int n) const; + bool operator==(const Point& other) const; + bool operator!=(const Point& other) const; + bool operator<(const Point& other) const; + bool operator<=(const Point& other) const; + + // true if for each coordinate of other, either it + // is -1, or it is equal to the corresponding + // coordinate of this + bool resembles(const Point& other) const; + + operator QPoint() const; + + Point normalizeInfinity() const; + double norm() const; + +private: + int normalizeInfinityHelper(int n) const; +}; + +Q_DECLARE_METATYPE(Point) + +TAGUA_EXPORT QDebug operator<<(QDebug, const Point&); + + +#endif // POINT_H diff --git a/src/core/policy.cpp b/src/core/policy.cpp new file mode 100644 index 0000000..bb8e0d5 --- /dev/null +++ b/src/core/policy.cpp @@ -0,0 +1,12 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "policy.h" + +IPolicy::~IPolicy() { } diff --git a/src/core/policy.h b/src/core/policy.h new file mode 100644 index 0000000..416fb33 --- /dev/null +++ b/src/core/policy.h @@ -0,0 +1,43 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__POLICY_H +#define CORE__POLICY_H + +#include "interactiontype.h" +#include "turnpolicy.h" + +class IState; +class IType; +class Point; + +/** + * @brief A policy defines what pieces are movable in a given TurnTest. + */ +class TAGUA_EXPORT IPolicy { +public: + virtual ~IPolicy(); + + /** + * @return Whether the piece in the given square can be moved. + */ + virtual InteractionType movable(const IState* state, + const TurnTest& test, + const Point& p) const = 0; + + /** + * @return Whether it is possible to drop from the given pool. + */ + virtual InteractionType droppable(const IState* state, + const TurnTest& test, + const IColor* pool) const = 0; +}; + +#endif // CORE__POLICY_H + diff --git a/src/core/pool.cpp b/src/core/pool.cpp new file mode 100644 index 0000000..0e6775f --- /dev/null +++ b/src/core/pool.cpp @@ -0,0 +1,13 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "pool.h" + +IPool::~IPool() { } diff --git a/src/core/pool.h b/src/core/pool.h new file mode 100644 index 0000000..c58809c --- /dev/null +++ b/src/core/pool.h @@ -0,0 +1,74 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__POOL_H +#define CORE__POOL_H + +class Piece; + +/** + * @brief A collection of pieces. + * + * A pool is a collection of pieces, typically displayed on the side + * of the board. Some games define special rules for moving pieces + * into and out from the pools. + */ +class IPool { +public: + virtual ~IPool(); + + virtual IPool* clone() const = 0; + + /** + * @return Whether two pools are equal, i.e. contain the same pieces. + */ + virtual bool equals(const IPool* other) const = 0; + + /** + * @return Whether this pool is empty. + */ + virtual bool empty() const = 0; + + /** + * @return The number of pieces in this pool. + */ + virtual int size() const = 0; + + /** + * Insert a new piece into the pool. + * Note that @a index is just a hint where the piece is to be + * added, and pool implementations may decide to put the piece + * at a different index. + * @returns The actual index where the newly inserted piece can be found. + */ + virtual int insert(int index, const Piece& piece) = 0; + + /** + * Retrieve a piece from the pool. + * @param index The index of the piece to retrieve. + */ + virtual Piece get(int index) const = 0; + + /** + * Delete a piece from the pool. + * @param index The index of the piece to delete. + * @returns The piece removed from the pool by this call. + */ + virtual Piece take(int index) = 0; + + /** + * Delete a piece from the pool. + * @param piece The piece to delete. + * @returns Whether the specified piece has successfully been deleted. + */ + virtual bool take(const Piece& piece) = 0; +}; + +#endif // CORE__POOL_H diff --git a/src/core/poolcollection.cpp b/src/core/poolcollection.cpp new file mode 100644 index 0000000..7597fb6 --- /dev/null +++ b/src/core/poolcollection.cpp @@ -0,0 +1,13 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "poolcollection.h" + +IPoolCollection::~IPoolCollection() { } diff --git a/src/core/poolcollection.h b/src/core/poolcollection.h new file mode 100644 index 0000000..8018dff --- /dev/null +++ b/src/core/poolcollection.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__POOL_COLLECTION_H +#define CORE__POOL_COLLECTION_H + +class IColor; +class IPool; + +/** + * @brief An association player -> pool. + */ +class IPoolCollection { +public: + virtual ~IPoolCollection(); + + virtual IPoolCollection* clone() const = 0; + + /** + * @return Whether two pool collections are equal. + */ + virtual bool equals(const IPoolCollection* other) const = 0; + + /** + * @return The pool of the given player. + */ + virtual IPool* pool(const IColor* player) = 0; + virtual const IPool* pool(const IColor* player) const = 0; +}; + +#endif // CORE__POOL_COLLECTION_H + diff --git a/src/core/poolcollection_fwd.h b/src/core/poolcollection_fwd.h new file mode 100644 index 0000000..6d902b9 --- /dev/null +++ b/src/core/poolcollection_fwd.h @@ -0,0 +1,18 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef POOLCOLLECTION_FWD_H +#define POOLCOLLECTION_FWD_H + +#include + +class IPoolCollection; +typedef boost::shared_ptr PoolCollectionPtr; + +#endif // POOLCOLLECTION_FWD_H diff --git a/src/core/promotionmanager.cpp b/src/core/promotionmanager.cpp new file mode 100644 index 0000000..bc939a8 --- /dev/null +++ b/src/core/promotionmanager.cpp @@ -0,0 +1,17 @@ +#include "promotionmanager.h" + +void PromotionManager::setPromotion(IType* from, IType* to) +{ + m_promotions[from] = to; + m_depromotions[to] = from; +} + +const IType * PromotionManager::getPromotion(const IType* p) const +{ + return m_promotions[p]; +} + +const IType * PromotionManager::getDepromotion(const IType* p) const +{ + return m_depromotions[p]; +} diff --git a/src/core/promotionmanager.h b/src/core/promotionmanager.h new file mode 100644 index 0000000..d06bc8a --- /dev/null +++ b/src/core/promotionmanager.h @@ -0,0 +1,20 @@ +#ifndef CORE__PROMOTION_MANAGER_H +#define CORE__PROMOTION_MANAGER_H + +#include + +#include "type.h" +#include "component.h" + +class TAGUA_EXPORT PromotionManager: public Component { +private: + QHash m_promotions; + QHash m_depromotions; + +public: + void setPromotion(IType* from, IType* to); + const IType * getPromotion(const IType*) const; + const IType * getDepromotion(const IType*) const; +}; + +#endif // CORE__PROMOTION_MANAGER_H diff --git a/src/core/repository.cpp b/src/core/repository.cpp new file mode 100644 index 0000000..83a270d --- /dev/null +++ b/src/core/repository.cpp @@ -0,0 +1,53 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "repository.h" + +Repository::Repository() +: m_proxy(0) { } + +void Repository::addComponent(const QString& path, ComponentPtr component) { + m_components[path] = component; +} + +ComponentPtr Repository::getComponent(const QString& path) const { + ComponentPtr res = m_components.value(path); + if (!res && m_proxy) + res = m_proxy->getComponent(path); + return res; +} + +ComponentPtr Repository::takeComponent(const QString& path) { + return m_components.take(path); +} + +Repository::ComponentMap Repository::listComponents(QString path) const { + if (!path.endsWith("/")) path += "/"; + + ComponentMap res; + ComponentMap::const_iterator it = m_components.lowerBound(path); + ComponentMap::const_iterator end = m_components.end(); + + for ( ; it != end; ++it) { + if (it.key().startsWith(path)) + res[it.key().mid(path.size())] = it.value(); + else + break; + } + + if (m_proxy) + res = res.unite(m_proxy->listComponents(path)); + + return res; +} + +void Repository::setProxy(Repository* proxy) { + m_proxy = proxy; +} diff --git a/src/core/repository.h b/src/core/repository.h new file mode 100644 index 0000000..f96454a --- /dev/null +++ b/src/core/repository.h @@ -0,0 +1,82 @@ +#ifndef CORE__REPOSITORY_H +#define CORE__REPOSITORY_H + +#include +#include +#include "component.h" +#include "export.h" + +/** + * @brief A hierarchical collection of component defining a variant. + * + * Components of a variant are maintained in a hierarchical structure + * called repository. All components have a path that uniquely identifies + * them inside a given variant. + * + * Non-leaf nodes are not actual components, and are called namespaces. + * Namespaces can be nested. + * + * Since the number of components inside a repository is not likely to + * grow over a dozen or so, there is not practical need for this structure + * to reflect its hierarchical representation, so we simply maintain all + * components inside a path -> component association. + */ +class TAGUA_EXPORT Repository { +public: + typedef QMap ComponentMap; +private: + ComponentMap m_components; + Repository* m_proxy; +public: + Repository(); + + /** + * Add a new component to the repository at the specified path. + * If a component already exists at that path, it will be silently + * overwritten. + */ + void addComponent(const QString& path, ComponentPtr component); + + /** + * Retrieve a component from a given path. + * @return The component at path @a path, or a null pointer if + * no component exists at that path. + */ + ComponentPtr getComponent(const QString& path) const; + + /** + * Remove a component from a given path. Do nothing if no + * component exists at that path. + * @return The component removed from path @a path. + */ + ComponentPtr takeComponent(const QString& path); + + /** + * Determine the list of components living inside a given namespace. + * Nested namespaces will be silently ignored. + */ + ComponentMap listComponents(QString path) const; + + /** + * Add a proxy repository, that will be queried when a component + * is not found here. + */ + void setProxy(Repository* proxy); +}; + +// template +// Interface* requestInterface(Component* component) { +// Interface* iface = dynamic_cast(component); +// if (iface) +// return iface; +// else +// return new typename Interface::Adaptor(iface); +// } + +template +Interface* requestInterface(Component* component) { + return dynamic_cast(component); +} + +#endif // CORE__REPOSITORY_H + diff --git a/src/core/state.cpp b/src/core/state.cpp new file mode 100644 index 0000000..ac3df38 --- /dev/null +++ b/src/core/state.cpp @@ -0,0 +1,13 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "state.h" + +IState::~IState() { } diff --git a/src/core/state.h b/src/core/state.h new file mode 100644 index 0000000..d587586 --- /dev/null +++ b/src/core/state.h @@ -0,0 +1,99 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__STATE_H +#define CORE__STATE_H + +#include "taguaobject.h" + +class Board; +class IBehaviour; +class IColor; +class IPoolCollection; +class Move; + +/** + * @brief The state of the game in a given moment of time. + * + * A State component encapsulates the global state of the game, i.e. + * what pieces are on the board or on the pool, and game flags like + * the en-passant square for chess. + * + * A State component also provides methods to setup the initial + * configuration and to make a move. + */ +class TAGUA_EXPORT IState { +public: + virtual ~IState(); + + virtual IState* clone() const = 0; + + /** + * Setup the initial configuration of pieces and reset all flags. + */ + virtual void setup() = 0; + + /** + * @return The piece board. + */ + virtual const Board* board() const = 0; + virtual Board* board() = 0; + + /** + * @return The player who plays next. + */ + virtual const IColor* turn() const = 0; + + /** + * Change the current turn. + */ + virtual void setTurn(const IColor* turn) = 0; + + /** + * @return Whether two states are equal. + */ + virtual bool equals(IState* other) const = 0; + + /** + * Make this state equal to the given one. + */ + virtual void assign(const IState* other) = 0; + + /** + * Play a move. + */ + virtual void move(const Move& move) = 0; + + /** + * @return Current flags. + */ + virtual TaguaObject* flags() = 0; + virtual const TaguaObject* flags() const = 0; + + /** + * @return The absolute index of the n-th rank for a given player. + */ + virtual int rank(int n, const IColor* turn) const = 0; + + /** + * @return The pool collection associated to this state. + */ + virtual const IPoolCollection* pools() const = 0; + virtual IPoolCollection* pools() = 0; + + /** + * @return The behaviour object associated to this state. + */ + virtual const IBehaviour* behaviour() const = 0; + + virtual void setDelegator(IState* state) = 0; +}; + +#endif // CORE__STATE_H diff --git a/src/core/state_fwd.h b/src/core/state_fwd.h new file mode 100644 index 0000000..2b5426b --- /dev/null +++ b/src/core/state_fwd.h @@ -0,0 +1,18 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__STATE_FWD_H +#define CORE__STATE_FWD_H + +#include + +class IState; +typedef boost::shared_ptr StatePtr; + +#endif // CORE__STATE_FWD_H diff --git a/src/core/statefactory.cpp b/src/core/statefactory.cpp new file mode 100644 index 0000000..408cfcb --- /dev/null +++ b/src/core/statefactory.cpp @@ -0,0 +1,13 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "statefactory.h" + +IStateFactory::~IStateFactory() { } diff --git a/src/core/statefactory.h b/src/core/statefactory.h new file mode 100644 index 0000000..0bfea72 --- /dev/null +++ b/src/core/statefactory.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__STATE_FACTORY_H +#define CORE__STATE_FACTORY_H + +#include "export.h" + +class IState; + +class TAGUA_EXPORT IStateFactory { +public: + virtual ~IStateFactory(); + + /** + * Create an empty state for this game. An empty state + * is usually a board with no pieces, empty pools and + * flags in their default values. + * An empty state is generally not the initial state for + * a game. + * + * To get the initial state, call reset on an + * empty state. + * + * @return The newly created state. + * @sa IState::reset + */ + virtual IState* createState() const = 0; +}; + +#endif // CORE__STATE_FACTORY_H + diff --git a/src/core/tagua-variant.desktop b/src/core/tagua-variant.desktop new file mode 100644 index 0000000..20ac970 --- /dev/null +++ b/src/core/tagua-variant.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=ServiceType +X-KDE-ServiceType=Tagua/Variant +Comment=Tagua Variant + +[PropertyDef::X-Tagua-Proxy] +Type=QString + +[PropertyDef::X-Tagua-Hidden] +Type=bool diff --git a/src/core/taguaapi.cpp b/src/core/taguaapi.cpp new file mode 100644 index 0000000..78fadff --- /dev/null +++ b/src/core/taguaapi.cpp @@ -0,0 +1,14 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "taguaapi.h" + +TaguaAPI::~TaguaAPI() { } + diff --git a/src/core/taguaapi.h b/src/core/taguaapi.h new file mode 100644 index 0000000..a6076a9 --- /dev/null +++ b/src/core/taguaapi.h @@ -0,0 +1,116 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__TAGUAAPI_H +#define CORE__TAGUAAPI_H + +#include +#include +#include "animation_fwd.h" +#include "namedsprite.h" +#include "point.h" + +typedef boost::shared_ptr SpritePtr; +class IColor; +class IState; +class Piece; + +/** + * This class defines the interface that will be used by the animator to modify + * tagua graphics. + */ +class TAGUA_EXPORT TaguaAPI { +public: + virtual ~TaguaAPI(); + + /** + * @return The current game state + */ + virtual const IState* state() const = 0; + + /** + * @return a sprite at the position \a index in the graphical pool. + */ + virtual NamedSprite getSprite(const Point& p) = 0; + + /** + * Removes a sprite at the position \a index in the graphical pool. + * @return the newly created sprite. + */ + virtual NamedSprite takeSprite(const Point& p) = 0; + + /** + * Sets the piece at the position @a index in the graphical pool. + * @return the newly created sprite. + */ + virtual NamedSprite setPiece(const Point& p, const Piece& piece, bool show) = 0; + + /** + * Create a new piece, but do not add it to the graphical system. + * @return the newly created sprite. + */ + virtual NamedSprite createPiece(const Point& p, const Piece& piece, bool show) = 0; + + /** + * Sets the sprite at the position @a index in the graphical pool. + * @return the newly created sprite. + */ + virtual void setSprite(const Point& p, const NamedSprite& sprite) = 0; + + /** + * @return how many sprites are contained in the pool + */ + virtual int poolSize(int pool) = 0; + + /** + * @return the sprite at the position @a index in the graphical pool. + */ + virtual NamedSprite getPoolSprite(const IColor* pool, int index) = 0; + + /** + * Removes the sprite at the position @a index in the graphical pool. + */ + virtual void removePoolSprite(const IColor* pool, int index) = 0; + + /** + * Removes the sprite at the position @a index in the graphical pool (only for drops). + * @return the removed sprite. + */ + virtual NamedSprite takePoolSprite(const IColor* pool, int index) = 0; + + /** + * Inserts a sprite at the position @a index in the graphical pool. + * @return the newly created sprite. + */ + virtual NamedSprite insertPoolPiece(const IColor* pool, int index, const Piece& piece) = 0; + + /** + * @return the piece of the pool that has been dropped, or (0,-1) + */ + virtual std::pair droppedPoolPiece() = 0; + + virtual AnimationPtr group(const QString& flags) const = 0; + virtual AnimationPtr appear(const NamedSprite& sprite, + const QString& flags) const = 0; + virtual AnimationPtr disappear(const NamedSprite& sprite, + const QString& flags) const = 0; + virtual AnimationPtr move(const NamedSprite& sprite, + const Point& destination, + const QString& flags) const = 0; + virtual AnimationPtr move(const NamedSprite& sprite, + int pool, + int destination, + const QString& flags) const = 0; + virtual AnimationPtr morph(const NamedSprite& sprite1, + const NamedSprite& sprite2, + const QString& flags) const = 0; +}; + +#endif // CORE__TAGUAAPI_H diff --git a/src/core/taguacast.h b/src/core/taguacast.h new file mode 100644 index 0000000..e2dbf1b --- /dev/null +++ b/src/core/taguacast.h @@ -0,0 +1,31 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__TAGUA_CAST_H +#define CORE__TAGUA_CAST_H + +#include + +#define CAT_AUX(x, y) x ## y +#define CAT(x, y) CAT_AUX(x, y) + +#ifdef TAGUA_DEBUG + #define TAGUA_CAST(ID, TYPE, RETVAL) \ + TYPE* ID = dynamic_cast(CAT(ID, _)); \ + if (!ID) { \ + kWarning("Mismatch!!"); \ + return RETVAL; \ + } +#else + #define TAGUA_CAST(ID, TYPE, RETVAL) \ + TYPE* ID = static_cast(CAT(ID, _)); +#endif + +#endif // CORE__TAGUA_CAST_H diff --git a/src/core/taguaobject.cpp b/src/core/taguaobject.cpp new file mode 100644 index 0000000..5179ba0 --- /dev/null +++ b/src/core/taguaobject.cpp @@ -0,0 +1,28 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "taguaobject.h" + +QVariant TaguaObject::get(const QString& key) const { + return m_prop[key]; +} + +void TaguaObject::set(const QString& key, const QVariant& value) { + m_prop[key] = value; +} + +bool TaguaObject::operator==(const TaguaObject& other) const { + return m_prop == other.m_prop; +} + +bool TaguaObject::operator!=(const TaguaObject& other) const { + return !(operator==(other)); +} + diff --git a/src/core/taguaobject.h b/src/core/taguaobject.h new file mode 100644 index 0000000..ab8259f --- /dev/null +++ b/src/core/taguaobject.h @@ -0,0 +1,31 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__TAGUAOBJECT_H +#define CORE__TAGUAOBJECT_H + +#include +#include +#include "export.h" + +class TAGUA_EXPORT TaguaObject { +public: + typedef QMap Properties; +protected: + Properties m_prop; +public: + QVariant get(const QString& key) const; + void set(const QString& key, const QVariant& value); + + bool operator==(const TaguaObject& other) const; + bool operator!=(const TaguaObject& other) const; +}; + +#endif // CORE__TAGUAOBJECT_H diff --git a/src/core/turnpolicy.cpp b/src/core/turnpolicy.cpp new file mode 100644 index 0000000..3bf814e --- /dev/null +++ b/src/core/turnpolicy.cpp @@ -0,0 +1,59 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "turnpolicy.h" + +namespace TurnPolicy { + + Abstract::~Abstract() { } + + class Simple : public Abstract { + bool m_value; + public: + Simple(bool value) : m_value(value) { } + bool check() const { return m_value; } + }; + + Premove::~Premove() { } + + bool Collection::operator()(const IColor* turn) const { + Policies::const_iterator it = m_policies.find(turn); + if (it == m_policies.end()) { + return false; + } + else { + return it->second->check(); + } + } + + void Collection::setPolicy(const IColor* turn, const PolicyPtr& policy) { + m_policies[turn] = policy; + } + + void Collection::setSimplePolicy(const IColor* turn, bool value) { + setPolicy(turn, boost::shared_ptr(new Simple(value))); + } + + void Collection::clear() { + m_policies.clear(); + m_premove.reset(); + } + + bool Collection::premove() const { + return m_premove ? m_premove->check() : false; + } + + void Collection::setPremovePolicy(const PremovePolicyPtr& policy) { + m_premove = policy; + } + +} + + diff --git a/src/core/turnpolicy.h b/src/core/turnpolicy.h new file mode 100644 index 0000000..893efb5 --- /dev/null +++ b/src/core/turnpolicy.h @@ -0,0 +1,65 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef TURNPOLICY_H +#define TURNPOLICY_H + +#include +#include +#include "export.h" + +class IColor; + +/** + * @brief XXX + */ +namespace TurnPolicy { + + /** + * An abstract class encapsulating the user ability + * to move in a given turn. + */ + class TAGUA_EXPORT Abstract { + public: + virtual ~Abstract(); + virtual bool check() const = 0; + }; + + /** + * Premove policy. Used to check whether premoving is allowed. + * It is a global policy. + */ + class TAGUA_EXPORT Premove { + public: + virtual ~Premove(); + virtual bool check() const = 0; + }; + + class TAGUA_EXPORT Collection { + typedef boost::shared_ptr PolicyPtr; + typedef std::map Policies; + typedef boost::shared_ptr PremovePolicyPtr; + Policies m_policies; + + PremovePolicyPtr m_premove; + public: + bool operator()(const IColor* turn) const; + void setPolicy(const IColor* turn, const PolicyPtr& policy); + void setSimplePolicy(const IColor* turn, bool value); + void clear(); + + void setPremovePolicy(const PremovePolicyPtr& policy); + bool premove() const; + }; +} + +typedef TurnPolicy::Collection TurnTest; + +#endif // TURNPOLICY_H diff --git a/src/core/type.cpp b/src/core/type.cpp new file mode 100644 index 0000000..c8f51e4 --- /dev/null +++ b/src/core/type.cpp @@ -0,0 +1,14 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "type.h" + +IType::~IType() { } + diff --git a/src/core/type.h b/src/core/type.h new file mode 100644 index 0000000..7c264a5 --- /dev/null +++ b/src/core/type.h @@ -0,0 +1,55 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__TYPE_H +#define CORE__TYPE_H + +#include +#include "export.h" + +class Piece; +class Move; +class IState; + +/** + * @brief A piece type. + * + * Piece types are associated to graphical representation of pieces, + * and to movement rules. + */ +class TAGUA_EXPORT IType { +public: + virtual ~IType(); + + /** + * @return The name of this type. + */ + virtual QString name() const = 0; + + /** + * Check if this piece type can perform a given move. + * @param piece A piece of this type. + * @param target The piece that would be captured by the move. + * @param move The move to be checked. + * @param state The state in which @a move is to be played. + */ + virtual bool canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const = 0; + + /** + * A symbolic index associated to this type. + * This is not required to uniquely identify the type. + * It can be used to sort a collection of types. + */ + virtual int index() const = 0; +}; + +#endif // CORE__TYPE_H + diff --git a/src/core/validator.cpp b/src/core/validator.cpp new file mode 100644 index 0000000..a8b2a9a --- /dev/null +++ b/src/core/validator.cpp @@ -0,0 +1,14 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "validator.h" + +IValidator::~IValidator() { } + diff --git a/src/core/validator.h b/src/core/validator.h new file mode 100644 index 0000000..1cb357b --- /dev/null +++ b/src/core/validator.h @@ -0,0 +1,61 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__VALIDATOR_H +#define CORE__VALIDATOR_H + +#include "piece.h" +#include "point.h" + +class IState; +class Move; + +/** + * @brief A component to check legality of moves. + */ +class TAGUA_EXPORT IValidator { +public: + virtual ~IValidator(); + + /** + * A move is pseudolegal if it obeys all rules + * except those regarding king safety. + * @returns Whether the given move is pseudolegal. + */ + virtual bool pseudolegal(const IState* state, Move& move) const = 0; + + /** + * A move if legal if it obeys all the rules of the game. + * @returns Whether the given move is legal. + */ + virtual bool legal(const IState* state, Move& move) const = 0; + + /** + * Check if some piece of @a player attacks the piece @a target + * on the given square. + * If the @a target parameter is not given, whatever piece is in + * the specified square is considered the target. + * @param state The reference state of the game. + * @param player The attacking player. + * @param square The destination square of the attack. + * @param target An optional piece to be considered as the target for the attack. + */ + virtual bool attacks(const IState* state, const IColor* player, + const Point& square, const Piece& target = Piece()) const = 0; + + /** + * @return The owner of the moving piece. + */ + virtual const IColor* mover(const IState* state, const Move& move) const = 0; + + virtual void setDelegator(IValidator* delegator) = 0; +}; + +#endif // CORE__VALIDATOR_H diff --git a/src/core/variantloader.cpp b/src/core/variantloader.cpp new file mode 100644 index 0000000..744c782 --- /dev/null +++ b/src/core/variantloader.cpp @@ -0,0 +1,14 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "variantloader.h" + +IVariantLoader::~IVariantLoader() { } + + diff --git a/src/core/variantloader.h b/src/core/variantloader.h new file mode 100644 index 0000000..c52c5b1 --- /dev/null +++ b/src/core/variantloader.h @@ -0,0 +1,25 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef VARIANTLOADER_H +#define VARIANTLOADER_H + +#include +#include "export.h" + +class Repository; + +class TAGUA_EXPORT IVariantLoader { +public: + virtual ~IVariantLoader(); + + virtual Repository* getRepository(const QString& variant) = 0; +}; + +#endif // VARIANTLOADER_H diff --git a/src/crash.cpp b/src/crash.cpp new file mode 100644 index 0000000..361fcd9 --- /dev/null +++ b/src/crash.cpp @@ -0,0 +1,40 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include "crash.h" + +#if defined(Q_OS_UNIX) && defined(TAGUA_DEBUG) + +#include +#include +#include +#include +#include + +static void handler(int) { + printf("Sange & Crasha!!!!\n"); + printf("I'm sorry, i crashed.\n"); + printf("Now run somewhere\n"); + printf(" gdb attach %d\n", getpid() ); + exit(0); +} + + +void CrashHandler::install() { + signal(SIGSEGV, handler); + signal(SIGABRT, handler); +} + +#else + +void CrashHandler::install() { } + +#endif diff --git a/src/crash.h b/src/crash.h new file mode 100644 index 0000000..153373b --- /dev/null +++ b/src/crash.h @@ -0,0 +1,21 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CRASH_H +#define CRASH_H + +#include "export.h" + +class TAGUA_EXPORT CrashHandler { +public: + static void install(); +}; + +#endif //CRASH_H diff --git a/src/decoratedmove.cpp b/src/decoratedmove.cpp new file mode 100644 index 0000000..89ae911 --- /dev/null +++ b/src/decoratedmove.cpp @@ -0,0 +1,54 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "decoratedmove.h" + +#include +#include + +#include "common.h" + +DecoratedMove::DecoratedMove() { } + +DecoratedMove::DecoratedMove(const QString& str) { + load(str); +} + +void DecoratedMove::load(const QString& str) { + static QRegExp figurine("\\{[^}]*\\}"); + int offset = 0; + int begin; + while ((begin = figurine.indexIn(str, offset)) != -1) { + if (begin > offset) { + m_elements.push_back(str.mid(offset, begin - offset)); + } + m_elements.push_back(MovePart(str.mid(begin + 1, figurine.matchedLength() - 2), MovePart::Figurine)); + offset = begin + figurine.matchedLength(); + } + + if (offset < str.length()) + m_elements.push_back(str.mid(offset)); +} + +void DecoratedMove::push_back(const MovePart& part) { + m_elements.push_back(part); +} + +MovePart DecoratedMove::operator[](int index) const { + return m_elements[index]; +} + +unsigned int DecoratedMove::size() const { + return m_elements.size(); +} + + + + diff --git a/src/decoratedmove.h b/src/decoratedmove.h new file mode 100644 index 0000000..93a161c --- /dev/null +++ b/src/decoratedmove.h @@ -0,0 +1,51 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef DECORATEDMOVE_H +#define DECORATEDMOVE_H + +#include +#include + +#include "export.h" + +class MovePart { +public: + enum Type { + Text, + Figurine + }; + + QString m_string; + Type m_type; + + MovePart(const QString& s, Type t = Text) + : m_string(s), m_type(t) {} +}; + +class TAGUA_EXPORT DecoratedMove { + typedef QList ElementList; + + ElementList m_elements; +public: + DecoratedMove(); + explicit DecoratedMove(const QString& str); + void load(const QString& str); + + MovePart operator[](int index) const; + unsigned int size() const; + + // deprecated methods + void push_back(const MovePart& part); +}; + + + +#endif //DECORATEDMOVE_H diff --git a/src/doxy/.gitignore b/src/doxy/.gitignore new file mode 100644 index 0000000..c574d07 --- /dev/null +++ b/src/doxy/.gitignore @@ -0,0 +1 @@ +en diff --git a/src/doxy/bottom1.png b/src/doxy/bottom1.png new file mode 100644 index 0000000000000000000000000000000000000000..cf26bf4f4ed44290b357abb92199188c9ac05723 GIT binary patch literal 168 zcwXxa@N?(olHy`uVBq!ia0vp^Y(Q+y0U{$bep`bClDyqr82*Fcg1yTp14TFsJR*x3 z7`O#Nn6W-3ej-qiy~NYkmHiTvuz(5Io9V1PKp|647srr_Imv(i|NmdlrqjSV`@xDM zD~@cKlEA~wt*k3;aBqM8d>2{!`hQ1OC9_1^Mg0oUV`RvCt@4wtYS%NM0Sun5elF{r G5}E+`{W8h` literal 0 HcwPel00001 diff --git a/src/doxy/bottom2.png b/src/doxy/bottom2.png new file mode 100644 index 0000000000000000000000000000000000000000..0515155389b2138ac849d6fcab533391034a5636 GIT binary patch literal 6979 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 kM=3I*+}>Q0eT{Yee 2002 + + This script is made available under the terms of the General Public License. + You should have received a copy of the GNU General Public License + along with this software; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +********************************************************************************/ + +body { + margin: 0px; + color: black; + background-color: white; +} + +a { + color: #0000C0; +} + +/* decorative header */ +div.header { + background-color: #298730; + background-image: url("headerbg.png"); +} +div.header table { + padding: 0px; + margin: 0px +} +div.header table tr td h1 { + color: white; + font: bold 20pt courier; + padding-top: 0.5em; +} + +/* global lind buttons at bottom of decorative header */ +table.links { + float: right; + border:0; + padding-left:1px +} +table.links td a { + color: white +} +table.links td:hover { + background-color:#0C4293; +} +table.links td a:hover { + color: white; + background-color:#0C4293 +} +table.links td { + border-left: 1px solid #4A81D5; + /*padding: 0px 12px 0px 12px;*/ + background-color:#0E4EAF; + font-size:9pt; + /*font-weight: bold;*/ +} + +/* little gradient below decorative/navigation header */ +div#hgrad { + height: 12px; + background-image: url("grad.png"); +} + +/* contents part of page */ +div.text { + margin: 12px +} + +/* contents, mostly equivalent to the default doxugen style sheet */ +H1 { text-align: center; } +CAPTION { font-weight: bold } +A.qindex {} +A.qindexRef {} +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code { text-decoration: none; font-weight: normal; color: #4444ee } +A.codeRef { font-weight: normal; color: #4444ee } +A:hover { text-decoration: none; background-color: #ececec } +DL.el { margin-left: -1cm } +DIV.fragment { width: 100%; border: none; background-color: #ffffee; padding: 12px } +DIV.ah { background-color: navy; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TABLE.mdTable { background-color: #f8f8f8; border: .2em solid #d7d7d7; } +TD.mdRow { padding: 8px 20px; } +TD.md { font-weight: bold; } +TD.mdname1 { font-weight: bold; color: #602020; } +TD.mdname { font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold } +DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } + +BODY { background: white } + +TD.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border: solid .1em white; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #f8f8f8; +} +TD.memItemRight { + padding: 1px 0px 0px 8px; + margin: 4px; + border: solid .1em white; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #f8f8f8; +} + +TD.indexkey { + background-color: #e0eef8; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} +TD.indexvalue { + background-color: #e0eef8; + font-style: normal; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} + +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } + + + +/* kde decoration at bottom */ +div#bottom-nav { + position : relative; + background-color: transparent; + /*width : 100%;*/ + /*top: 0px; + left: 0px; + right: 0px; + margin-left: 0px; + margin-right:0px;*/ + margin-top: 12px; + height: 50px; + background-image : url('bottom1.png'); + background-repeat : repeat-x; +} + +/* copyright etc at bottom */ +div.bottom { + margin: 12px; + font-size: 9pt; + text-align: right; +} +div.bottom a { + color: #aaaaaa +} + +/* following defs borrowed from KDE4 */ + +#content td.memItemLeft { +text-align: right; +} + +.groupHeader { +font-size: large; +color: #418ADE; +} + +#content h2 { margin-left: 0px; } + +table.memname { +empty-cells: show; +background-color: #f8f8f8; +outline: .2em solid #d7d7d7; +margin-top: 3em; +margin-bottom: 1em; +} + +td.memname { +white-space: nowrap; +font-weight: bold; +} + +.paramtype { +white-space: nowrap; +font-weight: bold; +} + +.paramname { +white-space: nowrap; +font-weight: bold; +} + +.paramkey { +text-align: right; +} + + +div.bic { +border: 2px solid #E72300; +background: #F6CFDD; +padding: 0.5ex 1em; +} + +div.memitem { +} + +div.memproto { +/*background: #F9F9F9; +border: 1px solid #AAAAAA;*/ +font-weight: bold; +} + +div.memproto td { +white-space: nowrap; +padding:0; +margin:0; +} + +table.memname { +border-spacing: 0; +border-collapse:collapse; +} + +td.paramtype { +font-family:monospace; +} diff --git a/src/doxy/footer.html b/src/doxy/footer.html new file mode 100644 index 0000000..f7f0210 --- /dev/null +++ b/src/doxy/footer.html @@ -0,0 +1,14 @@ + +

    +KDE Logo +
    +
    +This file is part of the documentation for $projectname $projectnumber. +
    +
    +Documentation copyright © 1998-2005 the KDevelop developers.
    +Generated on $datetime by +doxygen $doxygenversion written by Dimitri van Heesch, © 1997-2005 +
    + + diff --git a/src/doxy/grad.png b/src/doxy/grad.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c7f40932699120bf742324a1bd590495809151 GIT binary patch literal 248 zcwXxa@N?(olHy`uVBq!ia0vp^AT~b>GmzB3=xht5SkfJR9T^xl_H+M9WCikd1AIbU z|NsBb!omV17cE*86cDs)*RBHx4xBuB^77@&_wV0-`SRtbPoIAL`0?k@pMU@UIXtTo z1Zrd~3GxeOaCmkj4a7p1a3$`Ahkcp>@V@SoESyqD^>bP0l+XkKGAmON literal 0 HcwPel00001 diff --git a/src/doxy/header.html b/src/doxy/header.html new file mode 100644 index 0000000..3fcdcd6 --- /dev/null +++ b/src/doxy/header.html @@ -0,0 +1,34 @@ + + + + + $title ($projectname) + + +
    + + + + + + +
    +KDE gears + +

    $projectname API Documentation

    +
    + + + + + + + + + + + +
    +
    +
    +
    diff --git a/src/doxy/headerbg.png b/src/doxy/headerbg.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7481fe8926b0b2bd03b3103d94e94921adb93c GIT binary patch literal 493 zcwXxa@N?(olHy`uVBq!ia0vp^3xK$SgAGWQF8Y}dq*&4&eH|GXHuiJ>Nn{1`*^<27 zT^Rm@;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv`^OrpXX3}+<*PBAbrW_h|e zhE&XXd&N=IA%KCw@m_IppfkJUkt0p00009a7bBm000XR z000XR0j(pwbpQY$07*naRCt`-onMF?*S+UIffAg8HdMg~xAOkg*<_aRX(Y*x~Pk^GSL_`z2#gW?&3 z&9uQnCD1@MXrKzzPz7%215=QFICV~)s;-`q0+#!3fv7pv_2-=5@Av(Ef9Ll*Rr;3q z$|rxJkl+YF0)p9Fd0qiHV6L0Fx6VTxaJ_Z^+Ifxsn0_|eXwZUIScid7ip|bsxtkofD1UyAF(c~x@UL3(JnhH3^E&StovEN(`+}8D;mc|!zhHcmowUrh2R<2wR;rH zXxjRr&noKD%1v7tW8T>7<0)+>Z|~(H`vVZ%M6N;JjK?*R)kL_lv-mBe(riQJ;GZy=Y#Zd=N)T_?=>vk)xHJq1$;b`eaFxY|gZ(nzKdtlMn}u4v34 zxQPh+HiCM)xo<~ih0vO3FiM?u{=rDKJxg1^4@B~#BDjIvnMj`X9QSYp=epfMaN5`( z&asChc_xAnLvoE%+mL6sE#b{X>LG1|jE1Gw`^&U4tvzP&mD1Wcn)0un zNI;0g5&Yyim>C@AJOXkLYBz*`AhMgko9EGjWQ|}d<7q>*g{+y;wdEP=99p*bB^uEIM3YwNPRq0 z(Z3}p3HYWxPaMn)VYDE*7S*;PyNzQHLTU~9AU=AP<>!_uJsna`NYb3>+iHdc!C=oRbgSb1-rn zF@}DgmcqXe4z_)}g}f4S*_jHf*KR%D^y0EVt$fS_0 zzqCg0WXR5E5&b`Jms1ZtIBBBh@OZ$=3q694Pc)3#xfde~@Hzro2a-3&YYFRDUKDNuKBA z*S?E5cXNuPvBo!rT+2hvETA03y;i_=5P~akJSh%7K#4OmNH$W-%8*hfY981UUFT^| zGRp850Tp^uXisXWex@8asq|qgOB^wz00i^h7bbI5(4l#o5-tYB!^C(DP)1Q%q{Thh z$eTc+6iNY;LMlrwAXxASx&hb!)K^Ne`crYzG$+@PYsC_FhUzfxokH^5aquC^R7jde zvWb=tKuYzyy3aemd54W3Zt&(my-C;&6!L9jv7V=uDsYu@_3;9v%#j65#u-w=<@ay! z?(eRW=eZK(E1wu8pYLoU1YFHGY8-oBTt{?Vu8uYg^3Ho#lmR(#b$sEmkt+dr?l`y> z6}Lyz(>dSi`S27cXg4l3B0!wEN&lm>tle562}AO)a^zSkEgNS_c?~63#w1M|(APrj zsON9r9vJ0To2How6z~0p;#>Ms{$~nlszfkviwRRSB^8T zytm2r=i3M&$j6m2c&~g?6Sd#<$wtZ4_I} zQX)En3$L8VTkuUFrLNN)oB@JdHr=s>T+7|9bBWClw-CZ*`P)l~=%<8>A<_Me=uSlM znUJ-GOWgQ)6M-N+F`(D$At&m&@m`Gh_5sMXt4Kzv^TxsZ5^+RS2WKK#4@TDKyRteD zOMy+)+U-iw0&gMU!nyNhzy;odkL##;aAia;Qci09vNv(==2U;rcdoE`Yd|_m5sqNz zGgv#dLjEu(-c6x^csIfK0(y%*BvL82G^(vnx8TgpM@DYN@s)AU2L~T%BG^K%9Z*?Z zWCuXnecK8A=GIhpWdQ2@WRxQ1glwF{K7_{ude8K%z;B|ikycbs^PbgUK{6N&7?vCh zkdHF9w+Hl|=_z9pKC;M&cVl`>J@uT4M2;o>Klc%5Zd%cEW!wiLx2e?m;NX1;NA!=g zqG_v*G|3G;XVmA{mDg0}bXy3IB#qhnY=?L^BIpMAo=0%htCS`sda6{5>Kn?n>0@nj ziOoBM+Eh&fNt)q#3CqtdvGc_M;rJwZMsET<1?)rr)4oD3hah(f!BESXHIxnC6bDZs z*g|fDgDI6O9AO@&myYVrOa)XmMbvp%7LsS5S?1XjJudyrC3+`&tbJ!yA-Ry1&}2QT zmaPa@J$&7}&W+nU#zUBK2sQY4nBu?S6CMkR_hP(`Z;UqDjgVt??|Np71ES|rnL;aL z-Z;2CT_4n!H<7CpsxPC?xxjhvI(eQWgy8D<)mG)&n=I3s@$Oyvx3;-^FCres^l#lV z!CLQ`koA{ODGn|s(+Ph2eq}$R`w{slRb#ObOxc#jgk+czo(ReF3EqN>=L&@9A&9O1 z9gN&cPSi4A^T)x>D7vV)7(|JTO8NFpH^gP~aZca4h?J7#VL}iDHKbOqt4+xgAzZwp zg0p8f5W*#X5EJjlte;v#bYLozrLSw=$AOK`Wj1fCe6$drQK~V{Ld~<2QA%*kr@QFm zcLZ`@A|K{>-2me3Qhg9w?Mi5u}S;na((qnq% zSwJo&gU<(Sez-|Co}f8CA4}5Tyi1bjZ2WMYwHH^^u*#sWO1@OvhPXn1_pTAV?swSj zs(y9^ah@R@zkH5R$_0{!~mK1eQKyMgZugm6uuHNB)(^(i0c&UIzRvut3=fPB*TSdT?vTIc(>MkR?9}(S&DrC#b zJ%|E^!bVBFzXEJlL0b3qGPFO(`;1@RcABLvAC= zo?i|w=fS$uIOSkXXDfGTPl48*%k;m9YQnCfRkic<{BtiM%O|Y9uuPhy0AyoHl4fjw z8IkP8RS+f8_)UfiDD}5CmP{Oab#eFX!?uqC-^$ z(?&@(&!y3}e>cdTTMjN-PBz_iYl4*p#1GV5v-ez&@K^|_peo*rP5Q3+P{WOdVCT+& z<>z{2d4`vJqz`ktM?L!6TLiw3=m>87DXRvp>%yjl2zgdcpQPm$Yq@i;G+Ol!AwUSl zy@ezjE7ZG=Oa4`c-|@-v3G7?UU-1+2S>}c7V3IQDP(VOkE)4ddLp=*?z z1Suij%jkuHN)0*!(Gjeztg3*l*CXh9cpbl7kzu=O6(c0$ zjLknS^N07Ymm_ga#;scZhf2YP?zs}%G?K0T zTywBfxj!g5xD34P;7T~^-@0>|8+!>9lC4j3HQya2)}X8@MQPc7*GC{oMhU`kkw7*| z$-6#Y8QHpyOT3qmj1uC#grFNJ&_S8Wa?7HBHOQdrasJFY`B+WA(i)P~ej+6t5p;cz ze4N9+BpJ!7ZtV!Nu|%)6kE6s2GAp+^ow1sZp68T<>r)Op*-hAO=ufIvX>zieJCUoPmpIha-5-JGFi?^OUo|uay7Li-OITCkzQIW zS$$y@Z@~j$8(H~0DT(hVES(hUO+f@Q&y~Sg?pFn8Iq}fWM^{R&<)&*0w&Y`{XqgiZ zwrxTqxrto8Z8(?N+>I?uwE`+@id2;z%Ydj{5LXRa2`kHULIS*_%C&k&J;YHD-}4EN zb@3K_d{>m*E12vn+s{W^oIP`v^FKaMG#K#iZ{8*7hGnov*)Jc-1mU=3c~1V7;^N5| zvhf60Pan$u`W@(hxihtR&nUSTTg>2KD?pta4i*Nn_4#G9Sa7ksN&i-al)1IA%ri>X zmMN{aS5|?-VUzid;NC>hI%zgJOYBB zI0skrUYm=nO+O^M9}(>;;c2&FD-)|-31(udMUw|E6e$Q%x{oqWA5UQ4D;FI=81{(w z64Ep+#niq<(GGERmn-kxKo-(0&Cvms*YRqdi-apO8nGN;I>0Uw{$9TR^lBW0_!TJBV zK^S)NIxbiL)K{F33yvT-?jgU*=^pLkdp_QRBu!LdL%0GQ7f-;}=Zbs1S8keQjv8wv z2Z2NuqLNV!xsQfmBflrd!S#!p+v^M0+5E7t)*hFPZNF&cdp=&rBOb;LG)E>xM(D6;7qZDl#r=NN9DM-FD6YE4!n zJt-U*K1gvzm5`?>uP)tFHp=ikkLBl|Wg;o-w=RB1Af8eguIPSRzDv}?)g@Z|r#w}{ z+e>T86%OPpSJ?h+8!07&F9+;=u|w}fNZ|QgeeXJ+=i>P)|G0B6CRhmYyF%rh3&~=* zsEn~A$Q)QYxmYfZ6$sZQf0#}oc6xac#{JW#Un2w*2iwSXZu)t z^gOQ|ykAApZJU&myZ7!Q$C6+%Bs>;!_fCZC33?~g!nNp5WC_n>^*gHw;StA)a=$g? zQYH4$(X8U^U?Ct))2ToYfS0c;&Ij^q-!}##Is&hJ?Zof+Q0AN`db;$K$1u(jPvzyH z1u|3BEFlE0fZo$9^ui^CxQ<>@3*dL)-QikY9#iw)1_xWxoDU8@Qa{Pwgah5wuS4QvW`A0w=$8Cj}p4wF5!c>=sn%T z_k6V^D9;$iLv}vjA$YFG#+eOzPpd*lk|reiy9_=b;CBVRXP%`Scq)mK=d7?qJd8=x z99hUJfCCbk@(@7n{i>RUx;Qi?%pJ1y2dxS;7@4H(nMPvOMSNAFq&&b6!2SQI!y% z>oI(guyk^Xi$A$Q;E8H26>0%rmL_a}HsJb4eYW2}jX3iG&8<0mXghBIK80W{)Uv;G z!@=T+opzgsdp+k|DP0fzb?-XcgQ%S6DmPPCE`XYonju*8XvO;(zx>skoc_V-YDL99 zO1b4A{e^(VUI~Gm(^Bzs3zECju$LzbTD8KKKU5-tQ>eC<5hSn`K!-#1ySS;3sW)#kXy12u(P<<94agUff5 zR0_^kavk=y>dPA!k8RSwoz<0IfY)(BK$ggvZrKc8VhRmLxd4+1 zJKI~TqU5Md+TD8t-uiEElkTNe)u;3bxy;1l@9_2dG3wccII0Jfwf? z7O$UMw}e~@-&nkg%Cma)DGTz3~tkUgvNz;^gcvnT? zg`~H*NO0UMixd-rg@B;zGaL>{Mj3HDRPRIqo+s!X3oWBn2;Thjw)$jJi*oH_O(C0O zg#;^#u76*9&N$eV2un_>y-jB!S0hH>ULv_6&$9IJ?OG9_w%Kmk+`oQGGD^7dzU0+& zX9>a(CQ8Xm&nq@kz0M$e5Ne??vk_>{k&0usI z4^%-c7gx%zptpb3k&O8lv1+&=Pfor+T_%! zHP*hfYLr_=|AJ&M=IZ;KBzq~#FZ4LIvO?hbwdi?g5b?KfzC$|FpFFI}gUzi?v8HX! z25cnZ2tN3S9^e1Pz?|P4yFqrN)cAFA@VC5kpZrDII-kMC+AUY_<}_WhuCmy(LTU!n z+G$Im8{#s*|L?zsj=(Ld?__~2^S~MzEpPlgW$jnWN&>R{cp4KXW63}K)4Obbyj}IB zTwG`OVb)etwh*n#rGT6Nb(!zJx%G$~`t|S2OqTAX7FyYTr$VI8+}K=EQ+H#kVASe} zTDx-RvL-a)K>x!&H-50mt7pzLAva%>b+P-W+@Sr{9nY~!ctRV2G`Va6T>q#~|I>j{ zSaa2g?nCpKZr6}(jJ-0hDt4JS4nAVt+)}1$>j24`ayS^J>c>^{LCX!zG6kK>6&@7T zDn?lVFJ0m4wRc%tSs_>m41$x9dhIhGC1hDnnpYn#HNxwtcbWoUt*lg~M`==^Q*(P7nOcda-EiB}fmp*$qmfK?`id! z|G~YeQc?q*vr?07znkdUiaF{C*5|b&_({)$D-LeqUVHtpEu6X~30f_!5ml=}TX(Y& zFJ(>9z38X(dcA5*6)K_Ob_887!0k|a0QH+%Et!#za`kultx4eu(gz7!cOvUs(l=X` zdC;`T4z6ZJ&)S{NEeD%L?=z6AEyKK{(}G}qT-2`DnP+YJqT*nvr!UKM;*-Bc4t~n1 z7gt#O-YQG#4Q*Uh@2@p6q>HN zS^jKQt|_?KM%@gs=A47Yfe5ZR*0=?OTU!ilSROi>;(aF1n83>an$`yUhYkXLRRPG_8)St3>(yC{pi3 zC8LCJF(k`#Hb2}{Q8Y?O@ouaFtd37uzK0y`Mz9a@USgEjmYHh0<*CTpu{;!Q2$l_m zKN^CcY&}??-pEDMK=9O8RvUX0Ra;RcjZP^c%KG4~wyH-96ASFziFoH%Zv&9!(pa!- zJa9VwIDLXBL>Wa(l2Q5D#1eV-|K-q@ zL7OTMYSB6MOjQ%PZ5(Wu3bj(_lY<+Go&CR!Xp6GrU)$mv$ZZaK3b|Hh%LICmzNp?d zkbnFxd7d*I4tcb#B#xHIx$-hX)zggewjj6kY|~Yv27;-^WyU)X9IWfNbtE_UOj&BR z;H)`MJ_N~A9QiCYaXpKsj58> z99+vqH<4@2i)V6h17J3o7Fi)&rg{_Y13YSD69puN9asU7V z4@pEpRLVfEyf3q23(S4mR=Ttycp?u*aAh3dL@v4o!A4lKIM`UMh3w){_J19c4{vMt z?op)`1$NZ0JV5pNiJ6F!-8Dw9T(Ian)|YHuvmw&<2i}!C@Q7S z7YFOZjd`(MZK@%;!U*jgtlQP`uZMFR2u35wHowO}Zrk4UzfyiRZ?5DZ5afqM(ce4= zAF(+`s+W#hGg|s#?HpXSp8%5EIJdcfTm-jqa5=u3u#FqF1J60;;EGGNrCP{sjixIL zwvnraP^;Q}jT~I{LbmT8gL4ncV9ku4%jeAPJXjnN<%?g{MKg2JR&?A%vMqeRZsc0Z zor&B>MesrAwQ;Wo8ZLZH#5R%JL~skD z>j9T#yh7BUtEDmz94t!CHBmIyNmIz3fn=(!iQumb$y3qsU(30ca%ukF!o4;J*N!8| f9}&S%l7s&r9&&?5PUBwN00000NkvXXu0mjfF8ez- literal 0 HcwPel00001 diff --git a/src/engine.cpp b/src/engine.cpp new file mode 100644 index 0000000..59bdad5 --- /dev/null +++ b/src/engine.cpp @@ -0,0 +1,101 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "engine.h" + +#include + +#define ENGINE_DEBUG +#ifdef ENGINE_DEBUG + #include +#endif + +using namespace boost; + +Engine::Engine(const QString& path, const QStringList& arguments) + : m_path(path) +, m_arguments(arguments) +,m_side(-1) { + connect(&m_engine, SIGNAL(readyReadStandardOutput()), this, SLOT(processInput())); + connect(&m_engine, SIGNAL(started()), this, SLOT(engineRunning())); + connect(&m_engine, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SIGNAL(lostConnection())); +} + +Engine::~Engine() { } + +void Engine::start() { + if (!m_workPath.isNull()) + m_engine.setWorkingDirectory(m_workPath); + + m_engine.setOutputChannelMode(KProcess::OnlyStdoutChannel); + m_engine.setProgram(m_path, m_arguments); + m_engine.start(); + initializeEngine(); +} + +void Engine::engineRunning() { + Q_ASSERT(m_engine.state() == QProcess::Running); + while (!m_command_queue.empty()) { + sendCommand(m_command_queue.front(), false); + m_command_queue.pop(); + } +} + +void Engine::sendCommand(const QString& command, bool echo) { + if (echo && m_console) + m_console->echo(command); + + if (m_engine.state() == QProcess::Running) { + QTextStream os(&m_engine); + os << command << "\n"; +#ifdef ENGINE_DEBUG + if (m_side == -1) + kDebug() << "?"; + else + kDebug() << m_side; + kDebug() << "> " << command; +#endif + } + else { + m_command_queue.push(command); + } +} + +void Engine::processInput() { + // process only full lines + while (m_engine.canReadLine()) { + QString line = m_engine.readLine(); + line.remove("\n").remove("\r"); +#ifdef ENGINE_DEBUG + if (m_side == -1) + kDebug() << "?"; + else + kDebug() << m_side; + kDebug() << "< " << line; +#endif + if (m_console) + m_console->displayText(line + "\n", 0); + receivedCommand(line); + } +} + +void Engine::textNotify(const QString& text) { + sendCommand(text, false); +} + + +void Engine::setNotifier(const shared_ptr& notifier) { + m_notifier = notifier; +} + +void Engine::setConsole(const shared_ptr& console) { + m_console = console; +} diff --git a/src/engine.h b/src/engine.h new file mode 100644 index 0000000..3fc6fc9 --- /dev/null +++ b/src/engine.h @@ -0,0 +1,123 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ENGINE_H +#define ENGINE_H + +#include + +#include +#include +#include +#include "console.h" + +class Move; +class EngineNotifier; + +/** + * @brief An external chess engine. + * + * This class incapsulates a connection with + * an external engine process in a protocol + * independent way. + */ +class Engine : public QObject, public TextNotifier { +Q_OBJECT +protected: + QString m_path; + QStringList m_arguments; + KProcess m_engine; + QString m_workPath; + boost::shared_ptr m_console; + boost::weak_ptr m_notifier; + std::queue m_command_queue; + int m_side; + + virtual void initializeEngine() = 0; +public: + /** + * Create an engine, setting the path to the engine + * program and its arguments. + */ + Engine(const QString& path, const QStringList& arguments); + + void setWorkingPath(const QString& workPath) { m_workPath = workPath; } + void setSide(int side) { m_side = side; } + + virtual ~Engine(); + + /** + * Start the engine program. The initialization will + * take place automatically after the program has started. + */ + void start(); + + /** + * Send a command to the engine. + */ + void sendCommand(const QString& command, bool echo = true); + + /** + * Send a move to the engine. + */ + virtual void sendMove(const Move& move, const StatePtr& ref) = 0; + + /** + * Back up a move. + * @param pos The position before the move. Used if the engine + * does not support the undo command. + */ + virtual void backUp(const StatePtr& pos) = 0; + + virtual void setBoard(const StatePtr& pos) = 0; + + virtual void startAnalysis() = 0; + virtual void stopAnalysis() = 0; + + /** + * Begin a new game. + */ + virtual void reset() = 0; + + /** + * Start playing. + */ + virtual void play() = 0; + + /** + * Stop the engine. + */ + virtual void stop() = 0; + + /** + * Receive a user command. + */ + virtual void textNotify(const QString& text); + + void setNotifier(const boost::shared_ptr& notifier); + void setConsole(const boost::shared_ptr& console); +private Q_SLOTS: + void engineRunning(); + void processInput(); + +Q_SIGNALS: + + /** + * Emitted when the engine sends a command to the interface. + */ + void receivedCommand(const QString& command); + + /** + * Emitted when the engine exits (or crashes, etc...). + */ + void lostConnection(); +}; + +#endif // ENGINE_H diff --git a/src/engineinfo.cpp b/src/engineinfo.cpp new file mode 100644 index 0000000..92da80d --- /dev/null +++ b/src/engineinfo.cpp @@ -0,0 +1,76 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "engineinfo.h" +#include "xboardengine.h" +#include "gnushogiengine.h" +#include "ui.h" +#include "core/color.h" +#include + +using namespace boost; + +void EngineDetails::load(Settings s) { + s["name"] >> name; + s["path"] >> path; + type = typeFromName(s["type"].value()); + if (s["work-path"]) + s["work-path"] >> workPath; +} + +void EngineDetails::save(Settings s) { + s["name"] = name; + s["path"] = path; + s["type"] = typeName(type); + s["work-path"] = workPath; +} + +void EngineInfo::playAs(Components* components, const IColor* player) { + if (m_token[player].valid()) { + m_ui.removeEntity(m_token[player]); + m_token[player] = EntityToken(); + } + else { + m_token[player] = m_ui.addPlayingEngine(player, engine(components, player->index())); + } +} + +// void EngineInfo::analyze() { +// if (m_token.valid()) { +// m_ui.removeAnalysingEngine(m_token); +// m_token = EntityToken(); +// } +// else +// m_token = m_ui.addAnalysingEngine(engine()); +// } + +EngineInfo::EngineInfo(const EngineDetails& details, UI& ui) +: QObject(&ui) +, m_details(details) +, m_ui(ui) { } + +shared_ptr EngineInfo::engine(Components* components, int player) { + shared_ptr res; + if (m_details.type == EngineDetails::XBoard) + res = shared_ptr(new XBoardEngine(components, m_details.path, QStringList())); + else if (m_details.type == EngineDetails::GNUShogi) + res = shared_ptr(new GNUShogiEngine(components, m_details.path, QStringList())); + else { + kError() << "Unimplemented engine type" << EngineDetails::typeName(m_details.type); + return shared_ptr(); + } + + if (res) { + res->setWorkingPath(m_details.workPath); + res->setSide(player); + } + + return res; +} diff --git a/src/engineinfo.h b/src/engineinfo.h new file mode 100644 index 0000000..cf0a292 --- /dev/null +++ b/src/engineinfo.h @@ -0,0 +1,94 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ENGINEINFO_H +#define ENGINEINFO_H + +#include +#include +#include +#include +#include "controllers/entitytoken.h" +#include "settings.h" + +class Components; +class Engine; +class IColor; +class UI; + +struct EngineDetails { + enum EngineType { + XBoard, + UCI, + TaguaText, + TaguaDBUS, + GNUShogi, + Unknown + }; + + QString name; + QString path; + EngineType type; + QString workPath; + + EngineDetails(const QString& name, const QString& path, const EngineType& type) + : name(name), path(path), type(type) { } + EngineDetails() { } + + static QString typeName(EngineType t) { + switch (t) { + case XBoard: + return "xboard"; + case UCI: + return "UCI"; + case TaguaText: + return "tagua-text"; + case TaguaDBUS: + return "tagua-dbus"; + case GNUShogi: + return "gnushogi"; + default: + return "unknown"; + } + } + + static EngineType typeFromName(const QString& name) { + if (name == "xboard") + return XBoard; + else if (name == "UCI") + return UCI; + else if (name == "tagua-text") + return TaguaText; + else if (name == "tagua-dbus") + return TaguaDBUS; + else if (name == "gnushogi") + return GNUShogi; + else return Unknown; + } + + void load(Settings s); + void save(Settings s); +}; + +class EngineInfo : public QObject { +Q_OBJECT + EngineDetails m_details; + UI& m_ui; + typedef std::map Tokens; + Tokens m_token; +protected: + virtual boost::shared_ptr engine(Components* components, int player); + void playAs(Components* components, const IColor* player); +public: + EngineInfo(const EngineDetails& details, UI& ui); + void setWorkPath(const QString& wp) { m_details.workPath = wp; } +}; + +#endif // ENGINEINFO_H diff --git a/src/enginenotifier.h b/src/enginenotifier.h new file mode 100644 index 0000000..619fbbd --- /dev/null +++ b/src/enginenotifier.h @@ -0,0 +1,24 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ENGINENOTIFIER_H +#define ENGINENOTIFIER_H + +#include + +class QString; + +class EngineNotifier : public boost::enable_shared_from_this { +public: + virtual ~EngineNotifier() { } + virtual void notifyEngineMove(const QString&) = 0; +}; + +#endif // ENGINENOTIFIER_H diff --git a/src/entities/engineentity.cpp b/src/entities/engineentity.cpp new file mode 100644 index 0000000..c793739 --- /dev/null +++ b/src/entities/engineentity.cpp @@ -0,0 +1,110 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "engineentity.h" +#include +#include "game.h" +#include "engine.h" + +#include + +#include + +#include "components.h" +#include "game.h" +#include "engine.h" + +using namespace boost; + +EngineEntity::EngineEntity(Components* components, const shared_ptr& game, const IColor* side, + const shared_ptr& engine, AgentGroup* group) +: Entity(game) +, m_components(components) +, m_side(side) +, m_last_index(0) +, m_playing(false) +, m_engine(engine) +, m_dispatcher(group, this) { } + +void EngineEntity::setup() { + // setup engine + m_engine->setNotifier(shared_from_this()); + m_engine->start(); + m_engine->reset(); + + // find all indexes of the current variation + std::stack m_indexes; + Index index = m_game->index(); + while (index != 0) { + m_indexes.push(index); + kDebug() << "pushed index " << index; + index = index.prev(); + } + + // set engine state playing all moves + // in the current variation + while (!m_indexes.empty()) { + StatePtr state = m_game->position(index); + + index = m_indexes.top(); + m_indexes.pop(); + + m_engine->sendMove(m_game->move(index), state); + } + + m_last_index = m_game->index(); + checkPlaying(); +} + +void EngineEntity::notifyEngineMove(const QString& move_str) { + // FIXME implement notifyEngineMove + #if 0 + if (position()->testMove(move)) { + Q_ASSERT(move); + AbstractPosition::Ptr ref = position(); + AbstractPosition::Ptr pos = ref->clone(); + pos->move(move); + m_game->add(move, pos); + m_last_index = m_game->index(); + m_dispatcher.move(m_game->index()); + } + else + kError() << "Engine attempted to execute an invalid move:" << move_str; + + #endif +} + +void EngineEntity::checkPlaying() { + if (!m_playing && m_side == + m_game->position(m_last_index)->turn()) { + m_engine->play(); + m_playing = true; + } +} + +void EngineEntity::notifyMove(const Index& index) { + if (index == m_last_index) { + // TODO: check for consistency and update if necessary + } + else if (index.prev() == m_last_index) { + // play move + m_engine->sendMove(m_game->move(index), m_game->position(index.prev())); + m_last_index = index; + checkPlaying(); + } + else { + // TODO: handle move notification in arbitrary indexes + kWarning() << "engine entity can't handle index" << index << "(m_last_index =" << m_last_index << ")"; + } +} + + + + diff --git a/src/entities/engineentity.h b/src/entities/engineentity.h new file mode 100644 index 0000000..0acbad6 --- /dev/null +++ b/src/entities/engineentity.h @@ -0,0 +1,55 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ENGINEENTITY_H +#define ENGINEENTITY_H + +#include "agent.h" +#include "agentgroup.h" +#include "enginenotifier.h" +#include "entity.h" +#include "index.h" + +class Components; +class Engine; +class IColor; +class Variant; + +class EngineEntity : public Entity + , public Agent + , public EngineNotifier { + Components* m_components; + const IColor* m_side; + Index m_last_index; + bool m_playing; + boost::shared_ptr m_engine; + AgentGroupDispatcher m_dispatcher; + + void checkPlaying(); +public: + boost::shared_ptr engine() { return m_engine; } + + EngineEntity(Components* components, const boost::shared_ptr&, const IColor* side, + const boost::shared_ptr& engine, AgentGroup* group); + void setup(); + + virtual void notifyEngineMove(const QString&); + + virtual bool canDetach() const { return true; } + + virtual void notifyClockUpdate(int, int) { } + virtual void notifyMove(const Index& index); + virtual void notifyBack() { } + virtual void notifyForward() { } + virtual void notifyGotoFirst() { } + virtual void notifyGotoLast() { } +}; + +#endif // ENGINEENTITY_H diff --git a/src/entities/entity.cpp b/src/entities/entity.cpp new file mode 100644 index 0000000..b92b48a --- /dev/null +++ b/src/entities/entity.cpp @@ -0,0 +1,28 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "entity.h" +#include "game.h" + +Entity::Entity(const GamePtr& game) +: m_enabled(true) +, m_highlight(true) +, m_game(game) { } + +Entity::~Entity() { } + +GamePtr Entity::game() const { + return m_game; +} + +StatePtr Entity::position() const { + return m_game->position(); +} + diff --git a/src/entities/entity.h b/src/entities/entity.h new file mode 100644 index 0000000..7cca676 --- /dev/null +++ b/src/entities/entity.h @@ -0,0 +1,46 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ENTITY_H +#define ENTITY_H + +#include +#include "game_fwd.h" +#include "usermove.h" + +class Entity { +protected: + bool m_enabled : 1; + bool m_highlight : 1; + + GamePtr m_game; +public: + explicit Entity(const GamePtr& game); + /** + * Detach from dependent resource disposing it. + */ + virtual ~Entity(); + + bool highlight() const { return m_highlight; } + void setHighlight(bool highlight) { m_highlight = highlight; } + + void setEnabled(bool enabled) { m_enabled = enabled; } + + virtual bool canDetach() const = 0; + /** + * Detach from dependent resource without disposing it. + */ + virtual void detach() { } + + GamePtr game() const; + StatePtr position() const; +}; + +#endif // ENTITY_H diff --git a/src/entities/examinationentity.cpp b/src/entities/examinationentity.cpp new file mode 100644 index 0000000..a8d8fe8 --- /dev/null +++ b/src/entities/examinationentity.cpp @@ -0,0 +1,113 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include + +#include "examinationentity.h" +#include "game.h" +#include "icsconnection.h" +#include "positioninfo.h" +#include "pgnparser.h" +#include "icsapi.h" + +#include + +ExaminationEntity::ExaminationEntity(Components* components, const boost::shared_ptr& game, + int game_number, const boost::shared_ptr& connection, + AgentGroup* group) +: UserEntity(game) +, m_components(components) +, m_game_number(game_number) +, m_connection(connection) +, m_dispatcher(group, this) { + Q_ASSERT(m_icsapi); +} + +QString ExaminationEntity::save() const { + return m_game->pgn(); +} + +void ExaminationEntity::loadPGN(const PGN& pgn) { + m_game->load(pgn); +} + +bool ExaminationEntity::testMove(Move&) const { + return false; +} + +bool ExaminationEntity::testPremove(const Move&) const { return false; } +void ExaminationEntity::executeMove(const Move&) { } +void ExaminationEntity::addPremove(const Move&) { } +void ExaminationEntity::cancelPremove() { } + +InteractionType ExaminationEntity::validTurn(const Point&) const { return NoAction; } +InteractionType ExaminationEntity::validTurn(const IColor*) const { return NoAction; } +bool ExaminationEntity::movable(const Point&) const { return false; } +bool ExaminationEntity::jump(const Index&) { return true; } + +bool ExaminationEntity::gotoFirst() { + m_connection->sendText("back 99999"); + return true; +} + +bool ExaminationEntity::gotoLast() { + m_connection->sendText("forward 99999"); + return true; +} + +bool ExaminationEntity::goTo(const Index& index) { + std::pair steps = m_game->index().stepsTo(index); + if (steps.first == 0) { + m_connection->sendText(QString("forward %1").arg(steps.second)); + return true; + } + else if (steps.second == 0) { + m_connection->sendText(QString("back %1").arg(steps.first)); + return true; + } + else return false; +} + +bool ExaminationEntity::forward() { + m_connection->sendText("forward"); + return true; +} + +bool ExaminationEntity::back() { + m_connection->sendText("back"); + return true; +} + +bool ExaminationEntity::undo() { return true; } +bool ExaminationEntity::redo() { return true; } +bool ExaminationEntity::truncate() { return true; } +bool ExaminationEntity::promoteVariation() { return true; } + +void ExaminationEntity::notifyStyle12(const PositionInfo& style12, bool /*is_starting*/) { + m_dispatcher.clockUpdate(style12.whiteTime, style12.blackTime); + + if (style12.index() > 0) { + Move last_move = m_icsapi->parseVerbose(style12.lastMove, style12.position); + m_game->insert(last_move, style12.position, style12.index()); + } + + m_game->goTo(style12.index()); +} +void ExaminationEntity::notifyPool(const class PoolInfo&) { /*TODO */ } +void ExaminationEntity::notifyMoveList(int, const StatePtr&, const PGN&){ /* TODO */ } +void ExaminationEntity::notifyMove(const Index&) { } +void ExaminationEntity::notifyBack() { } +void ExaminationEntity::notifyForward() { } +void ExaminationEntity::notifyGotoFirst() { } +void ExaminationEntity::notifyGotoLast() { } + +bool ExaminationEntity::attach() { + return m_game->lastMainlineIndex() == 0; +} diff --git a/src/entities/examinationentity.h b/src/entities/examinationentity.h new file mode 100644 index 0000000..06dce3a --- /dev/null +++ b/src/entities/examinationentity.h @@ -0,0 +1,71 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef EXAMINATIONENTITY_H +#define EXAMINATIONENTITY_H + +#include "agent.h" +#include "agentgroup.h" +#include "userentity.h" +#include "icsapi_fwd.h" +#include "icslistener.h" + +class Components; +class ICSConnection; + +class ExaminationEntity : public UserEntity + , public ICSListener { + Components* m_components; + ICSAPIPtr m_icsapi; + + int m_game_number; + boost::shared_ptr m_connection; + AgentGroupDispatcher m_dispatcher; +public: + ExaminationEntity(Components*, const boost::shared_ptr&, + int, const boost::shared_ptr&, AgentGroup*); + + virtual QString save() const; + virtual void loadPGN(const PGN&); + + virtual bool testMove(Move&) const; + virtual bool testPremove(const Move&) const; + virtual void executeMove(const Move&); + virtual void addPremove(const Move&); + virtual void cancelPremove(); + virtual InteractionType validTurn(const Point&) const; + virtual InteractionType validTurn(const IColor*) const; + virtual bool movable(const Point&) const; + virtual bool jump(const Index&); + virtual bool gotoFirst(); + virtual bool gotoLast(); + virtual bool goTo(const Index&); + virtual bool forward(); + virtual bool back(); + virtual bool undo(); + virtual bool redo(); + virtual bool truncate(); + virtual bool promoteVariation(); + + virtual void notifyStyle12(const PositionInfo&, bool is_starting); + virtual void notifyPool(const PoolInfo&); + virtual void notifyMoveList(int, const StatePtr&, const PGN&); + + virtual void notifyClockUpdate(int, int) { } + virtual void notifyMove(const Index&); + virtual void notifyBack(); + virtual void notifyForward(); + virtual void notifyGotoFirst(); + virtual void notifyGotoLast(); + + virtual bool attach(); +}; + +#endif // EXAMINATIONENTITY_H diff --git a/src/entities/gameentity.cpp b/src/entities/gameentity.cpp new file mode 100644 index 0000000..67f553b --- /dev/null +++ b/src/entities/gameentity.cpp @@ -0,0 +1,159 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "gameentity.h" + +#include +#include +#include + +#include "chessboard.h" +#include "components.h" +#include "game.h" +#include "pgnparser.h" + +using namespace boost; + +GameEntity::GameEntity(Components* components, const boost::shared_ptr& game, + ChessBoard* chessboard, AgentGroup* group) +: UserEntity(game) +, m_components(components) +, m_chessboard(chessboard) +, m_dispatcher(group, this) { +} + +QString GameEntity::save() const { + return + ((m_components->variant()->name() == "Chess") ? QString() + : ("[Variant \"" + m_components->variant()->name()) + "\"]\n") + + m_game->pgn(); +} + +void GameEntity::loadPGN(const PGN& pgn) { + m_game->load(pgn); +} + +StatePtr GameEntity::doMove(const Move& move) const { + StatePtr newState(position()->clone()); + newState->move(move); + return newState; +} + +void GameEntity::executeMove(const Move& move) { + StatePtr ref = position(); + StatePtr pos = doMove(move); + m_game->add(move, pos); + m_dispatcher.move(m_game->index()); +} + +void GameEntity::addPremove(const Move& m) { + m_premoveQueue = m; +} + +void GameEntity::cancelPremove() { + m_premoveQueue = Move(); + m_chessboard->cancelPremove(); +} + +void GameEntity::notifyMove(const Index&) { + // the other player moved: execute premove + if (m_premoveQueue != Move() && testMove(m_premoveQueue)) { + executeMove(m_premoveQueue); + } + cancelPremove(); +} + +void GameEntity::notifyBack() { } +void GameEntity::notifyForward() { } +void GameEntity::notifyGotoFirst() { } +void GameEntity::notifyGotoLast() { } + +bool GameEntity::testMove(Move& move) const { + return m_components->validator()->legal(position().get(), move); +} + +Piece GameEntity::moveHint(const Move&) const { +// return position()->moveHint(move); + return Piece(); // FIXME implement move hinting +} + +bool GameEntity::testPremove(const Move&) const { + return true; // FIXME implement premove checking +} + +InteractionType GameEntity::validTurn(const IColor* pool) const { + return m_components->policy()->droppable(position().get(), m_turn_test, pool); +} + +InteractionType GameEntity::validTurn(const Point& point) const { + return m_components->policy()->movable(position().get(), m_turn_test, point); +} + +bool GameEntity::movable(const Point& point) const { + if (!m_enabled) return false; + InteractionType action = validTurn(point); + return m_turn_test.premove() ? action != NoAction : action == Moving; +} + +bool GameEntity::oneClickMoves() const { + return false; // FIXME support one-click moves +} + +bool GameEntity::gotoFirst() { + m_game->gotoFirst(); + return true; +} + +bool GameEntity::gotoLast() { + m_game->gotoLast(); + return true; +} + +bool GameEntity::goTo(const Index& index) { + m_game->goTo(index); + return true; +} + +bool GameEntity::forward() { + return m_game->forward(); +} + +bool GameEntity::back() { + return m_game->back(); +} + +bool GameEntity::undo() { + if (m_editing_tools) + m_game->undo(); + return true; +} + +bool GameEntity::redo() { + if (m_editing_tools) + m_game->redo(); + return true; +} + +bool GameEntity::truncate() { + if (m_editing_tools) + m_game->truncate(); + return true; +} +bool GameEntity::promoteVariation() { + if (m_editing_tools) + m_game->promoteVariation(); + return true; +} + +bool GameEntity::canDetach() const { + return true; +} + + diff --git a/src/entities/gameentity.h b/src/entities/gameentity.h new file mode 100644 index 0000000..26ae1f3 --- /dev/null +++ b/src/entities/gameentity.h @@ -0,0 +1,76 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GAMEENTITY_H +#define GAMEENTITY_H + +#include +#include "agent.h" +#include "agentgroup.h" +#include "userentity.h" + +class ChessBoard; +class Components; + +class GameEntity : public UserEntity { + Components* m_components; + ChessBoard* m_chessboard; + AgentGroupDispatcher m_dispatcher; + Move m_premoveQueue; + + StatePtr doMove(const Move& move) const; +public: + GameEntity(Components* components, const boost::shared_ptr& game, + ChessBoard* chessboard, AgentGroup* group); + + /** + * Return a PGN for the game. + */ + virtual QString save() const; + + /** + * Load the content of a PGN inside the game. + */ + virtual void loadPGN(const PGN& pgn); + + virtual void executeMove(const Move& move); + virtual void addPremove(const Move& m); + virtual void cancelPremove(); + + virtual void notifyClockUpdate(int, int) { } + virtual void notifyMove(const Index&); + virtual void notifyBack(); + virtual void notifyForward(); + virtual void notifyGotoFirst(); + virtual void notifyGotoLast(); + + virtual bool testMove(Move&) const; + virtual bool testPremove(const Move&) const; + virtual Piece moveHint(const Move& move) const; + + virtual InteractionType validTurn(const Point&) const; + virtual InteractionType validTurn(const IColor*) const; + virtual bool movable(const Point&) const; + virtual bool oneClickMoves() const; + + virtual bool gotoFirst(); + virtual bool gotoLast(); + virtual bool goTo(const Index& index); + virtual bool forward(); + virtual bool back(); + virtual bool undo(); + virtual bool redo(); + virtual bool truncate(); + virtual bool promoteVariation(); + + virtual bool canDetach() const; +}; + +#endif // GAMEENTITY_H diff --git a/src/entities/icsentity.cpp b/src/entities/icsentity.cpp new file mode 100644 index 0000000..c6b557d --- /dev/null +++ b/src/entities/icsentity.cpp @@ -0,0 +1,227 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "icsentity.h" +#include +#include +#include +#include "components.h" +#include +#include "game.h" +#include "icsconnection.h" +#include "positioninfo.h" +#include "poolinfo.h" +#include "icsapi.h" + +using namespace boost; + +class ICSTurnPolicy : public TurnPolicy::Abstract { + const ICSEntity* m_entity; +public: + ICSTurnPolicy(const ICSEntity* entity); + + virtual bool check() const; +}; + +ICSTurnPolicy::ICSTurnPolicy(const ICSEntity* entity) +: m_entity(entity) { } + +bool ICSTurnPolicy::check() const { + return m_entity->canEdit(); +} + +class ICSPremovePolicy : public TurnPolicy::Premove { + const ICSEntity* m_entity; +public: + ICSPremovePolicy(const ICSEntity* entity); + + virtual bool check() const; +}; + +ICSPremovePolicy::ICSPremovePolicy(const ICSEntity* entity) +: m_entity(entity) { } + +bool ICSPremovePolicy::check() const { + return !m_entity->canEdit(); +} + + +ICSEntity::ICSEntity(Components* components, const shared_ptr& game, + const IColor* side, int gameNumber, + const shared_ptr& connection, AgentGroup* group) +: Entity(game) +, m_components(components) +, m_connection(connection) +, m_side(side) +, m_game_number(gameNumber) +, m_editing_mode(false) +, m_dispatcher(group, this) { + Q_ASSERT(m_icsapi); +} + +StatePtr ICSEntity::position() const { + return m_game->position(); +} + +void ICSEntity::executeMove(const Move&) { } + +void ICSEntity::updateGame(const Index& index, Move& icsMove, + const StatePtr& icsPos) { + if (index > 0 && m_game->containsIndex(index.prev()) && icsMove != Move()) { + if (StatePtr position = m_game->position(index.prev())) { + position = StatePtr(position->clone()); + + if (m_components->validator()->legal(position.get(), icsMove)) { + position->move(icsMove); + +// icsPos->copyPoolFrom(position); + // FIXME implement copyPoolFrom + + if (!position->equals(icsPos.get())) + kDebug() << "[inconsistency] computed position differs from expected"; + } + else + kDebug() << "[inconsistency] invalid move from server!"; + } + } + + if (m_game->lastMainlineIndex() > index) + m_game->truncate(index); + + m_game->insert(icsMove, icsPos, index); + m_game->goTo(index); + m_dispatcher.move(index); +} + +ICSEntity::UpdateType ICSEntity::getUpdate(const Index& index) { + std::pair steps = m_game->index().stepsTo(index); + if (steps.first == 0) { + if (steps.second == 0) return NoMove; + else if (steps.second == 1) return MoveForward; + else return Forward; + } + else if (steps.first == 1 && steps.second == 0) return MoveBack; + else if (steps.second == 0) return Back; + + return NonComparableIndexes; +} + +void ICSEntity::notifyStyle12(const PositionInfo& style12, bool is_starting) { + if (style12.gameNumber != m_game_number) return; + + m_dispatcher.clockUpdate(style12.whiteTime, style12.blackTime); + + // get last move verbose notation + Move last_move; + if (!is_starting) + last_move = m_icsapi->parseVerbose(style12.lastMove, style12.position); + + if (style12.index() > 0 && m_game->containsIndex(style12.index() - 1) + && last_move != Move() && m_components->variant()->name() != "Dummy") { + StatePtr position = m_game->position(style12.index() - 1); + if (position) { + Move mv = m_components->moveSerializer("san")-> + deserialize(style12.lastMoveSAN, position.get()); + if (mv == Move() || mv == last_move) { + kDebug() << "[server inconsistency]" + << "SAN for last move is different from verbose notation"; + } + } + } + + if (style12.index() > 0 && m_components->variant()->name() != "Dummy" + && (!m_game->containsIndex(style12.index() - 1) || !m_game->position(style12.index() - 1)) ) + requestMoves(); + + updateGame(style12.index(), last_move, style12.position); +} + +void ICSEntity::notifyPool(const PoolInfo& pi) { + if (pi.m_game_num != m_game_number) + return; + + return; // BROKEN + if (m_game->containsIndex(pi.m_pos_index)) { + StatePtr p = m_game->position(pi.m_pos_index); + //BROKEN + //p->setPool(pi.m_pool); + m_game->insert(m_game->move(pi.m_pos_index), p, pi.m_pos_index ); + } +} + +void ICSEntity::notifyMoveList(int num, const StatePtr& pos, const PGN& pgn) { + if (m_game_number != num) return; + + Game g(m_components); + g.reset(pos); + g.load(pgn); + + for(int i=0;i<=g.lastMainlineIndex().num_moves;i++) { + m_game->insert(g.move(i), g.position(i), i); + } + //m_game->load(pos, pgn); +} + +bool ICSEntity::canDetach() const { + // TODO: ask whether abort or resign... + return true; +} + + +bool ICSEntity::attach() { + /* + TODO implement advanced ICSEntity attach mechanism as soon as the + needed variant ICS API is added + */ + return m_game->lastMainlineIndex() == 0; +} + +void ICSEntity::notifyMove(const Index& index) { + if (!canEdit()) { + QString mv = m_components->moveSerializer("simple")->serialize( + m_game->move(index), + m_game->position(index.prev()).get()); + m_connection->sendText(mv); + } +} + +void ICSEntity::requestMoves() { + m_connection->sendText(QString("moves %1").arg(m_game_number)); +} + +bool ICSEntity::canEdit() const { + return canEdit(m_game->index()); +} + +bool ICSEntity::canEdit(const Index& index) const { + return m_editing_mode || index != m_game->lastMainlineIndex(); +} + +void ICSEntity::setupTurnTest(TurnTest& test) const { + test.setPolicy(m_side, shared_ptr(new ICSTurnPolicy(this))); + test.setPremovePolicy(shared_ptr(new ICSPremovePolicy(this))); +} + + +ObservingEntity::ObservingEntity(Components* components, const shared_ptr& game, + int gameNumber,const shared_ptr& connection, AgentGroup* group) +: ICSEntity(components, game, 0, gameNumber, connection, group) +, m_attached(true) { } + +void ObservingEntity::detach() { + m_attached = false; +} + +ObservingEntity::~ObservingEntity() { + if (m_attached) + m_connection->sendText(QString("unobs %1").arg(m_game_number)); +} + + diff --git a/src/entities/icsentity.h b/src/entities/icsentity.h new file mode 100644 index 0000000..e6c1b5e --- /dev/null +++ b/src/entities/icsentity.h @@ -0,0 +1,93 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ICSENTITY_H +#define ICSENTITY_H + +#include +#include "entity.h" +#include "agent.h" +#include "agentgroup.h" +#include "icsapi_fwd.h" +#include "icslistener.h" + +class Components; +class IColor; +class IMoveSerializer; +class IValidator; +class ICSConnection; +class Move; + +class ICSEntity : public Entity + , public Agent + , public ICSListener { +protected: + Components* m_components; + ICSAPIPtr m_icsapi; + + boost::shared_ptr m_connection; + const IColor* m_side; + int m_game_number; + bool m_editing_mode; + AgentGroupDispatcher m_dispatcher; + + void updateGame(const Index& index, Move& icsMove, const StatePtr& icsPos); + + enum UpdateType { + MoveForward, + MoveBack, + Forward, + Back, + NoMove, + NonComparableIndexes + }; + + UpdateType getUpdate(const Index& index); +public: + ICSEntity(Components*, const boost::shared_ptr&, + const IColor*, int, + const boost::shared_ptr&, AgentGroup*); + + virtual void executeMove(const Move&); + virtual void notifyStyle12(const PositionInfo&, bool is_starting); + virtual void notifyPool(const PoolInfo&); + virtual void notifyMoveList(int, const StatePtr&, const PGN&); + + virtual StatePtr position() const; + + virtual void notifyClockUpdate(int, int) { } + virtual void notifyMove(const Index&); + virtual void notifyBack() { } + virtual void notifyForward() { } + virtual void notifyGotoFirst() { } + virtual void notifyGotoLast() { } + + void requestMoves(); + + virtual bool canDetach() const; + virtual bool attach(); + + bool canEdit() const; + bool canEdit(const Index& index) const; + void setupTurnTest(TurnTest& test) const; +}; + +class ObservingEntity : public ICSEntity { +protected: + bool m_attached; +public: + ObservingEntity(Components*, const boost::shared_ptr&, + int gameNumber, const boost::shared_ptr&, AgentGroup*); + ~ObservingEntity(); + + virtual void detach(); +}; + +#endif // ICSENTITY_H diff --git a/src/entities/userentity.cpp b/src/entities/userentity.cpp new file mode 100644 index 0000000..65916e7 --- /dev/null +++ b/src/entities/userentity.cpp @@ -0,0 +1,24 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "userentity.h" + +UserEntity::UserEntity(const GamePtr& game) +: Entity(game) +, m_editing_tools(false) { } + +void UserEntity::enableEditingTools(bool value) { + m_editing_tools = value; +} + +void UserEntity::handleRightClick(const Point&) const { } + +bool UserEntity::canDetach() const { return true; } + diff --git a/src/entities/userentity.h b/src/entities/userentity.h new file mode 100644 index 0000000..1d81ea0 --- /dev/null +++ b/src/entities/userentity.h @@ -0,0 +1,117 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef USERENTITY_H +#define USERENTITY_H + +#ifndef GAMEBASEDRULES_H +#define GAMEBASEDRULES_H + +#include +#include +#include +#include + +#include "entity.h" +#include "agent.h" + +class PGN; + +class UserEntity : public Entity + , public Agent { +protected: + TurnPolicy::Collection m_turn_test; + bool m_editing_tools; +public: + UserEntity(const GamePtr& game); + virtual TurnPolicy::Collection& turnTest() { return m_turn_test; } + virtual void enableEditingTools(bool value); + + /** + * Return a PGN for the game. + */ + virtual QString save() const = 0; + + /** + * Load the content of a PGN inside the game. + */ + virtual void loadPGN(const PGN& pgn) = 0; + + virtual bool testMove(Move& m) const = 0; + + virtual bool testPremove(const Move& m) const = 0; + virtual void executeMove(const Move& move) = 0; + virtual void addPremove(const Move& m) = 0; + virtual void cancelPremove() = 0; + virtual void handleRightClick(const Point&) const; + + virtual InteractionType validTurn(const Point&) const = 0; + virtual InteractionType validTurn(const IColor*) const = 0; + virtual bool movable(const Point&) const = 0; + virtual bool oneClickMoves() const { return false; } + + /** + * Jump to the end of the game. + */ + virtual bool gotoFirst() = 0; + + /** + * Jump to the beginning of the game. + */ + virtual bool gotoLast() = 0; + + /** + * Jump to an arbitrary index. + */ + virtual bool goTo(const Index& index) = 0; + + /** + * Go forward one move in the game. + */ + virtual bool forward() = 0; + + /** + * Go back one move in the game. + */ + virtual bool back() = 0; + + /** + * Undo the last editing action. + */ + virtual bool undo() = 0; + + /** + * Redo the last editing action. + */ + virtual bool redo() = 0; + + /** + * Remove the current position. + */ + virtual bool truncate() = 0; + + /** + * Promote the current variation to mainline. + */ + virtual bool promoteVariation() = 0; + + /** + * Move hint. + */ + virtual Piece moveHint(const Move&) const { return Piece(); } + + virtual bool canDetach() const; +}; + + +#endif // GAMEBASEDRULES_H + + +#endif // USERENTITY_H diff --git a/src/export.h b/src/export.h new file mode 100644 index 0000000..1b73fca --- /dev/null +++ b/src/export.h @@ -0,0 +1,26 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef EXPORT_H +#define EXPORT_H + +#include + +#ifdef TAGUA_DEBUG + #ifdef MAKE_TAGUAPRIVATE_LIB + #define TAGUA_EXPORT KDE_EXPORT + #else + #define TAGUA_EXPORT KDE_IMPORT + #endif // MAKE_TAGUAPRIVATE_LIB +#else // TAGUA_DEBUG + #define TAGUA_EXPORT +#endif // TAGUA_DEBUG + +#endif // EXPORT_H diff --git a/src/flash.cpp b/src/flash.cpp new file mode 100644 index 0000000..1f5c42f --- /dev/null +++ b/src/flash.cpp @@ -0,0 +1,11 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "flash.h" diff --git a/src/flash.h b/src/flash.h new file mode 100644 index 0000000..40ed2a5 --- /dev/null +++ b/src/flash.h @@ -0,0 +1,21 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef FLASH_H +#define FLASH_H + +class QWidget; + +class Flash { +public: + static void flash(QWidget*) { } +}; + +#endif // FLASH_H diff --git a/src/foreach.h b/src/foreach.h new file mode 100644 index 0000000..7f31fdb --- /dev/null +++ b/src/foreach.h @@ -0,0 +1,17 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef FOREACH_H +#define FOREACH_H + +#include +#define foreach BOOST_FOREACH + +#endif // FOREACH_H diff --git a/src/game.cpp b/src/game.cpp new file mode 100644 index 0000000..7bac7a4 --- /dev/null +++ b/src/game.cpp @@ -0,0 +1,981 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#ifdef Q_CC_MSVC + #pragma warning( push ) + #pragma warning( disable : 4100 ) + #include + #pragma warning( pop ) +#else + #include +#endif + +#include +#include +#include +#include +#include "variant.h" + +#include "game.h" +#include "game_p.h" +#include "pgnparser.h" +#include "components.h" +#include "variants.h" + +using namespace GamePrivate; + + +Game::Game(Components* components) +: current(-1) +, undo_pos(0) +, m_components(components) { } + +Game::~Game() { +} + +void Game::onAdded(const Index&) { +} + +void Game::onRemoved(const Index&) { +} + +void Game::onEntryChanged(const Index&, int) { +} + +void Game::onPromoteVariation(const Index&, int) { +} + +void Game::onSetComment(const Index&, const QString&) { +} + +void Game::onSetVComment(const Index&, int, const QString&) { +} + +void Game::onCurrentIndexChanged(const Index&) { +} + +void Game::onAvailableUndo(bool) { +} + +void Game::onAvailableRedo(bool) { +} + +Entry* Game::fetch(const Index& ix) { + int at; + History *vec = fetchRef(ix, &at); + return vec ? &(*vec)[at] : NULL; +} + +const Entry* Game::fetch(const Index& ix) const { + int at; + const History *vec = fetchRef(ix, &at); + return vec ? &(*vec)[at] : NULL; +} + +History* Game::fetchRef(const Index& ix, int* idx) { + if(ix.num_moves >= (int)history.size() || ix.num_moves < 0 ) + return NULL; + + History* aretv = &history; + Entry* retv = &history[ix.num_moves]; + if(idx) *idx = ix.num_moves; + + for(int i=0; i<(int)ix.nested.size();i++) { + Variations::iterator it = retv->variations.find(ix.nested[i].variation); + if(it == retv->variations.end() || ix.nested[i].num_moves >= (int)it->second.size() + || ix.nested[i].num_moves < 0 ) + return NULL; + + aretv = &it->second; + retv = &it->second[ix.nested[i].num_moves]; + if(idx) *idx = ix.nested[i].num_moves; + } + return aretv; +} + +const History* Game::fetchRef(const Index& ix, int* idx) const { + return const_cast(const_cast(this)->fetchRef(ix, idx)); +} + +void Game::testMove(const Index& ix) { + if (ix != Index(0)) { + Entry *e1 = fetch(ix.prev()); + Entry *e2 = fetch(ix); + if (!e1 || !e2 || !e1->position || e2->move == Move()) + return; + + if (!m_components->validator()->legal(e1->position.get(), e2->move)) + kError() << "invalid move added to game history"; + } +} + +void Game::testMove() { + testMove(current); +} + +void Game::saveUndo(const UndoOp& op) { + bool redo = undo_pos < (int)undo_history.size(); + + while(undo_pos < (int)undo_history.size()) + undo_history.pop_back(); + undo_history.push_back(op); + undo_pos++; + + if(undo_pos == 1) + onAvailableUndo(true); + if(redo) + onAvailableRedo(false); +} + + +Index Game::index() const { + return current; +} + +Index Game::lastMainlineIndex() const { + return Index(history.size()-1); +} + +bool Game::containsIndex(const Index& index) const { + return !!fetch(index); +} + +Move Game::move() const { + return move(current); +} + +Move Game::move(const Index& index) const { + Entry *e = (Entry*)fetch(index); + if(!e) { + kError() << "Index out of range"; + return Move(); + } + return e->move; +} + +StatePtr Game::position() const { + return position(current); +} + +StatePtr Game::position(const Index& index) const { + Entry *e = (Entry*)fetch(index); + if(!e) { + kError() << "Index" << index << "out of range"; + return StatePtr(); + } + return e->position; +} + +QString Game::comment() const { + return comment(current); +} + +QString Game::comment(const Index& index) const { + const Entry *e = fetch(index); + if(!e) { + kError() << "Index out of range"; + return QString(); + } + return e->comment; +} + +void Game::reset(StatePtr pos) { + Q_ASSERT(pos); + + undo_pos = 0; + undo_history.clear(); + history.clear(); + history.push_back( Entry(Move(), pos) ); + current = Index(0); + onCurrentIndexChanged(); +} + +void Game::undo() { + if(undo_pos <= 0) { + kError() << "Nothing to undo"; + return; + } + + bool last_undo = undo_pos == 1; + bool now_redo = undo_pos == (int)undo_history.size(); + + undo_pos--; + UndoOp* op = &(undo_history[undo_pos]); + + if(boost::get(op)) { + UndoAdd *a = boost::get(op); + + if(a->index.atVariationStart() ) { + Entry* e = fetch(a->index.prev()); + Q_ASSERT(e); + + int v = a->index.nested.back().variation; + Q_ASSERT(e->variations.count(v) == 1); + Q_ASSERT(e->variations[v].size() == 1); + + e->variations.erase(v); + } + else { + int at; + std::vector* vec = fetchRef(a->index, &at); + Q_ASSERT(vec); + Q_ASSERT((int)vec->size() == at+1); + + vec->pop_back(); + } + + if(current == a->index) { + current = current.prev(); + onCurrentIndexChanged(); + } + + onRemoved(a->index); + } + else if(boost::get(op)) { + UndoPromote *p = boost::get(op); + + int at; + std::vector* vec = fetchRef(p->index, &at); + Q_ASSERT(vec); + Q_ASSERT((*vec)[at].variations.count(p->variation)==1); + + History vold = (*vec)[at].variations[p->variation]; + History vnew; + for(int i=at+1; i<(int)vec->size(); i++) + vnew.push_back((*vec)[i]); + while((int)vec->size()>at+1) + vec->pop_back(); + for(int i=0; i<(int)vold.size(); i++) + vec->push_back(vold[i]); + (*vec)[at].variations[p->variation] = vnew; + + current = current.flipVariation(p->index, p->variation); + onPromoteVariation(p->index, p->variation); + //onCurrentIndexChanged(); + } + else if(boost::get(op)) { + UndoTruncate *t = boost::get(op); + + int at; + std::vector* vec = fetchRef(t->index, &at); + Q_ASSERT(vec); + Q_ASSERT((int)vec->size() == at+1); + Q_ASSERT((*vec)[at].variations.empty()); + + for(int i=0;i<(int)t->history.size();i++) + vec->push_back(t->history[i]); + (*vec)[at].variations = t->variations; + (*vec)[at].vcomments = t->vcomments; + + if(t->history.size()) + onAdded(t->index.next()); + for(Variations::iterator it = t->variations.begin(); it != t->variations.end(); ++it) + onAdded(t->index.next(it->first)); + for(VComments::iterator it = t->vcomments.begin(); it != t->vcomments.end(); ++it) + onSetVComment(t->index, it->first, it->second); + } + else if(boost::get(op)) { + UndoRemove *r = boost::get(op); + + Entry *e = fetch(r->index); + e->variations[r->variation] = r->history; + onAdded(r->index.next(r->variation)); + if(!r->vcomment.isEmpty()) { + e->vcomments[r->variation] = r->vcomment; + onSetVComment(r->index, r->variation, r->vcomment); + } + } + else if(boost::get(op)) { + UndoClear *c = boost::get(op); + + Entry *e = fetch(c->index); + e->variations = c->variations; + e->vcomments = c->vcomments; + for(Variations::iterator it = c->variations.begin(); it != c->variations.end(); ++it) + onAdded(c->index.next(it->first)); + for(VComments::iterator it = c->vcomments.begin(); it != c->vcomments.end(); ++it) + onSetVComment(c->index, it->first, it->second); + } + else if(boost::get(op)) { + UndoSetComment *sc = boost::get(op); + Entry *e = fetch(sc->index); + Q_ASSERT(e); + + if(sc->variation == -1) { + e->comment = sc->old_comment; + onSetComment(sc->index, sc->old_comment); + } + else { + if(sc->old_comment.isEmpty()) + e->vcomments.erase(sc->variation); + else + e->vcomments[sc->variation] = sc->old_comment; + onSetVComment(sc->index, sc->variation, sc->old_comment); + } + } + else + kError() << "Unexpected type in boost::variant"; + + if(last_undo) + onAvailableUndo(false); + if(now_redo) + onAvailableRedo(true); +} + +void Game::redo() { + if(undo_pos >= (int)undo_history.size()) { + kError() << "Nothing to redo"; + return; + } + + bool now_undo = undo_pos == 0; + bool last_redo = undo_pos == (int)undo_history.size()-1; + + UndoOp* op = &(undo_history[undo_pos]); + undo_pos++; + + if(boost::get(op)) { + UndoAdd *a = boost::get(op); + + if(a->index.atVariationStart() ) { + Entry* e = fetch(a->index.prev()); + Q_ASSERT(e); + + int v = a->index.nested.back().variation; + Q_ASSERT(e->variations.count(v) == 0); + + History h; + h.push_back(a->entry); + e->variations[v] = h; + } + else { + int at; + std::vector* vec = fetchRef(a->index.prev(), &at); + Q_ASSERT(vec); + Q_ASSERT((int)vec->size() == at+1); + + vec->push_back(a->entry); + } + + onAdded(a->index); + } + else if(boost::get(op)) { + UndoPromote *p = boost::get(op); + + int at; + std::vector* vec = fetchRef(p->index, &at); + + Q_ASSERT(vec); + Q_ASSERT((*vec)[at].variations.count(p->variation)==1); + History vold = (*vec)[at].variations[p->variation]; + History vnew; + for(int i=at+1; i<(int)vec->size(); i++) + vnew.push_back((*vec)[i]); + while((int)vec->size()>at+1) + vec->pop_back(); + for(int i=0; i<(int)vold.size(); i++) + vec->push_back(vold[i]); + (*vec)[at].variations[p->variation] = vnew; + + current = current.flipVariation(p->index, p->variation); + onPromoteVariation(p->index, p->variation); + //onCurrentIndexChanged(); + } + else if(boost::get(op)) { + UndoTruncate *t = boost::get(op); + + int at; + std::vector* vec = fetchRef(t->index, &at); + Q_ASSERT(vec); + Q_ASSERT((int)vec->size() == at+1+(int)t->history.size()); + + while((int)vec->size() > at+1) + vec->pop_back(); + (*vec)[at].variations.clear(); + (*vec)[at].vcomments.clear(); + + if(current > t->index) { + current = t->index; + onCurrentIndexChanged(); + } + + if(t->history.size()) + onRemoved(t->index.next()); + for(Variations::iterator it = t->variations.begin(); it != t->variations.end(); ++it) + onRemoved(t->index.next(it->first)); + } + else if(boost::get(op)) { + UndoRemove *r = boost::get(op); + + Entry *e = fetch(r->index); + e->variations.erase(r->variation); + e->vcomments.erase(r->variation); + onRemoved(r->index.next(r->variation)); + } + else if(boost::get(op)) { + UndoClear *c = boost::get(op); + + Entry *e = fetch(c->index); + e->variations.clear(); + e->vcomments.clear(); + for(Variations::iterator it = c->variations.begin(); it != c->variations.end(); ++it) + onRemoved(c->index.next(it->first)); + } + else if(boost::get(op)) { + UndoSetComment *sc = boost::get(op); + Entry *e = fetch(sc->index); + Q_ASSERT(e); + + if(sc->variation == -1) { + e->comment = sc->new_comment; + onSetComment(sc->index, sc->new_comment); + } + else { + if(sc->new_comment.isEmpty()) + e->vcomments.erase(sc->variation); + else + e->vcomments[sc->variation] = sc->new_comment; + onSetVComment(sc->index, sc->variation, sc->new_comment); + } + } + else + kError() << "Unexpected type in boost::variant"; + + if(now_undo) + onAvailableUndo(true); + if(last_redo) + onAvailableRedo(false); +} + +void Game::setComment(const QString& c) { + setComment(current, c); +} + +void Game::setComment(const Index& ix, const QString& c) { + Entry* e = fetch(ix); + if(!e) { + kError() << "Invalid index"; + return; + } + if(e->comment == c) + return; + + saveUndo(UndoSetComment(ix, -1, e->comment, c)); + e->comment = c; + onSetComment(ix, c); +} + +void Game::setVComment(const Index& ix, int v, const QString& c) { + Entry* e = fetch(ix); + if(!e) { + kError() << "Invalid index"; + return; + } + QString oc = e->vcomments.count(v) ? e->vcomments[v] : QString(); + if(oc == c) + return; + + saveUndo(UndoSetComment(ix, v, oc, c)); + if(c.isEmpty()) + e->vcomments.erase(v); + else + e->vcomments[v] = c; + onSetVComment(ix, v, c); +} + +void Game::promoteVariation() { + promoteVariation(current); +} + +void Game::promoteVariation(const Index& _ix) { + if(_ix.nested.size()==0) { + kError() << "Cannot promote main line"; + return; + } + Index ix = _ix; + int v = ix.nested.back().variation; + ix.nested.pop_back(); + + promoteVariation(ix, v); +} + +void Game::promoteVariation(const Index& ix, int v) { + int at; + std::vector* vec = fetchRef(ix, &at); + Q_ASSERT(vec); + Q_ASSERT((*vec)[at].variations.count(v)==1); + + History vold = (*vec)[at].variations[v]; + History vnew; + for(int i=at+1; i<(int)vec->size(); i++) + vnew.push_back((*vec)[i]); + while((int)vec->size()>at+1) + vec->pop_back(); + for(int i=0; i<(int)vold.size(); i++) + vec->push_back(vold[i]); + (*vec)[at].variations[v] = vnew; + + saveUndo(UndoPromote(ix, v)); + current = current.flipVariation(ix, v); + onPromoteVariation(ix, v); + //don't call onCurrentIndexChanged(), as the position did not change actually +} + +void Game::removeVariation(int v) { + removeVariation(current, v); +} + +void Game::removeVariation(const Index& _ix) { + if(_ix.nested.size()==0) { + kError() << "Cannot remove main line"; + return; + } + Index ix = _ix; + int v = ix.nested.back().variation; + ix.nested.pop_back(); + + removeVariation(ix, v); +} + +void Game::removeVariation(const Index& ix, int v) { + Entry* e = fetch(ix); + + saveUndo(UndoRemove(ix, v, e->variations[v], + e->vcomments.count(v) ? e->vcomments[v] : QString() )); + e->variations.erase(v); + e->vcomments.erase(v); + + onRemoved(ix.next(v)); + if(current >= ix.next(v)) { + current = ix; + onCurrentIndexChanged(); + } +} + +void Game::clearVariations() { + clearVariations(current); +} + +void Game::clearVariations(const Index& ix) { + Entry* e = fetch(ix); + + UndoClear uc(ix, e->variations, e->vcomments); + saveUndo(uc); + e->variations.clear(); + e->vcomments.clear(); + + for(Variations::iterator it = uc.variations.begin(); it != uc.variations.end(); ++it) + onRemoved(ix.next(it->first)); + if(current > ix && !(current >= ix.next())) { + current = ix; + onCurrentIndexChanged(); + } +} + +void Game::truncate() { + truncate(current); +} + +void Game::truncate(const Index& ix) { + int at; + History* vec = fetchRef(ix, &at); + if(!vec) { + kError() << "Truncating at an unexisting index"; + return; + } + + Entry *e = &(*vec)[at]; + UndoTruncate undo(ix); + for(int i=at+1; i<(int)vec->size();i++) + undo.history.push_back((*vec)[i]); + while((int)vec->size()>at+1) + vec->pop_back(); + + undo.variations = e->variations; + undo.vcomments = e->vcomments; + saveUndo(undo); + e->variations.clear(); + e->vcomments.clear(); + + if(undo.history.size()) + onRemoved(undo.index.next()); + for(Variations::iterator it = undo.variations.begin(); it != undo.variations.end(); ++it) + onRemoved(undo.index.next(it->first)); + + if(current > ix) { + current = ix; + onCurrentIndexChanged(); + } +} + +void Game::add(const Move& m, const StatePtr& pos) { + Q_ASSERT(pos); + + Index old_c = current; + int at; + std::vector* vec = fetchRef(current, &at); + Q_ASSERT(vec); + + /* add the move on the mainline */ + if((int)vec->size() <= at+1 ) { + Q_ASSERT((int)vec->size() == at+1); + vec->push_back(Entry(m, pos)); + current = current.next(); + testMove(); + saveUndo(UndoAdd(current, Entry(m, pos))); + onAdded(current); + onCurrentIndexChanged(old_c); + } + /* we are playing the move that is already next in the mainline */ + else if( (*vec)[at+1].position && (*vec)[at+1].position->equals(pos.get())) { + current = current.next(); + onCurrentIndexChanged(old_c); + /* no need to test the move */ + } + else { + Entry *e = fetch(current); + Q_ASSERT(e); + + /* check if a variations with this move already exists. */ + for(Variations::iterator it = e->variations.begin(); it != e->variations.end(); ++it) + if(it->second.size() > 0 && it->second[0].position + && it->second[0].position->equals(pos.get()) ) { + current = current.next(it->first); + onCurrentIndexChanged(old_c); + + return; + } + + int var_id = e->last_var_id++; + e->variations[var_id].push_back(Entry(m, pos)); + current = current.next(var_id); + testMove(); + saveUndo(UndoAdd(current, Entry(m, pos))); + onAdded(current); + onCurrentIndexChanged(old_c); + } +} + +bool Game::insert(const Move& m, const StatePtr& pos, const Index& at) { + Entry *e = fetch(at); + + if(!e) { + if(at.nested.size() == 0) { + if(undo_history.size()) { + undo_pos = 0; + undo_history.clear(); + } + int hs = history.size(); + history.resize(at.num_moves + 1); + history[at.num_moves] = Entry(m, pos); + testMove(at); + onAdded(Index(hs)); + return true; + } + else { + kError() << "Index out if range"; + return false; + } + } + + if(undo_history.size()) { + undo_pos = 0; + undo_history.clear(); + } + bool res = e->position && e->position->equals(pos.get()); + e->move = m; + e->position = pos; + testMove(at); + testMove(at.next()); + for (Variations::const_iterator it = e->variations.begin(); + it != e->variations.end(); ++it) + testMove(at.next(it->first)); + onEntryChanged(at); + return res; +} + +bool Game::lastPosition() const { + return !fetch(current.next()); +} + +bool Game::back() { + if (current <= 0) return false; // first entry or uninitialized + Index old_c = current; + Index new_c = current.prev(); + + Entry *e = fetch(new_c); + if(!e || e->position == 0) return false; // gap immediately before current + current = new_c; + onCurrentIndexChanged(old_c); + + return true; +} + +bool Game::forward() { + Index old_c = current; + Index new_c = current.next(); + + Entry *e = fetch(new_c); + if(!e || e->position == 0) { + return false; // gap immediately before current + } + current = new_c; + onCurrentIndexChanged(old_c); + + return true; +} + +void Game::gotoFirst() { + Index old_c = current; + current = Index(0); + onCurrentIndexChanged(old_c); +} + +void Game::gotoLast() { + int at; + std::vector* vec = fetchRef(current, &at); + Q_ASSERT(vec); + Q_ASSERT((int)vec->size() > at); + + if((int)vec->size() > at+1) { + Index old_c = current; + current = current.next(-1, vec->size()-1-at); + onCurrentIndexChanged(old_c); + } +} + +bool Game::goTo(const Index& index) { + if (fetch(index)) { + Index old_c = current; + current = index; + onCurrentIndexChanged(old_c); + return true; + } + return false; +} + +QString Game::variationPgn(const History& vec, const Entry& e, + int start, const Index& _ix) const { + Index ix = _ix; + QString res; + + for (int i = start; i < static_cast(vec.size()); i++) { + const Entry& preve = (i > start) ? vec[i-1] : e; + + + QString mv = (vec[i].move != Move() && preve.position) + ? m_components->moveSerializer("compact")-> + serialize(vec[i].move, preve.position.get()) + : "???"; +#if 0 + if (ix == current) + mv = "[[" + mv + "]]"; +#endif + + int n = ix.totalNumMoves()+1; + if(i==start || n%2==0) + mv = QString::number(n/2)+(n%2==1 ? ". ... " : ". ") + mv; + if (i > start) + mv = " " + mv; + + res += mv; + + if(!vec[i].comment.isEmpty()) + res += " {" + vec[i].comment + "}"; + + if(i > 0) { + for(Variations::const_iterator it = vec[i-1].variations.begin(); + it != vec[i-1].variations.end(); ++it) { + res += " ("; + if(vec[i-1].vcomments.count(it->first)) + res += "{" + vec[i-1].vcomments.find(it->first)->second + "} "; + res += variationPgn(it->second, vec[i - 1], 0, + ix.prev().next(it->first)) + ")"; + } + } + + ix = ix.next(); + } + return res; +} + +QString Game::pgn() const { + return variationPgn(history, history[0], 1, Index(1)); +} + +void Game::load(const PGN& pgn) { + std::map::const_iterator var = pgn.m_tags.find("Variant"); + Variant* vi; + + // FIXME do not create a variant here + if (var == pgn.m_tags.end()) { + vi = Variants::self().create("chess"); + } + else if (!(vi = Variants::self().create(var->second))) { + kError() << "No such variant" << var->second; + return; + } + + std::map::const_iterator fen = pgn.m_tags.find("FEN"); + StatePtr pos; + + //if(var == pgn.m_tags.end()) { + pos = StatePtr(m_components->createState()); + pos->setup(); + //} +#if 0 // BROKEN + else if( !(pos = vi->createPositionFromFEN(fen->second))) { + kError() << "Wrong fen " << fen->second; + return; + } +#endif + + //TODO: what about options? FEN rules? + + load(pos, pgn); +} + +void Game::load(StatePtr pos, const PGN& pgn) { + current = Index(0); + undo_history.clear(); + undo_pos = 0; + + // setup an empty history, clear as needed + + if(history.size()) { + Entry* fe = &history[0]; + int old_history_size = history.size(); + std::vector v_ids; + + while(history.size()>1) + history.pop_back(); + for(Variations::const_iterator it = fe->variations.begin(); + it != fe->variations.end(); ++it) + v_ids.push_back(it->first); + fe->variations.clear(); + fe->vcomments.clear(); + + for(int i=0;i<(int)v_ids.size();i++) + onRemoved(Index(0).next(v_ids[i])); + if(old_history_size>1) + onRemoved(Index(1)); + v_ids.clear(); + history[0].position = pos; + } + else + history.push_back( Entry(Move(), pos) ); + + // apply moves from PGN, one by one + + QString vcomment; + std::vector var_stack; + bool var_start = false; + + for (uint i = 0; i < pgn.m_entries.size(); i++) { + if(boost::get(pgn[i])) { + if(var_start) + vcomment += *boost::get(pgn[i]); + else { + Entry *e = fetch(current); + Q_ASSERT(e); + + e->comment += *boost::get(pgn[i]); + } + } + else if(boost::get(pgn[i])) { + var_stack.push_back(current); + var_start = true; + } + else if(boost::get(pgn[i])) { + if(var_stack.size() == 0) { + kError() << "Unexpected end variation"; + break; + } + current = var_stack.back(); + var_stack.pop_back(); + } + else if(boost::get(pgn[i])) { + const PGN::Move *pm = boost::get(pgn[i]); + + int n = current.totalNumMoves()+1; + if(var_start) { + if(!pm->m_number) // not all moves get numbered in PGN, usually only 1st player ones + current = current.prev(); + else if(pm->m_number>n+1) + kError() << "Too far variation"; + else { + if(pm->m_numberm_number); + } + } + else if(pm->m_number && pm->m_number!=n+1) + kError() << "Move number mismatch"; + + StatePtr pos = position(); + Move m = m_components->moveSerializer("compact")-> + deserialize(pm->m_move, pos.get()); + + if (m == Move() || !m_components->validator()->legal(pos.get(), m)) + break; + + StatePtr newPos(pos->clone()); + newPos->move(m); + + int at; + History *vec = fetchRef(current, &at); + Q_ASSERT(vec); + + if(var_start) { + Entry *e = &(*vec)[at]; + int var_id = e->last_var_id++; + e->variations[var_id].push_back(Entry(m, newPos)); + if(!vcomment.isEmpty()) { + e->vcomments[var_id] = vcomment; + vcomment = QString(); + } + /* this is a hack, but the mainline should NEVER + be empty if there is a variation*/ + if((int)vec->size() - 1 == at) + vec->push_back(Entry(m, newPos)); + + current = current.next(var_id); + } + else { + if((int)vec->size() - 1 == at) + vec->push_back(Entry(m, newPos)); + else + (*vec)[at] = Entry(m, newPos); + + current = current.next(); + } + + var_start = false; + } + else + kError() << "Unexpected type in boost::variant"; + } + + if(history.size()>1) + onAdded(Index(1)); + Entry* e = fetch(Index(0)); + for(Variations::const_iterator it = e->variations.begin(); + it != e->variations.end(); ++it) + onAdded(Index(0).next(it->first)); + for(VComments::const_iterator it = e->vcomments.begin(); + it != e->vcomments.end(); ++it) + onSetVComment(Index(0), it->first, it->second); + + current = Index(0); + onCurrentIndexChanged(); +} + diff --git a/src/game.h b/src/game.h new file mode 100644 index 0000000..124e28f --- /dev/null +++ b/src/game.h @@ -0,0 +1,191 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GAME_H +#define GAME_H + +#include +#include +#include +#include +#include +#include "index.h" + +class Components; +class PGN; +class Variant; + +namespace GamePrivate { + +class Entry; +typedef std::vector History; + +typedef boost::variant UndoOp; +typedef std::vector UndoHistory; + +} + + +/** + \class Game game.h + \brief A game with history and variations. + + This template class encapsulates an editable game with history and undo editing. +*/ +class Game { +public: + GamePrivate::History history; + Index current; + + GamePrivate::UndoHistory undo_history; + int undo_pos; + + GamePrivate::Entry* fetch(const Index& ix); + const GamePrivate::Entry* fetch(const Index& ix) const; + GamePrivate::History* fetchRef(const Index& ix, int* idx); + const GamePrivate::History* fetchRef(const Index& ix, int* idx) const; + + void testMove(); + void testMove(const Index& ix); + void saveUndo(const GamePrivate::UndoOp& op); + + QString variationPgn(const GamePrivate::History&, const GamePrivate::Entry&, + int start, const Index& _ix) const; + + virtual void onAdded(const Index& i); + virtual void onRemoved(const Index& i); + virtual void onEntryChanged(const Index& at, int propagate=1); + virtual void onPromoteVariation(const Index& i, int v); + virtual void onSetComment(const Index& i, const QString& c); + virtual void onSetVComment(const Index& i, int v, const QString& c); + virtual void onCurrentIndexChanged(const Index& old = Index(-1)); + virtual void onAvailableUndo(bool); + virtual void onAvailableRedo(bool); + + Components* m_components; +public: + /** Constructor, creates an empty game*/ + explicit Game(Components* components); + + /** destructor */ + virtual ~Game(); + + /** \return the index of the current position */ + Index index() const; + + /** \return an index opinting to the last position in the main line */ + Index lastMainlineIndex() const; + + /** \return true if the game contains the index */ + bool containsIndex(const Index& index) const; + + /** \return the current move */ + Move move() const; + + /** \return the move at the given index */ + Move move(const Index& index) const; + + /** \return the current position */ + StatePtr position() const; + + /** \return the position at the given index */ + StatePtr position(const Index& index) const; + + /** \return the current comment */ + QString comment() const; + + /** \return the comment at the given index */ + QString comment(const Index& index) const; + + /** clears the games, and puts \a pos as root position */ + void reset(StatePtr pos); + + /** undo */ + void undo(); + + /** redo */ + void redo(); + + /** sets the comment in the current index */ + void setComment(const QString& c); + + /** sets the comment at the given index */ + void setComment(const Index& index, const QString& c); + + /** sets the variation comment at the given index/variation */ + void setVComment(const Index& index, int v, const QString& c); + + /** promotes the current position in the upper main line */ + void promoteVariation(); + + /** promotes the given position in the upper main line */ + void promoteVariation(const Index& index); + + /** promotes the given variation in the upper main line */ + void promoteVariation(const Index& index, int v); + + /** removes the given variation in the current index */ + void removeVariation(int v); + + /** removes the given variation in the given index */ + void removeVariation(const Index& index); + + /** removes the given variation in the given index */ + void removeVariation(const Index& index, int v); + + /** removes the given variation in the current index */ + void clearVariations(); + + /** removes the given variation in the given index */ + void clearVariations(const Index& index); + + /** removes all the successors of the current position */ + void truncate(); + + /** removes all the successors of the given position */ + void truncate(const Index& index); + + /** adds a new move+position after the current one, on the main + line if possible, or else in a new variation */ + void add(const Move& move, const StatePtr& pos); + + /** forces a move+position at in certain index */ + bool insert(const Move& move, const StatePtr& pos, const Index& index); + + /** \return true if we cannot go forward */ + bool lastPosition() const; + + /** go back */ + bool back(); + + /** go forward (in the current mainline) */ + bool forward(); + + /** go to the root position */ + void gotoFirst(); + + /** go to the last position (in the current mainline) */ + void gotoLast(); + + /** go to a specified index */ + bool goTo(const Index& index); + + /** \return a pgn containing the whole game (with variations) */ + QString pgn() const; + + /** loads a pgn in the current game */ + void load(StatePtr, const PGN& pgn); + + /** loads a pgn in the current game */ + void load(const PGN& pgn); +}; + +#endif // GAME_H diff --git a/src/game_fwd.h b/src/game_fwd.h new file mode 100644 index 0000000..b6f56cd --- /dev/null +++ b/src/game_fwd.h @@ -0,0 +1,19 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GAME_FWD_H +#define GAME_FWD_H + +#include + +class Game; +typedef boost::shared_ptr GamePtr; + + +#endif // GAME_FWD_H diff --git a/src/game_p.h b/src/game_p.h new file mode 100644 index 0000000..ec4efe8 --- /dev/null +++ b/src/game_p.h @@ -0,0 +1,108 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GAME_P_H +#define GAME_P_H + +#include +#include +#include +#include +#include "game.h" + +namespace GamePrivate { + +typedef std::map Variations; +typedef std::map VComments; + +/** + * A class to store game entries + */ +class Entry { +public: + Move move; + StatePtr position; + QString comment; + Variations variations; + VComments vcomments; + int last_var_id; + + Entry(const Move& move, const StatePtr& position) + : move(move) + , position(position) + , last_var_id(0) { } + Entry() + : last_var_id(0) { } + ~Entry() { } +}; + +/* data and structs for undo */ +class UndoAdd { +public: + Index index; + Entry entry; + UndoAdd(const Index& ix, const Entry& e) + : index(ix), entry(e) {} +}; + +class UndoPromote { +public: + Index index; + int variation; + UndoPromote(const Index& ix, int v) + : index(ix), variation(v) {} +}; + +class UndoTruncate { +public: + Index index; + History history; + Variations variations; + VComments vcomments; + UndoTruncate(const Index& ix) + : index(ix) {} + UndoTruncate(const Index& ix, const History& h, + const Variations& v, const VComments& c) + : index(ix), history(h), variations(v), vcomments(c) {} +}; + +class UndoRemove { +public: + Index index; + int variation; + History history; + QString vcomment; + UndoRemove(const Index& ix, int v, const History& h, const QString& c) + : index(ix), variation(v), history(h), vcomment(c) {} +}; +class UndoClear { +public: + Index index; + Variations variations; + VComments vcomments; + UndoClear(const Index& ix, const Variations& v, const VComments& c) + : index(ix), variations(v), vcomments(c) {} +}; + +class UndoSetComment { +public: + Index index; + int variation; + QString old_comment; + QString new_comment; + UndoSetComment(const Index& ix, int v, const QString& o, const QString& n) + : index(ix), variation(v), old_comment(o), new_comment(n) {} +}; + +} + +#endif //GAME_P_H + + diff --git a/src/gameinfo.cpp b/src/gameinfo.cpp new file mode 100644 index 0000000..45f8f72 --- /dev/null +++ b/src/gameinfo.cpp @@ -0,0 +1,48 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "gameinfo.h" + + +GameInfo::GameInfo(const Player& white, const Player& black, + const QString& rated, const QString& type, + int time, int increment) +: m_white(white) +, m_black(black) +, m_rated(rated) +, m_type(type) +, m_time(time) +, m_increment(increment) +, m_game_num(-1) { + m_variant = variantCode(m_type); +} + +GameInfo::GameInfo(QRegExp& pattern, int offset) +: m_white(Player(pattern.cap(offset), pattern.cap(offset + 1).toInt())) +, m_black(Player(pattern.cap(offset + 2), pattern.cap(offset + 3).toInt())) +, m_rated(pattern.cap(offset + 4)) +, m_type(pattern.cap(offset + 5)) +, m_time(pattern.cap(offset + 6).toInt()) +, m_increment(pattern.cap(offset + 7).toInt()) +, m_game_num(-1) { + m_variant = variantCode(m_type); +} + +QString GameInfo::variantCode(const QString& type) { + if (type == "blitz" || type == "standard" || type == "lightning" + || type == "untimed" || type == "chess") + return "Chess"; + else if (type == "atomic") + return "Atomic"; + else if (type == "crazyhouse") + return "Crazyhouse"; + else + return "Dummy"; +} diff --git a/src/gameinfo.h b/src/gameinfo.h new file mode 100644 index 0000000..63fc214 --- /dev/null +++ b/src/gameinfo.h @@ -0,0 +1,45 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GAMEINFO_H +#define GAMEINFO_H + +#include +#include "player.h" +#include "qstring.h" + +class GameInfo { + Player m_white, m_black; + QString m_rated, m_type; + QString m_variant; + int m_time, m_increment; + int m_game_num; + +public: + GameInfo(const Player& white, const Player& black, + const QString& rated, const QString& type, + int time, int increment); + + GameInfo(QRegExp& pattern, int offset); + + static QString variantCode(const QString& type); + const Player& white() const { return m_white; } + const Player& black() const { return m_black; } + QString rated() const { return m_rated; } + QString type() const { return m_type; } + int time() const { return m_time; } + int increment() const { return m_increment; } + int gameNumber() const { return m_game_num; } + void setGameNumber(int g) { m_game_num = g; } + QString variant() const { return m_variant; } +}; + +#endif // GAMEINFO_H + diff --git a/src/genericposition.h b/src/genericposition.h new file mode 100644 index 0000000..419a0d4 --- /dev/null +++ b/src/genericposition.h @@ -0,0 +1,42 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GENERICPOSITION_H +#define GENERICPOSITION_H + +#include +#include "piece.h" + +class GenericPosition { +public: + virtual const ChessPiece* operator[](const Point&) const = 0; + virtual ChessPiece* operator[](const Point&) = 0; + + virtual const Point first() const = 0; + virtual const Point last() const = 0; + virtual Point next(const Point&) const = 0; + virtual bool valid(const Point&) const = 0; + + virtual void setup() = 0; + + virtual GenericPosition* clone() const = 0; + virtual GenericPosition* _new() const = 0; + // +// virtual void basicMovePiece(const ChessMove&) = 0; +// virtual void basicDropPiece(ChessPiece*, const Point&) = 0; +// virtual void removePiece(const Point&) = 0; +// virtual void setPiece(const Point&, ChessPiece*) = 0; +// +// virtual void move(const ChessMove&) = 0; + virtual ChessPiece::Color turn() const = 0; +// virtual QString type() const = 0; +}; + +#endif diff --git a/src/gnushogiengine.cpp b/src/gnushogiengine.cpp new file mode 100644 index 0000000..4f5d151 --- /dev/null +++ b/src/gnushogiengine.cpp @@ -0,0 +1,139 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "gnushogiengine.h" + +#include +#include + +#include +#include "components.h" +#include +#include "enginenotifier.h" +#include "foreach.h" + +using namespace boost; + +QRegExp GNUShogiEngine::m_move_pattern("[0-9]*\\. \\.\\.\\. ([^ ]*) .*"); + +GNUShogiEngine::GNUShogiEngine(Components* components, + const QString& path, + const QStringList& arguments) +: Engine(path, arguments) +, m_analysing(false) { + // set default features + m_features.ping = false; + m_features.setboard = false; + m_features.playother = false; + m_features.san = false; + m_features.usermove = false; + m_features.time = true; + m_features.draw = true; + m_features.sigint = true; + m_features.sigterm = true; + m_features.reuse = true; + m_features.analyze = false; + m_features.colors = true; + m_features.ics = false; + m_features.name = false; + m_features.pause = false; + + m_features.myname = QFileInfo(m_path).baseName(); + + connect(this, SIGNAL(receivedCommand(const QString&)), + this, SLOT(processCommand(const QString&))); + + m_serializer = components->moveSerializer("simple"); +} + +GNUShogiEngine::~GNUShogiEngine() { + kDebug() << "[debug] destroying engine"; + stop(); + m_engine.kill(); +} + +void GNUShogiEngine::initializeEngine() { + // nothing special to do +} + +void GNUShogiEngine::reset() { + sendCommand("new"); // start a new game + sendCommand("force"); // do not think +} + +void GNUShogiEngine::play() { + sendCommand("go"); // start playing +} + +void GNUShogiEngine::stop() { + sendCommand("quit"); + if (m_features.sigterm) + m_engine.kill(); +} + +void GNUShogiEngine::processCommand(const QString& command) { + //QStringList arg_list = command.split(QRegExp("\\s+")); + //QString cmd = arg_list.takeFirst(); + + if (m_move_pattern.indexIn(command) == 0) { + if (shared_ptr notifier = m_notifier.lock()) + notifier->notifyEngineMove(m_move_pattern.cap(1)); + } +} + +void GNUShogiEngine::sendMove(const Move& move, const StatePtr& ref) { + QString move_str = m_serializer->serialize(move, ref.get()); + sendCommand(move_str); +} + +void GNUShogiEngine::backUp(const StatePtr&) { + sendCommand("undo"); +} + +void GNUShogiEngine::startAnalysis() { + sendCommand("post"); + sendCommand("analyze"); + m_analysing = true; +} + +void GNUShogiEngine::stopAnalysis() { + sendCommand("exit"); + m_analysing = false; +} + +void GNUShogiEngine::setBoard(const StatePtr&) { + #if 0 + if (m_features.setboard) { + sendCommand(QString("setboard %1").arg(pos->fen(halfmove, fullmove))); + } + else { + // this is pretty meaningless for generic variants + if (pos->turn() != 0) { + sendCommand("new"); + sendCommand("a2a3"); + } + + sendCommand("edit"); + sendCommand("#"); + Point size = pos->size(); + for (int i = 0; i < size.x; i++) { + for (int j = 0; j < size.y; j++) { + Point p(i, j); + AbstractPiece::Ptr piece = pos->get(p); + if (piece) sendCommand(QString("%1%2") + .arg(piece->type()) + .arg(p.toString(8))); + } + } + sendCommand("."); + } + #endif +} + diff --git a/src/gnushogiengine.h b/src/gnushogiengine.h new file mode 100644 index 0000000..87bb48d --- /dev/null +++ b/src/gnushogiengine.h @@ -0,0 +1,111 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GNUSHOGIENGINE_H +#define GNUSHOGIENGINE_H + +#include "engine.h" + +class Components; +class IMoveSerializer; +class QRegExp; + +/** + * @brief A shogi engine compatible with gnushogi. + * + * @note This code is partially stolen from the XBoard engine class + */ +class GNUShogiEngine : public Engine { +Q_OBJECT + struct Features { + bool ping : 1; + bool setboard : 1; + bool playother : 1; + bool san : 1; + bool usermove : 1; + bool time : 1; + bool draw : 1; + bool sigint : 1; + bool sigterm : 1; + bool reuse : 1; + bool analyze : 1; + QString myname; + QString variants; + bool colors : 1; + bool ics : 1; + bool name : 1; + bool pause : 1; + bool done : 1; + }; + + Features m_features; + bool m_analysing; + IMoveSerializer* m_serializer; + + static QRegExp m_move_pattern; +protected: + /** + * Initialize the engine. + */ + virtual void initializeEngine(); +protected Q_SLOTS: + /** + * Parse engine command line and the appropriate + * signals. + */ + void processCommand(const QString& command); +public: + /** + * Create an gnushogi compatible engine. + */ + GNUShogiEngine(Components* components, + const QString& path, + const QStringList& arguments); + + /** + * Terminate the engine. + */ + virtual ~GNUShogiEngine(); + + /** + * Send a move to the engine. + */ + virtual void sendMove(const Move& move, const StatePtr& ref); + + /** + * Back up a move. + * @param pos The position before the move. Used if the engine + * does not support the undo command. + */ + virtual void backUp(const StatePtr& pos); + + virtual void setBoard(const StatePtr& pos); + + + /** + * Begin a new game. + */ + virtual void reset(); + + /** + * Start playing. + */ + virtual void play(); + + /** + * Stop the engine. + */ + virtual void stop(); + + virtual void startAnalysis(); + virtual void stopAnalysis(); +}; + +#endif // GNUSHOGIENGINE_H diff --git a/src/graphicalgame.cpp b/src/graphicalgame.cpp new file mode 100644 index 0000000..a05517d --- /dev/null +++ b/src/graphicalgame.cpp @@ -0,0 +1,369 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include + +#include "variant.h" +#include "components.h" +#include "graphicalgame.h" + +#include + +#include "game.h" +#include "game_p.h" +#include "mastersettings.h" +#include "graphicalsystem.h" +#include "movelist_table.h" +#include "decoratedmove.h" +#include "entities/userentity.h" + +using namespace GamePrivate; // is this ok? + +template +inline void setFlag(QFlags& flag, Enum e, bool value) { + if (value) + flag |= e; + else + flag &= ~e; +} + + +class CtrlAction { + Game* m_game; + bool m_done; + Index m_index; +public: + CtrlAction(Game* game) + : m_game(game) + , m_index(game->index()) { + m_done = m_game->back(); + } + + void forfait() { m_done = false; } + + ~CtrlAction() { + if (m_done) m_game->goTo(m_index); + } +}; + +GraphicalGame::GraphicalGame(GraphicalSystem* graphical, + MoveList::Table* m) +: Game(graphical->components()) +, m_graphical(graphical) +, m_movelist(m) +, m_anim_sequence(false) { + m_action_state = 0; + m_decorator = graphical->components()->moveSerializer("decorated"); + + if(m_movelist) { + m_movelist->reset(); + // FIXME restore move list layout + m_movelist->setLayoutStyle(0 /*graphical->m_variant->moveListLayout()*/); + m_movelist->setNotifier( static_cast(this) ); + m_movelist->show(); + } + settings().onChange(this, "settingsChanged", "Loader::Theme"); + settingsChanged(); +} + +GraphicalGame::~GraphicalGame() { + if(m_movelist) { + Q_ASSERT(m_movelist->getNotifier() == static_cast(this)); + + m_movelist->setNotifier(NULL, false); + } +} + +void GraphicalGame::settingsChanged() { + m_anim_sequence = settings().flag("animations", true) + && settings()("animations").flag("sequence", true); + m_anim_sequence_max = settings()("animations")("sequence")[QString("max")] | 10; +} + +void GraphicalGame::onAdded(const Index& ix) { + onAddedInternal(ix); + updateActionState(); +} + +void GraphicalGame::onAddedInternal(const Index& ix, bool confirm_promotion) { + if(!m_movelist) + return; + + int at; + History *vec = fetchRef(ix, &at); + if(!vec) { + kError() << "invalid index " << ix; + return; + } + + m_movelist->remove(ix, confirm_promotion); //clear existing, if any + + Index index = ix; + for(int i=at;i<(int)vec->size();i++) { + Entry* e = &(*vec)[i]; + StatePtr prev = position(index.prev()); + DecoratedMove mv( + (e->move != Move() && prev) ? + m_decorator->serialize(e->move, prev.get()) : + (e->position ? "(-)" : "???")); + + int turn = prev ? prev->turn()->index() : (index.totalNumMoves()+1)%2; + + //mv += " " + QString::number(turn); + m_movelist->setMove(index, turn, mv, e->comment, confirm_promotion); + + for (Variations::const_iterator it = e->variations.begin(); + it != e->variations.end(); ++it) + onAddedInternal(index.next(it->first), confirm_promotion); + for (VComments::const_iterator it = e->vcomments.begin(); + it != e->vcomments.end(); ++it) + m_movelist->setVComment(index, it->first, it->second, confirm_promotion); + + index = index.next(); + } +} + +void GraphicalGame::onEntryChanged(const Index& at, int propagate) { + if(at <= Index(0)) { + Entry* e = fetch(at); + if(!e) + return; + if(at == current && e->position) + m_graphical->warp(e->move, e->position); + return; + } + + if(m_movelist) { + Entry* e = fetch(at); + if(!e) + return; + + Entry* pe = fetch(at.prev()); + + StatePtr last_pos; + if (pe) last_pos = pe->position; + + DecoratedMove mv( + (e->move != Move() && last_pos) ? + m_decorator->serialize(e->move, last_pos.get()) : + (e->position ? "(-)" : "???")); + + int turn = last_pos ? + last_pos->turn()->index() : + (at.totalNumMoves()+1)%2; + + m_movelist->setMove(at, turn, mv, e->comment); + if(at == current && e->position) + m_graphical->warp(e->move, e->position); + + // when an entry changes, chances are that we get some more information about the + // next ones as well + if(propagate) { + onEntryChanged(at.next(), propagate-1); + for (Variations::const_iterator it = e->variations.begin(); + it != e->variations.end(); ++it) + onEntryChanged(at.next(it->first), propagate-1); + } + } +} + +void GraphicalGame::onRemoved(const Index& i) { + if(m_movelist) + m_movelist->remove(i); + updateActionState(); +} + +void GraphicalGame::onPromoteVariation(const Index& i, int v) { + if(m_movelist) { + m_movelist->promoteVariation(i,v); + onAddedInternal(i.next(), true); + onAddedInternal(i.next(v), true); + VComments vc = fetch(i)->vcomments; + VComments::const_iterator it = vc.find(v); + if(it != vc.end()) + m_movelist->setVComment(i, v, it->second, true); + m_movelist->select(current, true); + } + updateActionState(); +} + +void GraphicalGame::onSetComment(const Index& i, const QString& s) { + if(m_movelist) + m_movelist->setComment(i, s); +} + +void GraphicalGame::onSetVComment(const Index& i, int v, const QString& s) { + if(m_movelist) + m_movelist->setVComment(i, v, s); +} + +void GraphicalGame::updateActionState() { + ActionState old_state = m_action_state; + setFlag(m_action_state, BACK, current != 0); + setFlag(m_action_state, BEGIN, current != 0); + Entry* next_entry = fetch(current.next()); + setFlag(m_action_state, FORWARD, next_entry); + setFlag(m_action_state, END, next_entry); + if (old_state != m_action_state) + onActionStateChange(); +} + +void GraphicalGame::onCurrentIndexChanged(const Index& old_c) { + if (m_ctrl) m_ctrl->forfait(); + + if(m_movelist) + m_movelist->select(current); + + updateActionState(); + + Entry *oe = fetch(old_c); + Entry *e = fetch(current); + std::pair steps = old_c.stepsTo(current); + + if(!e || !e->position) + return; + + if(!oe || !oe->position) { + m_graphical->warp(move(), position()); + return; + } + + bool can_animate = (steps.first+steps.second <= 1) || (m_anim_sequence + && (steps.first+steps.second <= m_anim_sequence_max)); + + if(can_animate) + for(int i=1;i<=steps.first;i++) + if( move(old_c.prev(i-1)) == Move() || + !position(old_c.prev(i))) { + can_animate = false; + break; + } + + if(can_animate) + for(int i=steps.second-1;i>=0;i--) + if( move(current.prev(i)) == Move() || + !position(current.prev(i))) { + can_animate = false; + break; + } + + if(can_animate) { + for(int i=1;i<=steps.first;i++) + m_graphical->back( move(old_c.prev(i)), move(old_c.prev(i-1)), position(old_c.prev(i))); + for(int i=steps.second-1;i>=0;i--) + m_graphical->forward( move(current.prev(i)), position(current.prev(i))); + } + else + m_graphical->warp( move(), position()); + + // set m_action_state + +} + +void GraphicalGame::onAvailableUndo(bool e) { + setFlag(m_action_state, UNDO, e); + onActionStateChange(); +} + +void GraphicalGame::onAvailableRedo(bool e) { + setFlag(m_action_state, REDO, e); + onActionStateChange(); +} + +void GraphicalGame::onUserSelectMove(const Index& i) { + if (boost::shared_ptr entity = m_listener_entity.lock()) + if (entity->goTo(i)) + return; + + // fallback + goTo(i); +} + +void GraphicalGame::onUserSetComment(const Index& i, QString s) { + setComment(i, s); +} + +void GraphicalGame::onUserSetVComment(const Index& i, int v, QString s) { + setVComment(i, v, s); +} + +void GraphicalGame::onUserClearVariations(const Index& i) { + clearVariations(i); +} + +void GraphicalGame::onUserTruncate(const Index& i) { + if (i == index()) + if (boost::shared_ptr entity = m_listener_entity.lock()) + if (entity->truncate()) + return; + + // fallback + truncate(i); +} + +void GraphicalGame::onUserPromoteVariation(const Index& i) { + if (i == index()) + if (boost::shared_ptr entity = m_listener_entity.lock()) + if (entity->promoteVariation()) + return; + + // fallback + promoteVariation(i); +} + +void GraphicalGame::onUserRemoveVariation(const Index& i) { + removeVariation(i); +} + +void GraphicalGame::onUserUndo() { + if (boost::shared_ptr entity = m_listener_entity.lock()) + if (entity->undo()) + return; + + // fallback + undo(); +} + +void GraphicalGame::onUserRedo() { + if (boost::shared_ptr entity = m_listener_entity.lock()) + if (entity->redo()) + return; + + // fallback + redo(); +} + +void GraphicalGame::onDetachNotifier() { + Q_ASSERT(m_movelist->getNotifier() == static_cast(this)); + + m_movelist = NULL; +} + +void GraphicalGame::createCtrlAction() { + m_ctrl = boost::shared_ptr(new CtrlAction(this)); +} + +void GraphicalGame::destroyCtrlAction() { + m_ctrl.reset(); +} + +void GraphicalGame::setActionStateObserver( + const boost::shared_ptr& obs) { + m_action_state_observer = obs; +} + +void GraphicalGame::onActionStateChange() { + m_action_state_observer->notifyActionStateChange(m_action_state); +} + +ActionStateObserver::~ActionStateObserver() { } diff --git a/src/graphicalgame.h b/src/graphicalgame.h new file mode 100644 index 0000000..cfb90a7 --- /dev/null +++ b/src/graphicalgame.h @@ -0,0 +1,107 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GRAPHICALGAME_H +#define GRAPHICALGAME_H + +#include +#include +#include +#include "game.h" +#include "movelist_notifier.h" + +class GraphicalSystem; +class CtrlAction; +class IMoveSerializer; +class UserEntity; +class GraphicalGame; +class ActionStateObserver; +namespace MoveList { class Table; } + +class GraphicalGame : public QObject, public Game, public MoveList::Notifier { +Q_OBJECT +public: + /** + * @brief State of GUI actions associated to a game. + */ + enum ActionStateFlag { + UNDO = 0x1, + REDO = 0x2, + BEGIN = 0x4, + BACK = 0x8, + FORWARD = 0x10, + END = 0x20 + }; + Q_DECLARE_FLAGS(ActionState, ActionStateFlag) +private: + GraphicalSystem* m_graphical; + MoveList::Table* m_movelist; + bool m_anim_sequence; + int m_anim_sequence_max; + + IMoveSerializer* m_decorator; + + boost::shared_ptr m_ctrl; + boost::weak_ptr m_listener_entity; + boost::shared_ptr m_action_state_observer; + ActionState m_action_state; + void updateActionState(); + +private Q_SLOTS: + void settingsChanged(); + +public: + GraphicalGame(GraphicalSystem* graphical, MoveList::Table* m); + ~GraphicalGame(); + + void onAddedInternal(const Index& i, bool confirm_promotion = false); + virtual void onAdded(const Index& i); + virtual void onRemoved(const Index& i); + virtual void onEntryChanged(const Index& at, int propagate=1); + virtual void onPromoteVariation(const Index& i, int v); + virtual void onSetComment(const Index& i, const QString& s); + virtual void onSetVComment(const Index& i, int v, const QString& s); + virtual void onCurrentIndexChanged(const Index& old_c); + virtual void onAvailableUndo(bool e); + virtual void onAvailableRedo(bool e); + virtual void onUserSelectMove(const Index& i); + virtual void onUserSetComment(const Index& i, QString s); + virtual void onUserSetVComment(const Index& i, int v, QString s); + virtual void onUserClearVariations(const Index& i); + virtual void onUserTruncate(const Index& i); + virtual void onUserPromoteVariation(const Index& i); + virtual void onUserRemoveVariation(const Index& i); + virtual void onUserUndo(); + virtual void onUserRedo(); + virtual void onDetachNotifier(); + + virtual void createCtrlAction(); + virtual void destroyCtrlAction(); + + void setEntity(const boost::shared_ptr& entity) { m_listener_entity = entity; } + void detachEntity() { m_listener_entity.reset(); } + void setActionStateObserver(const boost::shared_ptr& obs); + void onActionStateChange(); +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(GraphicalGame::ActionState) + + +/** + * @brief An observer that is notified of changes in the ActionState flags. + */ +class ActionStateObserver { +public: + virtual ~ActionStateObserver(); + + virtual void notifyActionStateChange(GraphicalGame::ActionState state) = 0; +}; + +#endif //GRAPHICALGAME_H diff --git a/src/graphicalsystem.cpp b/src/graphicalsystem.cpp new file mode 100644 index 0000000..862c030 --- /dev/null +++ b/src/graphicalsystem.cpp @@ -0,0 +1,309 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "graphicalsystem.h" + +#include + +#include +#include +#include +#include +#include + +#include "chesstable.h" +#include "chessboard.h" +#include "clock.h" +#include "components.h" +#include "piecepool.h" +#include "pointconverter.h" +#include "sprite.h" +#include "animation.h" +#include "pref_theme.h" +#include "movelist_table.h" +#include "mastersettings.h" + +using namespace boost; + +//BEGIN GraphicalSystem + +GraphicalSystem::GraphicalSystem(ChessTable* view, + const StatePtr& startingPosition, + Components* components) +: m_view(view) +, m_components(components) { + m_state = StatePtr(startingPosition->clone()); + Point s = m_state->board()->size(); + for(int i=0;iboard()->set(Point(i,j), Piece()); + + m_board = view->board(); + + m_board->createGrid(m_state->board()->size(), m_state->board()->borderCoords()); + m_board->reset(); + + m_view->pool(0)->clear(); + m_view->pool(1)->clear(); + + m_animator = m_components->createAnimator(this); + + settings().onChange(this, "settingsChanged", "Loader::Theme"); + settingsChanged(); + + if (startingPosition) + warp(Move(), startingPosition); +} + +GraphicalSystem::~GraphicalSystem() { + delete m_animator; +} + +const PointConverter* GraphicalSystem::converter() const { + return m_board->converter(); +} + +const IndexConverter* GraphicalSystem::indexConverter(int pool) const { + return m_view->pool(pool)->converter(); +} + +const IState* GraphicalSystem::state() const { + return m_state.get(); +} + +void GraphicalSystem::settingsChanged() { + ThemeInfo theme = PrefTheme::getBestTheme(m_components->variant(), "pieces"); + ThemeInfo sqtheme = PrefTheme::getBestTheme(m_components->variant(), "squares"); + ThemeInfo figtheme = PrefTheme::getBestTheme(m_components->variant(), "figurines"); + ThemeInfo ctrltheme = PrefTheme::getBestTheme(m_components->variant(), "controls"); + + m_board->loader()->setTheme(theme); + m_board->tagsLoader()->setTheme(sqtheme); + m_board->controlsLoader()->setTheme(ctrltheme); + + for(int i=0;i<2;i++) + m_view->pool(i)->loader()->setTheme(theme); + + for(int i=0;i<2;i++) + m_view->clock(i)->controlsLoader()->setTheme(ctrltheme); + + m_view->moveListTable()->setLoaderTheme(figtheme); + m_view->moveListTable()->settingsChanged(); + + //clear board and pool, forcing reload + m_view->settingsChanged(); +} + +void GraphicalSystem::setup(const shared_ptr& entity) { + m_view->setEntity(entity); +} + +NamedSprite GraphicalSystem::getSprite(const Point& p) { + if (!m_board->m_sprites.valid(p)) + return NamedSprite(); + + return m_board->m_sprites[p]; +} + +NamedSprite GraphicalSystem::takeSprite(const Point& p) { + if (!m_board->m_sprites.valid(p)) + return NamedSprite(); + + NamedSprite retv = m_board->m_sprites[p]; + m_board->m_sprites[p] = NamedSprite(); + return retv; +} + +NamedSprite GraphicalSystem::setPiece(const Point& p, const Piece& piece, bool show) { + return m_board->m_sprites[p] = createPiece(p, piece, show); +} + +NamedSprite GraphicalSystem::createPiece(const Point& p, const Piece& piece, bool show) { + Q_ASSERT(piece != Piece()); + if (!m_board->m_sprites.valid(p)) + return NamedSprite(); + + QString name = m_components->namer()->name(piece); + NamedSprite s(name, SpritePtr(new Sprite(m_board->loadSprite(name), + m_board->piecesGroup(), m_board->converter()->toReal(p)))); + if (show) + s.sprite()->show(); + return s; +} + +void GraphicalSystem::setSprite(const Point& p, const NamedSprite& sprite) { + if (!m_board->m_sprites.valid(p)) + return; + + m_board->m_sprites[p] = sprite; +} + +int GraphicalSystem::poolSize(int pool) { + return m_view->pool(pool)->fill(); +} + +NamedSprite GraphicalSystem::getPoolSprite(const IColor* pool, int index) { + return m_view->pool(pool->index())->getSprite(index); +} + +void GraphicalSystem::removePoolSprite(const IColor* pool, int index) { + m_view->pool(pool->index())->removeSprite(index); +} + +NamedSprite GraphicalSystem::takePoolSprite(const IColor* pool, int index) { + return m_view->pool(pool->index())->takeSprite(index); +} + +NamedSprite GraphicalSystem::insertPoolPiece(const IColor* pool, + int index, + const Piece& piece) { + PiecePool *pl = m_view->pool(pool->index()); + QString name = m_components->namer()->name(piece); + QPixmap px = pl->loadSprite(name); + + NamedSprite s(name, SpritePtr(new Sprite(px, pl, QPoint()))); + pl->insertSprite(index, s); + return s; +} + +std::pair GraphicalSystem::droppedPoolPiece() { + return std::pair(m_board->m_dropped_pool, m_board->m_dropped_index); +} + +void GraphicalSystem::forward(const Move& move, + const StatePtr& pos, + const SpritePtr& /*movingSprite*/) { + const Piece* sel1 = m_state->board()->get(m_board->selection); + + if (move != Move()) { + AnimationPtr animation = m_animator->forward(move, pos.get()); + m_view->animationManager()->enqueue(animation); + m_board->setTags("highlighting", move.src(), move.dst()); + + m_state->assign(pos.get()); + } + else + warp(Move(), pos); + + const Piece* sel2 = m_state->board()->get(m_board->selection); + if(!(sel1 != NULL && sel2 != NULL && + *sel1 != Piece() && *sel2 != Piece() && *sel1 == *sel2)) + m_board->cancelSelection(); + + m_board->cancelPremove(); + m_view->updateTurn(pos->turn()->index()); + m_board->onPositionChanged(); +} + +void GraphicalSystem::back(const Move& lastMove, + const Move& move, + const StatePtr& state) { + const Piece* sel1 = m_state->board()->get(m_board->selection); + + if (move != Move()) { + AnimationPtr animation = m_animator->back(move, state.get()); + //??? animation->setChainAbortions(false); + m_view->animationManager()->enqueue(animation); + + m_state->assign(state.get()); + } + else + warp(lastMove, state); + + if (lastMove != Move()) + m_board->setTags("highlighting", lastMove.src(), lastMove.dst()); + else + m_board->clearTags("highlighting"); + + const Piece* sel2 = m_state->board()->get(m_board->selection); + if(!(sel1 != NULL && sel2 != NULL && + *sel1 != Piece() && *sel2 != Piece() && *sel1 == *sel2)) + m_board->cancelSelection(); + m_board->cancelPremove(); + m_view->updateTurn(state->turn()->index()); + m_board->onPositionChanged(); +} + +void GraphicalSystem::warp(const Move& lastMove, + const StatePtr& state) { + + const Piece* sel1 = m_state->board()->get(m_board->selection); + + AnimationPtr animation = m_animator->warp(state.get()); + //??? animation->setChainAbortions(false); + if (animation) { + m_view->animationManager()->enqueue(animation); + } + + m_state->assign(state.get()); + + if (lastMove != Move()) + m_board->setTags("highlighting", lastMove.src(), lastMove.dst()); + else + m_board->clearTags("highlighting"); + + const Piece* sel2 = m_state->board()->get(m_board->selection); + if(!(sel1 != NULL && sel2 != NULL && + *sel1 != Piece() && *sel2 != Piece() && *sel1 == *sel2)) + m_board->cancelSelection(); + m_view->updateTurn(state->turn()->index()); + m_board->onPositionChanged(); +} + +void GraphicalSystem::adjustSprite(const Point& p) { + SpritePtr sprite = m_board->m_sprites[p].sprite(); + Q_ASSERT(sprite); + QPoint destination = m_board->converter()->toReal(p); + shared_ptr animation(new MovementAnimation(sprite, destination)); + m_view->animationManager()->enqueue(animation); +} + +void GraphicalSystem::setTurn(const IColor* turn) { + m_state->setTurn(turn); + m_view->updateTurn(m_state->turn()->index()); +} + +AnimationPtr GraphicalSystem::group(const QString&) const { + return AnimationPtr(new AnimationGroup); +} + +AnimationPtr GraphicalSystem::appear(const NamedSprite& sprite, + const QString& flags) const { + return m_view->animationManager()->appear(sprite, flags); +} + +AnimationPtr GraphicalSystem::disappear(const NamedSprite& sprite, + const QString& flags) const { + return m_view->animationManager()->disappear(sprite, flags); +} + +AnimationPtr GraphicalSystem::move(const NamedSprite& sprite, + const Point& destination, + const QString& flags) const { + QPoint real = converter()->toReal(destination); + Point origin = converter()->toLogical(sprite.sprite()->pos() + + Point(converter()->squareSize(), converter()->squareSize()) / 2); + return m_view->animationManager()->move(sprite, real, origin != destination, flags); +} + +AnimationPtr GraphicalSystem::move(const NamedSprite& sprite, + int pool, int destination, + const QString& flags) const { + QPoint real = indexConverter(pool)->toReal(destination); + return m_view->animationManager()->move(sprite, real, true, flags); +} + +AnimationPtr GraphicalSystem::morph(const NamedSprite& sprite1, + const NamedSprite& sprite2, + const QString& flags) const { + return m_view->animationManager()->morph(sprite1, sprite2, flags); +} + +Components* GraphicalSystem::components() const { return m_components; } diff --git a/src/graphicalsystem.h b/src/graphicalsystem.h new file mode 100644 index 0000000..bf9e82d --- /dev/null +++ b/src/graphicalsystem.h @@ -0,0 +1,199 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GRAPHICALSYSTEM_H +#define GRAPHICALSYSTEM_H + +#include +#include +#include +#include +#include +#include + +class ChessBoard; +class ChessTable; +class Components; +class IAnimator; +class INamer; +class IState; +class Move; +class IndexConverter; +class PointConverter; +class UserEntity; + +class GraphicalSystem : public QObject, + private TaguaAPI { +Q_OBJECT + +public: + + /** The current chess table */ + ChessTable* m_view; + + /** The current board */ + // FIXME: why is this needed? couldn't it be extracted from the view dynamically? + ChessBoard* m_board; + + /** The current state */ + StatePtr m_state; + + /** The variant specific animator */ + IAnimator* m_animator; + + Components* m_components; + + /** @a GraphicalPosition interface function implementation */ +// virtual void addTag(const QString& name, Point, bool over = false); + + /** @a GraphicalPosition interface function implementation */ +// virtual void clearTags(const QString& name); + + /** @a GraphicalPosition interface function implementation */ +// virtual void setTags(const QString& name, Point p1 = Point::invalid(), Point p2 = Point::invalid(), +// Point p3 = Point::invalid(), Point p4 = Point::invalid(), +// Point p5 = Point::invalid(), Point p6 = Point::invalid() ); + +public Q_SLOTS: + /** internal function to listen at setting changes */ + void settingsChanged(); + +private: + /** + * @return the board point converter. (interface for TaguaAPI) + */ + virtual const PointConverter* converter() const; + + /** + * @return the index converter of the specified pool. + */ + virtual const IndexConverter* indexConverter(int pool) const; + + /** + * @return the current abstract position. (interface for TaguaAPI) + */ + virtual const IState* state() const; + + /** + * @return a sprite at the position @a index in the graphical pool. (interface for TaguaAPI) + */ + virtual NamedSprite getSprite(const Point& p); + + /** + * Removes a sprite at the position @a index in the graphical pool. (interface for TaguaAPI) + * @return the newly created sprite. + */ + virtual NamedSprite takeSprite(const Point& p); + + /** + * Sets the piece at the position @a index in the graphical pool. (interface for TaguaAPI) + * @return the newly created sprite. + */ + virtual NamedSprite setPiece(const Point& p, const Piece& piece, bool show); + + /** + * Create a new piece, but do not add it to the graphical system. + * @return the newly created sprite. + */ + virtual NamedSprite createPiece(const Point& p, const Piece& piece, bool show); + + /** + * Sets the sprite at the position @a index in the graphical pool. (interface for TaguaAPI) + * @return the newly created sprite. + */ + virtual void setSprite(const Point& p, const NamedSprite& sprite); + + /** + * @return how many sprites are contained in the pool + */ + virtual int poolSize(int pool); + + /** + * @return the sprite at the position @a index in the graphical pool. (interface for TaguaAPI) + */ + virtual NamedSprite getPoolSprite(const IColor* pool, int index); + + /** + * Removes the sprite at the position @a index in the graphical pool. (interface for TaguaAPI) + */ + virtual void removePoolSprite(const IColor* pool, int index); + + /** + * Removes the sprite at the position @a index in the graphical pool (only for drops). + * (interface for TaguaAPI) + * @return the removed sprite. + */ + virtual NamedSprite takePoolSprite(const IColor* pool, int index); + + /** + * Inserts a sprite at the position @a index in the graphical pool. (interface for TaguaAPI) + * @return the newly created sprite. + */ + virtual NamedSprite insertPoolPiece(const IColor* pool, + int index, + const Piece& piece); + + /** + * @return the piece of the pool that has been dropped, or (-1,-1). (interface for TaguaAPI) + */ + virtual std::pair droppedPoolPiece(); + +public: + /** Constructor */ + GraphicalSystem(ChessTable* view, const StatePtr& startingPosition, Components* components); + virtual ~GraphicalSystem(); + + /** Sets the reference entity */ + void setup(const boost::shared_ptr& entity); + + /** Goes forward playing a move, that has to be legal and checked */ + void forward(const Move& move, + const StatePtr& pos, + const SpritePtr& = SpritePtr()); + + /** Goes back undoing a move, that has to be legal and checked */ + void back(const Move& lastMove, + const Move& move, + const StatePtr& pos); + + /** Warps to a new position */ + void warp(const Move& lastMove, + const StatePtr& pos); + + /** Adjusts a sprite to the correct position */ + void adjustSprite(const Point& p); + + /** Sets the current turn */ + void setTurn(const IColor* turn); + + + + // TAGUA API + Components* components() const; + + virtual AnimationPtr group(const QString& flags) const; + virtual AnimationPtr appear(const NamedSprite& sprite, + const QString& flags) const; + virtual AnimationPtr disappear(const NamedSprite& sprite, + const QString& flags) const; + virtual AnimationPtr move(const NamedSprite& sprite, + const Point& destination, + const QString& flags) const; + virtual AnimationPtr move(const NamedSprite& sprite, + int pool, + int destination, + const QString& flags) const; + virtual AnimationPtr morph(const NamedSprite& sprite1, + const NamedSprite& sprite2, + const QString& flags) const; +}; + + +#endif //GRAPHICALSYSTEM_H diff --git a/src/grid.h b/src/grid.h new file mode 100644 index 0000000..99c3243 --- /dev/null +++ b/src/grid.h @@ -0,0 +1,133 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef GRID_H +#define GRID_H + +#include +#include + +#include +#include +#include +#include + +template +class Grid { + int sizeX, sizeY; +protected: + std::vector board; +public: + + template friend class Grid; + + Grid(int sizeX, int sizeY, const T& defaultValue) + : sizeX(sizeX), sizeY(sizeY) { + board.resize(sizeX * sizeY, defaultValue); + } + + Grid(int sizeX, int sizeY) + : sizeX(sizeX), sizeY(sizeY) { + board.resize(sizeX * sizeY); + } + + Grid(const Grid& other) + : sizeX(other.sizeX), sizeY(other.sizeY) + , board(other.board) { } + + template + Grid(const Grid& other) + : sizeX(other.getSize().x), sizeY(other.getSize().y) { + board.resize(sizeX * sizeY); + for(int i=sizeX * sizeY-1; i>=0;i--) + board[i] = other.board[i]; + } + + Point getSize() const { + return Point(sizeX, sizeY); + } + + void changeSize(int x, int y) { + sizeX = x; + sizeY = y; + board.resize(sizeX * sizeY); + } + + const T& operator[](Point p) const { + Q_ASSERT(valid(p)); + + return board[p.x + p.y * sizeX]; + } + T& operator[](Point p) { + Q_ASSERT(valid(p)); + + return board[p.x + p.y * sizeX]; + } + + /** \return the nth point in the grid, that is not guaranteed to be valid */ + Point nTh(int index) const { return Point(index%sizeX, index/sizeX); } + + Point first() const { return Point(0,0); } + Point last() const { return Point(sizeX-1, sizeY-1); } + + Point next(const Point& p) const { + if (p.x >= sizeX-1) + return Point(0, p.y+1); + else + return Point(p.x+1, p.y); + } + bool valid(const Point& p) const { + return (0 <= p.x) && (p.x < sizeX) && (0 <= p.y) && (p.y < sizeY); + } + + bool operator==(const Grid& g) const { + if(g.sizeX != sizeX || g.sizeY != sizeY) + return false; + for(unsigned int i=0;i + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef HIGHLIGHTER_H +#define HIGHLIGHTER_H + +#include +#include +#include + +class PatternListAdaptorOutputIterator; +class PatternListAdaptorInputIterator; + +class Highlighter : public QSyntaxHighlighter { +Q_OBJECT +public: + struct Pattern { + QString name; + QRegExp pattern; + QTextCharFormat format; + }; +private: + std::vector m_patterns; +public: + Highlighter(QTextDocument* parent); + Highlighter(QTextDocument* parent, const Pattern& pattern); + void reload(); + + static void load(PatternListAdaptorOutputIterator& out); + static void save(const PatternListAdaptorInputIterator& in); + + virtual void highlightBlock(const QString& text); + std::vector& patterns(); +}; + + +class PatternListAdaptorOutputIterator { +public: + virtual ~PatternListAdaptorOutputIterator() { } + virtual void add(const Highlighter::Pattern&) = 0; +}; + +class PatternListAdaptorInputIterator { +public: + virtual ~PatternListAdaptorInputIterator() { } + virtual boost::shared_ptr clone() const = 0; + virtual bool valid() const = 0; + virtual PatternListAdaptorInputIterator& inc() = 0; + virtual const Highlighter::Pattern& value() const = 0; +}; + +#endif // HIGHLIGHTER_H diff --git a/src/histlineedit.cpp b/src/histlineedit.cpp new file mode 100644 index 0000000..ab18359 --- /dev/null +++ b/src/histlineedit.cpp @@ -0,0 +1,67 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include "histlineedit.h" + +HistLineEdit::HistLineEdit(QWidget* parent) +: QLineEdit(parent) { + current = 0; + + connect(this, SIGNAL(returnPressed()), this, SLOT(updateHistory())); + } + +void HistLineEdit::keyPressEvent(QKeyEvent* e) { + if (echoMode() == Password) { + e->ignore(); + QLineEdit::keyPressEvent(e); + return; + } + + if (e->key() == Qt::Key_Up) { + if (current > 0) + setHistoryText(current-1); + } + else if (e->key() == Qt::Key_Down) { + if (current < history.size()) + setHistoryText(current+1); + } + else if (e->key() == Qt::Key_PageUp) + pageUp(); + else if (e->key() == Qt::Key_PageDown) + pageDown(); + else e->ignore(); + + QLineEdit::keyPressEvent(e); +} + +void HistLineEdit::setHistoryText(uint index) { + if (current == history.size()) + buffer = text(); + + if (index == history.size()) + setText(buffer); + else + setText(history[index]); + + current = index; +} + +void HistLineEdit::updateHistory() { + if (echoMode() != Password) { + + history.push_back(text()); + buffer = ""; + current = history.size(); + } + + receivedInput(text()); + setText(""); +} diff --git a/src/histlineedit.h b/src/histlineedit.h new file mode 100644 index 0000000..f9f9516 --- /dev/null +++ b/src/histlineedit.h @@ -0,0 +1,36 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef HISTLINEEDIT_H +#define HISTLINEEDIT_H + +#include +#include + +class HistLineEdit : public QLineEdit { + Q_OBJECT + std::vector history; + uint current; + + void setHistoryText(uint index); + QString buffer; +public: + HistLineEdit(QWidget* parent); +protected: + void keyPressEvent(QKeyEvent*); +public Q_SLOTS: + void updateHistory(); +Q_SIGNALS: + void pageUp(); + void pageDown(); + void receivedInput(const QString&); +}; + +#endif // HISTLINEEDIT_H diff --git a/src/hline.cpp b/src/hline.cpp new file mode 100644 index 0000000..94565ea --- /dev/null +++ b/src/hline.cpp @@ -0,0 +1,178 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "hline.h" +#include + +class TrivialExecutor : public HLineExecutor { +public: + virtual ~TrivialExecutor() { + kDebug(); + } + + virtual void writeChunk(const QString& text) { + kDebug() << text << "|"; + } + + virtual void setFormat(const QTextCharFormat&) { } +}; + +void HLine::Format::applyTo(QTextCharFormat& fmt) const { + if (m_bold.first) { + fmt.setFontWeight(m_bold.second ? QFont::Bold : QFont::Normal); + } + if (m_italic.first) { + fmt.setFontItalic(m_italic.second); + } + if (m_color.first) + fmt.setForeground(m_color.second); +} + +HLine::HLine(const QString& text, const QTextCharFormat& baseFormat) +: m_text(text) { + m_regions.push_back(Region(text.length(), baseFormat)); +} + +HLine::HLine(const HLine& other) +: m_regions(other.m_regions) +, m_text(other.m_text) { } + +uint HLine::findRegion(int index) const { + if (index >= m_text.length()) return m_regions.size(); + uint r = 0; + while (index >= m_regions[r].end()) + r++; + Q_ASSERT(r < m_regions.size()); + return r; +} + +int HLine::begin(uint r) const { + if (r == 0) return 0; + else return m_regions[r - 1].end(); +} + +uint HLine::splitRegion(int index) { + if (index >= m_text.length()) return m_regions.size(); + int r = findRegion(index); + if (begin(r) != index) { + m_regions.insert( + m_regions.begin() + r + 1, + m_regions[r]); + m_regions[r].setEnd(index); + return r + 1; + } + else return r; +} + +const QTextCharFormat& HLine::getFormat(int index) const { + return m_regions[findRegion(index)].format(); +} + +void HLine::setFormat(int begin, int end, const Format& format) { + Q_ASSERT(begin < m_text.length()); + Q_ASSERT(end <= m_text.length()); + + if (begin >= end) return; + int r1 = splitRegion(begin); + int r2 = splitRegion(end); + + for (int r = r1; r < r2; r++) { + QTextCharFormat fmt = m_regions[r].format(); + format.applyTo(fmt); + m_regions[r].setFormat(fmt); + } +} + +void HLine::setBold(int begin, int end, bool value) { + Format format; + format.m_bold = std::make_pair(true, value); + setFormat(begin, end, format); +} + +void HLine::setItalic(int begin, int end, bool value) { + Format format; + format.m_italic = std::make_pair(true, value); + setFormat(begin, end, format); +} + +void HLine::setColor(int begin, int end, const QColor& color) { + Format format; + format.m_color = std::make_pair(true, color); + setFormat(begin, end, format); +} + +QString HLine::mid(int begin, int end) const { + return m_text.mid(begin, end - begin); +} + +HLine* HLine::extract(int begin, int end) const { + HLine* res = new HLine(*this); + int r1 = res->splitRegion(begin); + int r2 = res->splitRegion(end); + + // adjust text + res->m_text = mid(begin, end); + + // remove superfluous regions + res->m_regions.erase( + res->m_regions.begin() + r2, + res->m_regions.end()); + res->m_regions.erase( + res->m_regions.begin(), + res->m_regions.begin() + r1); + + // adjust regions + for (uint i = 0; i < res->m_regions.size(); i++) { + res->m_regions[i].setEnd(res->m_regions[i].end() - begin); + } + + return res; +} + +HLine* HLine::append(const HLine& other, int begin, int end) const { + HLine* res = new HLine(*this); + + int old_r = res->m_regions.size(); + int old_length = res->m_text.length(); + + // append text + res->m_text += other.mid(begin, end); + + // add regions + int r1 = other.findRegion(begin); + int r2 = other.findRegion(end); + std::copy(other.m_regions.begin() + r1, + other.m_regions.begin() + r2, + std::back_insert_iterator >(res->m_regions)); + + // adjust regions + for (uint i = old_r; i < res->m_regions.size(); i++) { + int new_end = old_length + res->m_regions[i].end() - begin; + res->m_regions[i].setEnd(new_end); + } + + return res; +} + +void HLine::dump() const { + TrivialExecutor executor; + run(executor); +} + +void HLine::run(HLineExecutor& executor) const { + int begin = 0; + for (uint i = 0; i < m_regions.size(); i++) { + int end = m_regions[i].end(); + executor.setFormat(m_regions[i].format()); + executor.writeChunk(mid(begin, end)); + begin = end; + } +} + diff --git a/src/hline.h b/src/hline.h new file mode 100644 index 0000000..6982356 --- /dev/null +++ b/src/hline.h @@ -0,0 +1,79 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef HLINE_H +#define HLINE_H + +#include +#include +#include +#include + +class HLineExecutor { +public: + virtual ~HLineExecutor() { } + virtual void writeChunk(const QString&) = 0; + virtual void setFormat(const QTextCharFormat&) = 0; +}; + +class HLine { + class Region { + int m_end; + QTextCharFormat m_format; + public: + Region(int end, QTextCharFormat format) + : m_end(end) + , m_format(format) { } + + int end() const { return m_end; } + const QTextCharFormat& format() const { return m_format; } + QTextCharFormat& format() { return m_format; } + + void setEnd(int index) { m_end = index; } + void setFormat(const QTextCharFormat& format) { m_format = format; } + }; + struct Format { + std::pair m_bold; + std::pair m_italic; + std::pair m_color; + Format() + : m_bold(false, false) + , m_italic(false, false) + , m_color(false, QColor()) { } + void applyTo(QTextCharFormat& fmt) const; + }; + + std::vector m_regions; + QString m_text; + + int begin(uint index) const; + uint findRegion(int index) const; + uint splitRegion(int index); + void setFormat(int begin, int end, const Format&); +public: + HLine(const QString& text, const QTextCharFormat& baseFormat); + HLine(const HLine& other); + + const QTextCharFormat& getFormat(int index) const; + + void setBold(int begin, int end, bool value); + void setItalic(int begin, int end, bool value); + void setColor(int begin, int end, const QColor& color); + QString mid(int begin, int end) const; + int length() const { return m_text.length(); } + HLine* extract(int begin, int end) const; + HLine* append(const HLine& other, int begin, int end) const; + + void dump() const; + + void run(HLineExecutor&) const; +}; + +#endif // HLINE_H diff --git a/src/icsaction.h b/src/icsaction.h new file mode 100644 index 0000000..4bea1d1 --- /dev/null +++ b/src/icsaction.h @@ -0,0 +1,35 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ICSACTION_H +#define ICSACTION_H + +class ICSAction { +public: + enum Direction { + Forward, + Back + }; +private: + Direction m_direction; + int m_moves; + QString m_actor; +public: + ICSAction(const Direction& direction, int moves, const QString& actor) + : m_direction(direction) + , m_moves(moves) + , m_actor(actor) { } + + Direction direction() const { return m_direction; } + int moves() const { return m_moves; } + QString actor() const { return m_actor; } +}; + +#endif // ICSACTION_H diff --git a/src/icsapi.h b/src/icsapi.h new file mode 100644 index 0000000..2f232e3 --- /dev/null +++ b/src/icsapi.h @@ -0,0 +1,56 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ICSAPI_H +#define ICSAPI_H + +#include + +class ICSAPI { +public: + virtual ~ICSAPI() { } + + /** + * Create a position using the information of a style12 line. + * \param turn Current turn. + * \param wkCastle King-side castling is possible for white + * \param wqCastle Queen-side castling is possible for white + * \param bkCastle King-side castling is possible for black + * \param bqCastle Queen-side castling is possible for black + * \param ep En-passant square. + */ + virtual StatePtr createChessboard( + int turn, + bool wkCastle, + bool wqCastle, + bool bkCastle, + bool bqCastle, + const Point& ep) = 0; + + + /** + * Create a new piece using the given description string. + * \param description A string representing the piece to be created. Its + * meaning is defined by the variant. + * \return A newly created piece. + */ + virtual Piece createPiece(const QString& description) = 0; + + /** + * Parse ICS verbose notation. + * \param str A string representation of the move to be parsed. + * \param turn The player who is moving. + * \return A move object corresponding to the given verbose representation. + */ + virtual Move parseVerbose(const QString& str, const StatePtr& ref) = 0; +}; + +#endif // ICSAPI_H + diff --git a/src/icsapi.impl.h b/src/icsapi.impl.h new file mode 100644 index 0000000..ac9bb4a --- /dev/null +++ b/src/icsapi.impl.h @@ -0,0 +1,41 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ICSAPI_IMPL_H +#define ICSAPI_IMPL_H + +#include "tagua_wrapped.h" +#include "piecefactory.h" + +template +PositionPtr WrappedICSAPI::createChessboard( + int turn, + bool wkCastle, + bool wqCastle, + bool bkCastle, + bool bqCastle, + const Point& ep) { + return PositionPtr( + new WrappedPosition(typename Variant::Position( + static_cast(turn), + wkCastle, wqCastle, bkCastle, bqCastle, ep))); +} + + + +template +PiecePtr WrappedICSAPI::createPiece(const QString& description) { + return AbstractPiece::Ptr(new WrappedPiece( + PieceFactory::createPiece(description))); +} + + +#endif // ICSAPI_IMPL_H + diff --git a/src/icsapi_fwd.h b/src/icsapi_fwd.h new file mode 100644 index 0000000..19a901d --- /dev/null +++ b/src/icsapi_fwd.h @@ -0,0 +1,18 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ICSAPI_FWD_H +#define ICSAPI_FWD_H + +#include + +class ICSAPI; +typedef boost::shared_ptr ICSAPIPtr; + +#endif // ICSAPI_FWD_H diff --git a/src/icsconnection.cpp b/src/icsconnection.cpp new file mode 100644 index 0000000..bfe412a --- /dev/null +++ b/src/icsconnection.cpp @@ -0,0 +1,370 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "icsconnection.h" +#include +#include + +#include + +#include +#include + +#include "components.h" +#include "icsconnection.h" +#include "poolinfo.h" +#include "positioninfo.h" +#include "player.h" +#include "gameinfo.h" +#include "pgnparser.h" +#include "icslistener.h" +#include "variants.h" + +using namespace boost; + +QRegExp ICSConnection::pressReturn("^Press return to enter the server as \"\\S+\":"); + +// example: Creating: azsxdc (++++) Hispanico (1684) unrated crazyhouse 3 0 +QRegExp ICSConnection::creating("^Creating: (\\S+)\\s+\\((\\S*)\\)\\s+(\\S+)\\s+\\((\\S*)\\)" + "\\s+(\\S+)\\s+(\\S+)\\s+(\\d+)\\s+(\\d+)\\s*.*$"); + +// example: {Game 149 (azsxdc vs. Hispanico) Creating unrated crazyhouse match.} +// example: {Game 149 (azsxdc vs. Hispanico) Game aborted on move 1} * +QRegExp ICSConnection::game("^\\{Game\\s+(\\d+)\\s+\\((\\S+)\\s+vs\\.\\s+(\\S+)\\)\\s+" + "(\\S+.*)\\}(?:\\s+(\\S+.*)|\\s*)$"); +QRegExp ICSConnection::unexamine("^You\\s+are\\s+no\\s+longer\\s+examining\\s+game\\s+(\\d+)"); +QRegExp ICSConnection::unobserve("^Removing\\s+game\\s+(\\d+)\\s+from\\s+observation\\s+list\\s*"); + +// example: 124 848 shanmark 1155 damopn [ br 2 12] 2:04 - 2:08 (39-39) W: 3 +//QRegExp ICSConnection::gameInfo("^(\\d+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+" +// "\\[\\s+(\\S+)\\s+(\\d+)\\s+(\\d+)\\s+\\]"); + +// 1 2 3 4 5 6 7 8 9 +// example: Game 124: shanmark ( 848) damopn (1155) rated blitz 2 12 +// Game 170: AstralVision (2167) vladx (2197) rated standard 15 0 +QRegExp ICSConnection::observed_game("^Game\\s+(\\d+):\\s+(\\S+)\\s+\\(\\s*(\\S+)\\s*\\)\\s+" + "(\\S+)\\s+\\(\\s*(\\S+)\\s*\\)\\s+" + "(\\S+)\\s+(\\S+)\\s+(\\d+)\\s+(\\d+)"); + +QRegExp ICSConnection::login("^login: $"); +QRegExp ICSConnection::password("^password: $"); +QRegExp ICSConnection::fics("^\\S+% "); +QRegExp ICSConnection::beep("^\a"); + +//ex: Movelist for game 95: +QRegExp ICSConnection::move_list_start("^Movelist\\s+for\\s+game\\s+(\\d+):"); +//ex: npssnt (1586) vs. mikkk (1487) --- Sun Sep 3, 18:16 PDT 2006 +QRegExp ICSConnection::move_list_players("^(\\S+)\\s+\\((\\S*)\\)\\s+vs.\\s+(\\S+)\\s+\\((\\S*)\\)\\s*.*"); +//ex: Unrated blitz match, initial time: 3 minutes, increment: 0 seconds. +QRegExp ICSConnection::move_list_game("^(\\S+)\\s+(\\S+)\\s+.*initial\\s+time:\\s*(\\d+)" + "\\s+.*increment:\\s*(\\d+)\\s*.*"); +//ex: Move npssnt mikkk +QRegExp ICSConnection::move_list_ignore1("^Move\\s+(\\S+)\\s+(\\S+)"); +//ex: ---- ---------------- ---------------- +QRegExp ICSConnection::move_list_ignore2("^( +|-+)+"); +QRegExp ICSConnection::move_list_terminator("^\\s*$"); + +QRegExp ICSConnection::goForward("^Game (\\d+): (\\S+) goes forward (\\d+) moves?\\."); +QRegExp ICSConnection::goBack("^Game (\\d+): (\\S+) backs up (\\d+) moves?\\."); + + +ICSConnection::ICSConnection() +: incomingGameInfo(0) +, m_move_list_game_info(NULL) +, m_move_list_position_info(NULL) +, m_move_list_pool_info(NULL) { + state = Normal; + connect(this, SIGNAL(receivedLine(QString, int)), this, SLOT(process(QString))); + connect(this, SIGNAL(receivedText(QString, int)), this, SLOT(processPartialLine(QString))); +} + +bool ICSConnection::test(const QRegExp& pattern, const QString& str) { + if (pattern.indexIn(str, m_processed_offset, QRegExp::CaretAtOffset) >= 0) { + m_processed_offset = pattern.matchedLength(); + return true; + } + else return false; +} + +void ICSConnection::processPartialLine(QString str) { +// kDebug() << "processing (partial) " << str; + if (test(fics, str)) { +// kDebug() << "matched prompt"; + prompt(); + } + else if (test(beep, str)) { + notification(); + } + else if (test(pressReturn, str)) { + registeredNickname(); + } + else if (test(login, str)) { + loginPrompt(); + } + else if (test(password, str)) { + passwordPrompt(); + } + else { + // no match, but it could be a partial command + m_processed_offset = 0; + } +} + +void ICSConnection::process(QString str) { + switch(state) { + case Normal: + if (test(creating, str)) { + delete incomingGameInfo; + incomingGameInfo = new GameInfo(creating, 1); + } + else if(test(observed_game, str)) { + if(incomingGameInfo) + delete incomingGameInfo; + incomingGameInfo = new GameInfo(Player(observed_game.cap(2), observed_game.cap(3).toInt()), + Player(observed_game.cap(4), observed_game.cap(5).toInt()), + observed_game.cap(6), observed_game.cap(7), + observed_game.cap(8).toInt(), observed_game.cap(9).toInt() ); + int number = observed_game.cap(1).toInt(); + incomingGameInfo->setGameNumber(number); + m_games[number] = ICSGameData(-1, incomingGameInfo->type()); + //kDebug() << "ok, obs " << number << " of type " << incomingGameInfo->type(); + } + else if (test(game, str)) { + //kDebug() << "matched game. incomingGameInfo = " << incomingGameInfo; + if(game.cap(4).startsWith("Creating") || game.cap(4).startsWith("Continuing") ) { + if (!incomingGameInfo) { + //this should really never happen, but anyway... + QStringList info = game.cap(4).split(' '); + if(info.size() >= 3) + incomingGameInfo = new GameInfo(Player(game.cap(2), 0), + Player(game.cap(3), 0), + info[1], info[2], 0, 0 ); + } + if (incomingGameInfo) { + int number = game.cap(1).toInt(); + incomingGameInfo->setGameNumber(number); + m_games.insert(std::make_pair(number, ICSGameData(-1, incomingGameInfo->type()))); + } + } + else { + if (!incomingGameInfo) { + int number = game.cap(1).toInt(); + //kDebug() << "matching game " << number << " end"; + m_games.erase(number); + QString what = game.cap(4); + QString result = game.cap(5); + endingGame(what, result); + } + } + } + else if (test(unexamine, str)) { + //kDebug() << "matching examined game end"; + int gameNumber = unexamine.cap(1).toInt(); + m_games.erase(gameNumber); + endingExaminedGame(gameNumber); + } + else if (test(unobserve, str)) { + int gameNumber = unobserve.cap(1).toInt(); + m_games.erase(gameNumber); + endingObservedGame(gameNumber); + } + else if (test(move_list_start, str)) { + //kDebug() << "entering move list state"; + m_move_list_game_num = move_list_start.cap(1).toInt(); + state = MoveListHeader; + } + else { + PositionInfo positionInfo; + bool game_start = positionInfo.load(m_games, str); + if (positionInfo.valid) { + int gameNumber = positionInfo.gameNumber; + GameList::const_iterator game_it = m_games.find(gameNumber); + Q_ASSERT(game_it != m_games.end()); + + bool incoming = incomingGameInfo && + incomingGameInfo->gameNumber() == gameNumber; + + if (game_start || incoming) { + // delete extraneous game info + if (incomingGameInfo && + incomingGameInfo->gameNumber() != gameNumber) { + int n = incomingGameInfo->gameNumber(); + if (n != -1) + m_games.erase(n); + delete incomingGameInfo; + incomingGameInfo = 0; + } + + // no info on this game + if (!incomingGameInfo) { + kWarning() << "unexpected style 12 for game" << gameNumber; + incomingGameInfo = new GameInfo(Player(positionInfo.whitePlayer, 0), + Player(positionInfo.blackPlayer, 0), + "rated", "", 0, 0); + } + + switch (positionInfo.relation) { + case PositionInfo::NotMyMove: + case PositionInfo::MyMove: + //kDebug() << "creating game"; + creatingGame(incomingGameInfo, positionInfo); + break; + case PositionInfo::Examining: + //kDebug() << "creating examination"; + creatingExaminedGame(incomingGameInfo, positionInfo); + break; + case PositionInfo::ObservingPlayed: + case PositionInfo::ObservingExamined: + //kDebug() << "creating obs " << gameNumber << " " << incomingGameInfo->type(); + creatingObservedGame(incomingGameInfo, positionInfo); + break; + default: + // unknown relation: ignoring + break; + } + + delete incomingGameInfo; + incomingGameInfo = 0; + } + + if (shared_ptr listener = m_games[positionInfo.gameNumber].listener.lock()) + listener->notifyStyle12(positionInfo, game_start); + + if (positionInfo.relation == PositionInfo::MyMove) { + notification(); + } + } + else { + PoolInfo pool_info(m_games, str); + if (pool_info.m_valid) { + // BROKEN + if (pool_info.m_added_piece != Piece()) { + if (shared_ptr listener = m_games[pool_info.m_game_num].listener.lock()) + listener->notifyPool(pool_info); + } + } + } + } + break; + + case MoveListHeader: + if (test(move_list_players, str)){ + //kDebug() << "move list players: " << str; + m_move_list_players = move_list_players.capturedTexts(); + } + else if (test(move_list_game, str)){ + //kDebug() << "move list game: " << str; + if (m_move_list_game_info) + delete m_move_list_game_info; + + if (m_move_list_players.size()>=5) + m_move_list_game_info = new GameInfo( + Player(m_move_list_players[1], m_move_list_players[2].toInt()), + Player(m_move_list_players[3], m_move_list_players[4].toInt()), + move_list_game.cap(1).toLower(), move_list_game.cap(2), + move_list_game.cap(3).toInt(), move_list_game.cap(4).toInt() + ); + else + m_move_list_game_info = new GameInfo( Player("unknown",0), Player("unknown",0), + move_list_game.cap(1).toLower(), move_list_game.cap(2), + move_list_game.cap(3).toInt(), move_list_game.cap(4).toInt() + ); + m_move_list_game_info->setGameNumber(m_move_list_game_num); + + //NOTE: here is where an unknown variant will be "upgraded" to the correct variant + m_games[m_move_list_game_num].setType(move_list_game.cap(2)); + } + else if (test(move_list_terminator, str)) { + //kDebug() << "move list ign3: " << str; + } + else if (test(move_list_ignore1, str)){ + //kDebug() << "move list ign1: " << str; + } + else if (test(move_list_ignore2, str)) { + //kDebug() << "move list ign2: " << str; + state = MoveListMoves; + } + else { + PositionInfo pi; + pi.load(m_games, str); + if (pi.valid) + m_move_list_position_info = new PositionInfo(pi); + else { + PoolInfo pooli(m_games, str); + if(pooli.m_valid) + m_move_list_pool_info = new PoolInfo(pooli); + } + } + break; + case MoveListMoves: + if (test(move_list_terminator, str)){ + if (shared_ptr listener = m_games[m_move_list_game_num].listener.lock()) { + StatePtr p; + if (m_move_list_position_info) + p = m_move_list_position_info->position; + else { + std::map::const_iterator gi = m_games.find(m_move_list_game_num); + if (gi == m_games.end()) { + kError() << "Received move list for unknown game " << m_move_list_game_num; + } + else { + Components* components = gi->second.components; + p = StatePtr(components->createState()); + p->setup(); + } + } + + if (p) { + if (m_move_list_pool_info) { + //BROKEN + //p->setPool(m_move_list_pool_info->m_pool); + } + + PGN pgn(m_move_list); + if (!pgn.valid()) + kDebug() << "parse error on move list"; + else + listener->notifyMoveList(m_move_list_game_num, p, pgn); + } + } + + if (m_move_list_game_info) + delete m_move_list_game_info; + if (m_move_list_position_info) + delete m_move_list_position_info; + if (m_move_list_pool_info) + delete m_move_list_pool_info; + m_move_list_game_info = NULL; + m_move_list_position_info = NULL; + m_move_list_pool_info = NULL; + m_move_list = QString(); + state = Normal; + } + else + m_move_list += str; + break; + } + + m_processed_offset = 0; +} + +void ICSConnection::setListener(int gameNumber, const weak_ptr& listener) { + m_games[gameNumber].listener = listener; +} + +void ICSConnection::startup() { + sendText("alias $ @"); + sendText("iset startpos 1"); + sendText("iset ms 1"); + sendText("iset lock 1"); + sendText("set interface Tagua-0.10 (http://www.tagua-project.org)"); + sendText("set style 12"); +} + diff --git a/src/icsconnection.h b/src/icsconnection.h new file mode 100644 index 0000000..caf1cdd --- /dev/null +++ b/src/icsconnection.h @@ -0,0 +1,87 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ICSCONNECTION_H +#define ICSCONNECTION_H + +#include +#include +#include +#include +#include "connection.h" +#include "icsgamedata.h" + +class GameInfo; +class PGN; +class PositionInfo; +class PoolInfo; +class ICSListener; + +class ICSConnection : public Connection { +Q_OBJECT + typedef std::map GameList; + + enum State { + Normal, + MoveListHeader, + MoveListMoves + } state; + + // patterns + static QRegExp pressReturn; + static QRegExp creating; + static QRegExp game; + static QRegExp login; + static QRegExp password; + static QRegExp fics; + static QRegExp beep; + static QRegExp unexamine, unobserve; + static QRegExp move_list_start, move_list_players, move_list_game, + move_list_ignore1, move_list_ignore2, move_list_terminator; + static QRegExp observed_game; + static QRegExp goForward, goBack; + + GameInfo* incomingGameInfo; + int m_processed_offset; + GameList m_games; + + int m_move_list_game_num; + QStringList m_move_list_players; + GameInfo *m_move_list_game_info; + PositionInfo *m_move_list_position_info; + PoolInfo *m_move_list_pool_info; + QString m_move_list; + + bool test(const QRegExp& pattern, const QString& str); +public: + ICSConnection(); + + void setListener(int gameNumber, const boost::weak_ptr& listener); + void startup(); +public Q_SLOTS: + void process(QString str); + void processPartialLine(QString str); +Q_SIGNALS: + void notification(); + void moves(const PGN&); + void time(int, int); + void loginPrompt(); + void passwordPrompt(); + void prompt(); + void registeredNickname(); + void creatingGame(const GameInfo*, const PositionInfo&); + void creatingExaminedGame(const GameInfo*, const PositionInfo&); + void creatingObservedGame(const GameInfo*, const PositionInfo&); + void endingGame(const QString&, const QString&); + void endingExaminedGame(int); + void endingObservedGame(int); +}; + +#endif // ICSCONNECTION_H diff --git a/src/icsgamedata.cpp b/src/icsgamedata.cpp new file mode 100644 index 0000000..3d3c099 --- /dev/null +++ b/src/icsgamedata.cpp @@ -0,0 +1,27 @@ +/* + Copyright (c) 2006-2008 Paolo Capriotti + (c) 2006-2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "icsgamedata.h" +#include +#include "gameinfo.h" + +ICSGameData::ICSGameData() +: index(0) { + setType(""); +} + +ICSGameData::ICSGameData(int index, const QString& type) +: index(index) { + setType(type); +} + +void ICSGameData::setType(const QString& type) { + //TODO +} diff --git a/src/icsgamedata.h b/src/icsgamedata.h new file mode 100644 index 0000000..7be921f --- /dev/null +++ b/src/icsgamedata.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ICSGAMEDATA_H +#define ICSGAMEDATA_H + +#include +#include + +class Components; + +class ICSListener; + +struct ICSGameData { + int index; + Components* components; + boost::weak_ptr listener; + + ICSGameData(); + ICSGameData(int index, const QString& type); + + void setType(const QString& var); +}; + +#endif // ICSGAMEDATA_H diff --git a/src/icslistener.h b/src/icslistener.h new file mode 100644 index 0000000..4b1a1d1 --- /dev/null +++ b/src/icslistener.h @@ -0,0 +1,28 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef ICSLISTENER_H +#define ICSLISTENER_H + +#include + +class PositionInfo; +class PoolInfo; +class PGN; + +class ICSListener { +public: + virtual ~ICSListener() { } + virtual void notifyStyle12(const PositionInfo&, bool is_starting = false) = 0; + virtual void notifyPool(const PoolInfo&) = 0; + virtual void notifyMoveList(int, const StatePtr&, const PGN&) = 0; +}; + +#endif // ICSLISTENER_H diff --git a/src/imageeffects.cpp b/src/imageeffects.cpp new file mode 100644 index 0000000..0887cb3 --- /dev/null +++ b/src/imageeffects.cpp @@ -0,0 +1,354 @@ +/* + Copyright (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + Part of the code been contributed by Jani Huhtanen. + Copyright (c) 2006 Jani Huhtanen. +*/ + + +#include +#include +#include +#include "imageeffects.h" + +template +static inline void blurinner(unsigned char *bptr, int &zR, + int &zG, int &zB, int &zA, int alpha); + +template +static inline void blurrow(QImage & im, int line, int alpha); + +template +static inline void blurcol(QImage & im, int col, int alpha); + +/* + * expblur(QImage &img, int radius) + * + * In-place blur of image 'img' with kernel + * of approximate radius 'radius'. + * + * Blurs with two sided exponential impulse + * response. + * + * aprec = precision of alpha parameter + * in fixed-point format 0.aprec + * + * zprec = precision of state parameters + * zR,zG,zB and zA in fp format 8.zprec + */ +template +static void expblur(QImage &img, int radius ) +{ + if (radius < 1) + return; + + /* Calculate the alpha such that 90% of + the kernel is within the radius. + (Kernel extends to infinity) + */ + int alpha = (int)((1<(img,row,alpha); + } + + for(int col=0;col(img,col,alpha); + } + return; +} + +template +static inline void blurinner(unsigned char *bptr, + int &zR, int &zG, int &zB, int &zA, int alpha) +{ + int R,G,B,A; + R = *bptr; + G = *(bptr+1); + B = *(bptr+2); + A = *(bptr+3); + + zR += (alpha * ((R<>aprec; + zG += (alpha * ((G<>aprec; + zB += (alpha * ((B<>aprec; + zA += (alpha * ((A<>aprec; + + *bptr = zR>>zprec; + *(bptr+1) = zG>>zprec; + *(bptr+2) = zB>>zprec; + *(bptr+3) = zA>>zprec; +} + +template +static inline void blurrow( QImage & im, int line, int alpha) +{ + int zR,zG,zB,zA; + + QRgb *ptr = (QRgb *)im.scanLine(line); + + zR = *((unsigned char *)ptr )<((unsigned char *)&ptr[index], + zR, zG, zB, zA, alpha); + } + for(int index=im.width()-2; index>=0; index--) { + blurinner((unsigned char *)&ptr[index], + zR, zG, zB, zA, alpha); + } + + +} + +template +static inline void blurcol(QImage & im, int col, int alpha) +{ + int zR,zG,zB,zA; + + QRgb *ptr = (QRgb *)im.bits(); + ptr+=col; + + zR = *((unsigned char *)ptr )<((unsigned char *)&ptr[index], + zR, zG, zB, zA, alpha); + } + + for(int index=(im.height()-2)*im.width(); index>=0; + index-=im.width()) { + blurinner((unsigned char *)&ptr[index], + zR, zG, zB, zA, alpha); + } + +} + +namespace ImageEffects { + + +#ifdef HAVE_X86_SSE2 + void expblur_sse( QImage &img, int radius ); +#endif //HAVE_X86_SSE2 + + +#ifdef HAVE_X86_MMX + void expblur_mmx( QImage &img, int radius ); +#endif //HAVE_X86_MMX + + + +void expBlur(QImage& img, int radius) { + +//KCPUInfo:: returns false on x86_64, and x86_64 always have sse/mmx +#ifdef HAVE_X86_SSE2 + #ifndef __x86_64__ + if(BlitzCPUInfo::haveExtension( BlitzCPUInfo::SSE2 ) ) + #endif //__x86_64__ + return expblur_sse(img, radius); +#endif //HAVE_X86_SSE2 + +#ifdef HAVE_X86_MMX + #ifndef __x86_64__ + if(BlitzCPUInfo::haveExtension( BlitzCPUInfo::MMX ) ) + #endif //__x86_64__ + return expblur_mmx(img, radius); +#endif //HAVE_X86_MMX + + return expblur<15,7>(img, radius); +} + +QImage addShadow(const QImage& image, int r, QColor color, + int offx, int offy, int growx, int growy) { + QPainter p; + QImage retv(image.width()+growx, image.height()+growy, QImage::Format_ARGB32_Premultiplied); + int dx = (growx-offx)/2, dy = (growy-offy)/2; + + p.begin(&retv); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.fillRect(0,0,retv.width(), retv.height(), QColor(0,0,0,0)); + p.fillRect(dx+offx, dy+offy, image.width(), image.height(), color); + p.setCompositionMode(QPainter::CompositionMode_DestinationAtop ); + p.drawImage(dx+offx, dy+offy, image); + p.end(); + + expBlur(retv, r); + + p.begin(&retv); + p.drawImage(dx, dy, image); + p.end(); + + return retv; +} + +QImage growBorder(const QImage& image) { + int w = image.width(); + int h = image.height(); + QPainter p; + QImage retv(w+2, h+2, QImage::Format_ARGB32_Premultiplied); + + p.begin(&retv); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.drawImage(0, 0, image, 0, 0, 1, 1); + p.drawImage(w+1, 0, image, w-1, 0, 1, 1); + p.drawImage(0, h+1, image, 0, h-1, 1, 1); + p.drawImage(w+1, h+1, image, w-1, h-1, 1, 1); + p.drawImage(1, 0, image, 0, 0, w, 1); + p.drawImage(1, h+1, image, 0, h-1, w, 1); + p.drawImage(0, 1, image, 0, 0, 1, h); + p.drawImage(w+1, 1, image, w-1, 0, 1, h); + p.drawImage(1, 1, image); + p.end(); + + return retv; +} + +struct Line { + int y, x1, x2; + Line(){} + Line(int _y, int _x1, int _x2) + : y(_y), x1(_x1), x2(_x2) {} +}; + +void floodFill(QImage& image, QPoint point, QColor color, + bool invade_border, std::vector* border) { + + int* ptr = (int*)image.bits(); + int h = image.height(); + int w = image.width(); + int newcol = color.rgba(); + int oldcol = ptr[point.x()+point.y()*w]; + std::vector lines; + + { + Line l(point.y(), point.x(), point.x()+1); + int *scanline = ptr+point.y()*w; + scanline[l.x1] = newcol; + while(l.x1 > 0 && scanline[l.x1-1] == oldcol) + scanline[--l.x1] = newcol; + while(l.x2 < w && scanline[l.x2] == oldcol) + scanline[l.x2++] = newcol; + lines.push_back(l); + } + + while(!lines.empty()) { + Line ll = lines.back(); + lines.pop_back(); + + if(ll.x1>0) { + if(invade_border) + ptr[ll.y*w + ll.x1 - 1] = newcol; + if(border) + border->push_back(QPoint(ll.x1-1, ll.y)); + } + if(ll.x2push_back(QPoint(ll.x2, ll.y)); + } + + for(int d=-1; d<=1; d+=2) + if( (d == -1) ? (ll.y > 0) : (ll.y < h-1) ) { + int *scanline = ptr + (ll.y+d)*w; + + for(int i=ll.x1;i 0 && scanline[l.x1-1] == oldcol) + scanline[--l.x1] = newcol; + while(l.x2 < w && scanline[l.x2] == oldcol) + scanline[l.x2++] = newcol; + lines.push_back(l); + i = l.x2; + } + if(ipush_back(QPoint(i, ll.y+d)); + } + } + } + } +} + +void floodFillBlueThreshold(QImage& image, QPoint point, QColor color, unsigned int thresh, + bool invade_border, std::vector* border) { + + unsigned int* ptr = (unsigned int*)image.bits(); + int h = image.height(); + int w = image.width(); + unsigned int newcol = color.rgba(); + std::vector lines; + + #define TEST(x) ((((x) & 0xff) < thresh) && ((x) != newcol)) + { + Line l(point.y(), point.x(), point.x()+1); + unsigned int *scanline = ptr+point.y()*w; + scanline[l.x1] = newcol; + while(l.x1 > 0 && TEST(scanline[l.x1-1])) + scanline[--l.x1] = newcol; + while(l.x2 < w && TEST(scanline[l.x2])) + scanline[l.x2++] = newcol; + lines.push_back(l); + } + + while(!lines.empty()) { + Line ll = lines.back(); + lines.pop_back(); + + if(ll.x1>0) { + if(invade_border) + ptr[ll.y*w + ll.x1 - 1] = newcol; + if(border) + border->push_back(QPoint(ll.x1-1, ll.y)); + } + if(ll.x2push_back(QPoint(ll.x2, ll.y)); + } + + for(int d=-1; d<=1; d+=2) + if( (d == -1) ? (ll.y > 0) : (ll.y < h-1) ) { + unsigned int *scanline = ptr + (ll.y+d)*w; + + for(int i=ll.x1;i 0 && TEST(scanline[l.x1-1])) + scanline[--l.x1] = newcol; + while(l.x2 < w && TEST(scanline[l.x2])) + scanline[l.x2++] = newcol; + lines.push_back(l); + i = l.x2; + } + if(ipush_back(QPoint(i, ll.y+d)); + } + } + } + } +} + +} diff --git a/src/imageeffects.h b/src/imageeffects.h new file mode 100644 index 0000000..57cf648 --- /dev/null +++ b/src/imageeffects.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef IMAGEEFFECTS_H +#define IMAGEEFFECTS_H + +#include +#include +#include + +/** + * @brief Namespace holding image manipulation functions. + */ +namespace ImageEffects { + void expBlur(QImage& img, int radius); + QImage addShadow(const QImage& image, int radius, QColor color, + int offx, int offy, int growx, int growy); + void floodFill(QImage& image, QPoint point, QColor color, + bool invade_border = false, std::vector* border = NULL); + void floodFillBlueThreshold(QImage& image, QPoint point, QColor color, unsigned int thresh, + bool invade_border = false, std::vector* border = NULL); + QImage growBorder(const QImage& image); +} //end namespace ImageEffects + +#endif //IMAGEEFFECTS_H diff --git a/src/imageeffects_mmx.cpp b/src/imageeffects_mmx.cpp new file mode 100644 index 0000000..e14f142 --- /dev/null +++ b/src/imageeffects_mmx.cpp @@ -0,0 +1,103 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include + + +namespace ImageEffects { + +union vec4s +{ + uint16_t i[4]; + __m64 v; +}; + +static inline void blur_mmx(void *px, __m64& v, __m64& alpha) +{ + uint64_t z1 = 0ULL; + uint64_t z2 = 0ULL; + asm( + "movd %[pixel], %[t1]\n" + "punpcklbw %[t1], %[t2]\n" + "psrlw $1, %[t2]\n" + "psubw %[accum], %[t2]\n" + "pmulhw %[alpha], %[t2]\n" + "psllw $1, %[t2]\n" + "paddw %[t2], %[accum]\n" + "movq %[accum], %[t1]\n" + "psrlw $7, %[t1]\n" + // "pand %[mask], %[t1]\n" + "packuswb %[t1], %[t1]\n" + "movd %[t1], %[pixel]\n" + : [pixel] "+m"(*(uint32_t*)px) + , [accum] "+y"(v) + , [t1] "+y"(z1) + , [t2] "+y"(z2) + : [alpha] "y"(alpha) + // , [mask] "y"(0x00ff00ff00ff00ffULL) + ); +} + +void expblur_mmx( QImage &img, int radius ) +{ + if(radius<1) + return; + + /* Calculate the alpha such that 90% of + the kernel is within the radius. + (Kernel extends to infinity) + */ + uint16_t alpha = (uint16_t)((1<<15)*(1.0f-expf(-2.3f/(radius+1.f)))); + + vec4s a; + QRgb *ptr = (QRgb *)img.bits(); + int h = img.height(); + int w = img.width(); + int hw = (img.height()-1)*img.width(); + for(int i=0;i<4;i++) + a.i[i] = alpha; + + for(int row=0;row=0; index--) + blur_mmx(&cptr[index*4], z.v, a.v); + } + + for(int col=0;col=0; index-=w) + blur_mmx(&cptr[index*4], z.v, a.v); + } + + asm("emms"); + return; +} + +} //end namespace ImageEffects diff --git a/src/imageeffects_sse.cpp b/src/imageeffects_sse.cpp new file mode 100644 index 0000000..cdcfd10 --- /dev/null +++ b/src/imageeffects_sse.cpp @@ -0,0 +1,177 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include + + +namespace ImageEffects { + +union vec4i +{ + uint16_t i[8]; + __m128i v; +}; + +static inline void blur_sse_near(void* pixels, __m128i& state, __m128i alpha) +{ + uint64_t z1 = 0ULL; + uint64_t z2 = 0ULL; + uint64_t z3 = 0ULL; + + asm( + "movq %[ppix], %[pixels]\n" + "punpcklbw %[pixels], %[aux1]\n" // unpack two pixels setting their bytes + // as the most significant in the corr. word + "psrlw $1, %[aux1]\n" // shift right by 1, i.e. shift the colour + // bytes left by 7 + "psubw %[state], %[aux1]\n" // - state + "pmulhw %[alpha], %[aux1]\n" // * alpha, and take the 16 most significant bits + "psllw $1, %[aux1]\n" // shift left (we trade 1 bit for performance, here) + "paddw %[aux1], %[state]\n" // sum result to state + "movdqa %[state], %[aux2]\n" // copy state to the aux2 register + "psrlw $7, %[aux2]\n" // shift right by 7: this is the new pixel value + "packuswb %[aux2], %[aux2]\n" // pack pixels as 8 bits + "movq %[aux2], %[ppix]\n" + : [state] "+x"(state) + , [ppix] "+m"(*(uint64_t*)pixels) + , [aux1] "+x"(z1) + , [aux2] "+x"(z2) + , [pixels] "+x"(z3) + : [alpha] "x"(alpha) + ); +} + +static inline void blur_sse_sep(void* pixel1, void* pixel2, __m128i& state, __m128i alpha) +{ + uint64_t z1 = 0ULL; + uint64_t z2 = 0ULL; + uint64_t z3 = 0ULL; + uint64_t z4 = 0ULL; + + asm( + "movd %[ppix1], %[pixels]\n" // load the first pixel + "movd %[ppix2], %[tmp]\n" // load the second pixel in [tmp] + "pslldq $4, %[tmp]\n" // shift left the second pixel + "paddd %[tmp], %[pixels]\n" // now both pixel are packed in [pixels] + + "punpcklbw %[pixels], %[aux1]\n" // unpack two pixels setting their bytes + // as the most significant in the corr. word + "psrlw $1, %[aux1]\n" // shift right by 1, i.e. shift the colour + // bytes left by 7 + "psubw %[state], %[aux1]\n" // - state + "pmulhw %[alpha], %[aux1]\n" // * alpha, and take the 16 most significant bits + "psllw $1, %[aux1]\n" // shift left (we trade 1 bit for performance, here) + "paddw %[aux1], %[state]\n" // sum result to state + "movdqa %[state], %[aux2]\n" // copy state to the aux2 register + "psrlw $7, %[aux2]\n" // shift right by 7: this is the new pixel value + "packuswb %[aux2], %[aux2]\n" // pack pixels as 8 bits + + "movd %[aux2], %[ppix1]\n" + "psrldq $4, %[aux2]\n" + "movd %[aux2], %[ppix2]\n" + : [state] "+x"(state) + , [ppix1] "+m"(*(uint32_t*)pixel1) + , [ppix2] "+m"(*(uint32_t*)pixel2) + , [aux1] "+x"(z1) + , [aux2] "+x"(z2) + , [tmp] "+x"(z3) + , [pixels] "+x"(z4) + : [alpha] "x"(alpha) + ); +} + +void expblur_sse( QImage &img, int radius ) +{ + if(radius<1) + return; + + /* Calculate the alpha such that 90% of + the kernel is within the radius. + (Kernel extends to infinity) + */ + uint16_t alpha = (uint16_t)((1<<15)*(1.0f-expf(-2.3f/(radius+1.f)))); + + vec4i a; + QRgb *ptr = (QRgb *)img.bits(); + int h = img.height(); + int w = img.width(); + int hw = (img.height()-1)*img.width(); + for(int i=0;i<8;i++) + a.i[i] = alpha; + + for(int row=0;row=0; index--) + blur_sse_sep(&cptr[index*4], &cptr[(index+w)*4] , z.v, a.v); + } + + if(h & 1) + { + vec4i z; + int dummy; + uint8_t *cptr = (uint8_t*)(ptr+(h-1)*w); + for(int i=0;i<4;i++) + z.i[i] = cptr[i]<<7; + + for(int index=1; index=0; index--) + blur_sse_sep(&cptr[index*4], &dummy, z.v, a.v); + } + + for(int col=0;col=0; index-=w) + blur_sse_near(&cptr[index*4], z.v, a.v); + } + + if(w & 1) + { + vec4i z; + int dummy; + uint8_t *cptr = (uint8_t*)(ptr+w-1); + + for(int i=0;i<4;i++) + z.i[i] = cptr[i]<<7; + + for(int index=w; index=0; index-=w) + blur_sse_sep(&cptr[index*4], &dummy, z.v, a.v); + } + + return; +} + +} //end namespace ImageEffects diff --git a/src/index.cpp b/src/index.cpp new file mode 100644 index 0000000..f4d5a11 --- /dev/null +++ b/src/index.cpp @@ -0,0 +1,203 @@ + +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include "index.h" + +Index::operator QString() const { + QString retv = QString::number(num_moves); + + for(int i = 0; i < (int)nested.size(); i++) + retv += QString("_%1.%2").arg( nested[i].variation ).arg( nested[i].num_moves ); + + return retv; +} + +Index Index::fromString(const QString& s) { + QStringList l = s.split("_"); + if(l.isEmpty()) + return Index(-1); + + Index retv(l[0].toInt()); + for(int i=1;i nested[s-1].num_moves) + return *this; + + if(nested[s-1].num_moves > vstart.nested[s-1].num_moves) { + Index retv(num_moves); + for(int i=0;i s && nested[s].variation == v_id) { + Index retv(num_moves); + for(int i=0;i vstart.num_moves) { + Index retv(vstart.num_moves); + retv.nested.push_back(Ref(v_id,num_moves - vstart.num_moves - 1)); + for(int i=0;i<(int)nested.size();i++) + retv.nested.push_back(nested[i]); + return retv; + } + else if(num_moves == vstart.num_moves + && nested.size() > 0 && nested[0].variation == v_id) { + Index retv(num_moves + nested[0].num_moves + 1); + for(int i=1;i<(int)nested.size();i++) + retv.nested.push_back(nested[i]); + return retv; + } + else + return *this; +} + +Index Index::next(int variation_id, int num) const { + Index retv = *this; + if(variation_id != -1) + retv.nested.push_back( Ref(variation_id, num-1) ); + else if(retv.nested.size() == 0) + retv.num_moves += num; + else + retv.nested.last().num_moves += num; + + return retv; +} + +Index Index::prev(int _num) const { + int num = _num; + Index retv = *this; + + while(num) { + if(retv.nested.size() == 0) { + if(retv.num_moves < num) { + kError() << "Cannot rewind index" << *this << "by" << _num; + return Index(-1); + } + retv.num_moves -= num; + num = 0; + } + else { + if(retv.nested.last().num_moves >= num) { + retv.nested.last().num_moves -= num; + num = 0; + } + else { + num -= retv.nested.last().num_moves+1; + retv.nested.pop_back(); + } + } + } + + return retv; +} + +Index Index::min(const Index& ix) const { + if(ix.num_moves != num_moves) + return Index( std::min(ix.num_moves, num_moves) ); + + Index retv(num_moves); + for(int i = 0; (i < (int)nested.size()) && (i < (int)ix.nested.size()); i++) { + if(nested[i].variation != ix.nested[i].variation) + break; + retv.nested.push_back(Ref(nested[i].variation, + std::min(ix.nested[i].num_moves, nested[i].num_moves) )); + if(ix.nested[i].num_moves != nested[i].num_moves) + break; + } + + return retv; +} + +std::pair Index::stepsTo(const Index& ix) const { + int i; + int down = 0, up = 0; + bool branch = ix.num_moves != num_moves; + if(num_moves>ix.num_moves) + down += num_moves-ix.num_moves; + if(num_movesix.nested[i].num_moves) + down += nested[i].num_moves-ix.nested[i].num_moves; + if(nested[i].num_moves(down, up); +} + +int Index::lastIndex() { + return nested.size() ? nested.back().num_moves : num_moves; +} + +bool Index::mainLine() const { + return nested.empty(); +} + diff --git a/src/index.h b/src/index.h new file mode 100644 index 0000000..4afa095 --- /dev/null +++ b/src/index.h @@ -0,0 +1,120 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef INDEX_H +#define INDEX_H + +#include +#include +#include "common.h" +#include + +/** + \class Index index.h + \brief An index in a multi-variations game. + + This is a class that you can use to refer to a position in a game. +*/ +class Index { +public: + class Ref { + public: + Ref() : variation(-1), num_moves(-1) {} + Ref(int v, int n) : variation(v), num_moves(n) {} + int variation; + int num_moves; + + bool operator==(const Ref& r) const { + return r.variation == variation + && r.num_moves == num_moves; + } + bool operator!=(const Ref& r) const { return !((*this)==r); } + }; + + int num_moves; + QVector nested; + + /** Constructor, you can contruct it from an integer that + is the number of moves played in the main line */ + Index(int n = -1) : num_moves(n) {} + + /** return a string like "1_2.3_4.5" */ + operator QString() const; + + /** returns the number of moves from the start of the game */ + int totalNumMoves() const; + + /** \return true if this index is the first of a variation branch */ + bool atVariationStart() const; + + /** flip variation: returns the current index changed as if it was in the subvariation \a vid + at \a vstart instead of mainline and viceversa, ie at \a vstart the mainline becames + subvariation \a vid and viceversa */ + Index flipVariation(const Index& vstart, int v_id) const; + + /** Returns an index the point to the next position. If variation is != -1, you will be entering in the + sub-variation with this id instead of continuing in the current main line. You can also specify + the number of moves you want to go on (in the main line or in the specified variation) */ + Index next(int variation_id = -1, int num = 1) const; + + /** Returns an index pointing to the previous position (or to a position n moves back) */ + Index prev(int _num = 1) const; + + /** Returns an index that is the minimum of this index and the given one, ie the branch point + of the lines from start to the two indices. */ + Index min(const Index& ix) const; + + /** Returns the number of steps down and up you have to do to go from this index to the given one */ + std::pair stepsTo(const Index& ix) const; + + /** returns the number of moves in the most nested variation */ + int lastIndex(); + + /** True if this index refers to a position 'before' than the given one */ + bool operator<(const Index& ix) const { + std::pair s = stepsTo(ix); + return s.first == 0 && s.second>0; + } + + /** True if this index refers to a position 'before or equal' than the given one */ + bool operator<=(const Index& ix) const { + std::pair s = stepsTo(ix); + return s.first == 0; + } + + /** True if this index refers to a position 'after' than the given one */ + bool operator>(const Index& ix) const { + return ix < *this; + } + + /** True if this index refers to a position 'after or equal' than the given one */ + bool operator>=(const Index& ix) const { + return ix <= *this; + } + + /** True if this index refers to the same position of the given one */ + bool operator==(const Index& ix) const { + std::pair s = stepsTo(ix); + return s.first == 0 && s.second == 0; + } + + /** True if this index refers to a different position of the given one */ + bool operator!=(const Index& ix) const { + return !(*this == ix); + } + + /** \return an index from a string like "1_2.3_4.5" */ + static Index fromString(const QString& s); + + /** \return whether this index points to the mainline */ + bool mainLine() const; +}; + +#endif //INDEX_H diff --git a/src/indexconverter.h b/src/indexconverter.h new file mode 100644 index 0000000..9ffc1b1 --- /dev/null +++ b/src/indexconverter.h @@ -0,0 +1,22 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef INDEXCONVERTER_H +#define INDEXCONVERTER_H + +class IndexConverter { +public: + virtual ~IndexConverter() { }; + + virtual QPoint toReal(int index) const = 0; + virtual int toLogical(const QPoint& p) const = 0; +}; + +#endif // INDEXCONVERTER_H diff --git a/src/infodisplay.cpp b/src/infodisplay.cpp new file mode 100644 index 0000000..49f3084 --- /dev/null +++ b/src/infodisplay.cpp @@ -0,0 +1,43 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include "infodisplay.h" +#include "kgamecanvas.h" + +class MessageItem : public KGameCanvasText { +public: + MessageItem(const QString& text, const QFont& font, KGameCanvasAbstract* canvas) + : KGameCanvasText(text, Qt::black, font, + KGameCanvasText::HStart, KGameCanvasText::VCenter, + canvas) { } +}; + +InfoDisplay::InfoDisplay(KGameCanvasAbstract* parent) +: KGameCanvasGroup(parent) { + m_message = new MessageItem("", QFont(), this); + m_message->moveTo(QPoint(0, 0)); + m_message->show(); +} + +InfoDisplay::~InfoDisplay() { + delete m_message; +} + +void InfoDisplay::resizeEvent(QResizeEvent* e) { +// m_message->setSize(e->size()); +} + +void InfoDisplay::setMessage(const QString& msg) { + m_message->setText(msg); +} + +void InfoDisplay::settingsChanged() { +} diff --git a/src/infodisplay.h b/src/infodisplay.h new file mode 100644 index 0000000..1237eea --- /dev/null +++ b/src/infodisplay.h @@ -0,0 +1,29 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef INFODISPLAY_H +#define INFODISPLAY_H + +#include "kgamecanvas.h" + +class MessageItem; + +class InfoDisplay : public KGameCanvasGroup { + MessageItem* m_message; +protected: + void resizeEvent(QResizeEvent*); +public: + InfoDisplay(KGameCanvasAbstract* parent = 0); + ~InfoDisplay(); + void setMessage(const QString&); + void settingsChanged(); +}; + +#endif // INFODISPLAY_H diff --git a/src/loader/context.cpp b/src/loader/context.cpp new file mode 100644 index 0000000..0d836e3 --- /dev/null +++ b/src/loader/context.cpp @@ -0,0 +1,42 @@ +/* + Copyright (c) 2006-2008 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "common.h" +#include +#include "loader/context.h" + +namespace Loader { + + +Context::Cache Context::s_cache; + + +void Context::flush() { + for(KeySet::iterator i = m_references.begin(); + i != m_references.end(); ) { + Cache::iterator cit = s_cache.find(*i); + Q_ASSERT(cit != s_cache.end()); + Q_ASSERT(cit->second.m_ref_count > 0); + + m_references.erase(i++); + + if( !--cit->second.m_ref_count ) + s_cache.erase(cit); + } +} + + +Context::~Context() { + flush(); + Q_ASSERT(m_references.empty()); +} + +} //end namespace Loader + diff --git a/src/loader/context.h b/src/loader/context.h new file mode 100644 index 0000000..9aec748 --- /dev/null +++ b/src/loader/context.h @@ -0,0 +1,113 @@ +/* + Copyright (c) 2006-2008 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LOADER__CONTEXT_H +#define LOADER__CONTEXT_H + +#include +#include +#include +#include + +namespace Loader { + +/** + * @class Context + * @brief A resource loading context + * + * This class offers a set of references in a global cache, to access + * a global cache remembering which elements of the cache are being used. + * + */ +class Context { + +public: + class Key { + public: + QString m_name; + const char *m_type; + + Key(const QString& name, const char *type) + : m_name(name) + , m_type(type) { + } + + bool operator<(const Key& ref) const { + return (m_name < ref.m_name) || + ((m_name == ref.m_name) && (strcmp(m_type, ref.m_type) < 0)); + } + }; + + class Resource { + public: + int m_ref_count; + boost::any m_data; + + Resource() + : m_ref_count(1) {} + + template + Resource(const T& data) + : m_ref_count(1) + , m_data(data) { + } + }; + + typedef std::map Cache; + typedef std::set KeySet; + + static Cache s_cache; + KeySet m_references; + +public: + /** Destructor (flushes the context) */ + ~Context(); + + /** Flushes all the references in this context. */ + void flush(); + + /** + * Gets a resource by name. + * @param name The resource name + * @return The resource pointer, or null if not found. + */ + template + T* get(const QString& name) { + Key key(name, typeid(T).name()); + Cache::iterator it = s_cache.find(key); + + if(it == s_cache.end()) + return NULL; + if(!m_references.count(key)) { + it->second.m_ref_count++; + m_references.insert(key); + } + return boost::any_cast(&it->second.m_data); + } + + /** + * Puts a new resource in the global cache, and makes it + * referenced by this context. + * @param name The resource name + */ + template + void put(const QString& name, const T& data) { + Key key(name, typeid(T).name()); + Q_ASSERT(!s_cache.count(key)); + Q_ASSERT(!m_references.count(key)); + + s_cache[key] = Resource(data); + m_references.insert(key); + } +}; + +} //end namespace Loader + +#endif //LOADER__CONTEXT_H diff --git a/src/loader/image.cpp b/src/loader/image.cpp new file mode 100644 index 0000000..97bd014 --- /dev/null +++ b/src/loader/image.cpp @@ -0,0 +1,407 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + + +#include +#include +#include +#include +#include +#include +#include "common.h" +#include "imageeffects.h" +#include "loader/context.h" +#include "loader/image.h" + +namespace Loader { + +//BEGIN Font------------------------------------------------------------------- + +Font::Font(int id, int size) +: m_id(id) +, m_families(QFontDatabase::applicationFontFamilies(id)) +, m_font(m_families.empty()?QString():m_families[0], size) { + //for(int i=0;iget(k)) + font_glyph = *f; + else { + /* get the font (from cache if possible) */ + FontPtr font = Font::create(ctx, file); + + if(!font) + return false; + + + font_glyph = FontGlyphPtr(new FontGlyph); + + + /* get a few metrics */ + QFontMetrics fm(font->m_font); + + if(!fm.inFont(glyph)) + return false; + + int h = fm.height(); + int w = fm.width(glyph); + font_glyph->m_height = h; + + /* create the path from the char */ + font_glyph->m_path.addText((h-w)/2, fm.ascent(), font->m_font, glyph); + + /* save in cache */ + ctx->put(k, font_glyph); + } + + /* create lazily the inner background region */ + if(!font_glyph->m_inner_background_init && draw_inner_bg + && (_bg.style() != Qt::NoBrush && !(_bg.style() <= 14 && _bg.color().alpha()==0))) { + //14 is the last color-based brush + + int h = font_glyph->m_height; + QImage bg_img(h, h, QImage::Format_ARGB32_Premultiplied ); + bg_img.fill( QColor(Qt::black).rgba() ); //fill all black + + /* render the piece in blue */ + QPainter p; + p.begin(&bg_img); + p.setBrush( Qt::blue ); + p.setPen( Qt::NoPen); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.setRenderHint(QPainter::Antialiasing, true); + p.drawPath(font_glyph->m_path); + p.end(); + + /* flood fill the connected component where blue is <192 with a transparent color */ + ImageEffects::floodFillBlueThreshold(bg_img, QPoint(0,0), Qt::transparent, 192, true); + + /* And we've got our region */ + font_glyph->m_inner_background = bg_img.createAlphaMask(); + font_glyph->m_inner_background.setColor(0, Qt::transparent); + font_glyph->m_inner_background_init = true; + } + + /* draw the glyph, at last :) */ + int h = font_glyph->m_height; + QPainter p(&m_image); + init_painter(&p); + + p.translate(dest.x(), dest.y()); + p.scale(dest.width()/h, dest.height()/h); + + //14 is the last color-based brush + if(_bg.style() != Qt::NoBrush && !(_bg.style() <= 14 && _bg.color().alpha()==0)) { + QBrush bg = _bg; + QMatrix m = bg.matrix(); + m = m * QMatrix().translate(-dest.x(), -dest.y()); + m = m * QMatrix().scale(h/dest.width(), h/dest.height()); + bg.setMatrix(m); + + if(draw_inner_bg) { + QMatrix m = p.matrix(); + QRectF r = m.mapRect(QRectF(0,0,h,h)); + QRect ir = r.toRect(); + QImage tmp(ir.size(), QImage::Format_ARGB32_Premultiplied); + tmp.fill(0); + { + QPainter ptmp(&tmp); + ptmp.setRenderHint(QPainter::Antialiasing); + ptmp.setRenderHint(QPainter::TextAntialiasing); + ptmp.setRenderHint(QPainter::SmoothPixmapTransform); + ptmp.translate(-ir.x(), -ir.y()); + ptmp.setMatrix(m, true); + ptmp.drawImage(QRect(0,0,h,h), font_glyph->m_inner_background); + if(border > 0.0 || !_fg.isOpaque() ) { + ptmp.setBrush( _fg.isOpaque() ? QBrush(Qt::NoBrush) : QBrush(Qt::red) ); + ptmp.setPen( (border > 0.0) + ? QPen( Qt::green, h*border/100.0, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin) + : Qt::NoPen ); + ptmp.drawPath(font_glyph->m_path); + } + ptmp.setCompositionMode(QPainter::CompositionMode_SourceIn); + ptmp.fillRect(QRect(0,0,h,h), bg); + } + p.resetMatrix(); + p.drawImage(ir, tmp); + p.setMatrix(m); + } + else if(border > 0.0 || !_fg.isOpaque() ) { + p.setBrush( _fg.isOpaque() ? Qt::NoBrush : bg ); + p.setPen( (border > 0.0) + ? QPen(bg, h*border/100.0, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin) + : Qt::NoPen ); + p.drawPath(font_glyph->m_path); + } + } + if(_fg.style() != Qt::NoBrush) { + QBrush fg = _fg; + QMatrix m = fg.matrix(); + m = m * QMatrix().translate(-dest.x(), -dest.y()); + m = m * QMatrix().scale(h/dest.width(), h/dest.height()); + fg.setMatrix(m); + + p.setBrush( fg ); + p.setPen( Qt::NoPen ); + p.drawPath(font_glyph->m_path); + } + return true; +} + + +void Image::expBlur(double radius) { + if(m_image.format() != QImage::Format_RGB32 + && m_image.format() != QImage::Format_ARGB32 + && m_image.format() != QImage::Format_ARGB32_Premultiplied) + m_image = m_image.convertToFormat(QImage::Format_ARGB32_Premultiplied); + ImageEffects::expBlur(m_image, int(radius) ); +} + + +Image Image::createShadow(double radius, + const QColor& color, + const QPoint& grow, + const QPointF& offset) { + Image retv(width()+grow.x(), height()+grow.y()); + int px = int(grow.x()*0.5+offset.x()); + int py = int(grow.y()*0.5+offset.y()); + QPainter p; + + retv.m_image.fill(0); + + p.begin(&retv.m_image); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.fillRect( QRect(px, py, width(), height()), color); + p.setCompositionMode(QPainter::CompositionMode_DestinationAtop ); + p.drawImage( QPoint(px, py), m_image); + p.end(); + + ImageEffects::expBlur(retv.m_image, int(radius) ); + return retv; +} + +//END Image-------------------------------------------------------------------- + +//BEGIN Glyph------------------------------------------------------------------ + +Glyph::Glyph(const QString& c, int d) +: m_font_valid(false) +, m_char(c) +, m_delta(d) { } + +Glyph::Glyph(Context* ctx, const QString& file, const QChar& c, int d) + : m_font_valid(false) + , m_char(c) + , m_delta(d) { + if(ctx) { + if(FontPtr ff = Font::create(ctx, file)) { + m_font_valid = true; + m_font = ff->m_font; + } + } +} + +Glyph::Glyph(const QChar& c) + : m_font_valid(false) + , m_char(c) + , m_delta(0) { +} + + +//END Glyph-------------------------------------------------------------------- + +} //end namespace Loader diff --git a/src/loader/image.h b/src/loader/image.h new file mode 100644 index 0000000..b84c104 --- /dev/null +++ b/src/loader/image.h @@ -0,0 +1,316 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LOADER__IMAGE_H +#define LOADER__IMAGE_H + +#include +#include +#include +#include +#include +#include + +class QPainter; + +/** + * @namespace Loader + * @brief Namespace holding image (and more generally resource) loading functions + */ +namespace Loader { + + +class Context; + + +/** + * @class Image + * @brief The image class to be used with lua + */ +class Image { +private: + QImage m_image; + QMatrix m_draw_matrix; + double m_draw_opacity; + bool m_draw_over; + + void init_painter(QPainter*); + +public: + + /** + * Creates an image. Image data will be undefined. + * @param width The width of the image. + * @param height The height of the image. + */ + Image(int width, + int height); + + + /** + * Creates an image from a file. If the files is not found or could not be + * loaded, the resulting image will have width and height equal to 0 + * @param ctx The current context (theme) reference (should be implicit in lua) + * @param file The file name. + */ + Image(Context* ctx, + const QString& file, + bool use_cache = true); + + + /** \return the QImage */ + QImage image() { return m_image; } + + /** Returns the width of the image */ + int width() { + return m_image.width(); + } + + + /** Returns the height of the image */ + int height() { + return m_image.height(); + } + + + /** + * Sets the transformation matrix + */ + void setMatrix(const QMatrix& m) { + m_draw_matrix = m; + } + + + /** + * Resets the transformation matrix + */ + void resetMatrix() { + m_draw_matrix.reset(); + } + + + /** + * Scales the transformation matrix + */ + void scale(double x, double y) { + m_draw_matrix = m_draw_matrix * QMatrix().scale(x,y); + } + + + /** + * Rotates the transformation matrix + */ + void rotate(double angle) { + m_draw_matrix = m_draw_matrix * QMatrix().rotate(angle); + } + + + /** + * Translates the transformation matrix + */ + void translate(double x, double y) { + m_draw_matrix = m_draw_matrix * QMatrix().translate(x,y); + } + + + /** + * Returns the transformation matrix + */ + QMatrix matrix() { + return m_draw_matrix; + } + + + /** + * Sets the opacity of the drawing operations + */ + void setOpacity(double o) { + m_draw_opacity = o; + } + + + /** + * Returns the opacity of the drawing operations + */ + double opacity() { + return m_draw_opacity; + } + + + /** + * Sets the composition mode + * @param over If true the painting operations will paint over, + * if false will replace the destination color. + */ + void setPaintOver(bool over) { + m_draw_over = over; + } + + + /** + * Clears the image. + * @param color The color to fill the image with (default transparent) + */ + void clear(const QColor& color = Qt::transparent); + + + /** + * Fills a rectangle. + * @param rect The rectangle + * @param brush The fill brush + */ + void fillRect(const QRectF& rect, + const QBrush& brush); + + + /** + * Draws a line. + * @param from The starting point + * @param to The end point + * @param col The pen color + * @param width The pen width + */ + void drawLine(const QPointF& from, + const QPointF& to, + const QColor& col, + double width); + + + /** + * Draws an image on the over the current one. + * @param dest The destination rectangle. + * @param src_img The source image. + * @param src The source rectangle. + */ + void drawImage(const QRectF& dest, + const Image& src_img, + const QRectF& src = QRectF(0.0,0.0,0.0,0.0)); + + + /** + * Draws an image on the over the current one (overload). + * @param ctx The current context (theme) reference (should be implicit in lua) + * @param dest The destination rectangle. + * @param src_img The source image file. + * @param src The source rectangle, WITH RELATIVE COORDINATES 0.0 - 1.0 (of course). + * @return True if it was possible to load the image file. + */ + bool drawImage(Context* ctx, + const QRectF& dest, + const QString& src_img, + const QRectF& src = QRectF(0.0,0.0,0.0,0.0), + bool use_cache = true); + + + /** + * Draws an SVG file over the image. + * @param ctx The current context (theme) reference (should be implicit in lua) + * @param dest The destination rectangle. + * @param file The file to load. + * @return True if it was possible to load the SVG file. + * TODO: add css support (When Qt will support it) + */ + bool drawSVG(Context* ctx, + const QRectF& dest, + const QString& file); + + + /** + * Draws a font glyph over the image. + * @param ctx The current context (theme) reference (should be implicit in lua) + * @param dest The destination rectangle. + * @param font The font file to load. + * @param glyph The unicode glyph code. + * @param fg The foreground color. + * @param bg The background color. + * @param border The background expansion. + * @param draw_inner_bg If true the 'inner part' (detected with a flood fill + algorithm) will be filled with the background brush. + * @return True if it was possible to load the font file and find the glyph. + */ + bool drawGlyph(Context* ctx, + const QRectF& dest, + const QString& font, + unsigned int glyph, + const QBrush& fg = Qt::black, + const QBrush& bg = Qt::white, + double border = 0.0, + bool draw_inner_bg = true); + + + /** + * Blurs the image itself. + */ + void expBlur(double radius); + + /** + * Returns a shadow image for the current image. + * @param radius The shadow radius. + * @param color The shadow color. + * @param grow How bigger the output image will be. + * @param offset Position of the shadow (relatively from being centered in the output). + */ + Image createShadow(double radius, + const QColor& color, + const QPoint& grow = QPoint(), + const QPointF& offset = QPointF() ); +}; + +/** + * @class Glyph + * @brief A simple class that represents a glyph in a font to be used with lua + */ +class Glyph { +private: + friend class Theme; + bool m_font_valid; + QFont m_font; + QString m_char; + int m_delta; + +public: + Glyph(const QString& str, int = 0); + Glyph(Context* ctx, const QString&, const QChar& c, int = 0); + Glyph(const QChar& = QChar()); + + QFont font() const { return m_font; } + bool fontValid() const { return m_font_valid; } + QString str() const { return m_char; } + int delta() const { return m_delta; } +}; + + +typedef boost::shared_ptr FontPtr; + +class Font { +private: + friend class Image; + friend class Glyph; + + QString m_file; + int m_id; + QStringList m_families; + QFont m_font; + +public: + Font(int id, int size = 128); + Font(const QFont& font); + ~Font(); + + QFont font() { return m_font; } + QStringList families() { return m_families; } + + static FontPtr create(Context* ctx, const QString& file); +}; + + +} //end namespace Loader + +#endif //LOADER__IMAGE_H diff --git a/src/loader/theme.cpp b/src/loader/theme.cpp new file mode 100644 index 0000000..0c0b883 --- /dev/null +++ b/src/loader/theme.cpp @@ -0,0 +1,176 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + + +#include "theme.h" +#include +#include +#include "common.h" +#include "mastersettings.h" + +namespace Loader { + +PixmapOrMap Theme::to_pixmap_map(const ::LuaApi::ImageOrMap& m) { + if(const QImage *i = boost::get(&m)) { + return i->isNull() ? PixmapOrMap() : PixmapOrMap(QPixmap::fromImage(*i)); + } + else if(const ::LuaApi::ImageMap *i = boost::get< ::LuaApi::ImageMap>(&m)) { + PixmapMap p; + for(::LuaApi::ImageMap::const_iterator it = i->begin(); it != i->end(); ++it) { + p[it->first] = QPixmap::fromImage(it->second); + } + return PixmapOrMap(p); + } + else + return PixmapOrMap(); +} + +Theme::Theme(const ThemeInfo& theme) +: m_theme(theme) +, m_context() +, m_lua_loader(&m_context, theme) { + m_lua_loader.runFile(m_theme.file_name); + if(m_lua_loader.error()) + kError() << "Script load error:" << m_lua_loader.errorString(); + + settings().onChange(this, "onSettingsChanged"); + onSettingsChanged(); +} + +Theme::~Theme() { + if(!m_cache.empty()) + kError() << "Sizes still referenced."; +} + +void Theme::onSettingsChanged() { + SettingMap s_lua = settings().group("lua-settings").map("entry", "file-name"); + Settings entry = s_lua.insert(m_theme.file_name); + OptList ol = m_lua_loader.getValue("options", 0, NULL, true); + if(m_lua_loader.error()) { + m_lua_loader.clearError(); + return; + } + + if(options_list_load_from_settings(ol, entry.group("options"))) + for(Cache::iterator it = m_cache.begin(); it != m_cache.end(); ++it) + it->second.m_pixmaps_cache.clear(); +} + +void Theme::refSize(int size) { + m_cache[size].m_ref_count++; +} + +void Theme::unrefSize(int size) { + Cache::iterator it = m_cache.find(size); + if(it == m_cache.end()) { + kError() << "Size" << size << "not referenced."; + return; + } + + if(!--it->second.m_ref_count) + m_cache.erase(size); +} + +template +T Theme::getValue(const QString& key, int size, const ::LuaApi::LuaValueMap* args, bool allow_nil) { + if(m_lua_loader.error()) + return T(); + + Cache::iterator it = m_cache.find(size); + if(it == m_cache.end()) { + kError() << "Size" << size << "not referenced."; + return T(); + } + + T retv = m_lua_loader.getValue(key, size, args, allow_nil); + + if(m_lua_loader.error()) { + kError() << "Script run error:" << m_lua_loader.errorString(); + m_lua_loader.clearError(); + } + + return retv; +} + +template<> +PixmapOrMap Theme::getValue(const QString& key, int size, const ::LuaApi::LuaValueMap* args, bool allow_nil) { + if(m_lua_loader.error()) + return PixmapOrMap(); + + Cache::iterator it = m_cache.find(size); + if(it == m_cache.end()) { + kError() << "Size" << size << "not referenced."; + return PixmapOrMap(); + } + + if(!args) { + SizeCache::PixmapsCache::iterator pix = it->second.m_pixmaps_cache.find(key); + if(pix != it->second.m_pixmaps_cache.end()) + return pix->second; + } + + PixmapOrMap retv = to_pixmap_map(m_lua_loader.getValue< ::LuaApi::ImageOrMap>(key, size, args, allow_nil)); + if(m_lua_loader.error()) { + kError() << "Script run error:" << m_lua_loader.errorString(); + m_lua_loader.clearError(); + } + + if(!args) + it->second.m_pixmaps_cache[key] = retv; + return retv; +} + +template<> +QPixmap Theme::getValue(const QString& key, int size, const ::LuaApi::LuaValueMap* args, bool allow_nil) { + PixmapOrMap p = getValue(key, size, args, allow_nil); + if(QPixmap *px = boost::get(&p)) + return *px; + return QPixmap(); +} + +template<> +Glyph Theme::getValue(const QString& key, int size, const ::LuaApi::LuaValueMap* args, bool allow_nil) { + if(m_lua_loader.error()) + return Glyph(); + + Cache::iterator it = m_cache.find(size); + if(it == m_cache.end()) { + kError() << "Size" << size << "not referenced."; + return Glyph(); + } + + if(!args) { + SizeCache::GlyphsCache::iterator pix = it->second.m_glyphs_cache.find(key); + if(pix != it->second.m_glyphs_cache.end()) + return pix->second; + } + + Glyph retv = m_lua_loader.getValue(key, size, args, allow_nil); + + if(m_lua_loader.error()) { + kError() << "Script run error:" << m_lua_loader.errorString(); + m_lua_loader.clearError(); + } + + retv.m_font.setPointSize(size+retv.delta()); + if(!args) + it->second.m_glyphs_cache[key] = retv; + return retv; +} + +template double Theme::getValue(const QString&, int, const ::LuaApi::LuaValueMap* args, bool allow_nil); +template QPointF Theme::getValue(const QString&, int, const ::LuaApi::LuaValueMap* args, bool allow_nil); +template QRectF Theme::getValue(const QString&, int, const ::LuaApi::LuaValueMap* args, bool allow_nil); +template QBrush Theme::getValue(const QString&, int, const ::LuaApi::LuaValueMap* args, bool allow_nil); +template QColor Theme::getValue(const QString&, int, const ::LuaApi::LuaValueMap* args, bool allow_nil); +template QFont Theme::getValue(const QString&, int, const ::LuaApi::LuaValueMap* args, bool allow_nil); +template ::LuaApi::LuaValueMap Theme::getValue< ::LuaApi::LuaValueMap>(const QString&, int, const ::LuaApi::LuaValueMap* args, bool allow_nil); + +} //end namespace Loader diff --git a/src/loader/theme.h b/src/loader/theme.h new file mode 100644 index 0000000..92d4c15 --- /dev/null +++ b/src/loader/theme.h @@ -0,0 +1,81 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LOADER__THEME_H +#define LOADER__THEME_H + +#include +#include +#include +#include "loader/context.h" +#include "luaapi/loader.h" +#include "themeinfo.h" + +namespace Loader { + +typedef std::map PixmapMap; +typedef boost::variant PixmapOrMap; + +/** + * @class Theme + * @brief A class that represents and caches all images loaded by a theme. + * + * This class will be created once for each lua-scripted theme, and will cache + * images loaded from that theme. + */ +class Theme : public QObject { +Q_OBJECT + +private: + ThemeInfo m_theme; + + /** there will be one such class for each size, and i will store pixmaps and glyphs */ + class SizeCache { + public: + typedef std::map PixmapsCache; + typedef std::map GlyphsCache; + int m_ref_count; + PixmapsCache m_pixmaps_cache; + GlyphsCache m_glyphs_cache; + + SizeCache() + : m_ref_count(0) {} + }; + + typedef std::map Cache; + + Context m_context; + LuaApi::Loader m_lua_loader; + Cache m_cache; + + static PixmapOrMap to_pixmap_map(const ::LuaApi::ImageOrMap& m); + +private Q_SLOTS: + void onSettingsChanged(); + +public: + /** Constructor, created the class from a lua theme file */ + Theme(const ThemeInfo& theme); + ~Theme(); + + /** References the size \a size, enabling you to get pixmaps of size \a size */ + void refSize(int size); + + /** Unreferences the size */ + void unrefSize(int size); + + /** Loads a value */ + template + T getValue(const QString& key, int size, const ::LuaApi::LuaValueMap* args = NULL, bool allow_nil = false); +}; + +} //end namespace loader + +#endif //LOADER__THEME_H diff --git a/src/location.cpp b/src/location.cpp new file mode 100644 index 0000000..07d6bdd --- /dev/null +++ b/src/location.cpp @@ -0,0 +1,12 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "location.h" + diff --git a/src/location.h b/src/location.h new file mode 100644 index 0000000..3e76160 --- /dev/null +++ b/src/location.h @@ -0,0 +1,22 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LOCATION_H +#define LOCATION_H + +class __Board; +class __Position; + +struct Location { + const __Board& board; + const __Position& position; +}; + +#endif diff --git a/src/luaapi/genericwrapper.cpp b/src/luaapi/genericwrapper.cpp new file mode 100644 index 0000000..2299476 --- /dev/null +++ b/src/luaapi/genericwrapper.cpp @@ -0,0 +1,140 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include "genericwrapper.h" + +namespace LuaApi { + +QString GenericWrapperBase::file_path(lua_State* l, const QString& f) { + StackCheck check(l); + + lua_getfield(l, LUA_REGISTRYINDEX, CURRENT_DIRECTORY); + QDir* dir = reinterpret_cast(lua_touserdata(l, -1)); + lua_pop(l, 1); + return QDir::cleanPath(QDir::isAbsolutePath(f) ? f : dir->filePath(f)); +} + +Loader::Context* GenericWrapperBase::retrieve_context(lua_State* l) { + StackCheck check(l); + + lua_getfield(l, LUA_REGISTRYINDEX, LOADING_CONTEXT); + Loader::Context* retv = reinterpret_cast(lua_touserdata(l, -1)); + lua_pop(l, 1); + return retv; +} + +void GenericWrapperBase::set_property(lua_State* l, const char* name, lua_CFunction get, + lua_CFunction set, int index) { + StackCheck check(l); + + lua_getfield(l,index,".get"); + lua_pushcfunction(l, get); + lua_setfield(l, -2, name); + lua_pop(l, 1); + + if(set) { + lua_getfield(l,index,".set"); + lua_pushcfunction(l, set); + lua_setfield(l, -2, name); + lua_pop(l, 1); + } +} + +void GenericWrapperBase::set_method(lua_State* l, lua_CFunction f, const char* name, + int index) { + StackCheck check(l); + + lua_getfield(l,index,".methods"); + lua_pushcfunction(l, f); + lua_setfield(l, -2, name); + lua_pop(l, 1); +} + +void GenericWrapperBase::set_meta_method(lua_State* l, lua_CFunction f, + const char* name, int index) { + StackCheck check(l); + + lua_pushcfunction(l, f); + lua_setfield(l, index-1, name); +} + +int GenericWrapperBase::object_meta_index_event(lua_State* l) { + + /* should i check the object before the meta table? no... */ + lua_getmetatable(l,-2); + + //key, MT + lua_pushstring(l,".methods"); + lua_rawget(l,-2); + lua_pushvalue(l,-3); + lua_gettable(l,-2); + + //key, MT, .methods, method + if(!lua_isnil(l,-1)) { + lua_remove(l,-2); + lua_remove(l,-2); + lua_remove(l,-2); + return 1; + } + lua_pop(l,2); + + //key, MT + lua_pushstring(l,".get"); + lua_rawget(l,-2); + lua_pushvalue(l,-3); + lua_gettable(l,-2); + + //key, MT, .get, getter + if(!lua_isnil(l,-1)) { + lua_remove(l,-2); + lua_remove(l,-2); + lua_remove(l,-2); + lua_pushvalue(l,-2); + lua_call(l, 1, 1); + return 1; + } + + luaL_error(l, "Can't get unexisting method/property %s\n", lua_tostring(l,-4)); + lua_pop(l,4); + return 0; +} + +int GenericWrapperBase::object_meta_newindex_event(lua_State* l) { + StackCheck check(l, -2); + + /* should i check the object before the meta table? no... */ + lua_getmetatable(l,-3); + + //key, value, MT + lua_pushstring(l,".set"); + lua_rawget(l,-2); + lua_pushvalue(l,-4); + lua_gettable(l,-2); + + //key, value, MT, .set, setter + if(!lua_isnil(l,-1)) { + lua_remove(l,-2); + lua_remove(l,-2); + lua_remove(l,-3); + lua_pushvalue(l,-3); + lua_pushvalue(l,-3); + lua_remove(l,-4); + lua_call(l, 2, 0); + return 0; + } + + luaL_error(l, "Can't set unexisting property %s\n", lua_tostring(l,-5)); + lua_pop(l, 5); + return 0; +} + + +} //end namespace LuaApi diff --git a/src/luaapi/genericwrapper.h b/src/luaapi/genericwrapper.h new file mode 100644 index 0000000..5763b8b --- /dev/null +++ b/src/luaapi/genericwrapper.h @@ -0,0 +1,571 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LUAAPI__GENERICWRAPPER_H +#define LUAAPI__GENERICWRAPPER_H + +extern "C" { +#include +#include +#include +#include "lfunclib.h" +} +#include +#include +#include "common.h" + +namespace Loader { class Context; } + +namespace LuaApi { + +#define WRAP_0(func, selftype, restype) \ + static int func(lua_State* l) { \ + selftype* self = retrieve(l, 1); \ + CAT0(lua_push, restype)(l, self->func()); \ + return 1; \ + } + +#define PROPERTY_RW(PROP, GET, SET, restype) \ + static int get_##PROP(lua_State* l) { \ + lua_push##restype(l, retrieve(l, 1, DontCheck)->GET()); \ + return 1; \ + } \ + \ + static int set_##PROP(lua_State* l) { \ + retrieve(l, 1, DontCheck)->SET( lua_to##restype(l, 2) ); \ + return 0; \ + } + +#define PROPERTY_RO(PROP, GET, restype) \ + static int get_##PROP(lua_State* l) { \ + lua_push##restype(l, retrieve(l, 1, DontCheck)->GET()); \ + return 1; \ + } + +#define PROPERTY_RW_TYPE(PROP, GET, SET, restype, TYPE) \ + static int get_##PROP(lua_State* l) { \ + lua_push##restype(l, retrieve(l, 1, DontCheck)->GET()); \ + return 1; \ + } \ + \ + static int set_##PROP(lua_State* l) { \ + retrieve(l, 1, DontCheck)->SET( TYPE(lua_to##restype(l, 2)) ); \ + return 0; \ + } + +#define PROPERTY_RO_TYPE(PROP, GET, restype, TYPE) \ + static int get_##PROP(lua_State* l) { \ + lua_push##restype(l, retrieve(l, 1, DontCheck)->GET()); \ + return 1; \ + } + +#define PROPERTY_RW_CLASS(PROP, GET, SET, CLASS) \ + static int get_##PROP(lua_State* l) { \ + Wrapper::create(l, retrieve(l, 1, DontCheck)->GET()); \ + return 1; \ + } \ + \ + static int set_##PROP(lua_State* l) { \ + retrieve(l, 1, DontCheck)->SET( *Wrapper::retrieve(l, 2, AssertOk) ); \ + return 0; \ + } + +#define PROPERTY_RO_CLASS(PROP, GET, CLASS) \ + static int get_##PROP(lua_State* l) { \ + Wrapper::create(l, retrieve(l, 1, DontCheck)->GET()); \ + return 1; \ + } + +#define PROPERTY_RO_QSTRING(PROP, GET) \ + static int get_##PROP(lua_State* l) { \ + QString s = retrieve(l, 1, DontCheck)->GET(); \ + lua_pushstring(l, s.toAscii().constData()); \ + return 1; \ + } + +#define PROPERTY_RW_QSTRING(PROP, GET, SET) \ + static int get_##PROP(lua_State* l) { \ + QString s = retrieve(l, 1, DontCheck)->GET(); \ + lua_pushstring(l, s.toAscii().constData()); \ + return 1; \ + } \ + \ + static int set_##PROP(lua_State* l) { \ + retrieve(l, 1, DontCheck)->SET( QString(lua_tostring(l, 2)) ); \ + return 0; \ + } + +#define SET_PROPERTY_RW(LUA, PROP) \ + set_property(LUA, #PROP, get_##PROP, set_##PROP); + +#define SET_PROPERTY_RO(LUA, PROP) \ + set_property(LUA, #PROP, get_##PROP, NULL); + + +#define LOADING_CONTEXT "tagua_loading_context" +#define CURRENT_DIRECTORY "tagua_script_curr_dir" +#define API_LOADER "tagua_api_loader" + + + +/** + * A simple class that read lua stack level at creation and checks it + * when destroyed, printing and error message if different from expected. + */ +class StackCheck { + lua_State* l; + int top; +public: + StackCheck(lua_State* l, int expect = 0) : l(l) { + top = lua_gettop(l) + expect; + } + + ~StackCheck() { + if (lua_gettop(l) != top) { + kDebug() << "Wrong lua stack size!\n" + " expected = " << top << "\n" + " actual = " << lua_gettop(l); + } + } +}; + + +/** + * An enumarated value to test how strongly casts will be checked + */ +enum CheckStrenght { + DontCheck, + Check, + AssertOk +}; + + +template +class Wrapper; + + +//BEGIN GenericWrappeBase------------------------------------------------------ + +class GenericWrapperBase { +public: + static QString file_path(lua_State* l, const QString& f); + + static Loader::Context* retrieve_context(lua_State* l); + + /** + * Add property \a f to the table at @a index. + */ + static void set_property(lua_State* l, const char* name, lua_CFunction get, + lua_CFunction set = NULL, int index = -1); + + /** + * Add method \a f to the table at @a index. + */ + static void set_method(lua_State* l, lua_CFunction f, const char* name, int index = -1); + + /** + * Add meta method \a f to the table at @a index. + */ + static void set_meta_method(lua_State* l, lua_CFunction f, const char* name, int index = -1); + + /** + * Object index read event + */ + static int object_meta_index_event(lua_State* l); + + /** + * Object index write event + */ + static int object_meta_newindex_event(lua_State* l); +}; + +//END GenericWrapperBase------------------------------------------------------- + + +//BEGIN GenericWrapprCommon---------------------------------------------------- + +template +class GenericWrapperCommon : public GenericWrapperBase { +public: + + /** + * Checks the type, will return true if ok, or false or raise a lua + * error if not (in case of Check/AssertOk parameters). + */ + static bool check_type(lua_State* l, int index, CheckStrenght check) { + StackCheck s(l); + + if(check != DontCheck) { + if(!lua_getmetatable(l,index)) { + if(check == AssertOk) + luaL_error(l, "Mismatch, got object of unknown type expecting %s", + Wrapper::class_name()); + return false; + } + Wrapper::push_meta_table(l); + + if(!lua_rawequal(l, -2, -1)) { + if(check == AssertOk) { + if(lua_istable(l, -2)) { + lua_getfield(l, -2, ".type"); + if(lua_isstring(l, -1)) + luaL_error(l, "Mismatch, got object of type %s expecting %s", + lua_tostring(l,-1), Wrapper::class_name()); + } + lua_pop(l,2); + luaL_error(l, "Mismatch, got object of unknown type expecting %s", + Wrapper::class_name()); + } + lua_pop(l,2); + return false; + } + lua_pop(l,2); + } + + return true; + } + + /** + * Create the factory class and static metatable. + */ + static void register_class(lua_State* l) { + StackCheck s(l); + + lua_newtable(l); // factory class + + lua_newtable(l); // metatable + lua_pushcfunction(l, &Wrapper::constructor_wrapper); + lua_setfield(l, -2, "__call"); + lua_setmetatable(l, -2); + + lua_newtable(l); // object metatable + + // add gc metamethod + lua_pushcfunction(l, &Wrapper::deallocate); + lua_setfield(l, -2, "__gc"); + + // add index metamethod + lua_pushcfunction(l, &Wrapper::object_meta_index_event); + lua_setfield(l, -2, "__index"); + + // add newindex metamethod + lua_pushcfunction(l, &Wrapper::object_meta_newindex_event); + lua_setfield(l, -2, "__newindex"); + + lua_newtable(l); + lua_setfield(l, -2, ".methods"); + + lua_newtable(l); + lua_setfield(l, -2, ".get"); + + lua_newtable(l); + lua_setfield(l, -2, ".set"); + + lua_pushstring(l, Wrapper::class_name() ); + lua_setfield(l, -2, ".type"); + + Wrapper::create_index_table(l); + + lua_setfield(l, -2, "object_meta_table"); + lua_setglobal(l, Wrapper::class_name() ); + } + + /** + * Calls the Wrapper<T> constructor + */ + static int constructor_wrapper(lua_State* l) { + lua_remove(l, 1); + return Wrapper::constructor(l); + } + + /** + * Pushes this object's meta table. + */ + static void push_meta_table(lua_State* l) { + StackCheck s(l, 1); + + lua_getglobal(l, Wrapper::class_name()); + lua_pushstring(l, "object_meta_table"); + lua_rawget(l,-2); + lua_remove(l,-2); + } +}; + +//END GenericWrapperCommon----------------------------------------------------- + + +//BEGIN GenericWrapper--------------------------------------------------------- + +template +class GenericWrapper : public GenericWrapperCommon { +public: + + /** + * Retrieve a wrapped object on the stack. + */ + static T* retrieve(lua_State* l, int index = -1, CheckStrenght check = Check); + + /** + * Destroy a wrapped object of type T. + */ + static int deallocate(lua_State* l); + + /** + * Wrap an object of type T in a Lua userdatum. + * Lua takes ownership of the object, so that it is + * automatically disposed by the Lua garbage collector. + */ + static void allocate(lua_State* l, T* x); +}; + +template +T* GenericWrapper::retrieve(lua_State* l, int index, CheckStrenght check) { + if(!GenericWrapperCommon::check_type(l, index, check)) + return NULL; + + T** data = reinterpret_cast( lua_touserdata(l, index) ); + return data ? *data : NULL; +} + +template +int GenericWrapper::deallocate(lua_State* l) { + StackCheck s(l, -1); + + T* data = retrieve(l); + lua_pop(l, 1); + delete data; + return 0; +} + +template +void GenericWrapper::allocate(lua_State* l, T* x) { + StackCheck s(l, 1); + + // create userdata + T** data = reinterpret_cast( lua_newuserdata(l, sizeof(T*)) ); + *data = x; + + // set metatable + GenericWrapperCommon::push_meta_table(l); + lua_setmetatable(l, -2); +} + +//END GenericWrapper----------------------------------------------------------- + +//BEGIN GenericWrapperByValue--------------------------------------------------------- + +template +class GenericWrapperByValue : public GenericWrapperCommon { +public: + + /** + * Retrieve a wrapped object on the stack. + */ + static T* retrieve(lua_State* l, int index = -1, CheckStrenght check = Check); + + /** + * Destroy a wrapped object of type T. + */ + static int deallocate(lua_State* l); + + /** + * Create an object of type T in a Lua userdatum. + * Lua takes ownership of the object, so that it is + * automatically disposed by the Lua garbage collector. + */ + static void create(lua_State* l); + template + static void create(lua_State* l, const A1&); + template + static void create(lua_State* l, const A1&, const A2&); + template + static void create(lua_State* l, const A1&, const A2&, const A3&); + template + static void create(lua_State* l, const A1&, const A2&, const A3&, const A4&); + template + static void create(lua_State* l, const A1&, const A2&, const A3&, const A4&, const A5&); +}; + +template +T* GenericWrapperByValue::retrieve(lua_State* l, int index, CheckStrenght check) { + if(!GenericWrapperCommon::check_type(l, index, check)) + return NULL; + + T* data = reinterpret_cast( lua_touserdata(l, index) ); + return data; +} + +template +int GenericWrapperByValue::deallocate(lua_State* l) { + StackCheck s(l, -1); + + T* data = retrieve(l); + lua_pop(l, 1); + data->~T(); //placement delete + return 0; +} + +template +void GenericWrapperByValue::create(lua_State* l) { + StackCheck s(l, 1); + + T* data = reinterpret_cast(lua_newuserdata(l, sizeof(T))); + new(data) T(); //placement new + GenericWrapperCommon::push_meta_table(l); + lua_setmetatable(l, -2); +} + +template +template +void GenericWrapperByValue::create(lua_State* l, const A1& a1) { + StackCheck s(l, 1); + + T* data = reinterpret_cast(lua_newuserdata(l, sizeof(T))); + new(data) T(a1); //placement new + GenericWrapperCommon::push_meta_table(l); + lua_setmetatable(l, -2); +} + +template +template +void GenericWrapperByValue::create(lua_State* l, const A1& a1, const A2& a2) { + StackCheck s(l, 1); + + T* data = reinterpret_cast(lua_newuserdata(l, sizeof(T))); + new(data) T(a1, a2); //placement new + GenericWrapperCommon::push_meta_table(l); + lua_setmetatable(l, -2); +} + +template +template +void GenericWrapperByValue::create(lua_State* l, const A1& a1, const A2& a2, const A3& a3) { + StackCheck s(l, 1); + + T* data = reinterpret_cast(lua_newuserdata(l, sizeof(T))); + new(data) T(a1, a2, a3); //placement new + GenericWrapperCommon::push_meta_table(l); + lua_setmetatable(l, -2); +} + +template +template +void GenericWrapperByValue::create(lua_State* l, const A1& a1, const A2& a2, + const A3& a3, const A4& a4) { + StackCheck s(l, 1); + + T* data = reinterpret_cast(lua_newuserdata(l, sizeof(T))); + new(data) T(a1, a2, a3, a4); //placement new + GenericWrapperCommon::push_meta_table(l); + lua_setmetatable(l, -2); +} + +template +template +void GenericWrapperByValue::create(lua_State* l, const A1& a1, const A2& a2, const A3& a3, + const A4& a4, const A5& a5) { + StackCheck s(l, 1); + + T* data = reinterpret_cast(lua_newuserdata(l, sizeof(T))); + new(data) T(a1, a2, a3, a4, a5); //placement new + GenericWrapperCommon::push_meta_table(l); + lua_setmetatable(l, -2); +} + +//END GenericWrapperByValue----------------------------------------------------------- + + +template +class Comparable { +public: + static void register_in_index_table(lua_State* l); + static int eq_event(lua_State* l); +}; + +template +void Comparable::register_in_index_table(lua_State* l) { + Wrapper::set_meta_method(l, &eq_event, "__eq"); +} + +template +int Comparable::eq_event(lua_State* l) { + int n = lua_gettop(l); + if(n != 2) + luaL_error(l, "Wrong argument count %d for __eq", n); + T *p1 = Wrapper::retrieve(l, 1, AssertOk); + T *p2 = Wrapper::retrieve(l, 2, AssertOk); + lua_pop(l, n); + lua_pushboolean(l, *p1 == *p2); + return 1; +} + +template +class Summable { +public: + static void register_in_index_table(lua_State* l); + static int add_event(lua_State* l); + static int sub_event(lua_State* l); + static int unm_event(lua_State* l); +}; + +template +void Summable::register_in_index_table(lua_State* l) { + Wrapper::set_meta_method(l, &add_event, "__add"); + Wrapper::set_meta_method(l, &sub_event, "__sub"); + Wrapper::set_meta_method(l, &unm_event, "__unm"); +} + +template +int Summable::add_event(lua_State* l) { + int n = lua_gettop(l); + if(n != 2) + luaL_error(l, "Wrong argument count %d for __add", n); + T *p1 = Wrapper::retrieve(l, 1, AssertOk); + T *p2 = Wrapper::retrieve(l, 2, AssertOk); + lua_pop(l, n); + + Wrapper::create(l, *p1 + *p2); + + return 1; +} + +template +int Summable::sub_event(lua_State* l) { + int n = lua_gettop(l); + if(n != 2) + luaL_error(l, "Wrong argument count %d for __sub", n); + T *p1 = Wrapper::retrieve(l, 1, AssertOk); + T *p2 = Wrapper::retrieve(l, 2, AssertOk); + lua_pop(l, n); + + Wrapper::create(l, *p1 - *p2); + + return 1; +} + +template +int Summable::unm_event(lua_State* l) { + int n = lua_gettop(l); + + /* for some strange reason unm gets 2 copies of the same argument */ + if(n != 2) + luaL_error(l, "Wrong argument count %d for __unm", n); + T *p1 = Wrapper::retrieve(l, 1, AssertOk); + lua_pop(l, n); + + Wrapper::create(l, -*p1); + + return 1; +} + +} //end namespace LuaApi + + +#endif //LUAAPI__GENERICWRAPPER_H diff --git a/src/luaapi/imaging.cpp b/src/luaapi/imaging.cpp new file mode 100644 index 0000000..33c35f4 --- /dev/null +++ b/src/luaapi/imaging.cpp @@ -0,0 +1,916 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include "luaapi/imaging.h" + + +using namespace Loader; + +namespace LuaApi { + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "Rect"; +} + +int Wrapper::translate(lua_State* l) { + QRectF *r = retrieve(l, 1, AssertOk); + QPointF *p = Wrapper::retrieve(l, 2, AssertOk); + r->translate(*p); + return 0; +} + +int Wrapper::to_string(lua_State* l) { + QRectF *r = retrieve(l, 1, AssertOk); + lua_pushfstring(l, "(%f, %f, %f, %f)", r->x(), r->y(), r->width(), r->height() ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RW(l, x); + SET_PROPERTY_RW(l, y); + SET_PROPERTY_RW(l, width); + SET_PROPERTY_RW(l, height); + + SET_PROPERTY_RO(l, left); + SET_PROPERTY_RO(l, right); + SET_PROPERTY_RO(l, top); + SET_PROPERTY_RO(l, bottom); + + set_method(l, &translate, "translate"); + set_meta_method(l, &to_string, "__tostring"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch (n) { + case 0: + create(l); + break; + case 1: + { + QRectF res = *retrieve(l, 1, AssertOk); + lua_pop(l, 1); + create(l,res); + break; + } + case 4: + { + double x = lua_tonumber(l, 1); + double y = lua_tonumber(l, 2); + double width = lua_tonumber(l, 3); + double height = lua_tonumber(l, 4); + + lua_pop(l, 4); + create(l, x, y, width, height); + } + break; + default: + luaL_error(l, "Wrong parameter list for Rect constructor"); + } + + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------ + +const char* Wrapper::class_name() { + return "Point"; +} + +int Wrapper::to_string(lua_State* l) { + QPointF *p = retrieve(l, 1, AssertOk); + lua_pushfstring(l, "(%f, %f)", p->x(), p->y() ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RW(l, x); + SET_PROPERTY_RW(l, y); + SET_PROPERTY_RO(l, length); + + set_meta_method(l, &to_string, "__tostring"); + set_meta_method(l, &get_length, "__len"); + + Comparable::register_in_index_table(l); + Summable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch(n) { + case 0: + create(l); + break; + case 1: { + QPointF res = *retrieve(l, 1, AssertOk); + lua_pop(l,1); + create(l, res); + break; + } + case 2: { + double x = lua_tonumber(l, 1); + double y = lua_tonumber(l, 2); + lua_pop(l,2); + create(l, x, y); + } + break; + default: + luaL_error(l, "Wrong argument count for Point constructor"); + break; + } + + return 1; +} + +int Wrapper::get_length(lua_State* l) { + QPointF *p = retrieve(l, 1, DontCheck); + lua_pushnumber(l, sqrt(p->x()*p->x() + p->y()*p->y()) ); + return 1; +} + +//END Wrapper -------------------------------------------------------- + + +//BEGIN Wrapper-------------------------------------------------------- + + +const char* Wrapper::class_name() { + return "Color"; +} + +int Wrapper::to_string(lua_State* l) { + QColor *r = retrieve(l, 1, AssertOk); + char buf[32]; + snprintf(buf, 32, "#%08x", r->rgba()); + lua_pushstring(l, buf); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RW(l, r); + SET_PROPERTY_RW(l, g); + SET_PROPERTY_RW(l, b); + SET_PROPERTY_RW(l, a); + + set_meta_method(l, &to_string, "__tostring"); +} + +QColor Wrapper::get(lua_State* l, int index) { + if(lua_isstring(l, index)) { + QColor retv(lua_tostring(l, index)); + if(!retv.isValid()) + luaL_error(l, "Wrong color string \"%s\"", lua_tostring(l, index)); + return retv; + } + else + return *retrieve(l, index, AssertOk); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch (n) { + case 0: + create(l); + break; + case 1: + { + QColor c = get(l, 1); + lua_pop(l, 1); + create(l, c); + break; + } + case 3: + case 4: + { + int r = int(lua_tonumber(l, 1)); + int g = int(lua_tonumber(l, 2)); + int b = int(lua_tonumber(l, 3)); + int a = (n == 3) ? 255 : int(lua_tonumber(l, 4)); + + lua_pop(l, n); + create(l, r, g, b, a); + } + break; + default: + luaL_error(l, "Wrong parameter list for Color constructor"); + } + + return 1; +} + +//END Wrapper---------------------------------------------------------- + +template +int GradientWrapper::index_event(lua_State* l) { + if(!lua_isnumber(l, -1)) + return GenericWrapperBase::object_meta_index_event(l); + + T *g = Wrapper::retrieve(l, -2, AssertOk); + double stopnum = lua_tonumber(l, -1); + lua_pop(l, 1); + + QGradientStops s = g->stops(); + int retv; + if(s.size()) { + int min = 0; + int max = s.size(); + while(min < max-1) { + int mid = (min+max)/2; + if(stopnum > s[(min+max)/2].first) + min = mid; + else + max = mid; + } + if(qAbs(s[max].first-stopnum) < qAbs(s[min].first-stopnum)) + retv = max; + else + retv = min; + } + Wrapper::create(l, s[retv].second); + lua_pushnumber(l, s[retv].first); + + return 2; +} + +template +int GradientWrapper::newindex_event(lua_State* l) { + if(!lua_isnumber(l, -2)) + return GenericWrapperBase::object_meta_newindex_event(l); + + T *g = Wrapper::retrieve(l, -3, AssertOk); + double stopnum = lua_tonumber(l, -2); + QColor col = Wrapper::get(l, -1); + lua_pop(l, 3); + + g->setColorAt(stopnum, col); + return 0; +} + + +//BEGIN Wrapper-------------------------------------------------------- + +const char* Wrapper::class_name() { + return "LinearGradient"; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RW(l, start); + SET_PROPERTY_RW(l, finish); + + //set_meta_method(l, &index_event, "__index"); + set_meta_method(l, &newindex_event, "__newindex"); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch(n) { + case 0: + create(l); + break; + case 2: { + QPointF* start = Wrapper::retrieve(l, 1, AssertOk); + QPointF* final = Wrapper::retrieve(l, 2, AssertOk); + lua_pop(l, 2); + create(l, *start, *final); + break; + } + default: + luaL_error(l, "Wrong parameter list for LinearGradient constructor"); + break; + } + + return 1; +} + +//END Wrapper---------------------------------------------------------- + + +//BEGIN Wrapper-------------------------------------------------------- + +const char* Wrapper::class_name() { + return "RadialGradient"; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RW(l, center); + SET_PROPERTY_RW(l, radius); + SET_PROPERTY_RW(l, focus); + + //set_meta_method(l, &index_event, "__index"); + set_meta_method(l, &newindex_event, "__newindex"); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch(n) { + case 0: + create(l); + break; + case 2: { + QPointF* center = Wrapper::retrieve(l, 1, AssertOk); + double radius = lua_tonumber(l, 2); + lua_pop(l, 2); + create(l, *center, radius); + break; + } + case 3: { + QPointF* center = Wrapper::retrieve(l, 1, AssertOk); + double radius = lua_tonumber(l, 2); + QPointF* focus = Wrapper::retrieve(l, 3, AssertOk); + lua_pop(l, 3); + create(l, *center, radius, *focus); + break; + } + default: + luaL_error(l, "Wrong parameter list for RadialGradient constructor"); + break; + } + + return 1; +} + +//END Wrapper---------------------------------------------------------- + +//BEGIN Wrapper-------------------------------------------------------- + +const char* Wrapper::class_name() { + return "ConicalGradient"; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RW(l, center); + SET_PROPERTY_RW(l, angle); + + //set_meta_method(l, &index_event, "__index"); + set_meta_method(l, &newindex_event, "__newindex"); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch(n) { + case 0: + create(l); + break; + case 2: { + QPointF* center = Wrapper::retrieve(l, 1, AssertOk); + double angle = lua_tonumber(l, 2); + lua_pop(l, 2); + create(l, *center, angle); + break; + } + default: + luaL_error(l, "Wrong parameter list for Color constructor"); + break; + } + + return 1; +} + +//END Wrapper---------------------------------------------------------- + +//BEGIN Wrapper-------------------------------------------------------- + +const char* Wrapper::class_name() { + return "Brush"; +} + +void Wrapper::create_index_table(lua_State* l) { + + //set_meta_method(l, &to_string, "__tostring"); + set_method(l, &translate, "translate"); + set_method(l, &rotate, "rotate"); + set_method(l, &scale, "scale"); +} + +QBrush Wrapper::get(lua_State* l, int index) { + if(QBrush *b = retrieve(l, index)) + return *b; + else if(QLinearGradient* g = Wrapper::retrieve(l, index)) + return QBrush(*g); + else if(QRadialGradient* g = Wrapper::retrieve(l, index)) + return QBrush(*g); + else if(QConicalGradient* g = Wrapper::retrieve(l, index)) + return QBrush(*g); + else if(Loader::Image* img = Wrapper::retrieve(l, index)) + return QBrush(img->image()); + else + return QBrush(Wrapper::get(l, index)); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch (n) { + case 0: + create(l, Qt::NoBrush); + break; + case 1: { + QBrush b = get(l, 1); + lua_pop(l, 1); + create(l, b); + break; + } + default: + luaL_error(l, "Wrong parameter list for Brush constructor"); + } + + return 1; +} + +int Wrapper::rotate(lua_State* l) { + const int n = lua_gettop(l); + if (n != 2) luaL_error(l, "Wrong argument count for Brush::rotate"); + + QBrush* brush = retrieve(l, 1, AssertOk); + double r = lua_tonumber(l, 2); + lua_pop(l, n); + + QMatrix m = brush->matrix(); + m = m * QMatrix().rotate(r); + brush->setMatrix(m); + return 0; +} + +int Wrapper::scale(lua_State* l) { + const int n = lua_gettop(l); + if (n != 3) luaL_error(l, "Wrong argument count for Brush::scale"); + + QBrush* brush = retrieve(l, 1, AssertOk); + double x = lua_tonumber(l, 2); + double y = lua_tonumber(l, 3); + lua_pop(l, n); + + QMatrix m = brush->matrix(); + m = m * QMatrix().scale(x, y); + brush->setMatrix(m); + return 0; +} + +int Wrapper::translate(lua_State* l) { + const int n = lua_gettop(l); + if (n < 2 || n > 3) luaL_error(l, "Wrong argument count for Brush::translate"); + + QBrush* brush = retrieve(l, 1, AssertOk); + if(n == 3) { + double x = lua_tonumber(l, 2); + double y = lua_tonumber(l, 3); + lua_pop(l, n); + + QMatrix m = brush->matrix(); + m = m * QMatrix().translate(x, y); + brush->setMatrix(m); + } + else { + QPointF* point = Wrapper::retrieve(l, 2, AssertOk); + lua_pop(l, n); + + QMatrix m = brush->matrix(); + m = m * QMatrix().translate(point->x(), point->y()); + brush->setMatrix(m); + } + return 0; +} + +//END Wrapper---------------------------------------------------------- + + +//BEGIN Wrapper-------------------------------------------------------- + +const char* Wrapper::class_name() { + return "Font"; +} + +void Wrapper::create_index_table(lua_State* l) { + set_meta_method(l, &to_string, "__tostring"); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch (n) { + case 0: + create(l, QApplication::font()); + break; + case 1: { + QFont *b = retrieve(l, 1, AssertOk); + lua_pop(l, 1); + create(l, *b); + break; + } + case 3: { + QString family = lua_tostring(l, 1); + bool bold = lua_toboolean(l, 2); + bool italic = lua_toboolean(l, 3); + lua_pop(l, 3); + create(l, family, 12, bold ? QFont::Bold : QFont::Normal, italic); + break; + } + default: + luaL_error(l, "Wrong parameter list for Font constructor"); + } + + return 1; +} + +int Wrapper::to_string(lua_State* l) { + QFont *r = retrieve(l, 1, AssertOk); + lua_pushstring(l, r->rawName().toAscii().constData()); + return 1; +} + +//END Wrapper---------------------------------------------------------- + +//BEGIN Wrapper -------------------------------------------------------- + +const char* Wrapper::class_name() { + return "Image"; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, width); + SET_PROPERTY_RO(l, height); + SET_PROPERTY_RW(l, opacity); + + set_method(l, &resetMatrix, "reset_matrix"); + set_method(l, &rotate, "rotate"); + set_method(l, &scale, "scale"); + set_method(l, &translate, "translate"); + set_method(l, &setPaintOver, "set_paint_over"); + set_method(l, &clear, "clear"); + set_method(l, &fillRect, "fill_rect"); + set_method(l, &drawLine, "draw_line"); + set_method(l, &drawImage, "draw_image"); + set_method(l, &drawSVG, "draw_svg"); + set_method(l, &drawGlyph, "draw_glyph"); + set_method(l, &expBlur, "exp_blur"); + set_method(l, &createShadow, "create_shadow"); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch (n) { + case 1: { + if(lua_isstring(l, 1)) { + QString path = file_path(l, lua_tostring(l, 1)); + Context* context = retrieve_context(l); + lua_pop(l, 1); + create(l, context, path ); + } + else { + Image *res = retrieve(l, 1, AssertOk); + lua_pop(l, 1); + create(l, *res ); + } + } + break; + case 2: { + if(lua_isnumber(l, 1)) { + int width = static_cast(lua_tonumber(l, 1)); + int height = static_cast(lua_tonumber(l, 2)); + lua_pop(l, 2); + create(l, width, height); + } + else { + QString path = file_path(l, lua_tostring(l, 1)); + bool use_cache = lua_toboolean(l, 2); + Context* context = retrieve_context(l); + lua_pop(l, 2); + create(l, context, path, use_cache ); + } + } + break; + default: + luaL_error(l, "Wrong argument count for Image constructor"); + } + + return 1; +} + +int Wrapper::resetMatrix(lua_State* l) { + const int n = lua_gettop(l); + if (n != 1) luaL_error(l, "Wrong argument count for Image::reset_matrix"); + + Image* img = retrieve(l, 1, AssertOk); + lua_pop(l, n); + + img->resetMatrix(); + return 0; +} + +int Wrapper::rotate(lua_State* l) { + const int n = lua_gettop(l); + if (n != 2) luaL_error(l, "Wrong argument count for Image::rotate"); + + Image* img = retrieve(l, 1, AssertOk); + double r = lua_tonumber(l, 2); + lua_pop(l, n); + + img->rotate(r); + return 0; +} + +int Wrapper::scale(lua_State* l) { + const int n = lua_gettop(l); + if (n != 3) luaL_error(l, "Wrong argument count for Image::scale"); + + Image* img = retrieve(l, 1, AssertOk); + double x = lua_tonumber(l, 2); + double y = lua_tonumber(l, 3); + lua_pop(l, n); + + img->scale(x, y); + return 0; +} + +int Wrapper::translate(lua_State* l) { + const int n = lua_gettop(l); + if (n < 2 || n > 3) luaL_error(l, "Wrong argument count for Image::translate"); + + Image* img = retrieve(l, 1, AssertOk); + if(n == 3) { + double x = lua_tonumber(l, 2); + double y = lua_tonumber(l, 3); + lua_pop(l, n); + + img->translate(x, y); + } + else { + QPointF* point = Wrapper::retrieve(l, 2, AssertOk); + lua_pop(l, n); + + img->translate(point->x(), point->y()); + } + return 0; +} + +int Wrapper::clear(lua_State* l) { + const int n = lua_gettop(l); + if (n < 1 || n > 2) luaL_error(l, "Wrong argument count for Image::clear"); + + Image* img = retrieve(l, 1, AssertOk); + + if(n == 2) { + QColor col = Wrapper::get(l, 2); + lua_pop(l, n); + img->clear(col); + } + else { + lua_pop(l, n); + img->clear(); + } + return 0; +} + +int Wrapper::setPaintOver(lua_State* l) { + const int n = lua_gettop(l); + if (n != 2) luaL_error(l, "Wrong argument count for Image::set_paint_over"); + + Image* img = retrieve(l, 1, AssertOk); + bool p = lua_toboolean(l, 2); + lua_pop(l, n); + + img->setPaintOver(p); + return 0; +} + +int Wrapper::fillRect(lua_State* l) { + const int n = lua_gettop(l); + if (n != 3) luaL_error(l, "Wrong argument count for Image::fill_rect"); + + Image* img = retrieve(l, 1, AssertOk); + QRectF* rect = Wrapper::retrieve(l, 2, AssertOk); + QBrush brush = Wrapper::get(l, 3); + lua_pop(l, n); + + img->fillRect(*rect, brush); + return 0; +} + +int Wrapper::drawLine(lua_State* l) { + const int n = lua_gettop(l); + if (n > 5 || n < 4) luaL_error(l, "Wrong argument count for Image::draw_line"); + + Image* img = retrieve(l, 1, AssertOk); + QPointF* from = Wrapper::retrieve(l, 2, AssertOk); + QPointF* to = Wrapper::retrieve(l, 3, AssertOk); + QColor color = Wrapper::get(l, 4); + double width = (n==5) ? lua_tonumber(l, 5) : 0.0; + lua_pop(l, n); + + img->drawLine(*from, *to, color, width); + return 0; +} + +int Wrapper::drawImage(lua_State* l) { + const int n = lua_gettop(l); + if (n < 3 || n > 5) luaL_error(l, "Wrong argument count for Image::draw_image"); + + Image* img = retrieve(l, 1, AssertOk); + QRectF* dest = Wrapper::retrieve(l, 2, AssertOk); + if (lua_isstring(l, 3)) { + Context* context = retrieve_context(l); + const char* image_path = lua_tostring(l, 3); + bool res; + if (n >= 4) { + QRectF* src = Wrapper::retrieve(l, 4, AssertOk); + bool use_cache = n == 5 ? lua_toboolean(l, 5) : true; + res = img->drawImage(context, *dest, file_path(l, image_path), *src, use_cache); + } + else + res = img->drawImage(context, *dest, file_path(l, image_path) ); + + lua_pop(l, n); + lua_pushboolean(l, res); + return 1; + } + else { + if (n == 5) luaL_error(l, "Wrong argument count for Image::draw_image"); + + Image* image = retrieve(l, 3, AssertOk); + if (n == 4) { + QRectF* src = Wrapper::retrieve(l, 4, AssertOk); + img->drawImage(*dest, *image, *src); + } + else + img->drawImage(*dest, *image); + + lua_pop(l, n); + return 0; + } +} + +int Wrapper::drawSVG(lua_State* l) { + const int n = lua_gettop(l); + if (n != 3) luaL_error(l, "Wrong argument count for Image::draw_svg"); + + Image* img = retrieve(l, 1, AssertOk); + QRectF* rect = Wrapper::retrieve(l, 2, AssertOk); + const char* file = lua_tostring(l, 3); + Context* context = retrieve_context(l); + lua_pop(l, n); + + bool res = img->drawSVG(context, *rect, file_path(l, file) ); + lua_pushboolean(l, res); + return 1; +} + +int Wrapper::drawGlyph(lua_State* l) { + int n = lua_gettop(l); + if (n < 4 || n > 8) luaL_error(l, "Wrong argument count for Image::draw_glyph"); + + Image* img = retrieve(l, 1, AssertOk); + QRectF* rect = Wrapper::retrieve(l, 2, AssertOk); + const char* font = lua_tostring(l, 3); + const char* glyph_str = lua_tostring(l, 4); + if(!font || !glyph_str) + luaL_error(l, "Null arguments for Image::draw_glyph"); + + unsigned int glyph = strtoul(glyph_str, NULL, 0); + bool draw_inner_bg = true; + double border = 0.0; + QBrush fg = Qt::black; + QBrush bg = Qt::white; + + switch (n) { + case 8: + draw_inner_bg = lua_toboolean(l, 8); + case 7: + border = lua_tonumber(l, 7); + case 6: + bg = Wrapper::get(l, 6); + case 5: + fg = Wrapper::get(l, 5); + default: + break; + } + lua_pop(l, n); + + Context* context = retrieve_context(l); + + bool res = img->drawGlyph(context, *rect, file_path(l, font), glyph, + fg, bg, border, draw_inner_bg); + lua_pushboolean(l, res); + return 1; +} + +int Wrapper::expBlur(lua_State* l) { + int n = lua_gettop(l); + if (n != 2) luaL_error(l, "Wrong argument count for Image::exp_blur"); + + Image* img = retrieve(l, 1, AssertOk); + double radius = lua_tonumber(l, 2); + + img->expBlur(radius); + + lua_pop(l, n); + return 0; +} + +int Wrapper::createShadow(lua_State* l) { + int n = lua_gettop(l); + if (n < 3 || n > 5) luaL_error(l, "Wrong argument count for Image::create_shadow"); + + Image* img = retrieve(l, 1, AssertOk); + double radius = lua_tonumber(l, 2); + QColor color = Wrapper::get(l, 3); + + QPoint grow; + QPointF offset; + + switch (n) { + case 5: + offset = *Wrapper::retrieve(l, 5, AssertOk); + case 4: + grow = Wrapper::retrieve(l, 4, AssertOk)->toPoint(); + default: + break; + } + lua_pop(l, n); + + create(l, img->createShadow(radius, color, grow, offset)); + return 1; +} + +//END Wrapper ---------------------------------------------------------- + +//BEGIN Wrapper ------------------------------------------------------ + +const char* Wrapper::class_name() { + return "Glyph"; +} + +void Wrapper::create_index_table(lua_State* /*l*/) { + +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + switch(n) { + case 1: { + unsigned int c = strtoul(lua_tostring(l, 1), NULL, 0); + lua_pop(l, 1); + create(l, c); + } + break; + case 2: { + Context* context = retrieve_context(l); + QString path = file_path(l, lua_tostring(l, 1)); + unsigned int c = strtoul(lua_tostring(l, 2), NULL, 0); + lua_pop(l, 2); + create(l, context, path, c); + } + break; + case 3: { + Context* context = retrieve_context(l); + if (lua_isnil(l, 1)) { + // no font path, just load the string + QString str(lua_tostring(l, 2)); + int d = static_cast(lua_tonumber(l, 3)); + lua_pop(l, 3); + create(l, str, d); + } + else { + QString path = file_path(l, lua_tostring(l, 1)); + unsigned int c = strtoul(lua_tostring(l, 2), NULL, 0); + int d = int(lua_tonumber(l, 3)); + lua_pop(l, 3); + create(l, context, path, c, d); + } + } + break; + default: + luaL_error(l, "Wrong argument count for Glyph constructor"); + break; + } + + return 1; +} + +//END Wrapper -------------------------------------------------------- + +} //end namespace LuaApi + diff --git a/src/luaapi/imaging.h b/src/luaapi/imaging.h new file mode 100644 index 0000000..df2f53f --- /dev/null +++ b/src/luaapi/imaging.h @@ -0,0 +1,220 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LUAAPI__IMAGING_H +#define LUAAPI__IMAGING_H + +#include +#include "loader/image.h" +#include "luaapi/genericwrapper.h" + +namespace LuaApi { + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RW(x, x, setX, number) + PROPERTY_RW(y, y, setY, number) + PROPERTY_RW(width, width, setWidth, number) + PROPERTY_RW(height, height, setHeight, number) + PROPERTY_RO(left, left, number) + PROPERTY_RO(right, right, number) + PROPERTY_RO(top, top, number) + PROPERTY_RO(bottom, bottom, number) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); + + static int translate(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------ + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RW(x, x, setX, number) + PROPERTY_RW(y, y, setY, number) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); + static int get_length(lua_State* l); +}; + +//END Wrapper -------------------------------------------------------- + + +//BEGIN Wrapper-------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RW_TYPE(r, red, setRed, number, int) + PROPERTY_RW_TYPE(g, green, setGreen, number, int) + PROPERTY_RW_TYPE(b, blue, setBlue, number, int) + PROPERTY_RW_TYPE(a, alpha, setAlpha, number, int) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static QColor get(lua_State* l, int index); + static int constructor(lua_State* l); +}; + +//END Wrapper---------------------------------------------------------- + + +//BEGIN GradientWrapper-------------------------------------------------------- + +template +class GradientWrapper : public GenericWrapperByValue { +public: + static int index_event(lua_State* l); + static int newindex_event(lua_State* l); +}; + +//END GradientWrapper---------------------------------------------------------- + + +//BEGIN Wrapper----------------------------------------------- + +template <> +class Wrapper : public GradientWrapper { +public: + PROPERTY_RW_CLASS(start, start, setStart, QPointF) + PROPERTY_RW_CLASS(finish, finalStop, setFinalStop, QPointF) + + static const char* class_name(); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper------------------------------------------------- + + +//BEGIN Wrapper----------------------------------------------- + +template <> +class Wrapper : public GradientWrapper { +public: + PROPERTY_RW_CLASS(center, center, setCenter, QPointF) + PROPERTY_RW(radius, radius, setRadius, number) + PROPERTY_RW_CLASS(focus, focalPoint, setFocalPoint, QPointF) + + static const char* class_name(); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper------------------------------------------------- + + +//BEGIN Wrapper---------------------------------------------- + +template <> +class Wrapper : public GradientWrapper { +public: + PROPERTY_RW_CLASS(center, center, setCenter, QPointF) + PROPERTY_RW(angle, angle, setAngle, number) + + static const char* class_name(); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper------------------------------------------------ + + +//BEGIN Wrapper-------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + static const char* class_name(); + static void create_index_table(lua_State* l); + static QBrush get(lua_State* l, int index); + static int constructor(lua_State* l); + + static int rotate(lua_State* l); + static int scale(lua_State* l); + static int translate(lua_State* l); +}; + +//END Wrapper---------------------------------------------------------- + +//BEGIN Wrapper -------------------------------------------------------- + +template<> +class Wrapper : public GenericWrapperByValue { +public: + static const char* class_name(); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); + + static int to_string(lua_State* l); +}; + +//END Wrapper ---------------------------------------------------------- + +//BEGIN Wrapper -------------------------------------------------------- + +template<> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RO(width, width, number) + PROPERTY_RO(height, height, number) + PROPERTY_RW(opacity, opacity, setOpacity, number) + + static const char* class_name(); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); + + static int resetMatrix(lua_State* l); + static int rotate(lua_State* l); + static int scale(lua_State* l); + static int translate(lua_State* l); + static int clear(lua_State* l); + static int setPaintOver(lua_State* l); + static int fillRect(lua_State* l); + static int drawLine(lua_State* l); + static int drawImage(lua_State* l); + static int drawSVG(lua_State* l); + static int drawGlyph(lua_State* l); + static int expBlur(lua_State* l); + static int createShadow(lua_State* l); +}; + +//END Wrapper ---------------------------------------------------------- + +//BEGIN Wrapper -------------------------------------------------------- + +template<> +class Wrapper : public GenericWrapperByValue { +public: + static const char* class_name(); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper ---------------------------------------------------------- + +} //end namespace LuaApi + + +#endif //LUAAPI__IMAGING_H diff --git a/src/luaapi/lfunclib.c b/src/luaapi/lfunclib.c new file mode 100644 index 0000000..a5daff6 --- /dev/null +++ b/src/luaapi/lfunclib.c @@ -0,0 +1,571 @@ +/* + Copyright (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This file has been contributed by Rici Lake under the Lua license: + + Copyright (c) 2006 Rici Lake + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include +#include +#include +#include "luaapi/lfunclib.h" + +/* "Constructors" (or collectors, if you prefer). Take an iterator + * and return a value. + */ + +/* foreach just applies the self-function to each iteration tuple + * in turn. The return the result is the last return value + * of the function + * + * func:foreach() ==> + * + * local rv... + * for val... in do + * rv... = func(val...) + * end + * return rv... + * + */ + +static int f_foreach (lua_State *L) { + lua_settop(L, 4); + for (;;) { + int callbase = lua_gettop(L); + lua_pushvalue(L, 2); + lua_pushvalue(L, 3); + lua_pushvalue(L, 4); + lua_call(L, 2, LUA_MULTRET); + if (lua_isnoneornil(L, callbase + 1)) { + lua_settop(L, callbase); + return callbase - 4; + } + lua_pushvalue(L, callbase + 1); + lua_replace(L, 4); /* ctl = newctl */ + lua_pushvalue(L, 1); + if (callbase == 4) { + lua_insert(L, 5); + } + else { + lua_replace(L, 5); + for (; callbase > 5; --callbase) + lua_remove(L, callbase); + } + lua_call(L, lua_gettop(L) - 5, LUA_MULTRET); + } +} + +/* first calls the self-function on each iteration tuple in turn, + * and returns the first true (not non-null) return of the self-function. + + func:first() ==> + for val... in do + local rv... = func(val...) + if (rv...) then return rv... end + end + end + + 1: self_func 2: iter_func 3: base 4: control + 5: copy_self 6: returned control + */ + +static int f_first (lua_State *L) { + for (;;) { + lua_settop(L, 4); + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_pushvalue(L, 3); + lua_pushvalue(L, 4); + lua_call(L, 2, LUA_MULTRET); + if (lua_isnoneornil(L, 6)) return 0; + lua_pushvalue(L, 6); + lua_replace(L, 4); + lua_call(L, lua_gettop(L) - 5, LUA_MULTRET); + if (lua_toboolean(L, 5)) return lua_gettop(L) - 5; + } +} + +/* + func:fold1(init, ) + for val... in do + init = func(init, val...) + end + return init + end + func:fold2(init, ) + for val, rest... in do + init = func(init, rest...) + end + return init + end + + 1: self_func 2: init val 3: iter_func 4: base 5: control + 6: copy self 7: copy init 8: returned control + 6: returned init + */ + +static int f_fold1 (lua_State *L) { + lua_settop(L, 5); + for (;;) { + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_pushvalue(L, 3); + lua_pushvalue(L, 4); + lua_pushvalue(L, 5); + lua_call(L, 2, LUA_MULTRET); + if (lua_isnoneornil(L, 8)) { lua_settop(L, 7); return 1; } + lua_pushvalue(L, 8); + lua_replace(L, 5); + lua_call(L, lua_gettop(L) - 6, 1); + lua_replace(L, 2); + } +} + + +static int f_fold2 (lua_State *L) { + lua_settop(L, 5); + for (;;) { + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_pushvalue(L, 3); + lua_pushvalue(L, 4); + lua_pushvalue(L, 5); + lua_call(L, 2, LUA_MULTRET); + if (lua_isnoneornil(L, 8)) { lua_settop(L, 7); return 1; } + lua_pushvalue(L, 8); + lua_replace(L, 5); + lua_remove(L, 8); + lua_call(L, lua_gettop(L) - 6, 1); + lua_replace(L, 2); + } +} + + +/* func:reduce{1,2}(default, ) is like + * func:fold{1,2}(init, ) except that the initial + * value is taken from the first iteration of the loop. + * If the loop fails to produce even one value, the default + * argument is returned. Otherwise, default is not used. + */ + +static int f_reduce1 (lua_State *L) { + lua_settop(L, 5); + lua_pushvalue(L, 3); + lua_pushvalue(L, 4); + lua_pushvalue(L, 5); + lua_call(L, 2, 1); + if (lua_isnil(L, -1)) { lua_settop(L, 2); return 1; } + lua_pushvalue(L, -1); + lua_replace(L, 2); + lua_replace(L, 5); + return f_fold1(L); +} + +static int f_reduce2 (lua_State *L) { + lua_settop(L, 5); + lua_pushvalue(L, 3); + lua_pushvalue(L, 4); + lua_pushvalue(L, 5); + lua_call(L, 2, 2); + if (lua_isnil(L, -2)) { lua_settop(L, 2); return 1; } + lua_replace(L, 2); + lua_replace(L, 5); + return f_fold2(L); +} + +/* These ones could easily be implemented in terms of fold, but + * the direct implementation uses fewer temporary objects. + * Unlike the other stuff in this module, these are not + * function methods; they're just functions in the collect + * library. + */ + +/* collect + * .keys => an array of the keys (or control variable, anyway) + * .vals => an array of the second iterator return + * .pairs => an table of (first) = (second) + * .keyset => a set of (first) = true + * .valset => a set of (second) = true + */ + +static int c_advance_aux (lua_State *L, int iter, int nr, int cb) { + lua_settop(L, cb - 1); + lua_pushvalue(L, iter); + lua_pushvalue(L, iter+1); + lua_pushvalue(L, iter+2); + lua_call(L, 2, nr); + if (lua_isnoneornil(L, cb)) return 0; + lua_pushvalue(L, cb); + lua_replace(L, iter+2); + return 1; +} + +static int c_keys (lua_State *L) { + int index = 0; + lua_newtable(L); + lua_insert(L, 1); + while (c_advance_aux(L, 2, 1, 5)) + lua_rawseti(L, 1, ++index); + lua_settop(L, 1); + return 1; +} + +static int c_vals (lua_State *L) { + int index = 0; + lua_newtable(L); + lua_insert(L, 1); + while (c_advance_aux(L, 2, 2, 5)) + lua_rawseti(L, 1, ++index); + lua_settop(L, 1); + return 1; +} + +static int c_pairs (lua_State *L) { + lua_newtable(L); + lua_insert(L, 1); + while (c_advance_aux(L, 2, 2, 5)) + lua_rawset(L, 1); + lua_settop(L, 1); + return 1; +} + +static int c_keyset (lua_State *L) { + lua_newtable(L); + lua_insert(L, 1); + while (c_advance_aux(L, 2, 1, 5)) { + lua_pushboolean(L, 1); + lua_rawset(L, 1); + } + lua_settop(L, 1); + return 1; +} + +static int c_valset (lua_State *L) { + lua_newtable(L); + lua_insert(L, 1); + while (c_advance_aux(L, 2, 2, 5)) { + lua_pushboolean(L, 1); + lua_rawset(L, 1); + } + lua_settop(L, 1); + return 1; +} + + +/* func:dropping(i) -> function + * The returned function drops its ith argument (default 1) and + * returns the application of func to the remaining arguments. + * This is useful for removing keys from iterators in some of + * these iterator methods + */ + +static int f_dropping_aux (lua_State *L) { + int i = lua_tointeger(L, lua_upvalueindex(2)); + int top = lua_gettop(L); + lua_pushvalue(L, lua_upvalueindex(1)); + lua_insert(L, 1); + if (i <= top) { lua_remove(L, i + 1); --top; } + lua_call(L, top, LUA_MULTRET); + return lua_gettop(L); +} + +static int f_dropping (lua_State *L) { + luaL_checkany(L, 1); + lua_settop(L, 2); + if (lua_isnil(L, 2)) { + lua_pushinteger(L, 1); + lua_replace(L, 2); + } + else { + luaL_checknumber(L, 2); + } + lua_pushcclosure(L, f_dropping_aux, 2); + return 1; +} + +/* Yuk. */ +static int aux_nups (lua_State *L) { + lua_Debug ar; + lua_getstack(L, 0, &ar); + lua_getinfo(L, "u", &ar); + return ar.nups; +} + + +static int aux_insertupvalues (lua_State *L, int where) { + int i; + int nups = aux_nups(L); + luaL_checkstack(L, nups, "insert upvalues"); + if (where > 0) { + for (i = 1; i <= nups; ++i, ++where) { + lua_pushvalue(L, lua_upvalueindex(i)); + lua_insert(L, where); + } + } + else if (where < 0) { + --where; + for (i = 1; i <= nups; ++i) { + lua_pushvalue(L, lua_upvalueindex(i)); + lua_insert(L, where); + } + } + else { + for (i = 1; i <= nups; ++i) + lua_pushvalue(L, lua_upvalueindex(i)); + } + return nups; +} + +/* func:partial(...) -> function + * The returned function is the original function with the given + * arguments "filled in" from the left. + */ + +static int f_partial_aux (lua_State *L) { + aux_insertupvalues(L, 1); + lua_call(L, lua_gettop(L) - 1, LUA_MULTRET); + return lua_gettop(L); +} + +static int f_partial (lua_State *L) { + int top = lua_gettop(L); + if (top >= LUAI_MAXUPVALUES) { + luaL_error(L, "too many arguments, maximum is %d", LUAI_MAXUPVALUES); + } + if (lua_tocfunction(L, 1) == f_partial_aux) { + int i = 1; + /* We should find out how many there are, really. */ + luaL_checkstack(L, LUAI_MAXUPVALUES, "partial combination"); + for (; lua_getupvalue(L, 1, i); ++i) { + lua_insert(L, i + 1); + } + top += i - 2; + } + lua_pushcclosure(L, f_partial_aux, top); + return 1; +} + +/* Building block */ +#if 0 +static int f_reorder_aux (lua_State *L) { + const char *format = lua_tostring(L, lua_upvalueindex(1)); + int nups = lua_tointeger(L, lua_upvalueindex(2)); + int top = lua_gettop(L); + lua_pushvalue(L, lua_upvalueindex(3)); /* The function */ + for (;;) { + switch (*format++) { + case '%': { + int base = *format++ - '0'; + int ch; + for (ch = *format; '0' <= ch && ch <= '9'; ch = *++format) + base = base * 10 + ch - '0'; + if (ch == '.') { + while (*++format == '.'); + if (base <= nups) { + luaL_checkstack(L, nups - base, ""); + for (; base <= nups; ++base) + lua_pushvalue(L, lua_upvalueindex(base + 3)); + } + } + else if (base <= nups) + lua_pushvalue(L, lua_upvalueindex(base)); + else + lua_pushnil(L); + break; + } + case '$': { + /* duplicate above, but with top */ + } + case '(': { + int func = lua_gettop(L); + /* recursive call */ + /* get count or ... */ + lua_call(L, lua_gettop(L) - func, nups); + break; + } + case ')': { + return; + } + case '\0': { + return lua_gettop(L) - top; + } + } + } +} +#endif + + +/* Functions which take iterators and return iterators */ + +/* for vals... in f:map() do end + * ==> + * for temp... in do + * local vals... = f(temp...) + * + * end + */ + +static int f_map_aux (lua_State *L) { + lua_settop(L, 0); + lua_pushvalue(L, lua_upvalueindex(1)); + lua_pushvalue(L, lua_upvalueindex(2)); + lua_pushvalue(L, lua_upvalueindex(3)); + lua_pushvalue(L, lua_upvalueindex(4)); + lua_call(L, 2, LUA_MULTRET); + if (lua_isnoneornil(L, 2)) return 0; + lua_pushvalue(L, 2); + lua_replace(L, lua_upvalueindex(4)); + lua_call(L, lua_gettop(L) - 1, LUA_MULTRET); + return lua_gettop(L); +} + +static int f_map (lua_State *L) { + lua_settop(L, 4); + lua_pushcclosure(L, f_map_aux, 4); + return 1; +} + +/* Possibly more useful. + * for k, vals... in f:mapvals() do end + * ==> + * for k, temp... in do + * local vals... = f(temp...) + * + * end + */ + +static int f_mapvals_aux (lua_State *L) { + lua_pushvalue(L, lua_upvalueindex(2)); + lua_insert(L, 1); + lua_call(L, lua_gettop(L) - 1, LUA_MULTRET); + if (lua_isnoneornil(L, 1)) return 0; + lua_pushvalue(L, lua_upvalueindex(1)); + lua_insert(L, 2); + lua_call(L, lua_gettop(L) - 2, LUA_MULTRET); + return lua_gettop(L); +} + +/* Factor this out */ +static int f_mapvals (lua_State *L) { + lua_settop(L, 4); + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_pushcclosure(L, f_mapvals_aux, 2); + lua_replace(L, 2); + return 3; +} + + +/* for vals... in f:filter() do end + * ==> + * for vals... in do + * if f(vals...) then + * + * end + * end + */ + +static int f_filter_aux (lua_State *L) { + int i, top; + do { + lua_settop(L, 2); + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_pushvalue(L, lua_upvalueindex(2)); + lua_replace(L, 2); /* Obj IterFunc Obj Ctl */ + lua_call(L, 2, LUA_MULTRET); + top = lua_gettop(L); + if (top == 1 || lua_isnil(L, 2)) return 0; + luaL_checkstack(L, top, "filtered iterator returned too many results"); + lua_pushvalue(L, lua_upvalueindex(1)); + for (i = 2; i <= top; ++i) lua_pushvalue(L, i); + lua_call(L, top - 1, 1); + } while (!lua_toboolean(L, -1)); + lua_pop(L, 1); + return top - 1; +} + +static int f_filter (lua_State *L) { + lua_settop(L, 4); + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_pushcclosure(L, f_filter_aux, 2); + lua_replace(L, 2); + return 3; +} + +/* TODO: + * Things to add: + * pcall, coroutine.wrap -> both are appropriate function methods + * possibly some introspection stuff + * something like the new python with modifier: i.e. safely do a call + * with a prelude and postlude. + */ + +static const luaL_reg func_funcs[] = { + { "first", f_first }, + { "foreach", f_foreach }, + { "fold1", f_fold1 }, + { "fold2", f_fold2 }, + { "reduce1", f_reduce1 }, + { "reduce2", f_reduce2 }, + { "dropping", f_dropping }, + { "partial", f_partial }, + { "map", f_map }, + { "mapvals", f_mapvals }, + { "filter", f_filter }, + { NULL, NULL } +}; + +static const luaL_reg collect_funcs[] = { + { "keys", c_keys }, + { "vals", c_vals }, + { "pairs", c_pairs }, + { "keyset", c_keyset }, + { "valset", c_valset }, + { NULL, NULL } +}; + +int luaopen_func (lua_State *L) { + luaL_register(L, LUA_FUNCLIBNAME, func_funcs); + lua_pushcfunction(L, luaopen_func); /* A function */ + if (!lua_getmetatable(L, -1)) { + lua_createtable(L, 0, 0); + lua_pushvalue(L, -3); + lua_setfield(L, -2, "__index"); + lua_setmetatable(L, -2); + lua_pop(L, 1); + } + else lua_pop(L, 2); + return 1; +} + +int luaopen_collect (lua_State *L) { + luaL_register(L, LUA_COLLECTLIBNAME, collect_funcs); + return 1; +} + diff --git a/src/luaapi/lfunclib.h b/src/luaapi/lfunclib.h new file mode 100644 index 0000000..9e2aaa8 --- /dev/null +++ b/src/luaapi/lfunclib.h @@ -0,0 +1,20 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LFUNCLIB_H +#define LFUNCLIB_H + +#define LUA_FUNCLIBNAME "func" +#define LUA_COLLECTLIBNAME "collect" + +int luaopen_func (lua_State *L); +int luaopen_collect (lua_State *L); + +#endif /*LFUNCLIB_H*/ diff --git a/src/luaapi/loader.cpp b/src/luaapi/loader.cpp new file mode 100644 index 0000000..6b05e1c --- /dev/null +++ b/src/luaapi/loader.cpp @@ -0,0 +1,364 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + + +#include +#include +#include +#include + +#include +#include +#include + +#include "common.h" +#include "loader/image.h" +#include "luaapi/imaging.h" +#include "luaapi/loader.h" +#include "luaapi/options.h" +#include "themeinfo.h" + +namespace LuaApi { + +const luaL_Reg Loader::lualibs[] = { + {"", luaopen_base}, + {LUA_LOADLIBNAME, luaopen_package}, + {LUA_TABLIBNAME, luaopen_table}, + {LUA_IOLIBNAME, luaopen_io}, + {LUA_OSLIBNAME, luaopen_os}, + {LUA_STRLIBNAME, luaopen_string}, + {LUA_MATHLIBNAME, luaopen_math}, + {LUA_DBLIBNAME, luaopen_debug}, + {LUA_FUNCLIBNAME, luaopen_func}, + {LUA_COLLECTLIBNAME, luaopen_collect}, + {NULL, NULL} +}; + +Loader::Loader() +: m_error(false) { + initialize(0); + + lua_newtable(m_state); + lua_setglobal(m_state, "theme"); +} + +Loader::Loader(::Loader::Context *ctx, const ThemeInfo& theme) +: m_error(false) { + initialize(ctx); + addMetaData(theme); +} + +void Loader::addMetaData(const ThemeInfo& theme) { + lua_State* const l = m_state; + + lua_newtable(l); + +#define ADD_FIELD_AUX(FIELD_NAME, FIELD) \ + lua_pushstring(l, FIELD_NAME); \ + lua_pushstring(l, qPrintable(theme.FIELD)); \ + lua_settable(l, -3); +#define ADD_FIELD(FIELD) ADD_FIELD_AUX(#FIELD, FIELD) + + ADD_FIELD(name); + ADD_FIELD(description); + ADD_FIELD_AUX("desktop_file", desktopFile); + ADD_FIELD(file_name); + lua_pushstring(l, "variants"); + lua_newtable(l); + for (int i = 0; i < theme.variants.size(); i++) { + lua_pushnumber(l, i); + lua_pushstring(l, qPrintable(theme.variants[i])); + lua_settable(l, -3); + } + lua_settable(l, -3); + +#undef ADD_FIELD_AUX +#undef ADD_FIELD + + lua_setglobal(l, "theme"); +} + +void Loader::initialize(::Loader::Context *ctx) { + lua_State* l = lua_open(); + m_state = l; + + for (const luaL_Reg *lib = lualibs; lib->func; lib++) { + lua_pushcfunction(l, lib->func); + lua_pushstring(l, lib->name); + lua_call(l, 1, 0); + } + + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper< ::Loader::Image>::register_class(l); + Wrapper< ::Loader::Glyph>::register_class(l); + + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + Wrapper::register_class(l); + + lua_pushlightuserdata(l, ctx); + lua_setfield(l, LUA_REGISTRYINDEX, LOADING_CONTEXT); + + lua_pushlightuserdata(l, this); + lua_setfield(l, LUA_REGISTRYINDEX, API_LOADER); + + lua_pushlightuserdata(m_state, &m_curr_dir); + lua_setfield(m_state, LUA_REGISTRYINDEX, CURRENT_DIRECTORY); + + lua_pushcfunction(l, import_func); + lua_setglobal(l, "import"); +} + +Loader::~Loader() { + lua_close(m_state); +} + +bool Loader::runFile(const QString& file, bool setdir) { + + QString path = QDir::cleanPath( + QDir::isAbsolutePath(file) ? file : m_curr_dir.filePath(file) ); + if (!QFile::exists(path)) { + // find it in the scripts dir + path = KStandardDirs::locate("appdata", "scripts/" + file); + } + if (!QFile::exists(path)) { + // give up + return false; + } + + if(setdir) { + QFileInfo f_info( path ); + m_curr_dir = f_info.dir(); + } + + bool retv; + if(luaL_loadfile(m_state, path.toAscii().constData()) == 0) { + if(lua_pcall(m_state, 0, LUA_MULTRET, 0) != 0) + retv = false; + else + retv = true; + } + else + retv = false; + + if(!retv) { + m_error = true; + m_error_string = QString(lua_tostring(m_state, -1)); + lua_pop(m_state, 1); + } + + return retv; +} + +template +struct Loader::create_value_data { + const QString& key; + int size; + const LuaValueMap* args; + bool allow_nil; + T out; + create_value_data(const QString& _key, int _size, const LuaValueMap* _args, bool _allow_nil) + : key(_key) + , size(_size) + , args(_args) + , allow_nil(_allow_nil) { + } +}; + +template +T Loader::getValue(const QString& key, int size, const LuaValueMap* args, bool allow_nil) { + StackCheck s(m_state); + + create_value_data data(key, size, args, allow_nil); + if(lua_cpcall(m_state, create_value_func, &data) != 0) { + m_error = true; + m_error_string = QString(lua_tostring(m_state, -1))+"\nsearched key was: "+key; + lua_pop(m_state, 1); + return T(); + } + return data.out; +} + +template ::Loader::Glyph Loader::getValue< ::Loader::Glyph>(const QString&, int, const LuaValueMap*, bool); +template OptList Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template QString Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template QStringList Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template QImage Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template ImageOrMap Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template double Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template QPointF Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template QRectF Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template QColor Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template QBrush Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template QFont Loader::getValue(const QString&, int, const LuaValueMap*, bool); +template LuaValueMap Loader::getValue(const QString&, int, const LuaValueMap*, bool); + +template +void Loader::retrieve(create_value_data* d, lua_State *l, int pos) { + d->out = *Wrapper::retrieve(l, pos, AssertOk); +} + +template<> +void Loader::retrieve(create_value_data* d, lua_State *l, int pos) { + d->out = lua_tonumber(l, pos); +} + +template<> +void Loader::retrieve(create_value_data* d, lua_State *l, int pos) { + d->out = lua_tostring(l, pos); +} + +template<> +void Loader::retrieve(create_value_data* d, lua_State *l, int pos) { + d->out = Wrapper::get(l, pos); +} + +template<> +void Loader::retrieve(create_value_data* d, lua_State *l, int pos) { + d->out = Wrapper::get(l, pos); +} + +template<> +void Loader::retrieve(create_value_data* d, lua_State *l, int pos) { + if(lua_isstring(l, pos)) + d->out << QString(lua_tostring(l, -1)); + else if(lua_istable(l, pos)) { + lua_pushnil(l); + while (lua_next(l, pos<0 ? pos-1 : pos) != 0) { + d->out << QString(lua_tostring(l, -1)); + lua_pop(l, 1); + } + } + else + luaL_error(l, "Can't convert to a QStringList (not string nor table)"); +} + +template<> +void Loader::retrieve(create_value_data* d, lua_State *l, int pos) { + if(lua_istable(l, pos)) { + lua_pushnil(l); + while (lua_next(l, pos<0 ? pos-1 : pos) != 0) { + QString key = lua_tostring(l, -2); + if(QPointF *res = Wrapper::retrieve(l, -1, Check)) + d->out[key] = *res; + else if(QRectF *res = Wrapper::retrieve(l, -1, Check)) + d->out[key] = *res; + else + d->out[key] = lua_tonumber(l, -1); + lua_pop(l, 1); + } + } + else + luaL_error(l, "Can't convert to a LuaValueMap (not table)"); +} + +template<> +void Loader::retrieve(create_value_data* d, lua_State *l, int pos) { + ::Loader::Image *retv = Wrapper< ::Loader::Image>::retrieve(l, pos, AssertOk); + d->out = retv->image(); +} + +template<> +void Loader::retrieve(create_value_data* d, lua_State *l, int pos) { + if(::Loader::Image *img = Wrapper< ::Loader::Image>::retrieve(l, pos)) + d->out = img->image(); + else if(lua_istable(l, pos)) { + + //collect the images in this way to avoid leaking memory if Wrapper::retrieve raises an exception + d->out = ImageMap(); + ImageMap& out = boost::get(d->out); + + lua_pushnil(l); + while (lua_next(l, pos<0 ? pos-1 : pos) != 0) { + QRectF *rect = Wrapper::retrieve(l, -2, AssertOk); + ::Loader::Image *img = Wrapper< ::Loader::Image>::retrieve(l, -1, AssertOk); + + QRect r = rect->toRect(); + out[rect->toRect()] = img->image(); + + lua_pop(l, 1); + } + } + else + luaL_error(l, "Can't convert to a ImageOrMap (not image nor table)"); +} + +template +int Loader::create_value_func(lua_State *l) { + StackCheck s(l, -1); + create_value_data* data = reinterpret_cast*>(lua_touserdata(l, -1)); + lua_pop(l, 1); + + lua_getglobal(l, "theme"); + lua_getfield(l, -1, data->key.toAscii().constData()); + lua_remove(l, -2); + + // If it is a function, call it + if(lua_isfunction(l, -1)) { + int nparams = 0; + if(data->size) { + lua_pushnumber(l, data->size); + nparams++; + } + if(data->args) { + lua_pushvaluemap(l, data->args); + nparams++; + } + lua_call(l, nparams, 1); + } + + // retrieve value + if (!lua_isnil(l, -1)) { + retrieve(data, l, -1); + } + else if (!data->allow_nil) { + luaL_error(l, "No such entry: %s", data->key.toAscii().constData()); + } + + lua_pop(l, 1); + + return 0; +} + + +int Loader::import_func(lua_State *l) { + lua_getfield(l, LUA_REGISTRYINDEX, API_LOADER); + Loader* api = reinterpret_cast(lua_touserdata(l, -1)); + lua_pop(l, 1); + + int n = lua_gettop(l); + if (n != 1) + luaL_error(l, "Wrong argument count for \"import\""); + QString file(lua_tostring(l, 1)); + lua_pop(l, n); + + if (!api->runFile(file, false)) { + luaL_error(l, "Error importing \"%s\":\n%s", file.toAscii().constData(), + api->errorString().toAscii().constData() ); + } + + return 0; +} + +} // namespace LuaLoader diff --git a/src/luaapi/loader.h b/src/luaapi/loader.h new file mode 100644 index 0000000..270526d --- /dev/null +++ b/src/luaapi/loader.h @@ -0,0 +1,86 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LUAAPI__LOADER_H +#define LUAAPI__LOADER_H + +#include +#include +#include +#include +#include +#include "loader/image.h" +#include "luaapi/luavalue.h" +#include "option.h" + +class lua_State; +class luaL_Reg; +class ThemeInfo; + +namespace Loader { + class Context; +} + +namespace LuaApi { + +class RectLess { +public: + bool operator()(const QRect& a, const QRect& b) { + return a.x() != b.x() ? a.x() < b.x() : + a.y() != b.y() ? a.y() < b.y() : + a.width() != b.width() ? a.width() < b.width() : + a.height() < b.height(); + } +}; + +typedef std::map ImageMap; +typedef boost::variant ImageOrMap; + +class Loader { + bool m_error; + QString m_error_string; + + lua_State* m_state; + QDir m_curr_dir; + + static const luaL_Reg lualibs[]; + + template struct create_value_data; + template static void retrieve(create_value_data*, lua_State *l, int pos); + template static int create_value_func(lua_State *l); + static int import_func(lua_State* l); + + void initialize(::Loader::Context *ctx); + + /** + * Add the theme table to the environment, with all theme metadata. + */ + void addMetaData(const ThemeInfo& theme); +public: + Loader(::Loader::Context *ctx, const ThemeInfo& theme); + Loader(); + + ~Loader(); + + lua_State* state() const { return m_state; } + bool runFile(const QString& file, bool set_dir = true); + + template T getValue(const QString& key, int size = 0, + const LuaValueMap* args = NULL, bool allow_nil = false); + + bool error() { return m_error; } + void clearError() { m_error = false; } + QString errorString() { return m_error_string; } +}; + +} //end namespace LuaApi + + +#endif // LUAAPI__LOADERAPI_H diff --git a/src/luaapi/luahl.cpp b/src/luaapi/luahl.cpp new file mode 100644 index 0000000..24fc536 --- /dev/null +++ b/src/luaapi/luahl.cpp @@ -0,0 +1,366 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "luahl.h" +#include "genericwrapper.h" +#include +#include +#include "common.h" +#include "hline.h" +#include "imaging.h" + +#define ARG_CHECK(exp, func) \ + if (n != (exp)) luaL_error(l, "Wrong argument count for %s::%s", class_name() ,#func) + +namespace LuaApi { + +template <> +class Wrapper : public GenericWrapper { +public: + static const char* class_name() { + return "HLine"; + } + + PROPERTY_RO(length, length, number); + + static void create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, length); + set_method(l, &mid, "mid"); + set_method(l, &set_bold, "set_bold"); + set_method(l, &set_italic, "set_italic"); + set_method(l, &set_color, "set_color"); + set_method(l, &clone, "clone"); + set_method(l, &extract, "extract"); + set_method(l, &append, "append"); + set_method(l, &dump, "dump"); + } + + static int constructor(lua_State* l) { + const int n = lua_gettop(l); + ARG_CHECK(1, HLine); + const char* str = lua_tostring(l, 1); + lua_pop(l, n); + + HLine* hline = new HLine(str, QTextCharFormat()); + allocate(l, hline); + return 1; + } + + /** + * Release the object at @a index from Lua's ownership. + */ + static void release(lua_State* l, int index) { + StackCheck check(l); + + lua_getmetatable(l, index); + lua_pushstring(l, "__gc"); + lua_pushnil(l); + lua_settable(l, -3); + lua_pop(l, 1); + } + + static int clone(lua_State* l) { + const int n = lua_gettop(l); + ARG_CHECK(1, clone); + + HLine* self = retrieve(l, 1, AssertOk); + lua_pop(l, n); + + allocate(l, new HLine(*self)); + return 1; + } + + static int extract(lua_State* l) { + const int n = lua_gettop(l); + ARG_CHECK(3, extract); + + HLine* self = retrieve(l, 1, AssertOk); + int begin = static_cast(lua_tonumber(l, 2)); + int end = static_cast(lua_tonumber(l, 3)); + lua_pop(l, n); + + allocate(l, self->extract(begin, end)); + return 1; + } + + static int append(lua_State* l) { + const int n = lua_gettop(l); + ARG_CHECK(4, append); + + HLine* self = retrieve(l, 1, AssertOk); + HLine* other = retrieve(l, 2, AssertOk); + int begin = static_cast(lua_tonumber(l, 3)); + int end = static_cast(lua_tonumber(l, 4)); + lua_pop(l, n); + + allocate(l, self->append(*other, begin, end)); + return 1; + } + + static int mid(lua_State* l) { + const int n = lua_gettop(l); + ARG_CHECK(3, mid); + + HLine* self = retrieve(l, 1, AssertOk); + int from = static_cast(lua_tonumber(l, 2)); + int to = static_cast(lua_tonumber(l, 3)); + lua_pop(l, n); + + lua_pushstring(l, qPrintable(self->mid(from, to))); + return 1; + } + + static int set_bold(lua_State* l) { + const int n = lua_gettop(l); + ARG_CHECK(4, set_bold); + + HLine* self = retrieve(l, 1, AssertOk); + int from = static_cast(lua_tonumber(l, 2)); + int to = static_cast(lua_tonumber(l, 3)); + bool value = lua_toboolean(l, 4); + lua_pop(l, n); + + self->setBold(from, to, value); + return 0; + } + + static int set_italic(lua_State* l) { + const int n = lua_gettop(l); + ARG_CHECK(4, set_italic); + + HLine* self = retrieve(l, 1, AssertOk); + int from = static_cast(lua_tonumber(l, 2)); + int to = static_cast(lua_tonumber(l, 3)); + bool value = lua_toboolean(l, 4); + lua_pop(l, n); + + self->setItalic(from, to, value); + return 0; + } + + static int set_color(lua_State* l) { + const int n = lua_gettop(l); + ARG_CHECK(4, set_bold); + + HLine* self = retrieve(l, 1, AssertOk); + int from = static_cast(lua_tonumber(l, 2)); + int to = static_cast(lua_tonumber(l, 3)); + QColor color = Wrapper::get(l, 4); + lua_pop(l, n); + + self->setColor(from, to, color); + return 0; + } + + static int dump(lua_State* l) { + const int n = lua_gettop(l); + ARG_CHECK(1, dump); + + HLine* self = retrieve(l, 1, AssertOk); + lua_pop(l, n); + + self->dump(); + return 0; + } + +}; + + + +static const luaL_Reg lualibs[] = { + {"", luaopen_base}, + {LUA_LOADLIBNAME, luaopen_package}, + {LUA_TABLIBNAME, luaopen_table}, + {LUA_IOLIBNAME, luaopen_io}, + {LUA_OSLIBNAME, luaopen_os}, + {LUA_STRLIBNAME, luaopen_string}, + {LUA_MATHLIBNAME, luaopen_math}, + {LUA_DBLIBNAME, luaopen_debug}, + {NULL, NULL} +}; + +LUALIB_API void luaL_openlibs (lua_State*) { } + +Api::Api() { + lua_State* l = lua_open(); + m_state = l; + + for (const luaL_Reg *lib = lualibs; lib->func; lib++) { + lua_pushcfunction(l, lib->func); + lua_pushstring(l, lib->name); + lua_call(l, 1, 0); + } + + Wrapper::register_class(l); + Wrapper::register_class(l); +} + +Api::~Api() { + lua_close(m_state); +} + +void Api::runFile(const char* file) { + //luaL_dofile(m_state, file); + if (QFile(file).exists()) { + if(luaL_loadfile(m_state, file) == 0) + pcall(0, LUA_MULTRET); + else { + kDebug() << "LOADFILE FOR " << file << " FAILED"; + kDebug() << lua_tostring(m_state, -1); + } + } + else + kDebug() << "FILE " << file << " DOES NOT EXIST"; +} + +void Api::pcall(int nArgs, int nResults) { + if (lua_pcall(m_state, nArgs, nResults, 0) != 0) { + kDebug() << "RUNTIME ERROR: " << lua_tostring(m_state, -1); + } +} + +#if 0 +int Api::create_line(lua_State* l) { + const char* line = lua_tostring(l, -1); + lua_pop(l, 1); + lua_getglobal(l, "Text"); + Wrapper::allocate(l, + new HLine(line, QTextCharFormat())); + if (lua_pcall(l, 1, 1, 0) != 0) + kDebug() << "ERROR INSIDE create_line"; + return 1; +} + +void Api::loadTest() { + + lua_pushcfunction(m_state, &create_line); + lua_setglobal(m_state, "create_line"); +} +#endif + +HLine* Api::highlight(const QString& text) { + // iterate through patterns + StackCheck check(m_state); + lua_getglobal(m_state, "__patterns__"); + if (lua_istable(m_state, -1)) { + lua_pushnil(m_state); + while (lua_next(m_state, -2) != 0) { + int i = static_cast(lua_tonumber(m_state, -2)); + lua_pushstring(m_state, "pattern"); + lua_gettable(m_state, -2); + QString pattern(lua_tostring(m_state, -1)); + QRegExp re(pattern.replace("%", "\\")); + lua_pop(m_state, 2); + + std::pair res = runEvent(text, i, re); + if (res.first) { + lua_pop(m_state, 2); + return res.second; + } + + } + } + + lua_pop(m_state, 1); + return new HLine(text, QTextCharFormat()); +} + +void Api::pushpair(int x, int y) { + lua_newtable(m_state); + lua_pushstring(m_state, "from"); + lua_pushnumber(m_state, x); + lua_settable(m_state, -3); + lua_pushstring(m_state, "to"); + lua_pushnumber(m_state, y); + lua_settable(m_state, -3); +} + +std::pair Api::runEvent(const QString& text, int eventIndex, QRegExp& pattern) { + StackCheck check(m_state); + + // match regexp against text + int index = pattern.indexIn(text); + if (index == -1) return std::pair(false, 0); + + lua_getglobal(m_state, "__run_event__"); + + if (!lua_isfunction(m_state, -1)) { + kDebug() << "** ERROR: __run_event__ is corrupted (type = " << + lua_typename(m_state, lua_type(m_state, -1)) << ") **"; + lua_pop(m_state, 1); + return std::pair(false, 0); + } + + // event + lua_getglobal(m_state, "__patterns__"); + if (!lua_istable(m_state, -1)) { + kDebug() << "** ERROR: __patterns__ is corrupted **"; + lua_pop(m_state, 2); + return std::pair(false, 0); + } + lua_pushnumber(m_state, eventIndex); + lua_gettable(m_state, -2); + lua_remove(m_state, -2); + + // str + lua_pushstring(m_state, qPrintable(text)); + + // match + pushpair(index, index + pattern.matchedLength()); + + // ref + lua_newtable(m_state); + const int n = pattern.numCaptures(); + for (int i = 1; i <= n; i++) { + int pos = pattern.pos(i); + lua_pushnumber(m_state, i); + pushpair(pos, pos + pattern.cap(i).length()); + lua_settable(m_state, -3); + } + + // state + lua_newtable(m_state); + // TODO: fill state + + pcall(5, 1); + + if (lua_isnil(m_state, -1)) { + lua_pop(m_state, 1); + return std::pair(true, 0); + } + + { + lua_pushstring(m_state, "from"); + lua_gettable(m_state, -2); + int from = static_cast(lua_tonumber(m_state, -1)); + lua_pop(m_state, 1); + + lua_pushstring(m_state, "to"); + lua_gettable(m_state, -2); + int to = static_cast(lua_tonumber(m_state, -1)); + lua_pop(m_state, 1); + + lua_pushstring(m_state, "line"); + lua_gettable(m_state, -2); + HLine* res = Wrapper::retrieve(m_state, -1, AssertOk); + + if (from == 0 && to == 0) + Wrapper::release(m_state, -1); + else + res = res->extract(from, to); + + lua_pop(m_state, 2); + + return std::make_pair(true, res); + } +} + +} // namespace LuaApi + diff --git a/src/luaapi/luahl.h b/src/luaapi/luahl.h new file mode 100644 index 0000000..119a0ab --- /dev/null +++ b/src/luaapi/luahl.h @@ -0,0 +1,42 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LUAHL_H +#define LUAHL_H + +#include +#include + +class lua_State; +class HLine; + +namespace LuaApi { + +class Api { + lua_State* m_state; + + void pcall(int nArgs, int nResults); + void pushpair(int x, int y); + std::pair runEvent(const QString& text, int eventIndex, QRegExp& pattern); +public: + Api(); + ~Api(); + + lua_State* state() const { return m_state; } + void runFile(const char* file); + + HLine* highlight(const QString& text); + +}; + +} // namespace LuaHl + + +#endif // LUAHL_H diff --git a/src/luaapi/luavalue.cpp b/src/luaapi/luavalue.cpp new file mode 100644 index 0000000..77f6bb4 --- /dev/null +++ b/src/luaapi/luavalue.cpp @@ -0,0 +1,37 @@ +/* + Copyright (c) 2006-2008 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "luavalue.h" +#include +#include "imaging.h" + +namespace LuaApi { + +void lua_pushvalue(lua_State* l, const LuaValue& value) { + if(const double* v = boost::get(&value)) + lua_pushnumber(l, *v); + else if(const QPointF* v = boost::get(&value)) + Wrapper::create(l, *v); + else if(const QRectF* v = boost::get(&value)) + Wrapper::create(l, *v); + else + kError() << "Unknown variant type!"; +} + +void lua_pushvaluemap(lua_State* l, const LuaValueMap* valuemap) { + lua_newtable(l); // metatable + + for(LuaValueMap::const_iterator it = valuemap->begin(); it != valuemap->end(); ++it) { + lua_pushvalue(l, it.value()); + lua_setfield(l, -2, it.key().toAscii().constData()); + } +} + +} //end namespace LuaApi diff --git a/src/luaapi/luavalue.h b/src/luaapi/luavalue.h new file mode 100644 index 0000000..0390f75 --- /dev/null +++ b/src/luaapi/luavalue.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LUAAPI__LUAVALUE_H +#define LUAAPI__LUAVALUE_H + +#include +#include +#include + +class QPointF; +class QRectF; +class lua_State; + +/** + * @brief Namespace holding the Lua bindings used for theming. + */ +namespace LuaApi { + +typedef boost::variant LuaValue; +typedef QMap LuaValueMap; +void lua_pushvalue(lua_State* l, const LuaValue& value); +void lua_pushvaluemap(lua_State* l, const LuaValueMap* valuemap); + +} //end namespace LuaApi + +#endif //LUAAPI__LUAVALUE_H diff --git a/src/luaapi/options.cpp b/src/luaapi/options.cpp new file mode 100644 index 0000000..459412b --- /dev/null +++ b/src/luaapi/options.cpp @@ -0,0 +1,536 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "options.h" +#include +#include "luaapi/loader.h" + +namespace LuaApi { + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "OptList"; +} + +int Wrapper::to_string(lua_State* l) { + OptList r = *retrieve(l, 1, AssertOk); + QString s; + for(int i=0;iname(); + s = "list["+s+"]"; + lua_pop(l, 1); + lua_pushstring(l, s.toAscii().constData()); + return 1; +} + +int Wrapper::newindex_event(lua_State* l) { + lua_pop(l,3); + luaL_error(l, "OptList cannot be modified after being constructed!!!"); + return 0; +} + +int Wrapper::index_event(lua_State* l) { + const char *k = lua_tostring(l, -1); + OptList& list = *retrieve(l, -2); + lua_pop(l,2); + for(int i=0; iname() == k) { + if(BoolOptPtr p = boost::dynamic_pointer_cast(list[i])) + GenericWrapperByValue::create(l, p); + else if(IntOptPtr p = boost::dynamic_pointer_cast(list[i])) + GenericWrapperByValue::create(l, p); + else if(StringOptPtr p = boost::dynamic_pointer_cast(list[i])) + GenericWrapperByValue::create(l, p); + else if(UrlOptPtr p = boost::dynamic_pointer_cast(list[i])) + GenericWrapperByValue::create(l, p); + else if(ColorOptPtr p = boost::dynamic_pointer_cast(list[i])) + GenericWrapperByValue::create(l, p); + else if(FontOptPtr p = boost::dynamic_pointer_cast(list[i])) + GenericWrapperByValue::create(l, p); + else if(ComboOptPtr p = boost::dynamic_pointer_cast(list[i])) + GenericWrapperByValue::create(l, p); + else if(SelectOptPtr p = boost::dynamic_pointer_cast(list[i])) + GenericWrapperByValue::create(l, p); + else + luaL_error(l, "WFT?"); + return 1; + } + } + luaL_error(l, "No item with name %s", k); + return 0; +} + +void Wrapper::create_index_table(lua_State* l) { + set_meta_method(l, &to_string, "__tostring"); + set_meta_method(l, &newindex_event, "__newindex"); + set_meta_method(l, &index_event, "__index"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n!=1) + luaL_error(l, "Wrong parameter list for OptList constructor"); + + OptList list; + lua_pushnil(l); + while (lua_next(l, -2) != 0) { + if(BoolOptPtr *p = Wrapper::retrieve(l, -1)) + list << BoolOptPtr(*p); + else if(IntOptPtr *p = Wrapper::retrieve(l, -1)) + list << IntOptPtr(*p); + else if(StringOptPtr *p = Wrapper::retrieve(l, -1)) + list << StringOptPtr(*p); + else if(UrlOptPtr *p = Wrapper::retrieve(l, -1)) + list << UrlOptPtr(*p); + else if(ColorOptPtr *p = Wrapper::retrieve(l, -1)) + list << ColorOptPtr(*p); + else if(FontOptPtr *p = Wrapper::retrieve(l, -1)) + list << FontOptPtr(*p); + else if(ComboOptPtr *p = Wrapper::retrieve(l, -1)) + list << ComboOptPtr(*p); + else if(SelectOptPtr *p = Wrapper::retrieve(l, -1)) + list << SelectOptPtr(*p); + else + luaL_error(l, "Wrong item in list for OptList constructor"); + lua_pop(l, 1); + } + lua_pop(l, n); + +// for(int i=0;i::to_string(lua_State* l) { + BoolOptList r = *retrieve(l, 1, AssertOk); + QString s; + for(int i=0;iname(); + s = "bool_list["+s+"]"; + lua_pop(l, 1); + lua_pushstring(l, s.toAscii().constData()); + return 1; +} + +int Wrapper::newindex_event(lua_State* l) { + lua_pop(l,3); + luaL_error(l, "BoolOptList cannot be modified after being constructed!!!"); + return 0; +} + +int Wrapper::index_event(lua_State* l) { + const char *k = lua_tostring(l, -1); + BoolOptList& list = *retrieve(l, -2); + lua_pop(l,2); + for(int i=0; iname() == k) { + GenericWrapperByValue::create(l, list[i]); + return 1; + } + } + luaL_error(l, "No bool item with name %s", k); + return 0; +} + +void Wrapper::create_index_table(lua_State* l) { + set_meta_method(l, &to_string, "__tostring"); + set_meta_method(l, &newindex_event, "__newindex"); + set_meta_method(l, &index_event, "__index"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n!=1) + luaL_error(l, "Wrong parameter list for BoolOptList constructor"); + + BoolOptList list; + lua_pushnil(l); + while (lua_next(l, -2) != 0) { + list << *Wrapper::retrieve(l, -1, AssertOk); + lua_pop(l, 1); + } + lua_pop(l, n); + + create(l, list); + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "BoolOpt"; +} + +int Wrapper::to_string(lua_State* l) { + BoolOptPtr r = *retrieve(l, 1, AssertOk); + lua_pop(l, 1); + lua_pushfstring(l, "bool[%s] = %s", r->name().toAscii().constData(), r->value()?"true":"false" ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, name); + SET_PROPERTY_RO(l, label); + SET_PROPERTY_RO(l, sub_options); + SET_PROPERTY_RW(l, value); + set_meta_method(l, &to_string, "__tostring"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n<3 || n>4) + luaL_error(l, "Wrong parameter list for BoolOpt constructor"); + + const char* name = lua_tostring(l, 1); + const char* label = lua_tostring(l, 2); + bool value = lua_toboolean(l, 3); + OptList sub_opt; + if(n==4) + sub_opt = *Wrapper::retrieve(l, 4, AssertOk); + + lua_pop(l, n); + create(l, BoolOptPtr(new BoolOpt(name, label, value, sub_opt))); + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "IntOpt"; +} + +int Wrapper::to_string(lua_State* l) { + IntOptPtr r = *retrieve(l, 1, AssertOk); + lua_pop(l, 1); + lua_pushfstring(l, "int[%s] = %d", r->name().toAscii().constData(), r->value() ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, name); + SET_PROPERTY_RO(l, label); + SET_PROPERTY_RO(l, min); + SET_PROPERTY_RO(l, max); + SET_PROPERTY_RW(l, value); + SET_PROPERTY_RO(l, visualization); + set_meta_method(l, &to_string, "__tostring"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n<5 || n>6) + luaL_error(l, "Wrong parameter list for IntOpt constructor"); + + const char* name = lua_tostring(l, 1); + const char* label = lua_tostring(l, 2); + int value = int(lua_tonumber(l, 3)); + int min = int(lua_tonumber(l, 4)); + int max = int(lua_tonumber(l, 5)); + + IntOpt::Visualization visualization = IntOpt::SpinBox; + if (n > 5) { + QString vstring = lua_tostring(l, 6); + if (vstring.compare("slider", Qt::CaseInsensitive) == 0) { + visualization = IntOpt::Slider; + } + else if (vstring.compare("spinbox", Qt::CaseInsensitive) != 0) { + kError() << "No such visualization `" << vstring << "'. Using `spinbox' instead"; + } + } + + lua_pop(l, n); + create(l, IntOptPtr(new IntOpt(name, label, value, min, max, visualization)) ); + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "StringOpt"; +} + +int Wrapper::to_string(lua_State* l) { + StringOptPtr r = *retrieve(l, 1, AssertOk); + lua_pop(l, 1); + lua_pushfstring(l, "string[%s] = %s", r->name().toAscii().constData(), r->value().toAscii().constData() ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, name); + SET_PROPERTY_RO(l, label); + SET_PROPERTY_RW(l, value); + set_meta_method(l, &to_string, "__tostring"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n!=3) + luaL_error(l, "Wrong parameter list for StringOpt constructor"); + + const char* name = lua_tostring(l, 1); + const char* label = lua_tostring(l, 2); + const char* value = lua_tostring(l, 3); + lua_pop(l, n); + + create(l, StringOptPtr(new StringOpt(name, label, value))); + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "UrlOpt"; +} + +int Wrapper::to_string(lua_State* l) { + UrlOptPtr r = *retrieve(l, 1, AssertOk); + lua_pop(l, 1); + lua_pushfstring(l, "url[%s] = %s", r->name().toAscii().constData(), r->value().toAscii().constData() ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, name); + SET_PROPERTY_RO(l, label); + SET_PROPERTY_RW(l, value); + set_meta_method(l, &to_string, "__tostring"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n!=3) + luaL_error(l, "Wrong parameter list for UrlOpt constructor"); + + const char* name = lua_tostring(l, 1); + const char* label = lua_tostring(l, 2); + const char* value = lua_tostring(l, 3); + lua_pop(l, n); + + create(l, UrlOptPtr(new UrlOpt(name, label, file_path(l, value) ))); + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "ColorOpt"; +} + +int Wrapper::to_string(lua_State* l) { + ColorOptPtr r = *retrieve(l, 1, AssertOk); + lua_pop(l, 1); + lua_pushfstring(l, "color[%s] = %s", r->name().toAscii().constData(), r->value().name().toAscii().constData() ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, name); + SET_PROPERTY_RO(l, label); + SET_PROPERTY_RW(l, value); + set_meta_method(l, &to_string, "__tostring"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n!=3) + luaL_error(l, "Wrong parameter list for ColorOpt constructor"); + + const char* name = lua_tostring(l, 1); + const char* label = lua_tostring(l, 2); + QColor value = Wrapper::get(l, 3); + lua_pop(l, n); + + create(l, ColorOptPtr(new ColorOpt(name, label, value))); + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "FontOpt"; +} + +int Wrapper::to_string(lua_State* l) { + FontOptPtr r = *retrieve(l, 1, AssertOk); + lua_pop(l, 1); + lua_pushfstring(l, "font[%s] = %s", r->name().toAscii().constData(), r->value().toString().toAscii().constData() ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, name); + SET_PROPERTY_RO(l, label); + SET_PROPERTY_RW(l, value); + set_meta_method(l, &to_string, "__tostring"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n!=3) + luaL_error(l, "Wrong parameter list for FontOpt constructor"); + + const char* name = lua_tostring(l, 1); + const char* label = lua_tostring(l, 2); + QFont* value = Wrapper::retrieve(l, 3, AssertOk); + lua_pop(l, n); + + create(l, FontOptPtr(new FontOpt(name, label, *value))); + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "ComboOpt"; +} + +int Wrapper::to_string(lua_State* l) { + ComboOptPtr r = *retrieve(l, 1, AssertOk); + lua_pop(l, 1); + lua_pushfstring(l, "combo[%s] = %s", + r->name().toAscii().constData(), + r->values().join(",").toAscii().constData() ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, name); + SET_PROPERTY_RO(l, label); + SET_PROPERTY_RW(l, selected); + set_meta_method(l, &to_string, "__tostring"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n<3 || n>4) + luaL_error(l, "Wrong parameter list for ComboOpt constructor"); + + const char* name = lua_tostring(l, 1); + const char* label = lua_tostring(l, 2); + int selected = n==4 ? int(lua_tonumber(l, 4)) : 0; + QStringList values; + lua_pushnil(l); + while (lua_next(l, 3) != 0) { + values << lua_tostring(l, -1); + lua_pop(l, 1); + } + + lua_pop(l, n); + create(l, ComboOptPtr(new ComboOpt(name, label, values, selected))); + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +const char* Wrapper::class_name() { + return "SelectOpt"; +} + +int Wrapper::to_string(lua_State* l) { + SelectOptPtr r = *retrieve(l, 1, AssertOk); + lua_pop(l, 1); + lua_pushfstring(l, "select[%s] = !!", r->name().toAscii().constData() ); + return 1; +} + +void Wrapper::create_index_table(lua_State* l) { + SET_PROPERTY_RO(l, name); + SET_PROPERTY_RO(l, label); + SET_PROPERTY_RO(l, options); + SET_PROPERTY_RW(l, selected); + set_meta_method(l, &to_string, "__tostring"); + + Comparable::register_in_index_table(l); +} + +int Wrapper::constructor(lua_State* l) { + const int n = lua_gettop(l); + + if(n<3 || n>4) + luaL_error(l, "Wrong parameter list for SelectOpt constructor"); + + const char* name = lua_tostring(l, 1); + const char* label = lua_tostring(l, 2); + BoolOptList values = *Wrapper::retrieve(l, 3, AssertOk); + int selected = n==4 ? int(lua_tonumber(l, 4)) : 0; + + lua_pop(l, n); + create(l, SelectOptPtr(new SelectOpt(name, label, values, selected))); + return 1; +} + +//END Wrapper --------------------------------------------------------- + + +} //end namespace luaapi + diff --git a/src/luaapi/options.h b/src/luaapi/options.h new file mode 100644 index 0000000..5297d44 --- /dev/null +++ b/src/luaapi/options.h @@ -0,0 +1,210 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef LUAAPI__OPTIONS_H +#define LUAAPI__OPTIONS_H + +#include "option.h" +#include "luaapi/genericwrapper.h" +#include "luaapi/imaging.h" + +namespace LuaApi { + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); + static int newindex_event(lua_State* l); + static int index_event(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); + static int newindex_event(lua_State* l); + static int index_event(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RO_QSTRING(name, get()->name) + PROPERTY_RO_QSTRING(label, get()->label) + PROPERTY_RO_CLASS(sub_options, get()->subOptions, OptList) + PROPERTY_RW(value, get()->value, get()->setValue, boolean) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RO_QSTRING(name, get()->name) + PROPERTY_RO_QSTRING(label, get()->label) + PROPERTY_RO_TYPE(min, get()->min, number, int) + PROPERTY_RO_TYPE(max, get()->max, number, int) + PROPERTY_RW_TYPE(value, get()->value, get()->setValue, number, int) + static int get_visualization(lua_State* l) { + IntOpt::Visualization vis = retrieve(l, 1, DontCheck)->get()->visualization(); + switch (vis) { + case IntOpt::SpinBox: + lua_pushstring(l, "spinbox"); + break; + case IntOpt::Slider: + lua_pushstring(l, "slider"); + break; + } + return 1; + } + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RO_QSTRING(name, get()->name) + PROPERTY_RO_QSTRING(label, get()->label) + PROPERTY_RW_QSTRING(value, get()->value, get()->setValue) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RO_QSTRING(name, get()->name) + PROPERTY_RO_QSTRING(label, get()->label) + PROPERTY_RW_QSTRING(value, get()->value, get()->setValue) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RO_QSTRING(name, get()->name) + PROPERTY_RO_QSTRING(label, get()->label) + PROPERTY_RW_CLASS(value, get()->value, get()->setValue, QColor) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RO_QSTRING(name, get()->name) + PROPERTY_RO_QSTRING(label, get()->label) + PROPERTY_RW_CLASS(value, get()->value, get()->setValue, QFont) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RO_QSTRING(name, get()->name) + PROPERTY_RO_QSTRING(label, get()->label) + PROPERTY_RW_TYPE(selected, get()->selected, get()->setSelected, number, int) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + + +//BEGIN Wrapper ------------------------------------------------------- + +template <> +class Wrapper : public GenericWrapperByValue { +public: + PROPERTY_RO_QSTRING(name, get()->name) + PROPERTY_RO_QSTRING(label, get()->label) + PROPERTY_RO_CLASS(options, get()->options, BoolOptList) + PROPERTY_RW_TYPE(selected, get()->selected, get()->setSelected, number, int) + + static const char* class_name(); + static int to_string(lua_State* l); + static void create_index_table(lua_State* l); + static int constructor(lua_State* l); +}; + +//END Wrapper --------------------------------------------------------- + +} //end namespace luaapi + +#endif //LUAAPI__OPTIONS_H diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..c1d910a --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,62 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mainwindow.h" +#include "crash.h" + +static const char description[] = "A generic board game interface"; + +static const char version[] = "0.9.1"; + +void trap() { + printf("Press enter to quit.\n"); + + char dummy[4096]; + fgets(dummy, 4096, stdin); +} + +int main(int argc, char **argv) { + KAboutData about( "tagua", 0, ki18n("Tagua"), + version, ki18n(description), KAboutData::License_GPL, + ki18n("(C) 2006 Paolo Capriotti, Maurizio Monge") ); + about.addAuthor(ki18n("Paolo Capriotti"), KLocalizedString(), "p.capriotti@gmail.com"); + about.addAuthor(ki18n("Maurizio Monge"), KLocalizedString(), "p.capriotti@gmail.com"); + about.addCredit(ki18n("Jani Huhtanen"), ki18n("Gaussian blur code")); + about.addCredit(ki18n("Rici Lake"), ki18n("funclib lua library")); + about.addCredit(ki18n("Riccardo Iaconelli"), ki18n("Various fixes and cleanups")); + about.addCredit(ki18n("Yann Dirson"), ki18n("Shogi related patches")); + about.addCredit(ki18n("Pieter Stouten"), ki18n("Allowed free use of images on shogi.net")); + + KCmdLineOptions options; + options.add("+variant", ki18n("Initial variant")); + + KCmdLineArgs::init(argc, argv, &about); + KCmdLineArgs::addCmdLineOptions(options); + + KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); + + QString variant = args->count() > 0 ? args->arg(0) : "chess"; + KApplication app; + + MainWindow* widget = new MainWindow(variant); + widget->show(); + + return app.exec(); +} + diff --git a/src/mainanimation.cpp b/src/mainanimation.cpp new file mode 100644 index 0000000..f5602b8 --- /dev/null +++ b/src/mainanimation.cpp @@ -0,0 +1,60 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "mainanimation.h" + +using namespace boost; + +MainAnimation::MainAnimation(double speed) +: AnimationGroup(true) +, m_translate(0) +, m_speed(speed) +, m_delay(20) { + m_active = true; + connect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); +} + +void MainAnimation::addAnimation(const shared_ptr& a) { + if (!m_timer.isActive()) { + m_timer.start(m_delay); + m_time.restart(); + } + + AnimationGroup::addPostAnimation(a); + tick(); +} + +void MainAnimation::stop() { + AnimationGroup::stop(); +} + +void MainAnimation::tick() { + animationAdvance(static_cast(m_time.elapsed() * m_speed) + m_translate); + if (empty()) { + // no more animations, stop the clock! + m_timer.stop(); + } +} + +void MainAnimation::setSpeed(double speed) { + int e = m_time.elapsed(); + m_translate = int((e*m_speed + m_translate) - e*speed); + m_speed = speed; +} + +void MainAnimation::setDelay(int delay) { + m_timer.setInterval(m_delay = delay); +} + +MainAnimation& MainAnimation::global() { + static MainAnimation instance; + return instance; +} + diff --git a/src/mainanimation.h b/src/mainanimation.h new file mode 100644 index 0000000..a56d397 --- /dev/null +++ b/src/mainanimation.h @@ -0,0 +1,63 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MAINANIMATION_H +#define MAINANIMATION_H + +#include +#include +#include +#include "animation.h" +#include + +/** + * @a MainAnimation is a persistent animation used to activate + * all chessboard animations. + */ +class MainAnimation : public QObject, protected AnimationGroup { +Q_OBJECT + QTime m_time; + QTimer m_timer; + int m_translate; + double m_speed; + int m_delay; +public: + MainAnimation(double speed = 1.0); + + /** + * Activate the animation @a a. + */ + void addAnimation(const boost::shared_ptr& a); + + /** + * Stop all animations. + */ + void stop(); + + /** + * Sets the overall speed factor (default is 1.0). + * This function is implemented to avoid time gaps. + */ + void setSpeed(double speed); + + /** + * Sets the frame delay. + */ + void setDelay(int delay); + + /** + * Return a global MasterAnimation, i.e. not tied to a particular board. + */ + static MainAnimation& global(); +protected Q_SLOTS: + void tick(); +}; + +#endif // MAINANIMATION_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp new file mode 100644 index 0000000..d35fb77 --- /dev/null +++ b/src/mainwindow.cpp @@ -0,0 +1,745 @@ +/* + Copyright (c) 2006-2008 Paolo Capriotti + (c) 2006-2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "mainwindow.h" +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "variant.h" + +#include "actioncollection.h" +#include "chesstable.h" +#include "console.h" +#include "clock.h" +#include "newgame.h" +#include "variants.h" +#include "gameinfo.h" +#include "controllers/editgame.h" +#include "controllers/editposition.h" +#include "engineinfo.h" +#include "movelist_table.h" +#include "icsconnection.h" +#include "qconnect.h" +#include "mastersettings.h" +#include "flash.h" +#include "foreach.h" +#include "pgnparser.h" +#include "pref_highlight.h" +#include "pref_preferences.h" +#include "tabwidget.h" + +using namespace Qt; +using namespace boost; + +MainWindow::~MainWindow() { + delete console; + qApp->quit(); +} + +MainWindow::MainWindow(const QString& variant) +: KXmlGuiWindow(0) +, m_ui(actionCollection()) { + setObjectName("tagua_main"); + m_main = new TabWidget(this); + m_main->setTabBarHidden(true); + setCentralWidget(m_main); + + m_movelist_stack = new QStackedWidget; + + connect(m_main, SIGNAL(currentChanged(int)), + this, SLOT(changeTab(int))); + connect(m_main, SIGNAL(closeTab()), + this, SLOT(closeTab())); + + movelist_dock = new QDockWidget(this); + movelist_dock->setWidget(m_movelist_stack); + movelist_dock->setWindowTitle(i18n("Move list")); + movelist_dock->setObjectName("move_list"); + addDockWidget(Qt::LeftDockWidgetArea, movelist_dock, Qt::Vertical); + movelist_dock->show(); + + Variant* v = Variants::self().create(variant); + if (v == NULL) + kFatal() << "Cannot instantiate variant \"" << variant << "\", aborting"; + + ChessTable* board = new ChessTable(v); + + board->setFocus(); + + console_dock = new QDockWidget(this); + console = new Console(0, i18n("FICS Connection")); + console_dock->setWidget(console); + console_dock->setFocusProxy(console); + console_dock->setWindowTitle(i18n("Console")); + console_dock->setObjectName("console"); + addDockWidget(Qt::BottomDockWidgetArea, console_dock, Qt::Horizontal); + console_dock->setWindowFlags(console_dock->windowFlags() & ~Qt::WindowStaysOnTopHint); + console_dock->show(); + + settings().onChange(this, "settingsChanged"); + + connect(board, SIGNAL(error(ErrorCode)), this, SLOT(displayErrorMessage(ErrorCode))); + + setupActions(); + setupGUI(); + setupEngineMenu(); + + // start in edit game mode + newGame(v->name(), StatePtr(), true); + updateVariantActions(); +} + +ChessTable* MainWindow::table() { + return qobject_cast(m_main->currentWidget()); +} + +KAction* MainWindow::installRegularAction(const QString& name, const KIcon& icon, const QString& text, QObject* obj, const char* slot) { + KAction* temp = new KAction(icon, text, this); + actionCollection()->addAction(name, temp); + connect(temp, SIGNAL(triggered(bool)), obj, slot); + return temp; +} + +void MainWindow::setupEngineMenu() { + QMenu* engine_menu = 0; + SettingArray engine_settings = settings().group("engines").array("engine"); + foreach (Settings s, engine_settings) { + if (!engine_menu) { + // this way the menu is created only if there is at least one engine + engine_menu = menuBar()->addMenu(i18n("E&ngines")); + } + + QString name; + EngineDetails engine_details; + engine_details.load(s); + + EngineInfo* engine = new EngineInfo(engine_details, ui()); + + m_engines.push_back(engine); + + QMenu* menu = engine_menu->addMenu(engine_details.name); + + { + KAction* play_white = new KAction(i18n("Play as &white"), this); + play_white->setCheckable(true); + connect(play_white, SIGNAL(triggered()), engine, SLOT(playAsWhite())); + menu->addAction(play_white); + } + { + KAction* play_black = new KAction(i18n("Play as &black"), this); + play_black->setCheckable(true); + connect(play_black, SIGNAL(triggered()), engine, SLOT(playAsBlack())); + menu->addAction(play_black); + } +#if 0 // disable analysis for the moment + { + KAction* analyze = new KAction(i18n("&Analyze"), this); + analyze->setCheckable(true); + connect(analyze, SIGNAL(triggered()), engine, SLOT(analyze())); + menu->addAction(analyze); + } +#endif + } +} + +void MainWindow::setupActions() { + KAction* tmp; + + KStandardAction::openNew(this, SLOT(newGame()), actionCollection()); + KStandardAction::open(this, SLOT(loadGame()), actionCollection()); + KStandardAction::save(this, SLOT(saveGame()), actionCollection()); + KStandardAction::saveAs(this, SLOT(saveGameAs()), actionCollection()); + KStandardAction::quit(this, SLOT(quit()), actionCollection()); + KStandardAction::preferences(this, SLOT(preferences()), actionCollection()); + + installRegularAction("back", KIcon("go-previous"), i18n("&Back"), &ui(), SLOT(back())); + installRegularAction("forward", KIcon("go-next"), i18n("&Forward"), &ui(), SLOT(forward())); + installRegularAction("begin", KIcon("go-first"), i18n("Be&gin"), &ui(), SLOT(gotoFirst())); + installRegularAction("end", KIcon("go-last"), i18n("&End"), &ui(), SLOT(gotoLast())); + installRegularAction("connect", KIcon("network-connect"), i18n("&Connect"), this, SLOT(icsConnect())); + installRegularAction("disconnect", KIcon("network-disconnect"), + i18n("&Disconnect"), this, SLOT(icsDisconnect())); + + KStandardAction::undo(&ui(), SLOT(undo()), actionCollection()); + KStandardAction::redo(&ui(), SLOT(redo()), actionCollection()); + +// installRegularAction("pgnCopy", KIcon("edit-copy"), i18n("Copy PGN"), this, SLOT(pgnCopy())); +// installRegularAction("pgnPaste", KIcon("edit-paste"), i18n("Paste PGN"), this, SLOT(pgnPaste())); + installRegularAction("editPosition", KIcon("edit"), i18n("&Edit position"), this, SLOT(editPosition())); + installRegularAction("clearBoard", KIcon("edit-delete"), i18n("&Clear board"), &ui(), SLOT(clearBoard())); + installRegularAction("setStartingPosition", KIcon("contents"), i18n("&Set starting position"), + &ui(), SLOT(setStartingPosition())); +// installRegularAction("copyPosition", KIcon(), i18n("&Copy position"), &ui(), SLOT(copyPosition())); +// installRegularAction("pastePosition", KIcon(), i18n("&Paste position"), &ui(), SLOT(pastePosition())); + tmp = installRegularAction("flip", KIcon("object-rotate-left"), i18n("&Flip view"), this, SLOT(flipView())); + tmp->setShortcut(Qt::CTRL + Qt::Key_F); + installRegularAction("toggleConsole", KIcon("utilities-terminal"), i18n("Toggle &console"), this, SLOT(toggleConsole())); + installRegularAction("toggleMoveList", KIcon("view-list-tree"), i18n("Toggle &move list"), this, SLOT(toggleMoveList())); +} + +void MainWindow::updateVariantActions(bool unplug) { + ActionCollection* variant_actions = m_ui.variantActions(); + if (unplug) + unplugActionList("variantActions"); + if (variant_actions) { + plugActionList("variantActions", variant_actions->actions()); + } + else { + kWarning() << "No variant actions"; + } +} + +void MainWindow::readSettings() { } +void MainWindow::writeSettings() { } + +void MainWindow::closeEvent(QCloseEvent* e) { + e->accept(); + writeSettings(); + delete this; +} + + +void MainWindow::keyPressEvent(QKeyEvent* event) { + if (event->key() == Qt::Key_F5) { + ui().createCtrlAction(); + } +} + +void MainWindow::keyReleaseEvent(QKeyEvent* event) { + if (event->key() == Qt::Key_F5) { + ui().destroyCtrlAction(); + } +} + +void MainWindow::changeTab(int index) { + m_ui.setCurrentTab(m_main->currentWidget()); + m_movelist_stack->setCurrentIndex(index); + updateVariantActions(); +} + +void MainWindow::closeTab() { + if (m_main->count() > 1) { + int old_index = m_main->currentIndex(); + ChessTable* old_board = table(); + + int new_index = old_index - 1; + if (new_index < 0) + new_index = old_index + 1; + m_main->setCurrentIndex(new_index); + + m_main->removeTab(old_index); + m_movelist_stack->removeWidget(m_movelist_stack->widget(old_index)); + m_ui.removeController(old_board); + + if (m_main->count() <= 1) { + m_main->setTabBarHidden(true); + } + +#if 0 // this doesn't work... why? + ChessTable* old_board = table(); + m_ui.removeController(old_board); + m_movelist_stack->removeWidget( + m_movelist_stack->widget(m_main->currentIndex())); + m_main->removeTab(m_main->currentIndex()); + + delete old_board; + + if (m_main->count() <= 1) { + m_main->hideTabBar(); + } + + // update ui controller (just in case...) + m_ui.setCurrentTab(m_main->currentWidget()); +#endif + } +} + +void MainWindow::createTab(ChessTable* board, const shared_ptr& controller, + const QString& caption, int index) { + if (index == -1) + index = m_main->addTab(board, caption); + else + m_main->insertTab(index, board, caption); + + m_ui.addController(board, controller); +// m_ui.setCurrentTab(board); + m_movelist_stack->addWidget(board->moveListTable()); + + m_main->setCurrentIndex(index); + m_movelist_stack->setCurrentIndex(index); + + if (m_main->count() > 1) m_main->setTabBarHidden(false); +} + + +void MainWindow::cleanupGame(const QString& what, const QString& result) { + Q_UNUSED(what); + Q_UNUSED(result); + + cleanupGame(); +} + +void MainWindow::cleanupGame() { + ui().detach(); + ui().end(); +} + +bool MainWindow::newGame(const QString& variantName, + const StatePtr& startingPos, + bool newTab) { + Variant* variant = Variants::self().create(variantName); + if (!variant) { + kWarning() << "no variant" << variantName << "found"; + variant = Variants::self().create("chess"); + } + + if (variant) { + ChessTable* board = newTab ? new ChessTable(variant) : table(); + QString text = QString("Editing %1 game").arg(variant->name().toLower()); + + shared_ptr controller( + new EditGameController(board, startingPos)); + if (newTab) { + createTab(board, controller, text); + } + else { + unplugActionList("variantActions"); + ui().setController(controller); + table()->setPlayers(Player(), Player()); + m_main->setTabText(m_main->currentIndex(), text); + updateVariantActions(false); + } + return true; + } + else { + kError() << "Could not find the chess variant"; + exit(1); + return false; + } +} + + +void MainWindow::editPosition() { +//BROKEN +#if 0 + shared_ptr controller(new EditPositionController(table(), ChessVariant::info())); + m_main->setTabText(m_main->currentIndex(), "Editing chess position"); + ui().setController(controller); +#endif +} + +void MainWindow::setupGame(const GameInfo* gameInfo, const PositionInfo& style12) { + QString variantCode = gameInfo->variant(); + Variant* variant = Variants::self().create(variantCode); + shared_ptr controller( + new EditGameController(table())); + Q_ASSERT(style12.relation == PositionInfo::NotMyMove || + style12.relation == PositionInfo::MyMove); + + // set opponent side + const IColor* turn = style12.position->turn(); + const IBehaviour* behaviour = style12.position->behaviour(); + if (!behaviour) return; + const IColor* side = style12.relation == PositionInfo::MyMove ? + behaviour->opponent(turn) : turn; + + if (controller->addICSPlayer(side, style12.gameNumber, m_connection)) { + ui().setController(controller); + table()->setPlayers(gameInfo->white(), gameInfo->black()); + m_main->setTabText(m_main->currentIndex(), + QString("FICS Game - %1 vs %2").arg(style12.whitePlayer) + .arg(style12.blackPlayer)); + } +} + +void MainWindow::setupExaminedGame(const GameInfo* gameInfo, const PositionInfo& style12) { + table()->setVariant( + Variants::self().create(gameInfo->variant())); + shared_ptr controller( + new EditGameController(table())); + if (controller->setExaminationMode(style12.gameNumber, m_connection)) { + table()->setPlayers(Player(style12.whitePlayer, -1), + Player(style12.blackPlayer, -1)); + ui().setController(controller); + m_main->setTabText(m_main->currentIndex(), + QString("Examining - %1 vs %2").arg(style12.whitePlayer) + .arg(style12.blackPlayer)); + } + +} + +void MainWindow::setupObservedGame(const GameInfo* g, const PositionInfo& style12) { + Variant* variant = Variants::self().create(g->variant()); + std::auto_ptr board(new ChessTable(variant)); + + shared_ptr controller( + new EditGameController(board.get())); + if (controller->setObserveMode(style12.gameNumber, m_connection)) { + board->setPlayers(Player(style12.whitePlayer, -1), + Player(style12.blackPlayer, -1)); +// ui().setController(controller); + //kDebug() << "adding tab"; + createTab(board.get(), controller, + QString("Observing - %1 vs %2").arg(style12.whitePlayer) + .arg(style12.blackPlayer)); + board.release(); + } +} + +void MainWindow::setupPGN(const QString& s) { + PGN pgn(s); + + std::map::const_iterator var = pgn.m_tags.find("Variant"); + Variant* variant; + + if (var == pgn.m_tags.end()) { + variant = Variants::self().create("chess"); + } + else if (!(variant = Variants::self().create(var->second))) { + kDebug() << " --> MainWindow::setupPGN: Error, no such variant " << var->second; + return; + } + + shared_ptr controller( + new EditGameController(table())); + ui().setController(controller); + controller->loadPGN(pgn); + +// table()->setPlayers(gameInfo->white(), gameInfo->black()); +// m_main->setTabText(m_main->currentIndex(), +// QString("FICS Game - %1 vs %2").arg(style12.whitePlayer) +// .arg(style12.blackPlayer)); +} + +bool MainWindow::openFile(const QString& filename) { + QFileInfo info(filename); + + if(info.isDir()) { + KMessageBox::sorry(this, i18n("You have specified a folder"), i18n("Error")); + return false; + } + + if(!info.exists() || !info.isFile()) { + KMessageBox::sorry(this, i18n("The specified file does not exist"), i18n("Error")); + return false; + } + + QFile file(filename); + + if(!file.open(QIODevice::ReadOnly)) { + KMessageBox::sorry(this, i18n("You do not have read permission to this file."), i18n("Error")); + return false; + } + + QTextStream stream(&file); + QTextCodec *codec; + codec = QTextCodec::codecForLocale(); + stream.setCodec(codec); + + setupPGN(stream.readAll()); + //ui().pgnPaste(stream.readAll()); + return true; +} + +void MainWindow::loadGame() { + KUrl url = KFileDialog::getOpenUrl(KUrl(), "*.pgn", this, i18n("Open PGN file")); + + if(url.isEmpty()) + return; + + QString tmp_file; + if (KIO::NetAccess::download(url, tmp_file, this)) { + openFile(tmp_file); + KIO::NetAccess::removeTempFile(tmp_file); + } + else + KMessageBox::error(this, KIO::NetAccess::lastErrorString()); +} + +void MainWindow::saveGame() { + if (ui().url().isEmpty()) + saveGameAs(); + else + ui().setUrl(saveGame(ui().url())); +} + +void MainWindow::saveGameAs() { + ui().setUrl(saveGame(KFileDialog::getSaveUrl(KUrl(), "*.pgn", this, i18n("Save PGN file")))); +} + +bool MainWindow::checkOverwrite(const KUrl& url) { + if (!url.isLocalFile()) + return true; + + QFileInfo info(url.path()); + if (!info.exists()) + return true; + + return KMessageBox::Cancel != KMessageBox::warningContinueCancel(this, + i18n("A file named \"%1\" already exists. " + "Are you sure you want to overwrite it?" , info.fileName()), + i18n("Overwrite File?"), + KGuiItem(i18n("&Overwrite"))); +} + +KUrl MainWindow::saveGame(const KUrl& url) { + if (!checkOverwrite(url)) + return KUrl(); + + if (url.isEmpty()) + return KUrl(); + + if (!url.isLocalFile()) { + // save in a temporary file + KTemporaryFile tmp_file; + tmp_file.open(); + saveFile(tmp_file); + if (!KIO::NetAccess::upload(tmp_file.fileName(), url, this)) + return KUrl(); + } + else { + QFile file(url.path()); + if (!file.open(QIODevice::WriteOnly)) + return KUrl(); + saveFile(file); + } + + return url; +} + +void MainWindow::saveFile(QFile& file) { + QTextStream stream(&file); + QTextCodec *codec; + codec = QTextCodec::codecForLocale(); + stream.setCodec(codec); + stream << ui().currentPGN() << "\n"; +} + +void MainWindow::createConnection(const QString& username, const QString& password, + const QString& host, quint16 port, + const QString& timeseal, const QString& timeseal_cmd) { + m_connection = shared_ptr(new ICSConnection); + + connect(m_connection.get(), SIGNAL(established()), this, SLOT(onEstablishConnection())); + connect(m_connection.get(), SIGNAL(hostLookup()), this, SLOT(onHostLookup())); + connect(m_connection.get(), SIGNAL(hostFound()), this, SLOT(onHostFound())); + + connect(m_connection.get(), SIGNAL(receivedLine(QString, int)), console, SLOT(displayText(QString, int))); + connect(m_connection.get(), SIGNAL(receivedText(QString, int)), console, SLOT(displayText(QString, int))); + + connect(console, SIGNAL(receivedInput(const QString&)), m_connection.get(), SLOT(sendText(const QString&))); + connect(console, SIGNAL(notify()), this, SLOT(flash())); + + connect(m_connection.get(), SIGNAL(loginPrompt()), this, SLOT(sendLogin())); + connect(m_connection.get(), SIGNAL(registeredNickname()), this, SLOT(sendBlankPassword())); + connect(m_connection.get(), SIGNAL(prompt()), this, SLOT(prompt())); + + + connect(m_connection.get(), SIGNAL(creatingExaminedGame(const GameInfo*, const PositionInfo&)), + this, SLOT(setupExaminedGame(const GameInfo*, const PositionInfo&))); + connect(m_connection.get(), SIGNAL(endingExaminedGame(int)), this, SLOT(cleanupGame())); + + connect(m_connection.get(), SIGNAL(creatingObservedGame(const GameInfo*, const PositionInfo&)), + this, SLOT(setupObservedGame(const GameInfo*, const PositionInfo&))); + connect(m_connection.get(), SIGNAL(endingObservedGame(int)), this, SLOT(cleanupGame())); + + + connect(m_connection.get(), SIGNAL(creatingGame(const GameInfo*, const PositionInfo&)), + this, SLOT(setupGame(const GameInfo*, const PositionInfo&))); + connect(m_connection.get(), SIGNAL(endingGame(const QString&, const QString&)), + this, SLOT(cleanupGame(const QString&, const QString&))); + connect(m_connection.get(), SIGNAL(notification()), this, SLOT(flash())); + + m_connection->establish(host.toAscii().constData(), port, timeseal, timeseal_cmd); + console->show(); + + // send username / password combination + if (!username.isEmpty()) { + m_connection->sendText(username); + m_connection->sendText(password); + } + + quickConnectDialog.reset(); +} + +void MainWindow::icsConnect() { + quickConnectDialog = shared_ptr(new QConnect(this)); + connect(quickConnectDialog.get(), + SIGNAL(acceptConnection(const QString&, + const QString&, + const QString&, + quint16, + const QString&, + const QString&)), + this, + SLOT(createConnection(const QString&, + const QString&, + const QString&, + quint16, + const QString&, + const QString&))); + quickConnectDialog->show(); +} + +void MainWindow::destroyConnection() { + m_connection.reset(); +} + +void MainWindow::icsDisconnect() { + destroyConnection(); + console->hide(); + console->clear(); +} + +void MainWindow::testConnect() { + Settings s_ics = settings().group("ics"); + if (s_ics["username"]) { + QString username = s_ics["username"].value(); + QString password = (s_ics["password"] | ""); + QString host = (s_ics["icsHost"] | "freechess.org"); + quint16 port = (s_ics["icsPort"] | 5000); + createConnection(username, password, host, port, QString(), QString() ); + } + else icsConnect(); +} + + +void MainWindow::onEstablishConnection() { +// kDebug() << "connection established"; +} + +void MainWindow::onConnectionError(int ) { +// kDebug() << "connection error (" << code << ")"; +} + +void MainWindow::onHostLookup() { +// kDebug() << "hostLookup..." << std::flush; +} + +void MainWindow::onHostFound() { +// kDebug() << "found"; +} + + +void MainWindow::sendLogin() { +// kDebug() << "sending username"; +// connection->sendText(connection->username()); +} + +void MainWindow::sendBlankPassword() { + m_connection->sendText(""); +} + +void MainWindow::prompt() { + if (!m_connection->initialized()) { + m_connection->startup(); + m_connection->setInitialized(); + } +} + +void MainWindow::newGame() { + StatePtr pos = ui().position(); + scoped_ptr dialog(new NewGame(this)); + if (dialog->exec() == QDialog::Accepted) { + if (!newGame(dialog->variant(), StatePtr(), dialog->newTab())) + QMessageBox::information(this, i18n("Error"), i18n("Error creating game")); + } +} + +void MainWindow::quit() { + delete this; +} + +void MainWindow::flipView() { + table()->flip(); +} + +void MainWindow::toggleConsole() { + if (console_dock->isVisible()) + console_dock->hide(); + else { + console_dock->show(); + console_dock->setFocus(Qt::MouseFocusReason + /*Qt::ActiveWindowFocusReason*/ /*Qt::OtherFocusReason*/); + } +} + +void MainWindow::toggleMoveList() { + if (movelist_dock->isVisible()) + movelist_dock->hide(); + else { + movelist_dock->show(); + movelist_dock->setFocus(Qt::OtherFocusReason); + } +} + + +void MainWindow::displayMessage(const QString& msg) { + Q_UNUSED(msg); // TODO +// statusBar()->message(msg, 2000); +} + +void MainWindow::displayErrorMessage(ErrorCode code) { + switch(code) { + case InvalidMove: + displayMessage(i18n("Illegal move")); + break; + } +} + +void MainWindow::flash() { + if( !isAncestorOf(QApplication::focusWidget()) ) + Flash::flash(this); +} + +#if 0 +void MainWindow::prefHighlight() { + PrefHighlight dialog; + int result = dialog.exec(); + if (result == QDialog::Accepted) { + dialog.apply(); + } +} +#endif + +void MainWindow::preferences() { + Preferences dialog(ui().currentVariant()); + int result = dialog.exec(); + if (result == QDialog::Accepted) + dialog.apply(); +} + +void MainWindow::settingsChanged() { + ui().reloadSettings(); +} + + + diff --git a/src/mainwindow.h b/src/mainwindow.h new file mode 100644 index 0000000..92bb11e --- /dev/null +++ b/src/mainwindow.h @@ -0,0 +1,142 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include + +#include +#include +#include +#include "boost/shared_ptr.hpp" + +#include + +#include "ui.h" +#include "common.h" +#include "export.h" + +class ChessTable; +class ICSConnection; +class Console; +class GameInfo; +class PositionInfo; +class Controller; +class QConnect; +class NewGame; +class EngineInfo; +class QDockWidget; +class TabWidget; +class QStackedWidget; +class QActionGroup; +class KAction; +class KIcon; + +class TAGUA_EXPORT MainWindow : public KXmlGuiWindow { +Q_OBJECT + QDockWidget* movelist_dock; + QDockWidget* console_dock; + + TabWidget* m_main; + QStackedWidget* m_movelist_stack; + boost::shared_ptr m_connection; + Console* console; + + QMenu* m_engine_menu; + + ChessTable* table(); + UI m_ui; + UI& ui() { return m_ui; } + void createTab(ChessTable*, const boost::shared_ptr&, + const QString& label, int index = -1); +// + QDir m_iconDir; + std::vector m_engines; + + boost::shared_ptr quickConnectDialog; + NewGame* newGameDialog; +// +// QAction *mkAction(const QString& txt, QKeySequence shk, QObject *o, +// const char *sl, QString name, QObject *par = NULL); + void setupActions(); + void setupEngineMenu(); + KAction* addPromotionAction(const QString& name, const QString& text, const char* uiSlot); + KAction* installRegularAction(const QString& name, const KIcon& icon, const QString& text, + QObject* obj, const char* slot); + void updateVariantActions(bool unplug = true); + + bool openFile(const QString&); + void saveFile(QFile&); + KUrl saveGame(const KUrl& url); + + void readSettings(); + void writeSettings(); +public: + MainWindow(const QString& variant); + virtual ~MainWindow(); + + protected: + void closeEvent(QCloseEvent*); + void keyPressEvent(QKeyEvent*); + void keyReleaseEvent(QKeyEvent*); +private Q_SLOTS: + void changeTab(int); + void closeTab(); +public Q_SLOTS: + void createConnection(const QString&, const QString&, const QString&, + quint16, const QString&, const QString&); + void destroyConnection(); + void testConnect(); // DEBUG + void icsConnect(); + void icsDisconnect(); +// // void receivedCommand(const QString&); +// + void onEstablishConnection(); + void onHostLookup(); + void onConnectionError(int); + void onHostFound(); +// + void sendLogin(); + void sendBlankPassword(); + void prompt(); + void cleanupGame(const QString&, const QString&); + void cleanupGame(); + + void editPosition(); + void setupGame(const GameInfo*, const PositionInfo&); + void setupPGN(const QString& s); + void setupExaminedGame(const GameInfo*, const PositionInfo&); + void setupObservedGame(const GameInfo*, const PositionInfo&); + void newGame(); + bool newGame(const QString& var, const StatePtr&, bool); + void loadGame(); + void saveGame(); + void saveGameAs(); + bool checkOverwrite(const KUrl& url); + void quit(); + void flipView(); + void toggleConsole(); + void toggleMoveList(); + + void displayMessage(const QString& msg); + void displayErrorMessage(ErrorCode); + void flash(); + +// void prefHighlight(); + void preferences(); + void settingsChanged(); +}; + + + +#endif // MAINWINDOW_H diff --git a/src/mastersettings.cpp b/src/mastersettings.cpp new file mode 100644 index 0000000..0fa34bd --- /dev/null +++ b/src/mastersettings.cpp @@ -0,0 +1,160 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "mastersettings.h" + +#include +#include +#include + +#include "common.h" +#include "foreach.h" + + +QDomElement MasterSettings::node() const { + if (m_node.isNull()) { + QFile f(m_filename); + if (!f.open(QFile::ReadOnly | QFile::Text) || !m_doc.setContent(&f)) { + kWarning() << "Unable to open configuration file for reading."; + +// // create a stub configuration file +// { +// QFile stub(m_filename); +// if (!stub.open(QFile::WriteOnly | QFile::Text)) { +// kDebug() << "Unable to write to configuration file."; +// exit(1); +// } +// QTextStream stream(&stub); +// stream << "\n" +// "\n" +// "\n"; +// } +// +// // reopen it +// if (!f.open(QFile::ReadOnly | QFile::Text)) +// exit(1); + + m_doc.appendChild(m_doc.createElement("configuration")); +// kDebug() << m_doc.toString(); + } + + + const_cast(m_node) = m_doc.documentElement(); + Q_ASSERT(!m_node.isNull()); + Q_ASSERT(!m_node.ownerDocument().isNull()); + } + + return m_node; +} + +MasterSettings::MasterSettings() { + m_filename = KStandardDirs::locateLocal("config", "taguarc.xml"); +} + +MasterSettings::MasterSettings(const QString& filename, LookupType lookup) { + if (lookup == PathLookup) + m_filename = filename; + else + m_filename = KStandardDirs::locateLocal("config", filename); +} + +MasterSettings::~MasterSettings() { + sync(); +} + +void MasterSettings::setupObserver(Observer& observer) { + connect(observer.object, SIGNAL(destroyed(QObject*)), this, SLOT(objectDestroyed(QObject*))); +} + +void MasterSettings::onChange(QObject* obj, const char* method) { + m_observers.push_front(Observer(obj, method, 0)); + setupObserver(m_observers.front()); +} + +void MasterSettings::onChange(QObject* obj, const char* method, const char* dependency) { + if (dependency) { + // go backwards through all existing observers, searching for something + // on which we depend. + for (ObserverList::reverse_iterator it = m_observers.rbegin(); + it != m_observers.rend(); ++it) { + const char* observer_class = it->object->metaObject()->className(); + if (observer_class && strcmp(observer_class, dependency) == 0) { + // we hit a dependency wall: we can't be notified + // before *it, so add the new Observer just here + ObserverList::iterator us = m_observers.insert(it.base(), Observer(obj, method, dependency)); + setupObserver(*us); + + // now check for a cyclic dependency + const char* this_class = obj->metaObject()->className(); + for (ObserverList::iterator it2 = m_observers.begin(); it2 != us; ++it2) { + if (it2->dependency && strcmp(it2->dependency, this_class) == 0) { + // something which is notified before has us a dependency + // this means that there is a cyclic dependency it2 -> us -> it. + kWarning() << "Removing a cyclic dependency:" << + it2->object->metaObject()->className() << "->" << + this_class << "->" << + observer_class; + + // remove the cycle + it2->dependency = 0; + } + } + + // done + return; + } + } + } + + // no dependency + onChange(obj, method); +} + +void MasterSettings::sync() { + // store to file + QFile f(m_filename); + if (!f.open(QFile::WriteOnly | QFile::Text)) + kError() << "Cannot open configuration file for writing"; + else { + QTextStream stream(&f); + stream << node().ownerDocument().toString(); + } + +} + +void MasterSettings::objectDestroyed(QObject* obj) { + for (ObserverList::iterator it = m_observers.begin(); + it != m_observers.end();) { + if (it->object == obj) { + it = m_observers.erase(it); + } + else { + ++it; + } + } +} + +void MasterSettings::changed() { + foreach (Observer& observer, m_observers) { + observer.object->metaObject()->invokeMethod(observer.object, observer.method, Qt::DirectConnection); + } + sync(); +} + +QString MasterSettings::filename() const { + return m_filename; +} + +MasterSettings& settings() { + static MasterSettings static_settings; + return static_settings; +} + + diff --git a/src/mastersettings.h b/src/mastersettings.h new file mode 100644 index 0000000..6a0fa1c --- /dev/null +++ b/src/mastersettings.h @@ -0,0 +1,87 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MASTERSETTINGS_H +#define MASTERSETTINGS_H + +#include +#include +#include +#include + +#include "settings.h" + +class MasterSettings : public QObject + , public Settings { +Q_OBJECT +public: + enum LookupType { + PathLookup, + StandardDirsLookup + }; +private: + struct Observer { + QObject* object; + const char* dependency; + const char* method; + + Observer(QObject* obj, const char* meth, const char* dep) + : object(obj) + , dependency(dep) + , method(meth) { } + }; + typedef std::list ObserverList; + + ObserverList m_observers; + QString m_filename; + mutable QDomDocument m_doc; + + void setupObserver(Observer&); +private Q_SLOTS: + void objectDestroyed(QObject* o); + +protected: + virtual QDomElement node() const; + +public: + MasterSettings(const QString& file, LookupType lookup = StandardDirsLookup); + + /** + * Bind to the local configuration file. + */ + MasterSettings(); + ~MasterSettings(); + + /** + * Set up an observer to be notified whenever settings change. + * \param observer The object to be notified. + * \param method The callback method for the notification, specified as a C string. + * \note @a method should be just the method name (no parentheses, no SLOT macro). + */ + void onChange(QObject* observer, const char* method); + + /** + * Set up an observer to be notified whenever settings change. + * \param observer The object to be notified. + * \param method The callback method for the notification, specified as a C string. + * \param dependency A C string representing a type (inheriting from QObject). Objects + * of this type will be notified before @a observer. + * \note @a method should be just the method name (no parentheses, no SLOT macro). + */ + void onChange(QObject* observer, const char* method, const char* dependency); + + void changed(); + void sync(); + QString filename() const; +}; + +MasterSettings& settings(); + +#endif // MASTERSETTINGS_H diff --git a/src/movefactory.h b/src/movefactory.h new file mode 100644 index 0000000..b309a57 --- /dev/null +++ b/src/movefactory.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MOVEFACTORY_H +#define MOVEFACTORY_H + +#include "usermove.h" + +template +struct MoveFactory { + static typename Variant::Move createNormalMove(const NormalUserMove& move) { + return typename Variant::Move(move.from, move.to, + static_cast(move.promotionType)); + } + + static typename Variant::Move createDropMove(const DropUserMove& move) { + return Variant::Move::createDropMove(move.m_pool, move.m_piece_index, move.m_to); + } + + static NormalUserMove toNormal(const typename Variant::Move& move) { + return NormalUserMove(move.from, move.to); + } +}; + +#endif // MOVEFACTORY_H diff --git a/src/movelist.cpp b/src/movelist.cpp new file mode 100644 index 0000000..5eca3ea --- /dev/null +++ b/src/movelist.cpp @@ -0,0 +1,1285 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "movelist_widget.h" +#include "movelist_table.h" +#include "movelist_notifier.h" +#include "movelist_p.h" +#include "mastersettings.h" +#include "pref_theme.h" + +namespace MoveList { + +#define MARGIN_LEFT 2 +#define MARGIN_RIGHT 4 +#define MARGIN_TOP 1 +#define MARGIN_BOTTOM 0 +#define MIDDLE_PAD 3 +#define COMMENT_INDENTATION 4 +#define VAR_INDENTATION 16 +#define BORDER_LEFT 3 +#define BORDER_RIGHT 3 +#define BORDER_TOP 3 +#define BORDER_BOTTOM 3 +#define MIN_COL_WIDTH 5.0 + +#define DEFAULT_ANIMATION_TIME 350.0 + +//BEGIN FancyItem-------------------------------------------------------------- + +bool FancyItem::showing() { + return !(time_opacity!=-1 && target_opacity == 0) && + ((time_opacity!=-1 && target_opacity == 255) || (visible() && opacity() == 255)); +} + +void FancyItem::appear() { + if((time_opacity!=-1 && target_opacity == 255) + || (visible() && opacity() == 255)) + return; + + Widget *m = dynamic_cast(topLevelCanvas()); + if(!m->m_settings->anim_enabled || !m->m_settings->anim_hideshow) + show(); + else { + old_opacity = 0; + target_opacity = 255; + time_opacity = m->layout_time; + setAnimated(true); + } +} + +void FancyItem::disappear() { + if((time_opacity!=-1 && target_opacity == 0) + || !visible() || opacity() == 0) + return; + + Widget *m = dynamic_cast(topLevelCanvas()); + setHighlight(false); + if(!m->m_settings->anim_enabled || !m->m_settings->anim_hideshow) + hide(); + else { + old_opacity = 255; + target_opacity = 0; + time_opacity = m->layout_time; + setAnimated(true); + } +} + +void FancyItem::goTo(QPoint p) { + if((time_pos!=-1 && target_pos == p) || (time_pos==-1 && pos() == p)) + return; + + Widget *m = dynamic_cast(topLevelCanvas()); + if(!m->m_settings->anim_enabled || !m->m_settings->anim_moving) + moveTo(p); + else { + old_pos = pos(); + target_pos = p; + time_pos = m->layout_time; + setAnimated(true); + } +} + +void FancyItem::setHighlight(bool h) { + if(highlighted == h) + return; + + Widget *m = dynamic_cast(topLevelCanvas()); + if(!m->m_settings->anim_enabled || !m->m_settings->anim_highlight) { + curr_highlight = h ? 255 : 0; + highlighted = h; + changed(); + } + else { + old_highlight = highlighted ? 255 : 0; + target_highlight = h ? 255 : 0; + highlighted = h; + time_highlight = m->mSecs(); + setAnimated(true); + } +} + +void FancyItem::advance(int time) { + Widget *m = dynamic_cast(topLevelCanvas()); + if(time_highlight != -1) { + float fact = (time - time_highlight) / m->m_settings->anim_time; + if(fact >= 1.0) { + curr_highlight = target_highlight; + time_highlight = -1; + } + else + curr_highlight = int(target_highlight*fact + old_highlight*(1-fact)); + changed(); + } + if(time_opacity != -1) { + float fact = (time - time_opacity) / m->m_settings->anim_time; + if(fact >= 1.0) { + setOpacity(target_opacity); + setVisible(target_opacity != 0); + time_opacity = -1; + } + else { + setOpacity( int(target_opacity*fact + old_opacity*(1-fact)) ); + setVisible(true); + } + } + if(time_pos != -1) { + float fact = (time - time_pos) / m->m_settings->anim_time; + if(fact >= 1.0) { + moveTo(target_pos); + time_pos = -1; + } + else { + moveTo( int(target_pos.x()*fact + old_pos.x()*(1-fact)+0.5), + int(target_pos.y()*fact + old_pos.y()*(1-fact)+0.5)); + } + } + if(canStop()) { + setAnimated(false); + } +} + +bool FancyItem::layered() const { + return false; +} + +//END FancyItem---------------------------------------------------------------- + + +//BEGIN Brace------------------------------------------------------------------ + +void Brace::setHeight(int h) { + if(h<0) h=0; + if((animated() && target_height == h) || height == h) + return; + + Widget *m = dynamic_cast(topLevelCanvas()); + if(!m->m_settings->anim_enabled || !m->m_settings->anim_moving) { + height = h; + changed(); + } + else { + old_height = height; + target_height = h; + time_height = m->layout_time; + if(visible()) + setAnimated(true); + } +} + +void Brace::advance(int time) { + if(time_height != -1) { + Widget *m = dynamic_cast(topLevelCanvas()); + float fact = (time - time_height) / m->m_settings->anim_time; + if(fact >= 1.0) { + height = target_height; + time_height = -1; + } + else + height = int(target_height*fact + old_height*(1-fact) + 0.5); + changed(); + } + FancyItem::advance(time); +} + +void Brace::paint (QPainter *p) { + Widget *m = dynamic_cast(topLevelCanvas()); + if(height < m->entry_size) + return; + QPointF p1((pos().x()*2+width)/2.0, (pos().y()*2+m->entry_size)/2.0); + QPointF p2((pos().x()*2+width)/2.0, (pos().y()*2+height*2-m->entry_size)/2.0); + p->save(); + QPen q; + if(depth % 2) { + p->setBrush(QColor(255,192,224)); + q = QColor(128,0,64); + } + else { + p->setBrush(QColor(192,255,224)); + q = QColor(0,128,64); + } + q.setWidth(2); + p->setPen(q); + p->setRenderHint(QPainter::Antialiasing); + int s = std::min(m->entry_size, width); + float cs1 = (0.4 + 0.2*(curr_highlight/255.0)) * s; + float cs2 = 0.2 * s; + + p->drawLine(p1,p2); + p->drawEllipse(QRectF(-cs1/2,-cs1/2,cs1,cs1).translated(p1)); + p->setBrush(p->pen().color()); + p->drawEllipse(QRectF(-cs2/2,-cs2/2,cs2,cs2).translated(p2)); + p->restore(); +} + +QRect Brace::rect () const { + return QRect(pos(), QSize(width, height)); +} + +//END Brace-------------------------------------------------------------------- + + +//BEGIN Text------------------------------------------------------------------- + +void Text::paint (QPainter *p) { + Widget *m = dynamic_cast(topLevelCanvas()); + if(curr_highlight != 0) { + p->setBrush(QColor(192,224,208, curr_highlight)); + p->setPen(QColor(64,128,96, curr_highlight)); + p->drawRect(rect().adjusted(0,0,-1,-1)); + } + p->setFont(selected ? m->m_settings->sel_mv_font : m->m_settings->mv_font); + p->setPen(selected ? m->m_settings->select_color : Qt::black); + p->drawText(pos()+QPoint(MARGIN_LEFT, MARGIN_TOP+m->m_settings->mv_fmetrics.ascent()), text); +} + +QRect Text::rect () const { + return QRect(pos(), QSize(width, height)); +} + +void Text::doUpdate () { + if(!needs_update) + return; + + Widget *m = dynamic_cast(topLevelCanvas()); + width = (selected ? m->m_settings->sel_mv_fmetrics + : m->m_settings->mv_fmetrics).boundingRect(text).right() + + MARGIN_LEFT + MARGIN_RIGHT; + height = m->entry_size; + + needs_update = false; + changed(); +} + +//END Text--------------------------------------------------------------------- + + +//BEGIN Comment---------------------------------------------------------------- + +void Comment::paint (QPainter *p) { + Widget *m = dynamic_cast(topLevelCanvas()); + + if(curr_highlight != 0) { + p->setBrush(QColor(255,255,255, curr_highlight)); + p->setPen(QColor(192,192,192, curr_highlight)); + p->drawRect(rect().adjusted(0,0,-1,-1)); + } + p->setFont(m->m_settings->comm_font); + p->setPen(m->m_settings->comment_color); + p->drawText(pos().x() + MARGIN_RIGHT, + pos().y(), + width - MARGIN_LEFT - MARGIN_RIGHT, 9999, + Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap, text); +} + +QRect Comment::rect () const { + return QRect(pos(), QSize(width, height)); +} + +void Comment::doUpdate () { + if(!needs_update) + return; + + Widget *m = dynamic_cast(topLevelCanvas()); + QPoint dest = ((time_pos != -1) ? target_pos : pos()); + width = std::max(m->width() - dest.x(), m->entry_size); + height = m->m_settings->comm_fmetrics.boundingRect(0,0,width - MARGIN_LEFT - MARGIN_RIGHT, 99999, + Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap, text).height() + + MARGIN_TOP + MARGIN_BOTTOM; + + needs_update = false; + changed(); +} + +//END Comment------------------------------------------------------------------ + + +//BEGIN Entry------------------------------------------------------------------ + +void Entry::paint (QPainter *p) { + Widget *m = dynamic_cast(topLevelCanvas()); + if(curr_highlight != 0) { + p->setBrush(QColor(192,224,255, curr_highlight)); + p->setPen(QColor(64,96,128, curr_highlight)); + p->drawRect(rect().adjusted(0,0,-1,-1)); + } + p->setPen(selected ? m->m_settings->select_color : Qt::black); + int x = pos().x()+MARGIN_LEFT; + int y = pos().y()+MARGIN_TOP+m_ascent; + + p->setRenderHint(QPainter::TextAntialiasing); + QFont tf = selected ? m->m_settings->sel_mv_font : m->m_settings->mv_font; + QFontMetrics& fm = selected ? m->m_settings->sel_mv_fmetrics : m->m_settings->mv_fmetrics; + QRect r(0,0,0,0); + + for(int i=0;i<(int)move.size();i++) { + if(move[i].m_type == MovePart::Text) { + p->setFont(tf); + p->drawText(QPoint(x+r.width(), y), move[i].m_string); + QRect b = fm.boundingRect(move[i].m_string); + r |= b.translated(r.width()-b.x(), 0); + } + else if(move[i].m_type == MovePart::Figurine) { + ::Loader::Glyph g = m->m_loader.getValue< ::Loader::Glyph>(move[i].m_string); + QFont font = g.fontValid() ? g.font() : tf; + p->setFont(font); + p->drawText(QPoint(x+r.width(), y), g.str()); + QFontMetrics fi(font); + QRect b = fi.boundingRect(g.str()); + r |= b.translated(r.width()-b.x(), 0); + } + } +} + +QRect Entry::rect () const { + return m_rect.translated(pos().x()+MARGIN_LEFT, pos().y()+MARGIN_TOP+m_ascent); +} + +void Entry::doUpdate () { + if(!needs_update) + return; + + Widget *m = dynamic_cast(topLevelCanvas()); + QFont tf = selected ? m->m_settings->sel_mv_font : m->m_settings->mv_font; + QFontMetrics& fm = selected ? m->m_settings->sel_mv_fmetrics : m->m_settings->mv_fmetrics; + m_ascent = m->m_settings->mv_fmetrics.ascent(); + m_rect = QRect(0,0,0,0); + + for(int i=0;i<(int)move.size();i++) { + if(move[i].m_type == MovePart::Text) { + QRect b = fm.boundingRect(move[i].m_string); + m_rect |= b.translated(m_rect.width()-b.x(), 0); + } + else if(move[i].m_type == MovePart::Figurine) { + ::Loader::Glyph g = m->m_loader.getValue< ::Loader::Glyph>(move[i].m_string); + QFontMetrics fi(g.fontValid() ? g.font() : tf); + QRect b = fi.boundingRect(g.str()); + m_rect |= b.translated(m_rect.width()-b.x(), 0); + } + } + m_rect = QRect(m_rect.x(),m_rect.y(),m_rect.width()+MARGIN_RIGHT,m_rect.height()); + + needs_update = false; + changed(); +} + +//END Entry-------------------------------------------------------------------- + + +//BEGIN Settings--------------------------------------------------------------- + +void Settings::load() { + ::Settings s = settings().group("move-list"); + ::Settings s_anim = s.group("animations"); + + anim_enabled = s.group("animations").flag("enabled", true); + anim_moving = s_anim.group("moving").flag("enabled", true); + anim_hideshow = s_anim.group("hideshow").flag("enabled", true); + anim_highlight = s_anim.group("highlight").flag("enabled", true); + anim_speed = s_anim["speed"] | 16; + anim_time = DEFAULT_ANIMATION_TIME*pow(5.0, 1.0 - anim_speed/16.0); + anim_smoothness = s_anim["smoothness"] | 16; + select_color = s["select-color"] | QColor(Qt::red); + comment_color = s["comment-color"] | QColor(64,64,64); + mv_font = QApplication::font(); + if ((use_mv_font = s.group("moves-font").flag("enabled", true))) + mv_font = s["moves-font"] | mv_font; + sel_mv_font = mv_font; + sel_mv_font.setBold(true); + comm_font = QApplication::font(); + comm_font.setItalic(true); + if ((use_comm_font = s.group("comment-font").flag("enabled", true))) + comm_font = s["CommentFont"] | comm_font; + mv_fmetrics = QFontMetrics(mv_font); + sel_mv_fmetrics = QFontMetrics(sel_mv_font); + comm_fmetrics = QFontMetrics(comm_font); +} + +void Settings::save() { + ::Settings s = settings().group("move-list"); + ::Settings s_anim = s.group("animations"); + + s.group("animations").setFlag("enabled", anim_enabled); + s_anim.group("moving").setFlag("enabled", anim_moving); + s_anim.group("hideshow").setFlag("enabled", anim_hideshow); + s_anim.group("highlight").setFlag("enabled", anim_highlight); + s_anim["speed"] = anim_speed; + s_anim["smoothness"] = anim_smoothness; + s["select-color"] = select_color; + s["comment-color"] = comment_color; + s.group("moves-font").flag("enabled", use_mv_font); + s["moves-font"] = mv_font; + s.group("comment-font").flag("enabled", use_comm_font); + s["comment-font"] = comm_font; +} + +//END Settings----------------------------------------------------------------- + + +//BEGIN Widget----------------------------------------------------------------- + +Widget::Widget(QWidget *parent, Table *o) +: KGameCanvasWidget(parent) +, curr_highlight(-1) +, curr_selected(-1) +, comment_editor(NULL) +, layout_pending(false) +, layout_style(0) +, layout_goto_selected(false) +, layout_width_changed(true) +, layout_must_relayout(true) +, notifier(NULL) +, owner_table(o) +, m_settings(new Settings) { + + resize(50,100); + setSizePolicy ( QSizePolicy::MinimumExpanding, QSizePolicy::Minimum ); + + setMouseTracking(true); + settingsChanged(); + reset(); +} + +Widget::~Widget() { + delete m_settings; +} + +void Widget::reset() { + curr_highlight = Index(-1); + curr_selected = Index(-1); + if(comment_editor) { + delete comment_editor; + comment_editor = NULL; + } + + DecoratedMove mv; + mv.push_back(MovePart(QString("Mainline:"))); + history.clear(); + history.push_back( EntryPtr(new Entry(-1, mv, Index(0), this)) ); + + layout(); +} + +EntryPtr Widget::fetch(const Index& ix) { + int at; + History *vec = fetchRef(ix, &at); + return vec ? (*vec)[at] : EntryPtr(); +} + +History* Widget::fetchRef(const Index& ix, int* idx) { + if(ix.num_moves >= (int)history.size() || ix.num_moves < 0 ) + return NULL; + + History* aretv = &history; + EntryPtr retv = history[ix.num_moves]; + if(idx) *idx = ix.num_moves; + + for(int i=0; i<(int)ix.nested.size();i++) { + Variations::iterator it = retv->variations.find(ix.nested[i].variation); + if(it == retv->variations.end() || ix.nested[i].num_moves >= (int)it->second.size() + || ix.nested[i].num_moves < 0 ) + return NULL; + + aretv = &it->second; + retv = it->second[ix.nested[i].num_moves]; + if(idx) *idx = ix.nested[i].num_moves; + } + return aretv; +} + +Notifier* Widget::getNotifier() { + return notifier; +} + +void Widget::setNotifier(Notifier* n, bool detach_prev){ + if(detach_prev && notifier && notifier != n) + notifier->onDetachNotifier(); + notifier = n; +} + +void Widget::settingsChanged() { + m_settings->load(); + + setAnimationDelay( int(70.0*pow(10.0, -m_settings->anim_smoothness/32.0)) ); + + entry_size = m_settings->mv_fmetrics.height()+MARGIN_TOP+MARGIN_BOTTOM; + owner_table->m_scroll_area->setMinimumSize(entry_size*6, entry_size*9); + + m_loader.setSize(m_settings->mv_font.pointSize()); + + layout_must_relayout = true; + layout(); +} + +void Widget::mouseMoveEvent ( QMouseEvent * event ) { + KGameCanvasItem *i = itemAt(event->pos()); + Entry* e = i ? dynamic_cast(i) : NULL; + Text* f = i ? dynamic_cast(i) : NULL; + Brace* b = i ? dynamic_cast(i) : NULL; + Comment* c = i ? dynamic_cast(i) : NULL; + EntryPtr olde = fetch(curr_highlight); + f = f && f->type == 1 ? f : NULL; + + int oldtype = curr_highlight_type; + + if(e) { + if(curr_highlight == e->index && curr_highlight_type==-1) + return; + e->setHighlight(true); + curr_highlight = e->index; + curr_highlight_type = -1; + } + else if(f) { + if(curr_highlight == f->entry->index && curr_highlight_type==-2) + return; + f->setHighlight(true); + curr_highlight = f->entry->index; + curr_highlight_type = -2; + } + else if(c) { + if( (curr_highlight==c->entry->index) && + ((c->variation==-1) ? (curr_highlight_type == -3) : + (curr_highlight_type == -1000-c->variation) ) ) + return; + c->setHighlight(true); + curr_highlight = c->entry->index; + curr_highlight_type = (c->variation==-1) ? -3 : (-1000-c->variation); + } + else if(b) { + if(curr_highlight == b->entry->index && curr_highlight_type==b->variation) + return; + b->setHighlight(true); + curr_highlight = b->entry->index; + curr_highlight_type = b->variation; + } + else + curr_highlight = Index(-1); + + if(olde) { + if(oldtype==-1) + olde->setHighlight(false); + else if(oldtype==-2 && olde->fregna) + olde->fregna->setHighlight(false); + else if(oldtype==-3 && olde->comment) + olde->comment->setHighlight(false); + else if(oldtype<=-1000 && olde->vcomments.count(-1000-oldtype)==1) + olde->vcomments[-1000-oldtype]->setHighlight(false); + else if(oldtype>=0 && olde->braces.count(oldtype)==1) + olde->braces[oldtype]->setHighlight(false); + } +} + +void Widget::startEditing(const Index& i, int v) { + stopEditing(); + + EntryPtr e = fetch(i); + if(!e) { + kError() << "Invalid index " << i; + return; + } + + CommentPtr c = v == -1 ? e->comment : (e->vcomments.count(v) ? + e->vcomments[v] : CommentPtr()); + QRect rect; + if(c) + rect = c->rect(); + else { + TextPtr n = e->number; + if(!n && i > Index(0)) + n = fetch(i.prev())->number; + int x = (n ? n->pos().x() : e->pos().x()) + ((v == -1) ? 0 : VAR_INDENTATION); + + rect = QRect(x, e->pos().y()+entry_size, width()-x, 0); + } + + edited_comment_variation = v; + edited_comment = boost::weak_ptr(e); + comment_editor = new QTextEdit(c ? c->text : QString(), this); + comment_editor->setGeometry(rect.adjusted(0,0,0,entry_size*3)); + comment_editor->show(); + comment_editor->setFocus(Qt::MouseFocusReason); + comment_editor->installEventFilter(this); +} + +bool Widget::eventFilter(QObject *obj, QEvent *event) { + if(obj == comment_editor && event->type() == QEvent::FocusOut ) { + stopEditing(); + return true; + } + return false; +} + +void Widget::stopEditing() { + EntryPtr e = edited_comment.lock(); + if(e) { + if(comment_editor && notifier) { + QString c = comment_editor->toPlainText(); + c.replace(QRegExp("(?:[ \t]\r?\n\r?|\r?\n\r?[ \t]|\r?\n\r?)"), " "); + if(edited_comment_variation == -1) + notifier->onUserSetComment(e->index, c); + else + notifier->onUserSetVComment(e->index, edited_comment_variation, c); + } + edited_comment.reset(); + } + if(comment_editor) { + comment_editor->deleteLater(); + comment_editor = NULL; + } +} + +void Widget::mousePressEvent ( QMouseEvent * event ) { + stopEditing(); + + KGameCanvasItem *i = itemAt(event->pos()); + if(!i) + return; + + Text *t = dynamic_cast(i); + if(t && t->type == 1) { + Entry *e = t->entry; + if(e->hide_next) { + e->hide_next = false; + e->expanded = true; + } + else + e->expanded = !e->expanded; + layout(); + return; + } + + Brace *b = dynamic_cast(i); + if(b) { + if(event->button() == Qt::LeftButton) { + Entry* e = b->entry; + EntryPtr first = e->variations[b->variation][0]; + first->hide_next = !first->hide_next; + layout(); + } + else if(event->button() == Qt::RightButton) { + QAction *a; + QMenu m(this); + a = m.addAction(KIcon("pen"), "&Set comment"); + a->setData("comment"); + m.addSeparator(); + a = m.addAction(KIcon(), "&Promote variation"); + a->setData("promote"); + a = m.addAction(KIcon("edit-delete"), "&Remove variation"); + a->setData("remove"); + boost::weak_ptr ewptr = boost::weak_ptr(fetch(b->entry->index)); + int v = b->variation; + + a = m.exec(event->globalPos()); + + /* beware, here, after exec, e could be a dangling pointer */ + EntryPtr eptr = ewptr.lock(); + if(a && notifier && eptr && eptr->variations.count(v)) { + if(a->data() == "comment") + startEditing(eptr->index, v); + else if(a->data() == "promote") + notifier->onUserPromoteVariation(eptr->index.next(v)); + else if(a->data() == "remove") + notifier->onUserRemoveVariation(eptr->index.next(v)); + } + } + return; + } + + Comment *c = dynamic_cast(i); + if(c) { + startEditing(c->entry->index, c->variation); + return; + } + + Entry *e = dynamic_cast(i); + if(e) { + if(event->button() == Qt::LeftButton) { + if(notifier) + notifier->onUserSelectMove(e->index); + } + else if(event->button() == Qt::RightButton) { + QAction *a; + QMenu m(this); + a = m.addAction(KIcon("pen"), "&Set comment"); + a->setData("comment"); + a = m.addAction(KIcon("eraser"), "&Clear variations"); + a->setEnabled(!e->variations.empty()); + a->setData("clear"); + a = m.addAction(KIcon("cut"), "&Truncate"); + a->setEnabled(fetch(e->index.next())); + a->setData("truncate"); + m.addSeparator(); + a = m.addAction(KIcon(), "&Promote variation"); + a->setEnabled(e->index.nested.size()); + a->setData("promote"); + a = m.addAction(KIcon("edit-delete"), "&Remove variation"); + a->setEnabled(e->index.nested.size()); + a->setData("remove"); + boost::weak_ptr ewptr = boost::weak_ptr(fetch(e->index)); + + a = m.exec(event->globalPos()); + + /* beware, here, after exec, e could be a dangling pointer */ + EntryPtr eptr = ewptr.lock(); + if(a && notifier && eptr) { + if(a->data() == "comment") + startEditing(eptr->index, -1); + else if(a->data() == "clear") + notifier->onUserClearVariations(eptr->index); + else if(a->data() == "truncate") + notifier->onUserTruncate(eptr->index); + else if(a->data() == "promote") + notifier->onUserPromoteVariation(eptr->index); + else if(a->data() == "remove") + notifier->onUserRemoveVariation(eptr->index); + } + } + return; + } +} + +void Widget::mouseReleaseEvent ( QMouseEvent * /*event*/ ) { + +} + +void Widget::resizeEvent ( QResizeEvent * event ) { + stopEditing(); + if(event->size().width() != event->oldSize().width()) { + layout_width_changed = true; + layout(); + } +} + +void Widget::layout() { + if(layout_pending) + return; + + layout_pending = true; + QTimer::singleShot( 0, this, SLOT(doLayout()) ); +} + +void Widget::doLayout() { + layout_time = mSecs(); + layout_pending = false; + layout_max_width = 0; + //kDebug() << "layout_must_relayout = " << layout_must_relayout; + int h = layoutHistory(history, BORDER_LEFT, BORDER_TOP, -1, 0, 0, true); + + QSize s(std::max(entry_size*7, layout_max_width+BORDER_RIGHT), + std::max(entry_size*10, h+BORDER_BOTTOM) ); + setMinimumSize(s); + + layout_width_changed = false; + layout_must_relayout = false; + if(layout_goto_selected) { + EntryPtr e = fetch(curr_selected); + if(e) + owner_table->m_scroll_area->ensureVisible( int(e->pos().x() + e->m_rect.width()*0.5), + int(e->pos().y() + e->m_rect.height()*0.5) ); + layout_goto_selected = false; + } +} + +int Widget::layoutHistory(History& array, int at_x, int at_y, + int a_prev_turn, int mv_num, int sub_mv_num, bool visible) { + int flow_y = at_y; + int flow_x = at_x; + int nflow_x = at_x; + int col_num = 0; + int prev_turn = a_prev_turn; + + for(int i=0;i<(int)array.size();i++) { + EntryPtr e = array[i]; + + /* if this is not visible, hide the item and hide all the number/fregna tags */ + if(!visible) { + e->disappear(); + if(e->number) + e->number->disappear(); + if(e->fregna) + e->fregna->disappear(); + if(e->comment) + e->comment->disappear(); + + /* hide the subvariations */ + for(Variations::iterator it = e->variations.begin(); it != e->variations.end(); ++it) + layoutHistory(it->second, 0, 0, e->move_turn, mv_num, sub_mv_num, false); + for(Braces::iterator it = e->braces.begin(); it != e->braces.end(); ++it) + it->second->disappear(); + for(VComments::iterator it = e->vcomments.begin(); it != e->vcomments.end(); ++it) + it->second->disappear(); + mv_num++; + continue; + } + + /* adjust the position if this is paired on the right */ + bool draw_num = false; + + { + if(e->move_turn != prev_turn) { + mv_num++; + sub_mv_num = 0; + } + else + sub_mv_num++; + + if(layout_style==0) { + if(e->move_turn == 0 || i==0 || array[i-1]->childs_height != 0) { + if(mv_num>=1 && (e->move_turn != prev_turn || i==0 || array[i-1]->childs_height != 0)) { + draw_num = true; + flow_x = at_x; + } + else + flow_x = (mv_num>=1) ? nflow_x : at_x; + } + else { + if(e->move_turn != prev_turn) { + flow_x = std::max(flow_x + MIDDLE_PAD, int(MIN_COL_WIDTH*entry_size)); + flow_y -= entry_size; + } + else + flow_x = int(MIN_COL_WIDTH*entry_size); + } + } + else { + if(e->move_turn != prev_turn || i==0 || array[i-1]->childs_height != 0) { + col_num = 0; + flow_x = at_x; + if(mv_num>=1) + draw_num = true; + } + else if(col_num == layout_style) { + col_num = 0; + flow_x = nflow_x; + } + else { + flow_y -= entry_size; + flow_x = std::max(flow_x + MIDDLE_PAD, + at_x + col_num*int(MIN_COL_WIDTH*entry_size)); + } + } + } + + col_num++; + + /* update the number */ + if(draw_num) { + TextPtr& n = e->number; + if(!n) { + n = TextPtr(new Text(e.get(), 0, this)); + if(layout_style==0) + n->text = QString::number((mv_num+1)/2)+(mv_num&1 ? "." : ". ..."); + else + n->text = QString::number(mv_num)+ + (sub_mv_num ? "+"+QString::number(sub_mv_num) : QString())+"."; + n->needs_update = true; + } + else if( !n->showing() || layout_must_relayout) + n->needs_update = true; + + /* Mh, the number should never change, only appear disappear. + should this change, add here the code to enable number changes. */ + QPoint dest(flow_x, flow_y); + + if(n->pos() != dest) + if(n->visible()) + n->goTo(dest); + else + n->moveTo(dest); + n->doUpdate(); + n->appear(); + + flow_x += n->width; + nflow_x = flow_x; + } + else if(e->number) + e->number->disappear(); + + + /* update the entry */ + QPoint dest(flow_x, flow_y); + if(e->pos() != dest) + if(e->visible()) + e->goTo(dest); + else + e->moveTo(dest); + if( !e->showing() || layout_must_relayout) + e->needs_update = true; + e->doUpdate(); + e->appear(); + e->childs_height = 0; + flow_x += e->m_rect.width(); + + + /* Update the fregna. The fregna is visible if there are subvariations in this + entry, or if this entry is the first one of a variation where the remaining + entries are hidden and that contains the current position */ + bool expandable = !e->variations.empty() || e->comment; + bool sel = (e->hide_next && e->indexexpanded && expandable && + e->indexindex.next()<=curr_selected)); + if(expandable || sel ) { + if(!e->fregna) + e->fregna = TextPtr(new Text(e.get(), 1, this)); + + /* update the data, if needed */ + TextPtr f = e->fregna; + const char *text = (sel||!e->expanded||e->hide_next) ? "[+]" : "[-]"; + if(f->text != text || f->selected != sel) { + f->text = text; + f->selected = sel; + f->needs_update = true; + } + else if( !f->showing() || layout_must_relayout) + f->needs_update = true; + + QPoint dest(flow_x, flow_y); + + if(f->pos() != dest) + if(f->visible()) + f->goTo(QPoint(flow_x, flow_y)); + else + f->moveTo(QPoint(flow_x, flow_y)); + f->doUpdate(); + f->appear(); + + flow_x += f->width; + } + else if(e->fregna) + e->fregna->disappear(); + + /* update the flow information */ + flow_y += entry_size; + layout_max_width = std::max(flow_x, layout_max_width); + int prev_pos = flow_y; + + /* update the comment */ + if(e->comment) { + CommentPtr c = e->comment; + + if(e->expanded && !e->hide_next) { + QPoint dest(at_x + COMMENT_INDENTATION, flow_y); + + if(c->pos() != dest ) { + if(c->visible()) + c->goTo(dest); + else + c->moveTo(dest); + c->needs_update = true; + } + else if( !c->showing() || layout_width_changed || layout_must_relayout) + c->needs_update = true; + c->doUpdate(); + c->appear(); + flow_y += c->height; + } + else + c->disappear(); + } + + /* update the variations */ + for(Variations::iterator it = e->variations.begin(); it != e->variations.end(); ++it) { + int old_pos = flow_y; + + /* update the variation's comment */ + if(e->vcomments.count(it->first)) { + CommentPtr c = e->vcomments[it->first]; + + if(e->expanded && !e->hide_next) { + QPoint dest(at_x + VAR_INDENTATION + COMMENT_INDENTATION, flow_y); + + if( !c->showing() || layout_must_relayout) + c->needs_update = true; + if(c->pos() != dest) + if(c->visible()) + c->goTo(dest); + else + c->moveTo(dest); + c->doUpdate(); + c->appear(); + flow_y += c->height; + } + else + c->disappear(); + } + + /* layout the variation */ + flow_y = layoutHistory(it->second, at_x + VAR_INDENTATION, flow_y, + e->move_turn, mv_num, sub_mv_num, e->expanded && !e->hide_next); + + /* update the brace of the variation */ + BracePtr b = e->braces[it->first]; + if(e->expanded && !e->hide_next) { + b->depth = e->index.nested.size(); + b->setHeight((it->second.size() && it->second[0]->hide_next) ? entry_size : flow_y - old_pos); + b->width = VAR_INDENTATION; + if(b->visible()) + b->goTo(QPoint(at_x, old_pos)); + else + b->moveTo(QPoint(at_x, old_pos)); + b->appear(); + } + else + b->disappear(); + } + + e->childs_height = flow_y - prev_pos; + + if(e->hide_next) + visible = false; + prev_turn = e->move_turn; + } + return flow_y; +} + +QPixmap Widget::getPixmap(const QString& s, bool selected) { + QString k = selected ? s+"_sel":s; + if(loaded_pixmaps.contains(k)) + return loaded_pixmaps[k]; + + QString iconFile = KStandardDirs::locate("appdata", "piece_icons/" + s + ".png"); + QImage img(iconFile); + + if(selected) { + QPainter p(&img); + p.setCompositionMode(QPainter::CompositionMode_SourceAtop ); + p.fillRect(0,0,img.width(), img.height(), m_settings->select_color); + } + return loaded_pixmaps[k] = QPixmap::fromImage(img.scaled(m_settings->mv_fmetrics.ascent(), + m_settings->mv_fmetrics.ascent(), + Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); +} + +void Widget::setComment(EntryPtr e, int v, const QString& comment) { + if(comment.isEmpty()) { + if(v == -1) { + if(e->comment) + e->comment = CommentPtr(); + } + else { + if(e->vcomments.count(v)) + e->vcomments.erase(v); + } + } + else { + CommentPtr p; + + if(v == -1) { + if(!e->comment) + e->comment = CommentPtr(new Comment(e.get(), this)); + p = e->comment; + } + else { + if(!e->variations.count(v)) + return; + + if(!e->vcomments.count(v)) + p = e->vcomments[v] = CommentPtr(new Comment(e.get(), this, v)); + else + p = e->vcomments[v]; + } + + if(p->text == comment) + return; + p->text = comment; + p->needs_update = true; + } + + layout(); +} + +void Widget::setComment(const Index& index, const QString& comment) { + EntryPtr e = fetch(index); + if(!e) { + kError() << "Invalid index" << index; + return; + } + setComment(e, -1, comment); +} + +void Widget::setVComment(const Index& index, int v, const QString& comment) { + EntryPtr e = fetch(index); + if(!e || !e->variations.count(v)) { + kError() << "Invalid index" << index; + return; + } + setComment(e, v, comment); +} + +void Widget::setMove(const Index& index, + int turn, const QString& move, const QString& comment) { + DecoratedMove mv; +#if 1 + mv.push_back(MovePart(move)); +#else + //TODO: move this code in some other place, it really should not stay here + QRegExp reg("[KQRBNP]"); + int x = 0; + while(reg.indexIn(move, x) != -1) { + if(reg.pos() > x) + mv.push_back(MovePart(MoveText, move.mid(x, reg.pos()-x))); + mv.push_back(MovePart(MovePixmap, reg.cap().toLower())); + x = reg.pos() + reg.matchedLength(); + } + if(xmove_turn = turn; + e->move = move; + e->needs_update = true; + setComment(e, -1, comment); + layout(); + return; + } + + int at; + History *vec = fetchRef(index.prev(), &at); + if(!vec) { + kError() << "Invalid index" << index; + return; + } + + if(index.nested.size() && index.nested.back().num_moves == 0) { + History var; + int v = index.nested.back().variation; + var.push_back(e = EntryPtr( new Entry(turn, move, index, this)) ); + (*vec)[at]->variations[v] = var; + (*vec)[at]->braces[v] = BracePtr( new Brace( (*vec)[at].get(), v, this) ); + } + else + vec->push_back(e = EntryPtr( new Entry(turn, move, index, this)) ); + + setComment(e, -1, comment); + e->hide(); + layout(); +} + +void Widget::remove(const Index& index) { + + if(index.atVariationStart() ) { + EntryPtr e = fetch(index.prev()); + if(!e) + return; + + int v = index.nested.back().variation; + if(!e->variations.count(v)) + return; + + e->variations.erase(v); + e->braces.erase(v); + e->vcomments.erase(v); + } + else { + int at; + History *vec = fetchRef(index, &at); + if(!vec) + return; + + while((int)vec->size() > at) + vec->pop_back(); + } + layout(); +} + +void Widget::fixIndices(const Index& ix) { + int at; + History *vec = fetchRef(ix, &at); + if(!vec) { + kError() << "Invalid index" << ix; + return; + } + Index index = ix; + for(int i=at;i<(int)vec->size();i++) { + EntryPtr e = (*vec)[i]; + e->index = index; + + for(Variations::const_iterator it = e->variations.begin(); + it != e->variations.end(); ++it) + fixIndices(index.next(it->first)); + index = index.next(); + } +} + +void Widget::promoteVariation(const Index& ix, int v) { + int at; + History *vec = fetchRef(ix, &at); + if(!vec) { + kError() << "Invalid index" << ix; + return; + } + + History vold = (*vec)[at]->variations[v]; + History vnew; + for(int i=at+1; i<(int)vec->size(); i++) + vnew.push_back((*vec)[i]); + while((int)vec->size()>at+1) + vec->pop_back(); + for(int i=0; i<(int)vold.size(); i++) + vec->push_back(vold[i]); + (*vec)[at]->variations[v] = vnew; + + Q_ASSERT((int)vec->size()>at+1); + (*vec)[at+1]->hide_next = false; + + fixIndices(ix.next()); + fixIndices(ix.next(v)); + + curr_selected = curr_selected.flipVariation(ix, v); + curr_highlight = curr_highlight.flipVariation(ix, v); + layout(); +} + +void Widget::select(const Index& index) { + if(curr_selected == index) + return; + EntryPtr e = fetch(index); + EntryPtr olde = fetch(curr_selected); + if(olde) { + olde->selected = false; + olde->needs_update = true; + } + if(e) { + e->selected = true; + e->needs_update = true; + layout_goto_selected = true; + } + curr_selected = index; + layout(); +} + +void Widget::setLoaderTheme(const ThemeInfo& theme) { + m_loader.setTheme(theme); +} + +//END Widget------------------------------------------------------------------- + +} //end namespace MoveList diff --git a/src/movelist_notifier.h b/src/movelist_notifier.h new file mode 100644 index 0000000..093c5fb --- /dev/null +++ b/src/movelist_notifier.h @@ -0,0 +1,62 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MOVELIST_NOTIFIER_H +#define MOVELIST_NOTIFIER_H + +#include "index.h" + +namespace MoveList { + class Widget; + + /** + * @class Notifier + * @brief An observer class for user actions on the movelist. + * + * This class can be registered to a MoveList::Widget to be notified + * of user interactions with the move list. + */ + class Notifier { + public: + virtual ~Notifier(){} + + /** the user clicked on a move */ + virtual void onUserSelectMove(const Index&) = 0; + + /** the user changed a comment */ + virtual void onUserSetComment(const Index&, QString) = 0; + + /** the user changed a comment at the start of a variation */ + virtual void onUserSetVComment(const Index&, int v, QString) = 0; + + /** the user wants to clear all the subvariations of the given index */ + virtual void onUserClearVariations(const Index&) = 0; + + /** the user wants to truncate the game at the given index */ + virtual void onUserTruncate(const Index&) = 0; + + /** the user wants to clear all the subvariations of the given entry */ + virtual void onUserPromoteVariation(const Index&) = 0; + + /** the user wants to remove the subvariations containing the given entry */ + virtual void onUserRemoveVariation(const Index&) = 0; + + /** the user wants to undo last change */ + virtual void onUserUndo() = 0; + + /** the user wants to redo last change */ + virtual void onUserRedo() = 0; + + /** this notifier has been kicked off by the movelist */ + virtual void onDetachNotifier() = 0; + }; +} + +#endif //MOVELIST_NOTIFIER_H diff --git a/src/movelist_p.h b/src/movelist_p.h new file mode 100644 index 0000000..e1aeee0 --- /dev/null +++ b/src/movelist_p.h @@ -0,0 +1,212 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MOVELIST_P_H +#define MOVELIST_P_H + +#include +#include +#include +#include +#include +#include +#include +#include "index.h" +#include "decoratedmove.h" +#include "kgamecanvas.h" + +namespace MoveList { + +typedef boost::shared_ptr EntryPtr; +typedef boost::shared_ptr BracePtr; +typedef boost::shared_ptr TextPtr; +typedef boost::shared_ptr CommentPtr; +typedef std::vector History; +typedef std::map Variations; +typedef std::map Braces; +typedef std::map VComments; + +class Settings { +public: + bool anim_enabled; + bool anim_moving; + bool anim_hideshow; + bool anim_highlight; + int anim_speed; + int anim_smoothness; + double anim_time; + QColor select_color; + QColor comment_color; + QString icons; + + bool use_mv_font; + bool use_comm_font; + QFont mv_font; + QFontMetrics mv_fmetrics; + QFont sel_mv_font; + QFontMetrics sel_mv_fmetrics; + QFont comm_font; + QFontMetrics comm_fmetrics; + + Settings() + : mv_fmetrics(QFont()) + , sel_mv_fmetrics(QFont()) + , comm_fmetrics(QFont()) {} + + void load(); + void save(); +}; + +class FancyItem : public KGameCanvasItem { +public: + int time_pos; + QPoint target_pos; + QPoint old_pos; + + int time_opacity; + int target_opacity; + int old_opacity; + + bool highlighted; + int curr_highlight; + int time_highlight; + int target_highlight; + int old_highlight; + + FancyItem(KGameCanvasAbstract* c = NULL) + : KGameCanvasItem(c) + , time_pos(-1) + , time_opacity(-1) + , highlighted(false) + , curr_highlight(0) + , time_highlight(-1) { } + bool showing(); + void appear(); + void disappear(); + void goTo(QPoint pos); + void setHighlight(bool h); + virtual bool canStop() { return time_highlight==-1 && time_pos==-1 && time_opacity==-1; } + virtual void advance(int time); + virtual bool layered() const; +}; + +class Brace : public FancyItem { +public: + int width; + int height; + int depth; + Entry* entry; + int variation; + int time_height; + int target_height; + int old_height; + + virtual void paint (QPainter *p); + virtual QRect rect () const; + void setHeight(int h); + virtual bool canStop() { return time_height==-1 && FancyItem::canStop(); } + virtual void advance(int time); + + Brace(Entry* e, int var, KGameCanvasAbstract* c = NULL) + : FancyItem(c) + , width(0) + , height(0) + , entry(e) + , variation(var) + , time_height(-1) { + } +}; + +class Text : public FancyItem { +public: + int width; + int height; + int type; + bool selected; + QString text; + Entry *entry; + bool needs_update; + + void doUpdate(); + virtual void paint (QPainter *p); + virtual QRect rect () const; + + Text(Entry* e, int t, KGameCanvasAbstract* c = NULL) + : FancyItem(c) + , width(0) + , height(0) + , type(t) + , selected(false) + , entry(e) + , needs_update(true) {} +}; + +class Comment : public FancyItem { +public: + int width; + int height; + QString text; + Entry *entry; + int variation; + bool needs_update; + + void doUpdate(); + virtual void paint (QPainter *p); + virtual QRect rect () const; + + Comment(Entry* e, KGameCanvasAbstract* c = NULL, int v = -1) + : FancyItem(c) + , width(0) + , height(0) + , entry(e) + , variation(v) + , needs_update(true) {} +}; + +class Entry : public FancyItem { +public: + bool expanded; + bool hide_next; + bool selected; + QRect m_rect; + int m_ascent; + int childs_height; + int move_turn; + DecoratedMove move; + Index index; + bool needs_update; + + TextPtr number; + TextPtr fregna; + CommentPtr comment; + + Variations variations; + Braces braces; + VComments vcomments; + + void doUpdate(); + virtual void paint (QPainter *p); + virtual QRect rect () const; + virtual bool canStop() { return time_highlight==-1 && FancyItem::canStop(); } + + Entry(int turn, const DecoratedMove& m, const Index& i, KGameCanvasAbstract* c = NULL) + : FancyItem(c) + , expanded(true) + , hide_next(false) + , selected(false) + , move_turn(turn) + , move(m) + , index(i) + , needs_update(true) {} +}; + +} + +#endif //MOVELIST_P_H diff --git a/src/movelist_table.cpp b/src/movelist_table.cpp new file mode 100644 index 0000000..c302459 --- /dev/null +++ b/src/movelist_table.cpp @@ -0,0 +1,136 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "mastersettings.h" +#include "movelist_textual.h" +#include "movelist_notifier.h" +#include "movelist_widget.h" +#include "movelist_table.h" + +namespace MoveList { + +//BEGIN Table------------------------------------------------------------------ + +Table::Table(QWidget* w) +: QWidget(w) { + setWindowTitle("Move List"); + + QVBoxLayout *vbox = new QVBoxLayout(this); + // here there used to be a QTabWidget + m_scroll_area = new QScrollArea(this); + m_movelist = new Widget(m_scroll_area, this); + m_scroll_area->setFocusPolicy(Qt::NoFocus); + m_scroll_area->setWidgetResizable(true); + m_scroll_area->setWidget(m_movelist); + vbox->addWidget(m_scroll_area); + + m_movelist_textual = NULL; + //m_movelist_textual = new Textual(tw); + //tw->addTab(m_movelist_textual->widget(), KIcon("html"), "&Html"); +} + +void Table::settingsChanged() { + if(m_movelist) m_movelist->settingsChanged(); + if(m_movelist_textual) m_movelist_textual->settingsChanged(); +} + +void Table::setLoaderTheme(const ThemeInfo& theme) { + if(m_movelist) m_movelist->setLoaderTheme(theme); + if(m_movelist_textual) m_movelist_textual->setLoaderTheme(theme); +} + +void Table::onUndo() { + if(m_movelist->notifier) + if(m_movelist) m_movelist->notifier->onUserUndo(); +} + +void Table::onRedo() { + if(m_movelist->notifier) + if(m_movelist) m_movelist->notifier->onUserRedo(); +} + +void Table::setComment(const Index& index, const QString& comment) { + if(m_movelist) m_movelist->setComment(index, comment); + if(m_movelist_textual) m_movelist_textual->setComment(index, comment); +} + +void Table::setVComment(const Index& index, int v, const QString& comment, bool confirm_promotion) { + if(!confirm_promotion) + if(m_movelist) m_movelist->setVComment(index, v, comment); + if(m_movelist_textual) m_movelist_textual->setVComment(index, v, comment); +} + +void Table::setMove(const Index& index, int turn, const DecoratedMove& move, + const QString& comment, bool confirm_promotion) { + if(!confirm_promotion) + if(m_movelist) m_movelist->setMove(index, turn, move, comment); + if(m_movelist_textual) m_movelist_textual->setMove(index, turn, move, comment); +} + +void Table::setMove(const Index& index, int turn, const QString& move, + const QString& comment, bool confirm_promotion) { + if(!confirm_promotion) + if(m_movelist) m_movelist->setMove(index, turn, move, comment); + if(m_movelist_textual) m_movelist_textual->setMove(index, turn, move, comment); +} + +void Table::remove(const Index& index, bool confirm_promotion) { + if(!confirm_promotion) + if(m_movelist) m_movelist->remove(index); + if(m_movelist_textual) m_movelist_textual->remove(index); +} + +void Table::Table::promoteVariation(const Index& ix, int v) { + if(m_movelist) m_movelist->promoteVariation(ix, v); + //m_movelist_textual->promoteVariation(index); +} + +void Table::select(const Index& index, bool confirm_promotion) { + if(!confirm_promotion) + if(m_movelist) m_movelist->select(index); + if(m_movelist_textual) m_movelist_textual->select(index); +} + +void Table::reset() { + if(m_movelist) m_movelist->reset(); + if(m_movelist_textual) m_movelist_textual->reset(); +} + +Notifier* Table::getNotifier() { + return m_movelist->getNotifier(); +} + +void Table::setNotifier(Notifier* n, bool detach_prev) { + if(m_movelist) m_movelist->setNotifier(n, detach_prev); + if(m_movelist_textual) m_movelist_textual->setNotifier(n, false); //false here, it is important +} + +int Table::layoutStyle() { + return m_movelist->layoutStyle(); +} + +void Table::setLayoutStyle(int x) { + if(m_movelist) m_movelist->setLayoutStyle(x); + if(m_movelist_textual) m_movelist_textual->setLayoutStyle(x); +} + +//END Table-------------------------------------------------------------------- + +} //end namespace MoveList + diff --git a/src/movelist_table.h b/src/movelist_table.h new file mode 100644 index 0000000..e4f3965 --- /dev/null +++ b/src/movelist_table.h @@ -0,0 +1,89 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MOVELIST_TABLE_H +#define MOVELIST_TABLE_H + +#include +#include "movelist_widget.h" + +class QAction; +class QScrollArea; +class ThemeInfo; + +namespace MoveList { + class Widget; + class Textual; + + /** + * @class Table + * @brief The widget that holds the move list in a scrolled view. + * + * This class is a widget that contains a MoveList::Widget and a few + * convenience buttons for undo and redo. + */ + class Table : public QWidget { + Q_OBJECT + public: + /** the scroll area that contains the move list */ + QScrollArea *m_scroll_area; + + /** the move list widget */ + Widget *m_movelist; + + /** the move list textual widget */ + Textual *m_movelist_textual; + + Table(QWidget* p = NULL); + + void settingsChanged(); + + void setLoaderTheme(const ThemeInfo& theme); + + /** Sets the move comment at the given index */ + void setComment(const Index& index, const QString& comment); + + /** Sets the comment at the given index before the give subvariation */ + void setVComment(const Index& index, int v, const QString& comment, bool confirm_promotion = false); + + /** Sets the move at the given index */ + void setMove(const Index& index, int turn, const DecoratedMove& move, + const QString& comment = QString(), bool confirm_promotion = false); + + /** Sets the move at the given index */ + void setMove(const Index& index, int turn, const QString& move, + const QString& comment = QString(), bool confirm_promotion = false); + + /** Removes the given index and all those that come after */ + void remove(const Index& index, bool confirm_promotion = false); + + /** Promotes the given variation in the main line */ + void promoteVariation(const Index& ix, int v); + + void reset(); + + Notifier* getNotifier(); + + void setNotifier(Notifier* n, bool detach_prev=true); + + int layoutStyle(); + + void setLayoutStyle(int x); + + /** Sets the currently selected index */ + void select(const Index& index, bool confirm_promotion = false); + + private Q_SLOTS: + void onUndo(); + void onRedo(); + }; +} //end namespace MoveList + +#endif //MOVELIST_TABLE_H diff --git a/src/movelist_textual.cpp b/src/movelist_textual.cpp new file mode 100644 index 0000000..b485769 --- /dev/null +++ b/src/movelist_textual.cpp @@ -0,0 +1,389 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifdef HAVE_KHTML + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "mastersettings.h" +#include "decoratedmove.h" +#include "movelist_p.h" +#include "movelist_textual.h" + +namespace MoveList { + +Textual::Textual(QWidget *parent) +: KHTMLPart(parent, parent, KHTMLPart::BrowserViewGUI) +, m_curr_selected(-1) +, m_layout_style(0) { + + m_loader.setSize(12); + + connect(browserExtension(), SIGNAL(openUrlRequest(const KUrl&,const KParts::URLArgs&)), + this, SLOT(onURL(const KUrl&))); + setJScriptEnabled(false); + setJavaEnabled(false); + setMetaRefreshEnabled(false); + setPluginsEnabled(false); + + QString fpath = KStandardDirs::locate("appdata", "scripts/movelist_textual.html"); + //kDebug() << "HTML file is:"<< fpath; + QFile file(fpath); + file.open(QIODevice::ReadOnly); + QTextStream stream(&file); + QString html = stream.readAll(); + //kDebug() << "Using HTML:"< Error in Textual::onURL, what should i do with url \""<< u <<"\"?"; + return; + } + QString p = u.mid(8); + Index ix = Index::fromString(p); + kDebug() << "Open Link \"" << p << "\" = \"" << ix << "\""; + m_notifier->onUserSelectMove(ix); +} + +void Textual::setComment(const Index& index, const QString& comment) { + DOM::HTMLDocument document = htmlDocument(); + DOM::Element this_cm = document.getElementById("cm_"+index); + if(this_cm.isNull()) { + kDebug() << " --> Error in Textual::setComment, invalid index!"; + return; + } + + clear_node(this_cm); + if(!comment.isEmpty()) { + this_cm.appendChild(document.createTextNode(comment)); + this_cm.appendChild(document.createTextNode(QString(" "))); + } +} + +void Textual::setVComment(const Index& index, int v, const QString& comment) { + DOM::HTMLDocument document = htmlDocument(); + DOM::Element this_cm = document.getElementById("vk_"+index.next(v)); + if(this_cm.isNull()) { + kDebug() << " --> Error in Textual::setVComment, invalid index!"; + return; + } + + clear_node(this_cm); + if(!comment.isEmpty()) { + this_cm.appendChild(document.createTextNode(comment)); + this_cm.appendChild(document.createTextNode(QString(" "))); + } +} + +void Textual::remove(const Index& index) { + DOM::HTMLDocument document = htmlDocument(); + if(index.atVariationStart()) { + DOM::Element vc = document.getElementById("vc_"+index); + if(!vc.isNull()) { + /* remove a number? */ + DOM::Element comm(vc.previousSibling()); + DOM::Element mvnum(vc.nextSibling()); + if(!mvnum.isNull() && mvnum.getAttribute("id").string().startsWith("nm_") && + !comm.isNull() && comm.getAttribute("id").string().startsWith("cm_")) + { + DOM::Element move(mvnum.nextSibling()); + int mv_num = move.getAttribute("mvnum").string().toInt(); + int sub_mv_num = move.getAttribute("submvnum").string().toInt(); + if(!(mv_num>0 && (sub_mv_num==0 && (mv_num%2 || m_layout_style)))) + mvnum.parentNode().removeChild(mvnum); + } + vc.parentNode().removeChild(vc); + } + } + else { + DOM::Element rm = document.getElementById("nm_"+index); + if(rm.isNull()) + rm = document.getElementById("mv_"+index); + if(!rm.isNull()) + clear_from(rm); + } + if(m_curr_selected >= index) + m_curr_selected = Index(-1); +} + +void Textual::select(const Index& index) { + if(index == m_curr_selected) + return; + DOM::HTMLDocument document = htmlDocument(); + DOM::Element currs = document.getElementById("mv_"+m_curr_selected); + DOM::Element news = document.getElementById("mv_"+index); + if(!currs.isNull()) + currs.style().removeProperty("background-color"); + if(!news.isNull()) + news.style().setProperty("background-color", "#C0E0FF", "important"); + m_curr_selected = index; +} + + +void Textual::setMove(const Index& index, int turn, const QString& move, + const QString& comment) { + DecoratedMove m; + m << MovePart(move); + setMove(index, turn, m, comment); +} + +// void Textual::setMove(const Index& index, int turn, const DecoratedMove& move, +// const QString& comment) { +// setMove(index, turn, move[0].m_string, comment); +// } + +void Textual::setMove(const Index& index, int turn, const DecoratedMove& move, + const QString& comment) { + //kDebug() << "i= " << index; + DOM::HTMLDocument document = htmlDocument(); + QString istr = (QString)index; + + DOM::Element this_mv = document.getElementById("mv_"+istr); + DOM::Element this_cm = document.getElementById("cm_"+istr); + if(!this_mv.isNull() && !this_cm.isNull()) { + clear_node(this_mv); + for(int i=0;i Error in Textual::setMove, no previous move!"; + return; + } + } + + int mv_num = 0; + int sub_mv_num = 0; + if(!prev_mv.isNull()) { + int prev_turn = prev_mv.getAttribute("turn").string().toInt(); + int prev_mv_num = prev_mv.getAttribute("mvnum").string().toInt(); + int prev_sub_mv_num = prev_mv.getAttribute("submvnum").string().toInt(); + if(prev_turn != turn) + mv_num = prev_mv_num+1; + else { + mv_num = prev_mv_num; + sub_mv_num = prev_sub_mv_num+1; + } + } + + if(!index.nested.size()) { + parent = document.body(); + if(parent.isNull()) { + kDebug() << "QUEEEEEEEEE!!!!!!!"; + return; + } + } + else if(index.atVariationStart()) { + QString var_id = "vc_" + istr; + DOM::Element add_before = prev_cm.nextSibling(); + + while(!add_before.isNull()) { + + QString id = add_before.getAttribute("id").string(); + if(id.startsWith("vc_") && id < var_id) + add_before = add_before.nextSibling(); + else + break; + } + + DOM::Element var_el = document.createElement("span"); + var_el.setAttribute("id", var_id); + var_el.setAttribute("class", "variation"); + var_el.appendChild(document.createTextNode("[ ")); + + + parent = document.createElement("span"); + parent.setAttribute("id", "vr_" + istr); + DOM::Element vk_el = document.createElement("span"); + vk_el.setAttribute("id", "vk_" + istr); + vk_el.setAttribute("class", "comment"); + //vk_el.setContentEditable(true); + parent.appendChild(vk_el); + var_el.appendChild(parent); + + var_el.appendChild(document.createTextNode("] ")); + prev_cm.parentNode().insertBefore(var_el, add_before); + + if(!add_before.isNull() && add_before.getAttribute("id").string().startsWith("mv_")) { + int mv_num = add_before.getAttribute("mvnum").string().toInt(); + int sub_mv_num = add_before.getAttribute("submvnum").string().toInt(); + QString num_str; + if(m_layout_style == 0) { + if(mv_num%2) + num_str = QString("%1. ").arg((mv_num+1)/2); + else + num_str = QString("%1. ... ").arg((mv_num+2)/2); + } + else { + if(sub_mv_num==0) + num_str = QString("%1. ").arg(mv_num); + else + num_str = QString("%1+%2. ").arg(mv_num).arg(sub_mv_num); + } + DOM::Element num_el = document.createElement("a"); + num_el.setAttribute("class", "mvnum"); + num_el.setAttribute("id", "nm_"+istr); + num_el.appendChild(document.createTextNode(num_str)); + prev_cm.parentNode().insertBefore(num_el, add_before); + } + } + else { + Index pi = index.prev(index.nested.back().num_moves); + parent = document.getElementById("vr_"+pi); + if(parent.isNull()) { + kDebug() << " --> Error in Textual::setMove, no variation?!?!?"; + return; + } + } + + if(mv_num>0 && ((sub_mv_num==0 && (mv_num%2 || m_layout_style)) || parent.lastChild() != prev_cm) ) { + QString num_str; + if(m_layout_style == 0) { + if(mv_num%2) + num_str = QString("%1. ").arg((mv_num+1)/2); + else + num_str = QString("%1. ... ").arg((mv_num+2)/2); + } + else { + if(sub_mv_num==0) + num_str = QString("%1. ").arg(mv_num); + else + num_str = QString("%1+%2. ").arg(mv_num).arg(sub_mv_num); + } + DOM::Element num_el = document.createElement("a"); + num_el.setAttribute("class", "mvnum"); + num_el.setAttribute("id", "nm_"+istr); + num_el.appendChild(document.createTextNode(num_str)); + parent.appendChild(num_el); + } + + DOM::Element mv_el = document.createElement("a"); + mv_el.setAttribute("id", "mv_"+istr); + mv_el.setAttribute("href", "index://"+istr); + mv_el.setAttribute("class", "move"); + mv_el.setAttribute("turn", QString::number(turn)); + mv_el.setAttribute("mvnum", QString::number(mv_num)); + mv_el.setAttribute("submvnum", QString::number(sub_mv_num)); + for(int i=0;i(move[i].m_string); + DOM::Element el = document.createElement("span"); +#if 1 + kDebug() << "size = " << QString("%1%").arg(g.m_font.pointSize()*100/12); + el.style().setProperty("font-size", QString("%1%").arg(g.m_font.pointSize()*100/12), "important"); + el.style().setProperty("line-height", QString("%1%").arg(g.m_font.pointSize()*100/12), "important"); +#endif + kDebug() << "familiy = " << g.m_font.family(); + el.style().setProperty("font-weight", "normal", "important"); + el.style().setProperty("font-family", g.m_font.family(), "important"); + DOM::Text t = document.createTextNode(QString(g.m_char)); + el.appendChild(t); + mv_el.appendChild(el); + } + else { + DOM::Text t = document.createTextNode(move[i].m_string); + mv_el.appendChild(t); + } + } + parent.appendChild(mv_el); + + parent.appendChild(document.createTextNode(QString(" "))); + + DOM::Element cm_el = document.createElement("span"); + cm_el.setAttribute("id", "cm_"+istr); + cm_el.setAttribute("class", "comment"); + if(!comment.isEmpty()) { + cm_el.appendChild(document.createTextNode(comment)); + cm_el.appendChild(document.createTextNode(QString(" "))); + } + //cm_el.setContentEditable(true); + parent.appendChild(cm_el); +} + +void Textual::reset() { + clear_node(htmlDocument().body()); + setMove(0, -1, "Mainline:"); +} + +Notifier* Textual::getNotifier() { + return m_notifier; +} + +void Textual::setNotifier(Notifier* n, bool detach_prev) { + if(detach_prev && m_notifier && m_notifier != n) + m_notifier->onDetachNotifier(); + m_notifier = n; +} + +int Textual::layoutStyle() { + return m_layout_style; +} + +void Textual::setLayoutStyle(int x) { + m_layout_style = x; +} + + +} //end namespace MoveList + +#endif //HAVE_KHTML diff --git a/src/movelist_textual.h b/src/movelist_textual.h new file mode 100644 index 0000000..1a74556 --- /dev/null +++ b/src/movelist_textual.h @@ -0,0 +1,118 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MOVELIST_TEXTUAL_H +#define MOVELIST_TEXTUAL_H + +#ifdef HAVE_KHTML + +#include +#include +#include +#include "decoratedmove.h" +#include "pixmaploader.h" +#include "movelist_notifier.h" + +class KHTMLPart; +class KUrl; +class ThemeInfo; + +namespace MoveList { + +class Textual : public KHTMLPart { +Q_OBJECT + Index m_curr_selected; + int m_layout_style; + Notifier *m_notifier; + PixmapLoader m_loader; + +public: + Textual(QWidget *parent = NULL); + + void settingsChanged() {} + + void setLoaderTheme(const ThemeInfo& theme) { m_loader.setTheme(theme); } + + /** Sets the move comment at the given index */ + void setComment(const Index& index, const QString& comment); + + /** Sets the comment at the given index before the give subvariation */ + void setVComment(const Index& index, int v, const QString& comment); + + /** Sets the move at the given index */ + void setMove(const Index& index, int turn, const DecoratedMove& move, + const QString& comment = QString()); + + /** Sets the move at the given index */ + void setMove(const Index& index, int turn, const QString& move, + const QString& comment = QString()); + + /** Removes the given index and all those that come after */ + void remove(const Index& index); + + void reset(); + + Notifier* getNotifier(); + + void setNotifier(Notifier* n, bool detach_prev=true); + + int layoutStyle(); + + void setLayoutStyle(int x); + + /** Sets the currently selected index */ + void select(const Index& index); + +private Q_SLOTS: + void onURL(const KUrl &url); +}; + +} //end namespace MoveList + +#else //HAVE_KHTML + +#include +#include "decoratedmove.h" +#include "index.h" + +class ThemeInfo; + +namespace MoveList { + +class Notifier; + +class Textual : public QWidget { +Q_OBJECT + +public: + Textual(QWidget *parent = NULL) : QWidget(parent){} + + void settingsChanged() {} + void setLoaderTheme(const ThemeInfo& /*theme*/){} + void setComment(const Index& /*index*/, const QString& /*comment*/){} + void setVComment(const Index& /*index*/, int /*v*/, const QString& /*comment*/){} + void setMove(const Index& /*index*/, int /*turn*/, const DecoratedMove& /*move*/, + const QString& /*comment*/ = QString()){} + void setMove(const Index& /*index*/, int /*turn*/, const QString& /*move*/, + const QString& /*comment*/ = QString()){} + void remove(const Index& /*index*/){} + void reset(){} + Notifier* getNotifier(){ return NULL; } + void setNotifier(Notifier* /*n*/, bool /*detach_prev*/=true){} + int layoutStyle(){ return 0; } + void setLayoutStyle(int /*x*/){} + void select(const Index& /*index*/){} +}; + +} //end namespace MoveList + +#endif //HAVE_KHTML + +#endif //MOVELIST_TEXTUAL_H diff --git a/src/movelist_widget.cpp b/src/movelist_widget.cpp new file mode 100644 index 0000000..e02b293 --- /dev/null +++ b/src/movelist_widget.cpp @@ -0,0 +1,10 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + diff --git a/src/movelist_widget.h b/src/movelist_widget.h new file mode 100644 index 0000000..f810816 --- /dev/null +++ b/src/movelist_widget.h @@ -0,0 +1,163 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MOVELISTWIDGET_H +#define MOVELISTWIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include "index.h" +#include "decoratedmove.h" +#include "pixmaploader.h" +#include "kgamecanvas.h" + +class ThemeInfo; + +namespace MoveList { + +typedef boost::shared_ptr EntryPtr; +typedef boost::shared_ptr BracePtr; +typedef boost::shared_ptr TextPtr; +typedef boost::shared_ptr CommentPtr; +typedef std::vector History; +typedef std::map Variations; +typedef std::map Braces; +typedef std::map VComments; + +class Notifier; +class Table; +class Settings; + +/** + * @class Widget + * @brief The widget can be used to display a tree of moves. + * + * This class is a widget that can be used to display a tree of moves + */ +class Widget : public KGameCanvasWidget { +private: + Q_OBJECT + friend class FancyItem; + friend class Entry; + friend class Brace; + friend class Text; + friend class Comment; + + friend class Table; + + History history; + + int entry_size; + + Index curr_highlight; + int curr_highlight_type; + Index curr_selected; + + boost::weak_ptr edited_comment; + int edited_comment_variation; + class QTextEdit* comment_editor; + + int layout_max_width; + bool layout_pending; + int layout_style; + int layout_time; + bool layout_goto_selected; + bool layout_width_changed; + bool layout_must_relayout; + + Notifier *notifier; + QHash loaded_pixmaps; + Table *owner_table; + Settings *m_settings; + PixmapLoader m_loader; + + History* fetchRef(const Index& ix, int* idx = NULL); + EntryPtr fetch(const Index& ix); + + bool eventFilter(QObject *obj, QEvent *event); + void startEditing(const Index& ix, int v); + void stopEditing(); + + void layout(); + int layoutHistory(History& array, int at_x, int at_y, int prev_turn, int mv_num, + int sub_mv_num, bool visible); + + void fixIndices(const Index& ix); + void setComment(EntryPtr e, int v, const QString& comment); + + QPixmap getPixmap(const QString& s, bool selected = false); + + virtual void resizeEvent ( QResizeEvent * event ); + virtual void mouseMoveEvent ( QMouseEvent * event ); + virtual void mousePressEvent ( QMouseEvent * event ); + virtual void mouseReleaseEvent ( QMouseEvent * event ); + + +private Q_SLOTS: + void doLayout(); + +public: + Widget(QWidget *parent = NULL, Table *o = NULL); + virtual ~Widget(); + + Notifier* getNotifier(); + void setNotifier(Notifier* n, bool detach_prev=true); + + void settingsChanged(); + + void setLoaderTheme(const ThemeInfo& theme); + + /** Clears all the moves */ + void reset(); + + /** returns the style of layout */ + int layoutStyle(){ return layout_style; } + + /** sets the style of layout. 0 mean the the moves are paired, like in chess. + any value x>0 will layout the moves in x columns for each player (useful + for progressive chess, for instance) */ + void setLayoutStyle(int x) { + layout_style = x; + layout(); + } + + /** Sets the move comment at the given index */ + void setComment(const Index& index, const QString& comment); + + /** Sets the comment at the given index before the give subvariation */ + void setVComment(const Index& index, int v, const QString& comment); + + /** Sets the move at the given index */ + void setMove(const Index& index, int turn, const DecoratedMove& move, + const QString& comment = QString()); + + /** Sets the move at the given index */ + void setMove(const Index& index, int turn, const QString& move, + const QString& comment = QString()); + + /** Removes the given index and all those that come after */ + void remove(const Index& index); + + /** Promotes the given variation in the main line */ + void promoteVariation(const Index& ix, int v); + + /** Sets the currently selected index */ + void select(const Index& index); +}; + +} //end namespace + +#endif diff --git a/src/movement.cpp b/src/movement.cpp new file mode 100644 index 0000000..490d1c5 --- /dev/null +++ b/src/movement.cpp @@ -0,0 +1,71 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "movement.h" +#include "common.h" +#include + +using std::abs; +#define QUINTIC_SIGMOID + +double Movement::sigmoid(double t) { +#ifdef CUBIC_SIGMOID + return -2 * pow(t - 0.5, 3) + 1.5 * t - 0.25; +#else + return 6 * pow(t - 0.5, 5) - 5 * pow(t, 3) + 7.5 * t * t - 15 * 0.125 * t + 3.0 / 16; +#endif +} + +double Movement::half_sigmoid(double t) { + // use the second half of the sigmoid parameterization + return sigmoid(0.5 * (t + 1)); +} + +LinearMovement::LinearMovement(const QPoint& from, const QPoint& to, bool /*rotate*/) +: m_from(from) +, m_velocity(to - from) { } + +QPoint LinearMovement::pos(double t) const { + return m_from + m_velocity * t; +} + +LMovement::LMovement(const QPoint& from, const QPoint& to, bool rotate) +: m_from(from) +, m_velocity(to - from) +, m_rotate(rotate) { + if (abs(static_cast(m_velocity.x())) >= + abs(static_cast(m_velocity.y()))) { + m_x = LMovement::nonlinear; + m_y = LMovement::linear; + } + else { + m_y = LMovement::nonlinear; + m_x = LMovement::linear; + } +} + +double LMovement::nonlinear(double t) { + return (exp( (double)(3 * t) ) - 1) / (exp( (double)3 ) - 1); +} + +QPoint LMovement::pos(double t) const { + return m_from + QPoint( + static_cast(m_velocity.x() * m_x(t)), + static_cast(m_velocity.y() * m_y(t))); +} + +double LMovement::rotation(double t) const { + if(!m_rotate) + return 0.0; + + double r = (1.0-cos(t*M_PI))*M_PI; + return m_velocity.x() >= 0 ? r : -r; +} + diff --git a/src/movement.h b/src/movement.h new file mode 100644 index 0000000..4817294 --- /dev/null +++ b/src/movement.h @@ -0,0 +1,93 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef MOVEMENT_H +#define MOVEMENT_H + +#include +#include + +/** + * Abstract class representing a parameterization of a curve + * in a plane and a rotation angle. + * The parameter @a t for both the position and the rotation + * is assumed to lie in the closed interval [0,1]. + */ +class Movement { +public: + virtual ~Movement() { } + virtual QPoint pos(double t) const = 0; + virtual double rotation(double /*t*/) const { return 0.0; } + + static double sigmoid(double t); + static double half_sigmoid(double t); +}; + +/** + * A straight path, no rotation. + */ +class LinearMovement : public Movement { + QPoint m_from; + QPoint m_velocity; +public: + /// create a path from @a from to @a to. + LinearMovement(const QPoint& from, const QPoint& to, bool /*rotate*/); + + virtual QPoint pos(double t) const; +}; + +/** + * An L-shaped path. First along the shortest side, then along the other. + * Use an exponential parameterization for the longest side. + */ +class LMovement : public Movement { + QPoint m_from; + QPoint m_velocity; + bool m_rotate; + double (*m_x)(double); + double (*m_y)(double); + + static double linear(double t) { return t; } + static double nonlinear(double t); +public: + /// create an L-path from @a from to @a to. + LMovement(const QPoint& from, const QPoint& to, bool rotate = false); + + virtual QPoint pos(double t) const; + virtual double rotation(double t) const; +}; + +/** + * Movement mixin: apply to a Movement to get a sigmoidal + * variant of it. + */ +template +class SigmoidalMovement : public Mov { +public: + SigmoidalMovement(const QPoint& from, const QPoint& to, bool rotate = false) + : Mov(from, to, rotate) { } + + virtual QPoint pos(double t) const { + return Mov::pos(Movement::sigmoid(t)); + } +}; + +template +class HalfSigmoidalMovement : public Mov { +public: + HalfSigmoidalMovement(const QPoint& from, const QPoint& to, bool rotate = false) + : Mov(from, to, rotate) { } + + virtual QPoint pos(double t) const { + return Mov::pos(Movement::half_sigmoid(t)); + } +}; + +#endif // MOVEMENT_H diff --git a/src/namedsprite_utils.cpp b/src/namedsprite_utils.cpp new file mode 100644 index 0000000..63fe073 --- /dev/null +++ b/src/namedsprite_utils.cpp @@ -0,0 +1,19 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "namedsprite_utils.h" +#include "sprite.h" + +NamedSprite duplicate(const NamedSprite& sprite) { + if (sprite) + return NamedSprite(sprite.name(), SpritePtr(sprite.sprite()->duplicate())); + else + return sprite; +} + diff --git a/src/namedsprite_utils.h b/src/namedsprite_utils.h new file mode 100644 index 0000000..a4f28ef --- /dev/null +++ b/src/namedsprite_utils.h @@ -0,0 +1,18 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef NAMEDSPRITE_UTILS_H +#define NAMEDSPRITE_UTILS_H + +#include + +NamedSprite duplicate(const NamedSprite& sprite); + +#endif // NAMEDSPRITE_UTILS_H + diff --git a/src/newgame.cpp b/src/newgame.cpp new file mode 100644 index 0000000..6d0341c --- /dev/null +++ b/src/newgame.cpp @@ -0,0 +1,30 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "newgame.h" +#include "foreach.h" +#include "variants.h" + +NewGame::NewGame(QWidget* parent) +: QDialog(parent) { + setupUi(this); + KService::List variants = Variants::self().all(); + foreach (KService::Ptr service, variants) { + m_variant->addItem(service->name(), QVariant(service->name())); + } +} + +QString NewGame::variant() const { + return m_variant->itemData(m_variant->currentIndex()).toString(); +} + +bool NewGame::newTab() const { + return m_new_tab->isChecked(); +} diff --git a/src/newgame.h b/src/newgame.h new file mode 100644 index 0000000..3234145 --- /dev/null +++ b/src/newgame.h @@ -0,0 +1,26 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef NEWGAME_H +#define NEWGAME_H + +#include +#include "ui_newgamedialog.h" + +class NewGame : public QDialog, public Ui::NewGameDialog { +Q_OBJECT +public: + NewGame(QWidget* parent = 0); + QString variant() const; + bool newTab() const; +}; + +#endif + diff --git a/src/nopool.h b/src/nopool.h new file mode 100644 index 0000000..edaec86 --- /dev/null +++ b/src/nopool.h @@ -0,0 +1,18 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef NO_POOL +#define NO_POOL + +/// Placeholder for variants that do not have pools. +class NoPool { }; + +#endif // NO_POOL + diff --git a/src/option.cpp b/src/option.cpp new file mode 100644 index 0000000..6e8e918 --- /dev/null +++ b/src/option.cpp @@ -0,0 +1,426 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include +#include +#include +#include "settings.h" +#include "common.h" +#include "option.h" +#include "option_p.h" + + +OptionWidget::OptionWidget(const OptList& options, QWidget* parent) +: QWidget(parent) +, m_dont_fire(false) +, m_options(options) { + setupOptionWidget(this, m_options); +} + +void OptionWidget::notifyChange() { + if(m_dont_fire) + m_changed = true; + else { + dump_options_list(m_options); + changed(m_options); + } +} + +void OptionWidget::setValues(OptList& newopts) { + m_changed = false; + m_dont_fire = true; + setOptionWidgetValues(this, newopts); + m_dont_fire = false; + if(m_changed) + notifyChange(); +} + +void OptionWidget::setupOptionWidget(QWidget* widget, OptList& options, bool indent) { + QGridLayout *layout = new QGridLayout(widget); + + if(indent) + layout->setMargin(0); + + int left = indent ? 1 : 0; + int right = indent ? 2 : 1; + int lpos = 0; + for(int i=0;i(_o)) { + OptCheckBox *cb = new OptCheckBox(o, this, widget); + cb->setObjectName(QString("%02d_check").arg(i)); + layout->addWidget(cb, lpos++, left, 1, 2); + if(o->m_sub_options.size()) { + QWidget *w = new QWidget(widget); + w->setObjectName(QString("%02d_check_sub").arg(i)); + setupOptionWidget(w, o->m_sub_options, true); + w->setEnabled(o->value()); + QObject::connect(cb, SIGNAL(toggled(bool)), w, SLOT(setEnabled(bool))); + layout->addWidget(w, lpos++, left, 1, 2); + } + } + else if(SelectOptPtr o = + boost::dynamic_pointer_cast(_o)) { + QGroupBox *gb = new QGroupBox(o->label(), widget); + gb->setObjectName(QString("%02d_group").arg(i)); + QVBoxLayout *vbox = new QVBoxLayout(gb); + //vbox->setMargin(0); + for(int j=0;jm_options.size();j++) { + BoolOptPtr so = o->m_options[j]; + OptRadioButton *rb = new OptRadioButton(o, j, this, gb); + rb->setObjectName(QString("%02d_radio_%02d").arg(i).arg(j)); + vbox->addWidget(rb); + if(so->m_sub_options.size()) { + QWidget *w = new QWidget(widget); + w->setObjectName(QString("%02d_radio_%02d_sub").arg(i).arg(j)); + setupOptionWidget(w, so->m_sub_options, true); + w->setEnabled(so->value()); + QObject::connect(rb, SIGNAL(toggled(bool)), w, SLOT(setEnabled(bool))); + vbox->addWidget(w); + } + } + layout->addWidget(gb, lpos++, left, 1, 2); + } + else if (IntOptPtr o = + boost::dynamic_pointer_cast(_o)) { + layout->addWidget(new QLabel(o->label()), lpos, left); + switch (o->visualization()) { + case IntOpt::SpinBox: + { + OptSpinBox *sb = new OptSpinBox(o, this, widget); + sb->setObjectName(QString("%02d_spin").arg(i)); + layout->addWidget(sb, lpos++, right); + break; + } + case IntOpt::Slider: + { + OptSlider *sl = new OptSlider(o, this, widget); + sl->setObjectName(QString("%02d_slid").arg(i)); + layout->addWidget(sl, lpos++, right); + break; + } + } + } + else if(StringOptPtr o = + boost::dynamic_pointer_cast(_o)) { + layout->addWidget(new QLabel(o->label()), lpos, left); + OptLineEdit *ow = new OptLineEdit(o, this, widget); + ow->setObjectName(QString("%02d_line").arg(i)); + layout->addWidget(ow, lpos++, right); + } + else if(UrlOptPtr o = + boost::dynamic_pointer_cast(_o)) { + layout->addWidget(new QLabel(o->label()), lpos, left); + OptUrlRequester *ow = new OptUrlRequester(o, this, widget); + ow->setObjectName(QString("%02d_url").arg(i)); + layout->addWidget(ow, lpos++, right); + } + else if(ComboOptPtr o = + boost::dynamic_pointer_cast(_o)) { + layout->addWidget(new QLabel(o->label()), lpos, left); + OptComboBox *ow = new OptComboBox(o, this, widget); + ow->setObjectName(QString("%02d_combo").arg(i)); + layout->addWidget(ow, lpos++, right); + } + else if(ColorOptPtr o = + boost::dynamic_pointer_cast(_o)) { + layout->addWidget(new QLabel(o->label()), lpos, left); + OptColorButton *ow = new OptColorButton(o, this, widget); + ow->setObjectName(QString("%02d_color").arg(i)); + layout->addWidget(ow, lpos++, right); + } + else if(FontOptPtr o = + boost::dynamic_pointer_cast(_o)) { + layout->addWidget(new QLabel(o->label()), lpos, left); + OptFontRequester *ow = new OptFontRequester(o,this, widget); + ow->setObjectName(QString("%02d_font").arg(i)); + layout->addWidget(ow, lpos++, right); + } + else + kError() << "Unknown option of type" << prettyTypeName(typeid(*_o).name()); + } + + if(indent) + layout->addItem(new QSpacerItem(25, 1, QSizePolicy::Minimum, QSizePolicy::Minimum), + 0, 0, lpos, 1); +} + +void OptionWidget::setOptionWidgetValues(QWidget* widget, OptList& newopts) { + for(int i=0;i(_o)) { + OptCheckBox *cb = widget->findChild(QString("%02d_check").arg(i)); + if(!cb) goto fail; + cb->setChecked(o->value()); + + if(o->m_sub_options.size()) { + QWidget *w = widget->findChild(QString("%02d_check_sub").arg(i)); + if(!w) goto fail; + setOptionWidgetValues(w, o->m_sub_options); + } + } + else if(SelectOptPtr o = + boost::dynamic_pointer_cast(_o)) { + QGroupBox *gb = widget->findChild(QString("%02d_group").arg(i)); + if(!gb) goto fail; + + for(int j=0;jm_options.size();j++) { + BoolOptPtr so = o->m_options[j]; + OptRadioButton *rb = gb->findChild(QString("%02d_radio_%02d").arg(i).arg(j)); + if(!rb) goto fail; + rb->setChecked(so->value()); + + if(so->m_sub_options.size()) { + QWidget *w = widget->findChild(QString("%02d_radio_%02d_sub").arg(i).arg(j)); + if(!w) goto fail; + setOptionWidgetValues(w, so->m_sub_options); + } + } + } + else if(IntOptPtr o = + boost::dynamic_pointer_cast(_o)) { + switch (o->visualization()) { + case IntOpt::SpinBox: + { + OptSpinBox *sb = widget->findChild(QString("%02d_spin").arg(i)); + if(!sb) goto fail; + sb->setValue(o->value()); + break; + } + case IntOpt::Slider: + { + OptSlider *sl = widget->findChild(QString("%02d_slid").arg(i)); + if(!sl) goto fail; + sl->setValue(o->value()); + break; + } + } + } + else if(StringOptPtr o = + boost::dynamic_pointer_cast(_o)) { + OptLineEdit *ow = widget->findChild(QString("%02d_line").arg(i)); + if(!ow) goto fail; + ow->setText(o->value()); + } + else if(UrlOptPtr o = + boost::dynamic_pointer_cast(_o)) { + OptUrlRequester *ow = widget->findChild(QString("%02d_url").arg(i)); + if(!ow) goto fail; + ow->setUrl(o->value()); + } + else if(ComboOptPtr o = + boost::dynamic_pointer_cast(_o)) { + OptComboBox *ow = widget->findChild(QString("%02d_combo").arg(i)); + if(!ow) goto fail; + ow->setCurrentIndex(o->selected()); + } + else if(ColorOptPtr o = + boost::dynamic_pointer_cast(_o)) { + OptColorButton *ow = widget->findChild(QString("%02d_color").arg(i)); + if(!ow) goto fail; + ow->setColor(o->value()); + } + else if(FontOptPtr o = + boost::dynamic_pointer_cast(_o)) { + OptFontRequester *ow = widget->findChild(QString("%02d_font").arg(i)); + if(!ow) goto fail; + ow->setFont(o->value()); + } + else + kError() << "Unknown option of type" << prettyTypeName(typeid(*_o).name()); + } + return; +fail: + kError() << "Options/Widget mismatch!"; +} + +void dump_options_list(const OptList& options, int indent) { + if(!indent)kDebug() << "---- begin dump ----"; + for(int i=0;i(_o)) { + for(int j=0;jvalue()?"[X]":"[ ]") << " " << o->label(); + dump_options_list(o->subOptions(), indent+1); + } + else if(IntOptPtr o = + boost::dynamic_pointer_cast(_o)) { + for(int j=0;jlabel() << " |" << o->value() << "|"; + } + else if(StringOptPtr o = + boost::dynamic_pointer_cast(_o)) { + for(int j=0;jlabel() << " [" << o->value() << "]"; + } + else if(UrlOptPtr o = + boost::dynamic_pointer_cast(_o)) { + for(int j=0;jlabel() << " {" << o->value() << "}"; + } + else if(ColorOptPtr o = + boost::dynamic_pointer_cast(_o)) { + for(int j=0;jlabel() << " {" << o->value().name() << "}"; + } + else if(FontOptPtr o = + boost::dynamic_pointer_cast(_o)) { + for(int j=0;jlabel() << " {" << o->value().toString() << "}"; + } + else if(ComboOptPtr o = + boost::dynamic_pointer_cast(_o)) { + for(int j=0;jlabel(); + for(int k=0;kvalues().size();k++) { + for(int j=0;jselected()) + kDebug() << " *<" << o->values()[k] << ">*"; + else + kDebug() << " <" << o->values()[k] << ">"; + } + } + else if(SelectOptPtr o = + boost::dynamic_pointer_cast(_o)) { + for(int j=0;jlabel(); + for(int j=0;joptions().size();j++) { + BoolOptPtr so = o->options()[j]; + for(int j=0;jvalue()?"(*)":"( )") << " " << so->label(); + if(so->subOptions().size()) + dump_options_list(so->subOptions(), indent+2); + } + } + else { + kDebug() << "dump_options_list: Error, unknown option of type " + << prettyTypeName(typeid(*_o).name()); + } + } + if(!indent)kDebug() << "---- end dump ----"; +} + +bool options_list_load_from_settings(OptList& options, const Settings& s) { + bool retv = false; + for(int i=0;i(_o)) { + Settings bool_group = s.group(o->name()); + retv |= options_list_load_from_settings(o->m_sub_options, bool_group); + bool newval = bool_group.flag("value", o->value()); + retv |= (newval != o->value()); + o->setValue( newval ); + } + else if(IntOptPtr o = + boost::dynamic_pointer_cast(_o)) { + int newval = s[o->name()] | o->value(); + retv |= (newval != o->value()); + o->setValue( newval ); + } + else if(StringOptPtr o = + boost::dynamic_pointer_cast(_o)) { + QString newval = s[o->name()] | o->value(); + retv |= (newval != o->value()); + o->setValue( newval ); + } + else if(UrlOptPtr o = + boost::dynamic_pointer_cast(_o)) { + QString newval = s[o->name()] | o->value(); + retv |= (newval != o->value()); + o->setValue( newval ); + } + else if(ColorOptPtr o = + boost::dynamic_pointer_cast(_o)) { + QColor newval = s[o->name()] | o->value(); + retv |= (newval != o->value()); + o->setValue( newval ); + } + else if(FontOptPtr o = + boost::dynamic_pointer_cast(_o)) { + QFont newval = s[o->name()] | o->value(); + retv |= (newval != o->value()); + o->setValue( newval ); + } + else if(ComboOptPtr o = + boost::dynamic_pointer_cast(_o)) { + int newval = s[o->name()] | o->selected(); + retv |= (newval != o->selected()); + o->setSelected( newval ); + } + else if(SelectOptPtr o = + boost::dynamic_pointer_cast(_o)) { + OptList l; + for(int i=0;im_options.size();i++) + l << o->m_options[i]; + Settings sel_group = s.group(o->name()); + retv |= options_list_load_from_settings(l, sel_group.group("sel-options")); + int newval = sel_group["value"] | o->selected(); + retv |= (newval != o->selected()); + o->setSelected( newval ); + } + else + kError() << "option of type" << prettyTypeName(typeid(*_o).name()); + } + return retv; +} + +void options_list_save_to_settings(const OptList& options, Settings s) { + for(int i=0;i(_o)) { + Settings bool_group = s.group(o->name()); + options_list_save_to_settings(o->subOptions(), bool_group); + bool_group.setFlag("value", o->value()); + } + else if(IntOptPtr o = + boost::dynamic_pointer_cast(_o)) { + s[o->name()] = o->value(); + } + else if(StringOptPtr o = + boost::dynamic_pointer_cast(_o)) { + s[o->name()] = o->value(); + } + else if(UrlOptPtr o = + boost::dynamic_pointer_cast(_o)) { + s[o->name()] = o->value(); + } + else if(ColorOptPtr o = + boost::dynamic_pointer_cast(_o)) { + s[o->name()] = o->value(); + } + else if(FontOptPtr o = + boost::dynamic_pointer_cast(_o)) { + s[o->name()] = o->value(); + } + else if(ComboOptPtr o = + boost::dynamic_pointer_cast(_o)) { + s[o->name()] = o->value(); + } + else if(SelectOptPtr o = + boost::dynamic_pointer_cast(_o)) { + OptList l; + for(int i=0;ioptions().size();i++) + l << o->options()[i]; + Settings sel_group = s.group(o->name()); + options_list_save_to_settings(l, sel_group.group("sel-options")); + sel_group["value"] = o->value(); + } + else + kError() << "option of type" << prettyTypeName(typeid(*_o).name()); + } +} diff --git a/src/option.h b/src/option.h new file mode 100644 index 0000000..fbd427c --- /dev/null +++ b/src/option.h @@ -0,0 +1,349 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef OPTION_H +#define OPTION_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class Settings; + +class BaseOpt; +class BoolOpt; +class IntOpt; +class StringOpt; +class ColorOpt; +class FontOpt; +class ComboOpt; +class SelectOpt; +class UrlOpt; +typedef boost::shared_ptr OptPtr; +typedef boost::shared_ptr BoolOptPtr; +typedef boost::shared_ptr IntOptPtr; +typedef boost::shared_ptr StringOptPtr; +typedef boost::shared_ptr ColorOptPtr; +typedef boost::shared_ptr FontOptPtr; +typedef boost::shared_ptr ComboOptPtr; +typedef boost::shared_ptr SelectOptPtr; +typedef boost::shared_ptr UrlOptPtr; +typedef QList OptList; +typedef QList BoolOptList; +typedef boost::shared_ptr OptListPtr; +typedef boost::shared_ptr BoolOptListPtr; + +template +QList > options_list_duplicate(const QList >& o) { + QList > retv; + for(int i=0;i(o[i]->clone()); + return retv; +} + +template +bool options_list_equals(const QList >& o1, + const QList >& o2) { + if(o1.size() != o2.size()) + return false; + for(int i=0;iequals(*o2[i])) + return false; + return true; +} + +void dump_options_list(const OptList& options, int indent = 0); + +class BaseOpt { +private: + QString m_name; + QString m_label; +public: + BaseOpt(const QString& name, const QString& label) + : m_name(name) + , m_label(label) {} + virtual ~BaseOpt() {}; + QString name() const { return m_name; } + QString label() const { return m_label; } + virtual OptPtr clone() const = 0; + virtual bool equals(const BaseOpt&) const = 0; +}; + +class BoolOpt : public BaseOpt { +private: + friend class OptionWidget; + friend bool options_list_load_from_settings(OptList& options, const Settings& s); + + bool m_value; + QList m_sub_options; +public: + typedef bool ValueType; + BoolOpt(const QString& name, const QString& label, bool def = false, + const QList& suboptions = QList()) + : BaseOpt(name, label) + , m_value(def) + , m_sub_options(suboptions) {} + bool value() const { return m_value; } + void setValue(bool v) { m_value = v; } + OptList subOptions() { return m_sub_options; } + virtual OptPtr clone() const { + BoolOpt *o = new BoolOpt(name(), label(), m_value, options_list_duplicate(m_sub_options) ); + return OptPtr(o); + } + virtual bool equals(const BaseOpt& _o) const { + const BoolOpt* o = dynamic_cast(&_o); + return o + && m_value != o->m_value + && options_list_equals(m_sub_options, o->m_sub_options); + } +}; + +class IntOpt : public BaseOpt { +public: + enum Visualization { + SpinBox, + Slider + }; +private: + int m_min; + int m_max; + int m_value; + Visualization m_visualization; +public: + typedef int ValueType; + IntOpt(const QString& name, const QString& label, int def, int min, int max, Visualization visualization) + : BaseOpt(name, label) + , m_min(min) + , m_max(max) + , m_value(def) + , m_visualization(visualization) {} + int min() const { return m_min; } + int max() const { return m_max; } + int value() const { return m_value; } + Visualization visualization() const { return m_visualization; } + void setValue(int v) { m_value = v; } + virtual OptPtr clone() const { + IntOpt *o = new IntOpt(name(), label(), m_value, m_min, m_max, m_visualization); + return OptPtr(o); + } + virtual bool equals(const BaseOpt& _o) const { + const IntOpt* o = dynamic_cast(&_o); + return o + && m_min != o->m_min + && m_max != o->m_max + && m_value != o->m_value + && m_visualization != o->m_visualization; + } +}; + +class StringOpt : public BaseOpt { +private: + QString m_value; +public: + typedef QString ValueType; + StringOpt(const QString& name, const QString& label, QString def = QString()) + : BaseOpt(name, label) + , m_value(def) {} + QString value() const { return m_value; } + void setValue(QString v) { m_value = v; } + virtual OptPtr clone() const { + StringOpt *o = new StringOpt(name(), label(), m_value); + return OptPtr(o); + } + virtual bool equals(const BaseOpt& _o) const { + const StringOpt* o = dynamic_cast(&_o); + return o + && m_value != o->m_value; + } +}; + +class UrlOpt : public BaseOpt { +private: + QString m_value; +public: + typedef QString ValueType; + UrlOpt(const QString& name, const QString& label, QString def = QString() ) + : BaseOpt(name, label) + , m_value(def) {} + QString value() const { return m_value; } + void setValue(QString v) { m_value = v; } + virtual OptPtr clone() const { + UrlOpt *o = new UrlOpt(name(), label(), m_value); + return OptPtr(o); + } + virtual bool equals(const BaseOpt& _o) const { + const UrlOpt* o = dynamic_cast(&_o); + return o + && m_value != o->m_value; + } +}; + +class ColorOpt : public BaseOpt { +private: + QColor m_value; +public: + typedef QColor ValueType; + ColorOpt(const QString& name, const QString& label, QColor def = Qt::black) + : BaseOpt(name, label) + , m_value(def) {} + QColor value() const { return m_value; } + void setValue(QColor v) { m_value = v; } + virtual OptPtr clone() const { + ColorOpt *o = new ColorOpt(name(), label(), m_value); + return OptPtr(o); + } + virtual bool equals(const BaseOpt& _o) const { + const ColorOpt* o = dynamic_cast(&_o); + return o + && m_value != o->m_value; + } +}; + +class FontOpt : public BaseOpt { +private: + QFont m_value; +public: + typedef QFont ValueType; + FontOpt(const QString& name, const QString& label, QFont def = QApplication::font()) + : BaseOpt(name, label) + , m_value(def) {} + QFont value() const { return m_value; } + void setValue(QFont v) { m_value = v; } + virtual OptPtr clone() const { + FontOpt *o = new FontOpt(name(), label(), m_value); + return OptPtr(o); + } + virtual bool equals(const BaseOpt& _o) const { + const FontOpt* o = dynamic_cast(&_o); + return o + && m_value != o->m_value; + } +}; + +class ComboOpt : public BaseOpt { +private: + QStringList m_values; + int m_selected; +public: + typedef int ValueType; + ComboOpt(const QString& name, const QString& label, const QStringList& values, int selected = 0) + : BaseOpt(name, label) + , m_values(values) + , m_selected(selected) {} + int value() const { return m_selected; } + int selected() const { return m_selected; } + void setSelected(int v) { m_selected = v; } + QStringList values() const { return m_values; } + virtual OptPtr clone() const { + ComboOpt *o = new ComboOpt(name(), label(), m_values, m_selected); + return OptPtr(o); + } + virtual bool equals(const BaseOpt& _o) const { + const ComboOpt* o = dynamic_cast(&_o); + return o + && m_values == o->m_values + && m_selected != o->m_selected; + } +}; + +class SelectOpt : public BaseOpt { +private: + friend class OptionWidget; + friend bool options_list_load_from_settings(OptList& options, const Settings& s); + + QList m_options; + int m_selected; + +public: + typedef int ValueType; + SelectOpt(const QString& name, const QString& label, QList options, + int selected = 0) + : BaseOpt(name, label) + , m_options(options) { + setSelected(selected); + } + int value() const { return m_selected; } + int selected() const { return m_selected; } + void setSelected(int s) { + m_selected = std::min(std::max(s, 0), m_options.size()-1); + for(int i=0;isetValue(i==m_selected); + } + BoolOptList options(){ return m_options; } + virtual OptPtr clone() const { + return OptPtr(new SelectOpt(name(), label(), options_list_duplicate(m_options), m_selected)); + } + virtual bool equals(const BaseOpt& _o) const { + const SelectOpt* o = dynamic_cast(&_o); + return o + && m_selected != o->m_selected + && options_list_equals(m_options, o->m_options); + } +}; + + + +template +boost::shared_ptr options_list_find(const OptList& o, const QString& name) { + for(int i=0;iname() == name) + if(boost::shared_ptr retv = boost::dynamic_pointer_cast(o[i])) + return retv; + return boost::shared_ptr(); +} + +template +typename O::ValueType options_list_find(const OptList& o, const QString& name, + const typename O::ValueType& def) { + for(int i=0;iname() == name) + if(boost::shared_ptr retv = boost::dynamic_pointer_cast(o[i])) + return retv->value(); + return def; +} + +bool options_list_load_from_settings(OptList&, const Settings& s); +void options_list_save_to_settings(const OptList&, Settings s); + + +class OptionWidget : public QWidget { + Q_OBJECT + bool m_changed; + bool m_dont_fire; + QList m_options; + void setupOptionWidget(QWidget*, OptList&, bool indent = false); + void setOptionWidgetValues(QWidget*, OptList&); + void notifyChange(); + + friend class OptCheckBox; + friend class OptRadioButton; + friend class OptSpinBox; + friend class OptSlider; + friend class OptLineEdit; + friend class OptColorButton; + friend class OptFontRequester; + friend class OptUrlRequester; + friend class OptComboBox; + +public: + OptionWidget(const OptList& options, QWidget* parent = NULL); + void setValues(OptList& newopts); + +Q_SIGNALS: + void changed(const OptList& options); +}; + +#endif //OPTION_H diff --git a/src/option_p.cpp b/src/option_p.cpp new file mode 100644 index 0000000..a7a6ad6 --- /dev/null +++ b/src/option_p.cpp @@ -0,0 +1,138 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "option_p.h" + + +OptCheckBox::OptCheckBox(BoolOptPtr opt, OptionWidget *owner, QWidget *parent) +: QCheckBox(opt->label(), parent) +, m_owner(owner) +, m_opt(opt) { + setChecked(m_opt->value()); + connect(this, SIGNAL(toggled(bool)), this, SLOT(setOpt(bool))); +} + +void OptCheckBox::setOpt(bool b) { + m_opt->setValue(b); + m_owner->notifyChange(); +} + +OptRadioButton::OptRadioButton(SelectOptPtr opt, int i, OptionWidget *owner, QWidget *parent) +: QRadioButton(opt->options()[i]->label(), parent) +, m_owner(owner) +, m_opt(opt) +, m_index(i) { + setChecked(m_opt->options()[i]->value()); + connect(this, SIGNAL(toggled(bool)), this, SLOT(setOpt(bool))); +} + +void OptRadioButton::setOpt(bool b) { + if(b) { + m_opt->setSelected(m_index); + m_owner->notifyChange(); + } +} + +OptSpinBox::OptSpinBox(IntOptPtr opt, OptionWidget *owner, QWidget *parent) +: QSpinBox(parent) +, m_owner(owner) +, m_opt(opt) { + setMinimum(m_opt->min()); + setMaximum(m_opt->max()); + setValue(m_opt->value()); + connect(this, SIGNAL(valueChanged(int)), this, SLOT(setOpt(int))); +} + +void OptSpinBox::setOpt(int i) { + m_opt->setValue(i); + m_owner->notifyChange(); +} + +OptSlider::OptSlider(IntOptPtr opt, OptionWidget *owner, QWidget *parent) +: QSlider(parent) +, m_owner(owner) +, m_opt(opt) { + setOrientation(Qt::Horizontal); + setMinimum(m_opt->min()); + setMaximum(m_opt->max()); + setValue(m_opt->value()); + connect(this, SIGNAL(valueChanged(int)), this, SLOT(setOpt(int))); +} + +void OptSlider::setOpt(int i) { + m_opt->setValue(i); + m_owner->notifyChange(); +} + +OptLineEdit::OptLineEdit(StringOptPtr opt, OptionWidget *owner, QWidget *parent) +: QLineEdit(parent) +, m_owner(owner) +, m_opt(opt) { + setText(m_opt->value()); + connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(setOpt(const QString&))); +} + +void OptLineEdit::setOpt(const QString& s) { + m_opt->setValue(s); + m_owner->notifyChange(); +} + +OptUrlRequester::OptUrlRequester(UrlOptPtr opt, OptionWidget *owner, QWidget *parent) +: KUrlRequester(parent) +, m_owner(owner) +, m_opt(opt) { + setUrl(m_opt->value()); + connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(setOpt(const QString&))); +} + +void OptUrlRequester::setOpt(const QString& s) { + m_opt->setValue(s); + m_owner->notifyChange(); +} + +OptComboBox::OptComboBox(ComboOptPtr opt, OptionWidget *owner, QWidget *parent) +: QComboBox(parent) +, m_owner(owner) +, m_opt(opt) { + addItems(m_opt->values()); + setCurrentIndex(m_opt->selected()); + connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(setOpt(int))); +} + +void OptComboBox::setOpt(int c) { + m_opt->setSelected(c); + m_owner->notifyChange(); +} + +OptColorButton::OptColorButton(ColorOptPtr opt, OptionWidget *owner, QWidget *parent) +: KColorButton(parent) +, m_owner(owner) +, m_opt(opt) { + setColor(m_opt->value()); + connect(this, SIGNAL(changed(const QColor&)), this, SLOT(setOpt(const QColor&))); +} + +void OptColorButton::setOpt(const QColor& c) { + m_opt->setValue(c); + m_owner->notifyChange(); +} + +OptFontRequester::OptFontRequester(FontOptPtr opt, OptionWidget *owner, QWidget *parent) +: KFontRequester(parent) +, m_owner(owner) +, m_opt(opt) { + setFont(m_opt->value()); + connect(this, SIGNAL(fontSelected(const QFont&)), this, SLOT(setOpt(const QFont&))); +} + +void OptFontRequester::setOpt(const QFont& f) { + m_opt->setValue(f); + m_owner->notifyChange(); +} diff --git a/src/option_p.h b/src/option_p.h new file mode 100644 index 0000000..f67ed58 --- /dev/null +++ b/src/option_p.h @@ -0,0 +1,135 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef OPTION_P_H +#define OPTION_P_H + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "option.h" + +class OptCheckBox : public QCheckBox { + Q_OBJECT + OptionWidget *m_owner; + BoolOptPtr m_opt; + +public: + OptCheckBox(BoolOptPtr opt, OptionWidget *owner, QWidget *parent = NULL); + +private Q_SLOTS: + void setOpt(bool); +}; + +class OptRadioButton : public QRadioButton { + Q_OBJECT + OptionWidget *m_owner; + SelectOptPtr m_opt; + int m_index; + +public: + OptRadioButton(SelectOptPtr opt, int i, OptionWidget *owner, QWidget *parent = NULL); + +private Q_SLOTS: + void setOpt(bool); +}; + +class OptSpinBox : public QSpinBox { + Q_OBJECT + OptionWidget *m_owner; + IntOptPtr m_opt; + +public: + OptSpinBox(IntOptPtr opt, OptionWidget *owner, QWidget *parent = NULL); + +private Q_SLOTS: + void setOpt(int); +}; + +class OptSlider : public QSlider { + Q_OBJECT + OptionWidget *m_owner; + IntOptPtr m_opt; + +public: + OptSlider(IntOptPtr opt, OptionWidget *owner, QWidget *parent = NULL); + +private Q_SLOTS: + void setOpt(int); +}; + +class OptLineEdit : public QLineEdit { + Q_OBJECT + OptionWidget *m_owner; + StringOptPtr m_opt; + +public: + OptLineEdit(StringOptPtr opt, OptionWidget *owner, QWidget *parent = NULL); + +private Q_SLOTS: + void setOpt(const QString&); +}; + +class OptUrlRequester : public KUrlRequester { + Q_OBJECT + OptionWidget *m_owner; + UrlOptPtr m_opt; + +public: + OptUrlRequester(UrlOptPtr opt, OptionWidget *owner, QWidget *parent = NULL); + +private Q_SLOTS: + void setOpt(const QString&); +}; + +class OptComboBox : public QComboBox { + Q_OBJECT + OptionWidget *m_owner; + ComboOptPtr m_opt; + +public: + OptComboBox(ComboOptPtr opt, OptionWidget *owner, QWidget *parent = NULL); + +private Q_SLOTS: + void setOpt(int); +}; + +class OptColorButton : public KColorButton { + Q_OBJECT + OptionWidget *m_owner; + ColorOptPtr m_opt; + +public: + OptColorButton(ColorOptPtr opt, OptionWidget *owner, QWidget *parent = NULL); + +private Q_SLOTS: + void setOpt(const QColor&); +}; + +class OptFontRequester : public KFontRequester { + Q_OBJECT + OptionWidget *m_owner; + FontOptPtr m_opt; + +public: + OptFontRequester(FontOptPtr opt, OptionWidget *owner, QWidget *parent = NULL); + +private Q_SLOTS: + void setOpt(const QFont&); +}; + +#endif //OPTION_P_H diff --git a/src/pgnparser.cpp b/src/pgnparser.cpp new file mode 100644 index 0000000..d2f3fa9 --- /dev/null +++ b/src/pgnparser.cpp @@ -0,0 +1,114 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "pgnparser.h" +#include +#include + +QRegExp PGN::number("^(\\d+)(?:(?:\\.\\s+)?(\\.\\.\\.)|\\.?)?"); +QRegExp PGN::begin_var("^\\("); +QRegExp PGN::end_var("^\\)"); +QRegExp PGN::comment("^\\{[^}]*\\}"); +QRegExp PGN::comment2("^;[^\\n]*\\n"); +QRegExp PGN::wsPattern("^\\s+"); +QRegExp PGN::tag("^\\[(\\S+)\\s+\"((?:[^\"]|\\\\\")*)\"\\]"); +QRegExp PGN::move_tag("^\\$(\\d+)"); +QRegExp PGN::move("^[^$\\{\\(\\[\\s][^\\{\\(\\)\\[\\s]*"); +QRegExp PGN::result("^(?:\\*|1-0|0-1|1/2-1/2)"); +QRegExp PGN::time("^\\([\\d:.]*\\)"); +QRegExp PGN::eol("(?:[ \t]\r?\n\r?|\r?\n\r?[ \t]|\r?\n\r?)"); + +bool PGN::tryRegExp(QRegExp& re, const QString& str, int& offset) { + if (re.indexIn(str, offset, QRegExp::CaretAtOffset) != -1) { + offset += re.matchedLength(); + return true; + } + else return false; +} + +#define IGNORE(re) if (tryRegExp((re), pgn, offset)) continue; +bool PGN::parse(const QString& pgn) { + int offset = 0; + + while (offset < pgn.length()) { + IGNORE(wsPattern); + + // read result + if (result.indexIn(pgn, offset, QRegExp::CaretAtOffset) != -1) { + QString res = pgn.mid(offset, result.matchedLength()); + offset += result.matchedLength(); + return true; + } + + IGNORE(comment2); + IGNORE(time); + + // read comment + if (tag.indexIn(pgn, offset, QRegExp::CaretAtOffset) != -1) { + m_tags[tag.cap(1)] = tag.cap(2); + offset += tag.matchedLength(); + continue; + } + + // read comment + if (comment.indexIn(pgn, offset, QRegExp::CaretAtOffset) != -1) { + m_entries.push_back(pgn.mid(offset + 1, comment.matchedLength() - 2).replace(eol, " ")); + offset += comment.matchedLength(); + continue; + } + + // read var, 1 + if (begin_var.indexIn(pgn, offset, QRegExp::CaretAtOffset) != -1) { + m_entries.push_back(BeginVariation()); + offset += begin_var.matchedLength(); + continue; + } + + // read var, 2 + if (end_var.indexIn(pgn, offset, QRegExp::CaretAtOffset) != -1) { + m_entries.push_back(EndVariation()); + offset += end_var.matchedLength(); + continue; + } + + // read move tag + if (move_tag.indexIn(pgn, offset, QRegExp::CaretAtOffset) != -1) { + // not nothing :) + tryRegExp(wsPattern, pgn, offset); + } + + int num = 0; + + // read number, and do not continue + if (number.indexIn(pgn, offset, QRegExp::CaretAtOffset) != -1) { + num = number.cap(1).toInt()*2 + (number.cap(2).isEmpty() ? 0 : 1); + offset += number.matchedLength(); + tryRegExp(wsPattern, pgn, offset); + } + + // read move + if (move.indexIn(pgn, offset, QRegExp::CaretAtOffset) != -1) { + m_entries.push_back(Move(num, move.cap(0))); + offset += move.matchedLength(); + continue; + } + + // parse error! + kDebug() << "pgn parse error! at" << pgn.mid(offset, 100); + return false; + } + + return true; +} +#undef IGNORE + +PGN::PGN(const QString& str) { + m_valid = parse(str); +} diff --git a/src/pgnparser.h b/src/pgnparser.h new file mode 100644 index 0000000..054608c --- /dev/null +++ b/src/pgnparser.h @@ -0,0 +1,61 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PGNPARSER_H +#define PGNPARSER_H + +#include +#include +#include +#ifdef Q_CC_MSVC + #pragma warning( push ) + #pragma warning( disable : 4100 ) + #include + #pragma warning( pop ) +#else + #include +#endif +#include + +class QRegExp; + +class PGN { +public: + class Move { + public: + int m_number; + QString m_move; + Move(int n, const QString& s) + : m_number(n), m_move(s) { } + }; + class BeginVariation {}; + class EndVariation {}; + typedef boost::variant Entry; + +private: +/* friend std::ostream& operator<<(std::ostream& os, const PGN& pgn);*/ + QString m_result; + bool m_valid; + + static QRegExp number, begin_var, end_var, comment, comment2, + wsPattern, tag, result, time, eol, move_tag, move; + + static bool tryRegExp(QRegExp& re, const QString& str, int& offset); + bool parse(const QString& pgn); +public: + std::vector m_entries; + std::map m_tags; + explicit PGN(const QString&); + inline bool valid() const { return m_valid; } + inline uint size() const { return m_entries.size(); } + const Entry* operator[](int index) const { return &m_entries[index]; } +}; + +#endif // PGNPARSER_H diff --git a/src/piecefactory.h b/src/piecefactory.h new file mode 100644 index 0000000..146bec1 --- /dev/null +++ b/src/piecefactory.h @@ -0,0 +1,23 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PIECEFACTORY_H +#define PIECEFACTORY_H + +#include + +template +class PieceFactory { +public: + static typename Variant::Piece createPiece(const QString&) { return typename Variant::Piece(); } +}; + +#endif // PIECEFACTORY_H + diff --git a/src/piecefunction.h b/src/piecefunction.h new file mode 100644 index 0000000..632fb36 --- /dev/null +++ b/src/piecefunction.h @@ -0,0 +1,20 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PIECEFUNCTION_H +#define PIECEFUNCTION_H + +class PieceFunction { +public: + virtual ~PieceFunction() { } + virtual void operator()(int color, int type) = 0; +}; + +#endif // PIECEFUNCTION_H diff --git a/src/piecegrid.h b/src/piecegrid.h new file mode 100644 index 0000000..8ffe0c5 --- /dev/null +++ b/src/piecegrid.h @@ -0,0 +1,94 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PIECEGRID_H +#define PIECEGRID_H + +#include "grid.h" + +/** + * A specialization of Grid useful for containing pointers. + * It is used only to contain pointers to Piece and derived classes. + */ +template +class PointerGrid : public Grid { +public: + using Grid::board; // why??? + PointerGrid(int sizeX, int sizeY); + PointerGrid(const PointerGrid& other); + template + PointerGrid(const PointerGrid& other); + + bool operator==(const PointerGrid& other) const; + + Point find(const T& x) const { + for (Point i = this->first(); i <= this->last(); i = this->next(i)) { + if ((*this)[i] && *(*this)[i] == x) + return i; + } + return Point::invalid(); + } + + virtual ~PointerGrid(); +}; + + +//BEGIN Implementation + +template +PointerGrid::PointerGrid(int sizeX, int sizeY) : Grid(sizeX, sizeY, 0) {} + +template +PointerGrid::PointerGrid(const PointerGrid& other) +: Grid(other) { + for (uint i = 0; i < board.size(); ++i) { + T* p = other.board[i]; + if (p) + board[i] = new T(*p); + else + board[i] = 0; + } +} + +template +template +PointerGrid::PointerGrid(const PointerGrid& other) +: Grid(other.getSize().x, other.getSize().y) { + for (uint i = 0; i < board.size(); ++i) { + T1* p = other.board[i]; + if (p) + board[i] = new T(*p); + else + board[i] = 0; + } +} + +template +PointerGrid::~PointerGrid() { + for (uint i = 0; i < board.size(); ++i) + delete board[i]; +} + +template +bool PointerGrid::operator==(const PointerGrid& other) const { + for (uint i = 0; i < board.size(); ++i) { + if (!board[i]) { + if (other.board[i]) return false; + } + else + if (! board[i]->equals(other.board[i])) return false; + } + return true; +} + + +//END Implementation + +#endif // PIECEGRID_H diff --git a/src/piecepool.cpp b/src/piecepool.cpp new file mode 100644 index 0000000..73ee900 --- /dev/null +++ b/src/piecepool.cpp @@ -0,0 +1,317 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + + +#include "piecepool.h" +#include +#include "animationmanager.h" +#include "chessboard.h" +#include "sprite.h" +#include + +PiecePool::PiecePool(const IColor* pool, ChessBoard* b, + AnimationManager* animManager, + KGameCanvasAbstract* parent) +: ClickableCanvas(parent) +, m_pool(pool) +, m_board(b) +, m_flipped(false) +, m_square_size(0) +, m_width(1) +, m_dragged_index(-1) +, m_anim_manager(animManager) { + setGridWidth(1); +} + + +PiecePool::~PiecePool() { } + + +QPoint PiecePool::toReal(int i) const { + int x = i % m_width; + int y = i / m_width; + + if (y & 1) + x = m_width - 1 - x; + + if (m_flipped) + y = -1 - y; + + return QPoint(x, y) * m_square_size; +} + + +int PiecePool::toLogical(const QPoint& p) const { + int x = p.x() / m_square_size; + int y = p.y() / m_square_size; + + if (x<0 || x >= m_width) + return -1; + + if (m_flipped) + y = -y; + + if (y & 1) + x = m_width - 1 - x; + + int retv = y * m_width + x; + if (retv < 0 || static_cast(retv) >= m_sprites.size()) + return -1; + + return retv; +} + + +void PiecePool::settingsChanged() { + +} + + +void PiecePool::setGridWidth(int w) { + m_width = w > 0 ? w : 1; +} + +QRect PiecePool::boardRect() { + Q_ASSERT(m_width > 0); + int height = (m_sprites.size() + m_width - 1) / m_width; + QSize sz(m_width, m_flipped ? -height : height); + return QRect(pos(), sz * m_square_size); +} + + +int PiecePool::fill() { + return m_sprites.size(); +} + + +void PiecePool::clear() { + m_sprites.clear(); +} + +void PiecePool::insertSprite(int index, const NamedSprite& nsprite) { + if(m_dragged && index > m_dragged_index) + index--; + + if(index < 0 || index > fill() ) { + kError() << "invalid index" << index; + return; + } + + m_sprites.resize(m_sprites.size()+1); + + for(int i = m_sprites.size()-1; i > index; i--) { +// double speed = (1.0 + 1.0 / (i - index + 1)) * 0.4; + m_sprites[i] = m_sprites[i-1]; + m_anim_manager->enqueue( + m_anim_manager->move(m_sprites[i], toReal(i), true, "default")); + } + + m_sprites[index] = nsprite; + + m_anim_manager->enqueue( + m_anim_manager->move(m_sprites[index], toReal(index), true, "instant")); + m_anim_manager->enqueue(m_anim_manager->appear(m_sprites[index], "default")); +} + + +NamedSprite PiecePool::getSprite(int index) { + if(m_dragged && index == m_dragged_index) + return m_dragged; + + if(m_dragged && index > m_dragged_index) + index--; + + if(index < 0 || index >= (int)m_sprites.size() ) { + kError() << "invalid index" << index; + return NamedSprite(); + } + + return m_sprites[index]; +} + + +void PiecePool::removeSprite(int index) { + if(m_dragged && index == m_dragged_index) { + m_dragged = NamedSprite(); + m_dragged_index = -1; + return; + } + + if(m_dragged && index > m_dragged_index) + index--; + + if(index < 0 || index >= (int)m_sprites.size() ) { + kError() << "invalid index" << index; + return; + } + + takeSpriteAt(index); +} + + +NamedSprite PiecePool::takeSprite(int index) { + if(m_dragged && index == m_dragged_index) { + NamedSprite retv = m_dragged; + m_dragged = NamedSprite(); + m_dragged_index = -1; + + return retv; + } + + kError() << "Only the sprite being dropped can be taken from the pool."; + return NamedSprite(); +#if 0 + if(m_dragged && index > m_dragged_index) + index--; + + if(index < 0 || index >= (int)m_sprites.size() ) { + kError() << "invalid index" << index; + return NamedSprite(); + } + + return takeSpriteAt(index); +#endif +} + + +NamedSprite PiecePool::takeSpriteAt(int index) { + if(index < 0 || index >= (int)m_sprites.size() ) { + kError() << "invalid index" << index; + return NamedSprite(); + } + + NamedSprite retv = m_sprites[index]; + if (!retv) + return NamedSprite(); + m_anim_manager->enqueue(m_anim_manager->disappear(retv, "default")); + + for(int i = index; i < (int)m_sprites.size()-1; i++) { +// double speed = (1.0 + 1.0 / (i - index + 1)) * 0.4; + m_sprites[i] = m_sprites[i+1]; + m_anim_manager->enqueue( + m_anim_manager->move(m_sprites[i], toReal(i), true, "default")); + } + m_sprites.resize(m_sprites.size()-1); + + return retv; +} + + +void PiecePool::cancelDragging(bool fadeOff) { + if(!m_dragged) + return; + + if (fadeOff) { + NamedSprite phantom = duplicate(m_dragged); + m_anim_manager->enqueue(m_anim_manager->disappear(phantom, "default")); + } + + m_dragged.sprite()->putInCanvas(this); + m_dragged.sprite()->setPixmap(loadSprite(m_dragged.name())); + insertSprite(m_dragged_index, m_dragged); + + m_dragged = NamedSprite(); + m_dragged_index = -1; +} + + +void PiecePool::flipAndMoveBy(QPoint p) { + QPoint deltapos = m_flipped ? -p : p; + moveTo(pos() + deltapos); + m_flipped = !m_flipped; + + for(int i=0;i<(int)m_sprites.size(); i++) { + SpritePtr p = m_sprites[i].sprite(); + p->setPixmap(loadSprite(m_sprites[i].name())); + m_anim_manager->enqueue( + m_anim_manager->move(m_sprites[i], toReal(i), true, "instant")); + } +} + + +void PiecePool::onResize(int new_size, bool force_reload) { + if (m_square_size == new_size && !force_reload) + return; + + m_square_size = new_size; + m_loader.setSize(m_square_size); + + // update the sprites + for (int i=0;i<(int)m_sprites.size(); i++) { + m_sprites[i].sprite()->setPixmap(loadSprite(m_sprites[i].name())); + m_anim_manager->enqueue( + m_anim_manager->move(m_sprites[i], toReal(i), true, "instant")); + } +} + + +void PiecePool::onMouseRelease(const QPoint& pos, int button) { + if (button != Qt::LeftButton || !m_dragged) + return; + + m_board->m_dropped_pool = m_pool; + m_board->m_dropped_index = m_dragged_index; + + /* did the board take this sprite? */ + m_board->dropOn( m_pool, m_dragged_index, pos + this->pos() - m_board->pos() ); + + m_board->m_dropped_pool = 0; + m_board->m_dropped_index = -1; + + cancelDragging(true); +} + + +void PiecePool::onMousePress(const QPoint& pos, int button) { + if (button != Qt::LeftButton) + return; + + if(m_dragged) { + kError() << "Eh? We are already dragging?"; + cancelDragging(); //never remove implicitly a piece from the pool + } + + int index = toLogical(pos); + if(index == -1) + return; + NamedSprite got = takeSpriteAt(index); + if(!got) + return; + + got.sprite()->hide(); + + /* recreate the sprite, as "got" may be being animated */ + QPixmap px = m_board->loadSprite(got.name()); + QPoint at = pos + this->pos() - m_board->pos() - QPoint(px.width(), px.height())/2; + m_dragged = NamedSprite( got.name(), SpritePtr(new Sprite(px, m_board->piecesGroup(), at) ) ); + m_dragged.sprite()->raise(); + m_dragged.sprite()->show(); + m_dragged_index = index; +} + + +void PiecePool::onMouseMove(const QPoint& pos, int /*button*/) { + if(m_dragged) { + m_dragged.sprite()->moveTo(pos + this->pos() - m_board->pos() + - QPoint(m_dragged.sprite()->pixmap().width(), + m_dragged.sprite()->pixmap().height() ) / 2 ); + m_board->draggingOn( m_pool, m_dragged_index, pos + this->pos() - m_board->pos() ); + } +} + +QPixmap PiecePool::loadSprite(const QString& id) { + // use board flipped state here, because the pool + // flipping only refers to the displaying of pieces + // and should not affect their orientation (which should + // stay coherent with that of the pieces on the board). + return m_loader.piecePixmap(id, m_board->flipped()); +} + +const IndexConverter* PiecePool::converter() const { return this; } diff --git a/src/piecepool.h b/src/piecepool.h new file mode 100644 index 0000000..7f48f15 --- /dev/null +++ b/src/piecepool.h @@ -0,0 +1,150 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PIECEPOOL_H +#define PIECEPOOL_H + +#include +#include "clickablecanvas.h" +#include "indexconverter.h" +#include "namedsprite_utils.h" +#include "pixmaploader.h" + +class AnimationManager; +class ChessBoard; +class IColor; + +/** + * @class PiecePool + * @brief The class representing a crazyhouse-like piece pool. + * + * PiecePool is a canvas item attached to a Board that keeps a + * stack of pieces and lets you drop them on the board, notifying + * the board. + */ +class PiecePool : public ClickableCanvas + , private IndexConverter { + +private: + const IColor* m_pool; + + /** displayed m_sprites */ + std::vector m_sprites; + + /** refrence board */ + ChessBoard* m_board; + + /** true if flipped */ + bool m_flipped; + + /** size if a square */ + int m_square_size; + + /** the width of the pool (ie how many pieces) */ + int m_width; + + /** loader class, to load pieces */ + PixmapLoader m_loader; + + /** the piece that is being dragged, if any */ + NamedSprite m_dragged; + + /** the index of the piece being dragged */ + int m_dragged_index; + + AnimationManager* m_anim_manager; + + /** internal function, resizes the grid vector to hold x pieces */ + void setFill(int x); + + /** removes the drag putting it back together with his friends in the pool. + if fadeOff is true the current drag will fade off while a new piece will + fade in the pool, while if fadeOff is false the fade off is not done. + fadeOff will typically be false if the piece sprite has been used in the + board and we don't want a clone that is fading off */ + void cancelDragging(bool fadeOff = true); + + /** takes the named sprite */ + NamedSprite takeSpriteAt(int i); + + /** converts an index to the upper left point of the corresponding square */ + virtual QPoint toReal(int i) const; + + /** finds to which index corresponds the point p, or -1 if corresponds to none */ + virtual int toLogical(const QPoint& p) const; +public: + friend class GraphicalSystem; + friend class ChessTable; + + /** Constructor, requires the board the pool will be attached to */ + PiecePool(const IColor* pool, ChessBoard* b, AnimationManager*, KGameCanvasAbstract* parent); + ~PiecePool(); + + /** returns the sprite loader */ + PixmapLoader* loader() { return &m_loader; } + + /** returns the sprite loader */ + const PixmapLoader* loader() const { return &m_loader; } + + /** Load a sprite using the sprite loader */ + QPixmap loadSprite(const QString& id); + + /** returns the flipped value */ + bool flipped() const { return m_flipped; } + + /** returns the number of pieces in the pool */ + int fill(); + + /** removes all the pieces */ + void clear(); + + /** adds a sprite to the pool */ + void insertSprite(int index, const NamedSprite& sprite); + + /** \return the sprite at the given index. */ + NamedSprite getSprite(int index); + + /** removes the sprite at the given index from the pool. */ + void removeSprite(int index); + + /** removes the sprite at the given index from the pool and returns it. */ + NamedSprite takeSprite(int index); + + + + /** sets the width of the grid (the fill will stay the same, and the + grid height will be recalculated) */ + void setGridWidth(int w); + + /** the rect that will be covered by the pool */ + virtual QRect boardRect(); + + /** flips and moves the pieces in the pool at the same time */ + void flipAndMoveBy(QPoint p); + + /** mouse release event */ + virtual void onMouseRelease(const QPoint& pos, int button); + + /** mouse press event */ + virtual void onMousePress(const QPoint& pos, int button); + + /** mouse move event */ + virtual void onMouseMove(const QPoint& pos, int button); + + /** resize event (new_size is the new size of a SQUARE) */ + virtual void onResize(int new_size, bool force_reload = false); + + /** changed settings handler */ + virtual void settingsChanged(); + + virtual const IndexConverter* converter() const; +}; + +#endif //PIECEPOOL_H diff --git a/src/pixmaploader.cpp b/src/pixmaploader.cpp new file mode 100644 index 0000000..59a49d3 --- /dev/null +++ b/src/pixmaploader.cpp @@ -0,0 +1,158 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include "common.h" +#include "loader/theme.h" +#include "pixmaploader.h" +#include "themeinfo.h" + +class PixmapLoader::ThemeLoader : public Loader::Theme { +public: + int m_ref_count; + + ThemeLoader(const ThemeInfo& t) + : Loader::Theme(t) + , m_ref_count(0) { + } +}; + +PixmapLoader::PixmapLoader() +: m_loader(NULL) +, m_size(0) +{ +} + +PixmapLoader::~PixmapLoader() { + flush(); +} + +PixmapLoader::ThemeLoadersCache& PixmapLoader::loaders() { + static ThemeLoadersCache cache; + return cache; +} + +void PixmapLoader::flush() { + if (m_loader) { + /* unref the size */ + if(m_size) + m_loader->unrefSize(m_size); + m_loader->unrefSize(0); + + /* unref the loader, and possibly destroy it */ + if(!--m_loader->m_ref_count) { + delete m_loader; + loaders().remove(m_theme); + } + m_loader = NULL; + } +} + +void PixmapLoader::setTheme(const ThemeInfo& theme) { + if (theme == m_theme) + return; + + flush(); + m_theme = theme; +} + +void PixmapLoader::setSize(int s) { + if(s == m_size) + return; + + if(m_loader) { + if(s) + m_loader->refSize(s); + if(m_size) + m_loader->unrefSize(m_size); + } + m_size = s; +} + +void PixmapLoader::initialize() { + if (m_loader) + return; + + /* try to get a loader */ + m_loader = loaders().value(m_theme, 0); + if (!m_loader) { + // no loader, yet + // create it + m_loader = new ThemeLoader(m_theme); + loaders().insert(m_theme, m_loader); + } + + Q_ASSERT(m_loader); + + m_loader->m_ref_count++; + if (m_size) + m_loader->refSize(m_size); + + m_loader->refSize(0); +} + +QPixmap PixmapLoader::getPixmap(const QString& id) { + return getValue(id); +} + +QPixmap PixmapLoader::piecePixmap(const QString& id, bool flipped) { + ::LuaApi::LuaValueMap args; + if (flipped) + args["flipped"] = 0.0; + + return getValue(id, &args); +// return getValue(id); +} + +template +T PixmapLoader::getValue(const QString& id, const ::LuaApi::LuaValueMap* args, bool allow_nil) { + if (!m_size || !m_theme) + return T(); + + if (!m_loader) + initialize(); + + return m_loader->getValue(id, m_size, args, allow_nil); +} + +template QPixmap PixmapLoader::getValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template Loader::PixmapOrMap PixmapLoader::getValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template Loader::Glyph PixmapLoader::getValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template double PixmapLoader::getValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QPointF PixmapLoader::getValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QRectF PixmapLoader::getValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QBrush PixmapLoader::getValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QColor PixmapLoader::getValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QFont PixmapLoader::getValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template ::LuaApi::LuaValueMap PixmapLoader::getValue< ::LuaApi::LuaValueMap>(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); + + +template +T PixmapLoader::getStaticValue(const QString& id, const ::LuaApi::LuaValueMap* args, bool allow_nil) { + if (!m_theme) + return T(); + + if (!m_loader) + initialize(); + + return m_loader->getValue(id, 0, args, allow_nil); +} + +template QPixmap PixmapLoader::getStaticValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template Loader::PixmapOrMap PixmapLoader::getStaticValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template Loader::Glyph PixmapLoader::getStaticValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template double PixmapLoader::getStaticValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QPointF PixmapLoader::getStaticValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QRectF PixmapLoader::getStaticValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QBrush PixmapLoader::getStaticValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QColor PixmapLoader::getStaticValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template QFont PixmapLoader::getStaticValue(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); +template ::LuaApi::LuaValueMap PixmapLoader::getStaticValue< ::LuaApi::LuaValueMap>(const QString&, const ::LuaApi::LuaValueMap*, bool allow_nil); diff --git a/src/pixmaploader.h b/src/pixmaploader.h new file mode 100644 index 0000000..e0cdf86 --- /dev/null +++ b/src/pixmaploader.h @@ -0,0 +1,83 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PIXMAPLOADER_H +#define PIXMAPLOADER_H + +#include +#include +#include +#include "loader/theme.h" +#include "themeinfo.h" + +/** + * @class PixmapLoader + * @brief The simple pixmap loading facility. + * + * This is the utility class used by the interface to load pixmap from resource ids. + * It acts simply as a wrapper around PixmapLoader::ThemeLoader, making it possible to + * use it in a simple and afficient way. + * + * Note that pixmaps will not be all of the specified size, the size is only the base size. + */ +class PixmapLoader { +private: + class ThemeLoader; + typedef QHash ThemeLoadersCache; + + /** static cache of the loaders, there should be only one for each (theme,variant) pair */ + static ThemeLoadersCache& loaders(); + + /** the current loader, or NULL */ + ThemeLoader *m_loader; + + /** the current size */ + int m_size; + + /** the current theme */ + ThemeInfo m_theme; + + /** internal, clears references to the currently used loader, if any. */ + void flush(); + + /** internal, gets or creates a loader good for the current + (theme,variant) pair and refs the size */ + void initialize(); + +public: + /** constructor */ + PixmapLoader(); + ~PixmapLoader(); + + /** set the theme */ + void setTheme(const ThemeInfo& theme); + + /** set the base size of the pixmaps. Note that returned pixmaps's size can be different. + * For instance, if the size is 100 the "background" generated by the + * chess variant will be 200x200 (and it will be tiled on the Board) + */ + void setSize(int s); + + /** looks up a string id (for instance a predefined id, like "background" or "highlighting") */ +// QPixmap operator()(const QString& id); + QPixmap getPixmap(const QString& id); + + QPixmap piecePixmap(const QString& id, bool flipped = false); + + /** returns a value */ + template + T getValue(const QString& id, const ::LuaApi::LuaValueMap* args = NULL, bool allow_nil = false); + + /** returns a static value (not depending on the size) */ + template + T getStaticValue(const QString& id, const ::LuaApi::LuaValueMap* args = NULL, bool allow_nil = false); +}; + +#endif // PIXMAPLOADER_H diff --git a/src/player.h b/src/player.h new file mode 100644 index 0000000..f5ccb19 --- /dev/null +++ b/src/player.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PLAYER_H +#define PLAYER_H + +#include + +class Player { +public: + QString name; + int rating; + + Player(const QString& name, int rating) + : name(name) + , rating(rating) { } + + Player() + : name("unknown") + , rating(-1) { } + + bool operator==(const QString& otherName) const { + return name == otherName; + } +}; + +#endif // PLAYER_H diff --git a/src/pointconverter.h b/src/pointconverter.h new file mode 100644 index 0000000..24f7311 --- /dev/null +++ b/src/pointconverter.h @@ -0,0 +1,65 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef POINTCONVERTER_H +#define POINTCONVERTER_H + +#include + +#if 0 +class PointConverter { + int m_size; + bool m_flipped; + + inline Point flipPoint(const Point& p) const { + if (m_flipped) + return Point(7-p.x, 7-p.y); + else + return p; + } + +public: + PointConverter(int size, bool flipped) + : m_size(size) + , m_flipped(flipped) { } + + inline Point toLogical(const QPoint& real) const { return flipPoint(Point(real).div(m_size)); } + inline QPoint toReal(const Point& logical) const { return flipPoint(logical) * m_size; } + + inline void flip(bool flipped) { m_flipped = flipped; } + inline void resize(int size) { m_size = size; } +}; +#endif + +class PointConverter { +protected: + virtual ~PointConverter(){}; + +public: + virtual bool flipped() const = 0; + virtual int squareSize() const = 0; + virtual Point gridSize() const = 0; + + virtual Point flipPoint(const Point& p) const { + if (flipped()) + return gridSize()-Point(1,1)-p; + else + return p; + } + virtual Point toLogical(const QPoint& real) const { + return flipPoint(Point(real).div( squareSize() )); + } + virtual QPoint toReal(const Point& logical) const { + return flipPoint(logical) * squareSize(); + } +}; + + +#endif // POINTCONVERTER_H diff --git a/src/poolinfo.cpp b/src/poolinfo.cpp new file mode 100644 index 0000000..3d50bb8 --- /dev/null +++ b/src/poolinfo.cpp @@ -0,0 +1,73 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "poolinfo.h" +#include "gameinfo.h" +#include "variants.h" + +QRegExp PoolInfo::s_pattern("^\\s+game\\s+(\\d+)" //game num + "\\s+white\\s+\\[([QKBNRP]*)\\]" // white pieces + "\\s+black\\s+\\[([QKBNRP]*)\\]" // black pieces + "(?:\\s+<\\-\\s+([WB][QKBNRP]))?" // added piece + ); + +PoolInfo::PoolInfo(const std::map& games, const QString& str) +: m_valid(false) +, m_pos_index(-1) { + +// if (s_pattern.indexIn(str) != 0) +// return; +// +// m_game_num = s_pattern.cap(1).toInt(); +// std::map::const_iterator gi = games.find(m_game_num); +// if (gi == games.end()) +// return; +// +// QString var = !gi->second.variant.isEmpty() ? gi->second.variant : QString("chess"); +// VariantInfo* variant = Variant::variant(GameInfo::variantCode(var)); +// m_pos_index = gi->second.index; +// +// m_pool = +//BROKEN +#if 0 + if (s_pattern.indexIn(str) != 0) + return; + + m_game_num = s_pattern.cap(1).toInt(); + std::map::const_iterator gi = games.find(m_game_num); + + if(gi == games.end()) + return; + + QString var = !gi->second.variant.isEmpty() ? gi->second.variant : QString("chess"); + VariantInfo* variant = Variant::variant(GameInfo::variantCode(var)); + m_pos_index = gi->second.index; + + m_pool = AbstractPosition::PoolPtr(new AbstractPosition::AbstractPool); + for(int i=0;i<2;i++) { + QString cap = s_pattern.cap(i+2); + int color = (i==0) ? WHITE : BLACK; + + for(int j=0;jtype(cap.at(j)); + AbstractPiece::Ptr p = variant->createPiece(color, type); + (*m_pool)[p]++; + } + } + + QString added = s_pattern.cap(4); + if(!added.isEmpty()) { + int color = (added.at(0) == 'W') ? WHITE : BLACK; + int type = variant->type(added.at(1)); + m_added_piece = variant->createPiece(color, type); + } + m_valid = true; +#endif +} diff --git a/src/poolinfo.h b/src/poolinfo.h new file mode 100644 index 0000000..29ec0a0 --- /dev/null +++ b/src/poolinfo.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef POOLINFO_H +#define POOLINFO_H + +#include +#include +#include +#include +#include "index.h" +#include "icsgamedata.h" + +class PoolInfo { +public: + bool m_valid; + int m_game_num; + Index m_pos_index; + PoolCollectionPtr m_pools; + Piece m_added_piece; + static QRegExp s_pattern; + + PoolInfo(const std::map& games, const QString& s); +}; + +#endif //POOLINFO_H diff --git a/src/positioninfo.cpp b/src/positioninfo.cpp new file mode 100644 index 0000000..f6a3c86 --- /dev/null +++ b/src/positioninfo.cpp @@ -0,0 +1,147 @@ +/* + Copyright (c) 2006-2007 Paolo Capriotti + (c) 2006-2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "positioninfo.h" +#include + +#include +#include + +#include "variants.h" +#include "gameinfo.h" +#include "icsapi.h" + +using namespace boost; + +// Style 12 was designed by Daniel Sleator (sleator+@cs.cmu.edu) Darooha@ICC +QRegExp PositionInfo::pattern( + "^<12>\\s+" //header + "([qkbnrpQKBNRP-]{8})\\s+" //chessboard + "([qkbnrpQKBNRP-]{8})\\s+" //chessboard + "([qkbnrpQKBNRP-]{8})\\s+" //chessboard + "([qkbnrpQKBNRP-]{8})\\s+" //chessboard + "([qkbnrpQKBNRP-]{8})\\s+" //chessboard + "([qkbnrpQKBNRP-]{8})\\s+" //chessboard + "([qkbnrpQKBNRP-]{8})\\s+" //chessboard + "([qkbnrpQKBNRP-]{8})\\s+" //chessboard + "([BW])\\s+" //black/white + "(-1|[0-7])\\s+" //passing pawn + "([01])\\s+" //castle rights + "([01])\\s+" //castle rights + "([01])\\s+" //castle rights + "([01])\\s+" //castle rights + "(-?\\d+)\\s+" //50 moves made + "(\\d+)\\s+" //game num + "(\\S+)\\s+" //white name + "(\\S+)\\s+" //black name + "(-[1-4]|[0-2])\\s+" //status + "(\\d+)\\s+" //time + "(\\d+)\\s+" //inc + "(\\d+)\\s+" //w material + "(\\d+)\\s+" //b material + "(-?\\d+)\\s+" //w time + "(-?\\d+)\\s+" //b time + "(\\d+)\\s+" //move made + "(\\S+)\\s+" //coordmove + "(\\S+)\\s+" //time used + "(\\S+)\\s+" //algmove + "([0-1])" //flip + +); + +PositionInfo::PositionRow::PositionRow(const ICSAPIPtr& icsapi, const QString& str) { + Q_ASSERT(str.length() == 8); + + row.resize(str.length()); + for (int i = 0; i < str.length(); ++i) { + QChar c = str[i]; + + row[i] = icsapi->createPiece(c); + } +} + +/** + * @return Position index as a 0-based halfmove count. + */ +int PositionInfo::index() const { + int res = (moveIndex - 1) * 2; + if (turn == 1) res++; + return res; +} + +PositionInfo::PositionInfo() +: valid(false) { } + +bool PositionInfo::load(std::map& games, const QString& str) { + if (pattern.indexIn(str) != 0) { + valid = false; + return true; + } + + bool new_game = false; + + valid = true; + int gn = pattern.cap(CaptureIndexes::GameNumber).toInt(); + std::map::iterator gi = games.find(gn); + ICSAPIPtr icsapi; + + if (gi == games.end()) { + kWarning() << "Received style12 for unknown game" << gn; + // create a gameinfo of type "dummy" + gi = games.insert(std::make_pair(gn, ICSGameData(gn, ""))).first; + new_game = true; + } + + // FIXME load icsapi +// icsapi = gi->second.icsapi; + + std::vector rows; + for (uint i = 0; i < 8; ++i) + rows.push_back(PositionRow(icsapi, pattern.cap(CaptureIndexes::ChessboardStart + i))); + + gameNumber = pattern.cap(CaptureIndexes::GameNumber).toInt(); + moveIndex = pattern.cap(CaptureIndexes::MoveOrdinal).toInt(); + whitePlayer = pattern.cap(CaptureIndexes::WhitePlayer); + blackPlayer = pattern.cap(CaptureIndexes::BlackPlayer); + turn = pattern.cap(CaptureIndexes::Turn) == "W"? 0 : 1; + + int ep = pattern.cap(CaptureIndexes::EnPassant).toInt(); + if (ep == -1) + enPassantSquare = Point::invalid(); + else + enPassantSquare = Point(ep, turn == 0? 2 : 5); + + bool wkCastle = pattern.cap(CaptureIndexes::WhiteKingCastle).toInt() == 1; + bool wqCastle = pattern.cap(CaptureIndexes::WhiteQueenCastle).toInt() == 1; + bool bkCastle = pattern.cap(CaptureIndexes::BlackKingCastle).toInt() == 1; + bool bqCastle = pattern.cap(CaptureIndexes::BlackQueenCastle).toInt() == 1; + + position = icsapi->createChessboard(turn, wkCastle, wqCastle, bkCastle, bqCastle, enPassantSquare); + for (uint i = 0; i < 8; ++i) { + for (uint j = 0; j < rows[i].row.size(); ++j) { + position->board()->set(Point(j,i), rows[i].row[j]); + } + } + + relation = static_cast(pattern.cap(CaptureIndexes::Relation).toInt()); + + whiteTime = pattern.cap(CaptureIndexes::WhiteTime).toInt(); + blackTime = pattern.cap(CaptureIndexes::BlackTime).toInt(); + if (pattern.cap(CaptureIndexes::TimeUsed).indexOf('.') == -1) { + // time is in seconds + whiteTime *= 1000; + blackTime *= 1000; + } + + lastMoveSAN = pattern.cap(CaptureIndexes::LastMove); + lastMove = pattern.cap(CaptureIndexes::LastMoveVerbose); + + return new_game; +} diff --git a/src/positioninfo.h b/src/positioninfo.h new file mode 100644 index 0000000..db633b8 --- /dev/null +++ b/src/positioninfo.h @@ -0,0 +1,101 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef POSITIONINFO_H +#define POSITIONINFO_H + +#include +#include +#include +#include + +#include +#include +#include +#include "icsapi_fwd.h" +#include "icsgamedata.h" + +class PositionInfo { +public: + enum Relation { + MoveListStart = -4, + IsolatedPosition = -3, + ObservingExamined = -2, + NotMyMove = -1, + ObservingPlayed = 0, + MyMove = 1, + Examining = 2, + UnknownRelation = -255 + }; + + class CaptureIndexes { + public: + enum { + ChessboardStart = 1, + Turn = 9, + EnPassant = 10, + WhiteKingCastle = 11, + WhiteQueenCastle = 12, + BlackKingCastle = 13, + BlackQueenCastle = 14, + ReversibleMoves = 15, + GameNumber = 16, + WhitePlayer = 17, + BlackPlayer = 18, + Relation = 19, + StartingTime = 20, + StartingIncrement = 21, + WhiteTime = 24, + BlackTime = 25, + MoveOrdinal = 26, + LastMoveVerbose = 27, + TimeUsed = 28, + LastMove = 29, + Flip = 30 + }; + }; + + class PositionRow { + public: + std::vector row; + explicit PositionRow(const ICSAPIPtr& icsapi, const QString& str); + }; + + static QRegExp pattern; + + bool valid; + PositionInfo(); + + /** + * Parse a style12 line filling the fields of this PositionInfo object. + * \param games Games we know about. + * \param style12 A style12 line. + * \return Whether the game is new. + */ + bool load(std::map& games, const QString& style12); + + int turn; + int moveIndex; + int index() const; + int gameNumber; + QString whitePlayer; + QString blackPlayer; + StatePtr position; + Point enPassantSquare; + + Relation relation; + + QString lastMoveSAN; + QString lastMove; + int whiteTime; + int blackTime; +}; + +#endif // POSITIONINFO_H diff --git a/src/pref_board.cpp b/src/pref_board.cpp new file mode 100644 index 0000000..d14ae23 --- /dev/null +++ b/src/pref_board.cpp @@ -0,0 +1,77 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + + +#include +#include "mastersettings.h" +#include "pref_board.h" + + +PrefBoard::PrefBoard(const QString&, QWidget *parent) +: QWidget(parent) { + + setupUi(this); + + { + Settings s_anim = settings().group("animations"); + groupAnimations->setChecked(s_anim.flag("enabled", true)); + checkMovements->setChecked(s_anim["movement"].flag("enabled", true)); + checkExplosions->setChecked(s_anim["explode"].flag("enabled", true)); + checkFading->setChecked(s_anim["fading"].flag("enabled", true)); + checkTransformations->setChecked(s_anim["transform"].flag("enabled", true)); + { + Settings s_sequence = s_anim.group("sequence"); + checkSequence->setChecked(s_sequence.flag("enabled", true)); + spinSequenceMax->setValue(s_sequence["max"] | 10); + } + + sliderSpeed->setValue(s_anim["speed"] | 16); + sliderSmoothness->setValue(s_anim["smoothness"] | 16); + } + + { + Settings s_border = settings().group("board-border"); + groupBorder->setChecked(s_border.flag("visible", "true")); + colorBorder->setColor(s_border["color"] |= QColor(Qt::white)); + colorBorderText->setColor(s_border["text-color"] |= QColor(Qt::black)); + fontBorder->setFont(s_border["font"] |= QApplication::font()); + } +} + +PrefBoard::~PrefBoard() { +} + +void PrefBoard::apply() { + { + Settings s_anim = settings().group("animations"); + s_anim.setFlag("enabled", groupAnimations->isChecked()); + s_anim.group("movement").setFlag("enabled", checkMovements->isChecked()); + s_anim.group("explode").setFlag("enabled", checkExplosions->isChecked()); + s_anim.group("fading").setFlag("enabled", checkFading->isChecked()); + s_anim.group("transform").setFlag("enabled", checkTransformations->isChecked()); + { + Settings s_sequence = s_anim.group("sequence"); + s_sequence.setFlag("enabled", checkSequence->isChecked()); + s_sequence["max"] = spinSequenceMax->value(); + } + + s_anim["speed"] = sliderSpeed->value(); + s_anim["smoothness"] = sliderSmoothness->value(); + } + + { + Settings s_border = settings().group("board-border"); + s_border.setFlag("visible", groupBorder->isChecked()); + s_border["color"] = colorBorder->color(); + s_border["text-color"] = colorBorderText->color(); + s_border["font"] = fontBorder->font(); + } +} + diff --git a/src/pref_board.h b/src/pref_board.h new file mode 100644 index 0000000..46a4fbe --- /dev/null +++ b/src/pref_board.h @@ -0,0 +1,28 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PREFERENCES__BOARD_H +#define PREFERENCES__BOARD_H + +#include "ui_pref_board.h" + +class PrefBoard : public QWidget + , private Ui::PrefBoard { +Q_OBJECT + +public: + PrefBoard(const QString& currentVariant, QWidget *parent = 0); + ~PrefBoard(); + +public Q_SLOTS: + void apply(); +}; + +#endif //PREFERENCES__BOARD_H diff --git a/src/pref_engines.cpp b/src/pref_engines.cpp new file mode 100644 index 0000000..496fed2 --- /dev/null +++ b/src/pref_engines.cpp @@ -0,0 +1,197 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "pref_engines.h" +#include +#include +#include +#include +#include +#include +#include +#include "foreach.h" +#include "mastersettings.h" + +class EditEngine : public KDialog { + KLineEdit* m_name; + KComboBox* m_type; + KUrlRequester* m_path; + KUrlRequester* m_work_dir; +public: + EditEngine(const QString& caption, QWidget* parent) + : KDialog(parent) { + setCaption(caption); + setButtons(Ok | Cancel); + + QFrame* page = new QFrame(this); + QVBoxLayout* layout = new QVBoxLayout; + QHBoxLayout* tmp; + QLabel* lbl; + + tmp = new QHBoxLayout; + lbl = new QLabel(i18n("&Name:"), this); + tmp->addWidget(lbl); +// tmp->addStretch(); + m_name = new KLineEdit(this); + lbl->setBuddy(m_name); + tmp->addWidget(m_name); + + tmp->addStretch(); + lbl = new QLabel(i18n("&Type:"), this); + tmp->addWidget(lbl); +// tmp->addStretch(); + m_type = new KComboBox(this); + lbl->setBuddy(m_type); + m_type->addItem(i18n("XBoard"), "xboard"); + m_type->addItem(i18n("UCI"), "UCI"); + m_type->addItem(i18n("Tagua (textual)"), "tagua-text"); + m_type->addItem(i18n("Tagua (DBUS)"), "tagua-dbus"); + m_type->addItem(i18n("GNU Shogi"), "gnushogi"); + tmp->addWidget(m_type); + layout->addLayout(tmp); + + tmp = new QHBoxLayout; + lbl = new QLabel(i18n("&Path:"), this); + tmp->addWidget(lbl); +// tmp->addStretch(); + m_path = new KUrlRequester(this); + lbl->setBuddy(m_path); + tmp->addWidget(m_path); + layout->addLayout(tmp); + + tmp = new QHBoxLayout; + lbl = new QLabel(i18n("&Work directory:"), this); + tmp->addWidget(lbl); +// tmp->addStretch(); + m_work_dir = new KUrlRequester(this); + lbl->setBuddy(m_work_dir); + tmp->addWidget(m_work_dir); + layout->addLayout(tmp); + + page->setLayout(layout); + setMainWidget(page); + + m_name->setFocus(); + } + + void load(const EngineDetails& e) { + m_name->setText(e.name); + m_type->setCurrentIndex(e.type); + m_path->setPath(e.path); + m_work_dir->setPath(e.workPath); + } + + bool validate() { + if (m_name->text().isEmpty()) { + KMessageBox::error(this, i18n("Choose a name for the engine"), i18n("No engine name")); + return false; + } + return true; + } + + void save(EngineDetails& e) { + if (validate()) { + e.name = m_name->text(); + e.type = static_cast(m_type->currentIndex()); + e.path = m_path->url().path(); + e.workPath = m_work_dir->url().path(); + } + } +}; + +PrefEngines::PrefEngines(const QString&, QWidget* parent) +: QWidget(parent) { + QHBoxLayout* layout = new QHBoxLayout; + + m_list = new QListWidget(this); + layout->addWidget(m_list); + + QVBoxLayout* buttons = new QVBoxLayout; + m_new = new QPushButton(KIcon("edit-add"), "&New...", this); + buttons->addWidget(m_new); + m_edit = new QPushButton(KIcon("edit"), "&Edit...", this); + buttons->addWidget(m_edit); + m_delete = new QPushButton(KIcon("edit-delete"), "&Delete", this); + buttons->addWidget(m_delete); + buttons->addStretch(); + layout->addLayout(buttons); + + setLayout(layout); + + connect(m_new, SIGNAL(pressed()), this, SLOT(new_engine())); + connect(m_edit, SIGNAL(pressed()), this, SLOT(edit_engine())); + connect(m_delete, SIGNAL(pressed()), this, SLOT(delete_engine())); + connect(m_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(edit_engine())); + + // load engines + foreach (Settings s, settings().group("engines").array("engine")) { + EngineDetails e; + e.load(s); + m_engines.append(e); + } + reload_engines(); + + connect(m_list, SIGNAL(currentRowChanged(int)), this, SLOT(update_buttons())); + update_buttons(); +} + +PrefEngines::~PrefEngines() { } + +void PrefEngines::apply() { + SettingArray engines = settings().group("engines").newArray("engine"); + foreach (EngineDetails e, m_engines) { + e.save(engines.append()); + } +} + +void PrefEngines::reload_engines() { + m_list->clear(); + foreach (EngineDetails e, m_engines) { + m_list->addItem(e.name); + } +} + +void PrefEngines::new_engine() { + EditEngine dialog("New engine", this); + dialog.exec(); + + EngineDetails e; + dialog.save(e); + m_engines.append(e); + + reload_engines(); +} + +void PrefEngines::edit_engine() { + int row = m_list->currentRow(); + Q_ASSERT(row != -1); + EditEngine dialog("Edit engine", this); + + EngineDetails& e = m_engines[m_list->currentRow()]; + dialog.load(e); + dialog.exec(); + dialog.save(e); + + reload_engines(); +} + +void PrefEngines::delete_engine() { + int row = m_list->currentRow(); + Q_ASSERT(row != -1); + + m_engines.removeAt(row); + reload_engines(); +} + +void PrefEngines::update_buttons() { + bool sel = m_list->currentRow() != -1; + m_edit->setEnabled(sel); + m_delete->setEnabled(sel); +} diff --git a/src/pref_engines.h b/src/pref_engines.h new file mode 100644 index 0000000..4cb9d5b --- /dev/null +++ b/src/pref_engines.h @@ -0,0 +1,45 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PREF_ENGINES_H +#define PREF_ENGINES_H + +#include "ui_pref_engines.h" +#include "engineinfo.h" +#include "settings.h" +#include +#include + +class QPushButton; +class QListWidget; + +class PrefEngines : public QWidget { +Q_OBJECT + QPushButton* m_new; + QPushButton* m_edit; + QPushButton* m_delete; + QListWidget* m_list; + + QList m_engines; + void reload_engines(); +public: + PrefEngines(const QString&, QWidget* parent = 0); + ~PrefEngines(); + + void apply(); +private Q_SLOTS: + void new_engine(); + void edit_engine(); + void delete_engine(); + void update_buttons(); +}; + +#endif // PREF_ENGINES_H + diff --git a/src/pref_highlight.h b/src/pref_highlight.h new file mode 100644 index 0000000..30308c5 --- /dev/null +++ b/src/pref_highlight.h @@ -0,0 +1,62 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PREF_HIGHLIGHT_H +#define PREF_HIGHLIGHT_H + +#include "ui_pref_highlight.h" +#include "highlighter.h" +#include +#include +#include +#include + +class ItemMapBackInserter : public PatternListAdaptorOutputIterator { +public: + typedef std::map ItemMap; +private: + ItemMap& m_map; + QListWidget* m_list; +public: + ItemMapBackInserter(ItemMap& map, QListWidget* list); + virtual void add(const Highlighter::Pattern& p); + QListWidgetItem* addItem(const Highlighter::Pattern& p); +}; + +class PrefHighlight : public QDialog + , private Ui::PrefHighlight { +Q_OBJECT +public: + typedef ItemMapBackInserter::ItemMap ItemMap; +private: + ItemMap m_patterns; + boost::shared_ptr m_highlighter; + ItemMapBackInserter* m_inserter; +public: + PrefHighlight(); + void apply(); + Highlighter::Pattern& currentPattern(); + void updateHighlighting(); +public Q_SLOTS: + void updateRegExp(); + void updateBold(); + void updateItalic(); + void updateColor(const QColor&); + void changePattern(QListWidgetItem*); + void editPatternName(QListWidgetItem* index); + void addEntry(); + void removeEntry(); + void moveEntryUp(); + void moveEntryDown(); + void moveEntry(int); +}; + + +#endif // PREF_HIGHLIGHT_H diff --git a/src/pref_movelist.cpp b/src/pref_movelist.cpp new file mode 100644 index 0000000..c805699 --- /dev/null +++ b/src/pref_movelist.cpp @@ -0,0 +1,60 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + + +#include "settings.h" +#include "movelist_p.h" +#include "pref_movelist.h" + +PrefMoveList::PrefMoveList(const QString&, QWidget *parent) +: QWidget(parent) { + + setupUi(this); + + m_settings = new MoveList::Settings; + m_settings->load(); + + groupAnimations->setChecked(m_settings->anim_enabled); + checkFading->setChecked(m_settings->anim_hideshow); + checkHighlighting->setChecked(m_settings->anim_highlight); + checkMovements->setChecked(m_settings->anim_moving); + sliderSpeed->setValue(m_settings->anim_speed); + sliderSmoothness->setValue(m_settings->anim_smoothness); + + colorSelected->setColor(m_settings->select_color); + colorComments->setColor(m_settings->comment_color); + checkMovesFont->setChecked(m_settings->use_mv_font); + fontMoves->setFont(m_settings->mv_font); + checkCommentsFont->setChecked(m_settings->use_comm_font); + fontComments->setFont(m_settings->comm_font); +} + +PrefMoveList::~PrefMoveList() { + delete m_settings; +} + +void PrefMoveList::apply() { + m_settings->anim_enabled = groupAnimations->isChecked(); + m_settings->anim_hideshow = checkFading->isChecked(); + m_settings->anim_highlight = checkHighlighting->isChecked(); + m_settings->anim_moving = checkMovements->isChecked(); + m_settings->anim_speed = sliderSpeed->value(); + m_settings->anim_smoothness = sliderSmoothness->value(); + + m_settings->select_color = colorSelected->color(); + m_settings->comment_color = colorComments->color(); + m_settings->use_mv_font = checkMovesFont->isChecked(); + m_settings->mv_font = fontMoves->font(); + m_settings->use_comm_font = checkCommentsFont->isChecked(); + m_settings->comm_font = fontComments->font(); + + m_settings->save(); +} + diff --git a/src/pref_movelist.h b/src/pref_movelist.h new file mode 100644 index 0000000..034531c --- /dev/null +++ b/src/pref_movelist.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PREFERENCES__MOVELIST_H +#define PREFERENCES__MOVELIST_H + +#include "ui_pref_movelist.h" + +namespace MoveList { class Settings; } + +class PrefMoveList : public QWidget + , private Ui::PrefMoveList { +Q_OBJECT + + MoveList::Settings *m_settings; + +public: + PrefMoveList(const QString&, QWidget *parent = 0); + ~PrefMoveList(); + +public Q_SLOTS: + void apply(); +}; + +#endif //PREFERENCES__MOVELIST_H diff --git a/src/pref_preferences.cpp b/src/pref_preferences.cpp new file mode 100644 index 0000000..f65a4fd --- /dev/null +++ b/src/pref_preferences.cpp @@ -0,0 +1,94 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include "mastersettings.h" +#include "pref_board.h" +#include "pref_movelist.h" +#include "pref_theme.h" +#include "pref_engines.h" +#include "pref_preferences.h" + +template +class PrefWrapper : public PrefBase { +private: + T* m_inner; + QString m_variant; +public: + PrefWrapper(const QString currentVariant, QWidget *parent = 0) + : PrefBase(parent) + , m_inner(0) + , m_variant(currentVariant) { } + + virtual void apply() { + if (m_inner) + m_inner->apply(); + } + + virtual void showEvent(QShowEvent*) { + if (m_inner) + return; + + m_inner = new T(m_variant, this); + QHBoxLayout *l = new QHBoxLayout(this); + l->addWidget(m_inner); + m_inner->show(); + } +}; + + +Preferences::Preferences(const QString& currentVariant, QWidget *parent) +: QDialog(parent) { + + setupUi(this); + setWindowIcon(KIcon("tagua")); + connect(buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(apply())); + + pagePref->hide(); + PrefBase *b; + KPageWidgetItem *i; + + b = new PrefWrapper(currentVariant, this); + connect(this, SIGNAL(applied()), b, SLOT(apply())); + i = pagePref->addPage(b, "Board"); + i->setHeader("Board preferences:"); + i->setIcon(KIcon("games-config-board")); + + b = new PrefWrapper(currentVariant, this); + connect(this, SIGNAL(applied()), b, SLOT(apply())); + i = pagePref->addPage(b, "Move list"); + i->setHeader("Move list preferences:"); + i->setIcon(KIcon("view-list-tree")); + + b = new PrefWrapper(currentVariant, this); + connect(this, SIGNAL(applied()), b, SLOT(apply())); + i = pagePref->addPage(b, "Theme"); + i->setHeader("Pieces & squares theme:"); + i->setIcon(KIcon("games-config-theme")); + pagePref->show(); + + b = new PrefWrapper(currentVariant, this); + connect(this, SIGNAL(applied()), b, SLOT(apply())); + i = pagePref->addPage(b, "Engines"); + i->setHeader("Engines:"); + i->setIcon(KIcon("help-hint")); + pagePref->show(); +} + +Preferences::~Preferences() { +} + +void Preferences::apply() { + applied(); + settings().changed(); +} + diff --git a/src/pref_preferences.h b/src/pref_preferences.h new file mode 100644 index 0000000..14db1bf --- /dev/null +++ b/src/pref_preferences.h @@ -0,0 +1,46 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PREFERENCES__PREFERENCES_H +#define PREFERENCES__PREFERENCES_H + +#include +#include "ui_preferences.h" + + +class PrefBase : public QWidget { +Q_OBJECT + +public: + PrefBase(QWidget *parent = 0) : QWidget(parent) {} + +public Q_SLOTS: + virtual void apply() = 0; +}; + + +class Preferences : public QDialog + , private Ui::Preferences { +Q_OBJECT + + std::list m_pages; + +public: + Preferences(const QString& currentVariant, QWidget *parent = 0); + ~Preferences(); + +Q_SIGNALS: + void applied(); + +public Q_SLOTS: + void apply(); +}; + +#endif //PREFERENCES__PREFERENCES_H diff --git a/src/pref_theme.cpp b/src/pref_theme.cpp new file mode 100644 index 0000000..c8019b3 --- /dev/null +++ b/src/pref_theme.cpp @@ -0,0 +1,407 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +// */ + +#include +#include +#include +#include +#include +#include + +#include "foreach.h" +#include "luaapi/loader.h" +#include "mastersettings.h" +#include "pref_theme.h" +#include "variant.h" +#include "variants.h" + +typedef boost::shared_ptr VariantPtr; + +PrefTheme::ThemeInfoList PrefTheme::to_theme_info_list(const QStringList& files, const Settings& s) { + //kDebug() << "about to examine " << files.size() << " desktop files"; + std::map cached_info; + + SettingArray themes = s.group("themes").array("theme"); + foreach (Settings s_theme, themes) { + ThemeInfo info = ThemeInfo::fromSettings(s_theme); + cached_info[info.desktopFile] = info; + } + + ThemeInfoList all_themes; + bool updated = false; + + for(int i = 0; i < files.size(); i++) { + QFileInfo file_info(files[i]); + std::map::iterator it = cached_info.find(files[i]); + + if (it != cached_info.end() + && file_info.exists() + && it->second.last_modified == file_info.lastModified() ) { + all_themes << it->second; + cached_info.erase(it); + } + else { + updated = true; + + ThemeInfo theme_info = ThemeInfo::fromDesktopFile(files[i]); + all_themes << theme_info; + + if (theme_info.name.isEmpty()) { + kError() << "No name property in" << files[i]; + } + } + } + + if(!cached_info.empty()) + updated = true; + + /* rewrite the cached configuration */ + if(updated) { + SettingArray themes = s.group("themes").newArray("theme"); + + for (int i = 0; i < all_themes.size(); i++) { + Settings s_theme = themes.append(); + all_themes[i].save(s_theme); + } + } + + return all_themes; +} + + +OptList PrefTheme::get_file_options(const QString& f, bool reload_defaults) { + //kDebug() << "get file options for " << f; + + if(!reload_defaults) { + std::map::iterator it = m_new_theme_options.find(f); + + if(it != m_new_theme_options.end()) + return it->second; + } + + LuaApi::Loader lua_context; + lua_context.runFile(f); + + if(lua_context.error()) { + kError() << lua_context.errorString(); + lua_context.clearError(); + + m_new_theme_options[f] = OptList(); + return OptList(); + } + + OptList o = lua_context.getValue("options", 0, NULL, true); + if(lua_context.error()) { + kError() << lua_context.errorString(); + lua_context.clearError(); + } + + if(!reload_defaults) { + SettingMap s_lua = settings().group("lua-settings").map("entry", "file-name"); + Settings entry = s_lua.insert(f); + options_list_load_from_settings(o, entry.group("options")); + + m_new_theme_options[f] = o; + } + return o; +} + + +int PrefTheme::theme_ok_for_variant(const ThemeInfo& theme_info, const QString& variant_name) { + if(theme_info.variants.contains(variant_name+"[default]", Qt::CaseInsensitive)) + return 4; + if(theme_info.variants.contains(variant_name, Qt::CaseInsensitive)) + return 3; + if(theme_info.variants.contains("any[default]", Qt::CaseInsensitive)) + return 2; + if(theme_info.variants.contains("any", Qt::CaseInsensitive)) + return 1; + return 0; +} + + +PrefTheme::PrefTheme(const QString& currentVariant, QWidget *parent) +: QWidget(parent) { + setupUi(this); + + Category *c; + + c = new Category(NULL, this); + m_categories["pieces"] = c; + tabWidget->addTab(c, "&Pieces"); + + c = new Category(NULL, this); + m_categories["squares"] = c; + tabWidget->addTab(c, "&Squares"); + + c = new Category(NULL, this); + m_categories["controls"] = c; + tabWidget->addTab(c, "&Controls"); + + MasterSettings cached_theme_info("tagua_config_cache.xml"); + connect(comboVariant, SIGNAL(currentIndexChanged(int)), this, SLOT(variantChanged())); + + for(CategoryMap::iterator cit = m_categories.begin(); cit != m_categories.end(); ++cit) { + Category* c = cit->second; + + c->m_list->setSelectionMode(QAbstractItemView::SingleSelection); + connect(c->m_list, SIGNAL(itemSelectionChanged()), c, SLOT(themeChanged())); + connect(c->m_check, SIGNAL(toggled(bool)), c, SLOT(themeChecked(bool))); + c->m_opt_layout = new QHBoxLayout(c->m_widget); + c->m_opt_layout->setMargin(0); + + c->m_themes = to_theme_info_list( + KGlobal::dirs()->findAllResources("appdata", + "themes/"+cit->first+"/*.desktop", + KStandardDirs::Recursive), + cached_theme_info.group(cit->first) + ); + + //kDebug() << "loaded " << c->m_themes.size() << " themes"; + } + + KService::List all = Variants::self().all(); + int index = 0; + int current = -1; + foreach (KService::Ptr service, all) { + if (service->name() == currentVariant) { + current = index; + } + comboVariant->addItem(service->name(), QVariant(service->name())); + index++; + } + + if (current != -1) + comboVariant->setCurrentIndex(current); + + variantChanged(); +} + +PrefTheme::~PrefTheme() { + +} + +void PrefTheme::apply() { + SettingMap variants = settings().group("variants").map("variant", "name"); + + for(CategoryMap::iterator cit = m_categories.begin(); cit != m_categories.end(); ++cit) { + Category* c = cit->second; + + for(std::map::iterator it = c->m_new_themes.begin(); + it != c->m_new_themes.end(); ++it) { + Settings var = variants.insert(it->first); + var[cit->first+"-theme"] = it->second; + } + for(std::map::iterator it = c->m_new_use_def.begin(); + it != c->m_new_use_def.end(); ++it) { + Settings var = variants.insert(it->first); + var[cit->first+"-use-def"] = it->second; + } + } + + for(std::map::iterator it = m_new_theme_options.begin(); + it != m_new_theme_options.end(); ++it) { + SettingMap s_lua = settings().group("lua-settings").map("entry", "file-name"); + Settings entry = s_lua.insert(it->first); + options_list_save_to_settings(it->second, entry.group("options")); + } +} + +void PrefTheme::update_list_view(QListWidget* list, const ThemeInfoList& themes, + QString variant_name, QString settings_theme) { + list->clear(); + + int selected_ok = 0; + QListWidgetItem *item_to_select = NULL; + + for (int i = 0; i < themes.size(); i++) { + int ok = theme_ok_for_variant(themes[i], variant_name); + if (!ok) + continue; + + ok = (themes[i].desktopFile == settings_theme) ? 5 : ok; + QListWidgetItem *list_item = new QListWidgetItem(themes[i].name, list); + + list_item->setData(Qt::UserRole, i); + if(ok > selected_ok) { + item_to_select = list_item; + selected_ok = ok; + } + } + + if(item_to_select) + list->setItemSelected(item_to_select, true); +} + +void PrefTheme::variantChanged() { + QString category = comboVariant->itemData(comboVariant->currentIndex()).toString(); + KService::Ptr service = Variants::self().get(category); + + if (!service) { + for (CategoryMap::iterator cit = m_categories.begin(); cit != m_categories.end(); ++cit) { + Category* c = cit->second; + + c->m_check->hide(); + c->m_list->clear(); + c->m_list->setEnabled(false); + c->m_label->setText(QString()); + c->m_label->setEnabled(false); + } + + return; + } + + QString variant_name = service->name(); + QString variant_proxy = service->property("X-Tagua-Proxy").toString(); + SettingMap variants = settings().group("variants").map("variant", "name"); + Settings var = variants.insert(variant_name); + bool check_proxy = variant_name != variant_proxy; + + for(CategoryMap::iterator cit = m_categories.begin(); cit != m_categories.end(); ++cit) { + Category* c = cit->second; + + c->m_check->setVisible(check_proxy); + if(check_proxy) { + bool use_def = c->m_new_use_def.count(variant_name) + ? c->m_new_use_def[variant_name] + : (var[cit->first+"-use-def"] | true).value(); + c->m_check->setText("Same as "+variant_proxy); + c->m_check->setChecked(use_def); + c->m_list->setEnabled(!use_def); + c->m_label->setEnabled(!use_def); + } + else { + c->m_list->setEnabled(true); + c->m_label->setEnabled(true); + } + + QString settings_theme = c->m_new_themes.count(variant_name) + ? c->m_new_themes[variant_name] + : (var[cit->first+"-theme"] | QString()).value(); + update_list_view(c->m_list, c->m_themes, variant_proxy, settings_theme); + } +} + +ThemeInfo PrefTheme::getBestTheme(Variant* vi, const QString& category) { + QString tag = category + "-theme"; + QString deftag = category + "-use-def"; + QString variant_name = vi->name(); + QString variant_proxy_name = vi->proxy(); + SettingMap variants = settings().group("variants").map("variant", "name"); + if (variant_name != vi->proxy() && + (variants.insert(variant_name)[deftag] | true) ) + variant_name = vi->proxy(); + + Settings var_settings = variants.insert(variant_name); + if (var_settings[tag] && QFile::exists(var_settings[tag].value()) ) { + + // there is a theme in the settings, so pick this + ThemeInfo res = ThemeInfo::fromDesktopFile(var_settings[tag].value()); + if(theme_ok_for_variant(res, variant_proxy_name)) + return res; + } + + MasterSettings cached_theme_info("tagua_config_cache.xml"); + KStandardDirs* std_dirs = KGlobal::dirs(); + ThemeInfoList themes = to_theme_info_list(std_dirs->findAllResources("appdata", + "themes/" + category + "/*.desktop", + KStandardDirs::Recursive ), + cached_theme_info.group(category)); + + int best = 0; + ThemeInfo* retv = 0; + for(int i = 0; i < themes.size(); i++) { + int ok = theme_ok_for_variant(themes[i], variant_proxy_name); + if (!ok) + continue; + + if (ok > best) { + retv = &themes[i]; + best = ok; + } + } + + + if (retv && *retv) { + var_settings[tag] = retv->desktopFile; + } + + return retv ? *retv : ThemeInfo(); +} + +PrefThemeCategory::PrefThemeCategory(QWidget* parent, PrefTheme* owner) + : QWidget(parent) + , m_parent(owner) + , m_opt_layout(NULL) + , m_opt_widget(NULL) { + setupUi(this); + m_reset = new QAction(KIcon("eraser"), "&Reset to default", this); + m_reset->setShortcut(Qt::CTRL+Qt::Key_Z); + connect(m_reset, SIGNAL(triggered()), this, SLOT(reset())); + m_resetButton->setDefaultAction(m_reset); + m_resetButton->setToolButtonStyle(Qt::ToolButtonIconOnly); +} + +void PrefThemeCategory::reset() { + if(!m_opt_widget) + return; + + QList l = m_list->selectedItems(); + if(l.isEmpty()) + return; + + int i = l[0]->data(Qt::UserRole).toInt(); + if (i >= 0 && i < m_themes.size()) { + OptList ol = m_parent->get_file_options(m_themes[i].file_name, true); + qobject_cast(m_opt_widget)->setValues(ol); + } +} + +void PrefThemeCategory::themeChanged() { + QList l = m_list->selectedItems(); + if(!l.isEmpty()) { + int i = l[0]->data(Qt::UserRole).toInt(); + if(i>=0 && isetText(m_themes[i].description); + + QString c = m_parent->comboVariant->itemData(m_parent->comboVariant->currentIndex()).toString(); + KService::Ptr service(Variants::self().get(c)); + if (service) + m_new_themes[service->name()] = m_themes[i].desktopFile; + + if(m_opt_widget) { + delete m_opt_widget; + m_opt_widget = NULL; + } + OptList ol = m_parent->get_file_options(m_themes[i].file_name); + if (ol.size() != 0 && m_list->isEnabled()) { + m_opt_widget = new OptionWidget(ol, m_widget); + m_opt_layout->addWidget(m_opt_widget); + m_reset->setEnabled(true); + } + else + m_reset->setEnabled(false); + return; + } + } + m_label->setText(QString()); +} + +void PrefThemeCategory::themeChecked(bool ck) { + m_list->setEnabled(!ck); + m_label->setEnabled(!ck); + + QString c = m_parent->comboVariant->itemData(m_parent->comboVariant->currentIndex()).toString(); + KService::Ptr service = Variants::self().get(c); + if (service) + m_new_use_def[service->name()] = ck; + themeChanged(); +} + diff --git a/src/pref_theme.h b/src/pref_theme.h new file mode 100644 index 0000000..f6044f7 --- /dev/null +++ b/src/pref_theme.h @@ -0,0 +1,83 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef PREFERENCES__THEME_H +#define PREFERENCES__THEME_H + +#include +#include +#include +#include +#include +#include "option.h" +#include "themeinfo.h" +#include "ui_pref_theme.h" +#include "ui_pref_theme_page.h" + +class Settings; +class QAction; +class Variant; + +class PrefTheme : public QWidget + , private Ui::PrefTheme { +Q_OBJECT + friend class PrefThemeCategory; + typedef class PrefThemeCategory Category; + + typedef QList ThemeInfoList; + typedef std::map CategoryMap; + + std::map m_new_theme_options; + CategoryMap m_categories; + + OptList get_file_options(const QString&, bool reload_defaults = false); + static ThemeInfoList to_theme_info_list(const QStringList& files, const Settings& s); + static int theme_ok_for_variant(const ThemeInfo&, const QString&); + static void update_list_view(QListWidget* list, const ThemeInfoList& themes, + QString variant, QString settings); +private Q_SLOTS: + void variantChanged(); + +public: + PrefTheme(const QString&, QWidget *parent = 0); + ~PrefTheme(); + + void apply(); + + static ThemeInfo getBestTheme(Variant* vi, const QString&); +}; + + +class PrefThemeCategory : public QWidget + , private Ui::PrefThemePage { +Q_OBJECT + +public: + friend class PrefTheme; + QAction* m_reset; + PrefTheme* m_parent; + QString m_id; + PrefTheme::ThemeInfoList m_themes; + std::map m_new_themes; + std::map m_new_use_def; + + QLayout *m_opt_layout; + QWidget *m_opt_widget; + + PrefThemeCategory(QWidget* parent, PrefTheme* owner); + +public Q_SLOTS: + void reset(); + void themeChanged(); + void themeChecked(bool ck); +}; + + +#endif //PREFERENCES__THEME_H diff --git a/src/qconnect.cpp b/src/qconnect.cpp new file mode 100644 index 0000000..7ee180b --- /dev/null +++ b/src/qconnect.cpp @@ -0,0 +1,97 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include + +#include +#include + +#include +#include "qconnect.h" +#include "mastersettings.h" + +static const char* timeseal_cmd_tool_tip = + "Expandable variables ref:\n" + " $(HOST_IP) - The resolved ip address of the host\n" + " $(HOST_NAME) - The host name\n" + " $(PORT) - The TCP port to connect to"; + +QConnect::QConnect(QWidget *parent, const char *name) + : QDialog(parent) +{ + setObjectName(name); + + setupUi(this); + connect(buttonTimesealPath, SIGNAL(clicked()), this, SLOT(setTimesealPath())); + chkTimesealCmd->setToolTip(timeseal_cmd_tool_tip); + editTimesealCmd->setToolTip(timeseal_cmd_tool_tip); + //kDebug() << "initializing dialog"; + + Settings s_ics = settings().group("ics"); + if (s_ics["username"]) + editUsername->setText(s_ics["username"].value()); + if (s_ics["password"]) { + editPassword->setText(s_ics["password"].value()); + chkStore->setChecked(true); + } + if (s_ics["host"]) + editHost->setText(s_ics["host"] | ""); + spinPort->setValue((s_ics["port"] | 5000)); + Settings s_timeseal = s_ics.group("timeseal"); + groupTimeseal->setChecked(s_timeseal.flag("use", false)); + editTimeseal->setText(s_timeseal["path"] |= QString()); + chkTimesealCmd->setChecked(s_timeseal["command"].flag("use", false)); editTimesealCmd->setText(s_timeseal["command"] |= "$(HOST_IP) $(PORT)"); +} + +void QConnect::setTimesealPath() { + KUrl url = KFileDialog::getOpenUrl(KUrl(), "*", this, i18n("Select timeseal binary")); + + if (!url.isLocalFile()) { + KMessageBox::sorry(0, i18n("Only local executables supported")); + return; + } + + if (!url.isEmpty()) + editTimeseal->setText(url.path()); +} + +void QConnect::accept() { + QDialog::accept(); + + Settings s_ics = settings().group("ics"); + s_ics["username"] = editUsername->text(); + if (chkStore->isChecked()) + s_ics["password"] = editPassword->text(); + else + s_ics["password"].remove(); + s_ics["host"] = editHost->text(); + s_ics["port"] = spinPort->value(); + + { + Settings s_timeseal = s_ics.group("timeseal"); + s_timeseal.setFlag("use", groupTimeseal->isChecked()); + s_timeseal["path"] = editTimeseal->text(); + s_timeseal.group("command").setFlag("use", chkTimesealCmd->isChecked()); + s_timeseal["command"] = editTimesealCmd->text(); + } + + acceptConnection(editUsername->text(), + editPassword->text(), + editHost->text(), + spinPort->value(), + groupTimeseal->isChecked() ? editTimeseal->text() : QString(), + chkTimesealCmd->isChecked() ? editTimesealCmd->text() : + QString("$(HOST_IP) $(PORT)") + ); +} + + diff --git a/src/qconnect.h b/src/qconnect.h new file mode 100644 index 0000000..44a3939 --- /dev/null +++ b/src/qconnect.h @@ -0,0 +1,31 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef QCONNECT_H +#define QCONNECT_H + +#include "ui_quickconnect.h" + +class QConnect: public QDialog, public Ui::QuickConnect { +Q_OBJECT +public: + QConnect(QWidget *parent = 0, const char *name = 0); + +public Q_SLOTS: + virtual void accept(); + void setTimesealPath(); + +Q_SIGNALS: + void acceptConnection(const QString&, const QString&, + const QString&, quint16, + const QString&, const QString&); +}; + +#endif diff --git a/src/random.cpp b/src/random.cpp new file mode 100644 index 0000000..02df1c1 --- /dev/null +++ b/src/random.cpp @@ -0,0 +1,36 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "random.h" + +Random* Random::m_instance = 0; + +Random::Random() { } + +Random::IntegerGenerator Random::rand(int min, int max) { + return IntegerGenerator(&m_generator, IntegerDistribution(min, max)); +} + +Random::RealGenerator Random::rand(float min, float max) { + return RealGenerator(&m_generator, RealDistribution(min, max)); +} + +Random::RealGenerator Random::rand(double min, double max) { + return rand(static_cast(min), + static_cast(max)); +} + +Random& Random::instance() { + if (!m_instance) { + m_instance = new Random; + } + return *m_instance; +} + diff --git a/src/random.h b/src/random.h new file mode 100644 index 0000000..a3e68a4 --- /dev/null +++ b/src/random.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef RANDOM_H +#define RANDOM_H + +#include +#include +#include +#include + +class Random { +public: + typedef boost::mt19937 RandomGenerator; + typedef boost::uniform_smallint<> IntegerDistribution; + typedef boost::uniform_real RealDistribution; + typedef boost::variate_generator IntegerGenerator; + typedef boost::variate_generator RealGenerator; +private: + RandomGenerator m_generator; + + Random(); // singleton + static Random* m_instance; +public: + IntegerGenerator rand(int min, int max); + RealGenerator rand(float min, float max); + RealGenerator rand(double min, double max); + + static Random& instance(); +}; + +#endif // RANDOM_H diff --git a/src/rubyutils.h b/src/rubyutils.h new file mode 100644 index 0000000..9c00659 --- /dev/null +++ b/src/rubyutils.h @@ -0,0 +1,28 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +extern "C" { +#include +} +#include + +namespace Ruby { + +Point value2point(VALUE); +VALUE point2value(const Point&); + +#if 0 +VALUE pcall(int* res, VALUE rcpt, ID id); +VALUE pcall(int* res, VALUE rcpt, ID id, VALUE arg1); +VALUE pcall(int* res, VALUE rcpt, ID id, VALUE arg1, VALUE arg2); +VALUE pcall(int* res, VALUE rcpt, ID id, VALUE arg1, VALUE arg2, VALUE arg3); +#endif + +} diff --git a/src/serverinfo.h b/src/serverinfo.h new file mode 100644 index 0000000..a63d7e4 --- /dev/null +++ b/src/serverinfo.h @@ -0,0 +1,91 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SERVERINFO_H +#define SERVERINFO_H + +#include +#ifdef Q_CC_MSVC + #pragma warning( push ) + #pragma warning( disable : 4100 ) + #include + #pragma warning( pop ) +#else + #include +#endif +#include "varianttraits.h" + + +template +class ChessServerInfo { +public: + boost::shared_ptr position; + ChessServerInfo(const boost::shared_ptr position) + : position(position) { } +}; + +template +class PoolServerInfo { +public: + typename PoolArray< + typename PoolTraits::type, + PoolTraits::number>::type pools; +}; + +template +struct ServerInfo { + typedef boost::variant, PoolServerInfo > type; +}; + +#if 0 + + +template class ServerInfoVisitor; + +template +class ServerInfo { +public: + virtual void apply(ServerInfoVisitor& visitor) const = 0; +}; + +template class ChessServerInfo; +template class PoolServerInfo; + +template +class ServerInfoVisitor { +public: + virtual void visit(const ChessServerInfo& info) = 0; + virtual void visit(const PoolServerInfo& info) = 0; +}; + + +template +class ChessServerInfo : public ServerInfo { +public: + boost::shared_ptr position; + virtual void apply(ServerInfoVisitor& visitor) const { + visitor.visit(*this); + } + ChessServerInfo(const boost::shared_ptr position) + : position(position) { } +}; + +template +class PoolServerInfo : public ServerInfo { +public: + typename PoolTraits::type pools[PoolTraits::number]; + virtual void apply(ServerInfoVisitor& visitor) const { + visitor.visit(*this); + } +}; + +#endif // 0 + +#endif // SERVERINFO_H diff --git a/src/serverreference.h b/src/serverreference.h new file mode 100644 index 0000000..c6ea55b --- /dev/null +++ b/src/serverreference.h @@ -0,0 +1,90 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESSREFERENCE_H +#define CHESSREFERENCE_H + +#include +#include "serverinfo.h" + +template +struct ComparePosition { + static bool apply(const Pos& chessPos, const Pos& pos) { + return static_cast(chessPos) == pos; + } +}; + +/** + * @brief Common base for ServerReference specializations. + */ +template +struct ServerReferenceBase { + typedef Pos Position; + + class InfoVisitor : public boost::static_visitor { + const Position& m_position; + public: + InfoVisitor(const Position& position) + : m_position(position) { } + bool operator()(const ChessServerInfo& info) const { + return ComparePosition::apply( + *info.position, + m_position); + } + bool operator()(const PoolServerInfo&) const { + return true; // FIXME + } + }; + + /** + * Compare a position with a @a ChessPosition. Used to check locally + * computed positions against server provided positions. + */ + static bool checkPosition(const Position& pos, const ChessPosition& serverPos) { + return serverPos == pos; + } + + /** + * Retrieve a position shared pointer from a @a ChessPosition + * pointer. Used to retrieve variant specific position + * information from @a style12.position + */ + static boost::shared_ptr getPosition( + const boost::shared_ptr& pos) { + return boost::shared_ptr( + new Position(*pos)); + } + + + /** + * Compare a position with partial information contained in another position. + */ + static bool checkPartialPosition(const Position& pos, const typename ServerInfo::type& server) { + return boost::apply_visitor(InfoVisitor(pos), server); + } +}; + +/** + * @brief ServerReference is used whenever information coming from + * the server has to be compared with variant specific structures. + */ +template +struct ServerReference : public ServerReferenceBase { }; + +template <> +struct ServerReference +: public ServerReferenceBase { + static boost::shared_ptr getPosition( + const boost::shared_ptr& pos) { + return pos; + } +}; + +#endif // CHESSREFERENCE_H diff --git a/src/settings.cpp b/src/settings.cpp new file mode 100644 index 0000000..d38f00b --- /dev/null +++ b/src/settings.cpp @@ -0,0 +1,182 @@ +/* +Copyright 2006-2007 Paolo Capriotti + +BSD License +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "settings.h" +#ifdef __SETTINGS_DEBUG +#include +#include +#endif + +SettingConstRef::SettingConstRef(const QDomElement& element) +: m_element(element) { + if (!m_element.isNull()) { + if (m_element.firstChild().toText().isNull()) + m_element.appendChild(m_element.ownerDocument().createTextNode( QString() )); + } +} + +SettingRefBase::operator bool() const { + return !element().isNull(); +} + +bool SettingRefBase::flag(const QString& attr, bool def) const { + return element().attribute(attr, def ? "true" : "false") == "true"; +} + +SettingRef::SettingRef(const QDomElement& parent, const QString& key) +: m_parent(parent) +, m_key(key) { } + +void SettingRef::remove() { + m_parent.removeChild(element()); +} + +Settings::Settings(const QDomElement& node) +: m_node(node) { } + +Settings::Settings(const Settings& other) +: m_node(other.node()) { } + +Settings& Settings::operator=(const Settings& other) { + m_node = other.node(); + return *this; +} + +SettingRef Settings::operator[](const QString& key) { + return SettingRef(node(), key); +} + +SettingConstRef Settings::operator[](const QString& key) const { + return SettingConstRef(node().firstChildElement(key)); +} + +SettingGroup Settings::group(const QString& name) const { + return SettingGroup(node(), name); +} + +SettingGroup Settings::operator()(const QString& name) const { + return group(name); +} + +SettingArray Settings::array(const QString& name) const { + return SettingArray(node(), name); +} + +SettingArray Settings::newArray(const QString& name) const { + SettingArray res(node(), name); + res.clear(); + return res; +} + +void Settings::ensureExistence(QDomElement& node, QDomElement parent, const QString& name) { + if (node.isNull()) { + node = parent.firstChildElement(name); + if (node.isNull()) { + node = parent.ownerDocument().createElement(name); + parent.appendChild(node); + } + } + Q_ASSERT(!node.isNull()); +} + +bool Settings::flag(const QString& attr, bool def) const { + //kDebug() << "get flag " << node().isNull() << " " << attr << " = " + //<< node().attribute(attr, def ? "true" : "false"); + return node().attribute(attr, def ? "true" : "false") == "true"; +} + +void Settings::setFlag(const QString& attr, bool val) { + node().setAttribute(attr, val ? "true" : "false"); +} + +SettingGroup::SettingGroup(const QDomElement& parent, const QString& name) +: m_name(name) +, m_parent(parent) { } + +QDomElement SettingGroup::node() const { + ensureExistence(const_cast(m_node), m_parent, m_name); + Q_ASSERT(!m_node.isNull()); + return m_node; +} + +void SettingGroup::remove() { + node().parentNode().removeChild(node()); +} + +SettingArray::SettingArray(const QDomElement& node, const QString& element) +: m_node(node) +, m_element(element) { + QDomNodeList elements = m_node.elementsByTagName(m_element); + m_array.resize(elements.size()); + for (int i = 0; i < elements.size(); i++) + m_array[i] = elements.item(i).toElement(); +} + +Settings SettingArray::get(int index) const { + return m_array[index]; +} + +Settings SettingArray::insert(int index) { + QDomElement el = node().ownerDocument().createElement(m_element); + node().insertBefore(el, m_array[index].node()); + Settings res = el; + m_array.insert(m_array.begin() + index, res); + return res; +} + +Settings SettingArray::append() { + QDomElement el = node().ownerDocument().createElement(m_element); + node().appendChild(el); + Settings res = el; + m_array.push_back(res); + return res; +} + +void SettingArray::clear() { + QDomNodeList children = node().childNodes(); + while (children.size() > 0) { + QDomElement e = children.item(0).toElement(); + if (!e.isNull() || e.tagName() == m_element) + node().removeChild(e); + } +} + +#ifdef __SETTINGS_DEBUG +void Settings::dump() const { + QFile outf; + outf.open(stdout, QIODevice::WriteOnly); + QTextStream out(&outf); + + if (node().isNull()) { + out << "" << endl; + return; + } + + QDomDocument temp; + temp.appendChild(temp.importNode(node(), true)); + out << temp.toString() << endl; +} +#endif diff --git a/src/settings.h b/src/settings.h new file mode 100644 index 0000000..7778456 --- /dev/null +++ b/src/settings.h @@ -0,0 +1,599 @@ +/* +Copyright 2006-2007 Paolo Capriotti + +BSD License +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef SETTINGS_H +#define SETTINGS_H + +#include +#include +#include +#include +#include +#include +#include +#include + +template class TypedSettingRef; + +template struct ReturnType { + typedef T type; + typedef TypedSettingRef wrapper; +}; + +template struct ReturnType { + typedef const T* type; + typedef type wrapper; +}; + +template +struct SettingConversionBase { + static typename ReturnType::type getValue(const QDomElement&, const QDomText& text) { + return text.data(); + } + + static void setValue(QDomElement, QDomText text, const T& val) { + text.setData(val); + } +}; + +template +struct SettingConversion : public SettingConversionBase { }; + +template +struct SettingConversion : public SettingConversionBase { + static const char* getValue(const QDomElement&, const QDomText& text) { + return qPrintable(text.data()); + } + + static void setValue(QDomElement, QDomText text, const char* val) { + text.setData(val); + } +}; + +template <> +struct SettingConversion { + static int getValue(const QDomElement&, const QDomText& text) { + return text.data().toInt(); + } + + static void setValue(QDomElement, QDomText text, int val) { + text.setData(QString::number(val)); + } +}; + +template <> +struct SettingConversion { + static QColor getValue(const QDomElement& e, const QDomText&) { + int r = e.attribute("r", "0").toInt(); + int g = e.attribute("g", "0").toInt(); + int b = e.attribute("b", "0").toInt(); + + return QColor(r, g, b); + } + + static void setValue(QDomElement e, QDomText, const QColor& val) { + e.setAttribute("r", val.red()); + e.setAttribute("g", val.green()); + e.setAttribute("b", val.blue()); + } +}; + +template <> +struct SettingConversion : public SettingConversion { }; + +template <> +struct SettingConversion { + static QFont getValue(const QDomElement&, const QDomText& text) { + QFont res; + res.fromString(text.data()); + return res; + } + + static void setValue(QDomElement, QDomText text, const QFont& font) { + text.setData(font.toString()); + } +}; + +template <> +struct SettingConversion { + static bool getValue(const QDomElement&, const QDomText& text) { + return text.data().toLower() == "true"; + } + + static void setValue(QDomElement, QDomText text, bool val) { + text.setData(val ? "true" : "false"); + } +}; + +class SettingRefBase { +protected: + virtual QDomElement element() const = 0; + virtual QDomText node() const { return element().firstChild().toText(); } +public: + virtual ~SettingRefBase() { } + template typename ReturnType::wrapper operator|(const T& val) const; + template typename ReturnType::type value(const T& defaultValue) const; + template typename ReturnType::type value() const; + template void operator>>(T& out) const; + operator bool() const; + bool flag(const QString& attr, bool def) const; +}; + +class SettingConstRef : public SettingRefBase { + QDomElement m_element; +protected: + virtual QDomElement element() const { return m_element; } +public: + SettingConstRef(const QDomElement& node); +}; + +class SettingRef : public SettingRefBase { + QDomElement m_parent; + QString m_key; +protected: + virtual QDomElement element() const { return m_parent.firstChildElement(m_key); } +public: + SettingRef(const QDomElement& node, const QString& key); + + void remove(); + template typename ReturnType::wrapper operator|=(const T& val); + template typename ReturnType::wrapper operator=(const T& val); +}; + +// class GenericSettingRef : public SettingRef { +// QDomElement m_element; +// protected: +// virtual QDomElement element() const { return m_element; } +// public: +// GenericSettingRef(const QDomElement& element, const QString& key); +// }; + +template +class TypedSettingRef { + T m_value; +public: + TypedSettingRef(const T& value) + : m_value(value) { } + + operator typename ReturnType::type() const { return value(); } + template void operator>>(U& out) const { out = m_value; } + typename ReturnType::type value() const { return m_value; } +}; + +template class SettingMap; + +/** + * @brief The Settings class provides persistent application settings on an XML file. + * + * Use this class to store your application settings if you need an hierarchical + * configuration stored on a human-readable text file. + * + * Settings completely abstracts the serialization and deserialization procedures for + * simple data types, and allows a customized XML serialization for user defined types. + * + * The configuration is hierarchical, with a Settings object representing a node of the + * tree. Each node can contain key-value pairs, accessed as + * settings["key"] + * both for reading and writing. + * + * Accessing a group returns another Settings object, and there's no need to "close" the + * group (like with the QSettings class) when you're done reading or writing. + * + * Settings support aggregates of objects in the form of linear or associative arrays. + */ +class Settings { + friend class SettingArray; +protected: + QDomElement m_node; + virtual QDomElement node() const { return m_node; } +public: + /** Create an invalid Settings object. */ + Settings() { } + virtual ~Settings() { } + /** + * Create a Settings object attached on a specified XML node. + * @param node An XML node to be used as the root of the Settings + */ + Settings(const QDomElement& node); + /** + * Create a copy of the Settings object + */ + Settings(const Settings& other); + + /** + * Assign a Settings object to another. + */ + Settings& operator=(const Settings& other); + + /** + * Read the value associated with @a key. Values returned from + * a read operation on Settings can be converted using the + * template member function @a value. + */ + SettingRef operator[](const QString& key); + + /** + * Just like the above function, but returns a constant reference. + */ + SettingConstRef operator[](const QString& key) const; + + /** + * Overload + */ + SettingRef operator[](const char* key) { return operator[](QString(key)); } + + /** + * Overload + */ + SettingConstRef operator[](const char* key) const { return operator[](QString(key)); } + + /** + * Access a setting group. + * @param name The name of the group. + * @returns A Settings object representing the specified group. + */ + class SettingGroup group(const QString& name) const; + + /** + * Shotcat to access a setting group, same as \a group + * @param name The name of the group. + * @returns A Settings object representing the specified group. + */ + class SettingGroup operator()(const QString& name) const; + + /** + * Access a setting map with keys of type @a T. + * @param element The name of every map element. + * @param key The element acting as a key. + * @returns A SettingMap object representing the specified map. + * @sa SettingMap + */ + template SettingMap map(const QString& element, const QString& key) const; + + /** + * Just like the above function, but clear the returned map. Use this + * function if the desired behaviour is to overwrite the existing map + * in the associated setting node. + */ + template SettingMap newMap(const QString& element, const QString& key) const; + + /** + * Access a setting array. + * @param element The name of every array element. + * @returns a SettingArray object representing the specified array. + * @sa SettingArray + */ + class SettingArray array(const QString& element) const; + + /** + * Just like the above function, but clear the returned array. Use this + * function if the desired behaviour is to overwrite the existing array + * in the associated setting node. + */ + class SettingArray newArray(const QString& element) const; + + /** + * Retrieve a global boolean flag for the associated setting node. + * Boolean flags are stored as XML attributes in the configuration file. + * @param attr The name of the flag. + * @param def The default value for the flag. + * @returns The flag value, or @a def, in case the specified flag does not exist. + */ + bool flag(const QString& attr, bool def) const; + /** + * Set a global boolean flag for the associated setting node. + * Boolean flags are stored as XML attributes in the configuration file. + * @param attr The name of the flag. + * @param value The value of the flag. + */ + void setFlag(const QString& attr, bool value); + + /** + * @note This function is internal to the Settings class framework. Do not use + * in client code. + */ + static void ensureExistence(QDomElement& node, QDomElement parent, const QString& name); + + +#ifdef __SETTINGS_DEBUG + void dump() const; +#endif +}; + +/** + * @brief A group of settings. + * + * Client code can use instance of this class just like they were Settings objects. + * The only external difference is that SettingGroup object can be implicitly + * converted to bool to test their existence. + * + * SettingGroup can be accessed with the Settings member function @a group. + * @sa Settings::group + */ +class SettingGroup : public Settings { + QString m_name; + QDomElement m_parent; +protected: + virtual QDomElement node() const; +public: + SettingGroup(const QDomElement& parent, const QString& name); + + /** + * Check if the SettingGroup exists. + */ + operator bool() const { return !m_node.isNull(); } + void remove(); +}; + +/** + * @brief A collection of setting nodes arranged as an associative container. + * + * A setting map is a collection of setting nodes, all having the same + * parent node and the same name, and containing an inner node acting as + * a key. + * The following is an example of how the configuration node containing a + * setting map may look like. The element name is "event" and the key name + * is "name". + * + * @verbatim + + click + action1 + + + double-click + action2 + + @endverbatim + * + * Other than the key, each element of the map may contain any arbitrarily + * nested nodes. + * + * To use a map, you simply access its elements by keys using the @a get member + * function, which returns a Settings object associated to the specified element. + * + * Elements are cached as an STL map, which is kept in sync with the configuration + * file, so read operation have the same complexity of the corresponding + * STL operations (i.e. logarithmic). + */ +template +class SettingMap { + std::map m_map; +protected: + mutable QDomElement m_node; + virtual QDomElement node() const { return m_node; } + QString m_element; + QString m_key; +public: + SettingMap(const QDomElement& node, const QString& element, const QString& key); + virtual ~SettingMap() { } + /** + * @returns The number of elements in the map. + */ + uint size() const { return m_map.size(); } + + /** + * Retrieve an element by key. + * @param index The key of the element. + * @returns The Settings object corresponding to the specified element. + */ + Settings get(const Key& index) const; + + /** + * Insert an element into the map. + * @param index The key of the element. + * @returns An Settings object containing only the specified key. This object + * can be used to add arbitrary content to the map element. + */ + Settings insert(const Key& index); + + /** + * Clear the map, removing all its elements. + */ + void clear(); +}; + +/** + * @brief A collection of nodes, acting as a linear container. + * + * A setting array is like a setting map without a special key + * node inside every element. + * + * The elements of a setting array can be only accessed by a numerical + * index, just like an STL vector. + * + * SettingsArray provides a STL-like container interface with + * random access constant iterators, so that the collection can be + * used for STL algorithms acting read-only on it. + */ +class SettingArray { + std::vector m_array; +protected: + mutable QDomElement m_node; + virtual QDomElement node() const { return m_node; } + QString m_element; +public: + typedef std::vector::const_iterator iterator; + typedef std::vector::const_iterator const_iterator; + + SettingArray(const QDomElement& node, const QString& element); + virtual ~SettingArray() { } + + /** + * @returns The number of elements in the array. + */ + uint size() const { return m_array.size(); } + + /** + * Retrieve an element by index. + * @param index The (0-based) index of the element. + * @returns A Settings object associated to the specified element. + */ + Settings get(int index) const; + + /** + * Insert an element before the specified index. + * @param index The (0-based) index of the element. + * @returns An empty Settings object. This object can be used to add + * arbitrary content to the array element. + */ + Settings insert(int index); + + /** + * Append an element into the array. + * @returns An empty Settings object. This object can be used to add + * arbitrary content to the array element. + */ + Settings append(); + + /** + * Clear the array, removing all its elements. + */ + void clear(); + + /** + * @returns A random access iterator pointing to the beginning of the array. + */ + const_iterator begin() const { return m_array.begin(); } + + /** + * @returns A random access iterator pointing past the end of the array. + */ + const_iterator end() const { return m_array.end(); } + + operator bool() const { return !m_node.isNull(); } +}; + + +// Implementation + +template +typename ReturnType::type SettingRefBase::value(const T& def) const { + if (element().isNull()) return def; + else return SettingConversion::getValue(element(), node()); +} + +template +typename ReturnType::type SettingRefBase::value() const { + return value(T()); +} + +template +typename ReturnType::wrapper SettingRefBase::operator|(const T& val) const { + return value(val); +} + +template +void SettingRefBase::operator>>(T& out) const { + out = value(out); +} + +template +typename ReturnType::wrapper SettingRef::operator|=(const T& val) { + if (element().isNull()) + return operator=(val); + return value(val); +} + +template +typename ReturnType::wrapper SettingRef::operator=(const T& val) { + if (element().isNull()) + m_parent.appendChild(m_parent.ownerDocument().createElement(m_key)); + element().appendChild(element().ownerDocument().createTextNode("")); + SettingConversion::setValue(element(), node(), val); + return val; +} + +template +SettingMap Settings::map(const QString& element, const QString& key) const { + return SettingMap(node(), element, key); +} + +template +SettingMap Settings::newMap(const QString& element, const QString& key) const { + SettingMap res(node(), element, key); + res.clear(); + return res; +} + + +template +SettingMap::SettingMap(const QDomElement& node, const QString& element, const QString& key) +: m_node(node) +, m_element(element) +, m_key(key) { + if (!m_node.isNull()) { + // scan all 'name' elements of node + QDomNodeList elements = m_node.elementsByTagName(m_element); + for (int i = 0; i < elements.size(); i++) { + QDomElement el = elements.item(i).toElement(); + + // find the key inside el + QDomElement key_element = el.firstChildElement(m_key); + Key k = SettingConstRef(key_element).value(); + + // insert the corresponding Settings object into the map + m_map[k] = el; + } + } +} + +template +Settings SettingMap::get(const Key& key) const { + return m_map.find(key)->second; +} + +template +Settings SettingMap::insert(const Key& key) { + typename std::map::const_iterator it = m_map.find(key); + if (it != m_map.end()) + return it->second; + else { + QDomElement el = node().ownerDocument().createElement(m_element); + node().appendChild(el); + Settings res = el; + m_map[key] = res; + + res[m_key] = key; + return res; + } +} + +template +void SettingMap::clear() { + QDomNode it = node().firstChild(); + while (!it.isNull()) { + QDomNode nextit = it.nextSibling(); + QDomElement e = it.toElement(); + if (!e.isNull() && e.tagName() == m_element) + node().removeChild(e); + it = nextit; + } +} + +#endif // SETTINGS_H + + diff --git a/src/sprite.cpp b/src/sprite.cpp new file mode 100644 index 0000000..4a6449e --- /dev/null +++ b/src/sprite.cpp @@ -0,0 +1,327 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include "common.h" +#include +#include "sprite.h" + + +using namespace boost; + +struct ExplosionFragment { + QPoint m_polygon[6]; + int m_pcount; + QPoint m_speed; + ExplosionFragment() : m_pcount(0) {} +}; + +/* inherit instead of typedef to ease forward declaration :) */ +class SpriteExplosion : public std::vector { + +}; + +Sprite::Sprite(const QPixmap& pix, KGameCanvasAbstract* canvas, + const QPoint& location) +: KGameCanvasPixmap(pix, canvas) +, m_pixmap(pix) +, m_explode_step(0.0) +, m_explosion(NULL) +, m_rotation(0.0) +, m_scale(1.0) +#ifdef DEBUG_PIECE +, m_dummy_opacity(255) +, m_dummy_visible(false) +#endif +{ + moveTo(location); + lower(); + +#ifdef DEBUG_PIECE + update_from_dummy(); +#endif +} + +Sprite::~Sprite() { + if(m_explosion) + delete m_explosion; +} + +Sprite* Sprite::duplicate() const { + return new Sprite(pixmap(), canvas(), pos() ); +} + +void Sprite::setThumb(const QImage& thumb) { + kDebug() << "setting thumb"; + QPixmap pix = m_pixmap; + int width = pix.width() / 2; + int height = pix.height() / 2; + QPixmap thumb_pix = QPixmap::fromImage( + thumb.scaled(width, height, + Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + + { + QPainter painter(&pix); + painter.drawPixmap(pix.width() - width, 0, thumb_pix); + } + + KGameCanvasPixmap::setPixmap(pix); +} + +void Sprite::removeThumb() { + KGameCanvasPixmap::setPixmap(m_pixmap); +} + +void Sprite::setPixmap(const QPixmap& pix) { + m_pixmap = pix; + KGameCanvasPixmap::setPixmap(pix); +} + +void Sprite::setMovementAnimation(const shared_ptr& animation) { + m_movement_animation = animation; +} + +weak_ptr Sprite::movementAnimation() const { + return m_movement_animation; +} +/* +void Sprite::setFadeAnimation(const shared_ptr& animation) { + m_fade_animation = animation; +} + +weak_ptr Sprite::fadeAnimation() const { + return m_fade_animation; +}*/ + +void Sprite::setExplosionStep(float f) { + m_explode_step = f; + changed(); +} + +void Sprite::setupExplosion(Random& random) { + if (m_explosion) { + delete m_explosion; + m_explosion = NULL; + } + m_explosion = createExplosion(random); +} + +/* + * this function generate many polygons that fill the image, + their random speeds + * + * Split points are some random point on the border (ordered accordin to the angle). + * The generated polygons are created cutting from each split point to (according + * to random's will) the center -or- a point in the mid way from the center to the + * previous or next split point. + */ +SpriteExplosion* Sprite::createExplosion(Random& random) { + SpriteExplosion* retv = new SpriteExplosion; + int w = pixmap().width(); + int h = pixmap().height(); + float splits[40]; + float splits_r[40]; + float splits_i[40]; + int split_side[40]; // the side of the image, 0 to 3 + int split_start[40]; // -1 to 1 + QPoint split_point[40]; + QPoint split_start_point[40]; + int num_splits = 0; + + if(w==0 || h==0) + return retv; + + /* generate few subsequent angles */ + Random::RealGenerator random_float = random.rand(0.4, 0.7); + for(float s = 0; s < 2*M_PI-0.3; s += random_float()) { + splits[num_splits] = s; + splits_r[num_splits] = cos(s); + splits_i[num_splits] = sin(s); + num_splits++; + } + + /* generate the random center and calculate the relative corners */ + random_float = random.rand(0.4, 0.6); + QPoint center(int(w * random_float()), int(h * random_float())); + QPoint corners[4] = { -center, QPoint(w,0)-center, + QPoint(w,h)-center, QPoint(0,h)-center }; + + /* for each split angle, find the size of the rect that contains the split point */ + for(int i=0;i0 and <0 */ + if(corners[j].x()*splits_i[i]-corners[j].y()*splits_r[i] >= 0 + && corners[j1].x()*splits_i[i]-corners[j1].y()*splits_r[i] < 0 ) { + + split_side[i] = j; + float fact = (corners[j].x()*corners[j1].y()-corners[j].y()*corners[j1].x())/ + (splits_r[i]*(corners[j1].y()-corners[j].y())- + splits_i[i]*(corners[j1].x()-corners[j].x())); + float x = splits_r[i]*fact; + float y = splits_i[i]*fact; + split_point[i] = QPoint(int(x+0.5), int(y+0.5)); + break; + } + } + + /* there should really be one :) */ + Q_ASSERT(split_side[i] != -1); + } + + /* generate the split points connections. Some will be connected with the center (0), + others will be connected to a mid-way point of the previous or next points (-1/+1) */ + Random::IntegerGenerator coin = random.rand(0, 1); + Random::IntegerGenerator die3 = random.rand(0, 2); + split_start[0] = 0; + for(int i=1;i=num_splits ? 0 : r; + if(r == i) + split_start_point[i] = QPoint(); + else + split_start_point[i] = split_point[r] * random_float(); + } + + random_float = random.rand(0.5, 1.2); + for(int i=0;ipush_back(f); + } + + return retv; +} + +void Sprite::setRotation(float f) { + m_rotation = f; + changed(); +} + +void Sprite::setScale(float f) { + m_scale = f; + changed(); +} + +void Sprite::paint(QPainter* p) { + QMatrix savem; + + /* if scale/rotate change the painter matrix */ + if(m_rotation != 0.0 || m_scale != 1.0) { + QRectF rect = pixmap().rect(); + QPointF center(rect.width()*0.5, rect.height()*0.5); + savem = p->matrix(); + p->translate(center+pos()); + p->rotate(m_rotation*180.0/M_PI); + p->scale(m_scale, m_scale); + p->translate(-center-pos()); + } + + if(m_explosion) { + p->setPen(Qt::NoPen); + p->setBrush(pixmap()); + p->translate(pos()); + + for(int i=0;isize());i++) { + ExplosionFragment& f = (*m_explosion)[i]; + QPoint delta = f.m_speed*m_explode_step; + + p->translate(delta); + p->drawConvexPolygon(f.m_polygon, f.m_pcount); + p->translate(-delta); + } + p->translate(-pos()); + } + else + KGameCanvasPixmap::paint(p); + + if(m_rotation != 0.0 || m_scale != 1.0) + p->setMatrix(savem); +} + +QRect Sprite::rect() const { + QRect retv; + + /* if exploding, set the rect to the bounding rect of the pieces */ + if(m_explosion) { + int x1=99999, x2=-99999, y1=99999, y2=-99999; + + for(int i=0;isize());i++) { + ExplosionFragment& f = (*m_explosion)[i]; + QPoint delta = f.m_speed*m_explode_step; + + for(int j=0;j + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SPRITE_H +#define SPRITE_H + +#include "kgamecanvas.h" +#include "random.h" +#include +#include + +class QPoint; +class QImage; +class Animation; +class FadeAnimation; +class SpriteExplosion; + +#undef DEBUG_PIECE + +/** + * @class Sprite + * @brief The sprite of a piece. + * + * This class is a KGameCanvasPixmap that enables a few nifty + * effects and keeps some piece-related information. + */ +class Sprite : public KGameCanvasPixmap { +private: + QPixmap m_pixmap; + + /** the movement animation class */ + boost::weak_ptr m_movement_animation; + + /** the step in the explosion */ + float m_explode_step; + + /** the explosion object */ + SpriteExplosion* m_explosion; + + /** rotation factor */ + float m_rotation; + + /** scaling factor */ + float m_scale; + + /** creates a new explosion object */ + SpriteExplosion* createExplosion(Random& random); + + /** painting implementation */ + virtual void paint(QPainter* p); + + /** returns the rectangle having to be painted */ + virtual QRect rect() const; + +public: + /** Constructor */ + Sprite(const QPixmap& pix, KGameCanvasAbstract* canvas, const QPoint& location); + virtual ~Sprite(); + + /** duplicates the piece */ + Sprite* duplicate() const; + + void setThumb(const QImage& thumb); + void removeThumb(); + + /** updates the pixmap */ + /* NOTE for paolo: why virtual? */ + virtual void setPixmap(const QPixmap&); + + /** set the movement animation */ + void setMovementAnimation(const boost::shared_ptr& animation); + + /** returns the movement animation */ + boost::weak_ptr movementAnimation() const; + +// void setFadeAnimation(const boost:shared_ptr& animation); +// boost:weak_ptr fadeAnimation() const; + + /** set the explosion step (you have to call setupExplosion before) */ + void setExplosionStep(float f); + + /** set the rotations factor */ + void setRotation(float f); + + /** set the scaling factor */ + void setScale(float f); + + /** prepares a new explosion animation */ + void setupExplosion(Random& random); + +#ifdef DEBUG_PIECE + int m_dummy_opacity; + bool m_dummy_visible; + + void update_from_dummy(){ + KGameCanvasItem::show(); + KGameCanvasItem::setOpacity(m_dummy_visible ? 64+m_dummy_opacity*3/8 : 64); + } + + /* those should be enough, even if they are not virtual, as Piece is never casted IIRC */ + int opacity(){ return m_dummy_opacity; } + int visible(){ return m_dummy_visible; } + void setOpacity(int v){ m_dummy_opacity=v; update_from_dummy(); } + void setVisible(bool v){ m_dummy_visible=v; update_from_dummy(); } + void show(){ m_dummy_visible=true; update_from_dummy(); } + void hide(){ m_dummy_visible=false; update_from_dummy(); } +#endif +}; + +#endif // SPRITE_H diff --git a/src/tabwidget.cpp b/src/tabwidget.cpp new file mode 100644 index 0000000..8125d45 --- /dev/null +++ b/src/tabwidget.cpp @@ -0,0 +1,46 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "tabwidget.h" + +#include +#include + +#include +#include + +#include + +TabWidget::TabWidget(QWidget* parent) +: KTabWidget(parent) { + m_close = new QPushButton(this); + m_close->setToolTip(i18n("Close the current tab")); + m_close->setIcon(KIcon("tab-remove")); + m_close->adjustSize(); + + connect(m_close, SIGNAL(clicked()), this, SIGNAL(closeTab())); + setCornerWidget(m_close); + + setTabBarHidden(true); +} + +// void TabWidget::insertTab(int index, QWidget* widget, const QString& caption) { +// KTabWidget::insertTab(index, widget, caption); +// kDebug() << "showing"; +// if (count() > 1) +// setTabBarHidden(false); +// } +// +// void TabWidget::removeTab(int index) { +// KTabWidget::removeTab(index); +// kDebug() << "hiding"; +// if (count() <= 1) +// setTabBarHidden(true); +// } diff --git a/src/tabwidget.h b/src/tabwidget.h new file mode 100644 index 0000000..cc26f51 --- /dev/null +++ b/src/tabwidget.h @@ -0,0 +1,30 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef TABWIDGET_H +#define TABWIDGET_H + +#include + +class QPushButton; + +class TabWidget : public KTabWidget { +Q_OBJECT + QPushButton* m_close; +public: + TabWidget(QWidget* parent); + +// void insertTab(int index, QWidget* widget, const QString& caption); +// void removeTab(int index); +Q_SIGNALS: + void closeTab(); +}; + +#endif // TABWIDGET_H diff --git a/src/tagua.desktop b/src/tagua.desktop new file mode 100644 index 0000000..14539a2 --- /dev/null +++ b/src/tagua.desktop @@ -0,0 +1,16 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Tagua +Name[cs]=Tagua +Name[it]=Tagua +Name[xx]=xxTaguaxx +GenericName=Generic Board Game +GenericName[cs]=Deskové hry +Exec=tagua %i %m -caption "%c" +Icon=tagua +Type=Application +DocPath=tagua/tagua.html +Comment=A generic board game application. +Comment[cs]=Aplikace pro různé deskové hry. +Terminal=false + diff --git a/src/tagua.lsm b/src/tagua.lsm new file mode 100644 index 0000000..d93454e --- /dev/null +++ b/src/tagua.lsm @@ -0,0 +1,16 @@ +Begin3 +Title: tagua -- Some description +Version: 0.9.9 +Entered-date: +Description: +Keywords: KDE Qt +Author: Paolo Capriotti +Maintained-by: Paolo Capriotti +Home-page: +Alternate-site: +Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils + xxxxxx tagua-0.1.tar.gz + xxx tagua-0.1.lsm +Platform: Linux. Needs KDE +Copying-policy: Custom +End diff --git a/src/tagua_it.ts b/src/tagua_it.ts new file mode 100644 index 0000000..1faf24e --- /dev/null +++ b/src/tagua_it.ts @@ -0,0 +1,369 @@ + + + Form + + Form + Maschera + + + Round: + Round: + + + Time: + Tempo: + + + Result: + Risultato: + + + Increment: + Incremento: + + + Site: + Luogo: + + + Black rating: + Punteggio del nero: + + + Event: + Evento: + + + Black: + Nero: + + + White: + Bianco: + + + Date: + Data: + + + White rating: + Punteggio del bianco: + + + ECO: + ECO: + + + + MainWindow + + &File + &File + + + &Edit + &Modifica + + + &Tools + &Strumenti + + + Actions + Azioni + + + Settings + Impostazioni + + + &New game... + &Nuova partita... + + + &Load game... + &Carica partita... + + + &Quit + &Esci + + + &Back + &Indietro + + + &Forward + &Avanti + + + Be&gin + I&nizio + + + &End + &Fine + + + &Connect + &Connetti + + + Test connect + Connessione di prova + + + &Disconnect + &Disconnetti + + + C&opy game + &Copia partita + + + P&aste game + Inco&lla partita + + + &Undo + A&nnulla + + + &Redo + &Ripeti + + + &Truncate + &Tronca + + + &Promote Variation + &Promuovi variante + + + &Edit position + &Modifica posizione + + + &Clear board + &Cancella scacchiera + + + &Set starting position + &Imposta posizione iniziale + + + &Paste position + Inc&olla posizione + + + &Copy position + Copi&a posizione + + + Promote to &queen + Promuovi a &donna + + + Promote to &rook + Promuovi a &torre + + + Promote to &bishop + Promuovi ad &alfiere + + + Promote to k&night + Promuovi a &cavallo + + + &Flip view + Inverti &visuale + + + Toggle &console + Mostra / nascondi &console + + + Highlight preferences... + Preferenze evidenziazione... + + + E&ngines + &Motori + + + Play as &white + Gioca con il &bianco + + + Play as &black + Gioca con il &nero + + + &Analyze + &Analisi + + + You have specified a folder + Hai scelto una directory + + + The specified file does not exist + Il file scelto non esiste + + + You do not have read permission to this file. + Non hai permesso di lettura su questo file. + + + Open PGN file + Apri file PGN + + + + NewGameDialog + + New game + Nuova partita + + + &Variant: + &Variante: + + + &Starting position + &Imposta posizione iniziale + + + C&urrent + &Corrente + + + Alt+U + Alt+U + + + S&tandard + S&tandard + + + Alt+T + Alt+T + + + &Help + &Aiuto + + + F1 + F1 + + + &OK + &OK + + + C&ancel + A&nnulla + + + Alt+A + Alt+A + + + + PrefHighlight + + Dialog + Dialogo + + + Pattern + Modello + + + Bold + Grassetto + + + Italic + Corsivo + + + Use this box to test your regular expression + Usa questa casella per provare la tua espressione regolare + + + Add + Aggiungi + + + Remove + Cancella + + + Up + Muovi in alto + + + Down + Muovi in basso + + + OK + OK + + + Cancel + Annulla + + + + QuickConnect + + Quick Connect + Connessione rapida + + + GroupBox + Gruppo + + + &Password: + &Password: + + + &Username: + &Nome utente: + + + &Store password on this computer + &Conserva la password su questo computer + + + Alt+S + Alt+S + + + Ser&ver: + Ser&ver: + + + ICS &host: + &Host ICS: + + + ICS p&ort: + &Porta: + + + &OK + &OK + + + &Cancel + A&nnulla + + + diff --git a/src/taguaui.rc b/src/taguaui.rc new file mode 100644 index 0000000..db3ad50 --- /dev/null +++ b/src/taguaui.rc @@ -0,0 +1,55 @@ + + + + + + + + + + + + + &Edit + + + + + + &Game + + + + + + + + + &View + + + + + + + + + + + + + + Game Toolbar + + + + + + + + diff --git a/src/themeinfo.cpp b/src/themeinfo.cpp new file mode 100644 index 0000000..070ab2f --- /dev/null +++ b/src/themeinfo.cpp @@ -0,0 +1,97 @@ +/* + Copyright (c) 2006-2007 Paolo Capriotti + (c) 2006-2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "themeinfo.h" + +#include +#include +#include +#include +#include + +#include "foreach.h" +#include "settings.h" + +ThemeInfo::operator bool() const { + return !file_name.isEmpty(); +} + +void ThemeInfo::save(Settings& s) { + s["file-name"] = file_name; + s["name"] = name; + s["description"] = description; + { + SettingArray s_variants = s.group("variants").newArray("variant"); + foreach (QString v, variants) { + Settings s_var = s_variants.append(); + s_var["name"] = v; + } + } + s["last-modified"] = last_modified.toString(); + s["desktop-file"] = desktopFile; +} + +ThemeInfo ThemeInfo::fromSettings(const Settings& s) { + ThemeInfo res; + + s["file-name"] >> res.file_name; + s["name"] >> res.name; + s["description"] >> res.description; + s["desktop-file"] >> res.desktopFile; + res.last_modified = QDateTime::fromString(s["last-modified"].value()); + + SettingArray variants = s.group("variants").array("variant"); + foreach (Settings var, variants) { + res.variants.append(var["name"].value()); + } + + return res; +} + +ThemeInfo ThemeInfo::fromDesktopFile(const QString& desktop_file) { + ThemeInfo res; + + QFileInfo desktop_file_info(desktop_file); + res.desktopFile = desktop_file; + if (!KDesktopFile::isDesktopFile(desktop_file)) { + return res; + } + + KDesktopFile theme(desktop_file); + KConfigGroup themeData = theme.desktopGroup(); + + res.name = theme.readName(); + res.description = theme.readComment(); + res.description.replace("|", "\n"); + res.variants = themeData.readEntry("X-Tagua-Variants").split(QRegExp("\\s*,\\s*")); + res.file_name = themeData.readEntry("X-Tagua-Script"); + if (res.file_name.isEmpty()) { + // use a file with the same name as the .desktop, but with .lua extension + res.file_name = desktop_file; + res.file_name.replace(QRegExp("\\.desktop$"), ".lua"); + } + else { + if (!QDir::isAbsolutePath(res.file_name)) { + // the file is relative to the .desktop directory + res.file_name = QDir(desktop_file_info.path()).filePath(res.file_name); + } + } + res.last_modified = desktop_file_info.lastModified(); + + return res; +} + +uint qHash(const ThemeInfo& info) { + return qHash(info.file_name); +} + +bool ThemeInfo::operator==(const ThemeInfo& info) const { + return desktopFile == info.desktopFile; +} diff --git a/src/themeinfo.h b/src/themeinfo.h new file mode 100644 index 0000000..d13cc95 --- /dev/null +++ b/src/themeinfo.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2006-2007 Paolo Capriotti + (c) 2006-2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef THEMEINFO_H +#define THEMEINFO_H + +#include +#include + +class Settings; + +struct ThemeInfo { + QString file_name; + QString name; + QString description; + QString desktopFile; + QStringList variants; + QDateTime last_modified; + + operator bool() const; + + bool operator==(const ThemeInfo& info) const; + + void save(Settings& s); + static ThemeInfo fromSettings(const Settings& s); + static ThemeInfo fromDesktopFile(const QString& f); +}; + +uint qHash(const ThemeInfo& info); + +#endif // THEMEINFO_H + diff --git a/src/ui.cpp b/src/ui.cpp new file mode 100644 index 0000000..0f12094 --- /dev/null +++ b/src/ui.cpp @@ -0,0 +1,223 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include +#include +#include "ui.h" +#include "controllers/abstract.h" +#include "graphicalgame.h" + +using namespace boost; + +#define SYNC_ACTION(NAME, ENUM) \ + m_ui->m_actions->action(NAME)->setEnabled(state & GraphicalGame::ENUM) +class UIActionStateObserver : public ActionStateObserver { + const UI* m_ui; + Controller* m_controller; +public: + UIActionStateObserver(const UI* ui, const shared_ptr& controller) + : m_ui(ui) + , m_controller(controller.get()) { } + + virtual void notifyActionStateChange(GraphicalGame::ActionState state) { + // check that the associated controller is active + if (m_ui->controller().get() == m_controller) { + SYNC_ACTION("begin", BEGIN); + SYNC_ACTION("back", BACK); + SYNC_ACTION("forward", FORWARD); + SYNC_ACTION("end", END); + SYNC_ACTION("edit_undo", UNDO); + SYNC_ACTION("edit_redo", REDO); + } + } +}; +#undef SYNC_ACTION + +UI::UI(KActionCollection* actions) +: m_current_tab(NULL) +, m_actions(actions) { +} + +boost::shared_ptr& UI::controller() { + Q_ASSERT(m_current_tab); + + boost::shared_ptr& res = m_controller[m_current_tab]; + Q_ASSERT(res); + + return res; +} + +boost::shared_ptr UI::controller() const { + Q_ASSERT(m_current_tab); + + ControllerMap::const_iterator it = m_controller.find(m_current_tab); + Q_ASSERT(it != m_controller.end()); + return it->second; +} + +void UI::addController(QWidget* w, const shared_ptr& controller) { + m_current_tab = w; + setController(controller); +} + +void UI::setController(const shared_ptr& controller) { + Q_ASSERT(m_current_tab); + m_controller[m_current_tab] = controller; + controller->setUI(*this); +} + +void UI::removeController(QWidget* w) { + controller()->end(); + kDebug() << "removing controller " << w; + m_controller.erase(w); +} + +void UI::setCurrentTab(QWidget* w) { + m_current_tab = w; + controller()->activate(); +} + +bool UI::undo() { + controller()->undo(); + return true; +} + +bool UI::redo() { + controller()->redo(); + return true; +} + +bool UI::truncate() { + controller()->truncate(); + return true; +} + +bool UI::promoteVariation() { + controller()->promoteVariation(); + return true; +} + +bool UI::back() { + return controller()->back(); +} + +bool UI::forward() { + return controller()->forward(); +} + +void UI::gotoFirst() { + controller()->gotoFirst(); +} + +void UI::gotoLast() { + controller()->gotoLast(); +} + +void UI::pgnCopy() { + QClipboard* cb = QApplication::clipboard(); + cb->setText(currentPGN()); +} + +QString UI::currentPGN() { + return controller()->save(); +} + +void UI::pgnPaste() { + QClipboard* cb = QApplication::clipboard(); + pgnPaste(cb->text()); +} + +void UI::pgnPaste(const QString&) { + //controller()->loadPGN(pgn); +} + +void UI::clearBoard() { + controller()->clearBoard(); +} + +void UI::setStartingPosition() { + controller()->setStartingPosition(); +} + +void UI::copyPosition() { + QClipboard* cb = QApplication::clipboard(); + cb->setText(controller()->fen()); +} + +void UI::pastePosition() { + QClipboard* cb = QApplication::clipboard(); + controller()->setFEN(cb->text()); +} + +void UI::setTurn(int turn) { + controller()->setTurn(turn); +} + +StatePtr UI::position() const { + return controller()->currentPosition(); +} + +void UI::createCtrlAction() { + controller()->createCtrlAction(); +} + +void UI::destroyCtrlAction() { + controller()->destroyCtrlAction(); +} + +ActionCollection* UI::variantActions() const { + return controller()->variantActions(); +} + +EntityToken UI::addPlayingEngine(const IColor* side, const shared_ptr& engine) { + return controller()->addPlayingEngine(side, engine); +} + +// EntityToken UI::addAnalysingEngine(const shared_ptr& engine) { +// return controller()->addAnalysingEngine(engine); +// } + +void UI::removeEntity(const EntityToken& token) { + controller()->removeEntity(token); +} + +void UI::end() { + controller() = controller()->end(); +} + +void UI::detach() { + controller()->detach(); +} + +QString UI::currentVariant() const { + return controller()->variant(); +} + +void UI::reloadSettings() { + for (ControllerMap::iterator it = m_controller.begin(), + end = m_controller.end(); + it != end; + ++it) { + it->second->reloadSettings(); + } +} + +shared_ptr +UI::createActionStateObserver(const shared_ptr& controller) const { + return shared_ptr( + new UIActionStateObserver(this, controller)); +} + +KUrl UI::url() const { return controller()->url(); } +void UI::setUrl(const KUrl& url) { controller()->setUrl(url); } + diff --git a/src/ui.h b/src/ui.h new file mode 100644 index 0000000..23f43b6 --- /dev/null +++ b/src/ui.h @@ -0,0 +1,137 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef UI_H +#define UI_H + +#include +#include +#include +#include +#include +#include "common.h" +#include "controllers/entitytoken.h" + +class ActionCollection; +class ActionStateObserver; +class Controller; +class Engine; +class KActionCollection; +class IColor; + +/** + * @brief Utility class to handle GUI actions. + * + * An instance of UI is owned by MainWindow, and every GUI action + * is connected to a slot of UI. + * A UI instance maintains a correspondence between Tagua tabs and + * associated controllers. Besides, UI knows the active tab (hence + * controller) and directs all user interaction to it. + * Whenever a new tab is created, the corresponding controller is + * added to the association, and its setUI member function is called, + * so that it can setup all the observers. + * + * To add a new tab <-> controller association, use the addController + * member function. + * If you want to replace the current controller, use setController. + * Both functions assume that the controller is new, hence initialize + * it via setUI. + */ +class UI : public QObject { +Q_OBJECT + typedef std::map > ControllerMap; + ControllerMap m_controller; + QWidget* m_current_tab; + boost::shared_ptr& controller(); + boost::shared_ptr controller() const; + KActionCollection* m_actions; + KUrl m_url; + + friend class UIActionStateObserver; +public: + /** + * Constructor. + * \param actions The action collection associated to this UI instance. + * This will be used to enable/disable actions according + * to notifications coming from the controller. + */ + UI(KActionCollection* actions); + + /** + * Add a new tab <-> controller association. + * The controller is assumed to be new, and it is initialized by calling + * its setUI member function. + */ + void addController(QWidget* tab, const boost::shared_ptr&); + /** + * Just like addController, but replace the current controller instead + * of creating a new association. The old controller is no longer referenced + * by UI, so it will be destroyed, unless other objects keep it alive. + */ + void setController(const boost::shared_ptr& controller); + /** + * Remove a controller. The controller will no longer be referenced by + * UI, so it will be destroyed, unless other objects keep it alive. + */ + void removeController(QWidget* tab); + + /** + * Create an action state observer that reacts to action state + * updates by enabling / disabling the corresponding actions. + * \sa ActionStateObserver + */ + boost::shared_ptr + createActionStateObserver(const boost::shared_ptr&) const; +public Q_SLOTS: + /** + * Change the current tab and associated controller. + */ + void setCurrentTab(QWidget* tab); + + bool undo(); + bool redo(); + bool truncate(); + bool promoteVariation(); + bool back(); + bool forward(); + void gotoFirst(); + void gotoLast(); + void setTurn(int); + void createCtrlAction(); + void destroyCtrlAction(); + ActionCollection* variantActions() const; + + void pgnCopy(); + void pgnPaste(); + void pgnPaste(const QString&); + QString currentPGN(); + + // editing + void clearBoard(); + void setStartingPosition(); + void copyPosition(); + void pastePosition(); + StatePtr position() const; + + EntityToken addPlayingEngine(const IColor* side, const boost::shared_ptr& engine); +// EntityToken addAnalysingEngine(const boost::shared_ptr& engine); + void removeEntity(const EntityToken& token); + + void end(); + void detach(); + + QString currentVariant() const; + void reloadSettings(); + + KUrl url() const; + void setUrl(const KUrl& url); +}; + +#endif diff --git a/src/ui/gametags.ui b/src/ui/gametags.ui new file mode 100644 index 0000000..b356192 --- /dev/null +++ b/src/ui/gametags.ui @@ -0,0 +1,159 @@ + + Form + + + + 0 + 0 + 140 + 463 + + + + Form + + + + 9 + + + 6 + + + + + Round: + + + + + + + + + + Time: + + + + + + + + + + + + + + + + + + + Result: + + + + + + + Increment: + + + + + + + + + + Site: + + + + + + + Black rating: + + + + + + + Event: + + + + + + + Black: + + + + + + + White: + + + + + + + + + + + + + + + + + + + + + + Date: + + + + + + + + + + White rating: + + + + + + + ECO: + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/ui/newgamedialog.ui b/src/ui/newgamedialog.ui new file mode 100644 index 0000000..8305d64 --- /dev/null +++ b/src/ui/newgamedialog.ui @@ -0,0 +1,130 @@ + + NewGameDialog + + + + 0 + 0 + 263 + 108 + + + + New game + + + true + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + &Variant: + + + m_variant + + + + + + + Qt::Horizontal + + + + 20 + 10 + + + + + + + + + 1 + 0 + + + + + + + + + + Create in new &tab + + + true + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + qPixmapFromMimeSource + + + + buttonBox + accepted() + NewGameDialog + accept() + + + 310 + 349 + + + 286 + 198 + + + + + buttonBox + rejected() + NewGameDialog + reject() + + + 211 + 349 + + + 176 + 230 + + + + + diff --git a/src/ui/pref_board.ui b/src/ui/pref_board.ui new file mode 100644 index 0000000..bf71f35 --- /dev/null +++ b/src/ui/pref_board.ui @@ -0,0 +1,424 @@ + + PrefBoard + + + + 0 + 0 + 403 + 467 + + + + Form + + + + 0 + + + 6 + + + + + + 5 + 5 + 0 + 2 + + + + Qt::StrongFocus + + + &Animations + + + true + + + + 9 + + + 6 + + + + + &Transformations + + + + + + + &Explosions + + + + + + + &Movements + + + + + + + &Fading + + + + + + + 0 + + + 6 + + + + + Rough +(little CPU usage) + + + Qt::AlignCenter + + + sliderSmoothness + + + + + + + 32 + + + 4 + + + Qt::Horizontal + + + + + + + Smooth +(high CPU usage) + + + Qt::AlignCenter + + + sliderSmoothness + + + + + + + + + Animation s&moothness: + + + Qt::AlignCenter + + + sliderSmoothness + + + + + + + 0 + + + 6 + + + + + Slow + + + sliderSpeed + + + + + + + 32 + + + 1 + + + 4 + + + Qt::Horizontal + + + + + + + Fast + + + sliderSpeed + + + + + + + + + Animation s&peed: + + + Qt::AlignCenter + + + sliderSpeed + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 31 + 20 + + + + + + + + + 7 + 5 + 15 + 0 + + + + &Max sequence length: + + + spinSequenceMax + + + + + + + 9999 + + + 2 + + + + + + + + + Animate move &sequences + + + true + + + + + + + + + + + 5 + 5 + 0 + 1 + + + + Qt::StrongFocus + + + &Border + + + true + + + + 9 + + + 6 + + + + + &Color + + + colorBorder + + + + + + + &Text Color + + + colorBorderText + + + + + + + + 1 + 0 + 1 + 0 + + + + Custom &font: + + + true + + + + + + + + + + + + + Qt::StrongFocus + + + + + + + + + + + KColorButton + QPushButton +
    kcolorbutton.h
    +
    + + KFontRequester + QWidget +
    kfontrequester.h
    +
    +
    + + groupAnimations + checkMovements + checkFading + checkExplosions + checkTransformations + checkSequence + spinSequenceMax + sliderSpeed + sliderSmoothness + groupBorder + colorBorder + colorBorderText + checkBorderFont + fontBorder + + + + + checkBorderFont + toggled(bool) + fontBorder + setEnabled(bool) + + + 228 + 442 + + + 374 + 444 + + + + + checkSequence + toggled(bool) + label_9 + setEnabled(bool) + + + 158 + 113 + + + 151 + 139 + + + + + checkSequence + toggled(bool) + spinSequenceMax + setEnabled(bool) + + + 376 + 112 + + + 404 + 143 + + + + +
    diff --git a/src/ui/pref_engines.ui b/src/ui/pref_engines.ui new file mode 100644 index 0000000..083b63f --- /dev/null +++ b/src/ui/pref_engines.ui @@ -0,0 +1,211 @@ + + PrefEngines + + + + 0 + 0 + 400 + 329 + + + + Engines + + + + 9 + + + 6 + + + + + Engine list + + + + 9 + + + 6 + + + + + + + + 0 + + + 6 + + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + Qt::Vertical + + + + 382 + 16 + + + + + + + + Engine properties + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + &Path: + + + m_path + + + + + + + + + + + + 0 + + + 6 + + + + + &Type: + + + m_type + + + + + + + + XBoard + + + + + UCI + + + + + Tagua (text) + + + + + Tagua (D-BUS) + + + + + + + + + + 0 + + + 6 + + + + + &Work dir: + + + m_workdir + + + + + + + + + + + + + + + + KUrlRequester + QWidget +
    kurlrequester.h
    +
    +
    + + m_type + m_add_engine + m_remove_engine + + + +
    diff --git a/src/ui/pref_highlight.ui b/src/ui/pref_highlight.ui new file mode 100644 index 0000000..3ae1f57 --- /dev/null +++ b/src/ui/pref_highlight.ui @@ -0,0 +1,323 @@ + + PrefHighlight + + + + 0 + 0 + 515 + 363 + + + + Dialog + + + + 9 + + + 6 + + + + + Qt::Horizontal + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + Pattern + + + + + + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + Bold + + + + + + + Italic + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 52 + + + + + + + + 0 + + + 6 + + + + + + + + + Sans Serif + 8 + 50 + true + false + false + false + + + + Use this box to test your regular expression + + + + + + + + + Qt::Vertical + + + + 20 + 51 + + + + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + Add + + + + + + + Remove + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + 0 + + + 6 + + + + + Up + + + + + + + Down + + + + + + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + KColorButton + QPushButton +
    kcolorbutton.h
    +
    +
    + + + + m_ok + clicked() + PrefHighlight + accept() + + + 423 + 350 + + + 96 + 254 + + + + + m_cancel + clicked() + PrefHighlight + reject() + + + 504 + 350 + + + 179 + 282 + + + + +
    diff --git a/src/ui/pref_movelist.ui b/src/ui/pref_movelist.ui new file mode 100644 index 0000000..5931565 --- /dev/null +++ b/src/ui/pref_movelist.ui @@ -0,0 +1,346 @@ + + PrefMoveList + + + + 0 + 0 + 434 + 431 + + + + Form + + + + 0 + + + 6 + + + + + + 5 + 5 + 0 + 1 + + + + Qt::StrongFocus + + + &Animations + + + true + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + Rough +(little CPU usage) + + + Qt::AlignCenter + + + sliderSmoothness + + + + + + + 32 + + + 4 + + + Qt::Horizontal + + + + + + + Smooth +(high CPU usage) + + + Qt::AlignCenter + + + sliderSmoothness + + + + + + + + + Animation s&peed: + + + Qt::AlignCenter + + + sliderSpeed + + + + + + + 0 + + + 6 + + + + + Slow + + + sliderSpeed + + + + + + + 32 + + + 4 + + + Qt::Horizontal + + + + + + + Fast + + + sliderSpeed + + + + + + + + + &Movements + + + + + + + &Fading + + + + + + + &Smooth highlighting + + + + + + + Animation s&moothness: + + + Qt::AlignCenter + + + sliderSmoothness + + + + + + + + + + + 5 + 5 + 0 + 1 + + + + &Colors and fonts + + + + 9 + + + 6 + + + + + C&omments color: + + + colorComments + + + + + + + + 1 + 0 + 1 + 0 + + + + Cus&tom comments font: + + + true + + + + + + + C&ustom moves font: + + + true + + + + + + + S&elected move color: + + + colorSelected + + + + + + + + + + Qt::StrongFocus + + + + + + + + + + Qt::StrongFocus + + + + + + + + + + + KColorButton + QPushButton +
    kcolorbutton.h
    +
    + + KFontRequester + QWidget +
    kfontrequester.h
    +
    +
    + + groupAnimations + checkMovements + checkFading + checkHighlighting + sliderSpeed + sliderSmoothness + colorSelected + colorComments + checkMovesFont + fontMoves + checkCommentsFont + fontComments + + + + + checkMovesFont + toggled(bool) + fontMoves + setEnabled(bool) + + + 269 + 360 + + + 359 + 364 + + + + + checkCommentsFont + toggled(bool) + fontComments + setEnabled(bool) + + + 282 + 397 + + + 370 + 397 + + + + +
    diff --git a/src/ui/pref_theme.ui b/src/ui/pref_theme.ui new file mode 100644 index 0000000..b79337c --- /dev/null +++ b/src/ui/pref_theme.ui @@ -0,0 +1,70 @@ + + PrefTheme + + + + 0 + 0 + 448 + 458 + + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + &Variant: + + + comboVariant + + + + + + + + + + + + + + + comboVariant + + + + diff --git a/src/ui/pref_theme_page.ui b/src/ui/pref_theme_page.ui new file mode 100644 index 0000000..ef1eebe --- /dev/null +++ b/src/ui/pref_theme_page.ui @@ -0,0 +1,49 @@ + + PrefThemePage + + + + 0 + 0 + 430 + 467 + + + + + + + + + + + + + + + + + + + + + + ... + + + + + + + + + + + + m_check + m_list + m_resetButton + + + + diff --git a/src/ui/preferences.ui b/src/ui/preferences.ui new file mode 100644 index 0000000..d124860 --- /dev/null +++ b/src/ui/preferences.ui @@ -0,0 +1,79 @@ + + Preferences + + + + 0 + 0 + 473 + 367 + + + + Change Tagua Settings + + + + 9 + + + 6 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + + KPageWidget + QWidget +
    kpagewidget.h
    +
    +
    + + + + buttonBox + accepted() + Preferences + accept() + + + 269 + 346 + + + 271 + 366 + + + + + buttonBox + rejected() + Preferences + reject() + + + 425 + 350 + + + 425 + 364 + + + + +
    diff --git a/src/ui/quickconnect.ui b/src/ui/quickconnect.ui new file mode 100644 index 0000000..efe2cbd --- /dev/null +++ b/src/ui/quickconnect.ui @@ -0,0 +1,329 @@ + + QuickConnect + + + + 0 + 0 + 345 + 459 + + + + Quick Connect + + + false + + + + 9 + + + 6 + + + + + &Login + + + + 9 + + + 6 + + + + + QLineEdit::Password + + + + + + + &Password: + + + editPassword + + + + + + + + + + &Username: + + + editUsername + + + + + + + &Store password on this computer + + + Alt+S + + + + + + + + + + Ser&ver: + + + + 9 + + + 6 + + + + + + + + ICS p&ort: + + + spinPort + + + + + + + 65536 + + + + + + + ICS &host: + + + editHost + + + + + + + + + + Qt::StrongFocus + + + &Timeseal + + + true + + + true + + + + 9 + + + 6 + + + + + ... + + + + + + + + + + &File Path: + + + editTimeseal + + + + + + + + + + + + + + + + + Use &custom command line arguments + + + Alt+S + + + true + + + + + + + + + + Qt::Vertical + + + + 327 + 21 + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + &OK + + + + + + true + + + true + + + + + + + &Cancel + + + + + + true + + + + + + + + + qPixmapFromMimeSource + + editUsername + editPassword + chkStore + editHost + spinPort + groupTimeseal + editTimeseal + buttonTimesealPath + chkTimesealCmd + editTimesealCmd + buttonOk + buttonCancel + + + + + buttonCancel + clicked() + QuickConnect + reject() + + + 303 + 506 + + + 20 + 20 + + + + + buttonOk + clicked() + QuickConnect + accept() + + + 217 + 506 + + + 20 + 20 + + + + + chkTimesealCmd + toggled(bool) + editTimesealCmd + setEnabled(bool) + + + 84 + 382 + + + 85 + 406 + + + + + diff --git a/src/usermove.h b/src/usermove.h new file mode 100644 index 0000000..0e172cb --- /dev/null +++ b/src/usermove.h @@ -0,0 +1,43 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef USERMOVE_H +#define USERMOVE_H + +#include +#include + +struct NormalUserMove { + Point from; + Point to; + int promotionType; + + NormalUserMove(const Point& from, const Point& to) + : from(from) + , to(to) + , promotionType(-1) { } + + bool valid() const { + return from != Point::invalid() && to != Point::invalid(); + } +}; + +struct DropUserMove { + int pool; + int piece_index; + Point to; + + DropUserMove(int pool, int piece_index, const Point& to) + : pool(pool) + , piece_index(piece_index) + , to(to) { } +}; + +#endif //USERMOVE_H diff --git a/src/variant.cpp b/src/variant.cpp new file mode 100644 index 0000000..13037ff --- /dev/null +++ b/src/variant.cpp @@ -0,0 +1,32 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "variant.h" + +Variant::Variant(const QString& name, Repository* repo, + const QString& proxy, bool hidden) +: m_name(name) +, m_proxy(proxy) +, m_hidden(hidden) +, m_repo(repo) { } + +Variant::~Variant() { + delete m_repo; +} + +QString Variant::proxy() const { return m_proxy; } + +QString Variant::name() const { return m_name; } + +bool Variant::hidden() const { return m_hidden; } + +Repository* Variant::repository() { return m_repo; } +const Repository* Variant::repository() const { return m_repo; } + diff --git a/src/variant.h b/src/variant.h new file mode 100644 index 0000000..65caa52 --- /dev/null +++ b/src/variant.h @@ -0,0 +1,49 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CORE__VARIANT_H +#define CORE__VARIANT_H + +#include +#include + +#include + +/** + * @brief A Variant instance represents a game supported in Tagua. + */ +class TAGUA_EXPORT Variant { + QString m_name; + QString m_proxy; + bool m_hidden; + Repository* m_repo; +public: + Variant(const QString& name, Repository* repo, + const QString& proxy = QString(), + bool hidden = false); + + ~Variant(); + + QString name() const; + + QString proxy() const; + + bool hidden() const; + + const Repository* repository() const; + Repository* repository(); +}; + +template +Interface* requestComponent(Variant* var, const QString& component) { + return requestInterface(var->repository()->getComponent(component)); +} + +#endif // CORE__VARIANT_H diff --git a/src/variants.cpp b/src/variants.cpp new file mode 100644 index 0000000..12a84ae --- /dev/null +++ b/src/variants.cpp @@ -0,0 +1,79 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "variants.h" +#include +#include +#include "foreach.h" +#include "variant.h" + +void load_plugins(); + +typedef Repository* PluginFactory(IVariantLoader*); + +Repository* Variants::load(const KService::Ptr& plugin) { + // load plugin + QString symbol = plugin->library() + "_initrepo"; + KLibrary pluginLib(plugin->library()); + + // resolve initrepo function + void* initrepo_ = pluginLib.resolveSymbol(qPrintable(symbol)); + if (!initrepo_) { + kWarning() << "Error loading plugin" << plugin->library(); + kWarning() << pluginLib.errorString(); + return false; + } + PluginFactory* initrepo = reinterpret_cast(initrepo_); + + return (*initrepo)(this); +} + +Variants::Variants() { } + +Variants& Variants::self() { + static Variants inst; + return inst; +} + +Variant* Variants::create(const KService::Ptr& plugin) { + Repository* repo = load(plugin); + if (repo) + return new Variant(plugin->name(), repo, + plugin->property("X-Tagua-Proxy").toString()); + + return 0; +} + +Variant* Variants::create(const QString& name) { + KService::Ptr service = get(name); + return service ? create(service) : 0; +} + +KService::Ptr Variants::get(const QString& name) { + KService::List services = + KServiceTypeTrader::self()->query("Tagua/Variant", + "Name =~ '" + name + "'"); + if (services.empty()) + return KService::Ptr(); + else + return services[0]; +} + +KService::List Variants::all() const { + return KServiceTypeTrader::self()->query( + "Tagua/Variant", "[X-Tagua-Hidden] == false"); +} + +Repository* Variants::getRepository(const QString& variant) { + KService::Ptr service = get(variant); + if (!service) return 0; + + return load(service); +} diff --git a/src/variants.h b/src/variants.h new file mode 100644 index 0000000..735b7bf --- /dev/null +++ b/src/variants.h @@ -0,0 +1,42 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + + +#ifndef VARIANTS_H +#define VARIANTS_H + +#include +#include +#include +#include "core/variantloader.h" + +class Variant; +class Repository; + +class Variants : public IVariantLoader { + Variants(); + + Repository* load(const KService::Ptr& plugin); +public: + KService::Ptr get(const QString& name); + Variant* create(const KService::Ptr& plugin); + Variant* create(const QString& name); + + /** + * \return a list of all non-hidden variants. + */ + KService::List all() const; + + static Variants& self(); + + virtual Repository* getRepository(const QString& variant); +}; + +#endif // VARIANTS_H diff --git a/src/variants/CMakeLists.txt b/src/variants/CMakeLists.txt new file mode 100644 index 0000000..df850f3 --- /dev/null +++ b/src/variants/CMakeLists.txt @@ -0,0 +1,6 @@ +add_subdirectory(chess) +add_subdirectory(chess5x5) +add_subdirectory(crazyhouse) + +add_subdirectory(shogi) +add_subdirectory(minishogi) diff --git a/src/variants/chess/CMakeLists.txt b/src/variants/chess/CMakeLists.txt new file mode 100644 index 0000000..6fc9485 --- /dev/null +++ b/src/variants/chess/CMakeLists.txt @@ -0,0 +1,31 @@ +set(taguachess_SRCS + animator.cpp + behaviour.cpp + bishop.cpp + castlingrules.cpp + chess.cpp + colors.cpp + icsverbose.cpp + king.cpp + knight.cpp + moveserializer.cpp + namer.cpp + pawn.cpp + rook.cpp + queen.cpp + san.cpp + state.cpp + validator.cpp +) + +include_directories(${CMAKE_SOURCE_DIR}/src/) + +kde4_add_plugin(taguachess ${taguachess_SRCS}) + +target_link_libraries(taguachess + taguacore + ${KDE4_KDECORE_LIBS} +) + +install(TARGETS taguachess DESTINATION ${PLUGIN_INSTALL_DIR}) +install(FILES tagua-chess.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/src/variants/chess/animator.cpp b/src/variants/chess/animator.cpp new file mode 100644 index 0000000..2e23306 --- /dev/null +++ b/src/variants/chess/animator.cpp @@ -0,0 +1,149 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "animator.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "knight.h" + +namespace Chess { + +Animator::Animator(TaguaAPI* api, const INamer* namer) +: BaseAnimator(api, namer) +, m_warper(this) { } + +void Animator::setWarper(IWarper* warper) { + m_warper = warper; +} + +AnimationPtr Animator::forward(const Move& move, const IState* state) { + AnimationPtr res = m_api->group("default"); + + NamedSprite piece = m_api->takeSprite(move.src()); + Point captureSquare = move.dst(); + if (const IBehaviour* behaviour = state->behaviour()) + captureSquare = behaviour->captureSquare(state, move); + NamedSprite captured = m_api->takeSprite(captureSquare); + m_api->setSprite(move.dst(), piece); + + if (piece) + res->addPreAnimation(movement(piece, move)); + + if (captured) + res->addPostAnimation(m_api->disappear(captured, "destroy")); + + if (move.promotion() && move.type() == "promotion") { + const Piece* promoted = state->board()->get(move.dst()); + + if (promoted != NULL && *promoted != Piece()) { + NamedSprite old_sprite = m_api->getSprite(move.dst()); + NamedSprite new_sprite = m_api->setPiece(move.dst(), *promoted, false); + + res->addPostAnimation(m_api->morph(old_sprite, new_sprite, "default")); + } + } + else if (move.type() == "king_castling") { + Point rookSquare = move.dst() + Point(1,0); + Point rookDestination = move.src() + Point(1,0); + + NamedSprite rook = m_api->takeSprite(rookSquare); + m_api->setSprite(rookDestination, rook); + res->addPreAnimation(m_api->move(rook, rookDestination, "default")); + } + else if (move.type() == "queen_castling") { + Point rookSquare = move.dst() + Point(-2,0); + Point rookDestination = move.src() + Point(-1,0); + + NamedSprite rook = m_api->takeSprite(rookSquare); + m_api->setSprite(rookDestination, rook); + res->addPreAnimation(m_api->move(rook, rookDestination, "default")); + } + + res->addPostAnimation(m_warper->warp(state)); + return res; +} + +AnimationPtr Animator::back(const Move& move, const IState* state) { + AnimationPtr res = m_api->group("default"); + + NamedSprite piece = m_api->takeSprite(move.dst()); + NamedSprite captured; + Point captureSquare = move.dst(); + if (const IBehaviour* behaviour = state->behaviour()) + captureSquare = behaviour->captureSquare(state, move); + const Piece* captured_piece = state->board()->get(captureSquare); + if (captured_piece != NULL && *captured_piece != Piece()) { + captured = m_api->setPiece(captureSquare, *captured_piece, false); + res->addPreAnimation(m_api->appear(captured, "default")); + } + + if (!piece) { + piece = m_api->createPiece(move.dst(), *state->board()->get(move.src()), false); + res->addPreAnimation(m_api->appear(piece, "default")); + } + + m_api->setSprite(move.src(), piece); + + if (move.promotion() && move.type() == "promotion") { + const Piece* pawn_piece = state->board()->get(move.src()); + if (pawn_piece != NULL && *pawn_piece != Piece()) { + NamedSprite pawn = m_api->createPiece(move.dst(), *pawn_piece, false); + res->addPreAnimation(m_api->morph(piece, pawn, "default")); + + // replace piece with pawn + m_api->setSprite(move.src(), pawn); + piece = pawn; + } + } + else if (move.type() == "king_castling") { + Point rookSquare = move.dst() + Point(1,0); + Point rookDestination = move.src() + Point(1,0); + + NamedSprite rook = m_api->takeSprite(rookDestination); + m_api->setSprite(rookSquare, rook); + + res->addPreAnimation(m_api->move(rook, rookSquare, "default")); + } + else if (move.type() == "queen_castling") { + Point rookSquare = move.dst() + Point(-2,0); + Point rookDestination = move.src() + Point(-1,0); + + NamedSprite rook = m_api->takeSprite(rookDestination); + m_api->setSprite(rookSquare, rook); + + res->addPreAnimation(m_api->move(rook, rookSquare, "default")); + } + + + res->addPreAnimation(movement(piece, Move(move.dst(), move.src()))); + res->addPostAnimation(m_warper->warp(state)); + + return res; +} + +AnimationPtr Animator::movement(const NamedSprite& sprite, const Move& move) const { + bool knight = m_api->state()->board()->get(move.src())->type() == Knight::self(); + QString flags = knight ? "lshaped rotating" : "straight"; + return m_api->move(sprite, move.dst(), flags); +} + +IAnimator* AnimatorFactory::create(TaguaAPI* api, const INamer* namer) const { + return new Animator(api, namer); +} + +} // namespace Chess + + diff --git a/src/variants/chess/animator.h b/src/variants/chess/animator.h new file mode 100644 index 0000000..c361435 --- /dev/null +++ b/src/variants/chess/animator.h @@ -0,0 +1,42 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__ANIMATOR_H +#define CHESS__ANIMATOR_H + +#include + +class NamedSprite; +class Piece; + +namespace Chess { + +class Animator : public BaseAnimator { +Q_OBJECT + IWarper* m_warper; +protected Q_SLOTS: + AnimationPtr movement(const NamedSprite& sprite, const Move& move) const; +public: + Animator(TaguaAPI* api, const INamer* namer); + + void setWarper(IWarper* warper); + virtual AnimationPtr forward(const Move& move, const IState* state); + virtual AnimationPtr back(const Move& move, const IState* state); +}; + +class AnimatorFactory : public Component, public IAnimatorFactory { +Q_OBJECT +public: + virtual IAnimator* create(TaguaAPI* api, const INamer* namer) const; +}; + +} // namespace Chess + +#endif // CHESS__ANIMATOR_H + diff --git a/src/variants/chess/behaviour.cpp b/src/variants/chess/behaviour.cpp new file mode 100644 index 0000000..9880b32 --- /dev/null +++ b/src/variants/chess/behaviour.cpp @@ -0,0 +1,53 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "behaviour.h" + +#include +#include +#include +#include + +namespace Chess { + +void Behaviour::captureOn(IState* state, const Point& square) const { + state->board()->set(square, Piece()); +} + +void Behaviour::move(IState* state, const Move& m) const { + if (m.dst() != m.src()) { + state->board()->set(m.dst(), *state->board()->get(m.src())); + state->board()->set(m.src(), Piece()); + } +} + +void Behaviour::advanceTurn(IState* state) const { + state->setTurn(opponent(state->turn())); +} + +Point Behaviour::captureSquare(const IState*, const Move& m) const { + if (m.type() == "en_passant_capture") + return Point(m.dst().x, m.src().y); + else + return m.dst(); +} + +const IColor* Behaviour::opponent(const IColor* player) const { + return player == White::self() + ? static_cast(Black::self()) + : static_cast(White::self()); +} + +Point Behaviour::direction(const IColor* player) const { + return Point(0, player == White::self() ? -1 : 1); +} + +} // namespace Chess + + diff --git a/src/variants/chess/behaviour.h b/src/variants/chess/behaviour.h new file mode 100644 index 0000000..74662cc --- /dev/null +++ b/src/variants/chess/behaviour.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__BEHAVIOUR_H +#define CHESS__BEHAVIOUR_H + +#include +#include + +namespace Chess { + +class Behaviour : public Component, public IBehaviour { +Q_OBJECT +public: + virtual void captureOn(IState* state, const Point& square) const; + virtual void move(IState* state, const Move& m) const; + virtual void advanceTurn(IState* state) const; + virtual Point captureSquare(const IState* state, const Move& m) const; + virtual const IColor* opponent(const IColor* player) const; + virtual Point direction(const IColor* player) const; +}; + +} // namespace Chess + +#endif // CHESS__BEHAVIOUR_H + diff --git a/src/variants/chess/bishop.cpp b/src/variants/chess/bishop.cpp new file mode 100644 index 0000000..8e2217e --- /dev/null +++ b/src/variants/chess/bishop.cpp @@ -0,0 +1,36 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "bishop.h" +#include +#include +#include +#include + +namespace Chess { + +Bishop::Bishop() { } + +QString Bishop::name() const { return "bishop"; } + +bool Bishop::canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const { + PathInfo path = state->board()->path(move.src(), move.dst()); + return path.diagonal() && path.clear() && target.color() != piece.color(); +} + +int Bishop::index() const { return 35; } + +Bishop* Bishop::self() { + static Bishop s_instance; + return &s_instance; +} + +} diff --git a/src/variants/chess/bishop.h b/src/variants/chess/bishop.h new file mode 100644 index 0000000..d6845cf --- /dev/null +++ b/src/variants/chess/bishop.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__TYPES__BISHOP_H +#define CHESS__TYPES__BISHOP_H + +#include +#include + +namespace Chess { + +class TAGUA_EXPORT Bishop : public Component, public IType { +Q_OBJECT + Bishop(); +public: + virtual QString name() const; + virtual bool canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const; + virtual int index() const; + static Bishop* self(); +}; + +} + +#endif // CHESS__TYPES__BISHOP_H diff --git a/src/variants/chess/castlingrules.cpp b/src/variants/chess/castlingrules.cpp new file mode 100644 index 0000000..03783a9 --- /dev/null +++ b/src/variants/chess/castlingrules.cpp @@ -0,0 +1,155 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "castlingrules.h" + +#include + +#include +#include +#include +#include +#include +#include + +#include "types.h" + +namespace Chess { + +ICastlingRules::~ICastlingRules() { } + +CastlingRules::CastlingRules() +: m_delegator(this) { } + +bool CastlingRules::canCastle(const Piece& piece, Move& move, const IState* state) const { + if (move.src() != m_delegator->kingStartingPosition(state, piece.color())) return false; + + if (move.delta() == Point(2,0)) { + if ((state->board()->get(move.src() + Point(1,0)) == NULL || + *state->board()->get(move.src() + Point(1,0)) == Piece()) && + (state->board()->get(move.dst()) == NULL || + *state->board()->get(move.dst()) == Piece()) && + state->flags()->get(piece.color()->name() + "_king_castling").toBool()) { + move.setType("king_castling"); + return true; + } + } + else if (move.delta() == Point(-2,0)) { + if ((state->board()->get(move.src() - Point(1, 0)) == NULL || + *state->board()->get(move.src() - Point(1, 0)) == Piece()) && + (state->board()->get(move.dst() + Point(1, 0)) == NULL || + *state->board()->get(move.dst() + Point(1, 0)) == Piece()) && + (state->board()->get(move.dst()) == NULL || + *state->board()->get(move.dst()) == Piece()) && + state->flags()->get(piece.color()->name() + "_queen_castling").toBool()) { + move.setType("queen_castling"); + return true; + } + } + + return false; +} + +bool CastlingRules::handleCastling(const Piece& piece, const Move& move, IState* state) const { + const IBehaviour* behaviour = state->behaviour(); + bool res = true; + + if (behaviour && move.type() == "king_castling") { + Point rookSquare = move.dst() + Point(1,0); + Point rookDestination = move.src() + Point(1,0); + + behaviour->move(state, Move(rookSquare, rookDestination)); + } + else if (behaviour && move.type() == "queen_castling") { + Point rookSquare = move.dst() - Point(2,0); + Point rookDestination = move.src() - Point(1,0); + + behaviour->move(state, Move(rookSquare, rookDestination)); + } + else { + res = false; + } + + const IType* type = piece.type(); + TaguaObject* flags = state->flags(); + + if (type == King::self()) { + flags->set(piece.color()->name() + "_king_castling", false); + flags->set(piece.color()->name() + "_queen_castling", false); + } + + if (move.src() == Point(0,0) || move.dst() == Point(0,0)) + flags->set("black_queen_castling", false); + if (move.src() == Point(7,0) || move.dst() == Point(7,0)) + flags->set("black_king_castling", false); + if (move.src() == Point(0,7) || move.dst() == Point(0,7)) + flags->set("white_queen_castling", false); + if (move.src() == Point(7,7) || move.dst() == Point(7,7)) + flags->set("white_king_castling", false); + + return res; +} + +Point CastlingRules::kingStartingPosition(const IState* state, const IColor* player) const { + int x = state->board()->size().x / 2; + int y = state->rank(0, player); + return Point(x, y); +} + +void CastlingRules::setDelegator(Component* delegator) { + m_delegator = dynamic_cast(delegator); + if (!m_delegator) m_delegator = new CastlingRulesAdaptor(delegator, false); +} + + +CastlingRulesAdaptor::CastlingRulesAdaptor(Component* component, bool own) +: m_component(component) +, m_own(own) { } + +CastlingRulesAdaptor::~CastlingRulesAdaptor() { + if (m_own) delete m_component; +} + +bool CastlingRulesAdaptor::canCastle(const Piece& piece, Move& move, const IState* state) const { + bool result; + QMetaObject::invokeMethod(m_component, "canCastle", + Q_RETURN_ARG(bool, result), + Q_ARG(Piece, piece), + Q_ARG(Move, move), + Q_ARG(const IState*, state)); + return result; +} + +bool CastlingRulesAdaptor::handleCastling(const Piece& piece, const Move& move, IState* state) const { + bool result; + QMetaObject::invokeMethod(m_component, "handleCastling", + Q_RETURN_ARG(bool, result), + Q_ARG(Piece, piece), + Q_ARG(Move, move), + Q_ARG(IState*, state)); + return result; +} + +void CastlingRulesAdaptor::setDelegator(Component* component) { + QMetaObject::invokeMethod(m_component, "setDelegator", Q_ARG(Component*, component)); +} + +Point CastlingRulesAdaptor::kingStartingPosition(const IState* state, const IColor* player) const { + Point res; + QMetaObject::invokeMethod(m_component, "kingStartingPosition", + Q_RETURN_ARG(Point, res), + Q_ARG(const IState*, state), + Q_ARG(const IColor*, player)); + return res; +} + + +} // namespace Chess + + diff --git a/src/variants/chess/castlingrules.h b/src/variants/chess/castlingrules.h new file mode 100644 index 0000000..f35f062 --- /dev/null +++ b/src/variants/chess/castlingrules.h @@ -0,0 +1,62 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__CASTLINGRULES_H +#define CHESS__CASTLINGRULES_H + +#include +#include + +class IColor; +class IState; +class Move; +class Piece; + +namespace Chess { + +class ICastlingRules { +public: + virtual ~ICastlingRules(); + + virtual bool canCastle(const Piece& piece, Move& move, const IState* state) const = 0; + virtual bool handleCastling(const Piece& piece, const Move& move, IState* state) const = 0; + virtual void setDelegator(Component* rules) = 0; + virtual Point kingStartingPosition(const IState* state, const IColor* player) const = 0; +}; + +class CastlingRules : public Component, public ICastlingRules { +Q_OBJECT + ICastlingRules* m_delegator; +public: + CastlingRules(); + + virtual bool canCastle(const Piece& piece, Move& move, const IState* state) const; + virtual bool handleCastling(const Piece& piece, const Move& move, IState* state) const; + virtual void setDelegator(Component* rules); + virtual Point kingStartingPosition(const IState* state, const IColor* player) const; +}; + +class CastlingRulesAdaptor : public ICastlingRules { + Component* m_component; + bool m_own; +public: + CastlingRulesAdaptor(Component* component, bool own = true); + virtual ~CastlingRulesAdaptor(); + + virtual bool canCastle(const Piece& piece, Move& move, const IState* state) const; + virtual bool handleCastling(const Piece& piece, const Move& move, IState* state) const; + virtual void setDelegator(Component* rules); + virtual Point kingStartingPosition(const IState* state, const IColor* player) const; +}; + + +} // namespace Chess + +#endif // CHESS__CASTLINGRULES_H + diff --git a/src/variants/chess/chess.cpp b/src/variants/chess/chess.cpp new file mode 100644 index 0000000..a88fef2 --- /dev/null +++ b/src/variants/chess/chess.cpp @@ -0,0 +1,62 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include + +#include "animator.h" +#include "behaviour.h" +#include "castlingrules.h" +#include "colors.h" +#include "moveserializer.h" +#include "namer.h" +#include "types.h" +#include "state.h" +#include "validator.h" + +using namespace Chess; + +extern "C" KDE_EXPORT Repository* taguachess_initrepo(IVariantLoader*) { + Repository* repo = new Repository; + + repo->addComponent("player/0", dynamic_cast(COLORS[0])); + repo->addComponent("player/1", dynamic_cast(COLORS[1])); + + repo->addComponent("type/king", King::self()); + repo->addComponent("type/queen", Queen::self()); + repo->addComponent("type/rook", Rook::self()); + repo->addComponent("type/bishop", Bishop::self()); + repo->addComponent("type/knight", Knight::self()); + repo->addComponent("type/pawn", Pawn::self()); + + CastlingRules* castling_rules = new CastlingRules; + repo->addComponent("extra/castling_rules", castling_rules); + + repo->addComponent("state", new State(new Behaviour, castling_rules, Point(8, 8))); + Validator* validator = new Validator; + repo->addComponent("validator", validator); + repo->addComponent("animator_factory", new AnimatorFactory); + repo->addComponent("namer", new Namer); + repo->addComponent("policy", new DefaultPolicy); + + repo->addComponent("move_serializer/simple", + new MoveSerializer("simple", validator)); + repo->addComponent("move_serializer/decorated", + new MoveSerializer("decorated", validator)); + MoveSerializer* san = new MoveSerializer("compact", validator); + repo->addComponent("move_serializer/san", san); + repo->addComponent("move_serializer/compact", san); + King::self()->setCastlingRules(castling_rules); + + return repo; +} + + diff --git a/src/variants/chess/colors.cpp b/src/variants/chess/colors.cpp new file mode 100644 index 0000000..826d2f6 --- /dev/null +++ b/src/variants/chess/colors.cpp @@ -0,0 +1,17 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "colors.h" + +namespace Chess { + +IColor* COLORS[] = { White::self(), Black::self() }; + +} diff --git a/src/variants/chess/colors.h b/src/variants/chess/colors.h new file mode 100644 index 0000000..21b713f --- /dev/null +++ b/src/variants/chess/colors.h @@ -0,0 +1,22 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__COLORS_H +#define CHESS__COLORS_H + +#include + +namespace Chess { + +extern IColor* COLORS[2]; + +} + +#endif // CHESS__COLORS_H diff --git a/src/variants/chess/icsverbose.cpp b/src/variants/chess/icsverbose.cpp new file mode 100644 index 0000000..7d65f2b --- /dev/null +++ b/src/variants/chess/icsverbose.cpp @@ -0,0 +1,55 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "icsverbose.h" + +// 1 2 3 5 +QRegExp ICSVerbose::pattern("([PRNBKQ])/([a-zA-Z]\\d+|@@)-([a-zA-Z]\\d+)(=([PRNBKQ]))?"); +QRegExp ICSVerbose::kingCastlingPattern("[oO0]-[oO0]"); +QRegExp ICSVerbose::queenCastlingPattern("[oO0]-[oO0]-[oO0]"); +QRegExp ICSVerbose::nonePattern("none"); + +ICSVerbose::ICSVerbose() +: src(Point::invalid()) +, dst(Point::invalid()) +, promotion(0) +, castling(SAN::NoCastling) { } + + +void ICSVerbose::load(const QString& str, int ysize) { + if (nonePattern.indexIn(str) == 0) { + src = Point::invalid(); + dst = Point::invalid(); + } + else if (pattern.indexIn(str) == 0) { + if (pattern.cap(2) == "@@") + src = Point::invalid(); + else + src = Point(pattern.cap(2), ysize); + + dst = Point(pattern.cap(3), ysize); + + type = SAN::getType(pattern.cap(1)); + if (!pattern.cap(5).isEmpty()) + promotion = SAN::getType(pattern.cap(6)); + else + promotion = 0; + castling = SAN::NoCastling; + } + else if (queenCastlingPattern.indexIn(str) == 0) + castling = SAN::QueenSide; + else if (kingCastlingPattern.indexIn(str) == 0) + castling = SAN::KingSide; + else { + src = Point::invalid(); + dst = Point::invalid(); + castling = SAN::NoCastling; + } +} diff --git a/src/variants/chess/icsverbose.h b/src/variants/chess/icsverbose.h new file mode 100644 index 0000000..89dbd72 --- /dev/null +++ b/src/variants/chess/icsverbose.h @@ -0,0 +1,37 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__ICSVERBOSE_H +#define CHESS__ICSVERBOSE_H + +#include "san.h" + +class TAGUA_EXPORT ICSVerbose { + static QRegExp pattern; + static QRegExp kingCastlingPattern; + static QRegExp queenCastlingPattern; + static QRegExp nonePattern; + +public: + ICSVerbose(); + void load(const QString&, int ysize); + + Point src, dst; + const IType* type; + const IType* promotion; + SAN::CastlingType castling; + + inline bool invalid() const { return (src == Point::invalid() && dst == Point::invalid()); } + inline bool valid() const { return !invalid(); } +}; + + +#endif // CHESS__ICSVERBOSE_H + diff --git a/src/variants/chess/king.cpp b/src/variants/chess/king.cpp new file mode 100644 index 0000000..b51654e --- /dev/null +++ b/src/variants/chess/king.cpp @@ -0,0 +1,42 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "king.h" +#include + +#include "castlingrules.h" + +namespace Chess { + +King::King() { } + +QString King::name() const { return "king"; } + +bool King::canMove(const Piece& piece, const Piece&, + Move& move, const IState* state) const { + if (abs(move.delta().x) <= 1 && abs(move.delta().y) <= 1) return true; + if (m_castling_rules) + return m_castling_rules->canCastle(piece, move, state); + return false; +} + +int King::index() const { return 10000; } + +King* King::self() { + static King s_instance; + return &s_instance; +} + +void King::setCastlingRules(Component* castlingRules) { + m_castling_rules = dynamic_cast(castlingRules); + if (!m_castling_rules) m_castling_rules = new CastlingRulesAdaptor(castlingRules, false); +} + +} diff --git a/src/variants/chess/king.h b/src/variants/chess/king.h new file mode 100644 index 0000000..cee88b0 --- /dev/null +++ b/src/variants/chess/king.h @@ -0,0 +1,37 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__TYPES__KING_H +#define CHESS__TYPES__KING_H + +#include +#include + +namespace Chess { + +class ICastlingRules; + +class TAGUA_EXPORT King : public Component, public IType { +Q_OBJECT + ICastlingRules* m_castling_rules; + King(); +public: + virtual QString name() const; + virtual bool canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const; + virtual int index() const; + static King* self(); +public Q_SLOTS: + virtual void setCastlingRules(Component* castlingRules); +}; + +} + +#endif // CHESS__TYPES__KING_H diff --git a/src/variants/chess/knight.cpp b/src/variants/chess/knight.cpp new file mode 100644 index 0000000..67bcc8f --- /dev/null +++ b/src/variants/chess/knight.cpp @@ -0,0 +1,36 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "knight.h" +#include +#include +#include +#include + +namespace Chess { + +Knight::Knight() { } + +QString Knight::name() const { return "knight"; } + +bool Knight::canMove(const Piece&, const Piece&, + Move& move, const IState*) const { + return (abs(move.delta().x) == 1 && abs(move.delta().y) == 2) || + (abs(move.delta().y) == 1 && abs(move.delta().x) == 2); +} + +int Knight::index() const { return 30; } + +Knight* Knight::self() { + static Knight s_instance; + return &s_instance; +} + +} diff --git a/src/variants/chess/knight.h b/src/variants/chess/knight.h new file mode 100644 index 0000000..d384564 --- /dev/null +++ b/src/variants/chess/knight.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__TYPES__KNIGHT_H +#define CHESS__TYPES__KNIGHT_H + +#include +#include + +namespace Chess { + +class TAGUA_EXPORT Knight : public Component, public IType { +Q_OBJECT + Knight(); +public: + virtual QString name() const; + virtual bool canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const; + virtual int index() const; + static Knight* self(); +}; + +} + +#endif // CHESS__TYPES__KNIGHT_H diff --git a/src/variants/chess/moveserializer.cpp b/src/variants/chess/moveserializer.cpp new file mode 100644 index 0000000..e4669e2 --- /dev/null +++ b/src/variants/chess/moveserializer.cpp @@ -0,0 +1,264 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "moveserializer.h" + +#include +#include +#include +#include +#include +#include + +#include "icsverbose.h" +#include "types.h" +#include "san.h" + +namespace Chess { + +MoveSerializer::MoveSerializer(const QString& rep, IValidator* validator) +: m_rep(rep) +, m_validator(validator) +, m_delegator(this) { } + +QString MoveSerializer::san(const Move& move, const IState* ref) const { + QString res; + + Point captureSquare = move.dst(); + if (const IBehaviour* behaviour = ref->behaviour()) + captureSquare = behaviour->captureSquare(ref, move); + + const Piece* piece = ref->board()->get(move.src()); + const Piece* captured = ref->board()->get(captureSquare); + + if (piece == NULL || *piece == Piece()) + return ""; // no piece in the initial square + + if (move.type() == "king_side_castling") { + res = "O-O"; + } + else if (move.type() == "queen_side_castling") { + res = "O-O-O"; + } + else if (piece->type() == Pawn::self()) { + if (captured != NULL && *captured != Piece()) + res = move.src().col() + "x"; + + res += move.dst().toString(ref->board()->size().y); + } + else { + if (piece->type() != Pawn::self()) + res = symbol(piece->type()).toUpper(); + + SAN tmp; + tmp.src = move.src(); + tmp.dst = move.dst(); + tmp.type = piece->type(); + tmp.castling = SAN::NoCastling; + minimal_notation(tmp, ref); + + res += tmp.src.toString(ref->board()->size().y); + if (captured != NULL && *captured != Piece()) + res += "x"; + res += tmp.dst.toString(ref->board()->size().y); + } + + if (move.promotion()) + res += "=" + QString(symbol(move.promotion()).toUpper()); + + res += suffix(move, ref); + + return res; +} + +QString MoveSerializer::serialize(const Move& move, const IState* ref) const { + if (m_rep == "simple") { + int ysize = ref->board()->size().y; + QString res = move.src().toString(ysize) + move.dst().toString(ysize); + if (move.promotion()) + res = res + "=" + + symbol( + move.promotion() + ).toUpper(); + return res; + } + else if (m_rep == "compact") { + return san(move, ref); + } + else if (m_rep == "decorated") { + QString res = san(move, ref); + res.replace('K', "{king}"); + res.replace('Q', "{queen}"); + res.replace('R', "{rook}"); + res.replace('N', "{knight}"); + res.replace('B', "{bishop}"); + res.replace('P', "{pawn}"); + return res; + } + else { + return ""; + } +} + +QString MoveSerializer::suffix(const Move& /*move*/, const IState* /*ref*/) const { + // FIXME use a move generator to add a suffix + +#if 0 + std::auto_ptr tmp(ref->clone()); + tmp->move(move); + + + MoveGenerator generator(tmp); + if (generator.check(Piece::oppositeColor(ref->turn()))) { + if (generator.stalled()) + return "#"; + else + return "+"; + } + else { + return ""; + } +#endif + return ""; +} + +Move MoveSerializer::get_san(const SAN& san, const IState* ref) const { + Move candidate; + + if (san.invalid()) + return candidate; + + if (san.castling != SAN::NoCastling) { + // find king starting position + Point from(ref->board()->size().x / 2, ref->rank(0, ref->turn())); + Point to = from + (san.castling == SAN::KingSide? Point(2,0) : Point(-2,0)); + const Piece* king = ref->board()->get(from); + if (king->type() != King::self()) + return candidate; + else { + candidate = Move(from, to); + if (m_validator->legal(ref, candidate)) + return candidate; + else + return Move(); + } + } + + if (san.src.valid()) { + candidate = Move(san.src, san.dst, san.promotion); + } + else { + for (int i = 0; i < ref->board()->size().x; i++) { + for (int j = 0; j < ref->board()->size().y; j++) { + Point p(i, j); + const Piece* piece = ref->board()->get(p); + + Move mv(p, san.dst, san.promotion); + if (p.resembles(san.src) && + piece != NULL && + *piece != Piece() && + piece->type() == san.type && + piece->color() == ref->turn()) { + if (m_validator->legal(ref, mv)) { + if (candidate != Move()) { + // ambiguous! + return Move(); + } + else { + // ok, we have found a candidate move + candidate = mv; + } + } + } + } + } + } + + return candidate; +} + +Move MoveSerializer::deserialize(const QString& str, const IState* ref) const { + if (m_rep == "compact") { + SAN tmp; + tmp.load(str, ref->board()->size().y); + return get_san(tmp, ref); + } + else if (m_rep == "ics-verbose") { + return parse_ics_verbose(str, ref); + } + else { + // no need to parse simple or decorated moves + return Move(); + } +} + + +#define TRY(x) if(get_san(x, ref) != Move()) return; +void MoveSerializer::minimal_notation(SAN& san, const IState* ref) const { + Point from = san.src; + san.castling = SAN::NoCastling; + + // try notation without starting point + san.src = Point::invalid(); + TRY(san); + + // add column indication + san.src = Point(from.x, -1); + TRY(san); + + // add row indication + san.src = Point(-1, from.y); + TRY(san); + + // add complete starting point + san.src = from; +} +#undef TRY + +QString MoveSerializer::symbol(const IType* type) const { + if (!type) return "?"; + + if (type == Knight::self()) + return "n"; + else + return type->name().at(0); +} + +Move MoveSerializer::parse_ics_verbose(const QString& str, const IState* ref) const { + // here ref is the position _after_ this move + ICSVerbose verbose; + verbose.load(str, ref->board()->size().y); + + Point from; + Point to; + + if (verbose.castling == SAN::NoCastling) { + from = verbose.src; + to = verbose.dst; + } + else { + const IColor* opponent = ref->turn(); + if (const IBehaviour* behaviour = ref->behaviour()) + opponent = behaviour->opponent(opponent); + from = Point(ref->board()->size().x / 2, ref->rank(0, opponent)); + to = from + (verbose.castling == SAN::KingSide ? Point(2,0) : Point(-2, 0)); + } + + return Move(from, to, verbose.promotion); +} + +QString MoveSerializer::type() const { return m_rep; } + +void MoveSerializer::setDelegator(IMoveSerializer* delegator) { + m_delegator = delegator; +} + +} // namespace Chess + + diff --git a/src/variants/chess/moveserializer.h b/src/variants/chess/moveserializer.h new file mode 100644 index 0000000..57b83c3 --- /dev/null +++ b/src/variants/chess/moveserializer.h @@ -0,0 +1,61 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__MOVESERIALIZER_H +#define CHESS__MOVESERIALIZER_H + +#include +#include +#include + +class IState; +class IType; +class IValidator; +class SAN; + +namespace Chess { + +class TAGUA_EXPORT MoveSerializer : public Component, public IMoveSerializer { +protected: + QString m_rep; + IValidator* m_validator; + IMoveSerializer* m_delegator; + +protected Q_SLOTS: + virtual QString san(const Move& move, const IState* ref) const; + + virtual void minimal_notation(SAN& san, const IState* ref) const; + + virtual Move get_san(const SAN& san, const IState* ref) const; + + virtual Move parse_ics_verbose(const QString& str, const IState* ref) const; +public: + /** + * Create a serializer to a given string representation for moves. + * \param rep A move representation type. + */ + MoveSerializer(const QString& rep, IValidator* validator); + + virtual QString serialize(const Move& move, const IState* ref) const; + + virtual Move deserialize(const QString& str, const IState* ref) const; + + virtual QString type() const; + + virtual void setDelegator(IMoveSerializer* delegator); + + virtual QString symbol(const IType* type) const; + + virtual QString suffix(const Move& move, const IState* ref) const; +}; + +} // namespace Chess + +#endif // CHESS__MOVESERIALIZER_H + diff --git a/src/variants/chess/namer.cpp b/src/variants/chess/namer.cpp new file mode 100644 index 0000000..66a37e0 --- /dev/null +++ b/src/variants/chess/namer.cpp @@ -0,0 +1,26 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "namer.h" +#include +#include +#include + +namespace Chess { + +QString Namer::name(const Piece& piece) const { + if (piece.color() && piece.type()) + return piece.color()->name() + "_" + piece.type()->name(); + else + return ""; +} + +} // namespace Chess + + diff --git a/src/variants/chess/namer.h b/src/variants/chess/namer.h new file mode 100644 index 0000000..7acf045 --- /dev/null +++ b/src/variants/chess/namer.h @@ -0,0 +1,27 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__NAMER_H +#define CHESS__NAMER_H + +#include +#include + +namespace Chess { + +class Namer : public Component, public INamer { +Q_OBJECT +public Q_SLOTS: + virtual QString name(const Piece& piece) const; +}; + +} // namespace Chess + +#endif // CHESS__NAMER_H + diff --git a/src/variants/chess/pawn.cpp b/src/variants/chess/pawn.cpp new file mode 100644 index 0000000..78856ce --- /dev/null +++ b/src/variants/chess/pawn.cpp @@ -0,0 +1,83 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "pawn.h" +#include "queen.h" +#include +#include +#include +#include +#include +#include + +namespace Chess { + +Pawn::Pawn() { } + +QString Pawn::name() const { return "pawn"; } + +bool Pawn::canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const { + const IBehaviour* behaviour = state->behaviour(); + if (!behaviour) return false; + bool enPassant = state->flags()->get("en_passant_square").value() == move.dst(); + + // moving + if (target == Piece() && !enPassant) { + if (move.delta() == behaviour->direction(piece.color())) { + if (move.dst().y == state->rank(state->board()->size().y - 1, piece.color())) { + setPromotion(move, Queen::self()); + } + return true; + } + + if (move.src().y == state->rank(1, piece.color()) && + move.delta() == behaviour->direction(piece.color()) * 2 && + (state->board()->get(move.src() + behaviour->direction(piece.color())) == NULL || + *state->board()->get(move.src() + behaviour->direction(piece.color())) == Piece())) { + move.setType("en_passant_trigger"); + return true; + } + else + return false; + } + + // capturing + else if (enPassant || target.color() != piece.color()) { + if (move.delta().y == behaviour->direction(piece.color()).y && + abs(move.delta().x) == 1) { + if (enPassant) + move.setType("en_passant_capture"); + else if (move.dst().y == state->rank(state->board()->size().y - 1, piece.color())) { + setPromotion(move, Queen::self()); + } + + return true; + } + } + + return false; +} + +void Pawn::setPromotion(Move& move, const IType* type) const { + move.setType("promotion"); + // FIXME use variant data to set promotion type, like e.g.: + // move.setPromotion(m_data.get("promotion-type").value()) + if (!move.promotion()) move.setPromotion(type); +} + +int Pawn::index() const { return 10; } + +Pawn* Pawn::self() { + static Pawn s_instance; + return &s_instance; +} + +} diff --git a/src/variants/chess/pawn.h b/src/variants/chess/pawn.h new file mode 100644 index 0000000..f716afc --- /dev/null +++ b/src/variants/chess/pawn.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__TYPES__PAWN_H +#define CHESS__TYPES__PAWN_H + +#include +#include + +namespace Chess { + +class TAGUA_EXPORT Pawn : public Component, public IType { +Q_OBJECT + Pawn(); +//protected Q_SLOTS: + void setPromotion(Move& move, const IType* type) const; +public: + virtual QString name() const; + virtual bool canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const; + virtual int index() const; + static Pawn* self(); +}; + +} + +#endif // CHESS__TYPES__PAWN_H diff --git a/src/variants/chess/queen.cpp b/src/variants/chess/queen.cpp new file mode 100644 index 0000000..901c679 --- /dev/null +++ b/src/variants/chess/queen.cpp @@ -0,0 +1,35 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "queen.h" +#include +#include +#include + +namespace Chess { + +Queen::Queen() { } + +QString Queen::name() const { return "queen"; } + +bool Queen::canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const { + PathInfo path = state->board()->path(move.src(), move.dst()); + return path.valid() && path.clear() && target.color() != piece.color(); +} + +int Queen::index() const { return 90; } + +Queen* Queen::self() { + static Queen s_instance; + return &s_instance; +} + +} diff --git a/src/variants/chess/queen.h b/src/variants/chess/queen.h new file mode 100644 index 0000000..f40c1ef --- /dev/null +++ b/src/variants/chess/queen.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__TYPES__QUEEN_H +#define CHESS__TYPES__QUEEN_H + +#include +#include + +namespace Chess { + +class TAGUA_EXPORT Queen : public Component, public IType { +Q_OBJECT + Queen(); +public: + virtual QString name() const; + virtual bool canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const; + virtual int index() const; + static Queen* self(); +}; + +} + +#endif // CHESS__TYPES__QUEEN_H diff --git a/src/variants/chess/rook.cpp b/src/variants/chess/rook.cpp new file mode 100644 index 0000000..1f98bb1 --- /dev/null +++ b/src/variants/chess/rook.cpp @@ -0,0 +1,36 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "rook.h" +#include +#include +#include +#include + +namespace Chess { + +Rook::Rook() { } + +QString Rook::name() const { return "rook"; } + +bool Rook::canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const { + PathInfo path = state->board()->path(move.src(), move.dst()); + return path.parallel() && path.clear() && target.color() != piece.color(); +} + +int Rook::index() const { return 50; } + +Rook* Rook::self() { + static Rook s_instance; + return &s_instance; +} + +} diff --git a/src/variants/chess/rook.h b/src/variants/chess/rook.h new file mode 100644 index 0000000..45de7cb --- /dev/null +++ b/src/variants/chess/rook.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__TYPES__ROOK_H +#define CHESS__TYPES__ROOK_H + +#include +#include + +namespace Chess { + +class TAGUA_EXPORT Rook : public Component, public IType { +Q_OBJECT + Rook(); +public: + virtual QString name() const; + virtual bool canMove(const Piece& piece, const Piece& target, + Move& move, const IState* state) const; + virtual int index() const; + static Rook* self(); +}; + +} + +#endif // CHESS__TYPES__ROOK_H diff --git a/src/variants/chess/san.cpp b/src/variants/chess/san.cpp new file mode 100644 index 0000000..ef37dec --- /dev/null +++ b/src/variants/chess/san.cpp @@ -0,0 +1,106 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "san.h" + +#include +#include "king.h" + +using namespace Chess; + +// 1 2 3 +QRegExp SAN::pattern("^([PRNBKQ])?([a-wyzA-Z]?\\d*|x\\d+)([-x@])?" +// 4 5 6 + "([a-zA-Z]\\d+)(=?([RNBKQrnbkq]))?[+#]?[\?!]*"); +QRegExp SAN::kingCastlingPattern("^[oO0]-?[oO0][+#]?"); +QRegExp SAN::queenCastlingPattern("^[oO0]-?[oO0]-?[oO0][+#]?"); +QRegExp SAN::nonePattern("^none"); + +SAN::SAN() +: src(Point::invalid()) +, dst(Point::invalid()) +, type(0) +, promotion(0) +, castling(NoCastling) +, drop(false) { +} + +const IType* SAN::getType(const QString& letter) { + // FIXME: fix types + if (letter.isEmpty()) + return King/*Pawn*/::self(); + + switch(letter[0].toLower().toAscii()) { + case 'k': + return King::self(); + case 'q': + return King/*Queen*/::self(); + case 'r': + return King/*Rook*/::self(); + case 'n': + return King/*Knight*/::self(); + case 'b': + return King/*Bishop*/::self(); + case 'p': + return King/*Pawn*/::self(); + default: + return 0; + } +} + +void SAN::load(const QString& str, int& offset, int ysize) { + if (nonePattern.indexIn(str, offset, QRegExp::CaretAtOffset) != -1) { + src = Point::invalid(); + dst = Point::invalid(); + offset += nonePattern.matchedLength(); + } + else if (pattern.indexIn(str, offset, QRegExp::CaretAtOffset) != -1) { + type = getType(pattern.cap(1)); + drop = pattern.cap(3) == "@"; + if (drop) + src = Point::invalid(); + else + src = Point(pattern.cap(2), ysize); + dst = Point(pattern.cap(4), ysize); + promotion = pattern.cap(6).isEmpty() ? 0 : getType(pattern.cap(6)); + castling = NoCastling; + offset += pattern.matchedLength(); + } + else if (queenCastlingPattern.indexIn(str, offset, QRegExp::CaretAtOffset) != -1) { + castling = QueenSide; + + offset += queenCastlingPattern.matchedLength(); + } + else if (kingCastlingPattern.indexIn(str, offset, QRegExp::CaretAtOffset) != -1) { + castling = KingSide; + + offset += kingCastlingPattern.matchedLength(); + } + else { + //kDebug() << "error!!!! " << str.mid(offset); + dst = Point::invalid(); + } +} + +void SAN::load(const QString& str, int ysize) { + int offset = 0; + load(str, offset, ysize); +} + +QDebug operator<<(QDebug os, const SAN& move) { + if (move.castling == SAN::KingSide) + os << "O-O"; + else if (move.castling == SAN::QueenSide) + os << "O-O-O"; + else + os << move.type << ": " << move.src << " -> " << move.dst; + return os; +} + diff --git a/src/variants/chess/san.h b/src/variants/chess/san.h new file mode 100644 index 0000000..cb6ece9 --- /dev/null +++ b/src/variants/chess/san.h @@ -0,0 +1,54 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__SAN_H +#define CHESS__SAN_H + +#include +#include + +#include "export.h" +#include + +class IType; + +class TAGUA_EXPORT SAN { + friend QDebug operator<<(QDebug os, const SAN& move); + + static QRegExp pattern; + static QRegExp kingCastlingPattern; + static QRegExp queenCastlingPattern; + static QRegExp nonePattern; + +public: + enum CastlingType { + NoCastling, + KingSide, + QueenSide + }; + + SAN(); + + static const IType* getType(const QString& letter); + + void load(const QString&, int& offset, int ysize); + void load(const QString&, int ysize); + + Point src, dst; + const IType* type; + const IType* promotion; + CastlingType castling; + bool drop; + + inline bool invalid() const { return (dst == Point::invalid()) && (castling == NoCastling); } + inline bool valid() const { return !invalid(); } +}; + +#endif // CHESS__SAN_H diff --git a/src/variants/chess/state.cpp b/src/variants/chess/state.cpp new file mode 100644 index 0000000..27fbe12 --- /dev/null +++ b/src/variants/chess/state.cpp @@ -0,0 +1,150 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "state.h" + +#include +#include +#include "castlingrules.h" +#include "colors.h" +#include "types.h" + +namespace Chess { + +State::State(const IBehaviour* behaviour, + const ICastlingRules* castling, + const Point& size) +: m_board(size) +, m_behaviour(behaviour) +, m_castling_rules(castling) +, m_delegator(this) { + m_flags.set("white_king_castling", true); + m_flags.set("white_queen_castling", true); + m_flags.set("black_king_castling", true); + m_flags.set("black_queen_castling", true); +} + +State::State(const State& other) +: Component() +, IState() +, m_board(other.m_board) +, m_flags(other.m_flags) +, m_turn(other.m_turn) +, m_behaviour(other.m_behaviour) +, m_castling_rules(other.m_castling_rules) +, m_delegator(this) { } + +IState* State::clone() const { + return new State(*this); +} + +void State::setup() { + for (int c = 0; c < 2; c++) { + IColor* color = COLORS[c]; + int r0 = rank(0, color); + int r1 = rank(1, color); + + for (int i = 0; i < m_board.size().x; i++) { + m_board.set(Point(i, r1), Piece(color, Pawn::self())); + } + m_board.set(Point(0, r0), Piece(color, Rook::self())); + m_board.set(Point(1, r0), Piece(color, Knight::self())); + m_board.set(Point(2, r0), Piece(color, Bishop::self())); + m_board.set(Point(3, r0), Piece(color, Queen::self())); + m_board.set(Point(4, r0), Piece(color, King::self())); + m_board.set(Point(5, r0), Piece(color, Bishop::self())); + m_board.set(Point(6, r0), Piece(color, Knight::self())); + m_board.set(Point(7, r0), Piece(color, Rook::self())); + } + + m_turn = White::self(); +} + +const Board* State::board() const { + return &m_board; +} + +Board* State::board() { + return &m_board; +} + +const IColor* State::turn() const { + return m_turn; +} + +void State::setTurn(const IColor* turn) { + m_turn = turn; +} + +bool State::equals(IState* other) const { + return m_board.equals(other->board()) && + m_turn == other->turn() && + m_flags == *other->flags(); +} + +void State::assign(const IState* other) { + m_board = *other->board(); + m_turn = other->turn(); + m_flags = *other->flags(); +} + +void State::move(const Move& m) { + const Piece* piece = m_board.get(m.src()); + if (piece == NULL || *piece == Piece()) return; + + Point captureSquare = behaviour()->captureSquare(this, m); + behaviour()->captureOn(m_delegator, captureSquare); + behaviour()->move(m_delegator, m); + + m_flags.set("en_passant_square", QVariant(enPassantTrigger(m))); + const IType* promotion_type = m.promotion(); + + if (promotion_type != 0) { + m_board.set(m.dst(), Piece(piece->color(), promotion_type)); + } + + if (m_castling_rules) + m_castling_rules->handleCastling(*piece, m, m_delegator); + behaviour()->advanceTurn(m_delegator); +} + +const TaguaObject* State::flags() const { return &m_flags; } +TaguaObject* State::flags() { return &m_flags; } + +int State::rank(int n, const IColor* turn) const { + if (turn == White::self()) + return m_board.size().y - n - 1; + else + return n; +} + +IPoolCollection* State::pools() { return 0; } +const IPoolCollection* State::pools() const { return 0; } + +const IBehaviour* State::behaviour() const { return m_behaviour; } + +Point State::enPassantTrigger(const Move& move) const { + if (move.type() == "en_passant_trigger") + return (move.dst() + move.src()) / 2; + else + return Point::invalid(); +} + +void State::setDelegator(IState* delegator) { m_delegator = delegator; } + +Component* State::clone(const IBehaviour* behaviour, + Component* castling, + const Point& size) const { + const ICastlingRules* rules = dynamic_cast(castling); + if (!rules) rules = new CastlingRulesAdaptor(castling, false); + return new State(behaviour, rules, size); +} + +} // namespace Chess diff --git a/src/variants/chess/state.h b/src/variants/chess/state.h new file mode 100644 index 0000000..4e591bc --- /dev/null +++ b/src/variants/chess/state.h @@ -0,0 +1,80 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__STATE_H +#define CHESS__STATE_H + +#include +#include +#include +#include +#include + +/** + * @brief Namespace holding Chess components. + */ +namespace Chess { + +class ICastlingRules; + +class State : public Component, public IState { +Q_OBJECT + Board m_board; + TaguaObject m_flags; + const IColor* m_turn; + const IBehaviour* m_behaviour; + const ICastlingRules* m_castling_rules; + IState* m_delegator; +protected: + State(const State&); +public: + State(const IBehaviour* behaviour, + const ICastlingRules* castling, + const Point& size); +public: + virtual IState* clone() const; + + virtual void setup(); + + virtual const Board* board() const; + virtual Board* board(); + + virtual const IColor* turn() const; + + virtual void setTurn(const IColor* turn); + + virtual bool equals(IState* other) const; + + virtual void assign(const IState* other); + + virtual void move(const Move& move); + + virtual TaguaObject* flags(); + virtual const TaguaObject* flags() const; + + virtual int rank(int n, const IColor* turn) const; + + virtual const IPoolCollection* pools() const; + virtual IPoolCollection* pools(); + + virtual const IBehaviour* behaviour() const; + + virtual void setDelegator(IState* delegator); +public Q_SLOTS: + virtual Point enPassantTrigger(const Move& move) const; + virtual Component* clone(const IBehaviour* behaviour, + Component* rules, + const Point& size) const; +}; + +} // namespace Chess + +#endif // CHESS__STATE_H + diff --git a/src/variants/chess/tagua-chess.desktop b/src/variants/chess/tagua-chess.desktop new file mode 100644 index 0000000..a936110 --- /dev/null +++ b/src/variants/chess/tagua-chess.desktop @@ -0,0 +1,20 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Chess +Comment=The Game of Chess +Icon=tagua +Type=Service +ServiceTypes=Tagua/Variant + +X-KDE-Library=taguachess +X-KDE-PluginInfo-Author=Paolo Capriotti +X-KDE-PluginInfo-Email=p.capriotti@gmail.com +X-KDE-PluginInfo-Name=chess +X-KDE-PluginInfo-Version=0.5.1 +X-KDE-PluginInfo-Website=http://www.tagua-project.org +X-KDE-PluginInfo-Depends= +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true + +X-Tagua-Proxy=Chess +X-Tagua-Hidden=false diff --git a/src/variants/chess/types.h b/src/variants/chess/types.h new file mode 100644 index 0000000..10d7782 --- /dev/null +++ b/src/variants/chess/types.h @@ -0,0 +1,23 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__TYPES_H +#define CHESS__TYPES_H + +// include all chess types +#include "king.h" +#include "queen.h" +#include "rook.h" +#include "bishop.h" +#include "knight.h" +#include "pawn.h" + +#endif // CHESS__TYPES_H + diff --git a/src/variants/chess/validator.cpp b/src/variants/chess/validator.cpp new file mode 100644 index 0000000..9953bec --- /dev/null +++ b/src/variants/chess/validator.cpp @@ -0,0 +1,118 @@ +#include "validator.h" +#include +#include +#include +#include +#include +#include +#include "colors.h" +#include "types.h" + +namespace Chess { + +Validator::Validator() : m_delegator(this) { } + +bool Validator::pseudolegal(const IState* state, Move& move) const { + if (!state->board()->valid(move.src())) return false; + if (!state->board()->valid(move.dst())) return false; + + const Piece* piece = state->board()->get(move.src()); + if (piece == NULL || *piece == Piece()) return false; + + const IBehaviour* behaviour = state->behaviour(); + if (!behaviour) return false; + + const IColor* thisTurn = piece->color(); + const IColor* otherTurn = behaviour->opponent(thisTurn); + + if (state->turn() != thisTurn) return false; + + const Piece* target = state->board()->get(move.dst()); + if (target->color() == piece->color()) + return false; + if (!piece->type()->canMove(*piece, *target, move, state)) + return false; + + if (move.type() == "promotion") { + const IType* promotionType = move.promotion(); + if (promotionType != Queen::self() && + promotionType != Bishop::self() && + promotionType != Rook::self() && + promotionType != Knight::self()) return false; + } + + if (move.type() == "king_side_castling") { + if (m_delegator->attacks(state, otherTurn, move.src()) || + m_delegator->attacks(state, otherTurn, move.src() + Point(1, 0), *piece)) + return false; + } + if (move.type() == "queen_side_castling") { + if (m_delegator->attacks(state, otherTurn, move.src()) || + m_delegator->attacks(state, otherTurn, move.src() + Point(-1, 0), *piece)) + return false; + } + + return true; +} + +bool Validator::legal(const IState* state, Move& move) const { + // do not check a move more than once + if (!move.type().isEmpty()) return true; + + if (!m_delegator->pseudolegal(state, move)) + return false; + + const IBehaviour* behaviour = state->behaviour(); + if (!behaviour) return false; + + const IColor* turn = m_delegator->mover(state, move); + + IState* tmp(state->clone()); + tmp->move(move); + + Point kingPos = tmp->board()->find(Piece(turn, King::self())); + + if (kingPos == Point::invalid()) + return false; + + if (m_delegator->attacks(tmp, behaviour->opponent(turn), kingPos)) + return false; + + // set move type as normal, if not already set + if (move.type().isEmpty()) move.setType("normal"); + return true; +} + +bool Validator::attacks(const IState* state, const IColor* player, + const Point& square, const Piece& target_) const { + const Piece* target; + if (target_ != Piece()) + target = &target_; + else + target = state->board()->get(square); + + for (int i = 0; i < state->board()->size().x; i++) { + for (int j = 0; j < state->board()->size().y; j++) { + Point p(i, j); + const Piece* piece = state->board()->get(p); + Move move(p, square); + if (piece != NULL && + *piece != Piece() && + piece->color() == player && + piece->type()->canMove(*piece, *target, move, state)) + return true; + } + } + return false; +} + +const IColor* Validator::mover(const IState* state, const Move& move) const { + return state->board()->get(move.src())->color(); +} + +void Validator::setDelegator(IValidator* delegator) { + m_delegator = delegator; +} + +} + diff --git a/src/variants/chess/validator.h b/src/variants/chess/validator.h new file mode 100644 index 0000000..5b2b508 --- /dev/null +++ b/src/variants/chess/validator.h @@ -0,0 +1,40 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CHESS__VALIDATOR_H +#define CHESS__VALIDATOR_H + +#include +#include + +namespace Chess { + +class Validator : public Component, public IValidator { +Q_OBJECT + IValidator* m_delegator; +public: + Validator(); + + virtual bool pseudolegal(const IState* state, Move& move) const; + + virtual bool legal(const IState* state, Move& move) const; + + virtual bool attacks(const IState* state, const IColor* player, + const Point& square, const Piece& target = Piece()) const; + + virtual const IColor* mover(const IState* state, const Move& move) const; + + virtual void setDelegator(IValidator* validator); +}; + +} + +#endif // CHESS__VALIDATOR_H + diff --git a/src/variants/chess5x5/CMakeLists.txt b/src/variants/chess5x5/CMakeLists.txt new file mode 100644 index 0000000..54f1231 --- /dev/null +++ b/src/variants/chess5x5/CMakeLists.txt @@ -0,0 +1,17 @@ +set(taguachess5x5_SRCS + chess5x5.cpp +) + +# we don't need taguachess includes! +include_directories(${CMAKE_SOURCE_DIR}/src/) + +kde4_add_plugin(taguachess5x5 ${taguachess5x5_SRCS}) + +# we don't need to link to taguachess! +target_link_libraries(taguachess5x5 + taguacore + ${KDE4_KDECORE_LIBS} +) + +install(TARGETS taguachess5x5 DESTINATION ${PLUGIN_INSTALL_DIR}) +install(FILES tagua-chess5x5.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/src/variants/chess5x5/chess5x5.cpp b/src/variants/chess5x5/chess5x5.cpp new file mode 100644 index 0000000..d93523e --- /dev/null +++ b/src/variants/chess5x5/chess5x5.cpp @@ -0,0 +1,50 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include + +#include +#include +#include +#include + +class IBehaviour; + +extern "C" KDE_EXPORT Repository* +taguachess5x5_initrepo(IVariantLoader* loader) { + Repository* repo = new Repository; + Repository* chess = loader->getRepository("chess"); + if (!chess) + // bail out if there is no chess variant + return 0; + + repo->setProxy(chess); + + // set state factory + Component* chess_state_comp = chess->getComponent("state"); + IState* chess_state = requestInterface(chess_state_comp); + Q_ASSERT(chess_state); + + const IBehaviour* behaviour = chess_state->behaviour(); + + Component* state = 0; + bool ok = QMetaObject::invokeMethod(chess_state_comp, "clone", + Q_RETURN_ARG(Component*, state), + Q_ARG(const IBehaviour*, behaviour), + Q_ARG(Component*, 0), + Q_ARG(Point, Point(5, 5))); + Q_ASSERT(ok); + Q_ASSERT(state); + + repo->addComponent("state", state); + + return repo; +} + diff --git a/src/variants/chess5x5/chess5x5.cs b/src/variants/chess5x5/chess5x5.cs new file mode 100644 index 0000000..a7f5977 --- /dev/null +++ b/src/variants/chess5x5/chess5x5.cs @@ -0,0 +1,22 @@ +using Tagua.Component; +using Tagua.Repository; +using Tagua.Point; +using Tagua.IVariantLoader; + +public class Chess5x5 { + public static Repository initrepo(IVariantLoader loader) { + Repository repo = new Repository(); + Repository chess = loader.getRepository("chess"); + if (chess == null) return null; + + repo.setProxy(chess); + + Component chess_state_factory = chess.getComponent("state_factory"); + Component state_factory = chess_state_factory.invoke( + "createFactory", new Point(5, 5)); + + repo.addComponent("state_factory", state_factory); + + return repo; + } +} diff --git a/src/variants/chess5x5/chess5x5.java b/src/variants/chess5x5/chess5x5.java new file mode 100644 index 0000000..30fe202 --- /dev/null +++ b/src/variants/chess5x5/chess5x5.java @@ -0,0 +1,24 @@ +package org.tagua-project.variants.chess5x5; + +import org.tagua-project.core.Component; +import org.tagua-project.core.Repository; +import org.tagua-project.core.Point; +import org.tagua-project.core.IVariantLoader; + +public class Chess5x5 { + public static Repository initrepo(IVariantLoader loader) { + Repository repo = new Repository(); + Repository chess = loader.getRepository("chess"); + if (chess == null) return null; + + repo.setProxy(chess); + + Component chess_state_factory = chess.getComponent("state_factory"); + Component state_factory = chess_state_factory.invoke( + "createFactory", new Point(5, 5)); + + repo.addComponent("state_factory", state_factory); + + return repo; + } +} diff --git a/src/variants/chess5x5/chess5x5.py b/src/variants/chess5x5/chess5x5.py new file mode 100644 index 0000000..0924fb4 --- /dev/null +++ b/src/variants/chess5x5/chess5x5.py @@ -0,0 +1,11 @@ +from tagua.core import Repository, Point + +def taguachess5x5_initrepo(loader): + repo = Repository() + chess = loader.get_repository('chess') + if not chess: return None + + repo.proxy = chess + repo.state_factory = chess.state_factory.createFactory(Point(5, 5)) + return repo + \ No newline at end of file diff --git a/src/variants/chess5x5/chess5x5.rb b/src/variants/chess5x5/chess5x5.rb new file mode 100644 index 0000000..3751a01 --- /dev/null +++ b/src/variants/chess5x5/chess5x5.rb @@ -0,0 +1,12 @@ +require 'tagua/core' + +include Tagua::Core + +def taguachess5x5_initrepo(loader) + repo = Repository.new + chess = loader.get_repository('chess') or return + + repo.proxy = chess + repo.state_factory = chess.state_factory.createFactory(Point.new(5, 5)) + repo +end diff --git a/src/variants/chess5x5/tagua-chess5x5.desktop b/src/variants/chess5x5/tagua-chess5x5.desktop new file mode 100644 index 0000000..205041e --- /dev/null +++ b/src/variants/chess5x5/tagua-chess5x5.desktop @@ -0,0 +1,21 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Chess 5x5 +Comment=Chess on a smaller board +Icon=tagua +Type=Service +ServiceTypes=Tagua/Variant + +X-KDE-Library=taguachess5x5 +X-KDE-PluginInfo-Author=Paolo Capriotti +X-KDE-PluginInfo-Email=p.capriotti@gmail.com +X-KDE-PluginInfo-Name=chess5x5 +X-KDE-PluginInfo-Version=0.0.1 +X-KDE-PluginInfo-Website=http://www.tagua-project.org +X-KDE-PluginInfo-Depends=chess +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true + +X-Tagua-Proxy=Chess +X-Tagua-Hidden=false + diff --git a/src/variants/crazyhouse/CMakeLists.txt b/src/variants/crazyhouse/CMakeLists.txt new file mode 100644 index 0000000..02a891b --- /dev/null +++ b/src/variants/crazyhouse/CMakeLists.txt @@ -0,0 +1,22 @@ +set(taguacrazyhouse_SRCS + animator.cpp + behaviour.cpp + crazyhouse.cpp + moveserializer.cpp + state.cpp + validator.cpp +) + +# we don't need taguachess includes! +include_directories(${CMAKE_SOURCE_DIR}/src/) + +kde4_add_plugin(taguacrazyhouse ${taguacrazyhouse_SRCS}) + +# we don't need to link to taguachess! +target_link_libraries(taguacrazyhouse + taguacore + ${KDE4_KDECORE_LIBS} +) + +install(TARGETS taguacrazyhouse DESTINATION ${PLUGIN_INSTALL_DIR}) +install(FILES tagua-crazyhouse.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/src/variants/crazyhouse/animator.cpp b/src/variants/crazyhouse/animator.cpp new file mode 100644 index 0000000..63c0b05 --- /dev/null +++ b/src/variants/crazyhouse/animator.cpp @@ -0,0 +1,26 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "animator.h" +#include +#include "global.h" + +namespace Crazyhouse { + +AnimatorFactory::AnimatorFactory(IAnimatorFactory* parent) +: m_parent(parent) { } + +IAnimator* AnimatorFactory::create(TaguaAPI* api, const INamer* namer) const { + IAnimator* animator = m_parent->create(api, namer); + DropAnimator* res = new DropAnimator(animator, api, namer, players); + animator->setWarper(res); + return res; +} + +} diff --git a/src/variants/crazyhouse/animator.h b/src/variants/crazyhouse/animator.h new file mode 100644 index 0000000..d7c9f67 --- /dev/null +++ b/src/variants/crazyhouse/animator.h @@ -0,0 +1,28 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CRAZYHOUSE__ANIMATOR_H +#define CRAZYHOUSE__ANIMATOR_H + +#include +#include + +namespace Crazyhouse { + +class AnimatorFactory : public Component, public IAnimatorFactory { +Q_OBJECT + IAnimatorFactory* m_parent; +public: + AnimatorFactory(IAnimatorFactory* parent); + virtual IAnimator* create(TaguaAPI* api, const INamer* namer) const; +}; + +} + +#endif // CRAZYHOUSE__ANIMATOR_H diff --git a/src/variants/crazyhouse/behaviour.cpp b/src/variants/crazyhouse/behaviour.cpp new file mode 100644 index 0000000..0dd43f6 --- /dev/null +++ b/src/variants/crazyhouse/behaviour.cpp @@ -0,0 +1,37 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "behaviour.h" + +#include +#include +#include +#include +#include +#include "global.h" + +namespace Crazyhouse { + +Behaviour::Behaviour(const IBehaviour* behaviour) +: Delegators::Behaviour(behaviour) { } + +void Behaviour::captureOn(IState* state, const Point& square) const { + Piece* captured = state->board()->get(square); + if (captured != NULL && *captured != Piece()) { + if (captured->get("promoted").toBool()) { + captured->setType(pawn); + } + state->pools()->pool(opponent(captured->color()))->insert(-1, *captured); + } + m_behaviour->captureOn(state, square); +} + +} // namespace Crazyhouse + + diff --git a/src/variants/crazyhouse/behaviour.h b/src/variants/crazyhouse/behaviour.h new file mode 100644 index 0000000..42c066b --- /dev/null +++ b/src/variants/crazyhouse/behaviour.h @@ -0,0 +1,26 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CRAZYHOUSE__BEHAVIOUR_H +#define CRAZYHOUSE__BEHAVIOUR_H + +#include + +namespace Crazyhouse { + +class Behaviour : public Delegators::Behaviour { +public: + Behaviour(const IBehaviour* behaviour); + + virtual void captureOn(IState* state, const Point& square) const; +}; + +} // namespace Crazyhouse + +#endif // CRAZYHOUSE__BEHAVIOUR_H diff --git a/src/variants/crazyhouse/crazyhouse.cpp b/src/variants/crazyhouse/crazyhouse.cpp new file mode 100644 index 0000000..7283c0c --- /dev/null +++ b/src/variants/crazyhouse/crazyhouse.cpp @@ -0,0 +1,94 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include +#include +#include +#include + +#include "animator.h" +#include "behaviour.h" +#include "moveserializer.h" +#include "state.h" +#include "validator.h" + +#include + +using namespace Crazyhouse; + +#define LOAD_TYPE(NAME) \ + NAME = requestInterface(chess->getComponent("type/" #NAME)) + +namespace Crazyhouse { + const IType* pawn; + const IType* king; + const IType* queen; + const IType* bishop; + const IType* rook; + const IType* knight; + const IColor* players[2]; +} + +extern "C" KDE_EXPORT Repository* +taguacrazyhouse_initrepo(IVariantLoader* loader) { + Repository* repo = new Repository; + Repository* chess = loader->getRepository("chess"); + if (!chess) return 0; + repo->setProxy(chess); + + // get chess state factory + Component* chess_state_comp = chess->getComponent("state"); + IState* chess_state = requestInterface(chess_state_comp); + + // create crazyhouse behaviour + const IBehaviour* behaviour = new Behaviour(chess_state->behaviour()); + + // create crazyhouse state factory + Component* state_component = 0; + bool ok = QMetaObject::invokeMethod(chess_state_comp, "clone", + Q_RETURN_ARG(Component*, state_component), + Q_ARG(const IBehaviour*, behaviour), + Q_ARG(Component*, chess->getComponent("extra/castling_rules")), + Q_ARG(Point, chess_state->board()->size())); + kDebug() << "cloning prototype state" << ok; + State* state = new State(requestInterface(state_component)); + + // set state factory + repo->addComponent("state", state); + + // set animator factory + IAnimatorFactory* chess_animator_factory = + requestInterface(chess->getComponent("animator_factory")); + repo->addComponent("animator_factory", new AnimatorFactory(chess_animator_factory)); + + // set validator + IValidator* validator = requestInterface(chess->getComponent("validator")); + repo->addComponent("validator", new Validator(validator)); + + // set move serializers + Repository::ComponentMap serializers = chess->listComponents("move_serializer"); + for (Repository::ComponentMap::const_iterator it = serializers.begin(), + end = serializers.end(); it != end; ++it) { + IMoveSerializer* s = requestInterface(it.value()); + if (s) repo->addComponent("move_serializer/" + it.key(), new MoveSerializer(s)); + } + + LOAD_TYPE(pawn); + LOAD_TYPE(king); + LOAD_TYPE(queen); + LOAD_TYPE(bishop); + LOAD_TYPE(rook); + LOAD_TYPE(knight); + players[0] = White::self(); + players[1] = Black::self(); + + return repo; +} + diff --git a/src/variants/crazyhouse/crazyhouse.rb b/src/variants/crazyhouse/crazyhouse.rb new file mode 100644 index 0000000..f032b13 --- /dev/null +++ b/src/variants/crazyhouse/crazyhouse.rb @@ -0,0 +1,116 @@ +require 'tagua/core' + +def crazyhouse_initrepo(loader) + repo = Tagua::Repository.new + chess = loader.get_repository 'chess' or return + repo.proxy = chess + + repo.state_factory = state_class State + repo.animator_factory = animator_factory do |api, namer| + Tagua::DropAnimator.new(chess.animator_factory.create(api, namer), + api, + namer, + $white, $black) + end + repo.move_serializer.each do |key, s| + repo.get(key).wrap_with MoveSerializer + end + repo.validator.wrap_with Validator + + $pawn = chess.type.pawn +end + +class State + delegate_to :state + attr_accessor :pools + + def initialize(state) + @state = state + @pools = Tagua::PoolCollection.new + end + + def clone + res = self.class.new(state.clone) + res.pools = pools.clone + res + end + + def move(m) + if m.drop + captured = board.get(m.dst) + set(m.dst, m.drop) + pools.pool(m.drop.color).remove(m.drop.type) + + # handle capturing by drop: some variants could use it + pools.pool(opponent(captured.color)).add(captured.type) if captured + + switchTurn + else + state.move(m) + if (m.promotion) + promoted = board.get(m.to) + promoted.promoted = true + board.set(m.to, promoted) + end + end + end +end + +class Validator + delegate_to :validator + + def initialize(validator) + @validator = validator + end + + def pseudolegal(state, move) + # add drop information to move, if missing + if not move.drop and move.pool and move.index != -1 + move.drop = state.pools.pool(move.pool).get(move.index) + end + + dropped = move.drop + # use wrapped validator for nondrop moves + return validator.pseudolegal(move) unless dropped + # dropping on a valid square + return false unless state.board.valid(move.to) + # cannot drop on occupied squares + return false if state.board(move.to) + # cannot drop pawns in first or eighth rank + return false if dropped.type == $pawn and + (move.to.y == state.rank(0, $white) or + move.to.y == state.promotion(state.board.size.y - 1, $white)) + + return true + end + + def mover(state, move) + if move.drop + return move.drop.color; + else + return validator.mover(move); + end + end +end + +class MoveSerializer + delegate_to :serializer + + def initialize(serializer) + @serializer = serializer + end + + def serialize(move, ref) + if move.drop + res = if serializer.type == 'decorated' + "{#{move.drop.type.name}}" + else + serializer.symbol(move.drop.type).upcase + end + + "#{res}@#{move.to.toString(ref.board.size.y)}#{serializer.suffix(move, ref)}" + else + serializer.serialize move + end + end +end diff --git a/src/variants/crazyhouse/global.h b/src/variants/crazyhouse/global.h new file mode 100644 index 0000000..bbf4ea3 --- /dev/null +++ b/src/variants/crazyhouse/global.h @@ -0,0 +1,24 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include + +namespace Crazyhouse { + +extern const IType* pawn; +extern const IType* king; +extern const IType* queen; +extern const IType* bishop; +extern const IType* rook; +extern const IType* knight; +extern const IColor* players[]; + +} + diff --git a/src/variants/crazyhouse/moveserializer.cpp b/src/variants/crazyhouse/moveserializer.cpp new file mode 100644 index 0000000..42ced9f --- /dev/null +++ b/src/variants/crazyhouse/moveserializer.cpp @@ -0,0 +1,44 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "moveserializer.h" +#include +#include +#include + +namespace Crazyhouse { + +MoveSerializer::MoveSerializer(IMoveSerializer* serializer) +: Delegators::MoveSerializer(serializer) { } + +QString MoveSerializer::serialize(const Move& move, const IState* ref) const { + if (move.drop() == Piece()) + return m_serializer->serialize(move, ref); + + QString res; + if (type() == "decorated") { + const IType* type = move.drop().type(); + if (type) + res = "{" + move.drop().type()->name() + '}'; + else + res = "?"; + } + else { + res = symbol(move.drop().type()).toUpper(); + } + + return res + + '@' + + move.dst().toString(ref->board()->size().y) + + suffix(move, ref); +} + +} // namespace Crazyhouse + + diff --git a/src/variants/crazyhouse/moveserializer.h b/src/variants/crazyhouse/moveserializer.h new file mode 100644 index 0000000..8174583 --- /dev/null +++ b/src/variants/crazyhouse/moveserializer.h @@ -0,0 +1,29 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CRAZYHOUSE__MOVESERIALIZER_H +#define CRAZYHOUSE__MOVESERIALIZER_H + +#include +#include + +namespace Crazyhouse { + +class MoveSerializer : public Component, public Delegators::MoveSerializer { +public: + MoveSerializer(IMoveSerializer* serializer); + + virtual QString serialize(const Move& move, const IState* ref) const; +// virtual Move deserialize(const QString& str, const IState* ref) const; +}; + +} // namespace Crazyhouse + +#endif // CRAZYHOUSE__MOVESERIALIZER_H + diff --git a/src/variants/crazyhouse/state.cpp b/src/variants/crazyhouse/state.cpp new file mode 100644 index 0000000..765c853 --- /dev/null +++ b/src/variants/crazyhouse/state.cpp @@ -0,0 +1,79 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "state.h" +#include "global.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Crazyhouse { + +State::State(IState* state) +: Delegators::State(state) { + DefaultPoolCollection* c = new DefaultPoolCollection; + for (int i = 0; i < 2; i++) + c->addPool(players[i], new DefaultPool(players[i])); + m_pools = c; +} + +State::~State() { delete m_pools; } + +IState* State::clone() const { + State* s = new State(m_state->clone()); + s->m_pools = m_pools->clone(); + return s; +} + +void State::assign(const IState* other) { + m_state->assign(other); + const IPoolCollection* pools = other->pools(); + if (pools) { + delete m_pools; + m_pools = pools->clone(); + } +} + +void State::move(const Move& m) { + if (m.drop() != Piece()) { + Piece* captured = board()->get(m.dst()); + board()->set(m.dst(), m.drop()); + pools()->pool(m.drop().color())->take(m.drop()); + + // handle capturing by drop: some variants could use it + if (captured != NULL && *captured != Piece()) { + if (captured->get("promoted").toBool()) { + captured->setType(pawn); + } + pools()->pool(behaviour()->opponent(captured->color())) + ->insert(-1, *captured); + } + + behaviour()->advanceTurn(this); + } + else { + m_state->move(m); + if (m.promotion()) { + Piece* promoted = board()->get(m.dst()); + promoted->set("promoted", true); + board()->set(m.dst(), *promoted); + } + } +} + +const IPoolCollection* State::pools() const { return m_pools; } +IPoolCollection* State::pools() { return m_pools; } + +} // namespace Crazyhouse diff --git a/src/variants/crazyhouse/state.h b/src/variants/crazyhouse/state.h new file mode 100644 index 0000000..e0ebace --- /dev/null +++ b/src/variants/crazyhouse/state.h @@ -0,0 +1,42 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CRAZYHOUSE__STATE_H +#define CRAZYHOUSE__STATE_H + +#include +#include +#include + +class IPoolCollection; + +/** + * @brief Namespace holding Crazyhouse components. + */ +namespace Crazyhouse { + +class State : public Component, public Delegators::State { +Q_OBJECT + IPoolCollection* m_pools; +public: + State(IState* state); + virtual ~State(); + + virtual IState* clone() const; + virtual void assign(const IState* other); + virtual void move(const Move& m); + + virtual const IPoolCollection* pools() const; + virtual IPoolCollection* pools(); +}; + +} // namespace Crazyhouse + +#endif // CRAZYHOUSE__STATE_H + diff --git a/src/variants/crazyhouse/tagua-crazyhouse.desktop b/src/variants/crazyhouse/tagua-crazyhouse.desktop new file mode 100644 index 0000000..b7e7675 --- /dev/null +++ b/src/variants/crazyhouse/tagua-crazyhouse.desktop @@ -0,0 +1,21 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Crazyhouse +Comment=The game of Crazyhouse +Icon=tagua +Type=Service +ServiceTypes=Tagua/Variant + +X-KDE-Library=taguacrazyhouse +X-KDE-PluginInfo-Author=Paolo Capriotti +X-KDE-PluginInfo-Email=p.capriotti@gmail.com +X-KDE-PluginInfo-Name=crazyhouse +X-KDE-PluginInfo-Version=0.0.1 +X-KDE-PluginInfo-Website=http://www.tagua-project.org +X-KDE-PluginInfo-Depends=chess +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true + +X-Tagua-Proxy=Chess +X-Tagua-Hidden=false + diff --git a/src/variants/crazyhouse/validator.cpp b/src/variants/crazyhouse/validator.cpp new file mode 100644 index 0000000..e25193e --- /dev/null +++ b/src/variants/crazyhouse/validator.cpp @@ -0,0 +1,69 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "validator.h" + +#include + +#include +#include +#include +#include +#include + +#include "global.h" + +namespace Crazyhouse { + +Validator::Validator(IValidator* validator) +: Delegators::Validator(validator) { } + +Validator::~Validator() { } + +bool Validator::pseudolegal(const IState* state, Move& move) const { + // add drop information to move, if missing + if (move.drop() == Piece() && + move.pool() && move.index() != -1) { + move.setDrop(state->pools()->pool(move.pool())->get(move.index())); + } + + Piece dropped = move.drop(); + if (dropped == Piece()) { + return m_validator->pseudolegal(state, move); + } + else { + // dropping on a valid square + if (!state->board()->valid(move.dst())) + return false; + + // cannot drop on occupied squares + if (state->board()->get(move.dst()) != NULL && + *state->board()->get(move.dst()) != Piece()) + return false; + + // cannot drop pawns in first or eighth rank + if (dropped.type() == pawn && + (move.dst().y == state->rank(0, players[0]) || + move.dst().y == state->rank(state->board()->size().y - 1, players[0]))) + return false; + + return true; + } +} + +const IColor* Validator::mover(const IState* state, const Move& move) const { + if (move.drop() != Piece()) + return move.drop().color(); + else + return m_validator->mover(state, move); +} + +} // namespace Crazyhouse + + diff --git a/src/variants/crazyhouse/validator.h b/src/variants/crazyhouse/validator.h new file mode 100644 index 0000000..2935fb2 --- /dev/null +++ b/src/variants/crazyhouse/validator.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef CRAZYHOUSE__VALIDATOR_H +#define CRAZYHOUSE__VALIDATOR_H + +#include +#include + +class IState; +class Move; + +namespace Crazyhouse { + +class Validator : public Component, public Delegators::Validator { +Q_OBJECT +public: + Validator(IValidator* validator); + virtual ~Validator(); + + virtual bool pseudolegal(const IState* state, Move& move) const; + const IColor* mover(const IState* state, const Move& move) const; +}; + +} // namespace Crazyhouse + +#endif // CRAZYHOUSE__VALIDATOR_H + diff --git a/src/variants/minishogi/CMakeLists.txt b/src/variants/minishogi/CMakeLists.txt new file mode 100644 index 0000000..ec66cf7 --- /dev/null +++ b/src/variants/minishogi/CMakeLists.txt @@ -0,0 +1,16 @@ +set(taguaminishogi_SRCS + minishogi.cpp + state.cpp +) + +include_directories(${CMAKE_SOURCE_DIR}/src/) + +kde4_add_plugin(taguaminishogi ${taguaminishogi_SRCS}) + +target_link_libraries(taguaminishogi + taguacore + ${KDE4_KDECORE_LIBS} +) + +install(TARGETS taguaminishogi DESTINATION ${PLUGIN_INSTALL_DIR}) +install(FILES tagua-minishogi.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/src/variants/minishogi/global.h b/src/variants/minishogi/global.h new file mode 100644 index 0000000..dfed3e6 --- /dev/null +++ b/src/variants/minishogi/global.h @@ -0,0 +1,24 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include +#include + +namespace MiniShogi { + +extern const IType* pawn; +extern const IType* king; +extern const IType* gold; +extern const IType* silver; +extern const IType* bishop; +extern const IType* rook; +extern const IColor* players[]; + +} + diff --git a/src/variants/minishogi/minishogi.cpp b/src/variants/minishogi/minishogi.cpp new file mode 100644 index 0000000..6b8acac --- /dev/null +++ b/src/variants/minishogi/minishogi.cpp @@ -0,0 +1,68 @@ +#include "state.h" + +#include +#include +#include +#include +#include +#include + +#include + +using namespace MiniShogi; + +#define LOAD_TYPE(NAME) \ + NAME = requestInterface(shogi->getComponent("type/" #NAME)) + +namespace MiniShogi { + const IType* pawn; + const IType* king; + const IType* gold; + const IType* silver; + const IType* bishop; + const IType* rook; + const IColor* players[2]; +} + +extern "C" KDE_EXPORT Repository* +taguaminishogi_initrepo(IVariantLoader* loader) { + Repository* repo = new Repository; + Repository* shogi = loader->getRepository("shogi"); + if (!shogi) + // bail out if there is no shogi variant + return 0; + + repo->setProxy(shogi); + + // get shogi state factory + Component* shogi_state_comp = shogi->getComponent("state"); + IState* shogi_state = requestInterface(shogi_state_comp); + + // get shogi behaviour + const IBehaviour* behaviour = shogi_state->behaviour(); + + // create minishogi state factory + Component* state_component = 0; + bool ok = QMetaObject::invokeMethod(shogi_state_comp, "clone", + Q_RETURN_ARG(Component*, state_component), + Q_ARG(const IBehaviour*, behaviour), + Q_ARG(Point, Point(5, 5))); + kDebug() << "cloning prototype state" << ok; + Q_ASSERT(ok); + Q_ASSERT(state_component); + State* state = new State(requestInterface< ::DefaultState>(state_component)); + + // set state factory + repo->addComponent("state", state); + + LOAD_TYPE(pawn); + LOAD_TYPE(king); + LOAD_TYPE(gold); + LOAD_TYPE(silver); + LOAD_TYPE(bishop); + LOAD_TYPE(rook); + players[0] = Black::self(); + players[1] = White::self(); + + return repo; +} diff --git a/src/variants/minishogi/state.cpp b/src/variants/minishogi/state.cpp new file mode 100644 index 0000000..3bafa43 --- /dev/null +++ b/src/variants/minishogi/state.cpp @@ -0,0 +1,33 @@ +#include "global.h" +#include "state.h" + +#include +#include + +namespace MiniShogi { + +State::State(IState* state) +: Delegators::DefaultState(state) { } + +IState* State::clone() const { return new State(m_state->clone()); } + +#define COL(i,c) players[c]==White::self() ? i : board()->size().x - i - 1 +void State::setup() { + for (int c = 0; c < 2; c++) { + const IColor* color = players[c]; + int r0 = rank(0, color); + int r1 = rank(1, color); + + board()->set(Point(COL(0,c), r1), Piece(color, pawn)); + board()->set(Point(COL(0,c), r0), Piece(color, king)); + board()->set(Point(COL(1,c), r0), Piece(color, gold)); + board()->set(Point(COL(2,c), r0), Piece(color, silver)); + board()->set(Point(COL(3,c), r0), Piece(color, bishop)); + board()->set(Point(COL(4,c), r0), Piece(color, rook)); + } + + setTurn(White::self()); +} +#undef COL + +} // namespace MiniShogi diff --git a/src/variants/minishogi/state.h b/src/variants/minishogi/state.h new file mode 100644 index 0000000..8a5ec52 --- /dev/null +++ b/src/variants/minishogi/state.h @@ -0,0 +1,24 @@ +#ifndef MINISHOGI__STATE_H +#define MINISHOGI__STATE_H + +#include +#include +#include + +/** + * @brief Namespace holding Minishogi components. + */ +namespace MiniShogi { + +class State : public Component, public Delegators::DefaultState { +Q_OBJECT +public: + State(IState* state); + virtual IState* clone() const; + virtual void setup(); +}; + +} // namespace MiniShogi + +#endif // MINISHOGI__STATE_H + diff --git a/src/variants/minishogi/tagua-minishogi.desktop b/src/variants/minishogi/tagua-minishogi.desktop new file mode 100644 index 0000000..44cdf55 --- /dev/null +++ b/src/variants/minishogi/tagua-minishogi.desktop @@ -0,0 +1,20 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=MiniShogi +Comment=Shogi variant on a 5x5 board +Icon=tagua +Type=Service +ServiceTypes=Tagua/Variant + +X-KDE-Library=taguaminishogi +X-KDE-PluginInfo-Author=Yann Dirson +X-KDE-PluginInfo-Email=ydirson@altern.org +X-KDE-PluginInfo-Name=minishogi +X-KDE-PluginInfo-Version=0.1 +X-KDE-PluginInfo-Website=http://www.tagua-project.org +X-KDE-PluginInfo-Depends= +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true + +X-Tagua-Proxy=Shogi +X-Tagua-Hidden=false diff --git a/src/variants/shogi/CMakeLists.txt b/src/variants/shogi/CMakeLists.txt new file mode 100644 index 0000000..81842e9 --- /dev/null +++ b/src/variants/shogi/CMakeLists.txt @@ -0,0 +1,38 @@ +set(taguashogi_SRCS + shogi.cpp + + types/king.cpp + types/gold.cpp + types/silver.cpp + types/knight.cpp + types/lance.cpp + types/pawn.cpp + types/rook.cpp + types/bishop.cpp + + types/narigin.cpp + types/narikei.cpp + types/narikyo.cpp + types/tokin.cpp + types/dragonking.cpp + types/dragonhorse.cpp + + behaviour.cpp + colors.cpp + moveserializer.cpp +# san.cpp + state.cpp + validator.cpp +) + +include_directories(${CMAKE_SOURCE_DIR}/src/) + +kde4_add_plugin(taguashogi ${taguashogi_SRCS}) + +target_link_libraries(taguashogi + taguacore + ${KDE4_KDECORE_LIBS} +) + +install(TARGETS taguashogi DESTINATION ${PLUGIN_INSTALL_DIR}) +install(FILES tagua-shogi.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/src/variants/shogi/behaviour.cpp b/src/variants/shogi/behaviour.cpp new file mode 100644 index 0000000..4c774a6 --- /dev/null +++ b/src/variants/shogi/behaviour.cpp @@ -0,0 +1,36 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "behaviour.h" + +#include +#include +#include +#include +#include + +namespace Shogi { + +Behaviour::Behaviour(const IBehaviour* behaviour) +: Delegators::Behaviour(behaviour) { } + +void Behaviour::captureOn(IState* state, const Point& square) const { + Piece* captured = state->board()->get(square); + if (captured != NULL && *captured != Piece()) { + if (captured->get("promoted").toBool()) { + captured->setType(m_promotionmanager->getDepromotion(captured->type())); + } + state->pools()->pool(opponent(captured->color()))->insert(-1, *captured); + } + m_behaviour->captureOn(state, square); +} + +} // namespace Shogi + + diff --git a/src/variants/shogi/behaviour.h b/src/variants/shogi/behaviour.h new file mode 100644 index 0000000..d662c4e --- /dev/null +++ b/src/variants/shogi/behaviour.h @@ -0,0 +1,31 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__BEHAVIOUR_H +#define SHOGI__BEHAVIOUR_H + +#include +#include + +namespace Shogi { + +class Behaviour : public Component, public Delegators::Behaviour { +private: + PromotionManager* m_promotionmanager; +public: + Behaviour(const IBehaviour* behaviour); + + virtual void captureOn(IState* state, const Point& square) const; + + void setPromotionManager(PromotionManager* pm) { m_promotionmanager = pm; } +}; + +} // namespace Shogi + +#endif // SHOGI__BEHAVIOUR_H diff --git a/src/variants/shogi/colors.cpp b/src/variants/shogi/colors.cpp new file mode 100644 index 0000000..420b67e --- /dev/null +++ b/src/variants/shogi/colors.cpp @@ -0,0 +1,17 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "colors.h" + +namespace Shogi { + +IColor* COLORS[] = { Black::self(), White::self() }; + +} diff --git a/src/variants/shogi/colors.h b/src/variants/shogi/colors.h new file mode 100644 index 0000000..45e24f3 --- /dev/null +++ b/src/variants/shogi/colors.h @@ -0,0 +1,22 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__COLORS_H +#define SHOGI__COLORS_H + +#include + +namespace Shogi { + +extern IColor* COLORS[2]; + +} + +#endif // SHOGI__COLORS_H diff --git a/src/variants/shogi/moveserializer.cpp b/src/variants/shogi/moveserializer.cpp new file mode 100644 index 0000000..eab4be5 --- /dev/null +++ b/src/variants/shogi/moveserializer.cpp @@ -0,0 +1,43 @@ + +#include "moveserializer.h" + +#include +#include + +namespace Shogi { + +MoveSerializer::MoveSerializer(IMoveSerializer* serializer) +: Delegators::MoveSerializer(serializer) { } + +QString MoveSerializer::serialize(const Move& move, const IState* ref) const { + if (type() == "simple") { + int ysize = ref->board()->size().y; + QString res = move.src().toString(ysize) + move.dst().toString(ysize); + if (move.promotion()) + res = res + "=" + + symbol( + move.promotion() + ).toUpper(); + return res; + } + else if (type() == "compact") { + return san(move, ref); + } + else if (type() == "decorated") { + QString res = san(move, ref); + res.replace('K', "{king}"); + res.replace('G', "{gold}"); + res.replace('S', "{silver}"); + res.replace('N', "{knight}"); + res.replace('L', "{lance}"); + res.replace('B', "{bishop}"); + res.replace('R', "{rook}"); + res.replace('P', "{pawn}"); + return res; + } + else { + return ""; + } +} + +} // namespace Shogi diff --git a/src/variants/shogi/moveserializer.h b/src/variants/shogi/moveserializer.h new file mode 100644 index 0000000..3e39f48 --- /dev/null +++ b/src/variants/shogi/moveserializer.h @@ -0,0 +1,18 @@ +#ifndef SHOGI__MOVESERIALIZER_H +#define SHOGI__MOVESERIALIZER_H + +#include +#include + +namespace Shogi { +class TAGUA_EXPORT MoveSerializer : public Component, public Delegators::MoveSerializer { +public: + MoveSerializer(IMoveSerializer* serializer); + + virtual QString serialize(const Move& move, const IState* ref) const; +}; + +} // namespace Shogi + +#endif // SHOGI__MOVESERIALIZER_H + diff --git a/src/variants/shogi/shogi.cpp b/src/variants/shogi/shogi.cpp new file mode 100644 index 0000000..19f105b --- /dev/null +++ b/src/variants/shogi/shogi.cpp @@ -0,0 +1,82 @@ +#include +#include + +#include "behaviour.h" +#include "colors.h" +#include "moveserializer.h" +#include "types.h" +#include "state.h" +#include "validator.h" + +using namespace Shogi; + +extern "C" KDE_EXPORT Repository* +taguashogi_initrepo(IVariantLoader* loader) { + Repository* repo = new Repository; + Repository* chess = loader->getRepository("chess"); + if (!chess) + // bail out if there is no chess variant + return 0; +#if 0 + Repository* crazyhouse = loader->getRepository("crazyhouse"); + if (!crazyhouse) + // bail out if there is no crazyhouse variant + return 0; +#endif + + repo->addComponent("player/0", dynamic_cast(COLORS[0])); + repo->addComponent("player/1", dynamic_cast(COLORS[1])); + + repo->addComponent("type/king", King::self()); + repo->addComponent("type/gold", Gold::self()); + repo->addComponent("type/silver", Silver::self()); + repo->addComponent("type/knight", Knight::self()); + repo->addComponent("type/lance", Lance::self()); + repo->addComponent("type/rook", Rook::self()); + repo->addComponent("type/bishop", Bishop::self()); + repo->addComponent("type/pawn", Pawn::self()); + + repo->addComponent("type/narigin", Narigin::self()); + repo->addComponent("type/narikei", Narikei::self()); + repo->addComponent("type/narikyo", Narikyo::self()); + repo->addComponent("type/dragonking", DragonKing::self()); + repo->addComponent("type/dragonhorse", DragonHorse::self()); + repo->addComponent("type/tokin", Tokin::self()); + +#if 0 + // create crazyhouse behaviour + IState* crazyhouse_state = requestInterface(crazyhouse->getComponent("state")); + repo->addComponent("state", new State(crazyhouse_state->behaviour(), Point(9, 9))); +#else + IState* chess_state = requestInterface(chess->getComponent("state")); + PromotionManager* promotion_manager = new PromotionManager(); + promotion_manager->setPromotion(Silver::self(), Narigin::self()); + promotion_manager->setPromotion(Knight::self(), Narikei::self()); + promotion_manager->setPromotion(Lance::self(), Narikyo::self()); + promotion_manager->setPromotion(Rook::self(), DragonKing::self()); + promotion_manager->setPromotion(Bishop::self(), DragonHorse::self()); + promotion_manager->setPromotion(Pawn::self(), Tokin::self()); + repo->addComponent("promotion_manager", promotion_manager); + + Behaviour* behaviour = new Behaviour(chess_state->behaviour()); + behaviour->setPromotionManager(promotion_manager); + repo->addComponent("state", new State(behaviour, Point(9, 9))); +#endif + + Validator* validator = new Validator; + repo->addComponent("validator", validator); + repo->addComponent("animator_factory", chess->getComponent("animator_factory")); + repo->addComponent("namer", chess->getComponent("namer")); + repo->addComponent("policy", chess->getComponent("policy")); + + // set move serializers + Repository::ComponentMap serializers = chess->listComponents("move_serializer"); + for (Repository::ComponentMap::const_iterator it = serializers.begin(), + end = serializers.end(); it != end; ++it) { + IMoveSerializer* s = requestInterface(it.value()); + if (s) repo->addComponent("move_serializer/" + it.key(), new MoveSerializer(s)); + } + + return repo; +} + diff --git a/src/variants/shogi/state.cpp b/src/variants/shogi/state.cpp new file mode 100644 index 0000000..877482f --- /dev/null +++ b/src/variants/shogi/state.cpp @@ -0,0 +1,171 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "state.h" + +#include +#include +#include +#include + +#include "colors.h" +#include "types.h" + +namespace Shogi { + +State::State(const IBehaviour* behaviour, + const Point& size) +: m_board(size) +, m_behaviour(behaviour) +, m_delegator(this) { + DefaultPoolCollection* c = new DefaultPoolCollection; + for (int i = 0; i < 2; i++) + c->addPool(COLORS[i], new DefaultPool(COLORS[i])); + m_pools = c; +} + +State::State(const State& other) +: Component() +, DefaultState() +, m_board(other.m_board) +, m_flags(other.m_flags) +, m_turn(other.m_turn) +, m_behaviour(other.m_behaviour) +, m_delegator(this) +, m_pools(other.m_pools) { } + +State::~State() { delete m_pools; } + +IState* State::clone() const { + State* s = new State(*this); + s->m_pools = m_pools->clone(); + return s; +} + +#define COL(i, c) c == Black::self() ? (i) : (m_board.size().x - i - 1) +void State::setup() { + for (int c = 0; c < 2; c++) { + IColor* color = COLORS[c]; + int r0 = rank(0, color); + int r1 = rank(1, color); + int r2 = rank(2, color); + + for (int i = 0; i < m_board.size().x; i++) { + m_board.set(Point(i, r2), Piece(color, Pawn::self())); + } + m_board.set(Point(0, r0), Piece(color, Lance::self())); + m_board.set(Point(1, r0), Piece(color, Knight::self())); + m_board.set(Point(2, r0), Piece(color, Silver::self())); + m_board.set(Point(3, r0), Piece(color, Gold::self())); + m_board.set(Point(4, r0), Piece(color, King::self())); + m_board.set(Point(5, r0), Piece(color, Gold::self())); + m_board.set(Point(6, r0), Piece(color, Silver::self())); + m_board.set(Point(7, r0), Piece(color, Knight::self())); + m_board.set(Point(8, r0), Piece(color, Lance::self())); + + m_board.set(Point(COL(1, color), r1), Piece(color, Bishop::self())); + m_board.set(Point(COL(7, color), r1), Piece(color, Rook::self())); + } + + m_turn = White::self(); +} +#undef COL + +const Board* State::board() const { + return &m_board; +} + +Board* State::board() { + return &m_board; +} + +const IColor* State::turn() const { + return m_turn; +} + +void State::setTurn(const IColor* turn) { + m_turn = turn; +} + +bool State::equals(IState* other) const { + return m_board.equals(other->board()) && + m_turn == other->turn() && + m_flags == *other->flags(); +} + +void State::assign(const IState* other) { + m_board = *other->board(); + m_turn = other->turn(); + m_flags = *other->flags(); + + const IPoolCollection* pools = other->pools(); + if (pools) { + delete m_pools; + m_pools = pools->clone(); + } +} + +void State::move(const Move& m) { + if (m.drop() != Piece()) { + const Piece* captured = board()->get(m.dst()); + board()->set(m.dst(), m.drop()); + pools()->pool(m.drop().color())->take(m.drop()); + +#if 0 + // handle capturing by drop: some variants could use it + if (captured != NULL && *captured != Piece()) { + if (captured->get("promoted").toBool()) { + captured->setType(pawn); + } + pools()->pool(behaviour()->opponent(captured->color())) + ->insert(-1, *captured); + } +#endif + } else { + const Piece* piece = m_board.get(m.src()); + if (piece == NULL || *piece == Piece()) return; + + Point captureSquare = behaviour()->captureSquare(this, m); + behaviour()->captureOn(m_delegator, captureSquare); + behaviour()->move(m_delegator, m); + + const IType* promotion_type = m.promotion(); + + if (promotion_type != 0) { + m_board.set(m.dst(), Piece(piece->color(), promotion_type)); + } + } + + behaviour()->advanceTurn(m_delegator); +} + +const TaguaObject* State::flags() const { return &m_flags; } +TaguaObject* State::flags() { return &m_flags; } + +int State::rank(int n, const IColor* turn) const { + if (turn == White::self()) + return m_board.size().y - n - 1; + else + return n; +} + +IPoolCollection* State::pools() { return m_pools; } +const IPoolCollection* State::pools() const { return m_pools; } + +const IBehaviour* State::behaviour() const { return m_behaviour; } + +void State::setDelegator(IState* delegator) { m_delegator = delegator; } + +Component* State::clone(const IBehaviour* behaviour, + const Point& size) const { + return new State(behaviour, size); +} + +} // namespace Shogi diff --git a/src/variants/shogi/state.h b/src/variants/shogi/state.h new file mode 100644 index 0000000..2b046e6 --- /dev/null +++ b/src/variants/shogi/state.h @@ -0,0 +1,76 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__STATE_H +#define SHOGI__STATE_H + +#include +#include +#include +#include +#include + +/** + * @brief Namespace holding Shogi components. + */ +namespace Shogi { + +class State : public Component, public DefaultState { +Q_OBJECT + Board m_board; + TaguaObject m_flags; + const IColor* m_turn; + const IBehaviour* m_behaviour; + IState* m_delegator; + IPoolCollection* m_pools; +protected: + State(const State&); +public: + State(const IBehaviour* behaviour, + const Point& size); + virtual ~State(); +public: + virtual IState* clone() const; + + virtual void setup(); + + virtual const Board* board() const; + virtual Board* board(); + + virtual const IColor* turn() const; + + virtual void setTurn(const IColor* turn); + + virtual bool equals(IState* other) const; + + virtual void assign(const IState* other); + + virtual void move(const Move& move); + + virtual TaguaObject* flags(); + virtual const TaguaObject* flags() const; + + virtual int rank(int n, const IColor* turn) const; + + virtual const IPoolCollection* pools() const; + virtual IPoolCollection* pools(); + + virtual const IBehaviour* behaviour() const; + + virtual void setDelegator(IState* delegator); +public Q_SLOTS: + virtual Component* clone(const IBehaviour* behaviour, + const Point& size) const; +}; + +} // namespace Shogi + +#endif // SHOGI__STATE_H + diff --git a/src/variants/shogi/tagua-shogi.desktop b/src/variants/shogi/tagua-shogi.desktop new file mode 100644 index 0000000..6d61ae8 --- /dev/null +++ b/src/variants/shogi/tagua-shogi.desktop @@ -0,0 +1,20 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Shogi +Comment=The Game of Shogi (Japanese Chess) +Icon=tagua +Type=Service +ServiceTypes=Tagua/Variant + +X-KDE-Library=taguashogi +X-KDE-PluginInfo-Author=Paolo Capriotti +X-KDE-PluginInfo-Email=p.capriotti@gmail.com +X-KDE-PluginInfo-Name=shogi +X-KDE-PluginInfo-Version=0.5.1 +X-KDE-PluginInfo-Website=http://www.tagua-project.org +X-KDE-PluginInfo-Depends= +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true + +X-Tagua-Proxy=Shogi +X-Tagua-Hidden=false diff --git a/src/variants/shogi/types.h b/src/variants/shogi/types.h new file mode 100644 index 0000000..d89432f --- /dev/null +++ b/src/variants/shogi/types.h @@ -0,0 +1,31 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES_H +#define SHOGI__TYPES_H + +// include all shogi types +#include "types/king.h" +#include "types/gold.h" +#include "types/silver.h" +#include "types/knight.h" +#include "types/lance.h" +#include "types/rook.h" +#include "types/bishop.h" +#include "types/pawn.h" + +#include "types/narigin.h" +#include "types/narikei.h" +#include "types/narikyo.h" +#include "types/dragonking.h" +#include "types/dragonhorse.h" +#include "types/tokin.h" + +#endif // SHOGI__TYPES_H diff --git a/src/variants/shogi/types/bishop.cpp b/src/variants/shogi/types/bishop.cpp new file mode 100644 index 0000000..e0e7d43 --- /dev/null +++ b/src/variants/shogi/types/bishop.cpp @@ -0,0 +1,40 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "bishop.h" + +namespace Shogi { + +Bishop::Bishop() { + MoveDefinition movesDefinition[] = { + {-1, 1, 0 }, + { 1, 1, 0 }, + {-1, -1, 0 }, + { 1, -1, 0 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Bishop::name() const { return "bishop"; } + +const std::vector * const Bishop::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Bishop::index() const { return 35; } + +Bishop* Bishop::self() { + static Bishop s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/bishop.h b/src/variants/shogi/types/bishop.h new file mode 100644 index 0000000..e3573f3 --- /dev/null +++ b/src/variants/shogi/types/bishop.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__BISHOP_H +#define SHOGI__TYPES__BISHOP_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Bishop : public Component, public DefaultType { +Q_OBJECT + Bishop(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Bishop* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__BISHOP_H diff --git a/src/variants/shogi/types/dragonhorse.cpp b/src/variants/shogi/types/dragonhorse.cpp new file mode 100644 index 0000000..0640ab3 --- /dev/null +++ b/src/variants/shogi/types/dragonhorse.cpp @@ -0,0 +1,44 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "dragonhorse.h" + +namespace Shogi { + +DragonHorse::DragonHorse() { + MoveDefinition movesDefinition[] = { + {-1, 1, 0 }, + { 0, 1, 1 }, + { 1, 1, 0 }, + {-1, 0, 1 }, + { 1, 0, 1 }, + {-1, -1, 0 }, + { 0, -1, 1 }, + { 1, -1, 0 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString DragonHorse::name() const { return "dragonhorse"; } + +const std::vector * const DragonHorse::movesDefinitions() const { + return &m_moveDefinitions; +} + +int DragonHorse::index() const { return 35; } + +DragonHorse* DragonHorse::self() { + static DragonHorse s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/dragonhorse.h b/src/variants/shogi/types/dragonhorse.h new file mode 100644 index 0000000..685919a --- /dev/null +++ b/src/variants/shogi/types/dragonhorse.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__DRAGONHORSE_H +#define SHOGI__TYPES__DRAGONHORSE_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT DragonHorse : public Component, public DefaultType { +Q_OBJECT + DragonHorse(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static DragonHorse* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__DRAGONHORSE_H diff --git a/src/variants/shogi/types/dragonking.cpp b/src/variants/shogi/types/dragonking.cpp new file mode 100644 index 0000000..ca11458 --- /dev/null +++ b/src/variants/shogi/types/dragonking.cpp @@ -0,0 +1,44 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "dragonking.h" + +namespace Shogi { + +DragonKing::DragonKing() { + MoveDefinition movesDefinition[] = { + {-1, 1, 1 }, + { 0, 1, 0 }, + { 1, 1, 1 }, + {-1, 0, 0 }, + { 1, 0, 0 }, + {-1, -1, 1 }, + { 0, -1, 0 }, + { 1, -1, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString DragonKing::name() const { return "dragonking"; } + +const std::vector * const DragonKing::movesDefinitions() const { + return &m_moveDefinitions; +} + +int DragonKing::index() const { return 50; } + +DragonKing* DragonKing::self() { + static DragonKing s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/dragonking.h b/src/variants/shogi/types/dragonking.h new file mode 100644 index 0000000..fa82b90 --- /dev/null +++ b/src/variants/shogi/types/dragonking.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__DRAGONKING_H +#define SHOGI__TYPES__DRAGONKING_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT DragonKing : public Component, public DefaultType { +Q_OBJECT + DragonKing(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static DragonKing* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__DRAGONKING_H diff --git a/src/variants/shogi/types/gold.cpp b/src/variants/shogi/types/gold.cpp new file mode 100644 index 0000000..cd891f0 --- /dev/null +++ b/src/variants/shogi/types/gold.cpp @@ -0,0 +1,42 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "gold.h" + +namespace Shogi { + +Gold::Gold() { + MoveDefinition movesDefinition[] = { + {-1, 1, 1 }, + { 0, 1, 1 }, + { 1, 1, 1 }, + {-1, 0, 1 }, + { 1, 0, 1 }, + { 0, -1, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Gold::name() const { return "gold"; } + +const std::vector * const Gold::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Gold::index() const { return 10000; } + +Gold* Gold::self() { + static Gold s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/gold.h b/src/variants/shogi/types/gold.h new file mode 100644 index 0000000..12aedb9 --- /dev/null +++ b/src/variants/shogi/types/gold.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__GOLD_H +#define SHOGI__TYPES__GOLD_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Gold : public Component, public DefaultType { +Q_OBJECT + Gold(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Gold* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__GOLD_H diff --git a/src/variants/shogi/types/king.cpp b/src/variants/shogi/types/king.cpp new file mode 100644 index 0000000..a13ed6e --- /dev/null +++ b/src/variants/shogi/types/king.cpp @@ -0,0 +1,44 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "king.h" + +namespace Shogi { + +King::King() { + MoveDefinition movesDefinition[] = { + {-1, 1, 1 }, + { 0, 1, 1 }, + { 1, 1, 1 }, + {-1, 0, 1 }, + { 1, 0, 1 }, + {-1, -1, 1 }, + { 0, -1, 1 }, + { 1, -1, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString King::name() const { return "king"; } + +const std::vector * const King::movesDefinitions() const { + return &m_moveDefinitions; +} + +int King::index() const { return 10000; } + +King* King::self() { + static King s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/king.h b/src/variants/shogi/types/king.h new file mode 100644 index 0000000..70a4384 --- /dev/null +++ b/src/variants/shogi/types/king.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__KING_H +#define SHOGI__TYPES__KING_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT King : public Component, public DefaultType { +Q_OBJECT + King(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static King* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__KING_H diff --git a/src/variants/shogi/types/knight.cpp b/src/variants/shogi/types/knight.cpp new file mode 100644 index 0000000..7a95472 --- /dev/null +++ b/src/variants/shogi/types/knight.cpp @@ -0,0 +1,38 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "knight.h" + +namespace Shogi { + +Knight::Knight() { + MoveDefinition movesDefinition[] = { + {-1, 2, 1 }, + { 1, 2, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Knight::name() const { return "knight"; } + +const std::vector * const Knight::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Knight::index() const { return 30; } + +Knight* Knight::self() { + static Knight s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/knight.h b/src/variants/shogi/types/knight.h new file mode 100644 index 0000000..6529e09 --- /dev/null +++ b/src/variants/shogi/types/knight.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__KNIGHT_H +#define SHOGI__TYPES__KNIGHT_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Knight : public Component, public DefaultType { +Q_OBJECT + Knight(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Knight* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__KNIGHT_H diff --git a/src/variants/shogi/types/lance.cpp b/src/variants/shogi/types/lance.cpp new file mode 100644 index 0000000..e894931 --- /dev/null +++ b/src/variants/shogi/types/lance.cpp @@ -0,0 +1,37 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "lance.h" + +namespace Shogi { + +Lance::Lance() { + MoveDefinition movesDefinition[] = { + { 0, 1, 0 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Lance::name() const { return "lance"; } + +const std::vector * const Lance::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Lance::index() const { return 10000; } + +Lance* Lance::self() { + static Lance s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/lance.h b/src/variants/shogi/types/lance.h new file mode 100644 index 0000000..a9b9390 --- /dev/null +++ b/src/variants/shogi/types/lance.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__LANCE_H +#define SHOGI__TYPES__LANCE_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Lance : public Component, public DefaultType { +Q_OBJECT + Lance(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Lance* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__LANCE_H diff --git a/src/variants/shogi/types/narigin.cpp b/src/variants/shogi/types/narigin.cpp new file mode 100644 index 0000000..4009c5b --- /dev/null +++ b/src/variants/shogi/types/narigin.cpp @@ -0,0 +1,42 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "narigin.h" + +namespace Shogi { + +Narigin::Narigin() { + MoveDefinition movesDefinition[] = { + {-1, 1, 1 }, + { 0, 1, 1 }, + { 1, 1, 1 }, + {-1, 0, 1 }, + { 1, 0, 1 }, + { 0, -1, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Narigin::name() const { return "narigin"; } + +const std::vector * const Narigin::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Narigin::index() const { return 10000; } + +Narigin* Narigin::self() { + static Narigin s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/narigin.h b/src/variants/shogi/types/narigin.h new file mode 100644 index 0000000..4cb650c --- /dev/null +++ b/src/variants/shogi/types/narigin.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__NARIGIN_H +#define SHOGI__TYPES__NARIGIN_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Narigin : public Component, public DefaultType { +Q_OBJECT + Narigin(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Narigin* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__NARIGIN_H diff --git a/src/variants/shogi/types/narikei.cpp b/src/variants/shogi/types/narikei.cpp new file mode 100644 index 0000000..0548178 --- /dev/null +++ b/src/variants/shogi/types/narikei.cpp @@ -0,0 +1,42 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "narikei.h" + +namespace Shogi { + +Narikei::Narikei() { + MoveDefinition movesDefinition[] = { + {-1, 1, 1 }, + { 0, 1, 1 }, + { 1, 1, 1 }, + {-1, 0, 1 }, + { 1, 0, 1 }, + { 0, -1, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Narikei::name() const { return "narikei"; } + +const std::vector * const Narikei::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Narikei::index() const { return 30; } + +Narikei* Narikei::self() { + static Narikei s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/narikei.h b/src/variants/shogi/types/narikei.h new file mode 100644 index 0000000..499b70e --- /dev/null +++ b/src/variants/shogi/types/narikei.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__NARIKEI_H +#define SHOGI__TYPES__NARIKEI_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Narikei : public Component, public DefaultType { +Q_OBJECT + Narikei(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Narikei* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__NARIKEI_H diff --git a/src/variants/shogi/types/narikyo.cpp b/src/variants/shogi/types/narikyo.cpp new file mode 100644 index 0000000..152b81f --- /dev/null +++ b/src/variants/shogi/types/narikyo.cpp @@ -0,0 +1,42 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "narikyo.h" + +namespace Shogi { + +Narikyo::Narikyo() { + MoveDefinition movesDefinition[] = { + {-1, 1, 1 }, + { 0, 1, 1 }, + { 1, 1, 1 }, + {-1, 0, 1 }, + { 1, 0, 1 }, + { 0, -1, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Narikyo::name() const { return "narikyo"; } + +const std::vector * const Narikyo::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Narikyo::index() const { return 10000; } + +Narikyo* Narikyo::self() { + static Narikyo s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/narikyo.h b/src/variants/shogi/types/narikyo.h new file mode 100644 index 0000000..5d676d6 --- /dev/null +++ b/src/variants/shogi/types/narikyo.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__NARIKYO_H +#define SHOGI__TYPES__NARIKYO_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Narikyo : public Component, public DefaultType { +Q_OBJECT + Narikyo(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Narikyo* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__NARIKYO_H diff --git a/src/variants/shogi/types/pawn.cpp b/src/variants/shogi/types/pawn.cpp new file mode 100644 index 0000000..42efe64 --- /dev/null +++ b/src/variants/shogi/types/pawn.cpp @@ -0,0 +1,37 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "pawn.h" + +namespace Shogi { + +Pawn::Pawn() { + MoveDefinition movesDefinition[] = { + { 0, 1, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Pawn::name() const { return "pawn"; } + +const std::vector * const Pawn::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Pawn::index() const { return 10; } + +Pawn* Pawn::self() { + static Pawn s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/pawn.h b/src/variants/shogi/types/pawn.h new file mode 100644 index 0000000..bf2ca39 --- /dev/null +++ b/src/variants/shogi/types/pawn.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__PAWN_H +#define SHOGI__TYPES__PAWN_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Pawn : public Component, public DefaultType { +Q_OBJECT + Pawn(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Pawn* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__PAWN_H diff --git a/src/variants/shogi/types/rook.cpp b/src/variants/shogi/types/rook.cpp new file mode 100644 index 0000000..e7391a9 --- /dev/null +++ b/src/variants/shogi/types/rook.cpp @@ -0,0 +1,40 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "rook.h" + +namespace Shogi { + +Rook::Rook() { + MoveDefinition movesDefinition[] = { + {-1, 0, 0 }, + { 1, 0, 0 }, + { 0, 1, 0 }, + { 0, -1, 0 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Rook::name() const { return "rook"; } + +const std::vector * const Rook::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Rook::index() const { return 50; } + +Rook* Rook::self() { + static Rook s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/rook.h b/src/variants/shogi/types/rook.h new file mode 100644 index 0000000..44fc07b --- /dev/null +++ b/src/variants/shogi/types/rook.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__ROOK_H +#define SHOGI__TYPES__ROOK_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Rook : public Component, public DefaultType { +Q_OBJECT + Rook(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Rook* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__ROOK_H diff --git a/src/variants/shogi/types/silver.cpp b/src/variants/shogi/types/silver.cpp new file mode 100644 index 0000000..b7bd073 --- /dev/null +++ b/src/variants/shogi/types/silver.cpp @@ -0,0 +1,41 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "silver.h" + +namespace Shogi { + +Silver::Silver() { + MoveDefinition movesDefinition[] = { + {-1, 1, 1 }, + { 0, 1, 1 }, + { 1, 1, 1 }, + {-1, -1, 1 }, + { 1, -1, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Silver::name() const { return "silver"; } + +const std::vector * const Silver::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Silver::index() const { return 10000; } + +Silver* Silver::self() { + static Silver s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/silver.h b/src/variants/shogi/types/silver.h new file mode 100644 index 0000000..d8a2dc7 --- /dev/null +++ b/src/variants/shogi/types/silver.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__SILVER_H +#define SHOGI__TYPES__SILVER_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Silver : public Component, public DefaultType { +Q_OBJECT + Silver(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Silver* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__SILVER_H diff --git a/src/variants/shogi/types/tokin.cpp b/src/variants/shogi/types/tokin.cpp new file mode 100644 index 0000000..c6fda7b --- /dev/null +++ b/src/variants/shogi/types/tokin.cpp @@ -0,0 +1,42 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "tokin.h" + +namespace Shogi { + +Tokin::Tokin() { + MoveDefinition movesDefinition[] = { + {-1, 1, 1 }, + { 0, 1, 1 }, + { 1, 1, 1 }, + {-1, 0, 1 }, + { 1, 0, 1 }, + { 0, -1, 1 }, + }; + + for (unsigned i = 0; i < sizeof(movesDefinition)/sizeof(movesDefinition[0]); i++) + m_moveDefinitions.push_back(movesDefinition[i]); +} + +QString Tokin::name() const { return "tokin"; } + +const std::vector * const Tokin::movesDefinitions() const { + return &m_moveDefinitions; +} + +int Tokin::index() const { return 10; } + +Tokin* Tokin::self() { + static Tokin s_instance; + return &s_instance; +} + +} diff --git a/src/variants/shogi/types/tokin.h b/src/variants/shogi/types/tokin.h new file mode 100644 index 0000000..48c7c12 --- /dev/null +++ b/src/variants/shogi/types/tokin.h @@ -0,0 +1,33 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__TYPES__TOKIN_H +#define SHOGI__TYPES__TOKIN_H + +#include +#include + +namespace Shogi { + +class TAGUA_EXPORT Tokin : public Component, public DefaultType { +Q_OBJECT + Tokin(); +public: + virtual QString name() const; + virtual const std::vector * const movesDefinitions() const; + virtual int index() const; + static Tokin* self(); +private: + std::vector m_moveDefinitions; +}; + +} + +#endif // SHOGI__TYPES__TOKIN_H diff --git a/src/variants/shogi/validator.cpp b/src/variants/shogi/validator.cpp new file mode 100644 index 0000000..42bcd1a --- /dev/null +++ b/src/variants/shogi/validator.cpp @@ -0,0 +1,159 @@ +#include "validator.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "colors.h" +#include "types.h" + +namespace Shogi { + +Validator::Validator() : m_delegator(this) { } + +bool Validator::pseudolegal(const IState* state, Move& move) const { + // add drop information to move, if missing + if (move.drop() == Piece() && + move.pool() && move.index() != -1) { + move.setDrop(state->pools()->pool(move.pool())->get(move.index())); + } + + Piece dropped = move.drop(); + if (dropped == Piece()) { + if (!state->board()->valid(move.src())) return false; + if (!state->board()->valid(move.dst())) return false; + + const Piece* piece = state->board()->get(move.src()); + if (piece == NULL || *piece == Piece()) return false; + + const IBehaviour* behaviour = state->behaviour(); + if (!behaviour) return false; + + const IColor* thisTurn = piece->color(); + if (state->turn() != thisTurn) return false; + + const Piece* target = state->board()->get(move.dst()); + if (target->color() == piece->color()) + return false; + if (!piece->type()->canMove(*piece, *target, move, state)) + return false; + +#if 0 + if (move.type() == "promotion") { + const IType* promotionType = move.promotion(); + if (promotionType != Queen::self() && + promotionType != Bishop::self() && + promotionType != Rook::self() && + promotionType != Knight::self()) return false; + } +#endif + } else { + // dropping on a valid square + if (!state->board()->valid(move.dst())) + return false; + + // cannot drop on occupied squares + if (state->board()->get(move.dst()) != NULL && + *state->board()->get(move.dst()) != Piece()) + return false; + + // cannot drop on a place where piece would be stuck + if (stuckPiece(state, dropped, move.dst())) + return false; + + // cannot drop a pawn in a column with already a pawn of same color + if (dropped.type() == Pawn::self()) { + for (int i = 0; i < state->board()->size().y; i++) { + const Piece* other = state->board()->get(Point(move.dst().x, i)); + if (other->type() == Pawn::self() && + other->color() == state->turn() && + !other->get("promoted").toBool()) + return false; + } + } + } + + return true; +} + +bool Validator::legal(const IState* state, Move& move) const { + // do not check a move more than once + if (!move.type().isEmpty()) return true; + + if (!m_delegator->pseudolegal(state, move)) + return false; + + const IBehaviour* behaviour = state->behaviour(); + if (!behaviour) return false; + + const IColor* turn = m_delegator->mover(state, move); + + IState* tmp(state->clone()); + tmp->move(move); + + Point kingPos = tmp->board()->find(Piece(turn, King::self())); + + if (kingPos == Point::invalid()) + return false; + + if (m_delegator->attacks(tmp, behaviour->opponent(turn), kingPos)) + return false; + + // set move type as normal, if not already set + if (move.type().isEmpty()) move.setType("normal"); + return true; +} + +// FIXME: move this logic into Piece classes ? +bool Validator::stuckPiece(const IState* state, + const Piece& piece, const Point& p) const { + const IBehaviour* behaviour = state->behaviour(); + + if (piece.type() == Pawn::self() || piece.type() == Lance::self()) { + return p.y == state->rank(0, behaviour->opponent(piece.color())); + } + else if (piece.type() == Knight::self()) { + int rank = state->rank(0, behaviour->opponent(piece.color())); + return p.y == rank || p.y == rank - behaviour->direction(piece.color()).y; + } + else { + return false; + } +} + +bool Validator::attacks(const IState* state, const IColor* player, + const Point& square, const Piece& target_) const { + const Piece* target; + if (target_ != Piece()) + target = &target_; + else + target = state->board()->get(square); + + for (int i = 0; i < state->board()->size().x; i++) { + for (int j = 0; j < state->board()->size().y; j++) { + Point p(i, j); + const Piece* piece = state->board()->get(p); + Move move(p, square); + if (piece != NULL && + *piece != Piece() && + piece->color() == player && + piece->type()->canMove(*piece, *target, move, state)) + return true; + } + } + return false; +} + +const IColor* Validator::mover(const IState* state, const Move& move) const { + return state->board()->get(move.src())->color(); +} + +void Validator::setDelegator(IValidator* delegator) { + m_delegator = delegator; +} + +} + diff --git a/src/variants/shogi/validator.h b/src/variants/shogi/validator.h new file mode 100644 index 0000000..6281cd8 --- /dev/null +++ b/src/variants/shogi/validator.h @@ -0,0 +1,43 @@ +/* + Copyright (c) 2007 Paolo Capriotti + (c) 2007 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef SHOGI__VALIDATOR_H +#define SHOGI__VALIDATOR_H + +#include +#include + +namespace Shogi { + +class Validator : public Component, public IValidator { +Q_OBJECT + IValidator* m_delegator; +protected: + virtual bool stuckPiece(const IState* state, + const Piece& piece, const Point& p) const; +public: + Validator(); + + virtual bool pseudolegal(const IState* state, Move& move) const; + + virtual bool legal(const IState* state, Move& move) const; + + virtual bool attacks(const IState* state, const IColor* player, + const Point& square, const Piece& target = Piece()) const; + + virtual const IColor* mover(const IState* state, const Move& move) const; + + virtual void setDelegator(IValidator* validator); +}; + +} + +#endif // SHOGI__VALIDATOR_H + diff --git a/src/weakset.h b/src/weakset.h new file mode 100644 index 0000000..70a6b0c --- /dev/null +++ b/src/weakset.h @@ -0,0 +1,163 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef WEAK_SET +#define WEAK_SET + +#include +#include + +#ifdef WEAK_SET_DEBUG + #include + using namespace std; +#endif // WEAK_SET_DEBUG + +/** + * @brief An implementation of a set of weak references. + * + * weak_set is a set of weak_pointers which are automatically collected + * and removed when the pointed object is destroyed. + */ +template +class weak_set { + typedef std::list > inner_set; + typedef typename inner_set::iterator inner_iterator; + friend class iterator; + mutable inner_set m_set; +public: + class iterator { + friend class weak_set; + mutable inner_iterator m_it; + boost::shared_ptr obj; // this prevents the stored object from being collected + weak_set& m_parent; + + iterator(const inner_iterator& it, weak_set& parent) + : m_it(it) + , m_parent(parent) { + skip_garbage(); + } + + void skip_garbage() { + #ifdef WEAK_SET_DEBUG + kDebug() << "skipping garbage" << endl; + uint c = 0; + #endif // WEAK_SET_DEBUG + while (true) { + if (m_it == m_parent.m_set.end()) break; + boost::weak_ptr wp = *m_it; + if (obj = wp.lock()) break; + +// while (m_it != m_parent.m_set.end() && !(obj = (*m_it).lock())) { + #ifdef WEAK_SET_DEBUG + kDebug() << "iteration " << c++ << endl; + #endif // WEAK_SET_DEBUG + + // the current reference is dangling: + // remove it from the list and get the next one + #ifdef WEAK_SET_DEBUG + kDebug() << "dangling reference! removing it" << endl; + #endif // WEAK_SET_DEBUG + m_it = m_parent.m_set.erase(m_it); + } + // at this point either + // m_it < m_parent.m_set.end() _and_ obj is a valid shared_ptr + // or + // m_it == m_parent.m_set.end() + #ifdef WEAK_SET_DEBUG + if (obj) + kDebug() << "no iteration done: uses = " << obj.use_count() << ", obj = " << *obj << endl; + else + kDebug() << "we're at the end" << endl; + #endif // WEAK_SET_DEBUG + } + public: + /** + * Check two iterators for equality. + */ + bool operator==(const iterator& other) { return m_it == other.m_it; } + + /** + * Equivalent to !operator==. + */ + bool operator!=(const iterator& other) { return !operator==(other); } + + /** + * Pre-increment operator. Modifity the iterator so + * that it points to the next valid object. + * @return The incremented iterator. + */ + iterator& operator++() { + #ifdef WEAK_SET_DEBUG + kDebug() << "incrementing" << endl; + #endif // WEAK_SET_DEBUG + ++m_it; + obj.reset(); + skip_garbage(); + #ifdef WEAK_SET_DEBUG + kDebug() << "done incrementing" << endl; + #endif // WEAK_SET_DEBUG + return *this; + } + + /** + * Post-increment operator. Modifity the iterator so + * that it points to the next valid object. + * @return The iterator before being incremented. + */ +// iterator operator++(int) { return iterator(m_it++, m_parent); } + + /** + * @return a pointer to the stored object. + * @note This function is guaranteed to return a valid + * non-null pointer if the iterator is valid + * and less than the past-the-end iterator. + */ + T* get() { return obj.get(); } + + /** + * @return a pointer to the stored object. + * @sa get + */ + T* operator->() { return get(); } + + /** + * @return a reference to the stored object. + * @sa get + */ + T& operator*() { return *get(); } + }; + + /** + * Add an object to the container. + * @return an iterator referring to the newly inserted object. + * @note No iterator is invalidated by an insert operation. + */ + iterator insert(const boost::shared_ptr& x) { + return iterator(m_set.insert(m_set.end(), x), *this); + } + + /** + * @return an iterator pointing to the first element of + * the container, which can be used for iterating. + */ + iterator begin() { + return iterator(m_set.begin(), *this); + } + + /** + * @return a past-the-end iterator. + */ + iterator end() { + return iterator(m_set.end(), *this); + } +}; + +#endif // WEAK_SET + diff --git a/src/xboardengine.cpp b/src/xboardengine.cpp new file mode 100644 index 0000000..c671e4d --- /dev/null +++ b/src/xboardengine.cpp @@ -0,0 +1,212 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "xboardengine.h" + +#include +#include +#include + +#include + +#include "components.h" +#include "enginenotifier.h" +#include "foreach.h" + +using namespace boost; + +QRegExp XBoardEngine::m_move_pattern("My move is: (.*)"); + +XBoardEngine::XBoardEngine(Components* components, + const QString& path, + const QStringList& arguments) +: Engine(path, arguments) +, m_analysing(false) +, m_components(components) +, m_serializer(0) { + // set default features + m_features.ping = false; + m_features.setboard = false; + m_features.playother = false; + m_features.san = false; + m_features.usermove = false; + m_features.time = true; + m_features.draw = true; + m_features.sigint = true; + m_features.sigterm = true; + m_features.reuse = true; + m_features.analyze = true; + m_features.colors = true; + m_features.ics = false; + m_features.name = false; + m_features.pause = false; + + m_features.myname = QFileInfo(m_path).baseName(); + + connect(this, SIGNAL(receivedCommand(const QString&)), + this, SLOT(processCommand(const QString&))); +} + +XBoardEngine::~XBoardEngine() { + kDebug() << "[debug] destroying engine"; + stop(); + m_engine.kill(); +} + +void XBoardEngine::initializeEngine() { + // set up in xboard mode + sendCommand("xboard"); + + // we're using xboard protocol version 2 + sendCommand("protover 2"); + + // don't flood me! + sendCommand("nopost"); +} + +void XBoardEngine::reset() { + sendCommand("new"); // start a new game + sendCommand("force"); // do not think +} + +void XBoardEngine::play() { + sendCommand("go"); // start playing +} + +void XBoardEngine::stop() { + sendCommand("quit"); + if (m_features.sigterm) + m_engine.kill(); +} + +void XBoardEngine::processCommand(const QString& command) { + QStringList arg_list = command.split(QRegExp("\\s+")); + QString cmd = arg_list.takeFirst(); + + if (cmd == "feature") { + QRegExp feature("(\\S+)=(\\S+)"); + foreach (QString arg, arg_list) { + if (feature.indexIn(arg) == 0) { + bool rejected = false; + + QString key = feature.cap(1); + QString value = feature.cap(2); + + if (key == "ping") + m_features.ping = value == "1"; + else if (key == "setboard") + m_features.setboard = value == "1"; + else if (key == "playother") + m_features.playother = value == "1"; + else if (key == "san") + m_features.san = value == "1"; + else if (key == "usermove") + m_features.usermove = value == "1"; + else if (key == "time") + m_features.time = value == "1"; + else if (key == "draw") + m_features.draw = value == "1"; + else if (key == "sigint") + m_features.sigint = value == "1"; + else if (key == "sigterm") + m_features.sigterm = value == "1"; + else if (key == "reuse") + m_features.reuse = value == "1"; + else if (key == "analyze") + m_features.analyze = value == "1"; + else if (key == "myname") + m_features.myname = value.mid(1, value.length() - 2); + else if (key == "variants") + m_features.variants = value.mid(1, value.length() - 2); + else if (key == "colors") + m_features.colors = value == "1"; + else if (key == "ics") + m_features.ics = value == "1"; + else if (key == "name") + m_features.name = value == "1"; + else if (key == "pause") + m_features.pause = value == "1"; + else if (key == "done") + m_features.done = value == "1"; + else + rejected = true; + + if (rejected) + sendCommand("rejected " + key); + else + sendCommand("accepted " + key); + } + } + } + else if (cmd == "move") { + if (shared_ptr notifier = m_notifier.lock()) + notifier->notifyEngineMove(arg_list[0]); + } + else if (m_move_pattern.indexIn(command) == 0) { + if (shared_ptr notifier = m_notifier.lock()) + notifier->notifyEngineMove(m_move_pattern.cap(1)); + } + + m_serializer = m_components->moveSerializer(m_features.san ? "san" : "simple"); +} + +void XBoardEngine::sendMove(const Move& move, const StatePtr& ref) { + if (m_serializer) { + QString move_str = m_serializer->serialize(move, ref.get()); + if (m_features.usermove) + move_str = "usermove " + move_str; + sendCommand(move_str); + } +} + +void XBoardEngine::backUp(const StatePtr&) { + sendCommand("undo"); +} + +void XBoardEngine::startAnalysis() { + sendCommand("post"); + sendCommand("analyze"); + m_analysing = true; +} + +void XBoardEngine::stopAnalysis() { + sendCommand("exit"); + m_analysing = false; +} + +void XBoardEngine::setBoard(const StatePtr&) { + #if 0 + if (m_features.setboard) { + sendCommand(QString("setboard %1").arg(pos->fen(halfmove, fullmove))); + } + else { + // this is pretty meaningless for generic variants + if (pos->turn() != 0) { + sendCommand("new"); + sendCommand("a2a3"); + } + + sendCommand("edit"); + sendCommand("#"); + Point size = pos->size(); + for (int i = 0; i < size.x; i++) { + for (int j = 0; j < size.y; j++) { + Point p(i, j); + AbstractPiece::Ptr piece = pos->get(p); + if (piece) sendCommand(QString("%1%2") + .arg(piece->type()) + .arg(p.toString(8))); + } + } + sendCommand("."); + } + #endif +} + diff --git a/src/xboardengine.h b/src/xboardengine.h new file mode 100644 index 0000000..7c45b17 --- /dev/null +++ b/src/xboardengine.h @@ -0,0 +1,122 @@ +/* + Copyright (c) 2006 Paolo Capriotti + (c) 2006 Maurizio Monge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef XBOARDENGINE_H +#define XBOARDENGINE_H + +#include "engine.h" + +class Components; +class QRegExp; +class IMoveSerializer; + +/** + * @brief A chess engine compatible with xboard. + * + * XBoard compatible engines are defined by Tim Mann's + * Chess Engine Communication Protocol (available at + * http://tim-mann.org/xboard/engine-intf.html), used + * by GNU Chess, Crafty and many other free and commercial + * chess engines. + * This class encapsulates such communication protocol, + * calling appropriate methods of the notifier upon engine + * generated events. + * + * @note This code is partially stolen from Maurizio Monge's + * old interface project outoftime. + */ +class XBoardEngine : public Engine { +Q_OBJECT + struct Features { + bool ping : 1; + bool setboard : 1; + bool playother : 1; + bool san : 1; + bool usermove : 1; + bool time : 1; + bool draw : 1; + bool sigint : 1; + bool sigterm : 1; + bool reuse : 1; + bool analyze : 1; + QString myname; + QString variants; + bool colors : 1; + bool ics : 1; + bool name : 1; + bool pause : 1; + bool done : 1; + }; + + Features m_features; + bool m_analysing; + Components* m_components; + IMoveSerializer* m_serializer; + + static QRegExp m_move_pattern; +protected: + /** + * Initialize the engine. + */ + virtual void initializeEngine(); +protected Q_SLOTS: + /** + * Parse engine command line and the appropriate + * signals. + */ + void processCommand(const QString& command); +public: + /** + * Create an xboard compatible engine. + */ + XBoardEngine(Components* components, + const QString& path, + const QStringList& arguments); + + /** + * Terminate the engine. + */ + virtual ~XBoardEngine(); + + /** + * Send a move to the engine. + */ + virtual void sendMove(const Move& move, const StatePtr& ref); + + /** + * Back up a move. + * @param pos The position before the move. Used if the engine + * does not support the undo command. + */ + virtual void backUp(const StatePtr& pos); + + virtual void setBoard(const StatePtr& pos); + + + /** + * Begin a new game. + */ + virtual void reset(); + + /** + * Start playing. + */ + virtual void play(); + + /** + * Stop the engine. + */ + virtual void stop(); + + virtual void startAnalysis(); + virtual void stopAnalysis(); +}; + +#endif // XBOARDENGINE_H diff --git a/strip_font.rb b/strip_font.rb new file mode 100755 index 0000000..7c0a311 --- /dev/null +++ b/strip_font.rb @@ -0,0 +1,45 @@ +#!/usr/bin/ruby + +require 'optparse' +require 'set' + +input_file = nil +output_file = nil +font_name = nil + +$options = OptionParser.new do |opt| + opt.banner = "Usage: strip_font.rb [options] luafiles" + + opt.on( '-n', '--name FONT_NAME', 'Output font name' ) do |name| font_name = name end + opt.on( '-i', '--input INPUT_FONT', 'Input font') do |file| input_file = file end + opt.on( '-o', '--output OUTPUT_FONT', 'Font to generate') do |file| output_file = file end +end + +$options.parse!(ARGV) + +lua_files = ARGV + +selection = Set.new + +ARGV.each do |file| + File.open(file) do |f| + content = f.read + content.scan(/(["'])0x([0-9a-fA-F]{4})\1/).each do |match| + print(match.inspect+"\n") + selection.add "SelectMore(0u"+match[1]+");" + end + end +end + +a = %{ + Open("#{input_file}"); +#{selection.to_a.join("\n")} + SelectInvert(); + DetachAndRemoveGlyphs(); + SetFontNames("#{font_name}", "#{font_name}", "#{font_name}"); + SetUniqueID(0); + Generate("#{output_file}"); +} + +system("echo -en #{a.inspect} | fontforge -c") + diff --git a/tagua.pot b/tagua.pot new file mode 100644 index 0000000..10887cd --- /dev/null +++ b/tagua.pot @@ -0,0 +1,747 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: http://trac.tagua-project.org\n" +"POT-Creation-Date: 2007-11-23 23:17+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: main.cpp:35 +msgid "Tagua" +msgstr "" + +#: main.cpp:37 +msgid "(C) 2006 Paolo Capriotti, Maurizio Monge" +msgstr "" + +#: main.cpp:38 +msgid "Paolo Capriotti" +msgstr "" + +#: main.cpp:39 +msgid "Maurizio Monge" +msgstr "" + +#: main.cpp:40 +msgid "Jani Huhtanen" +msgstr "" + +#: main.cpp:40 +msgid "Gaussian blur code" +msgstr "" + +#: main.cpp:41 +msgid "Rici Lake" +msgstr "" + +#: main.cpp:41 +msgid "funclib lua library" +msgstr "" + +#: main.cpp:42 +msgid "Riccardo Iaconelli" +msgstr "" + +#: main.cpp:42 +msgid "Various fixes and cleanups" +msgstr "" + +#: main.cpp:43 +msgid "Yann Dirson" +msgstr "" + +#: main.cpp:43 +msgid "Shogi related patches" +msgstr "" + +#: main.cpp:44 +msgid "Pieter Stouten" +msgstr "" + +#: main.cpp:44 +msgid "Allowed free use of images on shogi.net" +msgstr "" + +#: main.cpp:47 +msgid "Initial variant" +msgstr "" + +#: mainwindow.cpp:78 +msgid "Move list" +msgstr "" + +#: mainwindow.cpp:88 +msgid "FICS Connection" +msgstr "" + +#: mainwindow.cpp:91 +msgid "Console" +msgstr "" + +#: mainwindow.cpp:128 +msgid "E&ngines" +msgstr "" + +#: mainwindow.cpp:142 +msgid "Play as &white" +msgstr "" + +#: mainwindow.cpp:148 +msgid "Play as &black" +msgstr "" + +#: mainwindow.cpp:155 +msgid "&Analyze" +msgstr "" + +#: mainwindow.cpp:174 +msgid "&Back" +msgstr "" + +#: mainwindow.cpp:175 +msgid "&Forward" +msgstr "" + +#: mainwindow.cpp:176 +msgid "Be&gin" +msgstr "" + +#: mainwindow.cpp:177 +msgid "&End" +msgstr "" + +#: mainwindow.cpp:178 +msgid "&Connect" +msgstr "" + +#: mainwindow.cpp:179 +msgid "&Disconnect" +msgstr "" + +#: mainwindow.cpp:186 +msgid "&Edit position" +msgstr "" + +#: mainwindow.cpp:187 +msgid "&Clear board" +msgstr "" + +#: mainwindow.cpp:188 +msgid "&Set starting position" +msgstr "" + +#: mainwindow.cpp:192 +msgid "&Flip view" +msgstr "" + +#: mainwindow.cpp:194 +msgid "Toggle &console" +msgstr "" + +#: mainwindow.cpp:195 +msgid "Toggle &move list" +msgstr "" + +#: mainwindow.cpp:426 +msgid "You have specified a folder" +msgstr "" + +#: mainwindow.cpp:426 mainwindow.cpp:431 mainwindow.cpp:438 mainwindow.cpp:635 +msgid "Error" +msgstr "" + +#: mainwindow.cpp:431 +msgid "The specified file does not exist" +msgstr "" + +#: mainwindow.cpp:438 +msgid "You do not have read permission to this file." +msgstr "" + +#: mainwindow.cpp:453 +msgid "Open PGN file" +msgstr "" + +#: mainwindow.cpp:475 +msgid "Save PGN file" +msgstr "" + +#: mainwindow.cpp:635 +msgid "Error creating game" +msgstr "" + +#: mainwindow.cpp:675 +msgid "Illegal move" +msgstr "" + +#: pref_engines.cpp:39 +msgid "&Name:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 136 +#: pref_engines.cpp:47 extractedrc.cpp:131 +msgid "&Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 147 +#: pref_engines.cpp:52 extractedrc.cpp:134 +msgid "XBoard" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 152 +#: pref_engines.cpp:53 extractedrc.cpp:137 +msgid "UCI" +msgstr "" + +#: pref_engines.cpp:54 +msgid "Tagua (textual)" +msgstr "" + +#: pref_engines.cpp:55 +msgid "Tagua (DBUS)" +msgstr "" + +#: pref_engines.cpp:56 +msgid "GNU Shogi" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 113 +#: pref_engines.cpp:61 extractedrc.cpp:128 +msgid "&Path:" +msgstr "" + +#: pref_engines.cpp:70 +msgid "&Work directory:" +msgstr "" + +#: pref_engines.cpp:93 +msgid "Choose a name for the engine" +msgstr "" + +#: pref_engines.cpp:93 +msgid "No engine name" +msgstr "" + +#: qconnect.cpp:56 +msgid "Select timeseal binary" +msgstr "" + +#: qconnect.cpp:59 +msgid "Only local executables supported" +msgstr "" + +#: tabwidget.cpp:24 +msgid "Close the current tab" +msgstr "" + +#. i18n: tag Text +#. i18n: file ./taguaui.rc line 15 +#: extractedrc.cpp:3 +msgid "&Edit" +msgstr "" + +#. i18n: tag text +#. i18n: file ./taguaui.rc line 24 +#: extractedrc.cpp:6 +msgid "&Game" +msgstr "" + +#. i18n: tag text +#. i18n: file ./taguaui.rc line 33 +#: extractedrc.cpp:9 +msgid "&View" +msgstr "" + +#. i18n: tag text +#. i18n: file ./taguaui.rc line 47 +#: extractedrc.cpp:12 +msgid "Game Toolbar" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 13 +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 13 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 13 +#: extractedrc.cpp:15 extractedrc.cpp:63 extractedrc.cpp:185 +msgid "Form" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 25 +#: extractedrc.cpp:18 +msgid "Round:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 35 +#: extractedrc.cpp:21 +msgid "Time:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 54 +#: extractedrc.cpp:24 +msgid "Result:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 61 +#: extractedrc.cpp:27 +msgid "Increment:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 71 +#: extractedrc.cpp:30 +msgid "Site:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 78 +#: extractedrc.cpp:33 +msgid "Black rating:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 85 +#: extractedrc.cpp:36 +msgid "Event:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 92 +#: extractedrc.cpp:39 +msgid "Black:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 99 +#: extractedrc.cpp:42 +msgid "White:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 121 +#: extractedrc.cpp:45 +msgid "Date:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 131 +#: extractedrc.cpp:48 +msgid "White rating:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 138 +#: extractedrc.cpp:51 +msgid "ECO:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/newgamedialog.ui line 13 +#: extractedrc.cpp:54 +msgid "New game" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/newgamedialog.ui line 39 +#. i18n: tag string +#. i18n: file ./ui/pref_theme.ui line 48 +#: extractedrc.cpp:57 extractedrc.cpp:238 +msgid "&Variant:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/newgamedialog.ui line 74 +#: extractedrc.cpp:60 +msgid "Create in new &tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 36 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 36 +#: extractedrc.cpp:66 extractedrc.cpp:188 +msgid "&Animations" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 51 +#: extractedrc.cpp:69 +msgid "&Transformations" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 58 +#: extractedrc.cpp:72 +msgid "&Explosions" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 65 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 158 +#: extractedrc.cpp:75 extractedrc.cpp:208 +msgid "&Movements" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 72 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 165 +#: extractedrc.cpp:78 extractedrc.cpp:211 +msgid "&Fading" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 88 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 60 +#: extractedrc.cpp:81 extractedrc.cpp:191 +msgid "" +"Rough\n" +"(little CPU usage)" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 115 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 87 +#: extractedrc.cpp:85 extractedrc.cpp:195 +msgid "" +"Smooth\n" +"(high CPU usage)" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 130 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 179 +#: extractedrc.cpp:89 extractedrc.cpp:217 +msgid "Animation s&moothness:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 151 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 123 +#: extractedrc.cpp:92 extractedrc.cpp:202 +msgid "Slow" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 177 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 146 +#: extractedrc.cpp:95 extractedrc.cpp:205 +msgid "Fast" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 189 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 102 +#: extractedrc.cpp:98 extractedrc.cpp:199 +msgid "Animation s&peed:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 231 +#: extractedrc.cpp:101 +msgid "&Max sequence length:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 253 +#: extractedrc.cpp:104 +msgid "Animate move &sequences" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 277 +#: extractedrc.cpp:107 +msgid "&Border" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 292 +#: extractedrc.cpp:110 +msgid "&Color" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 302 +#: extractedrc.cpp:113 +msgid "&Text Color" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 320 +#: extractedrc.cpp:116 +msgid "Custom &font:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 13 +#: extractedrc.cpp:119 +msgid "Engines" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 25 +#: extractedrc.cpp:122 +msgid "Engine list" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 93 +#: extractedrc.cpp:125 +msgid "Engine properties" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 157 +#: extractedrc.cpp:140 +msgid "Tagua (text)" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 162 +#: extractedrc.cpp:143 +msgid "Tagua (D-BUS)" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 180 +#: extractedrc.cpp:146 +msgid "&Work dir:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/preferences.ui line 13 +#: extractedrc.cpp:149 +msgid "Change Tagua Settings" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 13 +#: extractedrc.cpp:152 +msgid "Dialog" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 47 +#: extractedrc.cpp:155 +msgid "Pattern" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 75 +#: extractedrc.cpp:158 +msgid "Bold" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 82 +#: extractedrc.cpp:161 +msgid "Italic" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 148 +#: extractedrc.cpp:164 +msgid "Use this box to test your regular expression" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 186 +#: extractedrc.cpp:167 +msgid "Add" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 193 +#: extractedrc.cpp:170 +msgid "Remove" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 223 +#: extractedrc.cpp:173 +msgid "Up" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 230 +#: extractedrc.cpp:176 +msgid "Down" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 266 +#: extractedrc.cpp:179 +msgid "OK" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 273 +#: extractedrc.cpp:182 +msgid "Cancel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 172 +#: extractedrc.cpp:214 +msgid "&Smooth highlighting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 203 +#: extractedrc.cpp:220 +msgid "&Colors and fonts" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 215 +#: extractedrc.cpp:223 +msgid "C&omments color:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 233 +#: extractedrc.cpp:226 +msgid "Cus&tom comments font:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 243 +#: extractedrc.cpp:229 +msgid "C&ustom moves font:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 253 +#: extractedrc.cpp:232 +msgid "S&elected move color:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_theme_page.ui line 31 +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 149 +#: extractedrc.cpp:235 extractedrc.cpp:271 +msgid "..." +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 13 +#: extractedrc.cpp:241 +msgid "Quick Connect" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 28 +#: extractedrc.cpp:244 +msgid "&Login" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 47 +#: extractedrc.cpp:247 +msgid "&Password:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 60 +#: extractedrc.cpp:250 +msgid "&Username:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 70 +#: extractedrc.cpp:253 +msgid "&Store password on this computer" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 73 +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 182 +#: extractedrc.cpp:256 extractedrc.cpp:280 +msgid "Alt+S" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 83 +#: extractedrc.cpp:259 +msgid "Ser&ver:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 98 +#: extractedrc.cpp:262 +msgid "ICS p&ort:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 115 +#: extractedrc.cpp:265 +msgid "ICS &host:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 131 +#: extractedrc.cpp:268 +msgid "&Timeseal" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 159 +#: extractedrc.cpp:274 +msgid "&File Path:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 179 +#: extractedrc.cpp:277 +msgid "Use &custom command line arguments" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 232 +#: extractedrc.cpp:283 +msgid "&OK" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 248 +#: extractedrc.cpp:286 +msgid "&Cancel" +msgstr "" + +#: extractedrc.cpp:287 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#: extractedrc.cpp:288 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" diff --git a/templates/cpp b/templates/cpp new file mode 100644 index 0000000..e69de29 diff --git a/templates/h b/templates/h new file mode 100644 index 0000000..e69de29 diff --git a/templates/variant_template.cpp.erb b/templates/variant_template.cpp.erb new file mode 100644 index 0000000..fbc9157 --- /dev/null +++ b/templates/variant_template.cpp.erb @@ -0,0 +1,57 @@ +<% cvariant = variant.capitalize %> + +#include "<%= variant %>.h" +#include "xchess/animator.h" +#include "xchess/piece.h" +#include "xchess/move.h" + +class <%= cvariant %>Position : public ChessPosition { +public: + typedef ChessPosition::Piece Piece; + <%= cvariant %>Position(); + <%= cvariant %>Position(const ChessPosition&); + <%= cvariant %>Position(Piece::Color turn, bool wk, bool wq, + bool bk, bool bq, const Point& ep); + virtual <%= cvariant %>Position* clone() const { return new <%= cvariant %>Position(*this); } +}; + +<%= cvariant %>Position::<%= cvariant %>Position() { } + +<%= cvariant %>Position::<%= cvariant %>Position(const ChessPosition& other) +: ChessPosition(other) { } + +<%= cvariant %>Position::<%= cvariant %>Position(Piece::Color turn, bool wk, bool wq, + bool bk, bool bq, const Point& ep) +: ChessPosition(turn, wk, wq, bk, bq, ep) { } + + + +class <%= cvariant %>VariantInfo { +public: + typedef <%= cvariant %>Position Position; + typedef Position::Move Move; + typedef Position::Piece Piece; + typedef ChessAnimator Animator; + static void loadPieces(PixmapLoader::Info&); + static void forallPieces(PieceFunction& f); + static int moveListLayout() { return 0; } +}; + +void <%= cvariant %>VariantInfo::loadPieces(PixmapLoader::Info& info) { + ChessVariant::loadPieces(info); +} + +void <%= cvariant %>VariantInfo::forallPieces(PieceFunction& f) { + ChessVariant::forallPieces(f); +} + + + +VariantInfo* <%= cvariant %>Variant::static_<%= variant %>_variant = 0; + +VariantInfo* <%= cvariant %>Variant::info() { + if (!static_<%= variant %>_variant) + static_<%= variant %>_variant = new WrappedVariantInfo<<%= cvariant %>VariantInfo>; + return static_<%= variant %>_variant; +} + diff --git a/templates/variant_template.h.erb b/templates/variant_template.h.erb new file mode 100644 index 0000000..fdda3ef --- /dev/null +++ b/templates/variant_template.h.erb @@ -0,0 +1,16 @@ +<% vtag = "#{variant.upcase}VARIANT_H" %> +<% cvariant = variant.capitalize %> + +#ifndef <%= vtag %> +#define <%= vtag %> + +#include "chess.h" + +class <%= cvariant %>Variant { +private: + static VariantInfo* static_<%= variant %>_variant; +public: + static VariantInfo* info(); +}; + +#endif // <%= vtag %> diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..062cbbe --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,7 @@ +DartTestfile.txt +DartTestfile.txt +Makefile +Makefile +cmake_install.cmake +cmake_install.cmake +*.pgn diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..6f57807 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,10 @@ +# some tests require cppunit +find_package(CPPUNIT) +if(CPPUNIT_FOUND) + add_subdirectory(settings) + add_subdirectory(weak_set) + add_subdirectory(variants) +else(CPPUNIT_FOUND) + message("CppUnit not found. Tests requiring it will not be compiled.") +endif(CPPUNIT_FOUND) + diff --git a/tests/add_test.rb b/tests/add_test.rb new file mode 100755 index 0000000..74cc9c9 --- /dev/null +++ b/tests/add_test.rb @@ -0,0 +1,27 @@ +#!/usr/bin/ruby +require 'erb' + +def usage + warn "Usage: #$0 [(-f | --filename) FILENAME] TEST_NAME [TEST] [TEST] ..." + exit 1 +end + +arg = ARGV.shift or usage +if arg =~ /^-/ + case arg + when '-f', '--filename' + @filename = ARGV.shift or usage + else + usage + end +else + @name = arg + @filename = @name.downcase +end +@tests = ARGV + +%w(cpp h).each do |ext| + File.open("#{@name.downcase}.#{ext}",'w') do |file| + file.write(ERB.new(File.open("template.#{ext}.erb").read).result(binding)) + end +end diff --git a/tests/cppunit_main.cpp b/tests/cppunit_main.cpp new file mode 100644 index 0000000..bb7248f --- /dev/null +++ b/tests/cppunit_main.cpp @@ -0,0 +1,12 @@ +#include +#include + +int main(int, char**) +{ + CppUnit::TextUi::TestRunner runner; + CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry(); + runner.addTest(registry.makeTest()); + int res = runner.run( "", false ) ? 0 : 1; + + return res; +} diff --git a/tests/kovacevic_keene_1973.pgn b/tests/kovacevic_keene_1973.pgn new file mode 100644 index 0000000..c5aa5aa --- /dev/null +++ b/tests/kovacevic_keene_1973.pgn @@ -0,0 +1,14 @@ +[Event "It"] +[Site "Amsterdam (Netherlands)"] +[Date "1973.??.??"] +[EventDate "?"] +[Round "?"] +[Result "1-0"] +[White "Keene Raymond D"] +[Black "Kovacevic Vladimir"] +[ECO "A06"] +[WhiteElo "?"] +[BlackElo "?"] +[PlyCount "50"] + +1. Nf3 { Notes by Raymond Keene. } d5 2. b3 Bg4 3. Bb2 Nd7 4. g3 Bxf3 {A bold decision indicating that Black is playing for a win. This was the last round and if Kovacevic could beat me he would have tied with me.} 5. exf3 Ngf6 6. f4 e6 7. Bg2 {?! Dubious. 7 Bh3! intending the disruptive advance f4-f5 is less stereotyped.} 7...Be7 8. O-O O-O 9. d3 a5 10. a4 c6 11. Nd2 b5 12. Qe2 bxa4 {? Now White obtains the upper hand. It was essential for Black to maintain the tension with moves such as ...Rb8 and ...Re8 when his position would even be slightly preferable.} 13. Rxa4 Nb6 14. Ra2 {!} a4 15. Rfa1 axb3 16. Rxa8 Nxa8 17. Nxb3 Nb6 {Not good: White now has the opportunity to launch a variety of favourable combinations, but it's clear that Black's position is already far from satisfactory (White is better developed and his well co-ordinated pieces control the vital a-file and a1-h8 diagonal).} 18. f5 {! Inaugurating the combination. Black must accept the sacrifice, otherwise (after 19 fxe6) he would shed his e-pawn to the combined onslaught of White's pieces.} 18...exf5 19. Nd4 Qd7 20. Bh3 {! Also good was 20 Nxc6 Qxc6 21 Qxe7 but the text is more accurate. Black cannot allow the white knight to reach f5 since the threats against g7 would be intolerable.} 20...g6 {Or 20...Ng4 21 Nxf5!} 21. Bxf5 {!! Once again 21 Nxc6 Qxc6 22 Qxe7 was very good, but White has something more ambitious in mind.} 21...gxf5 22. Ra7 {!! This move visibly came as a shock to my opponent. Black has no choice but to fall in with White's plans.} 22...Qxa7 23. Nxc6 Qd7 {There are two major alternative defences: a) 23...Qa2 24 Nxe7+ Kg7 25 Nxf5+ Kg8 (or 25...Kg6 26 Ne7+ Kg7 27 Qg4+) 26 Qg4+ Nxg4 27 Ne7 mate. b) 23...Ba3! (Best) 24 Nxa7 (24 Bxf6 Qa4! is highly unclear) 24...Bxb2 when White has queen for rook and two pieces, but Black's forces are rather awkwardly placed and this enables White to increase his advantage as follows: 25 c4! Bd4 26 Nb5 Re8! 27 Qf3 Bc5 28 d4 Bf8 29 c5 Nc4 30 Qxf5, and in view of the powerful c-pawn, Black's weakened kingside and the scattered dispositions of the black army, White should win. However, this was Black's only chance of resistance. But, as so often, a combinational blow disturbs the balance of the victim's objectivity and he fails to discover the most tenacious defensive possibilities.} 24. Nxe7+ Kg7 25. Qh5 {! Completely unanswerable. For example: 25...Qxe7 26 Qg5+ Kh8 27 Bxf6+ picking up the other knight in addition; or 25...h6 26 Nxf5+ or 25...Ra8 26 Qg5+ Kf8 27 Bxf6 with Qg8 mate to follow.} 1-0 diff --git a/tests/luaimage/CMakeLists.txt b/tests/luaimage/CMakeLists.txt new file mode 100644 index 0000000..44ccce6 --- /dev/null +++ b/tests/luaimage/CMakeLists.txt @@ -0,0 +1,55 @@ + +SET(this_test luaimage) + + +FILE(GLOB_RECURSE ${this_test}_SRC_CXX *.cpp) +FILE(GLOB_RECURSE ${this_test}_SRC_C *.c) +SET(${this_test}_SRC ${${this_test}_SRC_CXX} ${${this_test}_SRC_C}) + +FILE(GLOB_RECURSE ${this_test}_UIS *.ui) + + +# i have to do this because QT4_WRAP_UI is stupid +SET(old_bin_dir ${CMAKE_CURRENT_BINARY_DIR}) +SET(CMAKE_CURRENT_BINARY_DIR ${old_bin_dir}/ui) +QT4_WRAP_UI(${this_test}_UIS_H ${${this_test}_UIS}) +SET(CMAKE_CURRENT_BINARY_DIR ${old_bin_dir}) + + +# QT4_AUTOMOC is not very intelligent either +QT4_AUTOMOC( + ${${this_test}_SRC}) + +ADD_EXECUTABLE( + ${this_test} ${${this_test}_SRC}) + + +INCLUDE_DIRECTORIES( + . + ${QT_INCLUDE_DIR} + #${QT_QTNETWORK_INCLUDE_DIR} + ${QT_QTSVG_INCLUDE_DIR} + ${QT_QTXML_INCLUDE_DIR} + ${LUA_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${KDE4_INCLUDE_DIR} +) + +ADD_DEFINITIONS( + ${LUA_CFLAGS} +) + +LINK_DIRECTORIES( + ${LUA_LIBRARY_DIRS} + ${Boost_LIBRARY_DIRS} +) + +TARGET_LINK_LIBRARIES(${this_test} + ${QT_LIBRARIES} + #${QT_QTNETWORK_LIBRARIES} + ${QT_QTSVG_LIBRARIES} + ${LUA_LINK_FLAGS} + ${KDE4_KDEUI_LIBS} + ${KDE4_KIO_LIBS} +) + diff --git a/tests/luaimage/maintest.lua b/tests/luaimage/maintest.lua new file mode 100644 index 0000000..88d5b04 --- /dev/null +++ b/tests/luaimage/maintest.lua @@ -0,0 +1,28 @@ + +import("test.lua") + +-- +-- a = LinearGradient(Point(4,5), Point(7,13)) +-- +-- print("a.start = " .. tostring(a.start)) +-- print("a.finish = " .. tostring(a.finish)) +-- +-- a[0.2] = "black" +-- a[0.9] = "white" +-- +-- a = Point(5,6) +-- a = -a +-- +-- print(a) +-- print(Rect(1,2,3,4) == Rect(1,2,3,4)) +-- +-- --q,w = a[0.5] +-- --print("a[0.5] = " .. tostring(q).." "..w) +-- +-- function theme.puppamelo(s) +-- i = Image(400,400) +-- --i:fill_rect(Rect(0,0,400,400),LinearGradient(Point(0,0),Point(400,400))) +-- i:fill_rect(Rect(0,0,400,400),RadialGradient(Point(0,0),400,Point(200,200))) +-- return i +-- end + diff --git a/tests/luaimage/test.cpp b/tests/luaimage/test.cpp new file mode 100644 index 0000000..04dab03 --- /dev/null +++ b/tests/luaimage/test.cpp @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include "loader/theme.h" + +using namespace Loader; + +#if 0 +Image do_something(LoadingContext* x) { + Image i(300, 300); + i.clear(); + i.rotate(20); + i.translate(50,-30); + i.drawImage(x, QRectF(100,100,200,200), "data/white_rook.png"); + i.drawSVG(x, QRectF(0,0,200,200), "data/wk.svg"); + i.resetMatrix(); + /*i.drawGlyph(x, QRectF(100,0,200,200), "tests_image/Enquil.ttf", 0x006B, + QColor(255,0,0,128), QColor(0,128,128,96), 2.0);*/ + i.drawGlyph(x, QRectF(100,0,200,200), "data/Enquil.ttf", 0x006B, + Qt::blue, Qt::red, 5.0, false); + Image i2(150, 150); + i2.clear(); + if(!i2.drawGlyph(x, QRectF(0,0,150,150), "data/Enquil.ttf", 0x0071, + Qt::NoBrush, Qt::white)) { + i2.drawLine(QPointF(10,10),QPointF(140,140), Qt::white, 15); + i2.drawLine(QPointF(10,140),QPointF(140,10), Qt::white, 15); + } + i.drawImage(QRectF(50,50,200,200), i2.createShadow(10, Qt::green) ); + return i; +} +#endif + +void mkWidget(QImage img) +{ + QPainter p; + p.begin(&img); + p.setCompositionMode(QPainter::CompositionMode_DestinationOver); + for(int i=0;idump(); + delete x; +#endif + + Theme p("maintest.lua"); + p.refSize(250); + mkWidget(p.getPixmap("puppamelo",250).toImage()); + p.unrefSize(250); + + return app.exec(); +} diff --git a/tests/luaimage/test.lua b/tests/luaimage/test.lua new file mode 100644 index 0000000..8d9e0d0 --- /dev/null +++ b/tests/luaimage/test.lua @@ -0,0 +1,55 @@ + + +print("Hello!!") + +a = Rect("1",3,4,5) +b = Point(4,5) + +print(a) +a.x = -3 +a:translate(b) + +print(a.x) +print("right = "..a.right) + +print(a) + +puppamelo = Image(200,800) +puppamelo:clear() +if(true) then + puppamelo:fill_rect(Rect(0,0,200,800), Color(255,0,0,128)) + puppamelo:fill_rect(Rect(50,50,100,700), "#ffff00") + puppamelo:fill_rect(Rect(75,100,50,600), "#0000ff") + + puppamelo:draw_image(Rect(0,0,200,200), "data/white_rook.png") + puppamelo:draw_svg(Rect(0,200,200,200), "data/wk.svg") + + if(true) then + puppamelo:fill_rect(Rect(0,400,200,200), "yellow") + ziocane = Brush(Image("data/white_rook.png")) + ziocane:scale(0.2,0.2) + ziocane:rotate(45) + ziocane = Color(255,0,0,128) + puppamelo:draw_glyph(Rect(0,200,128,4*128), "data/Enquil.ttf", "0x006B", + Color(0,128,0,128), ziocane, 0.0, true); + end +else + puppamelo:fill_rect(Rect(50,50,200,800), Image("data/white_rook.png")) +end +teto = Image(200,200) +teto:clear() +teto:draw_glyph(Rect(0,0,200,200), "data/Enquil.ttf", "0x0071", + "#ffff00", "#ffffff", 5.0, false) +shad = teto:create_shadow(25, "#000000") + +puppamelo:draw_image(Rect(0,600,200,200), shad) +puppamelo:draw_image(Rect(0,600,200,200), teto) + +theme.puppamelo = function(size) + print("porca zoccola! "..size) + return puppamelo; +end + +-- +--puppamelo = shad +-- a:translate(a) diff --git a/tests/movelist/CMakeLists.txt b/tests/movelist/CMakeLists.txt new file mode 100644 index 0000000..bc117f1 --- /dev/null +++ b/tests/movelist/CMakeLists.txt @@ -0,0 +1,53 @@ + +SET(this_test movelist) +SETUP_SOURCES(${this_test}_SRC ${this_test}_UIS) + + +# i have to do this because QT4_WRAP_UI is stupid +SET(old_bin_dir ${CMAKE_CURRENT_BINARY_DIR}) +SET(CMAKE_CURRENT_BINARY_DIR ${old_bin_dir}/ui) +QT4_WRAP_UI(${this_test}_UIS_H ${${this_test}_UIS}) +SET(CMAKE_CURRENT_BINARY_DIR ${old_bin_dir}) + + +# QT4_AUTOMOC is not very intelligent either +QT4_AUTOMOC( + ${${this_test}_SRC}) + +ADD_EXECUTABLE( + ${this_test} ${${this_test}_SRC}) + + +INCLUDE_DIRECTORIES( + ${QT_INCLUDE_DIR} + #${QT_QTNETWORK_INCLUDE_DIR} + #${QT_QTSVG_INCLUDE_DIR} + ${QT_QTXML_INCLUDE_DIR} + #${LUA_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${KDE4_INCLUDE_DIR} + . + ${CMAKE_CURRENT_BINARY_DIR} +) + +ADD_DEFINITIONS( + ${LUA_CFLAGS} + -DNO_PGN +) + +LINK_DIRECTORIES( + #${LUA_LIBRARY_DIRS} + ${Boost_LIBRARY_DIRS} +) + +TARGET_LINK_LIBRARIES(${this_test} + ${QT_LIBRARIES} + #${QT_QTNETWORK_LIBRARIES} + #${QT_QTSVG_LIBRARIES} + ${QT_QTXML_LIBRARIES} + #${LUA_LINK_FLAGS} + ${KDE4_KDEUI_LIBS} + ${KDE4_KIO_LIBS} + ${KDE4_KHTML_LIBS} +) + diff --git a/tests/movelist/main.cpp b/tests/movelist/main.cpp new file mode 100644 index 0000000..17c98d2 --- /dev/null +++ b/tests/movelist/main.cpp @@ -0,0 +1,33 @@ +#include +#include +#include "movelist_textual.h" + +int main(int argc, char* argv[]) { + KCmdLineArgs::init(argc, argv, argv[0], 0, KLocalizedString(), NULL); + KApplication app; + + MoveList::Textual w; + w.setMove(Index(1), 0, "e4"); + w.setMove(Index(2), 1, "e5"); + w.setComment(Index(2), "A good answer"); + w.setMove(Index(2).next(0,1), 0, "Nf3"); + w.setVComment(Index(2), 0, "Sadly, many people still play this move"); + w.setComment(Index(2).next(0,1), "This move is much worse than f4"); + w.setMove(Index(2).next(0,2), 1, "Nc6"); + w.setMove(Index(2).next(0,3), 0, "Bb5"); + w.setMove(Index(2).next(0,4), 1, "Nf6"); + w.setMove(Index(2).next(0,3).next(0,1), 1, "f5"); + w.setVComment(Index(2).next(0,3), 0, "Here is the confutation of Bb5"); + w.setComment(Index(2).next(0,3).next(0,1), "White is hopeless"); + w.setMove(Index(2).next(1,1), 0, "Nc3"); + w.setVComment(Index(2), 1, "Another playable move"); + w.setComment(Index(2).next(1,1), "Ok?"); + w.setMove(Index(3), 0, "f4"); + w.setMove(Index(4), 1, "Bc5"); + w.select(Index(1)); + w.select(Index(4)); + //w.remove(Index(2).next(0,1)); + w.show(); + + return app.exec(); +} diff --git a/tests/options/CMakeLists.txt b/tests/options/CMakeLists.txt new file mode 100644 index 0000000..f57b088 --- /dev/null +++ b/tests/options/CMakeLists.txt @@ -0,0 +1,51 @@ + +SET(this_test options) +SETUP_SOURCES(${this_test}_SRC ${this_test}_UIS) + + +# i have to do this because QT4_WRAP_UI is stupid +SET(old_bin_dir ${CMAKE_CURRENT_BINARY_DIR}) +SET(CMAKE_CURRENT_BINARY_DIR ${old_bin_dir}/ui) +QT4_WRAP_UI(${this_test}_UIS_H ${${this_test}_UIS}) +SET(CMAKE_CURRENT_BINARY_DIR ${old_bin_dir}) + + +# QT4_AUTOMOC is not very intelligent either +QT4_AUTOMOC( + ${${this_test}_SRC}) + +ADD_EXECUTABLE( + ${this_test} ${${this_test}_SRC}) + + +INCLUDE_DIRECTORIES( + ${QT_INCLUDE_DIR} + #${QT_QTNETWORK_INCLUDE_DIR} + ${QT_QTSVG_INCLUDE_DIR} + ${QT_QTXML_INCLUDE_DIR} + ${LUA_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${KDE4_INCLUDE_DIR} + . + ${CMAKE_CURRENT_BINARY_DIR} +) + +ADD_DEFINITIONS( + ${LUA_CFLAGS} +) + +LINK_DIRECTORIES( + #${LUA_LIBRARY_DIRS} + ${Boost_LIBRARY_DIRS} +) + +TARGET_LINK_LIBRARIES(${this_test} + ${QT_LIBRARIES} + #${QT_QTNETWORK_LIBRARIES} + ${QT_QTSVG_LIBRARIES} + ${QT_QTXML_LIBRARIES} + ${LUA_LINK_FLAGS} + ${KDE4_KDEUI_LIBS} + ${KDE4_KIO_LIBS} +) + diff --git a/tests/options/foreach.hpp b/tests/options/foreach.hpp new file mode 100644 index 0000000..e0ff483 --- /dev/null +++ b/tests/options/foreach.hpp @@ -0,0 +1,814 @@ +/////////////////////////////////////////////////////////////////////////////// +// foreach.hpp header file +// +// Copyright 2004 Eric Niebler. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// Credits: +// Anson Tsao - for the initial inspiration and several good suggestions. +// Thorsten Ottosen - for Boost.Range, and for suggesting a way to detect +// const-qualified rvalues at compile time on VC7.1+ +// Russell Hind - For help porting to Borland +// Alisdair Meredith - For help porting to Borland +// Stefan Slapeta - For help porting to Intel + +#ifndef BOOST_FOREACH + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include // for std::pair + +#include +#include + +#if 0 +// Some compilers let us detect even const-qualified rvalues at compile-time +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1310) \ + || BOOST_WORKAROUND(__GNUC__, >= 4) \ + || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ >= 4)) +# define BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION +#else +// Some compilers allow temporaries to be bound to non-const references. +// These compilers make it impossible to for BOOST_FOREACH to detect +// temporaries and avoid reevaluation of the collection expression. +# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \ + || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \ + || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570)) \ + || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) +# define BOOST_FOREACH_NO_RVALUE_DETECTION +# endif +// Some compilers do not correctly implement the lvalue/rvalue conversion +// rules of the ternary conditional operator. +# if defined(BOOST_FOREACH_NO_RVALUE_DETECTION) \ + || defined(BOOST_NO_SFINAE) \ + || BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ + || BOOST_WORKAROUND(BOOST_INTEL_WIN, <= 810) \ + || BOOST_WORKAROUND(__GNUC__, < 3) \ + || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 2)) \ + || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 3) && defined(__APPLE_CC__)) \ + || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \ + || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) +# define BOOST_FOREACH_NO_CONST_RVALUE_DETECTION +# else +# define BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION +# endif +#endif +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION +# include +# include +# include +# include +#endif + +// This must be at global scope, hence the uglified name +enum boost_foreach_argument_dependent_lookup_hack +{ + boost_foreach_argument_dependent_lookup_hack_value +}; + +namespace boost +{ + +// forward declarations for iterator_range +template +class iterator_range; + +// forward declarations for sub_range +template +class sub_range; + +namespace foreach +{ + /////////////////////////////////////////////////////////////////////////////// + // in_range + // + template + inline std::pair in_range(T begin, T end) + { + return std::make_pair(begin, end); + } + + /////////////////////////////////////////////////////////////////////////////// + // boost::foreach::tag + // + typedef boost_foreach_argument_dependent_lookup_hack tag; + + /////////////////////////////////////////////////////////////////////////////// + // boost::foreach::is_lightweight_proxy + // Specialize this for user-defined collection types if they are inexpensive to copy. + // This tells BOOST_FOREACH it can avoid the rvalue/lvalue detection stuff. + template + struct is_lightweight_proxy + : boost::mpl::false_ + { + }; + + /////////////////////////////////////////////////////////////////////////////// + // boost::foreach::is_noncopyable + // Specialize this for user-defined collection types if they cannot be copied. + // This also tells BOOST_FOREACH to avoid the rvalue/lvalue detection stuff. + template + struct is_noncopyable + #if !defined(BOOST_BROKEN_IS_BASE_AND_DERIVED) && !defined(BOOST_NO_IS_ABSTRACT) + : boost::mpl::or_< + boost::is_abstract + , boost::is_base_and_derived + > + #elif !defined(BOOST_BROKEN_IS_BASE_AND_DERIVED) + : boost::is_base_and_derived + #elif !defined(BOOST_NO_IS_ABSTRACT) + : boost::is_abstract + #else + : boost::mpl::false_ + #endif + { + }; + +} // namespace foreach + +} // namespace boost + +// vc6/7 needs help ordering the following overloads +#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# define BOOST_FOREACH_TAG_DEFAULT ... +#else +# define BOOST_FOREACH_TAG_DEFAULT boost::foreach::tag +#endif + +/////////////////////////////////////////////////////////////////////////////// +// boost_foreach_is_lightweight_proxy +// Another customization point for the is_lightweight_proxy optimization, +// this one works on legacy compilers. Overload boost_foreach_is_lightweight_proxy +// at the global namespace for your type. +template +inline boost::foreach::is_lightweight_proxy * +boost_foreach_is_lightweight_proxy(T *&, BOOST_FOREACH_TAG_DEFAULT) { return 0; } + +template +inline boost::mpl::true_ * +boost_foreach_is_lightweight_proxy(std::pair *&, boost::foreach::tag) { return 0; } + +template +inline boost::mpl::true_ * +boost_foreach_is_lightweight_proxy(boost::iterator_range *&, boost::foreach::tag) { return 0; } + +template +inline boost::mpl::true_ * +boost_foreach_is_lightweight_proxy(boost::sub_range *&, boost::foreach::tag) { return 0; } + +template +inline boost::mpl::true_ * +boost_foreach_is_lightweight_proxy(T **&, boost::foreach::tag) { return 0; } + +/////////////////////////////////////////////////////////////////////////////// +// boost_foreach_is_noncopyable +// Another customization point for the is_noncopyable trait, +// this one works on legacy compilers. Overload boost_foreach_is_noncopyable +// at the global namespace for your type. +template +inline boost::foreach::is_noncopyable * +boost_foreach_is_noncopyable(T *&, BOOST_FOREACH_TAG_DEFAULT) { return 0; } + +namespace boost +{ + +namespace foreach_detail_ +{ + +/////////////////////////////////////////////////////////////////////////////// +// Define some utilities for assessing the properties of expressions +// +typedef char yes_type; +typedef char (&no_type)[2]; +yes_type is_true(boost::mpl::true_ *); +no_type is_true(boost::mpl::false_ *); + +// Extracts the desired property from the expression without evaluating it +#define BOOST_FOREACH_PROTECT(expr) \ + (static_cast *>(0)) + +template +inline boost::mpl::and_ *and_(Bool1 *, Bool2 *) { return 0; } + +template +inline boost::mpl::and_ *and_(Bool1 *, Bool2 *, Bool3 *) { return 0; } + +template +inline boost::mpl::or_ *or_(Bool1 *, Bool2 *) { return 0; } + +template +inline boost::mpl::or_ *or_(Bool1 *, Bool2 *, Bool3 *) { return 0; } + +template +inline boost::mpl::not_ *not_(Bool *) { return 0; } + +template +inline boost::mpl::false_ *is_rvalue_(T &, int) { return 0; } + +template +inline boost::mpl::true_ *is_rvalue_(T const &, ...) { return 0; } + +template +inline boost::is_array *is_array_(T const &) { return 0; } + +template +inline boost::is_const *is_const_(T &) { return 0; } + +#ifndef BOOST_FOREACH_NO_RVALUE_DETECTION +template +inline boost::mpl::true_ *is_const_(T const &) { return 0; } +#endif + +/////////////////////////////////////////////////////////////////////////////// +// auto_any_t/auto_any +// General utility for putting an object of any type into automatic storage +struct auto_any_base +{ + // auto_any_base must evaluate to false in boolean context so that + // they can be declared in if() statements. + operator bool() const + { + return false; + } +}; + +template +struct auto_any : auto_any_base +{ + auto_any(T const &t) + : item(t) + { + } + + // temporaries of type auto_any will be bound to const auto_any_base + // references, but we still want to be able to mutate the stored + // data, so declare it as mutable. + mutable T item; +}; + +typedef auto_any_base const &auto_any_t; + +template +inline BOOST_DEDUCED_TYPENAME boost::mpl::if_::type &auto_any_cast(auto_any_t a) +{ + return static_cast const &>(a).item; +} + +typedef boost::mpl::true_ const_; + +/////////////////////////////////////////////////////////////////////////////// +// type2type +// +template +struct type2type + : boost::mpl::if_ +{ +}; + +template +struct foreach_iterator +{ + typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_if< + C + , range_const_iterator + , range_iterator + >::type type; +}; + +template +struct foreach_reference + : iterator_reference::type> +{ +}; + +/////////////////////////////////////////////////////////////////////////////// +// encode_type +// +template +inline type2type *encode_type(T &, boost::mpl::false_ *) { return 0; } + +template +inline type2type *encode_type(T const &, boost::mpl::true_ *) { return 0; } + +/////////////////////////////////////////////////////////////////////////////// +// set_false +// +inline bool set_false(bool &b) { return b = false; } + +/////////////////////////////////////////////////////////////////////////////// +// to_ptr +// +template +inline T *&to_ptr(T const &) +{ + static T *t = 0; + return t; +} + +// Borland needs a little extra help with arrays +#if 0 // BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) +template +inline T (*&to_ptr(T (&)[N]))[N] +{ + static T (*t)[N] = 0; + return t; +} +#endif + +/////////////////////////////////////////////////////////////////////////////// +// derefof +// +template +inline T &derefof(T *t) +{ + // This is a work-around for a compiler bug in Borland. If T* is a pointer to array type U(*)[N], + // then dereferencing it results in a U* instead of U(&)[N]. The cast forces the issue. + return reinterpret_cast( + *const_cast( + reinterpret_cast(t) + ) + ); +} + +#ifdef BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION +/////////////////////////////////////////////////////////////////////////////// +// Detect at compile-time whether an expression yields an rvalue or +// an lvalue. This is rather non-standard, but some popular compilers +// accept it. +/////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +// rvalue_probe +// +template +struct rvalue_probe +{ + struct private_type_ {}; + // can't ever return an array by value + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< + boost::mpl::or_, boost::is_array >, private_type_, T + >::type value_type; + operator value_type(); + operator T &() const; +}; + +template +rvalue_probe const make_probe(T const &t); + +# define BOOST_FOREACH_IS_RVALUE(COL) \ + boost::foreach_detail_::and_( \ + boost::foreach_detail_::not_(boost::foreach_detail_::is_array_(COL)) \ + , BOOST_FOREACH_PROTECT(boost::foreach_detail_::is_rvalue_( \ + (true ? boost::foreach_detail_::make_probe(COL) : (COL)), 0))) + +#elif defined(BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION) +/////////////////////////////////////////////////////////////////////////////// +// Detect at run-time whether an expression yields an rvalue +// or an lvalue. This is 100% standard C++, but not all compilers +// accept it. Also, it causes FOREACH to break when used with non- +// copyable collection types. +/////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +// rvalue_probe +// +template +struct rvalue_probe +{ + rvalue_probe(T &t, bool &b) + : value(t) + , is_rvalue(b) + { + } + + struct private_type_ {}; + // can't ever return an array or an abstract type by value + #ifdef BOOST_NO_IS_ABSTRACT + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< + boost::is_array, private_type_, T + >::type value_type; + #else + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< + boost::mpl::or_, boost::is_array >, private_type_, T + >::type value_type; + #endif + + operator value_type() + { + this->is_rvalue = true; + return this->value; + } + + operator T &() const + { + return this->value; + } + +private: + T &value; + bool &is_rvalue; +}; + +template +rvalue_probe make_probe(T &t, bool &b) { return rvalue_probe(t, b); } + +template +rvalue_probe make_probe(T const &t, bool &b) { return rvalue_probe(t, b); } + +/////////////////////////////////////////////////////////////////////////////// +// simple_variant +// holds either a T or a T const* +template +struct simple_variant +{ + simple_variant(T const *t) + : is_rvalue(false) + { + *static_cast(this->data.address()) = t; + } + + simple_variant(T const &t) + : is_rvalue(true) + { + ::new(this->data.address()) T(t); + } + + simple_variant(simple_variant const &that) + : is_rvalue(that.is_rvalue) + { + if(this->is_rvalue) + ::new(this->data.address()) T(*that.get()); + else + *static_cast(this->data.address()) = that.get(); + } + + ~simple_variant() + { + if(this->is_rvalue) + this->get()->~T(); + } + + T const *get() const + { + if(this->is_rvalue) + return static_cast(this->data.address()); + else + return *static_cast(this->data.address()); + } + +private: + enum size_type { size = sizeof(T) > sizeof(T*) ? sizeof(T) : sizeof(T*) }; + simple_variant &operator =(simple_variant const &); + bool const is_rvalue; + aligned_storage data; +}; + +// If the collection is an array or is noncopyable, it must be an lvalue. +// If the collection is a lightweight proxy, treat it as an rvalue +// BUGBUG what about a noncopyable proxy? +template +inline BOOST_DEDUCED_TYPENAME boost::enable_if, IsProxy>::type * +should_copy_impl(LValue *, IsProxy *, bool *) +{ + return 0; +} + +// Otherwise, we must determine at runtime whether it's an lvalue or rvalue +inline bool * +should_copy_impl(boost::mpl::false_ *, boost::mpl::false_ *, bool *is_rvalue) +{ + return is_rvalue; +} + +#endif + +/////////////////////////////////////////////////////////////////////////////// +// contain +// +template +inline auto_any contain(T const &t, boost::mpl::true_ *) // rvalue +{ + return t; +} + +template +inline auto_any contain(T &t, boost::mpl::false_ *) // lvalue +{ + // Cannot seem to get sunpro to handle addressof() with array types. + #if 0 // BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570)) + return &t; + #else + return boost::addressof(t); + #endif +} + +#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION +template +auto_any > +contain(T const &t, bool *rvalue) +{ + return *rvalue ? simple_variant(t) : simple_variant(&t); +} +#endif + +///////////////////////////////////////////////////////////////////////////// +// begin +// +template +inline auto_any::type> +begin(auto_any_t col, type2type *, boost::mpl::true_ *) // rvalue +{ + return boost::begin(auto_any_cast(col)); +} + +template +inline auto_any::type> +begin(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue +{ + typedef BOOST_DEDUCED_TYPENAME type2type::type type; + typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iterator; + return iterator(boost::begin(derefof(auto_any_cast(col)))); +} + +#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION +template +auto_any::type> +begin(auto_any_t col, type2type *, bool *) +{ + return boost::begin(*auto_any_cast, boost::mpl::false_>(col).get()); +} +#endif + +/////////////////////////////////////////////////////////////////////////////// +// end +// +template +inline auto_any::type> +end(auto_any_t col, type2type *, boost::mpl::true_ *) // rvalue +{ + return boost::end(auto_any_cast(col)); +} + +template +inline auto_any::type> +end(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue +{ + typedef BOOST_DEDUCED_TYPENAME type2type::type type; + typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iterator; + return iterator(boost::end(derefof(auto_any_cast(col)))); +} + +#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION +template +auto_any::type> +end(auto_any_t col, type2type *, bool *) +{ + return boost::end(*auto_any_cast, boost::mpl::false_>(col).get()); +} +#endif + +#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING +template +inline auto_any +end(auto_any_t col, type2type *, boost::mpl::true_ *) // null-terminated C-style strings +{ + return 0; // not used +} +#endif + +/////////////////////////////////////////////////////////////////////////////// +// done +// +template +inline bool done(auto_any_t cur, auto_any_t end, type2type *) +{ + typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iter_t; + return auto_any_cast(cur) == auto_any_cast(end); +} + +#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING +template +inline bool done(auto_any_t cur, auto_any_t, type2type *) // null-terminated C-style strings +{ + return ! *auto_any_cast(cur); +} +#endif + +/////////////////////////////////////////////////////////////////////////////// +// next +// +template +inline void next(auto_any_t cur, type2type *) +{ + typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iter_t; + ++auto_any_cast(cur); +} + +/////////////////////////////////////////////////////////////////////////////// +// deref +// +template +inline BOOST_DEDUCED_TYPENAME foreach_reference::type +deref(auto_any_t cur, type2type *) +{ + typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iter_t; + return *auto_any_cast(cur); +} + +} // namespace foreach_detail_ +} // namespace boost + +// A sneaky way to get the type of the collection without evaluating the expression +#define BOOST_FOREACH_TYPEOF(COL) \ + (true ? 0 : boost::foreach_detail_::encode_type(COL, boost::foreach_detail_::is_const_(COL))) + +// returns true_* if the type is noncopyable +#define BOOST_FOREACH_IS_NONCOPYABLE(COL) \ + boost_foreach_is_noncopyable( \ + boost::foreach_detail_::to_ptr(COL) \ + , boost_foreach_argument_dependent_lookup_hack_value) + +// returns true_* if the type is a lightweight proxy (and is not noncopyable) +#define BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL) \ + boost::foreach_detail_::and_( \ + boost::foreach_detail_::not_(BOOST_FOREACH_IS_NONCOPYABLE(COL)) \ + , boost_foreach_is_lightweight_proxy( \ + boost::foreach_detail_::to_ptr(COL) \ + , boost_foreach_argument_dependent_lookup_hack_value)) + +#ifdef BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION +/////////////////////////////////////////////////////////////////////////////// +// R-values and const R-values supported here with zero runtime overhead +/////////////////////////////////////////////////////////////////////////////// + +// No variable is needed to track the rvalue-ness of the collection expression +# define BOOST_FOREACH_PREAMBLE() \ + /**/ + +// Evaluate the collection expression +# define BOOST_FOREACH_EVALUATE(COL) \ + (COL) + +# define BOOST_FOREACH_SHOULD_COPY(COL) \ + (true ? 0 : boost::foreach_detail_::or_( \ + BOOST_FOREACH_IS_RVALUE(COL) \ + , BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL))) + +#elif defined(BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION) +/////////////////////////////////////////////////////////////////////////////// +// R-values and const R-values supported here +/////////////////////////////////////////////////////////////////////////////// + +// Declare a variable to track the rvalue-ness of the collection expression +# define BOOST_FOREACH_PREAMBLE() \ + if (bool _foreach_is_rvalue = false) {} else + +// Evaluate the collection expression, and detect if it is an lvalue or and rvalue +# define BOOST_FOREACH_EVALUATE(COL) \ + (true ? boost::foreach_detail_::make_probe((COL), _foreach_is_rvalue) : (COL)) + +// The rvalue/lvalue-ness of the collection expression is determined dynamically, unless +// type type is an array or is noncopyable or is non-const, in which case we know it's an lvalue. +// If the type happens to be a lightweight proxy, always make a copy. +# define BOOST_FOREACH_SHOULD_COPY(COL) \ + (boost::foreach_detail_::should_copy_impl( \ + true ? 0 : boost::foreach_detail_::or_( \ + boost::foreach_detail_::is_array_(COL) \ + , BOOST_FOREACH_IS_NONCOPYABLE(COL) \ + , boost::foreach_detail_::not_(boost::foreach_detail_::is_const_(COL))) \ + , true ? 0 : BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL) \ + , &_foreach_is_rvalue)) + +#elif !defined(BOOST_FOREACH_NO_RVALUE_DETECTION) +/////////////////////////////////////////////////////////////////////////////// +// R-values supported here, const R-values NOT supported here +/////////////////////////////////////////////////////////////////////////////// + +// No variable is needed to track the rvalue-ness of the collection expression +# define BOOST_FOREACH_PREAMBLE() \ + /**/ + +// Evaluate the collection expression +# define BOOST_FOREACH_EVALUATE(COL) \ + (COL) + +// Determine whether the collection expression is an lvalue or an rvalue. +// NOTE: this gets the answer wrong for const rvalues. +# define BOOST_FOREACH_SHOULD_COPY(COL) \ + (true ? 0 : boost::foreach_detail_::or_( \ + boost::foreach_detail_::is_rvalue_((COL), 0) \ + , BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL))) + +#else +/////////////////////////////////////////////////////////////////////////////// +// R-values NOT supported here +/////////////////////////////////////////////////////////////////////////////// + +// No variable is needed to track the rvalue-ness of the collection expression +# define BOOST_FOREACH_PREAMBLE() \ + /**/ + +// Evaluate the collection expression +# define BOOST_FOREACH_EVALUATE(COL) \ + (COL) + +// Can't use rvalues with BOOST_FOREACH (unless they are lightweight proxies) +# define BOOST_FOREACH_SHOULD_COPY(COL) \ + (true ? 0 : BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL)) + +#endif + +#define BOOST_FOREACH_CONTAIN(COL) \ + boost::foreach_detail_::contain( \ + BOOST_FOREACH_EVALUATE(COL) \ + , BOOST_FOREACH_SHOULD_COPY(COL)) + +#define BOOST_FOREACH_BEGIN(COL) \ + boost::foreach_detail_::begin( \ + _foreach_col \ + , BOOST_FOREACH_TYPEOF(COL) \ + , BOOST_FOREACH_SHOULD_COPY(COL)) + +#define BOOST_FOREACH_END(COL) \ + boost::foreach_detail_::end( \ + _foreach_col \ + , BOOST_FOREACH_TYPEOF(COL) \ + , BOOST_FOREACH_SHOULD_COPY(COL)) + +#define BOOST_FOREACH_DONE(COL) \ + boost::foreach_detail_::done( \ + _foreach_cur \ + , _foreach_end \ + , BOOST_FOREACH_TYPEOF(COL)) + +#define BOOST_FOREACH_NEXT(COL) \ + boost::foreach_detail_::next( \ + _foreach_cur \ + , BOOST_FOREACH_TYPEOF(COL)) + +#define BOOST_FOREACH_DEREF(COL) \ + boost::foreach_detail_::deref( \ + _foreach_cur \ + , BOOST_FOREACH_TYPEOF(COL)) + +/////////////////////////////////////////////////////////////////////////////// +// BOOST_FOREACH +// +// For iterating over collections. Collections can be +// arrays, null-terminated strings, or STL containers. +// The loop variable can be a value or reference. For +// example: +// +// std::list int_list(/*stuff*/); +// BOOST_FOREACH(int &i, int_list) +// { +// /* +// * loop body goes here. +// * i is a reference to the int in int_list. +// */ +// } +// +// Alternately, you can declare the loop variable first, +// so you can access it after the loop finishes. Obviously, +// if you do it this way, then the loop variable cannot be +// a reference. +// +// int i; +// BOOST_FOREACH(i, int_list) +// { ... } +// +#define BOOST_FOREACH(VAR, COL) \ + BOOST_FOREACH_PREAMBLE() \ + if (boost::foreach_detail_::auto_any_t _foreach_col = BOOST_FOREACH_CONTAIN(COL)) {} else \ + if (boost::foreach_detail_::auto_any_t _foreach_cur = BOOST_FOREACH_BEGIN(COL)) {} else \ + if (boost::foreach_detail_::auto_any_t _foreach_end = BOOST_FOREACH_END(COL)) {} else \ + for (bool _foreach_continue = true; \ + _foreach_continue && !BOOST_FOREACH_DONE(COL); \ + _foreach_continue ? BOOST_FOREACH_NEXT(COL) : (void)0) \ + if (boost::foreach_detail_::set_false(_foreach_continue)) {} else \ + for (VAR = BOOST_FOREACH_DEREF(COL); !_foreach_continue; _foreach_continue = true) + +#endif diff --git a/tests/options/main.cpp b/tests/options/main.cpp new file mode 100644 index 0000000..7b61910 --- /dev/null +++ b/tests/options/main.cpp @@ -0,0 +1,67 @@ + +#include +#include +#include +#include +#include "common.h" +#include "settings.h" +#include "option.h" +#include "luaapi/loader.h" + + +OptList opts = OptList() + << OptPtr(new BoolOpt("teto", "Is this C++?", true)) + << OptPtr(new BoolOpt("fufi", "Fufi?", true, OptList() + << OptPtr(new BoolOpt("gni", "Gni gni?", true, OptList() + << OptPtr(new ColorOpt("pappa", "Pappa?", Qt::red)) + << OptPtr(new FontOpt("ciccia", "Ciccia!", QFont("Monospace"))) + )) + << OptPtr(new BoolOpt("gnu", "Gnu gnu?", false)) + )) + << OptPtr(new IntOpt("ratta", "Ratta:", 5, 0, 10)) + << OptPtr(new ComboOpt("schiatta", "Fai a Paolo:", QStringList() + << "Incula" << "Impala" << "Spezza" << "Uccidi" << "Tortura" )) + << OptPtr(new SelectOpt("affa", "Affanculo:", BoolOptList() + << BoolOptPtr(new BoolOpt("ght", "Case1", true, OptList() + << OptPtr(new BoolOpt("gni2", "Gni gni?", true)) + )) + << BoolOptPtr(new BoolOpt("cvb", "Case2", true, OptList() + << OptPtr(new StringOpt("sheshe", "She She:", "Sho shu?")) + << OptPtr(new UrlOpt("shesdsshe", "She She:", "Sho shu?")) + )) + )); + +int main(int argc, char *argv[]) { + KCmdLineArgs::init(argc, argv, argv[0], 0, KLocalizedString(), NULL); + KApplication app; + + LuaApi::Loader ja(NULL); + //Settings sets("test.settings"); + ja.runFile("test.lua"); + OptList opts2 = ja.getOptList("options"); + if(ja.error()) + kDebug()()() << ja.errorString() << std::endl; + else { + /*sets.qSettings()->beginGroup("o2"); + options_list_load_from_settings(opts2, sets); + sets.qSettings()->endGroup();*/ + dump_options_list(opts2); + OptionWidget& w2 = *new OptionWidget(opts2); + w2.show(); + } + /*sets.qSettings()->beginGroup("o1"); + options_list_load_from_settings(opts, sets); + sets.qSettings()->endGroup();*/ + OptionWidget w(opts); + w.show(); + app.exec(); + + /*sets.qSettings()->beginGroup("o1"); + options_list_save_to_settings(opts, sets); + sets.qSettings()->endGroup(); + sets.qSettings()->beginGroup("o2"); + options_list_save_to_settings(opts2, sets); + sets.qSettings()->endGroup();*/ + + return 0; +} diff --git a/tests/options/test.lua b/tests/options/test.lua new file mode 100644 index 0000000..b6d5cea --- /dev/null +++ b/tests/options/test.lua @@ -0,0 +1,36 @@ + +-- options = OptList { +-- BoolOpt("pippo", "Pluto", true), +-- BoolOpt("gnugnu", "Jerry", false, OptList{ +-- BoolOpt("zio", "Porco!", true) +-- }) +-- } + +options = OptList { + BoolOpt("teto", "Is this LUA?", true), + BoolOpt("fufi", "Fufi?", true, OptList{ + BoolOpt("gni", "Gni gni?", true, OptList { + ColorOpt("pappa", "Pappa?", "red"), + FontOpt("ciccia", "Ciccia!", "Monospace") + }), + BoolOpt("gnu", "Gnu gnu?", false) + }), + IntOpt("ratta", "Ratta:", 5, 0, 10), + ComboOpt("schiatta", "Fai a Paolo:", {"Incula", "Impala", "Spezza","Uccidi", "Tortura"}), + SelectOpt("affa", "Affanculo:", BoolOptList { + BoolOpt("ght", "Case1", true, OptList { + BoolOpt("gni2", "Gni gni?", true) + }), + BoolOpt("cvb", "Case2", true, OptList { + StringOpt("sheshe", "She She:", "Sho shu?"), + UrlOpt("shesdsshe", "She She:", "Sho shu?") + }) + }) +} + +-- print(options) +-- print(options.pippo.value) +-- print(options.pippo.name) +-- print(options.pippo.label) +-- print(options.gnugnu.sub_options) +-- print(options.gnugnu.sub_options.zio.value) diff --git a/tests/settings/.gitignore b/tests/settings/.gitignore new file mode 100644 index 0000000..27b0224 --- /dev/null +++ b/tests/settings/.gitignore @@ -0,0 +1,4 @@ +settings_test_automoc.cpp.files +DartTestfile.txt +Makefile +cmake_install.cmake diff --git a/tests/settings/CMakeLists.txt b/tests/settings/CMakeLists.txt new file mode 100644 index 0000000..e4e0a3f --- /dev/null +++ b/tests/settings/CMakeLists.txt @@ -0,0 +1,21 @@ +set(main_dir "../../src") + +SET(settings_SRC + ${main_dir}/mastersettings.cpp + ${main_dir}/settings.cpp + settingstest.cpp + ../cppunit_main.cpp +) + +include_directories( + ${KDE4_INCLUDES} + ${LUA_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/${main_dir} +) + +kde4_add_executable(settings_test ${settings_SRC}) +target_link_libraries(settings_test ${KDE4_KDEUI_LIBS} ${CPPUNIT_LIBRARIES}) + +add_test(settings settings_test) diff --git a/tests/settings/settingstest.cpp b/tests/settings/settingstest.cpp new file mode 100644 index 0000000..b0b174d --- /dev/null +++ b/tests/settings/settingstest.cpp @@ -0,0 +1,85 @@ +#include "settingstest.h" +#include "mastersettings.h" + +CPPUNIT_TEST_SUITE_REGISTRATION(SettingsTest); + +MasterSettings& SettingsTest::test_settings() { + return *m_instance; +} + +void SettingsTest::setUp() { + system("rm tmp.xml"); + m_instance = new MasterSettings("tmp.xml", MasterSettings::PathLookup); +} + +void SettingsTest::tearDown() { + delete m_instance; +} + +void SettingsTest::test_null() { + CPPUNIT_ASSERT(!test_settings()["dummy"]); + CPPUNIT_ASSERT(!test_settings()["fourtytwo"]); +} + +void SettingsTest::test_create_and_remove() { + test_settings()["dummy"] = QColor(3, 4, 5); + CPPUNIT_ASSERT(test_settings()["dummy"]); + CPPUNIT_ASSERT(QColor(3, 4, 5) == test_settings()["dummy"].value()); + test_settings()["dummy"].remove(); + CPPUNIT_ASSERT(!test_settings()["dummy"]); +} + +void SettingsTest::test_map() { + SettingMap map = test_settings().newMap("duck", "name"); + + { + Settings s = map.insert("paperino"); + s["age"] = 34; + } + { + Settings s = map.insert("gastone"); + s["age"] = 29; + } + { + Settings s = map.insert("qui"); + s["age"] = 12; + } + { + Settings s = map.insert("quo"); + s["age"] = 12; + } + { + Settings s = map.insert("qua"); + s["age"] = 12; + } + + CPPUNIT_ASSERT(map.size() == 5); + Settings s = map.get("gastone"); + CPPUNIT_ASSERT(s["age"].value() == 29); + + map.clear(); + + CPPUNIT_ASSERT(!test_settings()["duck"]); +} + +void SettingsTest::test_array() { + SettingArray array = test_settings().newArray("duck"); + { + Settings s = array.append(); + s["name"] = "nonna papera"; + } + { + Settings s = array.append(); + s["name"] = "ciccio"; + } + + CPPUNIT_ASSERT(array.size() == 2); + Settings s = array.get(1); + CPPUNIT_ASSERT(s["name"].value() == "ciccio"); + + array.clear(); + + CPPUNIT_ASSERT(!test_settings()["duck"]); +} + + diff --git a/tests/settings/settingstest.h b/tests/settings/settingstest.h new file mode 100644 index 0000000..771b4b6 --- /dev/null +++ b/tests/settings/settingstest.h @@ -0,0 +1,32 @@ +#ifndef SETTINGSTEST_H +#define SETTINGSTEST_H + +#include +#include +#include +#include +#include + +class MasterSettings; + +class SettingsTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(SettingsTest); + CPPUNIT_TEST(test_null); + CPPUNIT_TEST(test_create_and_remove); + CPPUNIT_TEST(test_map); + CPPUNIT_TEST(test_array); + CPPUNIT_TEST_SUITE_END(); +private: + MasterSettings* m_instance; + MasterSettings& test_settings(); +public: + void setUp(); + void tearDown(); + + void test_null(); + void test_create_and_remove(); + void test_map(); + void test_array(); +}; + +#endif // SETTINGSTEST_H diff --git a/tests/templates/template.cpp.erb b/tests/templates/template.cpp.erb new file mode 100644 index 0000000..b762f70 --- /dev/null +++ b/tests/templates/template.cpp.erb @@ -0,0 +1,19 @@ +#include "<%= @name.downcase %>.h" + +CPPUNIT_TEST_SUITE_REGISTRATION(<%= @name %>Test); + +void <%= @name %>Test::setUp() { + L = new LuaState(); +} + +void <%= @name %>Test::tearDown() { + delete L; +} + + +<% @tests.each do |test| %> +void <%= @name %>Test::<%= test %>() { + +} +<%- end %> + diff --git a/tests/templates/template.h.erb b/tests/templates/template.h.erb new file mode 100644 index 0000000..9e2fc70 --- /dev/null +++ b/tests/templates/template.h.erb @@ -0,0 +1,28 @@ +#ifndef CPPLUA_TEST_<%= @name.upcase %>_H +#define CPPLUA_TEST_<%= @name.upcase %>_H + +#include +#include +#include +#include +#include + +class <%= @name %>Test : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(<%= @name.capitalize %>Test); +<% @tests.each do |test| %> + CPPUNIT_TEST(<%= test %>) +<%- end %> + CPPUNIT_TEST_SUITE_END(); +private: + +public: + void setUp(); + void tearDown(); + +<% @tests.each do |test| %> + void <%= test %>(); +<%- end %> +}; + +#endif // CPPLUA_TEST_<%= @name.upcase %>_H + diff --git a/tests/test.lua b/tests/test.lua new file mode 100644 index 0000000..f6c03d6 --- /dev/null +++ b/tests/test.lua @@ -0,0 +1,45 @@ +function out(x) + dump(x, "", "") +end + +function dump(x, indent1, indent2) + mt = getmetatable(x) + if mt then + io.write("> metatable: ") + dump(mt, "", indent2 .. " ") + io.write("> object: ") + else + io.write(indent1) + end + if type(x) == "string" then + io.write(x) + elseif type(x) == "number" then + io.write(x) + elseif type(x) == "table" then + print("{") + for k, v in pairs(x) do + dump(k, indent2 .. " ", indent2 .. " ") + io.write(" = ") + dump(v, "", indent2 .. " ") + print("") + end + print(indent2 .. "}") + else + io.write("<" .. type(x) .. ">") + end +end + +function debug() + print "Rect" + out(Rect) + print "" + + print "r" + out(r) + print "" +end + +r = Rect(2, 3, 100, 400) +print(r:height()) + + diff --git a/tests/test_canvas.cpp b/tests/test_canvas.cpp new file mode 100644 index 0000000..f1775e3 --- /dev/null +++ b/tests/test_canvas.cpp @@ -0,0 +1,122 @@ +#include +#include +#include +#include "canvas.h" + + +class Puppas : public Canvas +{ + CanvasItem *ppp; + QPoint delta; +public: + Puppas(QWidget *p = NULL) : Canvas(p), ppp(NULL) {} + virtual ~Puppas(){} + virtual void keyPressEvent ( QKeyEvent * event ) + { + if(event->key() == Qt::Key_Tab) + (*items())[0]->raise(); + } + virtual void mousePressEvent ( QMouseEvent * event ) + { + ppp = itemAt(event->pos()); + if(ppp) + { + delta = ppp->pos() - event->pos(); + if(event->button() == Qt::LeftButton) + ppp->raise(); + } + } + virtual void mouseMoveEvent ( QMouseEvent * event ) + { + if(ppp) + ppp->moveTo(event->pos() + delta ); + } +}; + +QPicture make_pic() +{ + QPicture pic; + QPainter p(&pic); + p.setPen(Qt::yellow); + p.setBrush(Qt::darkGreen); + p.drawEllipse(0,0,200,100); + + return pic; +} + +/*QPixmap tp(QPixmap px) +{ + QPixmap retv(px.size); + QPainter p(retv); + + return retv; +}*/ + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + Canvas *c = new Puppas(); + c->resize(500,500); + + CanvasGroup *cg = new CanvasGroup( c ); + cg->moveTo(0,0); + cg->show(); + + CanvasPixmap *p = new CanvasPixmap( QPixmap( + "/home/monge/chess_pieces/out/img_fantasy/kboard_theme/white_rook.png"), cg ); + p->moveTo(0,0); + p->show(); + + CanvasPixmap *p2 = new CanvasPixmap( QPixmap( + "/home/monge/chess_pieces/out/img_skulls/kboard_theme/black_bishop.png"), cg ); + p2->moveTo(200,50); + p2->show(); + + CanvasPixmap *p3 = new CanvasPixmap( QPixmap( + "/home/monge/chess_pieces/out/img_freak/kboard_theme/white_knight.png"), c ); + p3->moveTo(100,250); + p3->show(); + + CanvasPixmap *p4 = new CanvasPixmap( QPixmap( + "/home/monge/chess_pieces/out/img_spatial/kboard_theme/black_king.png"), c ); + p4->moveTo(20,150); + p4->show(); + + CanvasPixmap *p5 = new CanvasPixmap( QPixmap( + "/home/monge/chess_pieces/out/img_prmi/kboard_theme/white_queen.png"), c ); + p5->moveTo(300,200); + p5->show(); + + CanvasTiledPixmap *p6 = new CanvasTiledPixmap( QPixmap( + "/home/monge/chess_pieces/out/icons/20/r.png"), + QSize(200,150), QPoint(0,0), false, c ); + p6->moveTo(200,100); + p6->show(); + + CanvasRectangle *p7 = new CanvasRectangle( QColor(255,0,0,192), QSize(200,150), c ); + p7->moveTo(50,350); + p7->show(); +/* + CanvasRectangle *p8a = new CanvasRectangle( QColor(128,128,0,255), QSize(1,200), c ); + p8a->moveTo(200,0); + p8a->show(); + + CanvasRectangle *p8b = new CanvasRectangle( QColor(0,128,0,255), QSize(300,1), c ); + p8b->moveTo(100,80); + p8b->show(); +*/ + CanvasText *p8 = new CanvasText( "Fuck", QColor(0,0,255,192), + QFont("Sans", 70, QFont::Bold), + CanvasText::HCenter, CanvasText::VCenter, c ); + p8->moveTo(200,80); + p8->show(); + + CanvasPicture *p9 = new CanvasPicture( make_pic(), c ); + p9->moveTo(200,100); + p9->show(); + + c->show(); + + return app.exec(); +} diff --git a/tests/test_lua.cpp b/tests/test_lua.cpp new file mode 100644 index 0000000..37fd9ad --- /dev/null +++ b/tests/test_lua.cpp @@ -0,0 +1,17 @@ +#include "../src/luaconfig.h" + +using namespace LuaLoader; + +int main(int argc, char** argv) { + const char* file; + if (argc > 1) + file = argv[1]; + else + file = "test.lua"; + + Api api; + api.runFile(file); + + return 0; +} + diff --git a/tests/test_pgn.pgn b/tests/test_pgn.pgn new file mode 100644 index 0000000..e22deb5 --- /dev/null +++ b/tests/test_pgn.pgn @@ -0,0 +1,129 @@ + +[Site "?"] +[Date "????.??.??"] +[Round "?"] +[White "White player"] +[Black "Black player"] +[Result "*"] +[WhiteElo "0"] +[BlackElo "0"] +[ECO "C30"] +[TimeControl "0"] + +1. e4 e5 2. f4 {This is really a good move.} Bc5 ({This is a comment at the +start of a variation.} 2. ... exf4 {And this is a comment after.} 3. Nf3 g5 +4. h4 g4 5. Ne5 Nf6 6. Nxg4 (6. Nc3 d6 7. Nxf7 ) ) 3. Nf3 Nc6 4. Bc4 {The +bishop is attacking f7 and is threatening to checkmate the black king} d6 5. +c3 (5. d3 Nf6 6. Nc3 Bg4 7. Na4 Bb4+ 8. c3 Ba5 9. Be3 (9. Bd2 Bxf3 10. Qxf3 +Nh5 (10. ... O-O 11. O-O-O a6 12. b4 b5 13. bxa5 bxc4 14. d4 exd4 15. cxd4 +Nxd4 ) ) Nd4 10. O-O Nxf3+ 11. gxf3 Bh3 12. Rf2 a6 (12. ... O-O 13. b4 Bb6 +14. Nxb6 axb6 15. a4 Nh5 16. f5 g6 17. f4 (17. Bh6 Re8 18. f4 Nxf4 19. Bxf4 +exf4 20. Qf3 Qg5+ ) Nxf4 18. Bxf4 exf4 19. Rxf4 ) 13. b4 b5 14. bxa5 {After +this one white is in a hopeless position} bxc4 15. dxc4 Qd7 16. Nb2 Nh5 17. +f5 ) Nf6 6. Qe2 Ng4 7. Rf1 O-O 8. d3 Be6 9. Bb3 * + +[White "Maurizio"] +[Black "Rattatechess"] +1. e4 c5 2. Nf3 e6 3. Nc3 Nc6 4. d4 cxd4 5. Nxd4 Nf6 6. f3 Bb4 7. Be3 Bxc3+ 8. bxc3 Nxe4 9. fxe4 Qh4+ 10. Bf2 Qxe4+ 11. Qe2 Qd5 12. c4 Qd6 13. Qd3 Qb4+ 14. c3 Qb2 15. Rd1 Qxa2 16. Nxc6 bxc6 17. Bc5 Qa5 18. Qd6 Qxc3+ 19. Kf2 Qf6+ 20. Kg1 Qg5 21. h4 Qd8 22. Rh3 f5 23. Rg3 Qf6 24. Be2 Rg8 25. h5 g6 26. Bf3 Qf8 27. Qe5 Qh6 28. Rd6 Qc1+ 29. Kh2 Qxc4 30. Rxc6 g5 31. Qf6 Qxc5 32. Rxc5 f4 33. Rgxg5 Rf8 34. Qg7 Bb7 35. Bxb7 Rd8 36. Qxh7 Rf7 37. Rg7 Rxg7 38. Qxg7 Rb8 39. h6 Rd8 40. h7 Rc8 41. h8=Q# + +[White "Maurizio"] +[Black "Rattatechess"] +1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Bd3 c5 7. d5 Na6 8. O-O Nb4 9. Re1 Ng4 10. h3 Bxc3 11. bxc3 Nxd3 12. Qxd3 Nf6 13. e5 dxe5 14. Nxe5 Bf5 15. Qf3 Nd7 16. g4 Nxe5 17. Rxe5 Qd6 18. Bf4 Bc8 19. Rae1 Qa6 20. Rxe7 Qf6 21. Qe3 Rd8 22. Bg5 Qd6 23. Re8+ Rxe8 24. Qxe8+ Kg7 25. Be7 Be6 26. Qxa8 Qxe7 27. dxe6 fxe6 28. Qb8 b6 29. Qe5+ Qf6 30. g5 Qxe5 31. Rxe5 Kf7 32. Kg2 a6 33. a4 Ke7 34. a5 bxa5 35. Rxc5 a4 36. Ra5 e5 37. Rxa4 Kd6 38. Rxa6+ Kc5 39. Kf3 Kxc4 40. Rc6+ Kd3 41. Rc8 Kd2 42. c4 Kd3 43. c5 Kc4 44. c6 Kd5 45. Ke3 Kc5 46. Ke4 Kd6 47. f3 Kc5 48. Kxe5 Kb5 49. Kd6 Kc4 50. c7 Kd3 51. Re8 Kd2 52. c8=Q Kd3 53. Qc5 Kd2 54. Re3 Kd1 55. Qc3 h6 56. Re1# + +[White "Maurizio"] +[Black "Rattatechess"] +1. e4 c5 2. Nf3 Nc6 3. Nc3 g6 4. d4 cxd4 5. Nxd4 Bg7 6. Be3 Nf6 7. f3 Qc7 8. Qd2 a6 9. O-O-O e5 10. Ndb5 axb5 11. Nxb5 Qb8 12. Nd6+ Kf8 13. a3 Kg8 14. Bc4 Nd8 15. Bb6 Ne6 16. Qc3 Nh5 17. Nb5 Bh6+ 18. Kb1 Bg5 19. Bxe6 Bd2 20. Rxd2 d5 21. Bxf7+ Kxf7 22. Bc7 Bd7 23. Nd6+ Kg8 24. Bxb8 Rxb8 25. Rxd5 Nf4 26. Rxe5 Ne6 27. Qb3 Kg7 28. Rxe6 Bxe6 29. Qxe6 Rhf8 30. Rd1 Rbd8 31. Qe7+ Kg8 32. Ka2 Ra8 33. Nf5 Rf7 34. Qe6 gxf5 35. Rd7 Rf8 36. exf5 b5 37. g4 Kh8 38. Rxf7 Rxf7 39. Qxf7 h5 40. g5 h4 41. g6 b4 42. Qf8# + +[Event "Convergence"] +1. e4 e5 2. f4 d6 3. d4 f6 4. Nf3 Nc6 5. Na3 Nh6 6. b3 Nf7 7. Nc4 Qe7 8. Nb2 +g6 9. Nd3 Bg7 10. Bb2 O-O 11. Bc3 Re8 12. Qb1 b5 13. a4 bxa4 14. Rxa4 Bb7 15. +Qa1 Qd7 16. Be2 Re7 17. h4 Rae8 18. h5 gxh5 19. Rxh5 Qg4 20. Ra5 Qg3+ 21. Kd1 +Kh8 {E ora un magna-magna generale} 22. fxe5 fxe5 23. dxe5 dxe5 24. Nfxe5 Ncxe5 +25. Nxe5 Nxe5 26. Bxe5 Bxe5 27. Rhxe5 Rxe5 28. Rxe5 Rxe5 29. Qxe5+ Qxe5 + +[Event "Bachetto!!!! (42. Qb1#)"] +1. e4 d5 2. exd5 Qxd5 3. Nc3 Qc6 4. Bb5 Qxb5 5. Nxb5 Na6 6. Qf3 Nf6 7. Kd1 Bg4 +8. Qxg4 Nxg4 9. Nh3 O-O-O 10. f3 Ne5 11. Re1 Ng6 12. c3 Nc5 13. Nxa7+ Kb8 14. Nb5 +Nd3 15. Re3 e6 16. Kc2 Nde5 17. d4 Nc4 18. Rd3 c6 19. Na3 Nxa3+ 20. bxa3 Rd5 +21. Rb1 Ra5 22. Rb3 Bd6 23. g3 Rd8 24. Ng5 f6 25. Ne4 Bc7 26. Be3 Ne7 27. c4 +Kc8 28. Bd2 Rh5 29. h4 f5 30. Ng5 Bxg3 31. Nxe6 Rd6 32. Nxg7 Rxh4 33. Nxf5 +Nxf5 34. Kc3 Nxd4 35. c5 Rf6 36. Rxd4 Rxd4 37. Kxd4 R@d5+ 38. Kc3 Q@d3+ 39. Kb2 +N@c4+ 40. Ka1 N@c2+ 41. Kb1 N2xa3+ 42. Ka1 Qb1# 43. Rxb1 Nc2# + +[Event "Lo stesso bachetto"] +1. d4 g6 2. d5 Nf6 3. Qd4 Bh6 4. g4 Nxg4 5. Qxh8# + +[Event "Reversi"] +1. f5 f6 2. f7 g7 3. c4 c3 4. c2 b2 5. e6 d6 6. e7 d8 7. g6 g5 8. f4 g8 9. h8 +h7 10. a1 f3 11. f8 d3 12. h6 b3 13. h5 g4 14. e8 d7 15. c8 b1 16. c7 c6 17. h4 + b8 18. a8 b7 19. b6 h3 20. g3 g2 21. c1 a3 22. a2 e3 23. f2 c5 24. a7 a6 25. b4 + b5 26. a4 a5 27. h2 d2 28. d1 e2 29. e1 g1 30. h1 f1 + +[Event "Reversi2"] +1. f5 d6 2. c5 f6 3. c4 f4 4. e6 d7 5. e7 c7 6. g6 f8 7. g4 h6 8. g7 g5 9. f7 +f3 10. e8 h8 11. g8 d8 12. f2 h7 13. c8 b8 14. c6 h5 15. b7 h4 16. h3 g3 17. e3 +g2 18. d3 e2 19. a8 h1 20. h2 g1 21. b6 c2 22. b3 b5 23. c3 a6 24. e1 d2 25. f1 +b4 26. a5 b2 27. d1 a7 28. a1 c1 29. b1 a3 30. a2 a4 + +[Event "dfasdfadf ][] \"\"\" neally nasty tag"] +1. e4 f5 2. g4 + +[Event "QUEEEE"] +1. d4 e6 2. c4 Nf6 3. Nc3 d5 4. Bg5 Nbd7 5. e3 Be7 6. Nf3 O-O 7. Qc2 c6 8. a3 +Re8 9. Rd1 dxc4 10. Bxc4 Nd5 11. Bxe7 Qxe7 12. O-O Nxc3 13. Qxc3 c5 14. d5 exd5 +15. Rxd5 b6 16. Rfd1 Rf8 17. b4 cxb4 18. axb4 Nf6 19. Re5 Qc7 20. Ng5 Bb7 21. Ne6 +Qc6 22. f3 Ba6 23. Rd4 Rfc8 24. Nd8 (24. b5 Bxb5 25. Nxg7 (25. Rxb5 fxe6) Bxc4 +(25. ... Kxg7 26. Rg4+ (26. Rg5+ Kh6 27. Rh4+ (27. Rf4 Kxg5 28. h4+ Kg6) (27. Qe1 +Kxg5 28. Qg3+ Kf5 (28. ... Kh6 29. Rh4+ Nh5 30. Qf4+) 29. Rf4+ Ke5 30. Rg4+ +(30. Rh4+ Kf5) Kf5 31. Qf4#) Kxg5 28. Qe5+ Kg6) Nxg4 (26. ... Kf8 27. Qa3+ (27. Qb4+ +Qc5 28. Rxc5 Rxc5 29. Bxb5 Nxg4 30. fxg4)) (26. ... Kh6 27. Reg5 Qxc4) (26. ... Kh8 +27. Re6 (27. Rxb5 Rg8 28. Rxg8+ Kxg8 (28. ... Rxg8 29. Rf5 Kg7 (29. ... Rg6 30. g4 +(30. h4 Kg8 (30. ... Qd6 31. h5 Rh6 32. Bxf7 Kg7 33. Bb3)) Kg7 31. g5 b5 32. Rxb5 +Qxf3) 30. Rg5+ (30. g4 b5 31. Rxb5 Kf8 32. Rb8+ Ke7 33. Qe5+ Kd7 34. Bb5) Kf8 +(30. ... Kh8 31. Rxg8+) 31. Qb4+ Ke8 32. Bb5))) 27. Rg5+ Kf8 28. Qb4+ (28. Qg7+ +Ke7 29. Qxf7+ Kd6 30. Qf4+ Ke7 31. Rg7+ (31. Qf7+ Kd6 32. Rd5+ Qxd5 33. Qxd5+ Kc7 +34. Bxb5 Nh6) Kd8 32. Qf8# (32. Qg5+ Qf6 33. Qd5+ Ke8 34. Bxb5+) Qe8 33. Qd6+ Bd7 +34. Rg8 Qxg8 35. Bxg8) Qc5 (28. ... Ke8 29. Rg8+ (29. Bxb5) Kd7) 29. Rxc5 bxc5 +(29. ... Rxc5 30. Bxb5 Nf6) 30. Qxb5 Nf6 (30. ... Nh6 31. Qd7 a5 32. Qd6+ Kg7 33. Qe5+ +Kg8 (33. ... Kf8 34. Qh8+ Ke7 35. Qxh7 Rh8 36. Qe4+)) 31. Qb7) 26. Rg5 (26. Nf5 +Qc5 (26. ... Qc7 27. Rg4+ Kh8 28. Re8#) (26. ... Rc7 27. Rg4+ Kh8 28. Rxc4) (26. ... +Qa4 27. Rg4+ (27. Re8+ Qxe8 (27. ... Nxe8 28. Rg4+ Ng7) (27. ... Rxe8 28. Rg4+ Kf8 +29. Qxf6 Qd1+ 30. Kf2 Qf1+ 31. Kg3 Qe1+ 32. Kh3 Qg3+) 28. Rg4+ Kf8 29. Qb4+ (29. Qxf6) +Rc5) Kf8)) Ba6 (26. ... Bd5) 27. Rd8+ Ne8 28. Rxe8# Qxe8 29. Nxe8+ Kf8 30. Qh8+ Ke7) +Qc7 25. Rg4 Qxd8 26. Reg5 Qd1+ 27. Kf2 Nxg4+ 28. Rxg4 g6 29. Bxf7+ Kxf7 30. Rf4+ Kg8 +31. Qf6 Qd7 + +[Event "A chain reaction game"] +1. d4 e4 2. d4 e4 3. d4 e4 4. d5 e5 5. d4 f5 6. e5 f5 7. e5 f7 8. e7 f7 9. e7 f7 +10. d7 e7 11. d6 d7 12. c7 d7 13. c6 d6 14. c6 c5 15. d5 c7 16. c6 b8 17. a7 b8 +18. a7 b8 19. a7 c8 20. b7 b5 21. d7 e8 22. d7 f6 23. a5 b5 24. b4 b5 25. b4 b5 +26. b3 b4 27. c3 c4 28. a3 b4 29. a3 b5 30. b4 d6 31. c3 (31. b4 d8 (31. ... c7) +32. d5 d7 33. e5 d7 34. b5 (34. e5 d7) e8 (34. ... d8) 35. e5 f8 36. e5 f3 37. d4 +d7) b7 32. c4 d7 33. b5 c6 34. a6 c6 35. b3 d6 36. b3 e6 37. e3 d7 38. e4 d8 +39. e4 b7 40. f3 e8 41. b5 (41. e4) + +[Event "Edited CRAZYHOUSE game"] +[Site "fucklandia"] +[Date "2006.10.07"] +[Round "-"] +[White "-"] +[Black "-"] +[Result "*"] +[Variant "crazyhouse"] +[FEN "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBKQBNR w kq - 0 1"] +[SetUp "1"] + +{-------------- +r n b q k b n r +p p p p p p p p +. . . . . . . . +. . . . . . . . +. . . . . . . . +. . . . . . . . +P P P P P P P P +R N B K Q B N R +white to play +--------------} +1. e4 d5 2. exd5 Qxd5 3. P@e3 P@e4 4. Nf3 exf3 5. gxf3 N@c4 +6.P@e4 Qxe4 7. fxe4 P@f3 8. Q@g4 +* diff --git a/tests/test_weakset.cpp b/tests/test_weakset.cpp new file mode 100644 index 0000000..cc43d11 --- /dev/null +++ b/tests/test_weakset.cpp @@ -0,0 +1,66 @@ +//#define WEAK_SET_DEBUG +#include "../src/weakset.h" +#include +using boost::unit_test::test_suite; + +template +uint weak_set_size(weak_set& w) { + uint c = 0; + for (typename weak_set::iterator i = w.begin(); + i != w.end(); ++i) { + ++c; + } + return c; +} + +void test_insertion() { + boost::shared_ptr n(new int(8)); + boost::shared_ptr m(new int(1)); + weak_set s; + s.insert(n); + s.insert(m); + + BOOST_CHECK_EQUAL(2, weak_set_size(s)); +} + +void test_garbage_collection() { + #ifdef WEAK_SET_DEBUG + kDebug()() << "\n\ntesting garbage collection\n\n" << endl; + #endif // WEAK_SET_DEBUG + + weak_set s; + + boost::shared_ptr u(new int(37)); + s.insert(u); + + { + boost::shared_ptr m(new int(1)); + s.insert(m); + } + + boost::shared_ptr n(new int(8)); + s.insert(n); + + BOOST_CHECK_EQUAL(2, weak_set_size(s)); +} + +void test_get() { + weak_set s; + boost::shared_ptr n(new int(42)); + + s.insert(n); + + BOOST_CHECK_EQUAL(42, *s.begin()); +} + +test_suite* +init_unit_test_suite(int, char*[]) { + test_suite* test= BOOST_TEST_SUITE( "Weak set test suite" ); + + test->add(BOOST_TEST_CASE(&test_insertion), 0); + test->add(BOOST_TEST_CASE(&test_garbage_collection), 0); + test->add(BOOST_TEST_CASE(&test_get), 0); + + return test; +} + diff --git a/tests/variants/CMakeLists.txt b/tests/variants/CMakeLists.txt new file mode 100644 index 0000000..02c3f25 --- /dev/null +++ b/tests/variants/CMakeLists.txt @@ -0,0 +1,23 @@ +set(main_dir "../../src/core") + +SET(variants_test_SRC + ../cppunit_main.cpp + boardtest.cpp + chesspiecetest.cpp + chessgamestatetest.cpp + chesslegalitytest.cpp + chessserializationtest.cpp + test_utils.cpp +) + +include_directories( + ${KDE4_INCLUDES} + ${Boost_INCLUDE_DIRS} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/${main_dir} +) + +add_executable(variants_test ${variants_test_SRC}) +target_link_libraries(variants_test ${CPPUNIT_LIBRARIES}) + +add_test(variants_test variants_test) diff --git a/tests/variants/boardtest.cpp b/tests/variants/boardtest.cpp new file mode 100644 index 0000000..3981726 --- /dev/null +++ b/tests/variants/boardtest.cpp @@ -0,0 +1,160 @@ +#include "boardtest.h" + +#include +#include +#include +#include +#include +#include + +#include "test_utils.h" + +using namespace Chess; + +CPPUNIT_TEST_SUITE_REGISTRATION(BoardTest); + +void BoardTest::setUp() { + m_board = new Board(Point(8,8)); +} + +void BoardTest::tearDown() { + delete m_board; +} + +void BoardTest::test_size() { + CPPUNIT_ASSERT_EQUAL(8, m_board->size().x); + CPPUNIT_ASSERT_EQUAL(8, m_board->size().y); +} + +void BoardTest::test_get_null() { + Piece x = m_board->get(Point(3, 2)); + CPPUNIT_ASSERT_EQUAL(Piece(), x); +} + +void BoardTest::test_set_get() { + Piece piece(White::self(), Knight::self()); + m_board->set(Point(3, 2), piece); + CPPUNIT_ASSERT_EQUAL(piece, m_board->get(Point(3, 2))); +} + +void BoardTest::test_valid() { + CPPUNIT_ASSERT(!m_board->valid(Point(-1, 3))); + CPPUNIT_ASSERT(!m_board->valid(Point(7, -1))); + CPPUNIT_ASSERT(!m_board->valid(Point(8, 0))); + CPPUNIT_ASSERT(!m_board->valid(Point(8, 7))); + + CPPUNIT_ASSERT(m_board->valid(Point(1, 3))); + CPPUNIT_ASSERT(m_board->valid(Point(4, 7))); + CPPUNIT_ASSERT(m_board->valid(Point(0, 0))); + CPPUNIT_ASSERT(m_board->valid(Point(7, 7))); +} + +void BoardTest::test_set_invalid() { + m_board->set(Point(8, 2), Piece(Black::self(), Knight::self())); + CPPUNIT_ASSERT_EQUAL(Piece(), m_board->get(Point(8, 2))); +} + +void BoardTest::test_compare() { + Piece p1(White::self(), King::self()); + Piece p2(Black::self(), Knight::self()); + + m_board->set(Point(3, 4), p1); + m_board->set(Point(5, 1), p2); + + Board other(m_board->size()); + other.set(Point(3, 4), p1); + + CPPUNIT_ASSERT(!other.equals(m_board)); + + other.set(Point(5, 1), p2); + + CPPUNIT_ASSERT(other.equals(m_board)); +} + +void BoardTest::test_clone() { + Piece p1(White::self(), King::self()); + Piece p2(Black::self(), Knight::self()); + + m_board->set(Point(3, 4), p1); + + Board other(*m_board); + + CPPUNIT_ASSERT_EQUAL(p1, other.get(Point(3, 4))); + + m_board->set(Point(3, 5), p2); + + CPPUNIT_ASSERT_EQUAL(Piece(), other.get(Point(3, 5))); +} + +void BoardTest::test_pathinfo_h() { + PathInfo path = m_board->path(Point(3, 4), Point(6, 4)); + CPPUNIT_ASSERT(path.direction() == PathInfo::Horizontal); + CPPUNIT_ASSERT(path.parallel()); +} + +void BoardTest::test_pathinfo_v() { + PathInfo path = m_board->path(Point(7, 2), Point(7, 4)); + CPPUNIT_ASSERT(path.direction() == PathInfo::Vertical); + CPPUNIT_ASSERT(path.parallel()); +} + +void BoardTest::test_pathinfo_d() { + PathInfo path = m_board->path(Point(3, 3), Point(5, 5)); + CPPUNIT_ASSERT(path.diagonal()); + + path = m_board->path(Point(2, 7), Point(5, 4)); + CPPUNIT_ASSERT(path.diagonal()); +} + +void BoardTest::test_pathinfo_invalid() { + PathInfo path = m_board->path(Point(-1, 3), Point(7, 3)); + CPPUNIT_ASSERT(!path.valid()); + + path = m_board->path(Point(3, 3), Point(5, 4)); + CPPUNIT_ASSERT(!path.valid()); +} + +void BoardTest::test_pathinfo_obstacles() { + Piece p1(White::self(), King::self()); + Piece p2(Black::self(), Knight::self()); + + PathInfo path = m_board->path(Point(1, 1), Point(4, 4)); + CPPUNIT_ASSERT(path.clear()); + + m_board->set(Point(2, 2), p1); + path = m_board->path(Point(1, 1), Point(4, 4)); + CPPUNIT_ASSERT(!path.clear()); + CPPUNIT_ASSERT_EQUAL(1, path.numObstacles()); + + m_board->set(Point(6, 2), p2); + path = m_board->path(Point(0, 2), Point(5, 2)); + CPPUNIT_ASSERT_EQUAL(1, path.numObstacles()); + + path = m_board->path(Point(0, 2), Point(6, 2)); + CPPUNIT_ASSERT_EQUAL(1, path.numObstacles()); + + path = m_board->path(Point(0, 2), Point(7, 2)); + CPPUNIT_ASSERT_EQUAL(2, path.numObstacles()); + + path = m_board->path(Point(2, 2), Point(6, 2)); + CPPUNIT_ASSERT(path.clear()); +} + +void BoardTest::test_find() { + Piece p1(Black::self(), King::self()); + Piece p2(Black::self(), Knight::self()); + Piece p3(White::self(), King::self()); + + m_board->set(Point(3, 4), p1); + m_board->set(Point(5, 6), p2); + m_board->set(Point(7, 7), p2); + + CPPUNIT_ASSERT(m_board->find(p3) == Point::invalid()); + CPPUNIT_ASSERT(m_board->find(p2) == Point(5, 6)); + CPPUNIT_ASSERT(m_board->find(p1) == Point(3, 4)); +} + + + + + diff --git a/tests/variants/boardtest.h b/tests/variants/boardtest.h new file mode 100644 index 0000000..0c63c02 --- /dev/null +++ b/tests/variants/boardtest.h @@ -0,0 +1,54 @@ +#ifndef BOARDTEST_H +#define BOARDTEST_H + +#include +#include +#include +#include +#include + +class Board; + +class BoardTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(BoardTest); + CPPUNIT_TEST(test_size); + CPPUNIT_TEST(test_get_null); + CPPUNIT_TEST(test_set_get); + CPPUNIT_TEST(test_valid); + CPPUNIT_TEST(test_set_invalid); + CPPUNIT_TEST(test_compare); + CPPUNIT_TEST(test_clone); + CPPUNIT_TEST(test_find); + + CPPUNIT_TEST(test_pathinfo_h); + CPPUNIT_TEST(test_pathinfo_v); + CPPUNIT_TEST(test_pathinfo_d); + CPPUNIT_TEST(test_pathinfo_invalid); + CPPUNIT_TEST(test_pathinfo_obstacles); + CPPUNIT_TEST_SUITE_END(); +private: + Board* m_board; +public: + void setUp(); + void tearDown(); + + // basic stuff + void test_size(); + void test_get_null(); + void test_set_get(); + void test_valid(); + void test_set_invalid(); + void test_compare(); + void test_clone(); + void test_find(); + + // path info + void test_pathinfo_h(); + void test_pathinfo_v(); + void test_pathinfo_d(); + void test_pathinfo_invalid(); + void test_pathinfo_obstacles(); +}; + +#endif // BOARDTEST_H + diff --git a/tests/variants/chessgamestatetest.cpp b/tests/variants/chessgamestatetest.cpp new file mode 100644 index 0000000..13a07dc --- /dev/null +++ b/tests/variants/chessgamestatetest.cpp @@ -0,0 +1,137 @@ +#include "chessgamestatetest.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_utils.h" + +CPPUNIT_TEST_SUITE_REGISTRATION(ChessGameStateTest); + +Variant* chess_variant_factory(); + +using namespace Chess; + +void ChessGameStateTest::setUp() { + m_chess = chess_variant_factory(); + IStateFactory* fact = requestComponent( + m_chess, "state_factory"); + m_state = dynamic_cast(fact->createState()); + m_state->setup(); +} + +void ChessGameStateTest::tearDown() { + delete m_state; + delete m_chess; +} + +void ChessGameStateTest::test_setup() { + for (int i = 0; i < 8; i++) { + CPPUNIT_ASSERT_EQUAL( + Piece(Black::self(), Pawn::self()), + m_state->board()->get(Point(i, 1))); + CPPUNIT_ASSERT_EQUAL( + Piece(White::self(), Pawn::self()), + m_state->board()->get(Point(i, 6))); + CPPUNIT_ASSERT_EQUAL(Piece(), + m_state->board()->get(Point(i, 4))); + } + + CPPUNIT_ASSERT_EQUAL( + Piece(Black::self(), Rook::self()), + m_state->board()->get(Point(0, 0))); + CPPUNIT_ASSERT_EQUAL( + Piece(White::self(), King::self()), + m_state->board()->get(Point(4, 7))); +} + +void ChessGameStateTest::test_simple_move() { + m_state->move(Move(Point(4, 6), Point(4, 5))); // e3 + CPPUNIT_ASSERT_EQUAL(Piece(), + m_state->board()->get(Point(4, 6))); + CPPUNIT_ASSERT_EQUAL( + Piece(White::self(), Pawn::self()), + m_state->board()->get(Point(4, 5))); +} + +void ChessGameStateTest::test_capture() { + m_state->move(Move(Point(4, 6), Point(4, 4))); // e4 + m_state->move(Move(Point(3, 1), Point(3, 3))); // d5 + m_state->move(Move(Point(4, 4), Point(3, 3))); // exd5 + + CPPUNIT_ASSERT_EQUAL( + Piece(White::self(), Pawn::self()), + m_state->board()->get(Point(3, 3))); +} + +void ChessGameStateTest::test_en_passant() { + m_state->move(Move(Point(4, 6), Point(4, 4))); // e4 + m_state->move(Move(Point(7, 1), Point(7, 2))); // h6 + m_state->move(Move(Point(4, 4), Point(4, 3))); // e5 + + Move d5(Point(3, 1), Point(3, 3)); + d5.setType("en_passant_trigger"); + m_state->move(d5); + + CPPUNIT_ASSERT_EQUAL( + Point(3, 2), + m_state->flags().get("en_passant_square").value()); + + Move exd6(Point(4, 3), Point(3, 2)); + exd6.setType("en_passant_capture"); + m_state->move(exd6); + + CPPUNIT_ASSERT_EQUAL(Piece(), + m_state->board()->get(Point(3, 3))); +} + +void ChessGameStateTest::test_kingside_castling() { + Move oo(Point(4, 7), Point(6, 7)); + oo.setType("king_side_castling"); + m_state->move(oo); + + CPPUNIT_ASSERT_EQUAL( + Piece(White::self(), King::self()), + m_state->board()->get(Point(6, 7))); + CPPUNIT_ASSERT_EQUAL( + Piece(White::self(), Rook::self()), + m_state->board()->get(Point(5, 7))); + CPPUNIT_ASSERT_EQUAL(Piece(), + m_state->board()->get(Point(7, 7))); +} + +void ChessGameStateTest::test_queenside_castling() { + Move oo(Point(4, 7), Point(2, 7)); + oo.setType("queen_side_castling"); + m_state->move(oo); + + CPPUNIT_ASSERT_EQUAL( + Piece(White::self(), King::self()), + m_state->board()->get(Point(2, 7))); + CPPUNIT_ASSERT_EQUAL( + Piece(White::self(), Rook::self()), + m_state->board()->get(Point(3, 7))); + CPPUNIT_ASSERT_EQUAL(Piece(), + m_state->board()->get(Point(0, 7))); +} + +void ChessGameStateTest::test_promotion() { + m_state->board()->set(Point(7, 1), Piece(White::self(), Pawn::self())); + Move h8B(Point(7, 1), Point(7, 0), Bishop::self()); + m_state->move(h8B); + + CPPUNIT_ASSERT_EQUAL( + Piece(White::self(), Bishop::self()), + m_state->board()->get(Point(7, 0))); +} + + diff --git a/tests/variants/chessgamestatetest.h b/tests/variants/chessgamestatetest.h new file mode 100644 index 0000000..b5f4ce4 --- /dev/null +++ b/tests/variants/chessgamestatetest.h @@ -0,0 +1,40 @@ +#ifndef CHESSGAMESTATETEST_H +#define CHESSGAMESTATETEST_H + +#include +#include +#include +#include +#include + +class IDefaultState; +class Variant; + +class ChessGameStateTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(ChessGameStateTest); + CPPUNIT_TEST(test_setup); + CPPUNIT_TEST(test_simple_move); + CPPUNIT_TEST(test_capture); + CPPUNIT_TEST(test_en_passant); + CPPUNIT_TEST(test_kingside_castling); + CPPUNIT_TEST(test_queenside_castling); + CPPUNIT_TEST(test_promotion); + CPPUNIT_TEST_SUITE_END(); +private: + Variant* m_chess; + IDefaultState* m_state; +public: + void setUp(); + void tearDown(); + + void test_setup(); + void test_simple_move(); + void test_capture(); + void test_en_passant(); + void test_kingside_castling(); + void test_queenside_castling(); + void test_promotion(); +}; + +#endif // CHESSGAMESTATETEST_H + diff --git a/tests/variants/chesslegalitytest.cpp b/tests/variants/chesslegalitytest.cpp new file mode 100644 index 0000000..c86fad0 --- /dev/null +++ b/tests/variants/chesslegalitytest.cpp @@ -0,0 +1,192 @@ +#include "chesslegalitytest.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_utils.h" + +using namespace Chess; + +Variant* chess_variant_factory(); + +CPPUNIT_TEST_SUITE_REGISTRATION(ChessLegalityTest); + +void ChessLegalityTest::setUp() { + m_chess = chess_variant_factory(); + IStateFactory* fact = requestComponent( + m_chess, "state_factory"); + m_state = dynamic_cast(fact->createState()); + m_validator = requestComponent( + m_chess, "validator"); + + m_state->setup(); +} + +void ChessLegalityTest::tearDown() { + delete m_state; + delete m_chess; +} + +void ChessLegalityTest::test_movements() { + Move e4(Point(4, 6), Point(4, 4)); + CPPUNIT_ASSERT(m_validator->legal(m_state, e4)); + CPPUNIT_ASSERT(e4.type() == "en_passant_trigger"); + + Move crazy(Point(0, 0), Point(7, 4)); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, crazy)); +} + +void ChessLegalityTest::test_pseudolegal() { + Move e4(Point(4, 6), Point(4, 4)); + CPPUNIT_ASSERT(m_validator->pseudolegal(m_state, e4)); + + Move e5(Point(4, 6), Point(4, 3)); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, e5)); + + Move Nf3(Point(6, 7), Point(5, 5)); + CPPUNIT_ASSERT(m_validator->pseudolegal(m_state, Nf3)); + + Move Bc4(Point(5, 7), Point(2, 4)); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, Bc4)); + + // black moves + m_state->advanceTurn(); + + Move crazy(Point(0, 0), Point(4, 7)); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, crazy)); + + Move e5_(Point(4, 1), Point(4, 3)); + CPPUNIT_ASSERT(m_validator->pseudolegal(m_state, e5_)); +} + +void ChessLegalityTest::test_simple_move() { + Move e4(Point(4, 6), Point(4, 4)); + CPPUNIT_ASSERT(m_validator->legal(m_state, e4)); + + Move e5(Point(4, 6), Point(4, 3)); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, e5)); + + Move Nf3(Point(6, 7), Point(5, 5)); + CPPUNIT_ASSERT(m_validator->legal(m_state, Nf3)); + + Move Bc4(Point(5, 7), Point(2, 4)); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, Bc4)); + + { + Move tmp(Point(5, 7), Point(2, 4)); + m_state->board()->set(Point(4, 6), Piece()); + CPPUNIT_ASSERT(m_validator->legal(m_state, tmp)); + } + + Move e6(Point(4, 1), Point(4, 2)); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, e6)); + + { + Move tmp(Point(4, 1), Point(4, 2)); + m_state->advanceTurn(); + CPPUNIT_ASSERT(m_validator->legal(m_state, tmp)); + } +} + +void ChessLegalityTest::test_promotion() { + m_state->board()->set(Point(7, 1), Piece(White::self(), Pawn::self())); + Move h8Q(Point(7, 1), Point(7, 0), Queen::self()); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, h8Q)); + + Move hxg8R(Point(7, 1), Point(6, 0), Rook::self()); + CPPUNIT_ASSERT(m_validator->pseudolegal(m_state, hxg8R)); + CPPUNIT_ASSERT(m_validator->legal(m_state, hxg8R)); + CPPUNIT_ASSERT_EQUAL( + static_cast(Rook::self()), + hxg8R.promotion()); +} + +void ChessLegalityTest::test_en_passant() { + m_state->move(Move(Point(4, 6), Point(4, 4))); + m_state->move(Move(Point(7, 1), Point(7, 2))); + m_state->move(Move(Point(4, 4), Point(4, 3))); + + Move d5(Point(3, 1), Point(3, 3)); + CPPUNIT_ASSERT(m_validator->legal(m_state, d5)); + CPPUNIT_ASSERT(d5.type() == "en_passant_trigger"); + m_state->move(d5); + + Move exd6(Point(4, 3), Point(3, 2)); + CPPUNIT_ASSERT(m_validator->legal(m_state, exd6)); + CPPUNIT_ASSERT(m_state->captureSquare(exd6) == Point(3, 3)); + + m_state->move(Move(Point(7, 6), Point(7, 5))); + m_state->move(Move(Point(7, 2), Point(7, 3))); + + Move tmp(Point(4, 3), Point(3, 2)); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, tmp)); +} + +void ChessLegalityTest::test_castling() { + Move oo(Point(4, 7), Point(6, 7)); + + m_state->board()->set(Point(6, 7), Piece()); + { + Move tmp(oo); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, tmp)); + } + + m_state->board()->set(Point(5, 7), Piece()); + { + Move tmp(oo); + CPPUNIT_ASSERT(m_validator->legal(m_state, tmp)); + } + + m_state->board()->set(Point(3, 6), Piece(Black::self(), Pawn::self())); + { + Move tmp(oo); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, tmp)); + } + + m_state->board()->set(Point(3, 6), Piece()); + m_state->board()->set(Point(4, 6), Piece(Black::self(), Pawn::self())); + { + Move tmp(oo); + CPPUNIT_ASSERT(!m_validator->pseudolegal(m_state, tmp)); + } +} + +void ChessLegalityTest::test_attack1() { + m_state->board()->set(Point(5, 5), Piece(Black::self(), Rook::self())); + CPPUNIT_ASSERT(m_validator->attacks(m_state, White::self(), Point(5, 5))); +} + +void ChessLegalityTest::test_attack2() { + m_state->board()->set(Point(4, 4), Piece(Black::self(), Queen::self())); + CPPUNIT_ASSERT(!m_validator->attacks(m_state, White::self(), Point(4, 4))); +} + +void ChessLegalityTest::test_attack3() { + m_state->board()->set(Point(0, 5), Piece(Black::self(), King::self())); + m_state->board()->set(Point(1, 6), Piece(White::self(), Rook::self())); // b2: pawn -> rook + CPPUNIT_ASSERT(m_validator->attacks(m_state, White::self(), Point(0, 5))); + + m_state->board()->set(Point(1, 7), Piece()); // remove knight on b1 + CPPUNIT_ASSERT(!m_validator->attacks(m_state, White::self(), Point(0, 5))); + + m_state->board()->set(Point(0, 6), Piece()); // remove pawn on a2 + CPPUNIT_ASSERT(m_validator->attacks(m_state, White::self(), Point(0, 5))); + + m_state->board()->set(Point(0, 7), Piece()); // remove rook on a1 + CPPUNIT_ASSERT(!m_validator->attacks(m_state, White::self(), Point(0, 5))); +} + +void ChessLegalityTest::test_attack4() { + CPPUNIT_ASSERT(!m_validator->attacks(m_state, Black::self(), Point(4, 7))); +} + diff --git a/tests/variants/chesslegalitytest.h b/tests/variants/chesslegalitytest.h new file mode 100644 index 0000000..144603e --- /dev/null +++ b/tests/variants/chesslegalitytest.h @@ -0,0 +1,49 @@ +#ifndef CHESSGAMESTATETEST_H +#define CHESSGAMESTATETEST_H + +#include +#include +#include +#include +#include + +class IDefaultState; +class IValidator; +class Variant; + +class ChessLegalityTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(ChessLegalityTest); + CPPUNIT_TEST(test_movements); + CPPUNIT_TEST(test_pseudolegal); + CPPUNIT_TEST(test_simple_move); + CPPUNIT_TEST(test_promotion); + CPPUNIT_TEST(test_en_passant); + CPPUNIT_TEST(test_castling); + CPPUNIT_TEST(test_attack1); + CPPUNIT_TEST(test_attack2); + CPPUNIT_TEST(test_attack3); + CPPUNIT_TEST(test_attack4); + CPPUNIT_TEST_SUITE_END(); +private: + Variant* m_chess; + IDefaultState* m_state; + IValidator* m_validator; +public: + void setUp(); + void tearDown(); + + void test_movements(); + void test_pseudolegal(); + void test_simple_move(); + void test_promotion(); + void test_en_passant(); + void test_castling(); + void test_attack1(); + void test_attack2(); + void test_attack3(); + void test_attack4(); +}; + +#endif // CHESSGAMESTATETEST_H + + diff --git a/tests/variants/chesspiecetest.cpp b/tests/variants/chesspiecetest.cpp new file mode 100644 index 0000000..2be631b --- /dev/null +++ b/tests/variants/chesspiecetest.cpp @@ -0,0 +1,55 @@ +#include "chesspiecetest.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Chess; + +CPPUNIT_TEST_SUITE_REGISTRATION(ChessPieceTest); + +Variant* chess_variant_factory(); + +void ChessPieceTest::setUp() { + m_chess = chess_variant_factory(); + m_namer = requestComponent(m_chess, "namer"); +} + +void ChessPieceTest::tearDown() { + delete m_chess; +} + +void ChessPieceTest::test_basic() { + Piece p(White::self(), Rook::self()); + CPPUNIT_ASSERT_EQUAL( + static_cast(White::self()), + p.color()); + CPPUNIT_ASSERT_EQUAL( + static_cast(Rook::self()), + p.type()); +} + +void ChessPieceTest::test_names() { + Piece p(Black::self(), Bishop::self()); + CPPUNIT_ASSERT(p.color()->name() == "black"); + CPPUNIT_ASSERT(p.type()->name() == "bishop"); + CPPUNIT_ASSERT(m_namer->name(p) == "black_bishop"); +} + +void ChessPieceTest::test_compare() { + Piece a(Black::self(), King::self()); + Piece b(White::self(), Queen::self()); + Piece c(Black::self(), King::self()); + + CPPUNIT_ASSERT(a != b); + CPPUNIT_ASSERT(!(a == b)); + CPPUNIT_ASSERT(a == c); + CPPUNIT_ASSERT(c == a); + CPPUNIT_ASSERT(a == a); +} + diff --git a/tests/variants/chesspiecetest.h b/tests/variants/chesspiecetest.h new file mode 100644 index 0000000..cb34fdf --- /dev/null +++ b/tests/variants/chesspiecetest.h @@ -0,0 +1,32 @@ +#ifndef CHESSPIECETEST_H +#define CHESSPIECETEST_H + +#include +#include +#include +#include +#include + +class INamer; +class Variant; + +class ChessPieceTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(ChessPieceTest); + CPPUNIT_TEST(test_basic); + CPPUNIT_TEST(test_names); + CPPUNIT_TEST(test_compare); + CPPUNIT_TEST_SUITE_END(); + + Variant* m_chess; + INamer* m_namer; +public: + void setUp(); + void tearDown(); + + void test_basic(); + void test_names(); + void test_compare(); +}; + +#endif // CHESSPIECETEST_H + diff --git a/tests/variants/chessserializationtest.cpp b/tests/variants/chessserializationtest.cpp new file mode 100644 index 0000000..2cef3a4 --- /dev/null +++ b/tests/variants/chessserializationtest.cpp @@ -0,0 +1,194 @@ +#include "chessserializationtest.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_utils.h" + +using namespace Chess; + +CPPUNIT_TEST_SUITE_REGISTRATION(ChessSerializationTest); + +Variant* chess_variant_factory(); + +void ChessSerializationTest::setUp() { + m_chess = chess_variant_factory(); + IStateFactory* fact = requestComponent( + m_chess, "state_factory"); + m_state = dynamic_cast(fact->createState()); + m_validator = requestComponent( + m_chess, "validator"); + m_decorator = requestComponent( + m_chess, "move_serializer/decorated"); + m_san = requestComponent( + m_chess, "move_serializer/san"); + m_simple = requestComponent( + m_chess, "move_serializer/simple"); +} + +void ChessSerializationTest::tearDown() { + delete m_state; + delete m_chess; +} + +void ChessSerializationTest::test_pawn() { + m_state->setup(); + + Move move(Point(4, 6), Point(4, 4)); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("e4"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("e2e4"), m_simple->serialize(move, m_state)); +} + +void ChessSerializationTest::test_check() { + m_state->board()->set(Point(5, 5), Piece(Black::self(), King::self())); + m_state->board()->set(Point(0, 0), Piece(White::self(), King::self())); + m_state->board()->set(Point(3, 5), Piece(White::self(), Bishop::self())); + + Move move(Point(3, 5), Point(4, 4)); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("Be4+"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("d3e4"), m_simple->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("{bishop}e4+"), m_decorator->serialize(move, m_state)); +} + +void ChessSerializationTest::test_check_capture() { + m_state->board()->set(Point(5, 5), Piece(Black::self(), King::self())); + m_state->board()->set(Point(0, 0), Piece(White::self(), King::self())); + m_state->board()->set(Point(3, 5), Piece(White::self(), Bishop::self())); + m_state->board()->set(Point(4, 4), Piece(Black::self(), Rook::self())); + + Move move(Point(3, 5), Point(4, 4)); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("Bxe4+"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("d3e4"), m_simple->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("{bishop}xe4+"), m_decorator->serialize(move, m_state)); +} + +void ChessSerializationTest::test_promotion() { + m_state->board()->set(Point(4, 7), Piece(Black::self(), King::self())); + m_state->board()->set(Point(0, 0), Piece(White::self(), King::self())); + m_state->board()->set(Point(7, 1), Piece(White::self(), Pawn::self())); + + Move move(Point(7, 1), Point(7, 0), Rook::self()); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("h8=R"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("h7h8=R"), m_simple->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("h8={rook}"), m_decorator->serialize(move, m_state)); +} + +void ChessSerializationTest::test_promotion_capture() { + m_state->board()->set(Point(4, 7), Piece(Black::self(), King::self())); + m_state->board()->set(Point(0, 0), Piece(White::self(), King::self())); + m_state->board()->set(Point(7, 1), Piece(White::self(), Pawn::self())); + m_state->board()->set(Point(6, 0), Piece(Black::self(), Bishop::self())); + + Move move(Point(7, 1), Point(6, 0), Rook::self()); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("hxg8=R"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("h7g8=R"), m_simple->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("hxg8={rook}"), m_decorator->serialize(move, m_state)); +} + +void ChessSerializationTest::test_promotion_check() { + m_state->board()->set(Point(4, 0), Piece(Black::self(), King::self())); + m_state->board()->set(Point(0, 0), Piece(White::self(), King::self())); + m_state->board()->set(Point(7, 1), Piece(White::self(), Pawn::self())); + + Move move(Point(7, 1), Point(7, 0), Rook::self()); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("h8=R+"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("h7h8=R"), m_simple->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("h8={rook}+"), m_decorator->serialize(move, m_state)); +} + +void ChessSerializationTest::test_promotion_capture_check() { + m_state->board()->set(Point(4, 0), Piece(Black::self(), King::self())); + m_state->board()->set(Point(0, 0), Piece(White::self(), King::self())); + m_state->board()->set(Point(7, 1), Piece(White::self(), Pawn::self())); + m_state->board()->set(Point(6, 0), Piece(Black::self(), Bishop::self())); + + Move move(Point(7, 1), Point(6, 0), Rook::self()); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("hxg8=R+"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("h7g8=R"), m_simple->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("hxg8={rook}+"), m_decorator->serialize(move, m_state)); +} + +void ChessSerializationTest::test_castling_k() { + m_state->setup(); + + m_state->board()->set(Point(5, 7), Piece()); + m_state->board()->set(Point(6, 7), Piece()); + + Move move(Point(4, 7), Point(6, 7)); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("O-O"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("e1g1"), m_simple->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("O-O"), m_decorator->serialize(move, m_state)); +} + +void ChessSerializationTest::test_castling_q() { + m_state->setup(); + + m_state->board()->set(Point(3, 7), Piece()); + m_state->board()->set(Point(2, 7), Piece()); + m_state->board()->set(Point(1, 7), Piece()); + + Move move(Point(4, 7), Point(2, 7)); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("O-O-O"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("e1c1"), m_simple->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("O-O-O"), m_decorator->serialize(move, m_state)); +} + +void ChessSerializationTest::regression_knight_king() { + m_state->setup(); + + Move move(Point(6, 7), Point(5, 5)); + CPPUNIT_ASSERT(m_validator->legal(m_state, move)); + + CPPUNIT_ASSERT_EQUAL(QString("Nf3"), m_san->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("g1f3"), m_simple->serialize(move, m_state)); + + CPPUNIT_ASSERT_EQUAL(QString("{knight}f3"), m_decorator->serialize(move, m_state)); +} + diff --git a/tests/variants/chessserializationtest.h b/tests/variants/chessserializationtest.h new file mode 100644 index 0000000..6444fa4 --- /dev/null +++ b/tests/variants/chessserializationtest.h @@ -0,0 +1,53 @@ +#ifndef CHESSSERIALIZATIONTEST_H +#define CHESSSERIALIZATIONTEST_H + +#include +#include +#include +#include +#include + +class IDefaultState; +class IMoveSerializer; +class IValidator; +class Variant; + +class ChessSerializationTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(ChessSerializationTest); + CPPUNIT_TEST(test_pawn); + CPPUNIT_TEST(test_check); + CPPUNIT_TEST(test_check_capture); + CPPUNIT_TEST(test_promotion); + CPPUNIT_TEST(test_promotion_capture); + CPPUNIT_TEST(test_promotion_check); + CPPUNIT_TEST(test_promotion_capture_check); + CPPUNIT_TEST(test_castling_k); + CPPUNIT_TEST(test_castling_q); + + CPPUNIT_TEST(regression_knight_king); + CPPUNIT_TEST_SUITE_END(); +private: + Variant* m_chess; + IDefaultState* m_state; + IValidator* m_validator; + IMoveSerializer* m_decorator; + IMoveSerializer* m_san; + IMoveSerializer* m_simple; +public: + void setUp(); + void tearDown(); + + void test_pawn(); + void test_check(); + void test_check_capture(); + void test_promotion(); + void test_promotion_capture(); + void test_promotion_check(); + void test_promotion_capture_check(); + void test_castling_k(); + void test_castling_q(); + + void regression_knight_king(); +}; + +#endif // CHESSSERIALIZATIONTEST_H diff --git a/tests/variants/pooltest.cpp b/tests/variants/pooltest.cpp new file mode 100644 index 0000000..3fe260e --- /dev/null +++ b/tests/variants/pooltest.cpp @@ -0,0 +1,104 @@ +#include "pooltest.h" + +#include "hlvariant/pool.h" +#include "hlvariant/poolcollection.h" +#include "hlvariant/chess/piece.h" + +CPPUNIT_TEST_SUITE_REGISTRATION(PoolTest); + +void PoolTest::setUp() { + m_pools = new ChessPoolCollection; +} + +void PoolTest::tearDown() { + delete m_pools; +} + +void PoolTest::test_empty_pool() { + CPPUNIT_ASSERT(m_pools->pool(ChessPiece::WHITE).empty()); + + CPPUNIT_ASSERT_EQUAL(0, m_pools->pool(ChessPiece::WHITE).count(ChessPiece::KING)); +} + +void PoolTest::test_add() { + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::KNIGHT); + CPPUNIT_ASSERT_EQUAL(1, m_pools->pool(ChessPiece::WHITE).count(ChessPiece::KNIGHT)); + + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::KNIGHT); + CPPUNIT_ASSERT_EQUAL(2, m_pools->pool(ChessPiece::WHITE).count(ChessPiece::KNIGHT)); +} + +void PoolTest::test_remove() { + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::ROOK); + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::ROOK); + + m_pools->pool(ChessPiece::WHITE).remove(ChessPiece::ROOK); + CPPUNIT_ASSERT_EQUAL(1, m_pools->pool(ChessPiece::WHITE).count(ChessPiece::ROOK)); +} + +void PoolTest::test_remove_clear() { + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::ROOK); + + m_pools->pool(ChessPiece::WHITE).remove(ChessPiece::ROOK); + CPPUNIT_ASSERT_EQUAL(0, m_pools->pool(ChessPiece::WHITE).count(ChessPiece::ROOK)); + CPPUNIT_ASSERT(m_pools->pool(ChessPiece::WHITE).empty()); +} + +void PoolTest::test_size() { + CPPUNIT_ASSERT_EQUAL(0, m_pools->pool(ChessPiece::WHITE).size()); + + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::ROOK); + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::ROOK); + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::KNIGHT); + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::KNIGHT); + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::KNIGHT); + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::BISHOP); + m_pools->pool(ChessPiece::BLACK).add(ChessPiece::BISHOP); + + CPPUNIT_ASSERT_EQUAL(6, m_pools->pool(ChessPiece::WHITE).size()); + CPPUNIT_ASSERT_EQUAL(1, m_pools->pool(ChessPiece::BLACK).size()); +} + +void PoolTest::test_empty_remove() { + m_pools->pool(ChessPiece::WHITE).remove(ChessPiece::BISHOP); + CPPUNIT_ASSERT_EQUAL(0, m_pools->pool(ChessPiece::WHITE).count(ChessPiece::ROOK)); + CPPUNIT_ASSERT(m_pools->pool(ChessPiece::WHITE).empty()); +} + +void PoolTest::test_pool_equality() { + CPPUNIT_ASSERT(m_pools->pool(ChessPiece::WHITE) != m_pools->pool(ChessPiece::BLACK)); + CPPUNIT_ASSERT(m_pools->pool(ChessPiece::WHITE) == m_pools->pool(ChessPiece::WHITE)); + + ChessPoolCollection other; + other.pool(ChessPiece::BLACK).add(ChessPiece::KING); + + CPPUNIT_ASSERT(m_pools->pool(ChessPiece::BLACK) != other.pool(ChessPiece::BLACK)); + + other.pool(ChessPiece::BLACK).remove(ChessPiece::KING); + + CPPUNIT_ASSERT(m_pools->pool(ChessPiece::BLACK) == other.pool(ChessPiece::BLACK)); + + other.pool(ChessPiece::WHITE).add(ChessPiece::ROOK); + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::ROOK); + + CPPUNIT_ASSERT(m_pools->pool(ChessPiece::WHITE) == other.pool(ChessPiece::WHITE)); +} + +void PoolTest::test_collection_equality() { + CPPUNIT_ASSERT((*m_pools) == (*m_pools)); + + ChessPoolCollection other; + other.pool(ChessPiece::BLACK).add(ChessPiece::KING); + + CPPUNIT_ASSERT((*m_pools) != other); + + other.pool(ChessPiece::BLACK).remove(ChessPiece::KING); + + CPPUNIT_ASSERT((*m_pools) == other); + + other.pool(ChessPiece::WHITE).add(ChessPiece::ROOK); + m_pools->pool(ChessPiece::WHITE).add(ChessPiece::ROOK); + + CPPUNIT_ASSERT((*m_pools) == other); +} + diff --git a/tests/variants/pooltest.h b/tests/variants/pooltest.h new file mode 100644 index 0000000..bebd58c --- /dev/null +++ b/tests/variants/pooltest.h @@ -0,0 +1,50 @@ +#ifndef POOLTEST_H +#define POOLTEST_H + +#include +#include +#include +#include +#include + +namespace HLVariant { + template class Pool; + template class PoolCollection; + namespace Chess { + class Piece; + } +} + +typedef HLVariant::Chess::Piece ChessPiece; +typedef HLVariant::Pool ChessPool; +typedef HLVariant::PoolCollection ChessPoolCollection; + +class PoolTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(PoolTest); + CPPUNIT_TEST(test_empty_pool); + CPPUNIT_TEST(test_add); + CPPUNIT_TEST(test_remove); + CPPUNIT_TEST(test_remove_clear); + CPPUNIT_TEST(test_size); + CPPUNIT_TEST(test_empty_remove); + CPPUNIT_TEST(test_pool_equality); + CPPUNIT_TEST(test_collection_equality); + CPPUNIT_TEST_SUITE_END(); +private: + ChessPoolCollection* m_pools; +public: + void setUp(); + void tearDown(); + + void test_empty_pool(); + void test_add(); + void test_remove(); + void test_remove_clear(); + void test_size(); + void test_empty_remove(); + void test_pool_equality(); + void test_collection_equality(); +}; + +#endif // POOLTEST_H + diff --git a/tests/variants/test_utils.cpp b/tests/variants/test_utils.cpp new file mode 100644 index 0000000..780bb22 --- /dev/null +++ b/tests/variants/test_utils.cpp @@ -0,0 +1,27 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#include "test_utils.h" +#include +#include +#include +#include +#include + +std::ostream& operator<<(std::ostream& os, const Piece& piece) { + if (piece.color() && piece.type()) + return os << qPrintable(piece.color()->name()) + << " " << qPrintable(piece.type()->name()); + else + return os << ""; +} + +std::ostream& operator<<(std::ostream& os, const QString& str) { + return os << qPrintable(str); +} diff --git a/tests/variants/test_utils.h b/tests/variants/test_utils.h new file mode 100644 index 0000000..e2bde3e --- /dev/null +++ b/tests/variants/test_utils.h @@ -0,0 +1,21 @@ +/* + Copyright (c) 2007 Paolo Capriotti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +*/ + +#ifndef TEST_UTILS_H +#define TEST_UTILS_H + +#include + +class Piece; +class QString; + +std::ostream& operator<<(std::ostream& os, const Piece& piece); +std::ostream& operator<<(std::ostream& os, const QString& str); + +#endif // TEST_UTILS_H diff --git a/tests/weak_set/CMakeLists.txt b/tests/weak_set/CMakeLists.txt new file mode 100644 index 0000000..eca7fef --- /dev/null +++ b/tests/weak_set/CMakeLists.txt @@ -0,0 +1,17 @@ +set(main_dir "../../src") + +SET(weakset_SRC + weakset_test.cpp + ../cppunit_main.cpp +) + +include_directories( + ${Boost_INCLUDE_DIRS} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/${main_dir} +) + +add_executable(weakset_test ${weakset_SRC}) +target_link_libraries(weakset_test ${CPPUNIT_LIBRARIES}) + +add_test(weakset weakset_test) diff --git a/tests/weak_set/test_weakset.cpp b/tests/weak_set/test_weakset.cpp new file mode 100644 index 0000000..7c11dfc --- /dev/null +++ b/tests/weak_set/test_weakset.cpp @@ -0,0 +1,77 @@ +#include "weakset.h" +#include +using boost::unit_test::test_suite; + +template +uint weak_set_size(weak_set& w) { + uint c = 0; + for (typename weak_set::iterator i = w.begin(); + i != w.end(); ++i) { + ++c; + } + return c; +} + +void test_insertion() { + boost::shared_ptr n(new int(8)); + boost::shared_ptr m(new int(1)); + weak_set s; + s.insert(n); + s.insert(m); + + BOOST_CHECK_EQUAL(2, weak_set_size(s)); +} + +void test_garbage_collection() { + #ifdef WEAK_SET_DEBUG + kDebug()() << "\n\ntesting garbage collection\n\n" << endl; + #endif // WEAK_SET_DEBUG + + weak_set s; + + boost::shared_ptr u(new int(37)); + s.insert(u); + + { + boost::shared_ptr m(new int(1)); + s.insert(m); + } + + boost::shared_ptr n(new int(8)); + s.insert(n); + + BOOST_CHECK_EQUAL(2, weak_set_size(s)); +} + +void test_get() { + weak_set s; + boost::shared_ptr n(new int(42)); + + s.insert(n); + + BOOST_CHECK_EQUAL(42, *s.begin()); +} + +void test_empty() { + weak_set s; + + { + boost::shared_ptr m(new int(37)); + s.insert(m); + } + + BOOST_CHECK_EQUAL(0, weak_set_size(s)); +} + +test_suite* +init_unit_test_suite(int, char*[]) { + test_suite* test= BOOST_TEST_SUITE( "Weak set test suite" ); + + test->add(BOOST_TEST_CASE(&test_insertion), 0); + test->add(BOOST_TEST_CASE(&test_garbage_collection), 0); + test->add(BOOST_TEST_CASE(&test_get), 0); + test->add(BOOST_TEST_CASE(&test_empty), 0); + + return test; +} + diff --git a/tests/weak_set/weakset_test.cpp b/tests/weak_set/weakset_test.cpp new file mode 100644 index 0000000..d4ba6b2 --- /dev/null +++ b/tests/weak_set/weakset_test.cpp @@ -0,0 +1,62 @@ +#include "weakset_test.h" +#include "weakset.h" + +CPPUNIT_TEST_SUITE_REGISTRATION(WeaksetTest); + +template +uint weak_set_size(weak_set& w) { + uint c = 0; + for (typename weak_set::iterator i = w.begin(); + i != w.end(); ++i) { + ++c; + } + return c; +} + +void WeaksetTest::test_insertion() { + boost::shared_ptr n(new int(8)); + boost::shared_ptr m(new int(1)); + weak_set s; + s.insert(n); + s.insert(m); + + CPPUNIT_ASSERT_EQUAL(2U, weak_set_size(s)); +} + +void WeaksetTest::test_garbage_collection() { + weak_set s; + + boost::shared_ptr u(new int(37)); + s.insert(u); + + { + boost::shared_ptr m(new int(1)); + s.insert(m); + } + + boost::shared_ptr n(new int(8)); + s.insert(n); + + CPPUNIT_ASSERT_EQUAL(2U, weak_set_size(s)); +} + +void WeaksetTest::test_get() { + weak_set s; + boost::shared_ptr n(new int(42)); + + s.insert(n); + + CPPUNIT_ASSERT_EQUAL(42, *s.begin()); +} + +void WeaksetTest::test_empty() { + weak_set s; + + { + boost::shared_ptr m(new int(37)); + s.insert(m); + } + + CPPUNIT_ASSERT_EQUAL(0U, weak_set_size(s)); +} + diff --git a/tests/weak_set/weakset_test.h b/tests/weak_set/weakset_test.h new file mode 100644 index 0000000..1188ee4 --- /dev/null +++ b/tests/weak_set/weakset_test.h @@ -0,0 +1,27 @@ +#ifndef WEAKSETTEST_H +#define WEAKSETTEST_H + +#include +#include +#include +#include +#include + +class WeaksetTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(WeaksetTest); + CPPUNIT_TEST(test_insertion); + CPPUNIT_TEST(test_garbage_collection); + CPPUNIT_TEST(test_get); + CPPUNIT_TEST(test_empty); + CPPUNIT_TEST_SUITE_END(); +public: + void setUp() { } + void tearDown() { } + + void test_insertion(); + void test_garbage_collection(); + void test_get(); + void test_empty(); +}; + +#endif // WEAKSETTEST_H diff --git a/translations/.gitignore b/translations/.gitignore new file mode 100644 index 0000000..becd153 --- /dev/null +++ b/translations/.gitignore @@ -0,0 +1 @@ +*.gmo diff --git a/translations/CMakeLists.txt b/translations/CMakeLists.txt new file mode 100644 index 0000000..eb5dada --- /dev/null +++ b/translations/CMakeLists.txt @@ -0,0 +1,21 @@ +find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt) + +if(NOT GETTEXT_MSGFMT_EXECUTABLE) + message("NOTE: msgfmt not found. Translations will *not* be installed") +else(NOT GETTEXT_MSGFMT_EXECUTABLE) + set(catalogname tagua) + + file(GLOB PO_FILES *.po) + + foreach(_poFile ${PO_FILES}) + message("Found translation: ${_poFile}") + get_filename_component(_lang ${_poFile} NAME_WE) + set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) + + add_custom_command(OUTPUT ${_gmoFile} + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile} + DEPENDS ${_poFile}) + add_custom_target(translation-${_lang} ALL DEPENDS ${_gmoFile}) + install(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_lang}/LC_MESSAGES/ RENAME ${catalogname}.mo) + endforeach(_poFile ${PO_FILES}) +endif(NOT GETTEXT_MSGFMT_EXECUTABLE) diff --git a/translations/cs.po b/translations/cs.po new file mode 100644 index 0000000..c44aaae --- /dev/null +++ b/translations/cs.po @@ -0,0 +1,752 @@ +# translation of cs.po to čeština +# translation of cs.po to +# translation of tagua.pot to Czech +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Karel Volný , 2007. +msgid "" +msgstr "" +"Project-Id-Version: cs\n" +"Report-Msgid-Bugs-To: http://trac.tagua-project.org\n" +"POT-Creation-Date: 2007-11-23 23:17+0100\n" +"PO-Revision-Date: 2007-11-29 18:54+0100\n" +"Last-Translator: Karel Volný \n" +"Language-Team: čeština \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: main.cpp:35 +msgid "Tagua" +msgstr "Tagua" + +#: main.cpp:37 +msgid "(C) 2006 Paolo Capriotti, Maurizio Monge" +msgstr "© 2006 Paolo Capriotti, Maurizio Monge" + +#: main.cpp:38 +msgid "Paolo Capriotti" +msgstr "Paolo Capriotti" + +#: main.cpp:39 +msgid "Maurizio Monge" +msgstr "Maurizio Monge" + +#: main.cpp:40 +msgid "Jani Huhtanen" +msgstr "Jani Huhtanen" + +#: main.cpp:40 +msgid "Gaussian blur code" +msgstr "kód gausovského rozostření" + +#: main.cpp:41 +msgid "Rici Lake" +msgstr "Rici Lake" + +#: main.cpp:41 +msgid "funclib lua library" +msgstr "knihovna funclib pro lua" + +#: main.cpp:42 +msgid "Riccardo Iaconelli" +msgstr "Riccardo Iaconelli" + +#: main.cpp:42 +msgid "Various fixes and cleanups" +msgstr "různé opravy a pročištění" + +#: main.cpp:43 +msgid "Yann Dirson" +msgstr "Yann Dirson" + +#: main.cpp:43 +msgid "Shogi related patches" +msgstr "patche pro šógi" + +#: main.cpp:44 +msgid "Pieter Stouten" +msgstr "Pieter Stouten" + +#: main.cpp:44 +msgid "Allowed free use of images on shogi.net" +msgstr "umožnění volného použití obrázků ze shogi.net" + +#: main.cpp:47 +msgid "Initial variant" +msgstr "původní varianta" + +#: mainwindow.cpp:78 +msgid "Move list" +msgstr "Seznam tahů" + +#: mainwindow.cpp:88 +msgid "FICS Connection" +msgstr "Připojení k FICS" + +#: mainwindow.cpp:91 +msgid "Console" +msgstr "Konsole" + +#: mainwindow.cpp:128 +msgid "E&ngines" +msgstr "&Programy" + +#: mainwindow.cpp:142 +msgid "Play as &white" +msgstr "Hrát za &bílého" + +#: mainwindow.cpp:148 +msgid "Play as &black" +msgstr "Hrát za &černého" + +#: mainwindow.cpp:155 +msgid "&Analyze" +msgstr "&Analyzovat" + +#: mainwindow.cpp:174 +msgid "&Back" +msgstr "&Zpět" + +#: mainwindow.cpp:175 +msgid "&Forward" +msgstr "&Vpřed" + +#: mainwindow.cpp:176 +msgid "Be&gin" +msgstr "Z&ačátek" + +#: mainwindow.cpp:177 +msgid "&End" +msgstr "&Konec" + +#: mainwindow.cpp:178 +msgid "&Connect" +msgstr "&Připojit" + +#: mainwindow.cpp:179 +msgid "&Disconnect" +msgstr "&Odpojit" + +#: mainwindow.cpp:186 +msgid "&Edit position" +msgstr "&Upravit posici" + +#: mainwindow.cpp:187 +msgid "&Clear board" +msgstr "&Vyčistit desku" + +#: mainwindow.cpp:188 +msgid "&Set starting position" +msgstr "&Nastavit počáteční posici" + +#: mainwindow.cpp:192 +msgid "&Flip view" +msgstr "&Otočit desku" + +#: mainwindow.cpp:194 +msgid "Toggle &console" +msgstr "Přepnout &konsoli" + +#: mainwindow.cpp:195 +msgid "Toggle &move list" +msgstr "Přepnout &seznam tahů" + +#: mainwindow.cpp:426 +msgid "You have specified a folder" +msgstr "Byl vybrán adresář" + +#: mainwindow.cpp:426 mainwindow.cpp:431 mainwindow.cpp:438 mainwindow.cpp:635 +msgid "Error" +msgstr "Chyba" + +#: mainwindow.cpp:431 +msgid "The specified file does not exist" +msgstr "Zadaný soubor neexistuje" + +#: mainwindow.cpp:438 +msgid "You do not have read permission to this file." +msgstr "Nemáte potřebná oprávnění k tomuto souboru." + +#: mainwindow.cpp:453 +msgid "Open PGN file" +msgstr "Otevřít soubor PNG" + +#: mainwindow.cpp:475 +msgid "Save PGN file" +msgstr "Uložit soubor PNG" + +#: mainwindow.cpp:635 +msgid "Error creating game" +msgstr "Chyba při vytváření hry" + +#: mainwindow.cpp:675 +msgid "Illegal move" +msgstr "Neplatný tah" + +#: pref_engines.cpp:39 +msgid "&Name:" +msgstr "&Jméno:" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 136 +#: pref_engines.cpp:47 extractedrc.cpp:131 +msgid "&Type:" +msgstr "&Typ:" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 147 +#: pref_engines.cpp:52 extractedrc.cpp:134 +msgid "XBoard" +msgstr "XBoard" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 152 +#: pref_engines.cpp:53 extractedrc.cpp:137 +msgid "UCI" +msgstr "UCI" + +#: pref_engines.cpp:54 +msgid "Tagua (textual)" +msgstr "Tagua (textové)" + +#: pref_engines.cpp:55 +msgid "Tagua (DBUS)" +msgstr "Tagua (DBUS)" + +#: pref_engines.cpp:56 +msgid "GNU Shogi" +msgstr "GNU Shogi" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 113 +#: pref_engines.cpp:61 extractedrc.cpp:128 +msgid "&Path:" +msgstr "&Cesta:" + +#: pref_engines.cpp:70 +msgid "&Work directory:" +msgstr "Pracovní &adresář:" + +#: pref_engines.cpp:93 +msgid "Choose a name for the engine" +msgstr "Zvolte jméno pro program" + +#: pref_engines.cpp:93 +msgid "No engine name" +msgstr "Není jméno pro program" + +#: qconnect.cpp:56 +msgid "Select timeseal binary" +msgstr "Vyberte program timeseal" + +#: qconnect.cpp:59 +msgid "Only local executables supported" +msgstr "Jsou podporovány pouze lokální programy" + +#: tabwidget.cpp:24 +msgid "Close the current tab" +msgstr "Zavřít současnou kartu" + +#. i18n: tag Text +#. i18n: file ./taguaui.rc line 15 +#: extractedrc.cpp:3 +msgid "&Edit" +msgstr "Ú&pravy" + +#. i18n: tag text +#. i18n: file ./taguaui.rc line 24 +#: extractedrc.cpp:6 +msgid "&Game" +msgstr "&Hra" + +#. i18n: tag text +#. i18n: file ./taguaui.rc line 33 +#: extractedrc.cpp:9 +msgid "&View" +msgstr "Po&hled" + +#. i18n: tag text +#. i18n: file ./taguaui.rc line 47 +#: extractedrc.cpp:12 +msgid "Game Toolbar" +msgstr "Nástrojová lišta hry" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 13 +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 13 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 13 +#: extractedrc.cpp:15 extractedrc.cpp:63 extractedrc.cpp:185 +msgid "Form" +msgstr "Formát" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 25 +#: extractedrc.cpp:18 +msgid "Round:" +msgstr "Kolo:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 35 +#: extractedrc.cpp:21 +msgid "Time:" +msgstr "Čas:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 54 +#: extractedrc.cpp:24 +msgid "Result:" +msgstr "Výsledek:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 61 +#: extractedrc.cpp:27 +msgid "Increment:" +msgstr "Přírůstek:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 71 +#: extractedrc.cpp:30 +msgid "Site:" +msgstr "Místo:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 78 +#: extractedrc.cpp:33 +msgid "Black rating:" +msgstr "Hodnocení černého:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 85 +#: extractedrc.cpp:36 +msgid "Event:" +msgstr "Událost:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 92 +#: extractedrc.cpp:39 +msgid "Black:" +msgstr "Černý:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 99 +#: extractedrc.cpp:42 +msgid "White:" +msgstr "Bílý:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 121 +#: extractedrc.cpp:45 +msgid "Date:" +msgstr "Datum:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 131 +#: extractedrc.cpp:48 +msgid "White rating:" +msgstr "Hodnocení bílého:" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 138 +#: extractedrc.cpp:51 +msgid "ECO:" +msgstr "ECO:" + +#. i18n: tag string +#. i18n: file ./ui/newgamedialog.ui line 13 +#: extractedrc.cpp:54 +msgid "New game" +msgstr "Nová hra" + +#. i18n: tag string +#. i18n: file ./ui/newgamedialog.ui line 39 +#. i18n: tag string +#. i18n: file ./ui/pref_theme.ui line 48 +#: extractedrc.cpp:57 extractedrc.cpp:238 +msgid "&Variant:" +msgstr "&Hra:" + +#. i18n: tag string +#. i18n: file ./ui/newgamedialog.ui line 74 +#: extractedrc.cpp:60 +msgid "Create in new &tab" +msgstr "Vytvořit v nové &kartě" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 36 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 36 +#: extractedrc.cpp:66 extractedrc.cpp:188 +msgid "&Animations" +msgstr "&Animace" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 51 +#: extractedrc.cpp:69 +msgid "&Transformations" +msgstr "&Transformace" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 58 +#: extractedrc.cpp:72 +msgid "&Explosions" +msgstr "&Explose" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 65 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 158 +#: extractedrc.cpp:75 extractedrc.cpp:208 +msgid "&Movements" +msgstr "Ta&hy" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 72 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 165 +#: extractedrc.cpp:78 extractedrc.cpp:211 +#, fuzzy +msgid "&Fading" +msgstr "&Mizení" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 88 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 60 +#: extractedrc.cpp:81 extractedrc.cpp:191 +msgid "" +"Rough\n" +"(little CPU usage)" +msgstr "Hrubé
    (malé využití CPU)" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 115 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 87 +#: extractedrc.cpp:85 extractedrc.cpp:195 +msgid "" +"Smooth\n" +"(high CPU usage)" +msgstr "Jemné
    (velké využití CPU)" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 130 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 179 +#: extractedrc.cpp:89 extractedrc.cpp:217 +msgid "Animation s&moothness:" +msgstr "&Plynulost animací:" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 151 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 123 +#: extractedrc.cpp:92 extractedrc.cpp:202 +msgid "Slow" +msgstr "Pomalu" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 177 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 146 +#: extractedrc.cpp:95 extractedrc.cpp:205 +msgid "Fast" +msgstr "Rychle" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 189 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 102 +#: extractedrc.cpp:98 extractedrc.cpp:199 +msgid "Animation s&peed:" +msgstr "&Rychlost animací:" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 231 +#: extractedrc.cpp:101 +msgid "&Max sequence length:" +msgstr "&Maximální délka posloupnosti:" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 253 +#: extractedrc.cpp:104 +msgid "Animate move &sequences" +msgstr "Animovat po&sloupnosti tahů:" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 277 +#: extractedrc.cpp:107 +msgid "&Border" +msgstr "&Okraj" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 292 +#: extractedrc.cpp:110 +msgid "&Color" +msgstr "&Barva" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 302 +#: extractedrc.cpp:113 +msgid "&Text Color" +msgstr "Barva &textu" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 320 +#: extractedrc.cpp:116 +msgid "Custom &font:" +msgstr "Uživatelské &písmo:" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 13 +#: extractedrc.cpp:119 +msgid "Engines" +msgstr "Programy" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 25 +#: extractedrc.cpp:122 +msgid "Engine list" +msgstr "Seznam programů" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 93 +#: extractedrc.cpp:125 +msgid "Engine properties" +msgstr "Vlastnosti programu" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 157 +#: extractedrc.cpp:140 +msgid "Tagua (text)" +msgstr "Tagua (textové)" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 162 +#: extractedrc.cpp:143 +msgid "Tagua (D-BUS)" +msgstr "Tagua (DBUS)" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 180 +#: extractedrc.cpp:146 +msgid "&Work dir:" +msgstr "Pracovní &adresář:" + +#. i18n: tag string +#. i18n: file ./ui/preferences.ui line 13 +#: extractedrc.cpp:149 +msgid "Change Tagua Settings" +msgstr "Změnit nastavení Tagua" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 13 +#: extractedrc.cpp:152 +msgid "Dialog" +msgstr "Dialog" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 47 +#: extractedrc.cpp:155 +msgid "Pattern" +msgstr "Vzorek" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 75 +#: extractedrc.cpp:158 +msgid "Bold" +msgstr "Tučné" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 82 +#: extractedrc.cpp:161 +msgid "Italic" +msgstr "Kursiva" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 148 +#: extractedrc.cpp:164 +msgid "Use this box to test your regular expression" +msgstr "Pro vyzkoušení regulárního výrazu použijte toto pole" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 186 +#: extractedrc.cpp:167 +msgid "Add" +msgstr "Přidat" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 193 +#: extractedrc.cpp:170 +msgid "Remove" +msgstr "Odstranit" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 223 +#: extractedrc.cpp:173 +msgid "Up" +msgstr "Nahoru" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 230 +#: extractedrc.cpp:176 +msgid "Down" +msgstr "Dolů" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 266 +#: extractedrc.cpp:179 +msgid "OK" +msgstr "OK" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 273 +#: extractedrc.cpp:182 +msgid "Cancel" +msgstr "Zrušit" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 172 +#: extractedrc.cpp:214 +msgid "&Smooth highlighting" +msgstr "&Jemné zvýrazňování" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 203 +#: extractedrc.cpp:220 +msgid "&Colors and fonts" +msgstr "&Barvy a písma" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 215 +#: extractedrc.cpp:223 +msgid "C&omments color:" +msgstr "Barva &poznámek:" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 233 +#: extractedrc.cpp:226 +msgid "Cus&tom comments font:" +msgstr "Uživatelské písmo pro po&známky:" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 243 +#: extractedrc.cpp:229 +msgid "C&ustom moves font:" +msgstr "Uživatelské písmo pro &tahy:" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 253 +#: extractedrc.cpp:232 +msgid "S&elected move color:" +msgstr "Barva &vybraného tahu:" + +#. i18n: tag string +#. i18n: file ./ui/pref_theme_page.ui line 31 +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 149 +#: extractedrc.cpp:235 extractedrc.cpp:271 +msgid "..." +msgstr "…" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 13 +#: extractedrc.cpp:241 +msgid "Quick Connect" +msgstr "Rychlé připojení" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 28 +#: extractedrc.cpp:244 +msgid "&Login" +msgstr "&Přihlášení" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 47 +#: extractedrc.cpp:247 +msgid "&Password:" +msgstr "&Heslo:" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 60 +#: extractedrc.cpp:250 +msgid "&Username:" +msgstr "&Uživatelské jméno:" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 70 +#: extractedrc.cpp:253 +msgid "&Store password on this computer" +msgstr "Uložit he&slo na tomto počítači" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 73 +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 182 +#: extractedrc.cpp:256 extractedrc.cpp:280 +msgid "Alt+S" +msgstr "Alt+S" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 83 +#: extractedrc.cpp:259 +msgid "Ser&ver:" +msgstr "Ser&ver:" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 98 +#: extractedrc.cpp:262 +msgid "ICS p&ort:" +msgstr "&Port pro ICS:" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 115 +#: extractedrc.cpp:265 +msgid "ICS &host:" +msgstr "&Hostitel ICS:" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 131 +#: extractedrc.cpp:268 +msgid "&Timeseal" +msgstr "&Timeseal" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 159 +#: extractedrc.cpp:274 +msgid "&File Path:" +msgstr "&Cesta k souboru:" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 179 +#: extractedrc.cpp:277 +msgid "Use &custom command line arguments" +msgstr "Použít &uživatelské parametry na příkazové řádce" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 232 +#: extractedrc.cpp:283 +msgid "&OK" +msgstr "&OK" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 248 +#: extractedrc.cpp:286 +msgid "&Cancel" +msgstr "&Zrušit" + +#: extractedrc.cpp:287 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Karel Volný" + +#: extractedrc.cpp:288 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kavol@seznam.cz" + diff --git a/translations/fr.po b/translations/fr.po new file mode 100644 index 0000000..3ad3f06 --- /dev/null +++ b/translations/fr.po @@ -0,0 +1,746 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: tagua 1.0-alpha\n" +"Report-Msgid-Bugs-To: http://trac.tagua-project.org\n" +"POT-Creation-Date: 2007-11-23 23:17+0100\n" +"PO-Revision-Date: 2007-12-09 16:58+0100\n" +"Last-Translator: Yann Dirson \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: main.cpp:35 +msgid "Tagua" +msgstr "" + +#: main.cpp:37 +msgid "(C) 2006 Paolo Capriotti, Maurizio Monge" +msgstr "" + +#: main.cpp:38 +msgid "Paolo Capriotti" +msgstr "" + +#: main.cpp:39 +msgid "Maurizio Monge" +msgstr "" + +#: main.cpp:40 +msgid "Jani Huhtanen" +msgstr "" + +#: main.cpp:40 +msgid "Gaussian blur code" +msgstr "" + +#: main.cpp:41 +msgid "Rici Lake" +msgstr "" + +#: main.cpp:41 +msgid "funclib lua library" +msgstr "" + +#: main.cpp:42 +msgid "Riccardo Iaconelli" +msgstr "" + +#: main.cpp:42 +msgid "Various fixes and cleanups" +msgstr "Divers correctifs et nettoyages" + +#: main.cpp:43 +msgid "Yann Dirson" +msgstr "" + +#: main.cpp:43 +msgid "Shogi related patches" +msgstr "" + +#: main.cpp:44 +msgid "Pieter Stouten" +msgstr "" + +#: main.cpp:44 +msgid "Allowed free use of images on shogi.net" +msgstr "" + +#: main.cpp:47 +msgid "Initial variant" +msgstr "" + +#: mainwindow.cpp:78 +msgid "Move list" +msgstr "Liste des coups" + +#: mainwindow.cpp:88 +msgid "FICS Connection" +msgstr "Connection FICS" + +#: mainwindow.cpp:91 +msgid "Console" +msgstr "Console" + +#: mainwindow.cpp:128 +msgid "E&ngines" +msgstr "" + +#: mainwindow.cpp:142 +msgid "Play as &white" +msgstr "Jouer les &blancs" + +#: mainwindow.cpp:148 +msgid "Play as &black" +msgstr "Jouer les &noirs" + +#: mainwindow.cpp:155 +msgid "&Analyze" +msgstr "Analyser" + +#: mainwindow.cpp:174 +msgid "&Back" +msgstr "Précédent" + +#: mainwindow.cpp:175 +msgid "&Forward" +msgstr "Suivant" + +#: mainwindow.cpp:176 +msgid "Be&gin" +msgstr "Début" + +#: mainwindow.cpp:177 +msgid "&End" +msgstr "Fin" + +#: mainwindow.cpp:178 +msgid "&Connect" +msgstr "Connexion" + +#: mainwindow.cpp:179 +msgid "&Disconnect" +msgstr "Déconnexion" + +#: mainwindow.cpp:186 +msgid "&Edit position" +msgstr "" + +#: mainwindow.cpp:187 +msgid "&Clear board" +msgstr "Vider le plateau" + +#: mainwindow.cpp:188 +msgid "&Set starting position" +msgstr "Etablir la position de départ" + +#: mainwindow.cpp:192 +msgid "&Flip view" +msgstr "" + +#: mainwindow.cpp:194 +msgid "Toggle &console" +msgstr "" + +#: mainwindow.cpp:195 +msgid "Toggle &move list" +msgstr "" + +#: mainwindow.cpp:426 +msgid "You have specified a folder" +msgstr "" + +#: mainwindow.cpp:426 mainwindow.cpp:431 mainwindow.cpp:438 mainwindow.cpp:635 +msgid "Error" +msgstr "" + +#: mainwindow.cpp:431 +msgid "The specified file does not exist" +msgstr "" + +#: mainwindow.cpp:438 +msgid "You do not have read permission to this file." +msgstr "" + +#: mainwindow.cpp:453 +msgid "Open PGN file" +msgstr "Charger un fichier PGN" + +#: mainwindow.cpp:475 +msgid "Save PGN file" +msgstr "Enregistrer au format PGN" + +#: mainwindow.cpp:635 +msgid "Error creating game" +msgstr "" + +#: mainwindow.cpp:675 +msgid "Illegal move" +msgstr "Déplacement illégal" + +#: pref_engines.cpp:39 +msgid "&Name:" +msgstr "Nom :" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 136 +#: pref_engines.cpp:47 extractedrc.cpp:131 +msgid "&Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 147 +#: pref_engines.cpp:52 extractedrc.cpp:134 +msgid "XBoard" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 152 +#: pref_engines.cpp:53 extractedrc.cpp:137 +msgid "UCI" +msgstr "" + +#: pref_engines.cpp:54 +msgid "Tagua (textual)" +msgstr "" + +#: pref_engines.cpp:55 +msgid "Tagua (DBUS)" +msgstr "" + +#: pref_engines.cpp:56 +msgid "GNU Shogi" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 113 +#: pref_engines.cpp:61 extractedrc.cpp:128 +msgid "&Path:" +msgstr "Chemin d'accès" + +#: pref_engines.cpp:70 +msgid "&Work directory:" +msgstr "Répertoire de travail" + +#: pref_engines.cpp:93 +msgid "Choose a name for the engine" +msgstr "" + +#: pref_engines.cpp:93 +msgid "No engine name" +msgstr "" + +#: qconnect.cpp:56 +msgid "Select timeseal binary" +msgstr "" + +#: qconnect.cpp:59 +msgid "Only local executables supported" +msgstr "" + +#: tabwidget.cpp:24 +msgid "Close the current tab" +msgstr "Fermer l'onglet actuel" + +#. i18n: tag Text +#. i18n: file ./taguaui.rc line 15 +#: extractedrc.cpp:3 +msgid "&Edit" +msgstr "&Edition" + +#. i18n: tag text +#. i18n: file ./taguaui.rc line 24 +#: extractedrc.cpp:6 +msgid "&Game" +msgstr "Jeu" + +#. i18n: tag text +#. i18n: file ./taguaui.rc line 33 +#: extractedrc.cpp:9 +msgid "&View" +msgstr "&Affichage" + +#. i18n: tag text +#. i18n: file ./taguaui.rc line 47 +#: extractedrc.cpp:12 +msgid "Game Toolbar" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 13 +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 13 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 13 +#: extractedrc.cpp:15 extractedrc.cpp:63 extractedrc.cpp:185 +msgid "Form" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 25 +#: extractedrc.cpp:18 +msgid "Round:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 35 +#: extractedrc.cpp:21 +msgid "Time:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 54 +#: extractedrc.cpp:24 +msgid "Result:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 61 +#: extractedrc.cpp:27 +msgid "Increment:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 71 +#: extractedrc.cpp:30 +msgid "Site:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 78 +#: extractedrc.cpp:33 +msgid "Black rating:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 85 +#: extractedrc.cpp:36 +msgid "Event:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 92 +#: extractedrc.cpp:39 +msgid "Black:" +msgstr "Noir :" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 99 +#: extractedrc.cpp:42 +msgid "White:" +msgstr "Blanc :" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 121 +#: extractedrc.cpp:45 +msgid "Date:" +msgstr "Date :" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 131 +#: extractedrc.cpp:48 +msgid "White rating:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/gametags.ui line 138 +#: extractedrc.cpp:51 +msgid "ECO:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/newgamedialog.ui line 13 +#: extractedrc.cpp:54 +msgid "New game" +msgstr "Nouveau jeu" + +#. i18n: tag string +#. i18n: file ./ui/newgamedialog.ui line 39 +#. i18n: tag string +#. i18n: file ./ui/pref_theme.ui line 48 +#: extractedrc.cpp:57 extractedrc.cpp:238 +msgid "&Variant:" +msgstr "&Variante :" + +#. i18n: tag string +#. i18n: file ./ui/newgamedialog.ui line 74 +#: extractedrc.cpp:60 +msgid "Create in new &tab" +msgstr "Créer dans un nouvel onglet" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 36 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 36 +#: extractedrc.cpp:66 extractedrc.cpp:188 +msgid "&Animations" +msgstr "&Animations" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 51 +#: extractedrc.cpp:69 +msgid "&Transformations" +msgstr "&Transformations" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 58 +#: extractedrc.cpp:72 +msgid "&Explosions" +msgstr "&Explosions" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 65 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 158 +#: extractedrc.cpp:75 extractedrc.cpp:208 +msgid "&Movements" +msgstr "&Mouvements" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 72 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 165 +#: extractedrc.cpp:78 extractedrc.cpp:211 +msgid "&Fading" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 88 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 60 +#: extractedrc.cpp:81 extractedrc.cpp:191 +msgid "" +"Rough\n" +"(little CPU usage)" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 115 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 87 +#: extractedrc.cpp:85 extractedrc.cpp:195 +msgid "" +"Smooth\n" +"(high CPU usage)" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 130 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 179 +#: extractedrc.cpp:89 extractedrc.cpp:217 +msgid "Animation s&moothness:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 151 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 123 +#: extractedrc.cpp:92 extractedrc.cpp:202 +msgid "Slow" +msgstr "Lent" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 177 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 146 +#: extractedrc.cpp:95 extractedrc.cpp:205 +msgid "Fast" +msgstr "Rapide" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 189 +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 102 +#: extractedrc.cpp:98 extractedrc.cpp:199 +msgid "Animation s&peed:" +msgstr "Vitesse d'animation" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 231 +#: extractedrc.cpp:101 +msgid "&Max sequence length:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 253 +#: extractedrc.cpp:104 +msgid "Animate move &sequences" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 277 +#: extractedrc.cpp:107 +msgid "&Border" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 292 +#: extractedrc.cpp:110 +msgid "&Color" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 302 +#: extractedrc.cpp:113 +msgid "&Text Color" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_board.ui line 320 +#: extractedrc.cpp:116 +msgid "Custom &font:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 13 +#: extractedrc.cpp:119 +msgid "Engines" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 25 +#: extractedrc.cpp:122 +msgid "Engine list" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 93 +#: extractedrc.cpp:125 +msgid "Engine properties" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 157 +#: extractedrc.cpp:140 +msgid "Tagua (text)" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 162 +#: extractedrc.cpp:143 +msgid "Tagua (D-BUS)" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_engines.ui line 180 +#: extractedrc.cpp:146 +msgid "&Work dir:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/preferences.ui line 13 +#: extractedrc.cpp:149 +msgid "Change Tagua Settings" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 13 +#: extractedrc.cpp:152 +msgid "Dialog" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 47 +#: extractedrc.cpp:155 +msgid "Pattern" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 75 +#: extractedrc.cpp:158 +msgid "Bold" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 82 +#: extractedrc.cpp:161 +msgid "Italic" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 148 +#: extractedrc.cpp:164 +msgid "Use this box to test your regular expression" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 186 +#: extractedrc.cpp:167 +msgid "Add" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 193 +#: extractedrc.cpp:170 +msgid "Remove" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 223 +#: extractedrc.cpp:173 +msgid "Up" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 230 +#: extractedrc.cpp:176 +msgid "Down" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 266 +#: extractedrc.cpp:179 +msgid "OK" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_highlight.ui line 273 +#: extractedrc.cpp:182 +msgid "Cancel" +msgstr "Annuler" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 172 +#: extractedrc.cpp:214 +msgid "&Smooth highlighting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 203 +#: extractedrc.cpp:220 +msgid "&Colors and fonts" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 215 +#: extractedrc.cpp:223 +msgid "C&omments color:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 233 +#: extractedrc.cpp:226 +msgid "Cus&tom comments font:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 243 +#: extractedrc.cpp:229 +msgid "C&ustom moves font:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_movelist.ui line 253 +#: extractedrc.cpp:232 +msgid "S&elected move color:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/pref_theme_page.ui line 31 +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 149 +#: extractedrc.cpp:235 extractedrc.cpp:271 +msgid "..." +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 13 +#: extractedrc.cpp:241 +msgid "Quick Connect" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 28 +#: extractedrc.cpp:244 +msgid "&Login" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 47 +#: extractedrc.cpp:247 +msgid "&Password:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 60 +#: extractedrc.cpp:250 +msgid "&Username:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 70 +#: extractedrc.cpp:253 +msgid "&Store password on this computer" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 73 +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 182 +#: extractedrc.cpp:256 extractedrc.cpp:280 +msgid "Alt+S" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 83 +#: extractedrc.cpp:259 +msgid "Ser&ver:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 98 +#: extractedrc.cpp:262 +msgid "ICS p&ort:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 115 +#: extractedrc.cpp:265 +msgid "ICS &host:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 131 +#: extractedrc.cpp:268 +msgid "&Timeseal" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 159 +#: extractedrc.cpp:274 +msgid "&File Path:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 179 +#: extractedrc.cpp:277 +msgid "Use &custom command line arguments" +msgstr "" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 232 +#: extractedrc.cpp:283 +msgid "&OK" +msgstr "&OK" + +#. i18n: tag string +#. i18n: file ./ui/quickconnect.ui line 248 +#: extractedrc.cpp:286 +msgid "&Cancel" +msgstr "&Annuler" + +#: extractedrc.cpp:287 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#: extractedrc.cpp:288 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" -- 2.11.4.GIT
  • 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 l=}s_EJO)o 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 z zeo-#I=q3hcr{xnSJQ^6{K#ze^;p|W8Lt@JJWLXLc=e*Q?vHDd>k}>gA8Fv^NJ?XaE zq1vsm_bYMwRc<_0Z2-u@sXd_Q%|`5{Nf#L;%8qK77Lz^u_o%>36H&56;0$wA+^JO(^Ld|NF>#^2;0H&MX{6++)gCb725~+rEMW7%8M4E$zv-} zI9Vz%1koIk@!q2b%!~orl_$0pvbV?tKeSIb0NyN|C_xLKLt94AWA}U>cvpGnad15T&9(YBX<56M(}2^Hy!RACzOidL66= z)AyOpINAj&O!Qw!^-W@GR={Rt?>rBh_iXG@cfn!-uM_k&yGK*H;qVWWn)Sxr*1Q#N z6;m-epS^p(PVNgwo%IsQ=?=H)f`W4AGhTmFZSQrHrw3}6C)@YpyB~yd`-8HXnVQ$o zI&z(Py6HCo1WzQ*byHh2%_mR({{YAzSLy!%3-rykKox)nC;ZovT`F6)F1t3%o#H{S zVg93P1UwyONHgvvyyxv)d~G+jcEw6Jj?Yi@ zk4M(u*6K9(q!me0_}pu=*1ATz&4o=x-L}NUoSO69AL_kTyQcClBl8?>t$LrRx`$J= zE#3C7EJ>R0jG=|Z#!;JhXM^gt&7EzD|*fDH3A)li^8`_^e%F57z>WB^QFkxe$c zF7nq+8U0Ks5CP(xue4&~oyc+j07>&ywk^2?41>YquGNL|Hwl^>rDzgTcEU#5g$?D} zM1##J-7775)WO1o+Ksf!+GO*Z&wr*aT^rovFlL0L)rv8Tbh-ywskCnrqF0#)s9)Wv z3KMd`A&f;@bmdh;GDb`s@x?mUk%8W~wy$+0L8V>_QKhsx)x}GT7NaM>HKNPj550r{ zXPRB3X&Zk0%nIpg?gMXb)d#VOH4>VO=yBtew`28K#{IU<_H$epq_AOkWx{8m@kHy61Kxd3+)TkbEW za5pzKmj3Tah_ZKyBohE<=Cq2x22*J|6jj|rrNE?fBAs+Sm~n9~PcVKdHtpPZ5oJ_` z1DU7k^p{vJ?@SV505eWWu7yja64|?U(7bMJLS(M$>DslkPB$=P@Ox79nsI148;WNm z6x+7n3YQcJ<|j3ZZN81;1y^jbrxzFUs)HFVB$}&wRNo;3I?mitE}24)>PFHUKU#dG z`hkLx`HAsT+xRWTH`tw*7WUvc0uRj{t;$0BW(VeKVM`ZC{{YlF5y%3V%Erp=JahA! zhrQwvUQ;u(uJBPMLCl)9hPbx{lPiGaQ>^KiXt;L-1jqtOGedE%TV)9-!y^@?x6uw0 zZ)`A^rd0`%jCYF8mM>dCw-EscBpjO5nv10ub8gylVuI^{?Q>ypcm|rjfw-?AGI~*Q zRFFH+oA<w)toEMKW>=4Ie$?>RcYCfzOsM8O)X86A9IK-{AhmQU5=rcNtJLXT zm3Ek%k%Kv=HM^HDTNX{TCJeM3(iY~n+cMlsc$nH}znU$7X)%nhniY3NzfM--?=pVX z$<^Gop|rYx!dka5H*Ds+&i2KXXTH|1@Kr`lb2a;Klei0um@UmqZMz%dis>9azpB&e zbg8J7u(6T0r@X6z^^B6-kRO#Ov1%;FWhM)`f^A$^d6nA>Xx-3wb~1c!9WVCNOAuFdcpKvu8q@lo~_5Xdsd)s zXeT3x73f>)H`VLyC7nAfB!K%Mao%f2n_EW8cB>&E+k z(hnJ?-bVx*)>%wuX@@_E-khbw~D(%BHPXV~dk|*?M-iz#}rD ziTRMB-K%O?vFeaDNTY1S7^LZFcPFMM)|lHRtw^2% z_NZ)YZd@YW?XWmJ(^plcvvbh~SZ8o-R!jGG+*4;(3o#{(&*@D{SEOes#`~bXJGPJY z^;c3`320@FUEBA9z_Rl{n&}{#ZLMHmNGz#I-21Xmnogrs*IAhebC@LNoLh3*6OOJj zp$6kOw&me$&ma0CJ2{?rL>Fpti1s zNrM?9%_@_923&Ff0QxswYpdxjBHtF7W(WdI`K~}J!GP(ghI4QNFDtXUlIENs zF5D11=DWRDSlvHJ-j%z0hXVyxOxMf4tJnJ1fz;{smeG&Da40A5-kmkJLszKwKU35G zox6Kbe;B$;gvGQZ75(d(tMqKhx|%I$>_m}Vt$*MyS+@4<-3hqMIQGxP(r!hofLm?D zZX2-U6yG&RW^auzy^g$#sknVRcJ$zOV*pY;HMx0h`j+4rFUY1gq2Z0d8JNi@&1X=| z(IlU>VA`C%((u7(+o{o7wQF+gZ99Sp+ch5UuKmPImo8p-!m$&I#RNhtZD3@cYeL<+ zbwTZt&)D~-@51PIs^g>Dbd3&*=cjX9a^9BS(d<_no94ZalV+bn6Q|iMtia8|G4o$4 z==z(s^%JJkE!*xuQoxW6eOsiaqV|OssN7b(;4>m)Z^d=2Ty|ql@A+oSMO~8G>TPe2 z>VUocP-{AVp@7-0wtyKbxhREjiq zb4wK;CAr^PFzD>{Yt6G%)-2m9c7o)QTQrAJX4=}Y7UjvwBQ!$lwbH84fJhT2t4vg1 zxaH39Aq7fXyCO2Jf5DGgb6(frT}w+c>chPQTL=zTn6R6Ik&?SWS`!)Thr?yP>WlD%K~don*D@hZ+LD= zG)Jg(`)*5WZKRCJsFSXXrqu<~tiP{v!abBMJaB#>aPsK~F#f+=1{-;kvt+jcL zrDwNkNDSmoVzmAS<>F1PQmV|2$C}G*>4u$e`iEhI0})JCcV-q4f;fX%xl^>wqZw65 z(WU9ne%;r5?`)}n3gU+A>a<1+D~XIOl4w&{>fV*ZCS>NOqg81b2Mf8lrIh~wQsD?K zwm9oG6KpM;3VX*UtZEor6K#X$X-%fm>J?qC-BTQn=CoS$?IPN1%EB=sKT1pVCDfjo z7;1kGUuwOU&T(1oY1ZwZ{jdt~M>V5X+H-GZy+J}bMK}~1XSt^=wu-Y6%L$)~QJY&x zbe@bCI$6BJ-N0B(iLEJS+FLdm46X$-)~i%6qnj$Y$&6IHZtCv2rMj%_CBr;LQ=7ho z_|sO*H>@jx5UhC}={kGQW7N{^5F!k7N2;{#a6hfF;Cq3RY5ILI4ZW`_wDR25fN!?OF7P^kO+Y)&tZX?*%rlLYU_iZcCxKVy(7s{5Pq&oy@Tl*ki>7 zi^AgVxh4iCnQrduVC8oXD-irotm|b!#xXRLZ%me&*wdwN%(jdJJW<-qg(<<$n$M`U zsv~8+Po(@9I5awSdn!rPv$<@RITcMe*)F5et(G#37y~3l1?@vzI|ZdI8x1_rD>#jh zlY(n2daZOgVt^c#??xqEF3yghdXhFloMN67Y%Ou1^A(@fc0{pi;Vw@g=BoJg8d#Sx zEPD!;kdnu3l>Uv-S8-*MF-luu7t_YjaptLQ8?WjKLEO`}1yjK%ymM7_v>TfRt`!Ws z2HZsC(^l&NEW{JuX)3qF%pHe}Q0ie2e@)&_Kl`NWPKOxN*vDlI7Djw_rEdYYm7f(> z?C&P}TDT;^laIY<^sR_uveC^n($O-v*bSRt1D;N39^-)ofI!6!W5s!|sLx2!vo@iNw*g5aTDv#yg;-0$SP6>qUr}jn^;Thd zih(Q)@@i9>`$~#|;=2B`r{BM)8dU}I8VE3Excag*#Jd3?@m;%mJqJ&^$#%%NS>%_= z1o$G8)qmU8(|7jopPME9{1yuQXW; zjiizMQm$O~8B^n$aT|S&w2y;8RdQl}Vy3*8HRR0jPvto0Jkaa_Kpnq&Wx;aXGbsSj zHTEhKX&)mr{{T{aDgb3li34{9ABwO@Fa~>>q?LFyRa8-edjV8n zFoE+{p@hQKfT|>u@lBD6uu@rKA~`0ke|OszYBEVPR0$c{B74*|zQ(PfTYyN4yaf<& zeABHI-@5KWJONdxHj9&OSO~y5s_9rZyaNVg=0`PK0N}@(I9Z4@@M@WeGH^i6WY@t8 zTiPu!AZPDQQg)eXKPGE4F;P8@M3Q9x0QF8XwXwQSqe|^;98#7T?&H9ky|M1!-_1oM z{*u$Eg95KDH=CGCYW0r&*fASMXLIjh%^#d}7s)Pt`QOB-7&&tNsS z9r9>V9axN&Jsh`<{Z` zTMY{OWbyjdss;oxA~Q6X3}IqpCY+6e2+x{w6Lzt(!jNIH;M7;0%2&Q~QsJIS;B!L5 z5=?oh$6E-+tw=C-0wXlbWWk0JSzU_b{{RI7Gj1VHJk+*ISF>{NGQgOtVVEP`!Ot|5 zW@Qln0D3az*Z>JL0L3`l(6Ox}uh4EajZk%MtIG+*SG&+(x2m?IfAxUc2<|&qhv|A7 z_X;V4i6%vQTQ@D}cH2@3&THBFMKvDIAFHXfk3tz$5mx5qCJk=s_w8ABcVn;)!bvsf zZS_Ctn3_GV`Fg(|9B-A6bAL-t;*~;sEPS;ZFw~_7>Yt;50 zKblcfrM%lzG$iWb+csRavR#y@C+*F7xv3`mJNUkz4J2@S z=BDH7ranmhYZ~eaKHv^Hs@FSSxLb8(Vo+eopB2RCa&kKO;-lHsx2$Vo6BVmR)Grnw zu!GoF6W)aiw$5Gv0#R0N9B> zYFwoD#T83zJ6nPQJPv4q5xB7X9%?D~kU#>AD3HPlZvY)Y;=eTFoOWl9gR*_x#c4$Z zhJHIzg_bce49xsf?b~N{L{siC3F5Yk$!J(qt*r)DSSTQa5IfgHMP|`(9FuUIf19|g?VSF#($Z-cdNTzq34_7nyCKA$j5$;t-LqATK~+jNM2I}o)iutN>_nJ` zB!l*+`f8;S6r5z%gJ=~Yi%7&1T@hI5!Ag>TKSL`GLl5c@8FEPOX_i{>!l5#92;@=T zx3Ge82@o2z+iPgMmns06`%vMsARU(%J zVyFwjV5*V>8Ntb=C96)rumOqTk7^6AbzC)|tl;1`6yR0vGu*Wf!XS1rRhGfRSEtbX zYi$?{YbWm_w&~5-m$noW$ePKe(=CWumQf@D&2_EZEocBr?HDV_tlcNGNVzV*(FMdR zq6j4NMKB+B5HT5|Hs0m0>YS1e56ustHvmQha87DHo(_wU#<;A|qaFNI4aimjqG0!= zzoLf*2q(P(dvA0A-r{fn@&c zDBM?ltt5j6DXWCr%n2a#R2i8)_P}A80w_(#bG8hr$T-CvtrtotHZypZ5`4!rz^cK3 z!Q@YxQM=?7URnV)M)KTmV*?S#H7+uuy+w-H>#h;XyoSIS#V+ETiwuAg1i+=e@&?zj zak3aVnj>=U(d-60ccDUEgxY#C-bdZBnS>dUS=^G$#9V163C|U_>bo%9AoroT82I zgcgyZn^sS@`v7Tnw5@54%a@)EW11rFtPQdlcLY-IekS21l-ss{`DU}tkl|alMbucg zs9SekR56J>QR?r3ABHOGxhJur)L9!r2?UQ6q_c6ZFQ!y^1md)%Ew(tPREo6s-q^a} zTQd+Fv~x_gruCpF=NXBLW}?WqY!h-+jBOqJ)=Nua?s{veX(Vnj!SPKsL7di^s96dK zW)|G{IiR~?!-Bg>h{@)YdrsEwpX)QKoEoba(MwyuZT&HlRFX|Pf7(l($9fLn+bovZ zue0QKie0;gaX#m#)PpQ!AETxTQtHr=10I*GazO1*!``T?ai+8Ou zh`GEdp7r3qq3Qb5s%HE%ke}SSA8MMMP?V#Wx&Hvk%YK=x7arxiE~rnmk=wOny=L-U z*>IMA;8y(`bsMkvYgcYI+1h}Pe_BSTP1J1O^==18^CEwW%1~Ek@tba#ohn{u*iFP) zkO9fXc6xtIy?*7tPe#TDTI-MrHIt@Yanus_v^~pmRfrr{YpC_bO9M@81+c)z)|2pY z$2D+Kin|kb+C5j(8dd4mJsamq_@e{>@=bb6I*ksgnJul5#0ViwlRQ_(x>(n1I*468 z^+yH+-F!zi=sH%9uGrMZpI?1|xt6#2L7C+CrHrKguVm(-sk&dG^!t4-)thH^>$+ng zjfM#|qQ=Xprsd~VpK&HlaRN_kaD*DyvJ`FBZeH7le|n6X`+v}uGF2p1 zj+AbINmBElG#b8@sIzq~+tZidCwMXk&1y|TX;j`-wQ;+Ud9H2Ub@#jK2HDJl*dm&r zJ9;P6;fft+MXVP#t1CIj0MqX1p3w^S_rHPP;w(NARgr9L|KH5*=JrD+@3u;V4nKjUDb)-NBrukVOz;pJj zi+|PB9oE<+$Ofh}oA48l8rYx1=$XHzdguVeG08ORT1%FKk#!Ssh2D7himm!{a1_&^ zxj7>yn7WNfxW?X{UIrP~R8coSk*M+c7WymbK^liU*fUc(dh2z$o219b|jLbD&v=IB^72%+RKfqZ7OM84)+~D#d7++%`NX! zL#ol8Mb1&(Ffl#rvtrG?C9!Qaw_FUl2PZs9tY-GFU8-w(tu3uSiU{>w%l+xfa`PP+ z%NH+fl4p_YTK<))(_7N(ttOD$Xh1*&x&u?9V4gPvM=dv zT+}gk0m&qo?_N7fE-l-ZwlQWBRlyZXYOO?x@!aXN*SAmT4PovLF56t4mt=mG<@%TV zV7kXd+J@Z_uah&J)@L_b;ZX0jcoUDBZjfn%e_GwgpA7=Cn{)gX8cw6IG+KXB`1Jz> zEfW>%ex0?@e-~{(26b1i4X4#Ip!tZdCWl$mtzWjcdU?8vf4brQ>)Ujmr=Zo@7J5HS zFMN+_*$N2xtznHNBOYAdpy=+{(P*sOwruIsPCF&A0?(S$r7dK*Mg@*ZD=;gMtkmmz zPMg%~iEU&^OL-!bqx#E7s$rwC(yz0(w|?n@d*ZHB;!oPFTyW+~ay>&`yQsROZ>b|E ziqmZ#-LGOIs*R*K2C($oH}v{@mo*o`SNxXGDm&6{oqfybY$d-yk+_qXqB3(=6-J5} z#`ztaZi|b2TvDI`f!ea_6V+nI{rfHi{{T)s$Hi(JkrhRNSG$#wKy>$tv;Y_L1KzZX zP3(zU`$SsP>J&5E)ZJ%^4RhU}6`|FxS=*_+B(QH_@8YQgn`px0s67194^>gU$jSuq zkwZy#XX;J5V7aoemzhBACY5hTrEB}`*;evuSo|gOMZvYupK%1qp|tw-43>22EdoyP zb2U**z*O3~bU97bx<#8-)Ql3twKLK_ud2?fK>V@IPMB_8R<>MjW0r1ag3-LU*#Z*0 z7Cvce^h%|*(Yr_y>|Ao-4birfs0_##bP^}bRbH}o1L`OSBm)MVZHXmt~~CaE6~n zsS2%VA`Gv#B8yScv<+(uWtL>IIW&aQ>o>{N%CW+Q6|2#{#ZiV=f(1*pqEsNAoVy(( zrLEQ$tm*EwhTCJP zMQq5z`mpruB7@uFnu6+G0kC3CY+G96r?ySIEHeai`qJ9#xAg8=w5{B#{{YPol~qzS zj~=qW;KO#pygph~D(u=;csZxwQ2uHi?cwXNy*#llx$91r=W z{YG6ai~4rm$mbjSi)C#x6${8Kn%ksZ>MvZd+f*NSflk$GE#A4f+Yo;@%>cV>Bn?X1 zPT=^g-z=M|H1uPA*wK4R>ddy#xd0FQ)?23IYBs8{0D=gs7VKScQvI?4&N;2N-pgCX z(yR4`!m2Phfoz!+UR=q2iJzHhCgOm59 zoRhlIIKgSN4TQQ&Gh1DNNn_fA>9u*)6gv|nz&I4$Ub9f|w%zTMh#!>Ft=QE608k~= z7aR$Linit5lPEPT$Ehib~Qu9)*iG)rlxcn2b|wT(fn(w;g~IKoMN@(`zoHEzLk{ zScxWLwCT3#$=Y&z(rJW#8a5ZRxFEPxk&r=}TBmk~j{U5O(D6Gk-8XbWh~k@=}* zeS=v&j26*U+F$Pc!jEOINR6u;MGl`zbmJua8JVSBxY-*d0{|K~c8b$=F+?HjHJ0QMrKk67F#EkGG0;Kes@LYB0~Yc)YvV6y=7L7*DamJPQ+ z0X&+kw+Z(fZ88q-XY`;NwDn`t+yR`5cv~B3b}vh;y0;25?owrBW-Fn8QE`*p=)<%{ zb5_rG_7va#xD3*q)xwL+CI1f7f|vo!m}wTuYrFt6bLHM7)b)WlN|c4SJnj#lDP| zotc7ExpDlfk$#{BU&V%O!L7fnk(9C)^_@e!B3v_R&Ct4M$OUkDSghXqU}nW*_!37 z1~?N0iXEuF25VLQE#k$>jO2nynigWMy9A8IXxxht8UFw@ z+cxyBz+Pepn5vH+T{2!x;`%ab^-q0vpB%+yw4UC05;dVRyO{7vq}~AB-7qF9&`u8(O>b%1Oy)&J`*c#P+bZG786sv)Qi51V z2B^T0Gntc781Bv~V|zg+-iv^yCPh{Q0XUyEXD1(XOw+xka9nO56xF>I34DqR0#6e| z!+=T0HKSJ6n3b}nR**pl+$2UwH8OO9f)^!$pS)19EZq0zl#p8k`KFffiif?4!8c@{ zR0;BGi#Fl_s2Hl12i=L9reVS6Ii#sQ3cn#U7!U_CXg4&0kO$8-8$3)N^Hfw85KcVP z{RfI#7;Z=zKfO}84FKR(EEAF_M5&Sc%_{N@Ut?K!A&z;asBO{M)veZHkScOujCre1 zz$If8WPh5DPnh|d5YZcE50gT~?ghE+NjlKlNIlTMn~E~v08S}Q1RV3`h$@YyH+iLg zP-LX(jaHCP0Ol%`FeH!ARJR!s1DdkJKQ?}AOG~mEZ}b^%S%i=y&w8OI;blB?Q7!_b z%=oCll6V4|bov^Ki(4b@FWx)mg5u`{(L&^t%|duyO%*2X7QXI;yFMe1KU$@o!Aa(c z@E`+>)c_c7?==KT+8<@cRQANvEin&+?Nc;}O~7tE){A1>5JBK~q?%h~-j4qOMe65F zTHByt@snPF-5RR``75;qfM7tc4%<{rZr(2-N`aFdxU6r~nXRp~fZK*+F+5S~ET*GOS=ocI`kE7E`)nk5F5G5@Ll`K#Uoa_M($|Cu!{$u$!B=AGJAG zZN&wQRUp_w#&cR2q=*K5nzpyF(%gqzAg}S06#W|(xPa{d88B-WNR|yWsxP!#jwX`kUb>9WMnzukmR)OxBJalW; zgha13rSCc&p+F)s7c{Y3(XXibV^ZORD9Um9gi~XC4a)$JG_-L2%+6$HD2>H}3q%}z zR8#ObZETHd&gTU)h#lygPiap05^`gjSurXc=e$iFv|y@Hw-RDcYHdv`uyKldiAt9D zn~23)415Rd7_$G%W{FL%bQ5bH9h06poe${QMNJt}z zf^(Xyc2nG@K=U;(SXM+T;3zvt^Yc?ITQvUw$sYr4Fl_E#JJTIOF}+KHBpz!L*tf8s zQMd38APTioJ;L;!BfV#YUr+ceHv2|~1P#XNfaZa&tZ!V_c1Q8@)d{cDxZ3JbF zyNu(Bq5Lx4Aw#l)MpuzaN=n7Y7Z+${hE4Exx$dM)*0j{i?X_fDAYhz|$hsFvZ8JHz zT3X>zF;LmpE2+Hh3U=F;sZo<#k*v8?T_~GwUewvT9j>Dj8QY3*ztk^VFLiX*&=^=S z#inihC0zKCB0jE~lhS4MeC@@zd?p|kxxKqowdS?t)pfbUc?K?OwvtK3$JU5&{x zG$3D9ESJ~`$Og4h)mbZ>DP0aIRGVxVH1bUw8>;By;bu%=VwGgvSt?{qxp>KeP3y(UoL9s&Sq8orRjR=U8~3KNxMf@X_XtGdrGrgB>V&*dIz zHoC3bOX=RVa^N48P6a7(ay`Ux=i^tzwN+ARg`Mf5qj z5VhKVqh|HXV*Q=O5LIXLn!RqJp_bK@5&)1XM~|B;Vwco#wW>T7{{X4_rJYKP+G|TE zHpv8>_N<*->I=H3xR&hP(h>yZ8LrP&`hQcXbF9*ZYnI^T$9m-H`c9`+so3@()>AGB zfJAw%YIkg2rxJ~xTH#{s%W%sX6U{v}54Uaz2O~2T>n!Q*mVF|0nEUC8;0!SKpYa?z9IiYTmmX-e7;?yZRkJuXZ&$9W|RokI0|%O>oD_Ic2+}S48?>q-pJ?#)X|(8y%ou~gCl#%<{WRL2!t0E$A_ykAJwE22sh}Er`@;@S1$5fO zX;m%_UdBQp5yT(TrODozq&Oj2QvU$IxZOUU&6`7Jm5TGa;+Uqkn%ge*7U!@7iotVV zs?^>J-9eJnWDz2V@!G9D$Xk~0s)!JnG^&3lo~Ila{)b#a41WuH<0%4FCbC^i!HN7m zz?tOJ?DamUA#PZ?Zr8!ZYOwY$DQlMrBuNAwYegwRdyK9euTS_nntRD)Z5nl984NH@ zHs9fIzx6J9ZHZXIiru?Qb-gP(Ku8kM39Pz{R*{HnM$)P5uuRmxOL|1hjddod4@;(~ zxo+Lt*PD_`K>g?***l8q!6e8kWXIZ`&7rlXZK~Ii*MEahhvo6v7#sxm_P1ZT~>yeR<K}wS{XUv+`8m&{)#-^N(`h4@%?oO}ji7ew3aM!!PZi%5wC|-CZdtK$M+LdA zbFGa-ms>*Em;-5(Lg!C%R!qK`aOw$uW%)`jfhlcyq{G1n)URzrPC?5Wll>sxSuAU z&_G~CoHm2iWyK(L%!c_XrxRG6L7K1_4^#c8k z8iH5?@F0H`<+^uOx1>lfjA@n!rT_z+@mK01FrD>AWxVXW zSV29zQx&dTP!RrXHhWW8+ENxn5_z6JDJ`_zB;iMjpKI+JMM-V2mr%eJY$!i^BEiT~ z(vv0!B9L-RBhTDbD&8cOII5*YHsto0T|(Hto}Q6$5$-T~qtn@SBHV)Ku|265h2)0M zfFg+wp&VZ~1Vn9&{`6Iot;MIH3grI17y zAc7)lWjNg$LM^IGLqSla2gFR8tu?S+XKNJ%3GbTEqZXRUXOcL8V-)L_>|VD5+aVv6 z%@4kZUo3@nf7A|bqRt593RcK)t9an4nPFRl2uxYmST{*6Sbv+>20fR^Q zr1jvdZB$t;u9?C=uOt&LM-*>$l1OmyB#ESI?Avx#(p^?r$QTqLZQpFE-2lkU{8Cau zgqGcZkRMPU^|jnlSV<wRFen z%C1{7YPJt^X|{;$znIf>?8Fs8Xex522C3FcqF!Z=+}3N_ZAapLQG6*mAdk&dnyPG1 ziMQ=Wo0^5ScVW|(EuUbKOkF*T_Q@J+mfehkQaksopNiDmEAF&dh%t}mw06z|W8>ZF5NHGV^DCqTeZnGQ6JHa2tH0ZUKt%9sQVZkPALoLzo)HoxJ zu_V&<82u^9&INLp?0 zp+}DV=vBtEafl37M2H!p7TIlsY5xF1Aex$0OKemC%zLn>8_B*UNe8t{Z=tx}(a*g1 zJ#Xr%2biWVwG~aW#3;!Xx&1e7t!7XCQ$u>*nM4E!9$SK6up%~i{4_UF`4Mo1jfb5=YXTNPr^Tn;%hDa~v(xh5CL=4e@x z%8Pd-u_I|5RcdeA8gsG4&+khrV4xt~VQ*nAA2iEXEo_^fF(PwFzCAl>{Xp)K&b;+JHNdXdGNNpt|k{B0Esm zk{oxlb?a9yBF*I|z&r}0q!z~UY!XCCTF2@&vW;;S+!!9{HMZr(xu*?qY+!H!oKmM` zufdq3D?nugoEWNctrr8UuGJlufLc0&Nh~vnIf~X_(n7!68I#DS=F^~2_L)d)iMimC za{>iR+I=vzpju%kK9~THnr@ovyF9MIG9>d?d9PW0!(d+7nWAmJn9@t5p4KlL>FBxi z4+hQIWxEuG2*d*`9=5;NVyBTN>M9oY)&aZ zXs*BXhLcgLTY8?Wb=uniP`4($r&RiHsr2``>0MS$(z)Sl+3U5|{-x48==9f8;5l?8 zN%*ff)U+K_Mbnw?YA+O#{{Xnsa(JapESXW48-G8^<(E@y@c}j9G9b(>kF{pk>TTS+ zw@SM$&H&^2tsPGIdG#%+AV4u(yDC}8P)CWbc}h>Sc&I^zdhOd>-7F&@aY-&%K?G)G zQ(0MDOdm5yzCa$w5`1>7<#OBX**GFmrQsOYGDZ*HjBbHBF(!pTli<-SOsO&VtZ9Y1&?IhyG5-KHQ6f(h zL@;1*IjbRJe4Z$>TE2xy{JTtfqTIxT9jb|jmE(b$B#_?W1Lm$RcnYPkS9Iedd($>; zCmAC-t3W4`0W>6qXd^Ss)XVTvi)zam{ICp7TdNQx`=ha;0E4?8Xv}Y!+d0iP-C81D z05_F6h&||%Id5_EPz}K3{lyilTZZ7qh^tyEI_Mw+2?I3%1xT1NO$jL;pa<ss0swy5Xkwc?wLx6v|R{aDRe^z_AAcN1J=?=VRp6}wq+uP$&;&1C~> z;wOS=<(iwjG=i7FHo#WEqHydd$6->^?zy%M@=Vb+rcomTe)XI?vhGQOKl3#78w8j* zoYr7jNt}aHSjJD;<$pteZ_2_6i|rQEe{>#6*|HCX&GQ;T-PaxREB1Rj6wL1`5LC@~+W zGy=;5g5nR18hRwKLP?Q70-@z}(9?}tdn{bM=U`?6L9Lc=Y_#9gEL3nPP(8329SY14 zd8S#ug`g=@CS-T}(w%uh#N3;y2kY8bfUH=FJ*naC-nJB5U8j*9;)nWo0{WzGTmlYx zstgP5wnyHx#wNc0pF?(Bl?(_GfgDvhTPmgZZDWW8(*xg8B+LksaasQW7pOqWLn=={ z6q1yJq5aHizAzYkQ!cX>5>O0DB9bpGsJXk{!4$wW_f>6@#IVf`IQD9t#-p%HsoA$Sr<{Gx>Us0#B)|U83 z0!+j;CibTN!Wg0##DXHSQ&R0Cd2u-PCMNysnxD&Q?ci;L$)kNYP_=DciU=4upW>Tz z>XBFxrV9atFb&6ww!H7BvvJf<4F*L#uBwTYBix_-34h0nW7W7y#!$aB7Ondv*cm^b zhViqzc?21fNvcg%q9s_|9gNn#-UQXw-ek?HC8U`OCprvDAWnTs!{&zXF$6tFRkz7YuM<)oS{kmNu5}Pq%c$0y&z| zY%R8nmRe7Nnk%ddu(xUL96>1+6KeW1j5!j#m+mERStK~=Hlcl_ft>j?8oSDDqg&An zYNsWpvk|Hx_v$Y+nPLXt@mYGiYVT;xgui~#SlZxbW|dCWFXXRM56|#TLUn8QV@Ie< zRttNWte=|Z^$lI!9)<6wqRY13p|?bzHN@-M4zq7h>tE}7hDi{+kN6eKyKr6UcJ%i( z2tzyq&z$#<-khZ+tqT}QQn&jVwYt4lpxkS{M%xf@MYuo5G%9t2Yo@>3{{Z<2kJ6aE z62t9Z_iHNbKmcTZ^)-DMY1VD^I~PG4VNT;UH^{WgQjWj;6?a*v(`ziZ;;r6tBou-H z`K|W8rRrx#Lbw_F5nd%S(> z8f9ssZVk3ZPbU*S9y}?_NyGkOb0o7qts?7HgrzNr^vtY7Sjc z-z_UioAlaEd$A}@raX|*K>aUXE$(GogdPRiHObXp)-~V@zQf5fY5E(jX^ROaBRp1^ zPA=}ueRxUZD>OEnX;!zVxxPKn@=Xum?^{NVCDYu3DYp8(Km)_@svJPmJxdR?QkykWE)1X`JGXQR<+tFUVxvzCpw*mluK=`1))Gg{R3xiIG z21Yyipt;nnfJN;x++o3pnW(NwcOUdhpBEoeukr({*&A%??cXahL7GL!>K#Vd(>2Kh z5P$(ka{is!LfAHm62VU*DJuGXHQ!p@#+|-+^II-Ccr$a1x0mu`{{Zr8((0P$P*&Cj zAPYp86rQcnw9ekWi*M7d+Y;WKiLSuvF3G)Hf2cX0D>Hs1r>5nKNG0DhPZ>VRn~ION z*~r%Fy2IMAI$PL#YQFu#Km2Qt^&i!nG=j>tySK^Paaph+*QDxKEa|}3YB7RO{{U6%?A>b?#k((U z5MyEp1LCrD?FF3%ojnsQxF5GPO>8BnWpph$BZ}!!tx=0^?RIMXNzUf^p7g`&Ds3vz zVkAL|$gJ?Hpbp|_pH+X`y6L#mWO$^ZD=*cxw#^orz${$4?GQkrTbA0{fw@irG^;l* zGk{b;GGud3^vkgdiYKrbrs;Of?IzS?=2) zFt+>2{G{MgwEA{aQjcSv-Qx{{ClzWPGU@~oiUeCpW^P_aOqvfKSC0zfF&%mjb9JNu}hhr?CB7 zs)0mA&lDo$sZc_mdD}!A0vv81>?y5=T*4;A;KI?@pmE@5C)X6U>sJ|8}@N1u%2qs9T>0aXQ zYiSTYpg{d-E#9)ag}bON=}tgiYfn(Sr@Tkum2AvIKOj^&_;D>?iD)*xsZ~J9>PRw4 zh@`fy(&2y*j0PN#)}@g!A)LjFUIXHTMy8$h+7j z#tQ%*=Coh8VVC-W!x-E^s?l`?Yb3$vo+$0>ZM(zU3<2{^`M(Tz03Hm+jvv{ zD0KHqkoJTy6n#d`tBPDG+q)*0Y3u>9j3=0hsa5hO+Fsf!{<8C3_B&_eiWb!txCPTK z6Oj}@iLjSP^bTamIW*l>y*1@Rs_Ho`PE6L6z6f%g-H*3*7T9G_49KCstzEmWTLZ`g znj0x$0)@ETL^+=Ir|^i*3%L+KC=d;2X+4_3&%!zPE(sSbvD|xBOYMDFn9ndgS3#^2 z^DPS|oV4NWG=jHH#bPN!XQkOj7icV;_^%DqC>xlM|@%$!N2uD;t{RJbsIyXLCs z(_Ho|vKh(mH2paFL_S9^wA=XIBgnXg+sHf$yN1Lmw1D@lNov}u2tjC)z|BK@S#R6v zTXV{Vfr_e+f+Xbr;$76*xaAGDkYpW(2kS()t%J8?l1!7@vz<<=<8HfX7Kk8XD*Zs9 z9l}VXYoXBKM9JxZr3jPEb4t<+k{vH7B*ENqTM3jR=ecG#PZct5%XE;N zdMhke_zX{TNYq>{dthi$^H!$lzqL%JW;^DHqA?(*W=Wwop4gOAS|z(fXl2zhmL|C}ZCo3^Rrc#8G=m@#IAQ9#TF?70;2?$6W zNHuns(?wv!yvdr>bz*is-*6d|ns+Y*I7K_QVr@O*0opMHiN$b!t={BX!CA+RNWP75q^?$A1bjsa3Lf)x4-N*j`bs0Z^ zd@0Lvv#Fue-RTV4QKlRKDOb+;Qye%qBrV}bKtf9g-B{{Y)z>}suQ5H!d+1MOJNI6LxOC7zMV z*6LE@dY0{k00ElIYSrc?)d^9_j8mC*tdhHYRW7pih*cwR$C|;)GHtSyrF6_sJDLH< zIHCg6BoprB14DM>-nqSmj`V14E!1XB%Q?+7k~DHrbd`y53?n1G4dW{SXUR3IS#wU= zvu|PUW@#4C6!#e?ikht=RFnOF4CIC~M-+D5ZRNy=e0!rq#g{ z_o^Vz8KEj zz@4x>RS_m600hv&z6N@L51JxnWI;UhNK*!##NwAZO@KJXL0mW1>0mGW4JC+GPXt#SKBkm~5-ogCPQhea^ zOg9%`QpH4ZHJQwSH+RiOS%_?W(rw>jX+7PB%t$bBGtB{FMEvH76hRXp3SXGb5^1^z z8ruvI<|3Y!kEJ1gKU&XZ`fOz5nXLxn2MPm8=fzgMiN#$Y9@Ft0{`4P&cL9W&*ar;6 zk>lp6S(%Ef6%(2gjap=>DCrs2%PvR+3UVPRU~w@VquVCwDdw!IfK`FqMMhg1jV{7Q3oH!r6c;WTGH10c$}owK6<`8p zermc_Mk)5`jAjt0lg$hJkjHvEaBQ-O$ix;W6KujfTjoQ;475tVug#^{H~+(3Dp}%CXL1@@SBMCYHbX znl2C6@idiC?IG5HmL5FQZ828^FmWJK5#{_z%!w5B{JT_V&02I!)gxXTxP#`KV$&OB zjkp=kXe`@PWNuZD6DExV0st7`{j0BvE=t8!w)Qf`##h?cJ(CmKy4njCL$j@{%#Rf` z)^w_>N~heJuD+3U;9}}913OK2#+p=fa>}YJ$$B@pWy1vb9&?)L+qw$CMG|D-8p&{3 zQlzA^)mF9_Ur@rvVDn7ctNBi5r7L67eE`Z@+uHQ~ zP{WE^>57sql8QuoPZh4+`!| z%+`RKdzSXBAd@5*qAKVmNP<6lGq+6D@kLfE{y+Al?eySpo|aj%l{+ zUR#T@^}C8PMDRS+rF*gA7Syo_i(z0Ydvah!8Wdm^P^cqC2rG}P;J8jFby+N_&cC8+?Id{x9Yvr0FDvl);l+>*aevb$bpQC zyz-8=iJHf4Buf{x#RD>chED9}uTH4W#?ycp%dbeM7oRX(M&1j<<(leJQCRcj>iLTW*;mN$dn#KSyYb}jm;#3AQ zS)eRu?@nW&bt<|`jX55npVqZ$^*TK=t6S49^}`ap(vqZ_L^Syuxf~9oq`9mQYU+}T zcDxP+dHsJ!`d3cFORBwc!+|1958l0BRO))QwW>aywJtHRL1A7nXzq1OyR~{Y0Fjb2 z`}U{qZp>#0McbPXSM=va{4c9(S90J!?VE)C{MVb*u8&O3WWDg~006szpPKeV>28gF z=k>J(92^f=82GHWK9ACeD`Q=8jQa}-6Hz`lKeW;ukbNF+r*zJzsJ=f1ZHDpr%RsML z(*B&*+X^+h_W)%2MhDun52gC2wO^`{w+98eKibxpX83cK3d?M~atQ zCGuq}$mr+>mdPUZ!*O_4D==xn^t;<_^l+!$m>^f2PL-^?XK&&f-NgWxFOQg@(S0_z z$!q;e`A}q!%&q&-@_M6q&Mj>3>bkGfS8t|~Z(a2mfq+X-#v;1^0EN@(^r*Hqcb|Bc z-2jh@;%GFw9-UOJ?4aTcikb&_tTXmoMpV`nN6?Cm_CSAn6WCi-_QHwfL=;`WB#~n_9gpyi8nq zsmF_twrJlgY2w4V)e}(LNwcUVdzaE84J3=V+yyo?>)Uk2YaJ(7YzvpQ7A`ErAOcU` zwK|PB9=?SYM+Dvf0JUYDQ}&d&r#F0u9`8?k$7{T(ISP5BZ3?0F7T+g1n$>%%=~CjP zu`D=Kx+^W+ezxY}r*UNh@&qxhV=ifa0mp_KlL>Tp8sGlQChU?ylT95fQkK_Z-CV+w z2+6Ez)phnq{{Xf-l!LXK88N`8w@|gJ6Rb@|#_zV|MG}0=!7*G9Y4`gDccp7o18{GC z@MM!oZ38Q^-donpazuknx2(|sD?rr0+s2sc6^{b$Nv4fk-%_^q7Kg(TBATBxNButy z+ID6d8(}vSe31(y#c8+E^zvT)%l1-m89|y;YdVVVL3uf!VuBCxS?}KJ8iHFJRoz-5^|it&;|~ zYdSrFWUiLxthtS&)cn|_HCPn^01W)CY_|#U9oBHt;X8MSWh&&cV5n|br!%!nPM|F z5|<#?7Y>>n_HJ9YSe>L|4>L<1u!pyDFnOlj)FtIM+TQmjcSS8OTeoUGIUr<{#Y_`! z8k|?8;xDfMZ5Yvmv)Pjl7l?bt!hGpXj@=Ue5-Ib41Fj1d;;|^j56zCB@5PKeU{h8Y>3VR6hNiBHsIY zlpqNvVohhV4#Do0C%1~xX?;de_Ry&9x1ZLn)wdnGXHz&3b5f-GW0Wa-N@hfqDBF(` zGc-DNP2_46s*^1>O?aEgT(!NNhaKoOKDM9)NRIS1M7LfIH`>4t#YI=tQA5gFfjFVjJdfRPm3s&FU zVrx~Kwpo>ZVjPV3#YEJTHIDlw-3_&J;_cs3akI4rn>P|y)46fH5t>cQx0>NwXS_(Q z2GziiaO&RM#4wnrZT|pqF-lJ2h3wVcw&86XXfjDWQqxnaR|M)@fr3fqpQqF6FIpRQ zVL{}#aa8?1#0JzU6WaopsJhVboASk9)HT#AcH3PB0SnDHLRawk(#US)nFgDtTh>}p zZ8F4rj%q8C`2k0ed(h>gv31=Rj*Bb!awojtP+ZFoPjZlRBLr5hJ+<`rt?7vdXPOrE z&BC_PS)(MJR%&BvPqRJiw_vGl-N>4jbvyR@sHmz4nZ;_mr?}7_?wmjU3xiaeJ1JlW zVE8jMIYx<(6Iu?^X*EH=s3Z@~Jp2khQrWp>Z6)v{_pV;0MWx?pvjsdLnWa78S%0QQ z$pT1&`qaT*?#Aj5{{UvoRv9j-Tg8tsc&)d;5pvrz5zHAgHO+gdwwU^b8MutVt(t4B zmR8l9zOQ!NDYqrIfp>TOhIFx|F4xK^5w>z@7e4JtxYGwcs$&$&Q^|H}(P@c- z;Hd&ht;TLzRV^T3O*x)xFS4MW>mRUGnb71w6~ z+j518-6N4&UimBSApZc(X1KT6m(#T$CyGnGmmgPX6!Uwz+5~5X|NT(w(e9V`+ioh?>iK z?x-*}?K3DIF;T8+WeXqzWP_SmmFgrAZ%mMu)Pw!Z#(%{;C6=&#OSZ{58%<=m&UpZQ zcciwS;kCNh9_|OtUMss7sT=6>e_3b_tEinulT&waQUZW8918K>C#xMFQw!CtunI|V zSN<#9YP9`Nr|Z8K+H-T=B2TmkrRus3p0j`Pdfh77EU=87{`D$8SWB8O+qM2qr$cY0 zdY;`)tv!)?Bq&KF`Qo+pyL!W6H9BM{%CHqrAa;uJ7y1p}oz?8=x?fN>FC2nIz^>O- z)%8xBWi2+PuHGvp?hH0FQj)#D@+FKPRL)kv>MbSSkE*w;(v{SLP!SV9dh&fV=q{>` zp?QnX_hbQGO-e4Lk*GFH9^mGF)rYHen+apo(wDh&U?(C0@kH)EG;48^QSwb+P3gB1 zY-%=S@Oc%$)M>3Iu-jXumLwDRqeFX6M)h@^WMZbO>3334fJZfq+LSGqh6^6dcYmh) z6W$Exnqph9)`YVLp4?ShaczlZ1Ou8OcE{!_$8ney%NEyzYHfTOH7bh5RFj@*`fDq2 zM&UmuuTl7E5=ir$(r#N*cw4kd@@lH3Y)z!7(|1V3h$u-h$R@3{4CutDw;j(lp3R+a zx6?-^e&(Fdt4IF2+)^@Cgir5VMk(ouD^ySRi-OT5(X;#3RnoA1tO$=4ukrV7h$-Gc zJWyF}X0G#Gw8{^07_9jeCD3hZ%s10x<8k}*RxCBjImQa z=^B)?pGcASJ?k7P^aCT`5v_g@O#zBnTS>j`eQ1VFC4G=i}bDT^+YEK(8t%15r zNc&T+LIDs@dIa6Ls*i7zRdlkL#MI&nNV3NVnlQsAB$Lf8a6uXJ4OrO#sP`I}rF$kc z_t3(`$T;y;WV*iC`7&rhB<|)16=aie6XOv^EfnJGVnWco23MV{MWE3Ti)8x{pX!m!`B%Npz`7LH*e)VNlU7BPJkSJN8PrE0z zTM$+OnB>;#{FNH3Y)+u41pc&12Lz9jX?H*?l6K88HtZOQ@M$OEAn95oj|cawwgD2; zF~s+(c48m_6GW_I_02gZqoJ#k2q>8i9kWi@n@B&}B#}zAKp+wGH2pd?)(})ltAepO z;j)!wL?69r(nsZGY#vFcThXEd?{PsLhk8xJvG)KEeAT`@QfOH-dk}rAun;li(^pG! z-u0`a ztJ`Mv2+Lql*;`EN*23>dAaZ{6`*#3_W-3AN&2+}{*~sT{$(=!_w(KqvB>rgeM7DrY z9@Ozz4z1GLGRX>di7;ZFV(;P=oO@t^N9k3&6Q;8AIZ6wN0l6WB5D63WS_P()?#(GI zIsWJ*d7%6~#FTPJ5JOMiuO}@EFiJOe{{T}+1wjCr2O?+|)yH{b1GPXs6B}l71k-M6 z2~q-|V9aq%%1I9R-)sjZND#yWMCRnH1wT2cE&*cL1T>P(o<1qU`ZcK~Rxwhp?Z-m& z_~NcI*rk2!l8w1cnc)0YUbS$jE`eLL905)ZASvQ`s$xh9gPtaun*9mFeKuy>bifS6 z{{Zo)TQ^lmw|MO_xD!NyR`V!A!aFy5Qk7#neY3$cOD)%Ca*It5O-ifeH|<(1U(=V| z#HhFZ?|^^w-5(bl5D;R%xMgW$cOhzfz+eZOe+JC$OF;w{JkuRy8x=4M`z~4_yKJYmZMrxAYj9dtB zx}$(WGEHVnR<2=r}-ZTi#U2g9eAjqve#jU8g9cZMCwmw$d}G5J@0Fsj+w4 z0ZEDCutu*15VK5>DWK}f9-zcY`%#9KFpRNnL4>0+JYnRSyWsZ zC{Kb$D%#1qpcFyefFhfOdSMyLUnZlgwhzAYsPa#GkE>R=rC72K0X2f=mCd+O>;?o- zej56rS6SfuO$&}6Byw}|rq(Ay-n=E^R^e7t#NgBJYwq0~C^Hc_``0(nHq}kUpZ+JB zD;BT4-KlN1pA{|;Zo(YAziMX7w=a@WHoO@46gGr~M?!8f$s7SeXH9W$lzsb-NUd$6 zh8yn$DrAClM5Ps^I+WeX0-6#-65p4AIi`&*`!|Jzx#_kikLGDN?6tN=O-l@9sftdd z5qvS!JE;EcxhAuga#eP3A4(nT_d6u(^uGIoRSpWAedujyf(IxUeLWAX1MMUYglo)HT;%Ko~WsHG%&C^i~3} zfC|a|>zi)n(&dY>AVy9rO5SmclE8m$6XU8#e0-{JY?_N&XDYviMb99ZqyGSFvbNIi zsHmUxfN1Sr(ttzV*o=FbiaXlgnfZSf%&I#KeWs^AOQ@R49Bq5Q;7e%j*|-^qDT!g4 z(R=Wy<*eOnkpRMgDIbhgwY61FW=NAme^GwsoRzetiI_k*{VCx&O4}kh!BkOCuSK}q zbi0X=8hE9RZl~2OY@NHZ#K@(aI)`y}t*|GF5j2~&ZZ6Yu;S-QIVzpdQMjpQ_=+}2r z*PItsS2*_IQoUi>T!GASNM$POd0~<9MQ!e-rBeIBB>jzCQmQfaDqiNt4MHoc9Wxa^ zIGTp${F@4Zo&o3Pm-yX5c3tdMxlzSaI}!^bAtwN2QhaR{8K#G&r7ge!XFOJ`4bybX zzfkvguV9;mO<_%Hk5L}WFhiMMXm;wgWo}v1*+ND^Y|?O-lB3PX+FLhjy1z_R7HqBK za%Nq2*Bf8ddXk}i4xYr%=3)N;deeKRUDPkDcJiz=ki3If^<6&MzXMq6A_?tDMk}q8 zIr2?xPOiqURitf2`^b=qA;`<7p+-qTwj zmLKx`Ry*HIb%wdQ?b`}GT$4z-^!~owhq6`#?mw0%v8=M3UXi+w6)S(q)6{GIJ!@M| zxbJ8TO9T4NGRW1n-&ad=#n&QO+`E|bSae+t+Ug^QGs#mm+Ozc9+iG_O?0i;!x4tA zhMwK=@)PTFCOh)SI zCWlLL!Ap0Iyg_BeQ#D;4-jP7G*T5!BiJG5YDfVdonaS!u$%QmmTJQAV)N(Q43f*Ht z)Gb3B_5o>=>H{CObMNT)hGo~ipx83Mlu+BzI$Hw9yVS>GApW&7YIVQhP8dC=Yu4#C z*4e#HO1WSLE^|r_@di0LK&MLIJ-A0(5jNp-iM4#rij3kz* z!c9GGFUh9MvfK%4NY^07D^{B3m)0+-)7@7bhQ=ueRn)agH#hWD<}k*s!nq<{Nf{)~ zM4MgcwJ50Ef0S#~H%q%?`g$;u!dyO1e$+mVlBA{G0un?^!6)XjTG8nR&DV8K&IB;n zNCVA2-kVO!rrO#WoS@ImM5;bnNvVHovCXDnZL59-n38t~ll<00YS-dfUfsC|n@5^m z+cz!yeMPuOby%#(&Tjw>!E>L=X0?QMZIM1zdWq0mdZo5@>F$O90IVrBk5q21qS(4! zQMe?;pPF^6TDQ7o*w1EYiqm_hUQ(povgeTvCZ+PIx@M8%m0C=~Q_w(EJPJEn zk#64mb}hLEK_W-qwDl`D#j$HtP4pkyvjBhLu62+vSZi8+6D71h;z0xXs9dg3=l36_ zRoeZ5Yu9xefw75k?hqm<6MI{^a`}r>?q=eA)*W4)Gh2HWZxn&<2-Ek-uQk;MhUKNw zUh4X!wyh%4B!m0btt9jhjkrlR)D z-yKT(J8N@c0E5K9Ijom1-(t!?DS{01UUJu6)%6ag>FM;Ypq_5FSb2)|R&BVlo}mD& z2tVSFY?Y=c+IK|6g;@*w&;9=Z1%FQA1ONjG z5FkZp0>D!Rn`{6N`K+K@1g*kTAH_Dw0ZJ&s_b0UuyaagN+9l7!j3(p+g4x8?Dca>! zl12%tz3GK60l5Zt%$jRjgX$Osgpdw?)ecclM$dvvZ2@i6p|;k;W@L`k%YTJeP|_QK zCX!Td+73L^t%$g$LjXhqCYx4*3f`8D0EKW-ik`xGtu}R%58j&wzu3DO8|w*$P^bFS7o7>3?z_bR%_3BE+}h+xf}z7O}5u9pxmHOB8sP` z5}QiLdY1?T(gz>CIGfir&pIP*q6BuVS6=9!O}#$*h9ZSE7l^f z0Fe>=)9u~dHt$zZFAf~L)^ zea$(n&udT|F=cdvAW_>}5DDEeFnF4llVZ<$9(9&|Nx5!Z_n!3y`wXNt;EmXKHJOS4 z2rJwVG>^n-R^H}FaAHWDP@x{ta&qmOTJ`n0w@w+D@IcKV>GdR=mo2zymM@YhtX$Mw z2I5^7NDst-4e!Q^dDQWM59>f;)zmg$dd7QA7MnuX zrrEeclasi9)uF6uEZW%Qq1_T&6*(^K&RlsrqOM)Ja?-2WEI=QW_NrjF1a7#4jx$eH zvjMH&D4=IGkl$N47lVR-T8p=$)FqDk8*kItHeKBY2|j7->TG2j4&j~+V6}N3@Ks1% z#GfX&4LX)Pgpx2hp``l-rAS4WvKYBl0CISmJw@x6f{P9UPH2XlGVI!>e9&7|P{Cah zqku%wENIbso&&Y(D*-CY%K{|U9d)q!n`%H@$jnV|HuY%Y>M#Na>omPapVei1fNo9? zVM;aOnSI*XT5BHCmk*{v#GYtB1!Z5~df*e-^F%BK18w3;pEPF4EH_;QN1pVi-RRQ= z81!a)YOoEqW#{imzo)dy%234au7&vlRzA_1LG=}YxpV~|+IgQe?e}Cj$F<-6{F(Ij z+S;f1=#p?1An)>hx* z_8r_4ma9uz)GfB+vi2-aDxalUAQ5qtkt03nx_vF^R2s5D=W(jjS~8YTwEqCeo0sl} z#^s&}5)D4x@MG1IPkp$i3rK-?yul}$mzvL@+g&6ad8ln&4ltYSk84kO1`iG6ZYf61 zq#o~5NXZ!$hVj;H9-Y-pj1hxPvH1IQ_=9bij2W78wy80tkAO9%z_GAB!*mHyVmYrR z)c&H>Cbg|(^Y8HJLTe7mD!w+}qUVBHXYd3vgUg#Wc z4T{xmE$Uqv@4DROb{x-&6H-=!T$b8rUgtr-Y8|y?TT}g~B-5vxLF);g{3po*G;zQNmxs-G-iv1UtxZ&_&eU+q0VUDI0Xq{J0w z#(d(uXHn^zM0L!iH@I#FqFT-u}9pwK3>sqZLt8<(<~H5{%Si$!s{ zMeT}f3w1Uwn1=%~-m_c0EL`_#_if}F+%EMrcDS|($02ZQpMP0+-DSULZNZs5*EQn$ z{{SY5PF~jZZqwiC*X|-dkwZ_oj1xtE$4#?zAy-D*xR7U_4RbVq)zt5hqJi``^%)MYX(9UCoj}l6e&_Y5G&5vg&RCa8!_J z9_@t)8qh1>Ijt67qCKd;rEjv7y;6g#p+}M39Boqj)NG01QpjNf zOjC->K{@Y0RY8JgYdJe+jk*O;<^dK!ZzJ9t<2-IigFG{kv;8 zrx&uN8$;4mz|B3Fdv_2BHI~-aXa;AT(=M2aF&tK^S1TtLs>j_VyqO|7rKt|Ua}>9@ zP03LNVy@XG$YD)RGms2cZd){hZS2~1fw&T6#R+AG5J@8@Yd7K` z{8aVi#}!I(=oDO=wjHF}#lw%aUE4+OV-ZWXV>!vDYA!T`@y$bO#F|fH(HUnrK4?sc zk^In$j2vzxiW`i;0(fIsP3&-S@Gv|$P)P!finDu6QiBpi4k}v#oScr__okNZi6m{jlr4{gL5;FI2sL$2vEEAPP0~4L?I-U?WWbUq z9MIhZVUq{J?^Krxl?TQErYL&eFR`{b^x|QX3OT zrZ*LX$T_OYP3+2k?v0vs$Z!tmu8xa&LKuJn5)EKWq~BHmhVNZX9in92a8Sks2(G>; zyUFxrCYGh6c96-7Y$dbm#wVYe7r4dM2PE=)(IZ<_3U>n}p5vNfy=!T8{--cP=BiG&K%?U- z1iPey;IP99nE0Uv6{Br#mvqDA$jLRJ8(}4cD*j>xH_7-ZaXEi=p;j!} zboR`KgMul?N)4jK`(v6lw*>4PbKkvH(Xs(KKLm-avu*ZVxK(B3Nm3kcZffq^d+}|8 zfCPh9_hpBuL??KPD|hXba$a_m200Z{TRGyQrAe8}-3%es1mw{*p_#kR0rB%pR!{Do z(a97y6uJ@sGf6=+e^sS@nh{V9{<)DDie9D$(4!FCC!T}3r`bO z7^l)R_3hdpZsq$TKp<1CYL4=5sJXO^Ok$F{wJWjhs}{tXa$K~l1r=m*7^5GQJ~_!+ zOn&V>!~|OagB(c|x6&1cwP{FVK{E!FJ#`1t^v3goTQqBa?VG@otVVh5S)}6hYMPvG zUH*k4YOUP2wHZX212pR|drr#ES_fh~P%ggd8^KjEz!b}RhHgG;6GgL2lTHl1&BYYv*p;cp!ieC(UM|Z=uRktx3Q8@;=R- zNzU9UsJ8;n(92lt-P0<&GXuG&JkOffZ&lNXgt}F`g0Kx| zE$O3ZMW>ad%?+&4>IvO!TO$krfkkTOn%tlzUzIh_zi2XtQWzf;39DqbZQKIpWkZNO zQ1~PLrF!)J$q&}*wT*FFY`R2<8U1Ko-tM2&AX|RmWKwT+8*HIhOo5|0HGl3K(0@e{ zV`+mprye=2(Vwrx-`qWsn%FG9;oELVs$?(05wp}=^%6CeSg8JwO5hhcB&W=7^Pp-Yp(?Y-IUDWV0={#U9E&52WiRXwOZ6_ z?`hiAt2P20`h|p=QdIVhA?|vRi&nMwEjI0dHwA6QShR*s`-}<&1g=dzJ#lEG>QPmD z8-QZ75N+;pw1Q?q258@ammDJPpxHD}Hj~#ZMj3_$52BkgLXIGgXj@Zu{>bQeL-N)LAw7N+CrQ(b+B=cP4)ZANp z{WCu&`KPZ?vPR2~wW0vqQI8_>TxG!pRKIcRbXMV2uJ2%CR|b=I>9)!e+~PotP}{mM zx})ksBH+mWXxhz^;3m4!2f3g7RYt$KBAZo0-u9y5V`{_}9_NV_k?m>}BYKw@M8OfZ zdsjx@n^+O{YgJ(2@Ms%La{3p2b;fQA9w*H=$rY~zJ_&Y{zu3ativ)Kt!VYSUf- z>Ghh04V{IhLHki?j;GN!_4m^2gAwMc_NP!GG(yuUl|HM1Q%RueZbjRPrUaP=*d+e| zHE?O|lgR0;x;i$8qHV3KIT`sit$-SKb^id|Zp~cbs=H?9&1Ruq41ev!3R>#)?SItM zo3~8BKuB5hLzQU|pq;w@4R>{VdlvTv-+Ojc2_#S^pxjn}!s-Y-%IyR9t|w6%+q%8N z=(e%K5Dfk6uhaDLriawtz8nel4k{h8^uEBD8D?3NP3c`$_P}*Hj-uj zBIy4B+)rJP<^;t2nu^=4?YF15Dt(}s6?TQKI_|piNyt7cZLLO)SRz@pjT{4$PIFOO zMsbAO_cI$EKnG*0N6rONeV2*Y&guuaG|nrbYWGjHtk0vneUzL8#LtsYx30MM*U;&D zduniA;K?%Zx{P`0GK_OqwdtGEXS*T>CsoOQKp zi+EY%+Zg?7vVH+WF5bQk+Wi+&HkQ$A7Ol@JWd8t)^W#CJw{fmtxp~!Edq+Ptq;&PW zY_08Hr5NT`>4~i4>DxD(eeR=v>bZk%W(VH0ag*&DN^pjiuk;R!RnqP1#;Z+g_2;q* zv$FvaUdN|(6L(5=OK#Z&g1dx@^R1)M=`8v-I%)KjOl&2b*ITFFzQWmk8rZU?6+S-I zSfr>?<&1hdqpQ0p^q$CaGqFebG%cyrJ9aUW3i4=;`xh2QiJ7DGA&=gZzfz@3TlCe= z0bptre+4r)&dOBF61f!B+N`z+_`2*w6_3>C66YpFWizgfr)}* zhbFdzNs{wlR|e~b4Zsv^*ACfo3zHCCvW-ai@!`qGIH(nWXBj zha{1^u_L`$y!Q*O)R4mkd8jTckqW8VfY0kiY08teffLwLllfaU$)vVt4p4v<(1QcK zR?Al|NFJe(I5dlwPpVLWMhP*R(63~e1hinDGfGy~3K+)Sh#U8{*Hu8K0b|W*v3B}4 z<$G+$vB;&rr*%rHz~oJ50TrjzAP&UT;Tak!%ftRo)}O6kC)3qwEp3>Akxtb0E}B|D z2o^`>UOx4~w|&-j1u$bgQN6&~bzVCj^(%!bXdf)R*Z4XX*GqozDq}y~&;?7@6V~-T zt`)F5S1@}U9C6JtE)eI_P|QS8i%ydvd(qL;{v265^nr@gI=y*$ADEyW<``nAa~ zbX6*u01~AdH6-y4SI5XO@-qLDWho)R4}zUrx&dq*)%k~kyO3AHC!52U|!k)JH*ou;O&KPOgfGLPHR7+wk@Ad`6G8E=7}}d z^J$lU(=)|IKN}pk;AW!koviE{S0LvDHJ0z;AOmU3l@JKPtzV2rfDA8*%@W_!Twt!z zCIBOvOS@>c()Ow_TD^Qn;m5Lh2DKp6Hsa9RhI`YV=TEZ=8QAj*DQ~LM!E0AxqF{qH zPD%JOcYTUyRRCUCQ;Z3rxuMbAxLHwves_PGU9O@Q;dTL*WXPJ-dYzlMHrz&#gWMJc zJDPePFq)xbr(Uw4+DQ|JT;i(bj;xTSlo-Jr(I&LYsl4h(8O2!EUQ$P@4&&TS4=36* zhC8MQr__k_&E_yTjEY#&-}M76qU<>{S}t`9p!*E4?KF1p>aTl9MF)}|oiw^Kl-Ksj ziMM-N5P%h9fZ3$$dWNFH{{U53uay<4Eb0UkaI_OAv7)oMw76Cyv8QqJhfS+yO+KpK z-HmV(rX#gB<;31L-UJcB?M>9_>|I}dv60)&b1o*L%Mvu+qPfdSz^JtT(ML0&3xxsM zNGFk5@7S{2w!0E}B+^#(r05lSP#J@i^h4fn6NaVOuIB6fX1*FxnR=lpH0}VZ?r7G;1a`fC? ze&*5A*JG}p`-3>nX>Fp_+mUZj!G{KFwDzxlU&T5o05p!(L;${+)VOz2G9&UfYnkh5bQfDwWjC(qP-eZ-^$jxE{6)Px z3v40C$vLh~%}3K(o1rec+GQlMA_(}W>9@2~oSNCr)OD>EroatrWzr*Z*Dn76PO#AF zsjva(`hcI>ySmUnns)bw?|=Z>h0UQ0gb{Z?rKyoOt?8MMI7a^ zrnhZM-$p!~@kOK8XcG6M=pm8rAW8ezTz~mBs3^Xj@biKI0{e0 zWa&}2sealOtUFe0qX2WBE6ep#E^5gDf^bRVy)%n#WuHxXh+L54C%tg>I-N$L84jG7 zGdoDEexfo%j8k6ImP^|*q>}KQ&Ps8RQC!Zl14}${nPZiZ9>aj(z}Vl z5N5gKDJ88MDMqQGi`I3Uh&qQ7az%8sCeH20tKG5v#O#tya>c6+X!^+3o^T@-O{D&w zs^`*zRyC2Xe0okTu>_7y1*Y2A z{Y_^nr`qutnj2s+Vx|Z_d97=6NboKp9$?knO&6w3mT=v~%_qj%yETm5 zYBXfFhkO$t{MS~_j?>!QZQpf)B|*XQT$f@Pk%gLNy>_D7?MtOW#XdPI_aQjnnk+u! zi4;wAa6rKAS)S=oJ&;L>^GA{ded^qlUWTUM=rJ6@pBM(HJ8j~u8E8BTihvn75sHkj zW>ZTovLur^9~2syAYc+RG-}xaP6b;j{@jVEm8VR$(@K$)DPj3Unl-cyv+#3FgOw6V zIK=}NQvzqbC9R_2ES869kSW( z+e+-cWr1yk4$^+~i)eQSVb)1nWaV7~Slvs;~4}bWm%H5<&R~?Kt<8cJ!&opYF zFa{H)5xtx)FA`&2$`vIQ)Se&tv z4RfhFqTwd`R8)~95Hm!LwSZ&KGy$>!QbjV-lK#<&?^i=s-J)DOT;rcLcAca~+#cqR z`pdxpA11EaC}koey<^EGdnrZU!)0>Bf$b;FTB<7-1QL5xcM%XwU>cyqY2ScIlNE8b zv`ms+g8tG7gC~j>k^nVlZr^BZ9%_yNo_y8*s4hK;yShEc`K79uJWR}kS}uSTj(k!P zz@Id}^jm4Mh&b$Hk2Gt@&w2pTW(a}JTDQ23xbi90XqOdX1~PX+9tq7h+kqI6XgG)m zBQ-!gfS}_fnxvHn>S_$66F<17TV+=f$9heqxp6k_JCADU^xlF8}oirKTc!!`ti$>)mnxVT;W zna=rgw~mH?w~5=hMcjQJdUOSH)>*Di3>C6j{_gwt2a@b`v?G{6jR# zv4}XKOG(PwUCcRbpS=s(yd(q%_01l_z4BD-aRA&dOmP$5mTackR(K|09w=Vj@i}Kb z!4zoWUtv-VOm?brOqotmbc9}Og}X>IKxC*;A!^~R>6iiH1x|f#WDQtxYxSUe; zT%UBtxOk)5DYQzg8cc(eJ*iHfnUBl~lE$33iMbQUA}NXKyA@)hM9XAQJzNI5&wLBOYq_JUXw}n}G-94zb)jb4pPoq({rMC>Xn5^e}5=ZY^ zXQ4H{p01)>1_nR;E0pq#K_JPJekcpA#34{9{Gfr}hs7_JTKa~c+L_dQdLbAB}jrI zGf{2bbtQ7R2g#;d(`p$>OH9&1!kkd#zC@tq{k8zoIUs%{kQfjTG;5~0CB)n^A_f4b zE}HAw2i&k{h^Jb)uF@kiFiqXash2G(iKKYH`=-BRFX3JplG}hzOcnql zF27icOWh?2i2K%iy4xb!s}Nrx2;frnB)dYw7pK3;oGN=axg&^~#WK~qR**8_eBcUh zivE-UZUDn{kq}44YPWMrZf!_{eW22Ojr5I|8j@7RuAQ!JKAQ&OS2cHZmpHarSco8+ zd+Ied_xg7oQvj#}IizZ}7g-BE!!ww~)MYlt*B#St(WQD$y@jVuYT5-x1<(jFneP-M zL#WelYpxlGo3k~~Zm8CjVVutZ=7@C*jGG3L&CSH_EFg-Uc|4UKPA#P0?#*hNcn8x) ze&BYcYM#l@pjI##e9~@fH#{zwqePY*Q47R|FL1K3{HM>F+N8GGljMWaWn8ssH2(n9 zcvz5UB9-_n7dG7&0Vo6#*{7Xmn$&;kEjc7CGoRkG+}2p$j@mm&8;}krty@|qYlZv_ zO$)WmT~IdQ%{JzXSz&i3+q3<^)8(98d!0g} zn~oWnNrsrJT}s*;Lj?rpu<9Ar(k~s%qrY-0-qr6x95M$7B$=skT2fP?w7nq_M& zQ%u)xG>y#PJe+^mxC83p0;_xZ&T8> zU;5R3M#CfsIV0kQwH+WB;C1Be)G0fH-Hj7`WvKb!tqz=**xISyrwcdol@70AM zz(!JPTd}6rv9qP>7ElwETV=m`&(n+YZuy*+)qmf?)%t6tXf)kF{{UKr^&Ux|*19@A zoc{ob2HpPvQ2`CIq0AP>PHM^&229EO!SFgV8mM@v}R|qw1 z&((wbj`Qd*z_?lVjsn|1wKGX;Sdzl!yGjmA;fSQ^y4O+D+bd$`@_F0=s(!82H3TK{ zj~O5ctlH$3-5N%JO?MZwRjam1WqY?;S_usTX|`_ZZC5 z^+xk-JC(N*8cuku%j%0{rbseHH$=BRA-2QrxZ8;%gA~*hU6YjLy9UDKnZ$A4wA$0^ zwJ3c6PJ5p9E%fbVJ8o1}JTQvVogb)M8{1~WWDWRgiE>6gG*=%C--d<0mCenUgG@s~ zn5)z2dWs#oYZu6jk;(a@ZT16hP#FvXJkx*QHGxI7v$OvIk~T@Hl&1dGXxsk)8oZ?J z3!OWx-n7WpTVV%#Iol$$`Zp6y`fHJIcemKyDz!T9qjpm6r%=nu1i-7bqT)@$`COgY z{{Zo+#!K)`@p4PH#9PvS8~*@Ns4P$zlF~TwL#w*iZ4sqwLv{gSRF+1f<@h4sa>}ps@e45Zd<<7Rj2w_PTG@l?xd02E0HJT zG#CDw>9=m3_ca(W4*n{ZPSKumZKRm%+WixS^+9z!lwd_UHCF6}w`SFpLfC;68c(J= zcAx(MX4Th|B;0uhy4E!MTS%bU1(&~pT2o7G%4tvSL1-@mJyO>T!TiEN&1x6@TV>6{ z#P%r^u>O_NYS23fl1Rteo)b#Uq4mC-WJj8ZB%hMu2{(uquc)?EF#xa;^G%K9f=Ju^ znsL%-9_RG+*2X6)PHHxiE-&?!)Q&hbOO`$xH2#)t?HR-(`y>*^WX&C*L=$u1SF&6y>BR*}NeqH0*ny(q?x&?T`f}fMhqHYLzgflOAhEo$fB4XA>e$Xmk7y zJb3-uMoZ2_Ataw9MH0%}lWTA$Lj&5Gs@1j4w(gT1g%aEz!4QDS9jH=u(KtnWvMDax z5*FRrBP7x3fA-jiC4`bZiKz2?; zBD12t_+mVa(XwANa00?&W}-|W(rnV!5U%ugHyGqc6`X06$wJC_%@Yf&`J80%PGXNt z#Q`eIyXK=UT4w5{tVFe;Y2XmTB1Kh;Xsq_YB+f}Wr#`TSC@kAzys$ZnXzFT^?_%A- z+65U)vK&+V8Sh(kC0BD>24s&kE4>+rwsJ6QYxPU-HtktePT(xfEp@u0>K{sOAQ*uW zROK%*2*Zv~?lT~`tGm-J+ls@Auu1b~}~!I3nx zYpNQhrvCtgJ)c`l0~C-C2DUDs>bDfW5XA8y8mqefQAKyKK^%>+fBUGK^#Oft8kL?# z4QAx!;A@Q~l8{U_z$;nS0-zFnH^nd4zIS?#pq~P*^_Ibe(jqD4fz3g8O>*elWtBng z+MIQ!hbE<^BGS>k%Fh502$K}uM^E2m`a}AJOoK|kH?T`rAo%YUO`+Etdyc68m-8iamwg>_k$2E%P*$HyU5y2HLX{}sx&dLxBiGxz(8nx4rxWMvL95j*w4Y} z{V}z@&5zASI(D6bX1K}VhOC;dmf#QlMa6gm0q;a?>MTgzGm%bK+NlYoyNGr)R;@U2 z=ZunbT3sw4G6OI;BZ}v*<67S4S+>o|=811zwyX-fd@k-QO zb+$nm_@p6g@`M!;*vIolYe0agHxB6h&d2tsaox5F?ve)9sZGyG?+aolJ}W)TR|qd} zP|T!dd{n>Ft~J1H?IiiBZ%ePXgDrJ#>kuA#W2Z zdkQnZ`kC+3;!*!0HRstMycsglXsAG#}GodvVH9k+ZMU*RrW0liYgjPpX) z^*hM1sbXA6jKx5@q_RugC6xCOyY!+>{Gq7j-HpHagh@+bmH;Gfx#YYLiH=&kXO=>(+ABwWS2y|YMV9KAcE|KC_HgkwOS6JtGI97 zvc9i(iTx_ISMM8k*&5xud%fVC%vU4o4ySiRX&+4fv34MZNfG9j8EuXYMW%B4&F-n7 z)H-PF+j}_nD(B?ao^39VTc~|byGHGCj&`vX>eE@K7X5ypx0JZRRiE)(y-!oKq`t<@ zm3u5?2Taq9Q_wX&;5GkhbsaL=EwK-^u4a7G#+J)cRPE7%_e8a%Lw!1(u%q(8+{}OC zv7JLBo$+=~ON{;Ntoa3_)tbK7!rx;|^4)r*r& z8ZJ7~>1|nS=x#IFA$bnaO=H$7mSnb;)cNAMD|+MiBzCTaol`xMo`5aHll<1XC!~o< zLDiXGM)uFCcig0MDz7Gx+y08a@G?oobaa}FI%O@X(%ia}!n8#%SFF=ry&7E(#Uf4# zKdomjHrAMfC}p4Hb<|z!coP%9F@E z*Iw4Ep^G7$Ul$-w-U+Ly$=afuX)iQ++kk{19QUELK#4rjTWR1)oRd}pf=@Ho%jSKd7WgX50Y+b4HC1l6lP1ZYy+Tt?i+yaX=fC88ktpun;FR zNi#4qCae?8{{R#zC*(`otqfpu{juN80k^sFAQ75ia8!oLAI(~BV<1fCD@BUzw(`;e zZ3M}K9qG)fKqTULpdgalNauq>hbB&DrLCCB%ln4pNFs5~Ev*Ryd>&_-azTB-$oZ>e zQhSpyFn%>H}CGK=%xh!Nv9~8H=a3eG3w=Jb*Ex1oP z6f0|D$pe{_n#a_>iF}b&@-EGxg%B9`G?(_>AdwtNHL_Kmn-a0wvFfds;DIJh6!Ef~ zbAHesR2_g#1FKwNxrgmd*y@l-GAI_?a&tK6H86vs({5W3c_BdN4AG~xf$idqX~8nm zBA5_cl1$A~wDexUxWG5KVtmr_Sg;Td0I9Aem=I^p3KFCec&VGV=#C0LJi36mn2ZOo8l5$2W*H$LyZW3=qF+V5j6%VIlG8D|m)=~ZB4&T%BsZvLk3 z7m9t7=8(%lUG}koHQm$bw2KTIcbPFYz}{2x$2dM~b**Ob!U*j=S8oH3gz}z|*nLKV z&$wEao_BVvcRJ1G)Z4jis;d53AH`wXuQ~aXRclXj>j56pYgx`tUe;si$8JYKx|3Xe z%;lua4kou~ZfY)!Gy)+fIhx6((EC)fL?0E^OIKl4PR#cev>@NQPhym~+OE;LJzG|` zJA1f~HJ%Q$;kzP=a#SfzNo1`KwSHjR1c{PjF;2CwRXeVRRe_Qu6G_w9d)GqcL?70o z*x2frWI_oOIH+-gblFgognhPY{9-lG%WP-!1~{fZp)R{yEEY_d?O6RKhKqnOI0W-i zSPkq@79Sa^aq|>X#x%+DYihVwPO$ap3VQP&e_+ctuU1i;METfbuEupZe2 z84_rx+>lEdTw=wGry-|3=!U6)+F0P@=AH$nFjY$P%>yl>tov}FnWIhU&l$&A2^Uxp z$}&tI{{XEX%ckQh*=3H(WSSdp_O}GJCS(#niel=nhMmUS6EZoYELDlcr}+U_QiV<1 zFKiwQ5OYRVt(js>nG@cb__-iEGcn}NF_kXbB$iMzF(l@M%j9=UAwuLa4b0|=E-JJ# z0taF!w%KI%TWLJW%_*(iU(0E^=bz@9ruGp@M*Nm-rNCf9F~}2&wQ>nRxHU_vYiLkf zQdUorXqx1sDMSimGX|D#EuvImUf!5xRFcsYD|Xr}dR!SGQ7)xi0qGN*gZ^os(PCy4 zMG3B%Ym43NVXnVUEp1+#U;rdUjMm#-X3`K>O>GGfNF3G^Yecrto2sh>nFMyF-nVU> zGTip6fB+r5)_$KHyR${l%f(IC@ORg%+P)PofXflI;;&JAPWMvZ;Vb~gB$=-)jrelV zZn!3Q5F&_bT}XY5;xh)b{+d0e(QE76^x}F8_Vl(dNhray3SOHwjlx-Dx<~6+?q64B+)EWR&0`vk zY4_c^d94f)5I*&y#jQEFFL>`}Fd&?L=t?mZr^z&xjJXcL?_r4}$)w)t#rE8H{Kt@T z1!zRFZI*KE+yW`9VMf(AB*e^QO&+6<;Kn>TZSVIm-RXg>!s-e|V<3q?Wd5xKtgjex?Cp>&iZ%t{^;2 zigm3mkf2?@U~mMJHLp{zwR+yq!CA8>0@x!Jg5~jWFtUB~i4-iQzJhU!-Pq>0q*Wyu zi>pBqio2H)ZOI@4VMJzX&8=#nxF2YMSgb*yw!2$}Mr`+G8=z z9laTKEN)7{;ixx}xtWMOoK#&+v>*UUR4ikfZCduBs6{P|T>)Smf=Al5H%TVYYxb=o z%%Ckl=9IeaRktSJv7#v{aTX%@Nv{WpsO{ z{hJ{?vyw@s3s&wn$0(o~0DqdR`YRw3fv+etEs;H`cc$HqHH-GD{X?*N7Uo;4am@Zy zS^ogTPGsoKC2eYyK!8Y?u5Y5@PRK(tXT2E=yJpq0<_wcKtHmeT51B<``7mGI7!sCwr(4CbWM8P zkQR2N?J*t^v_oWm5tDNCKvdU2jzBXJ2B%UIfA32>t3U zMVdn@_a#BzIvcF5a?)D^h9W<4OwzWO*PSC4Wo}ep)|b&(vvbzJZA$V38CoAxrdnaM zS8CG;EQ^lSs_*blNiL0JR$bMupooqL&&<<34dsY12+W`2vkSHz0JH(3hHjDo)pB? zI*a?r7cLPHK{+*(O}@<|IDOT>`}sC7AsJUp?mM}Ynj1IlbErpm82~&1SzhJ+r{8b` z%FZZ5C|`0C-zKUMGnds#%cG@ZTcKjx(Z!jAx0&-z)L-bSVM;!;aX;Dat}>%sArz=t z917Yjt%Vy_Cz8MYQkNW4+hs@UTHPU*{{RZ)GwQEcO|nkOCYfib=`CAiU4F9o1KJ%S zYX+dG*=R{E#^cGPlqzG}gPh2uxKy37{{T_R9|rAKrO6vCo1|od(KShS;WoqRp4nnZ zgE99tk?*ax-flg(5Ln-b*X%XzUIKmNGY25hq8kM+ zT)%CDWFWyGdNm%&YtBg!Ni~R|Tg<44O(Ny1rQ*>nAMJFy+=Bj&{?I?>D>A5Oz|r(LboTLZi86ZRFQ zZs~OP*3F>jXaN)r#+`dr(`=So_X&g80xM0s+Gf*(WGF}XBWXyINV|JTmjU&Iw82xsqVK-m(i| zk&!vYWqXfslAvvjK%(V0ZfWBcPCo?GO1lgfUv5-PVxFa;A&SR%tlOaC1VF>C6e7N$owP<~)YiJ-d#f~}d6nxT9#JDFH^B839_fJtHIh~3bn)ABv-7XUueF*(gv*SGE} zV4gXuD`{B{@>`YwO-HyzzzAR>W+~lhZVUTDwW$`4Mt<0)F0Gr|>HzLWYd8o2ZRNqv z*y5VT-qiw2WO2<7Do=Nu>X*ixSS=CLq21o<7IhX|ZD?@i9 z29^zIIPuFU_EpV8T)8~rY1UwYa3+7ad8GzjxV4o$_M*9U$Mp7;+GLU5iAP#RwB5>D zX5UiEs_xT{C9};w*HG!+k#o}lU?NyV{*}wJ4Z>e(!T#>_Zls|R?j9=##H(!59F02v z0E44zsp-<-xVlSr)R}?7r+>KFJI=zO{{Uzm>xeECU8OgF#RsZnW&t^-xFaW_L+WIk zimUw&&ZDeqt|+vdEus%@e=)4Oex<6kfj41CAa|@66a%|-g9OK#5nwO5Sg|HfdsAFI zadkn-%|9&Z+tzAX4cpgP<^aYh68H_6VOX(ofDAzdcI{g&Xf+Ig>8yH$i8G3BDRxG3 zl{9F!`e#O*Fz4+;ZRwE>#k$bYPTI?U#-`8Q~YBV~9D!WvM#4?%vD+RAyhq-RymWbR*{cBd7YFWM4Zf)!dnjBj4S0v%pY*9BX zrs-e-%n7Tvdg~HGv~iJIh0SK1o%V*&kr^hD_}!Og?SK@CCOgecowcBUZ*(oMYMI!} z5TF3HYj;usELdlPBDUDqSZi=n+MoKlr(M6M*}0nCz(fh9mg&T(fx?7cnWb_uWM{2q*+2jfItWJG_5_?xMeRaPji^0o2wo%PfT8uRjqcHx)G)U0w7mP z?e{kJqXuJwNv?a@xVJWfhub{nvNemK9e{#QAi$a$jJAkVlpf7mi=9EyShyg6Xs&(T zX0i&tn&Bk=ZM#Kl8h)ecqg&J}fHJIRX`t#94^W3;k^sdO6top8?B>{gQ*UOsa6uU& zoLt=?HP#W#V!Ik^#mEe-4`bS{?T}d9Ho(S76gl~!;N+<@nQqmSr&qasE+aH^Klo~| zX|yDhYjVKg3e+rU?gMTSo3eo*R(qN!(_cFp19AjKB_`ivl2P$yX3@Ka7Byna4CHf8 z7PU}MsU>@wjIM==DaW+)nhpBBI{JrEZaIMUe|NztQ7zl*Zgw9;s^pLfG;edL0##K= zJW@wiz3UMu%m<#-+x=C-4eCUJky4-Fmlr2W(Z=g-sz&v%KtaslQRr>l)oE^Cx|Wqj z5DfO_hpt_>t+#1!vD>@0N9#+owGm2^atureryQSxXB7OlJE&Ro^oHv_yTlAz*e)@u!J#s2`r z-t{)y5g^E_!Ari&ifvzmg{sttxJ|79O_?AGp0=xGBw!e(hT}xu< z!DG+InwGkW{65`nn>Ry@kl7!_V>qR}joRg(;T$#koplP!cR_8CkA5=W{nj04`+lH< z_)EHVe#*HO=o3NFZd(lVZTpSTKT4Nv>3tTrV^e9{a1z7Z1x%ru*yA-9rtI<>jV-$w z)9M(H1ZINL>n<_$OA>Npn)U;ubn))iHMUperOc1ou1w{qzKSbZTt_NZSg=qb$aw#=r@oL&QcXfR}@3iSi`7KSd{U}*&_Md-{ za0PTObgq$cgId(BpxkT0S=Cv+Y(&A$VAQnQG<=boStfDgY4Jc_C+%9= z%kE{7&MPLO+b-fkkY-}In(%7`mq;DPfBU1Ka6hg^EkR-r0OpuMA^{Z*Sy@Wym%c*~ zV4s?#E!gDqQrIUBqM8sg5V#}xqAwi{xh1l#i6;m5rrVH61gm$Yl_8{(J5&I!cL*kv zb|}tG?9duulY%O?tbsk|sdH#I5llii5L8lwRcx8J7B04{$u8{uAzVi2o%A3OKm>s;F+uT*u7X< z*yC?@cC1VaTc|(^tVi=z4p~ePPdT9%Th>rG;LrK0c)djp&Q-7SF7f`EP$0~V&^!AA zf@U*Xwf21^M`4#ZCb{n0oAUr?HH(!>nT{@A<~rM{w{VpOjzrQBZn#MWNd9P=U46iMDj#~S;{E6wowQ3sMdj!H*=hGS;JZY0dHuG!KPYKgDe!_ zX0}kpnEH*aq=t~VW!z(m4bRTk86bm-VmkuKxj-2bVx4Pa*(_KSAal)DN%n}39Hg!+ z&g`r`*5DpUITfPO_L5+!<274!==(ORzy$kdb5n9|EK(6gE4AN;r7H=Gq55WiLie~n?44;(#VacneyB0C5qQ)IjHpB()26IDaRd5(9 zC%pHlH0Lb+#Bi%V<3u_qgpFDR=?22d+%(`wGw&81qItzi3H9dbInm9 zS(7*boY8vBsu2k$eAR7qj9j;jm=^T+z-8XSSVW(_QrWn?w3vba0D9Clw;TZW<~Yq3 z)ML5sY~7QLe)Tbv{^Fkn^zO|1U8{Y!k8kpzr`a65K`sp~v{{ZHe`bPCx z1<=3=In5-KmwF}fOOH}?YY%PL*yEg@;*0S1%gAlSoB}a5%(-gn9m|->pA^e2cp&z= z3EX#g6z2y^7F1@xx-FW|Pt_MtLY5*(T*U?J8oOTB1fEa2g>@>o6c=D3Msv++xvR5q z0pisDiK{To42US*~=AcdoWr6L11d0tgh_U2|8bAG&hm*@OMNP?@^BNCrU}pu4BOmY^Y0Rza?n-oAAX z-mRNTUJtZ)6qVJxype<6h|X(F&zp`PY-NA23voSx>`H|jiQv}zI{t)+eQgEHdw3v7 zHI7>QJ25f`j%W%kz!AWM{{T|)RN$xBq01;OB+ad?={Ii0yLUlj{lW!N)ajJK7LwTH zI`jJ1BdBPX>>`gP&4zpHCbDINa+#A)CKTSY<01DYGRwA=SC z#v33YUMqsT?c8rTBoiW_)Laf#eKcd-85J?%N$7I=l`g;U{GDILs)=h#49OGCQ0lgK z2vCD0%So-7U14lJhj{{ad9v z600|{Mzx~x(ZKvID)W>rbYT6TN zG?TMi>U79eblPZcvVuewRaHFS=8xnrtP;?qAi+AnN z;RwTW-|mgpdRC{?J094K<-qpT7Iju`Y!?&&AY?GC7Oq?po0m$RG>?n{L9M*{hDFk7RV0nh&QJVOFX??acVBSs8x)|5CSx3w;E0`Na!{{S_^OP4n? zwPJMCtm6(;~CncO%>Y@8+{x==M2F*&F6VvBpS@`> z$%<}TYxgqT=uXLPZYaHUWJrvE-nv>l7qsduTt+Al06+q`+RI&9K(np9#TVKZ0Ho;G z>d#RhRjCPQce#-6WAWmYTYd*y+>XWGpP)K}sdTt*at{1WYYax#Wq^BpQm*NdHU+rs z!!G2`>S7t(7=l6Y{?T9_L`k^ItBkqqn>8UO>$ z8(dw|Nn^C&p7cL~RJ*fAkla#Y(%dBAex7NUZdp*J(QV*NoC@b!-U|{4J7!J=8Fz6C z@Oe^4%}k)XMaPk@$GNo2?Ds=RJ))1(i+hiLGg;$Ny@B+I$-{S{RV#2e_cRhk7mA}! z>mynzWg%F52Okwb4?gmJy~z}{^%W;;0W&0IiUzp%0AL6lRQsOOEi{l$gLpQAsxagJ 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%0ADe|f4fqn7#I4) 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 z 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 AQ~&?~ literal 0 HcwPel00001 diff --git a/data/themes/wallpapers/Paris_by_Night.jpg b/data/themes/wallpapers/Paris_by_Night.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b4014ea8bc8f25722537da0c4bbac611594a072 GIT binary patch literal 173611 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

  • sax1v+PtXxr>>K= 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%0DLWthJ@LLSq^xs>fvwQV- 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 YtLeL90YMV1ZJsODIn7I=?(~2E*>w9thX4Qo literal 0 HcwPel00001 diff --git a/data/themes/wallpapers/Old_Curtains.jpg b/data/themes/wallpapers/Old_Curtains.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bbbcec2231df024691b23370ff4dadeb23822334 GIT binary patch literal 307654 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�QPd6F-EQ`>eHqig^ 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