From 4f4cd5e63573da4d6edcc7d4213afaca67c19f88 Mon Sep 17 00:00:00 2001 From: =Corey Hulen Date: Mon, 23 Nov 2015 15:53:48 -0800 Subject: [PATCH] upgrading libs --- Godeps/Godeps.json | 91 +- .../p/freetype-go/.hg/00changelog.i | Bin 57 -> 0 bytes .../code.google.com/p/freetype-go/.hg/branch | 1 - .../p/freetype-go/.hg/cache/branch2-served | 2 - .../p/freetype-go/.hg/cache/rbc-names-v1 | 1 - .../p/freetype-go/.hg/cache/rbc-revs-v1 | Bin 1032 -> 0 bytes .../p/freetype-go/.hg/dirstate | Bin 1504 -> 0 bytes .../code.google.com/p/freetype-go/.hg/hgrc | 14 - .../p/freetype-go/.hg/requires | 4 - .../p/freetype-go/.hg/store/00changelog.i | Bin 38699 -> 0 bytes .../p/freetype-go/.hg/store/00manifest.i | Bin 34583 -> 0 bytes .../.hg/store/data/_a_u_t_h_o_r_s.i | Bin 717 -> 0 bytes .../.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i | Bin 1275 -> 0 bytes .../.hg/store/data/_l_i_c_e_n_s_e.i | Bin 700 -> 0 bytes .../p/freetype-go/.hg/store/data/_makefile.i | Bin 659 -> 0 bytes .../freetype-go/.hg/store/data/_r_e_a_d_m_e.i | Bin 690 -> 0 bytes .../data/cmd/print-glyph-points/main.c.i | Bin 2250 -> 0 bytes .../.hg/store/data/example/freetype/main.go.i | Bin 4678 -> 0 bytes .../.hg/store/data/example/gamma/main.go.i | Bin 3404 -> 0 bytes .../.hg/store/data/example/raster/main.go.i | Bin 3872 -> 0 bytes .../.hg/store/data/example/round/main.go.i | Bin 3414 -> 0 bytes .../.hg/store/data/example/truetype/main.go.i | Bin 1990 -> 0 bytes .../.hg/store/data/freetype/_makefile.i | Bin 754 -> 0 bytes .../.hg/store/data/freetype/freetype.go.i | Bin 13159 -> 0 bytes .../store/data/freetype/freetype__test.go.i | Bin 888 -> 0 bytes .../store/data/freetype/raster/_makefile.i | Bin 1039 -> 0 bytes .../.hg/store/data/freetype/raster/geom.go.i | Bin 9573 -> 0 bytes .../.hg/store/data/freetype/raster/paint.go.i | Bin 8201 -> 0 bytes .../store/data/freetype/raster/raster.go.i | Bin 10019 -> 0 bytes .../store/data/freetype/raster/stroke.go.i | Bin 5124 -> 0 bytes .../store/data/freetype/truetype/_makefile.i | Bin 764 -> 0 bytes .../store/data/freetype/truetype/glyph.go.i | Bin 18054 -> 0 bytes .../store/data/freetype/truetype/hint.go.i | Bin 28460 -> 0 bytes .../data/freetype/truetype/hint__test.go.i | Bin 5988 -> 0 bytes .../store/data/freetype/truetype/opcodes.go.i | Bin 8306 -> 0 bytes .../data/freetype/truetype/truetype.go.i | Bin 14375 -> 0 bytes .../freetype/truetype/truetype__test.go.i | Bin 12970 -> 0 bytes .../data/lib/codereview/codereview.cfg.i | Bin 216 -> 0 bytes .../.hg/store/data/licenses/ftl.txt.i | Bin 2927 -> 0 bytes .../.hg/store/data/licenses/gpl.txt.i | Bin 6900 -> 0 bytes .../store/data/luxi-fonts/_c_o_p_y_i_n_g.i | Bin 1125 -> 0 bytes .../.hg/store/data/luxi-fonts/_r_e_a_d_m_e.i | Bin 779 -> 0 bytes .../.hg/store/data/luxi-fonts/luximr.ttf.i | Bin 33514 -> 0 bytes .../.hg/store/data/luxi-fonts/luximr.ttx.i | Bin 74067 -> 0 bytes .../.hg/store/data/luxi-fonts/luxirr.ttf.i | Bin 42509 -> 0 bytes .../.hg/store/data/luxi-fonts/luxirr.ttx.i | Bin 90843 -> 0 bytes .../luxi-fonts/luxisr-12pt-sans-hinting.txt.i | Bin 20786 -> 0 bytes .../luxi-fonts/luxisr-12pt-with-hinting.txt.i | Bin 19002 -> 0 bytes .../.hg/store/data/luxi-fonts/luxisr.ttf.i | Bin 32867 -> 0 bytes .../.hg/store/data/luxi-fonts/luxisr.ttx.i | Bin 71714 -> 0 bytes .../.hg/store/data/testdata/_c_o_p_y_i_n_g.i | Bin 1192 -> 0 bytes .../.hg/store/data/testdata/_r_e_a_d_m_e.i | Bin 691 -> 0 bytes .../.hg/store/data/testdata/luximr.ttf.i | Bin 33592 -> 0 bytes .../.hg/store/data/testdata/luximr.ttx.i | Bin 74271 -> 0 bytes .../.hg/store/data/testdata/luxirr.ttf.i | Bin 42583 -> 0 bytes .../.hg/store/data/testdata/luxirr.ttx.i | Bin 91046 -> 0 bytes .../testdata/luxisr-12pt-sans-hinting.txt.i | Bin 44295 -> 0 bytes .../testdata/luxisr-12pt-with-hinting.txt.i | Bin 40027 -> 0 bytes .../.hg/store/data/testdata/luxisr.ttf.i | Bin 32947 -> 0 bytes .../.hg/store/data/testdata/luxisr.ttx.i | Bin 71907 -> 0 bytes .../testdata/make-other-hinting-txts.sh.i | Bin 942 -> 0 bytes .../freetype-go/.hg/store/data/~2ehgignore.i | Bin 510 -> 0 bytes .../p/freetype-go/.hg/store/data/~2ehgtags.i | Bin 114 -> 0 bytes .../p/freetype-go/.hg/store/fncache | 52 - .../p/freetype-go/.hg/store/phaseroots | 0 .../p/freetype-go/.hg/store/undo | Bin 1683 -> 0 bytes .../p/freetype-go/.hg/store/undo.backupfiles | Bin 29 -> 0 bytes .../p/freetype-go/.hg/store/undo.phaseroots | 0 .../p/freetype-go/.hg/undo.bookmarks | 0 .../p/freetype-go/.hg/undo.branch | 1 - .../p/freetype-go/.hg/undo.desc | 3 - .../p/freetype-go/.hg/undo.dirstate | 0 .../code.google.com/p/freetype-go/.hgignore | 35 - .../src/code.google.com/p/freetype-go/.hgtags | 1 - .../src/code.google.com/p/freetype-go/AUTHORS | 17 - .../p/freetype-go/CONTRIBUTORS | 35 - .../src/code.google.com/p/freetype-go/LICENSE | 12 - .../src/code.google.com/p/freetype-go/README | 22 - .../freetype-go/cmd/print-glyph-points/main.c | 87 - .../p/freetype-go/example/freetype/main.go | 143 - .../p/freetype-go/example/gamma/main.go | 79 - .../p/freetype-go/example/raster/main.go | 178 - .../p/freetype-go/example/round/main.go | 96 - .../p/freetype-go/example/truetype/main.go | 73 - .../p/freetype-go/freetype/freetype.go | 349 - .../p/freetype-go/freetype/freetype_test.go | 59 - .../p/freetype-go/freetype/raster/geom.go | 280 - .../p/freetype-go/freetype/raster/paint.go | 292 - .../p/freetype-go/freetype/raster/raster.go | 579 - .../p/freetype-go/freetype/raster/stroke.go | 466 - .../p/freetype-go/freetype/truetype/glyph.go | 530 - .../p/freetype-go/freetype/truetype/hint.go | 1764 - .../freetype/truetype/hint_test.go | 673 - .../freetype-go/freetype/truetype/opcodes.go | 289 - .../freetype-go/freetype/truetype/truetype.go | 554 - .../freetype/truetype/truetype_test.go | 366 - .../freetype-go/lib/codereview/codereview.cfg | 1 - .../p/freetype-go/licenses/ftl.txt | 169 - .../p/freetype-go/licenses/gpl.txt | 340 - .../p/freetype-go/testdata/COPYING | 42 - .../p/freetype-go/testdata/README | 13 - .../p/freetype-go/testdata/luximr.ttf | Bin 71784 -> 0 bytes .../p/freetype-go/testdata/luximr.ttx | 24616 ------------- .../p/freetype-go/testdata/luxirr.ttf | Bin 88732 -> 0 bytes .../p/freetype-go/testdata/luxirr.ttx | 30264 ---------------- .../testdata/luxisr-12pt-sans-hinting.txt | 392 - .../testdata/luxisr-12pt-with-hinting.txt | 392 - .../p/freetype-go/testdata/luxisr.ttf | Bin 67548 -> 0 bytes .../p/freetype-go/testdata/luxisr.ttx | 22503 ------------ .../testdata/make-other-hinting-txts.sh | 34 - .../examples/ConsoleLogWriter_Manual.go | 2 +- .../p/log4go/examples/FileLogWriter_Manual.go | 2 +- .../log4go/examples/SocketLogWriter_Manual.go | 2 +- .../examples/XMLConfigurationExample.go | 2 +- .../anachronistic/apns/client_mock.go | 2 +- .../anachronistic/apns/client_mock_test.go | 2 +- .../github.com/braintree/manners/README.md | 11 +- .../braintree/manners/helper_test.go | 34 - .../braintree/manners/helpers_test.go | 123 + .../braintree/manners/interfaces.go | 7 + .../github.com/braintree/manners/listener.go | 49 - .../github.com/braintree/manners/server.go | 275 +- .../braintree/manners/server_test.go | 277 +- .../github.com/braintree/manners/static.go | 35 + .../braintree/manners/test_helpers/certs.go | 29 + .../braintree/manners/test_helpers/conn.go | 13 + .../manners/test_helpers/listener.go | 34 + .../manners/test_helpers/temp_file.go | 27 + .../manners/test_helpers/wait_group.go | 33 + .../braintree/manners/transition_test.go | 54 + .../github.com/davecgh/go-spew/spew/bypass.go | 151 + .../davecgh/go-spew/spew/bypasssafe.go | 37 + .../github.com/davecgh/go-spew/spew/common.go | 341 + .../davecgh/go-spew/spew/common_test.go | 298 + .../github.com/davecgh/go-spew/spew/config.go | 297 + .../github.com/davecgh/go-spew/spew/doc.go | 202 + .../github.com/davecgh/go-spew/spew/dump.go | 509 + .../davecgh/go-spew/spew/dump_test.go | 1042 + .../davecgh/go-spew/spew/dumpcgo_test.go | 98 + .../davecgh/go-spew/spew/dumpnocgo_test.go | 26 + .../davecgh/go-spew/spew/example_test.go | 226 + .../github.com/davecgh/go-spew/spew/format.go | 419 + .../davecgh/go-spew/spew/format_test.go | 1558 + .../davecgh/go-spew/spew/internal_test.go | 87 + .../go-spew/spew/internalunsafe_test.go | 101 + .../github.com/davecgh/go-spew/spew/spew.go | 148 + .../davecgh/go-spew/spew/spew_test.go | 309 + .../davecgh/go-spew/spew/testdata/dumpcgo.go | 82 + .../disintegration/imaging/README.md | 38 +- .../disintegration/imaging/adjust_test.go | 504 + .../disintegration/imaging/effects_test.go | 128 + .../disintegration/imaging/helpers.go | 24 +- .../disintegration/imaging/helpers_test.go | 361 + .../disintegration/imaging/resize.go | 49 +- .../disintegration/imaging/resize_test.go | 455 + .../disintegration/imaging/tools_test.go | 605 + .../disintegration/imaging/transform_test.go | 261 + .../disintegration/imaging/utils_test.go | 61 + .../redigo/internal/redistest/testdb.go | 5 +- .../github.com/garyburd/redigo/redis/conn.go | 186 +- .../garyburd/redigo/redis/conn_test.go | 163 +- .../github.com/garyburd/redigo/redis/pool.go | 14 +- .../garyburd/redigo/redis/pool_test.go | 96 +- .../garyburd/redigo/redis/pubsub_test.go | 22 +- .../github.com/garyburd/redigo/redis/reply.go | 37 +- .../garyburd/redigo/redis/reply_test.go | 29 +- .../github.com/garyburd/redigo/redis/scan.go | 92 +- .../garyburd/redigo/redis/scan_test.go | 64 +- .../garyburd/redigo/redis/script_test.go | 5 +- .../garyburd/redigo/redis/test_test.go | 159 +- .../redigo/redis/zpop_example_test.go | 2 +- .../src/github.com/go-gorp/gorp/.travis.yml | 35 +- .../src/github.com/go-gorp/gorp/Makefile | 6 - .../src/github.com/go-gorp/gorp/README.md | 119 +- .../src/github.com/go-gorp/gorp/column.go | 83 + .../src/github.com/go-gorp/gorp/db.go | 619 + .../src/github.com/go-gorp/gorp/dialect.go | 641 +- .../github.com/go-gorp/gorp/dialect_mysql.go | 171 + .../github.com/go-gorp/gorp/dialect_oracle.go | 146 + .../go-gorp/gorp/dialect_postgres.go | 147 + .../github.com/go-gorp/gorp/dialect_sqlite.go | 119 + .../go-gorp/gorp/dialect_sqlserver.go | 152 + .../src/github.com/go-gorp/gorp/errors.go | 14 +- .../src/github.com/go-gorp/gorp/gorp.go | 1678 +- .../src/github.com/go-gorp/gorp/gorp_test.go | 243 +- .../src/github.com/go-gorp/gorp/hooks.go | 49 + .../src/github.com/go-gorp/gorp/index.go | 56 + .../src/github.com/go-gorp/gorp/lockerror.go | 63 + .../src/github.com/go-gorp/gorp/logging.go | 44 + .../src/github.com/go-gorp/gorp/nulltypes.go | 58 + .../src/github.com/go-gorp/gorp/select.go | 351 + .../src/github.com/go-gorp/gorp/table.go | 247 + .../github.com/go-gorp/gorp/table_bindings.go | 317 + .../src/github.com/go-gorp/gorp/test_all.sh | 28 +- .../github.com/go-gorp/gorp/transaction.go | 193 + .../github.com/go-sql-driver/mysql/AUTHORS | 4 + .../github.com/go-sql-driver/mysql/README.md | 14 +- .../go-sql-driver/mysql/connection.go | 33 +- .../github.com/go-sql-driver/mysql/driver.go | 9 + .../go-sql-driver/mysql/driver_test.go | 24 + .../github.com/go-sql-driver/mysql/errors.go | 20 +- .../github.com/go-sql-driver/mysql/infile.go | 32 +- .../github.com/go-sql-driver/mysql/packets.go | 56 +- .../github.com/go-sql-driver/mysql/rows.go | 6 +- .../go-sql-driver/mysql/statement.go | 7 +- .../github.com/go-sql-driver/mysql/utils.go | 14 +- .../go-sql-driver/mysql/utils_test.go | 26 +- .../goamz/goamz/aws/attempt_test.go | 2 +- .../src/github.com/goamz/goamz/aws/aws.go | 41 +- .../github.com/goamz/goamz/aws/aws_test.go | 2 +- .../github.com/goamz/goamz/aws/client_test.go | 2 +- .../src/github.com/goamz/goamz/aws/regions.go | 11 + .../github.com/goamz/goamz/aws/sign_test.go | 2 +- .../github.com/goamz/goamz/s3/export_test.go | 2 +- .../src/github.com/goamz/goamz/s3/multi.go | 32 +- .../github.com/goamz/goamz/s3/multi_test.go | 6 +- .../src/github.com/goamz/goamz/s3/s3.go | 8 +- .../src/github.com/goamz/goamz/s3/s3_test.go | 4 +- .../src/github.com/goamz/goamz/s3/s3i_test.go | 4 +- .../src/github.com/goamz/goamz/s3/s3t_test.go | 6 +- .../goamz/goamz/s3/s3test/server.go | 6 +- .../src/github.com/goamz/goamz/s3/sign.go | 45 +- .../github.com/goamz/goamz/s3/sign_test.go | 4 +- .../src/github.com/golang/freetype/AUTHORS | 1 + .../github.com/golang/freetype/CONTRIBUTORS | 1 + .../golang/freetype/example/drawer/main.go | 6 +- .../golang/freetype/example/freetype/main.go | 4 +- .../golang/freetype/example/gamma/main.go | 4 +- .../golang/freetype/example/raster/main.go | 4 +- .../golang/freetype/example/round/main.go | 4 +- .../golang/freetype/example/truetype/main.go | 6 +- .../github.com/golang/freetype/freetype.go | 8 +- .../github.com/golang/freetype/raster/geom.go | 2 +- .../golang/freetype/raster/raster.go | 2 +- .../golang/freetype/raster/stroke.go | 2 +- .../golang/freetype/truetype/face.go | 6 +- .../golang/freetype/truetype/face_test.go | 4 +- .../golang/freetype/truetype/glyph.go | 4 +- .../golang/freetype/truetype/hint.go | 2 +- .../golang/freetype/truetype/hint_test.go | 2 +- .../golang/freetype/truetype/truetype.go | 167 +- .../golang/freetype/truetype/truetype_test.go | 27 +- .../github.com/gorilla/context/.travis.yml | 5 +- .../src/github.com/gorilla/mux/.travis.yml | 15 +- .../src/github.com/gorilla/mux/README.md | 232 +- .../src/github.com/gorilla/mux/doc.go | 19 +- .../src/github.com/gorilla/mux/mux.go | 124 +- .../src/github.com/gorilla/mux/mux_test.go | 324 +- .../src/github.com/gorilla/mux/old_test.go | 6 +- .../src/github.com/gorilla/mux/regexp.go | 79 +- .../src/github.com/gorilla/mux/route.go | 46 +- .../github.com/gorilla/websocket/README.md | 2 + .../github.com/gorilla/websocket/client.go | 248 +- .../gorilla/websocket/client_server_test.go | 93 +- .../gorilla/websocket/client_test.go | 1 + .../src/github.com/gorilla/websocket/conn.go | 48 +- .../github.com/gorilla/websocket/conn_test.go | 44 +- .../src/github.com/gorilla/websocket/doc.go | 13 +- .../websocket/examples/autobahn/server.go | 2 +- .../gorilla/websocket/examples/chat/README.md | 1 + .../gorilla/websocket/examples/chat/conn.go | 8 +- .../websocket/examples/command/README.md | 19 + .../websocket/examples/command/home.html | 96 + .../websocket/examples/command/main.go | 188 + .../gorilla/websocket/examples/echo/README.md | 17 + .../gorilla/websocket/examples/echo/client.go | 55 + .../gorilla/websocket/examples/echo/server.go | 132 + .../websocket/examples/filewatch/main.go | 2 +- .../src/github.com/gorilla/websocket/json.go | 4 +- .../github.com/gorilla/websocket/json_test.go | 4 +- .../github.com/gorilla/websocket/server.go | 3 + .../src/github.com/lib/pq/.travis.yml | 1 + .../src/github.com/lib/pq/bench_test.go | 2 +- .../_workspace/src/github.com/lib/pq/buf.go | 3 +- .../_workspace/src/github.com/lib/pq/conn.go | 14 +- .../_workspace/src/github.com/lib/pq/copy.go | 9 +- .../src/github.com/lib/pq/encode.go | 2 +- .../src/github.com/lib/pq/encode_test.go | 12 +- .../github.com/lib/pq/hstore/hstore_test.go | 2 +- .../src/github.com/lib/pq/oid/gen.go | 2 +- .../src/github.com/mssola/user_agent/bot.go | 5 +- .../github.com/mssola/user_agent/browser.go | 5 +- .../src/github.com/pborman/uuid/CONTRIBUTORS | 1 + .../pborman}/uuid/LICENSE | 0 .../pborman}/uuid/dce.go | 0 .../pborman}/uuid/doc.go | 0 .../pborman}/uuid/hash.go | 0 .../pborman}/uuid/json.go | 0 .../pborman}/uuid/json_test.go | 0 .../pborman}/uuid/node.go | 0 .../pborman}/uuid/seq_test.go | 0 .../src/github.com/pborman/uuid/sql.go | 40 + .../src/github.com/pborman/uuid/sql_test.go | 53 + .../pborman}/uuid/time.go | 0 .../pborman}/uuid/util.go | 0 .../pborman}/uuid/uuid.go | 0 .../pborman}/uuid/uuid_test.go | 0 .../pborman}/uuid/version1.go | 0 .../pborman}/uuid/version4.go | 0 .../pmezard/go-difflib/difflib/difflib.go | 758 + .../go-difflib/difflib/difflib_test.go | 352 + .../goexif/exif/corrupt/huge_tag_exif.jpg | Bin 0 -> 65536 bytes .../exif/corrupt/infinite_loop_exif.jpg | Bin 0 -> 3738 bytes .../goexif/exif/corrupt/max_uint32_exif.jpg | Bin 0 -> 65536 bytes .../rwcarlsen/goexif/exif/example_test.go | 2 +- .../github.com/rwcarlsen/goexif/exif/exif.go | 4 +- .../rwcarlsen/goexif/exif/exif_test.go | 2 +- .../rwcarlsen/goexif/exif/regen_regress.go | 4 +- .../rwcarlsen/goexif/exif/sample1.jpg | Bin 0 -> 80603 bytes ...1-11-22-45-15-sep-2004-01-11-22-45-15a.jpg | Bin 0 -> 4586 bytes ...8-03-16-29-38-sep-2006-08-03-16-29-38a.jpg | Bin 0 -> 9735 bytes ...1-11-19-17-56-sep-2006-11-11-19-17-56a.jpg | Bin 0 -> 35406 bytes ...2-10-23-58-20-sep-2006-12-10-23-58-20a.jpg | Bin 0 -> 8711 bytes ...2-17-07-09-14-sep-2006-12-17-07-09-14a.jpg | Bin 0 -> 38252 bytes ...2-21-15-55-26-sep-2006-12-21-15-55-26a.jpg | Bin 0 -> 16072 bytes ...1-01-12-00-00-sep-2007-01-01-12-00-00a.jpg | Bin 0 -> 17301 bytes ...1-17-21-49-44-sep-2007-01-17-21-49-44a.jpg | Bin 0 -> 7999 bytes ...2-02-18-13-29-sep-2007-02-02-18-13-29a.jpg | Bin 0 -> 39915 bytes ...5-02-17-02-21-sep-2007-05-02-17-02-21a.jpg | Bin 0 -> 11783 bytes ...5-12-08-19-07-sep-2007-05-12-08-19-07a.jpg | Bin 0 -> 35771 bytes ...5-26-04-49-45-sep-2007-05-26-04-49-45a.jpg | Bin 0 -> 35406 bytes ...5-30-14-28-01-sep-2007-05-30-14-28-01a.jpg | Bin 0 -> 35406 bytes ...6-06-16-15-25-sep-2007-06-06-16-15-25a.jpg | Bin 0 -> 35406 bytes ...6-26-10-13-04-sep-2007-06-26-10-13-04a.jpg | Bin 0 -> 7615 bytes ...7-13-17-02-30-sep-2007-07-13-17-02-30a.jpg | Bin 0 -> 21719 bytes ...8-15-14-42-46-sep-2007-08-15-14-42-46a.jpg | Bin 0 -> 11549 bytes ...8-24-02-40-42-sep-2007-08-24-02-40-42a.jpg | Bin 0 -> 7687 bytes ...1-07-11-40-44-sep-2007-11-07-11-40-44a.jpg | Bin 0 -> 11223 bytes ...6-02-10-03-57-sep-2008-06-02-10-03-57a.jpg | Bin 0 -> 9745 bytes ...6-06-13-29-29-sep-2008-06-06-13-29-29a.jpg | Bin 0 -> 11783 bytes ...6-17-01-21-30-sep-2008-06-17-01-21-30a.jpg | Bin 0 -> 14564 bytes ...9-02-17-43-48-sep-2008-09-02-17-43-48a.jpg | Bin 0 -> 5406 bytes ...3-26-09-23-20-sep-2009-03-26-09-23-20a.jpg | Bin 0 -> 10759 bytes ...4-11-03-01-38-sep-2009-04-11-03-01-38a.jpg | Bin 0 -> 43374 bytes ...4-23-07-21-35-sep-2009-04-23-07-21-35a.jpg | Bin 0 -> 37208 bytes ...6-11-19-23-18-sep-2009-06-11-19-23-18a.jpg | Bin 0 -> 7791 bytes ...6-20-07-59-05-sep-2009-06-20-07-59-05a.jpg | Bin 0 -> 13618 bytes ...8-05-08-11-31-sep-2009-08-05-08-11-31a.jpg | Bin 0 -> 9919 bytes ...6-08-04-44-24-sep-2010-06-08-04-44-24a.jpg | Bin 0 -> 10939 bytes ...6-20-20-07-39-sep-2010-06-20-20-07-39a.jpg | Bin 0 -> 8551 bytes ...9-02-08-43-02-sep-2010-09-02-08-43-02a.jpg | Bin 0 -> 19534 bytes ...1-24-22-06-02-sep-2011-01-24-22-06-02a.jpg | Bin 0 -> 29003 bytes ...3-07-09-28-03-sep-2011-03-07-09-28-03a.jpg | Bin 0 -> 10529 bytes ...5-07-13-02-49-sep-2011-05-07-13-02-49a.jpg | Bin 0 -> 23743 bytes ...8-07-19-22-57-sep-2011-08-07-19-22-57a.jpg | Bin 0 -> 9936 bytes ...0-28-17-50-18-sep-2011-10-28-17-50-18a.jpg | Bin 0 -> 7487 bytes ...10-28-18-25-43-sep-2011-10-28-18-25-43.jpg | Bin 0 -> 7433 bytes .../2011-11-18-15-38-34-sep-Photo11181538.jpg | Bin 0 -> 12885 bytes ...06-02-10-12-28-sep-2012-06-02-10-12-28.jpg | Bin 0 -> 32165 bytes ...09-21-22-07-34-sep-2012-09-21-22-07-34.jpg | Bin 0 -> 10247 bytes ...2012-12-19-21-38-40-sep-temple_square1.jpg | Bin 0 -> 39182 bytes .../2012-12-21-11-15-19-sep-IMG_0001.jpg | Bin 0 -> 25269 bytes .../2013-02-05-23-12-09-sep-DSCI0001.jpg | Bin 0 -> 10854 bytes ...8-12-19-59-29-sep-2099-08-12-19-59-29a.jpg | Bin 0 -> 37491 bytes ...1-15-11-46-51-sep-2216-11-15-11-46-51a.jpg | Bin 0 -> 23011 bytes .../FailedHash-NoDate-sep-remembory.jpg | Bin 0 -> 935 bytes .../rwcarlsen/goexif/exif/samples/f1-exif.jpg | Bin 0 -> 992 bytes .../rwcarlsen/goexif/exif/samples/f2-exif.jpg | Bin 0 -> 994 bytes .../rwcarlsen/goexif/exif/samples/f3-exif.jpg | Bin 0 -> 992 bytes .../rwcarlsen/goexif/exif/samples/f4-exif.jpg | Bin 0 -> 994 bytes .../rwcarlsen/goexif/exif/samples/f5-exif.jpg | Bin 0 -> 980 bytes .../rwcarlsen/goexif/exif/samples/f6-exif.jpg | Bin 0 -> 982 bytes .../rwcarlsen/goexif/exif/samples/f7-exif.jpg | Bin 0 -> 980 bytes .../rwcarlsen/goexif/exif/samples/f8-exif.jpg | Bin 0 -> 982 bytes .../exif/samples/geodegrees_as_string.jpg | Bin 0 -> 22420 bytes .../goexif/exif/samples/has-lens-info.jpg | Bin 0 -> 22493 bytes .../rwcarlsen/goexif/tiff/sample1.tif | Bin 0 -> 18382 bytes .../stretchr/objx/accessors_test.go | 2 +- .../stretchr/objx/conversions_test.go | 2 +- .../github.com/stretchr/objx/fixture_test.go | 2 +- .../src/github.com/stretchr/objx/map_test.go | 2 +- .../stretchr/objx/mutations_test.go | 2 +- .../github.com/stretchr/objx/security_test.go | 2 +- .../stretchr/objx/simple_example_test.go | 2 +- .../github.com/stretchr/objx/tests_test.go | 2 +- .../objx/type_specific_codegen_test.go | 2 +- .../src/github.com/stretchr/objx/value.go | 43 + .../github.com/stretchr/objx/value_test.go | 65 + .../stretchr/testify/assert/assertions.go | 226 +- .../testify/assert/assertions_test.go | 302 +- .../github.com/stretchr/testify/assert/doc.go | 111 +- .../testify/assert/forward_assertions.go | 27 +- .../testify/assert/forward_assertions_test.go | 100 + .../testify/assert/http_assertions.go | 48 +- .../github.com/stretchr/testify/mock/mock.go | 292 +- .../stretchr/testify/mock/mock_test.go | 418 +- .../x/crypto}/bcrypt/base64.go | 0 .../x/crypto}/bcrypt/bcrypt.go | 2 +- .../x/crypto}/bcrypt/bcrypt_test.go | 0 .../x/image/font/basicfont/basicfont.go | 2 +- .../golang.org/x/image/font/basicfont/gen.go | 6 +- .../src/golang.org/x/image/font/font.go | 2 +- .../x/image/font/plan9font/example_test.go | 6 +- .../x/image/font/plan9font/plan9font.go | 4 +- .../golang.org/x/image/tiff/buffer_test.go | 36 + .../src/golang.org/x/image/tiff/reader.go | 2 +- .../golang.org/x/image/tiff/reader_test.go | 377 + .../golang.org/x/image/tiff/writer_test.go | 95 + .../src/gopkg.in/fsnotify.v1/.travis.yml | 9 +- .../src/gopkg.in/fsnotify.v1/AUTHORS | 7 +- .../src/gopkg.in/fsnotify.v1/CHANGELOG.md | 11 + .../gopkg.in/fsnotify.v1/NotUsed.xcworkspace | 0 .../src/gopkg.in/fsnotify.v1/README.md | 13 +- .../src/gopkg.in/fsnotify.v1/circle.yml | 26 - .../src/gopkg.in/fsnotify.v1/inotify.go | 26 +- .../gopkg.in/fsnotify.v1/inotify_poller.go | 2 +- .../src/gopkg.in/fsnotify.v1/inotify_test.go | 57 +- .../gopkg.in/fsnotify.v1/integration_test.go | 48 + .../src/gopkg.in/fsnotify.v1/kqueue.go | 48 +- .../throttled/throttled.v1}/.gitignore | 0 .../throttled/throttled.v1}/.travis.yml | 0 .../throttled/throttled.v1}/LICENSE | 0 .../throttled/throttled.v1}/README.md | 10 +- .../throttled/throttled.v1}/common_test.go | 0 .../throttled/throttled.v1}/delayer.go | 0 .../throttled/throttled.v1}/delayer_test.go | 0 .../throttled/throttled.v1}/doc.go | 4 +- .../throttled.v1}/examples/README.md | 0 .../throttled.v1}/examples/custom/main.go | 2 +- .../examples/interval-many/main.go | 2 +- .../examples/interval-vary/main.go | 2 +- .../examples/interval-vary/siege-urls | 0 .../throttled.v1}/examples/interval/main.go | 2 +- .../throttled.v1}/examples/memstats/main.go | 2 +- .../throttled.v1}/examples/memstats/test-file | Bin .../throttled.v1}/examples/rate-limit/main.go | 6 +- .../throttled/throttled.v1}/interval.go | 2 +- .../throttled/throttled.v1}/interval_test.go | 0 .../throttled/throttled.v1}/memstats.go | 0 .../throttled/throttled.v1}/memstats_test.go | 0 .../throttled/throttled.v1}/misc/pre-commit | 0 .../throttled/throttled.v1}/rate.go | 0 .../throttled/throttled.v1}/rate_test.go | 0 .../throttled/throttled.v1}/store.go | 0 .../throttled/throttled.v1}/store/doc.go | 0 .../throttled/throttled.v1}/store/mem.go | 4 +- .../throttled/throttled.v1}/store/mem_test.go | 0 .../throttled/throttled.v1}/store/redis.go | 4 +- .../throttled.v1}/store/redis_test.go | 2 +- .../throttled/throttled.v1}/throttler.go | 0 .../throttled/throttled.v1}/varyby.go | 0 .../throttled/throttled.v1}/varyby_test.go | 0 442 files changed, 18499 insertions(+), 89550 deletions(-) delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/00changelog.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/branch delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/cache/branch2-served delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/cache/rbc-names-v1 delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/cache/rbc-revs-v1 delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/dirstate delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/hgrc delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/requires delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/00changelog.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/00manifest.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/_a_u_t_h_o_r_s.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/_l_i_c_e_n_s_e.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/_makefile.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/_r_e_a_d_m_e.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/cmd/print-glyph-points/main.c.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/example/freetype/main.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/example/gamma/main.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/example/raster/main.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/example/round/main.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/example/truetype/main.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/_makefile.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/freetype.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/freetype__test.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/raster/_makefile.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/raster/geom.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/raster/paint.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/raster/raster.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/raster/stroke.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/_makefile.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/glyph.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/hint.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/hint__test.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/opcodes.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/truetype.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/truetype__test.go.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/lib/codereview/codereview.cfg.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/licenses/ftl.txt.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/licenses/gpl.txt.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/_c_o_p_y_i_n_g.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/_r_e_a_d_m_e.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luximr.ttf.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luximr.ttx.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxirr.ttf.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxirr.ttx.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr-12pt-sans-hinting.txt.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr-12pt-with-hinting.txt.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr.ttf.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr.ttx.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/_c_o_p_y_i_n_g.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/_r_e_a_d_m_e.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luximr.ttf.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luximr.ttx.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxirr.ttf.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxirr.ttx.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxisr-12pt-sans-hinting.txt.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxisr-12pt-with-hinting.txt.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxisr.ttf.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxisr.ttx.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/make-other-hinting-txts.sh.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/~2ehgignore.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/~2ehgtags.i delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/fncache delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/phaseroots delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/undo delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/undo.backupfiles delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/undo.phaseroots delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.bookmarks delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.branch delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.desc delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.dirstate delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hgignore delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/.hgtags delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/AUTHORS delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/CONTRIBUTORS delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/LICENSE delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/README delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/cmd/print-glyph-points/main.c delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/example/freetype/main.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/example/gamma/main.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/example/raster/main.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/example/round/main.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/example/truetype/main.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/freetype.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/freetype_test.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/geom.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/paint.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/raster.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/stroke.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/glyph.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/hint.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/hint_test.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/opcodes.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/truetype.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/truetype_test.go delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/lib/codereview/codereview.cfg delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/licenses/ftl.txt delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/licenses/gpl.txt delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/COPYING delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/README delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luximr.ttf delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luximr.ttx delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxirr.ttf delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxirr.ttx delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr-12pt-sans-hinting.txt delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr-12pt-with-hinting.txt delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr.ttf delete mode 100644 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr.ttx delete mode 100755 Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/make-other-hinting-txts.sh delete mode 100644 Godeps/_workspace/src/github.com/braintree/manners/helper_test.go create mode 100644 Godeps/_workspace/src/github.com/braintree/manners/helpers_test.go create mode 100644 Godeps/_workspace/src/github.com/braintree/manners/interfaces.go delete mode 100644 Godeps/_workspace/src/github.com/braintree/manners/listener.go create mode 100644 Godeps/_workspace/src/github.com/braintree/manners/static.go create mode 100644 Godeps/_workspace/src/github.com/braintree/manners/test_helpers/certs.go create mode 100644 Godeps/_workspace/src/github.com/braintree/manners/test_helpers/conn.go create mode 100644 Godeps/_workspace/src/github.com/braintree/manners/test_helpers/listener.go create mode 100644 Godeps/_workspace/src/github.com/braintree/manners/test_helpers/temp_file.go create mode 100644 Godeps/_workspace/src/github.com/braintree/manners/test_helpers/wait_group.go create mode 100644 Godeps/_workspace/src/github.com/braintree/manners/transition_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypass.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypasssafe.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/common.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/common_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/config.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/doc.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dump.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dump_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dumpcgo_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dumpnocgo_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/example_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/format.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/format_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/internal_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/internalunsafe_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/spew.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/spew_test.go create mode 100644 Godeps/_workspace/src/github.com/davecgh/go-spew/spew/testdata/dumpcgo.go create mode 100644 Godeps/_workspace/src/github.com/disintegration/imaging/adjust_test.go create mode 100644 Godeps/_workspace/src/github.com/disintegration/imaging/effects_test.go create mode 100644 Godeps/_workspace/src/github.com/disintegration/imaging/helpers_test.go create mode 100644 Godeps/_workspace/src/github.com/disintegration/imaging/resize_test.go create mode 100644 Godeps/_workspace/src/github.com/disintegration/imaging/tools_test.go create mode 100644 Godeps/_workspace/src/github.com/disintegration/imaging/transform_test.go create mode 100644 Godeps/_workspace/src/github.com/disintegration/imaging/utils_test.go delete mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/Makefile create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/column.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/db.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_mysql.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_oracle.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_postgres.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_sqlite.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_sqlserver.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/hooks.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/index.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/lockerror.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/logging.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/nulltypes.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/select.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/table.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/table_bindings.go create mode 100644 Godeps/_workspace/src/github.com/go-gorp/gorp/transaction.go create mode 100644 Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/README.md create mode 100644 Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/home.html create mode 100644 Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/main.go create mode 100644 Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/README.md create mode 100644 Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/client.go create mode 100644 Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/server.go create mode 100644 Godeps/_workspace/src/github.com/pborman/uuid/CONTRIBUTORS rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/LICENSE (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/dce.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/doc.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/hash.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/json.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/json_test.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/node.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/seq_test.go (100%) create mode 100644 Godeps/_workspace/src/github.com/pborman/uuid/sql.go create mode 100644 Godeps/_workspace/src/github.com/pborman/uuid/sql_test.go rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/time.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/util.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/uuid.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/uuid_test.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/version1.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go-uuid => github.com/pborman}/uuid/version4.go (100%) create mode 100644 Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib/difflib.go create mode 100644 Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib/difflib_test.go create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/corrupt/huge_tag_exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/corrupt/infinite_loop_exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/corrupt/max_uint32_exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/sample1.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2004-01-11-22-45-15-sep-2004-01-11-22-45-15a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-08-03-16-29-38-sep-2006-08-03-16-29-38a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-11-11-19-17-56-sep-2006-11-11-19-17-56a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-12-10-23-58-20-sep-2006-12-10-23-58-20a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-12-17-07-09-14-sep-2006-12-17-07-09-14a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-12-21-15-55-26-sep-2006-12-21-15-55-26a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-01-01-12-00-00-sep-2007-01-01-12-00-00a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-01-17-21-49-44-sep-2007-01-17-21-49-44a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-02-02-18-13-29-sep-2007-02-02-18-13-29a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-02-17-02-21-sep-2007-05-02-17-02-21a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-12-08-19-07-sep-2007-05-12-08-19-07a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-26-04-49-45-sep-2007-05-26-04-49-45a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-30-14-28-01-sep-2007-05-30-14-28-01a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-06-06-16-15-25-sep-2007-06-06-16-15-25a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-06-26-10-13-04-sep-2007-06-26-10-13-04a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-07-13-17-02-30-sep-2007-07-13-17-02-30a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-08-15-14-42-46-sep-2007-08-15-14-42-46a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-08-24-02-40-42-sep-2007-08-24-02-40-42a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-11-07-11-40-44-sep-2007-11-07-11-40-44a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2008-06-02-10-03-57-sep-2008-06-02-10-03-57a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2008-06-06-13-29-29-sep-2008-06-06-13-29-29a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2008-06-17-01-21-30-sep-2008-06-17-01-21-30a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2008-09-02-17-43-48-sep-2008-09-02-17-43-48a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-03-26-09-23-20-sep-2009-03-26-09-23-20a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-04-11-03-01-38-sep-2009-04-11-03-01-38a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-04-23-07-21-35-sep-2009-04-23-07-21-35a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-06-11-19-23-18-sep-2009-06-11-19-23-18a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-06-20-07-59-05-sep-2009-06-20-07-59-05a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-08-05-08-11-31-sep-2009-08-05-08-11-31a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2010-06-08-04-44-24-sep-2010-06-08-04-44-24a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2010-06-20-20-07-39-sep-2010-06-20-20-07-39a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2010-09-02-08-43-02-sep-2010-09-02-08-43-02a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-01-24-22-06-02-sep-2011-01-24-22-06-02a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-03-07-09-28-03-sep-2011-03-07-09-28-03a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-05-07-13-02-49-sep-2011-05-07-13-02-49a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-08-07-19-22-57-sep-2011-08-07-19-22-57a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-17-50-18-sep-2011-10-28-17-50-18a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-18-25-43-sep-2011-10-28-18-25-43.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-11-18-15-38-34-sep-Photo11181538.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2012-06-02-10-12-28-sep-2012-06-02-10-12-28.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2012-09-21-22-07-34-sep-2012-09-21-22-07-34.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2012-12-19-21-38-40-sep-temple_square1.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2012-12-21-11-15-19-sep-IMG_0001.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2013-02-05-23-12-09-sep-DSCI0001.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2099-08-12-19-59-29-sep-2099-08-12-19-59-29a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2216-11-15-11-46-51-sep-2216-11-15-11-46-51a.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/FailedHash-NoDate-sep-remembory.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f1-exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f2-exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f3-exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f4-exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f5-exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f6-exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f7-exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f8-exif.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/geodegrees_as_string.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/has-lens-info.jpg create mode 100644 Godeps/_workspace/src/github.com/rwcarlsen/goexif/tiff/sample1.tif rename Godeps/_workspace/src/{code.google.com/p/go.crypto => golang.org/x/crypto}/bcrypt/base64.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go.crypto => golang.org/x/crypto}/bcrypt/bcrypt.go (98%) rename Godeps/_workspace/src/{code.google.com/p/go.crypto => golang.org/x/crypto}/bcrypt/bcrypt_test.go (100%) create mode 100644 Godeps/_workspace/src/golang.org/x/image/tiff/buffer_test.go create mode 100644 Godeps/_workspace/src/golang.org/x/image/tiff/reader_test.go create mode 100644 Godeps/_workspace/src/golang.org/x/image/tiff/writer_test.go delete mode 100644 Godeps/_workspace/src/gopkg.in/fsnotify.v1/NotUsed.xcworkspace delete mode 100644 Godeps/_workspace/src/gopkg.in/fsnotify.v1/circle.yml rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/.gitignore (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/.travis.yml (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/LICENSE (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/README.md (90%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/common_test.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/delayer.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/delayer_test.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/doc.go (96%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/examples/README.md (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/examples/custom/main.go (96%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/examples/interval-many/main.go (95%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/examples/interval-vary/main.go (95%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/examples/interval-vary/siege-urls (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/examples/interval/main.go (94%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/examples/memstats/main.go (96%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/examples/memstats/test-file (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/examples/rate-limit/main.go (89%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/interval.go (98%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/interval_test.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/memstats.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/memstats_test.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/misc/pre-commit (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/rate.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/rate_test.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/store.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/store/doc.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/store/mem.go (92%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/store/mem_test.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/store/redis.go (92%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/store/redis_test.go (94%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/throttler.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/varyby.go (100%) rename Godeps/_workspace/src/{github.com/throttled/throttled => gopkg.in/throttled/throttled.v1}/varyby_test.go (100%) diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 7c80558c4a..0ec79e0a68 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -1,17 +1,7 @@ { "ImportPath": "github.com/mattermost/platform", - "GoVersion": "go1.4.2", + "GoVersion": "go1.5.1", "Deps": [ - { - "ImportPath": "code.google.com/p/go-uuid/uuid", - "Comment": "null-15", - "Rev": "35bc42037350f0078e3c974c6ea690f1926603ab" - }, - { - "ImportPath": "code.google.com/p/go.crypto/bcrypt", - "Comment": "null-236", - "Rev": "69e2a90ed92d03812364aeb947b7068dc42e561e" - }, { "ImportPath": "code.google.com/p/log4go", "Comment": "go.weekly.2012-02-22-1", @@ -23,43 +13,47 @@ }, { "ImportPath": "github.com/braintree/manners", - "Comment": "0.3.1-2-g5280e25", - "Rev": "5280e250f2795914acbeb2bf3b55dd5a2d1fba52" + "Comment": "0.4.0-9-g3fdfada", + "Rev": "3fdfadabc96863ceec055bd73ab1e80324e72706" + }, + { + "ImportPath": "github.com/davecgh/go-spew/spew", + "Rev": "5215b55f46b2b919f50a1df0eaa5886afe4e3b3d" }, { "ImportPath": "github.com/disintegration/imaging", - "Rev": "493653de80c32beeae336f3a3a3a125e7603459b" + "Rev": "546cb3c5137b3f1232e123a26aa033aade6b3066" }, { "ImportPath": "github.com/garyburd/redigo/internal", - "Rev": "a47585eaae68b1d14b02940d2af1b9194f3caa9c" + "Rev": "6ece6e0a09f28cc399b21550cbf37ab39ba63cce" }, { "ImportPath": "github.com/garyburd/redigo/redis", - "Rev": "a47585eaae68b1d14b02940d2af1b9194f3caa9c" + "Rev": "6ece6e0a09f28cc399b21550cbf37ab39ba63cce" }, { "ImportPath": "github.com/go-gorp/gorp", - "Comment": "v1.7-65-g3c15f67", - "Rev": "3c15f6739b94dc357e2797a7297a2853ec79f4fa" + "Comment": "v1.7-146-gc391a3d", + "Rev": "c391a3da75cf2003f4bf4763d0b5755c4500aef1" }, { "ImportPath": "github.com/go-sql-driver/mysql", - "Comment": "v1.2-97-g0cc29e9", - "Rev": "0cc29e9fe8e25c2c58cf47bcab566e029bbaa88b" + "Comment": "v1.2-125-gd512f20", + "Rev": "d512f204a577a4ab037a1816604c48c9c13210be" }, { "ImportPath": "github.com/goamz/goamz/aws", - "Rev": "ad637a587dd8314770a1084481dd7b5d4fa1232f" + "Rev": "be371d06631a6ea076cccefc6654fa5c29be074d" }, { "ImportPath": "github.com/goamz/goamz/s3", - "Rev": "ad637a587dd8314770a1084481dd7b5d4fa1232f" + "Rev": "be371d06631a6ea076cccefc6654fa5c29be074d" }, { "ImportPath": "github.com/golang/freetype", - "Comment": "release-116-g41fa49a", - "Rev": "41fa49aa5b23cc7c4082c9aaaf2da41e195602d9" + "Comment": "release-120-gf29eb11", + "Rev": "f29eb116deb328d02ee5c573f02d442ca67d5532" }, { "ImportPath": "github.com/golang/groupcache/lru", @@ -67,25 +61,33 @@ }, { "ImportPath": "github.com/gorilla/context", - "Rev": "215affda49addc4c8ef7e2534915df2c8c35c6cd" + "Rev": "1c83b3eabd45b6d76072b66b746c20815fb2872d" }, { "ImportPath": "github.com/gorilla/mux", - "Rev": "94903de8c98a68d8b4483c529b26a5d146e386a2" + "Rev": "9c068cf16d982f8bd444b8c352acbeec34c4fe5b" }, { "ImportPath": "github.com/gorilla/websocket", - "Rev": "6fd0f867fef40c540fa05c59f86396de10a632a6" + "Rev": "361d4c0ffd78338ebe0a9e6320cdbe115d7dc026" }, { "ImportPath": "github.com/lib/pq", - "Comment": "go1.0-cutoff-56-gdc50b6a", - "Rev": "dc50b6ad2d3ee836442cf3389009c7cd1e64bb43" + "Comment": "go1.0-cutoff-61-g83c4f41", + "Rev": "83c4f410d0aed80a0f44bac6a576a7f2435791f3" }, { "ImportPath": "github.com/mssola/user_agent", - "Comment": "v0.4.1-4-ga163d6a", - "Rev": "a163d6a569f1cd264d2f8b2bf3c5d04ace5995eb" + "Comment": "v0.4.1-5-g783ec61", + "Rev": "783ec61292aee3fc2f442ce740aa491e4849b794" + }, + { + "ImportPath": "github.com/pborman/uuid", + "Rev": "cccd189d45f7ac3368a0d127efb7f4d08ae0b655" + }, + { + "ImportPath": "github.com/pmezard/go-difflib/difflib", + "Rev": "d8ed2627bdf02c080bf22230dbb337003b7aba2d" }, { "ImportPath": "github.com/rwcarlsen/goexif/exif", @@ -97,27 +99,29 @@ }, { "ImportPath": "github.com/stretchr/objx", - "Rev": "cbeaeb16a013161a98496fad62933b1d21786672" + "Rev": "1a9d0bb9f541897e62256577b352fdbc1fb4fd94" }, { "ImportPath": "github.com/stretchr/testify/assert", - "Rev": "dab07ac62d4905d3e48d17dc549c684ac3b7c15a" + "Comment": "v1.0-83-gd797d25", + "Rev": "d797d25e0fa6d53be3b1a216d24e868d6a1912ef" }, { "ImportPath": "github.com/stretchr/testify/mock", - "Rev": "dab07ac62d4905d3e48d17dc549c684ac3b7c15a" - }, - { - "ImportPath": "github.com/throttled/throttled", - "Rev": "fe4c91d601f05354c8a7feba917ab9d3b634f68d" + "Comment": "v1.0-83-gd797d25", + "Rev": "d797d25e0fa6d53be3b1a216d24e868d6a1912ef" }, { "ImportPath": "github.com/vaughan0/go-ini", "Rev": "a98ad7ee00ec53921f08832bc06ecf7fd600e6a1" }, + { + "ImportPath": "golang.org/x/crypto/bcrypt", + "Rev": "beef0f4390813b96e8e68fd78570396d0f4751fc" + }, { "ImportPath": "golang.org/x/crypto/blowfish", - "Rev": "74f810a0152f4c50a16195f6b9ff44afc35594e8" + "Rev": "beef0f4390813b96e8e68fd78570396d0f4751fc" }, { "ImportPath": "golang.org/x/image/bmp", @@ -137,8 +141,13 @@ }, { "ImportPath": "gopkg.in/fsnotify.v1", - "Comment": "v1.2.0", - "Rev": "96c060f6a6b7e0d6f75fddd10efeaca3e5d1bcb0" + "Comment": "v1.2.5", + "Rev": "2cdd39bd6129c6a49c74fb07fb9d77ba1271c572" + }, + { + "ImportPath": "gopkg.in/throttled/throttled.v1", + "Comment": "v1.0.0", + "Rev": "74e328a1af88a9b54f9eca1397d74ad98572a6df" } ] } diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/00changelog.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/00changelog.i deleted file mode 100644 index d3a8311050e54c57c5be7cfe169e60a95768812c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57 zcmWN_K?=Yi3b98q>BnjeMv71?l+qmEe`hDJ#%Hyrb$ zAKIMc=lr2AtWGnXy5`iHW6^YxL#1-3KF{}`*WSG>C3?LUUgUpoF$bV`085dJ`_p(i~x$f1D9o z>bcM156@0w6{}v0E^ksChtdGk2#g*3b`WOk!sY zg;6GHDZIjC4nY%#ngk=e?3>_jddW7NpA-ecI<>L@CY!78z>b!pXlTypBm2E2=rBXu z2%O3HPZbEsI`ma8>lhy&S6zTch2RBDb3L62Z8eXpVCZ7z2bjp1^?^c%>n>2qaBqd) znbqX~`9rJCXq%Bpf7q_KoQF1_a(Qqw{m%~Aob{j*at&RBP%LsI@4Xb}PofzE8XXK* zBoe682wt??A_+&r!H%^qGlR39_P{LjM3+0MEWL~Y4 z&JCTQiXrniuix)SPdc}ebEom6g3>BFHZ!^&UVKF*|K)Rzi=>Rqj;6ySUWH{)OWi&I<(#?|C|W(10!>Nv?_euS V69B_L*Ji-GM}-zJc+?^b{sUpQ`#b;u diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/dirstate b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/dirstate deleted file mode 100644 index 287a04c00a5f57536cf9234fb3fc330cb46ae7d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1504 zcmZ{kO=}ZD7{_NLX;N!7pw?KDA}tjWc9#|fQIOV{+7y$NG&v}OZj;IG(tTrQV$+L7 z6g&#v1U(dT5IlJE;=w}?;>APHUi<+16?D@)Gy4|zvct^pdH>I>9j2{MU#bU%l~*6$ zd^`F&nBRDf#(WM!&j(1#{QT>G{`pykDeGuVQ>|X#q(ot?3(VUez%0fXd1={W@~+7Y z*)SbuI=aI8Y-EK}*TE`tzfvmKw#u-7WfS%bU4k*&^RUWDZ?tf|w%fr}(OrO%3UJXf zx7Fbx!B0)R8(J#ut`79{GoWX1U$Z?6t3;y=6V=vCCvbZ0C17*O42E?)9+oL^>ES!T zqb(w#7NP0Sz~p&k;W`@omJ8sl07Uh=wdWZkF1lF-^rAqaoY7B^Cy#EA&G2}LedtZ$ z4=@+v-gNBR!WT+y19wIYyHQ@fTjk^XcsY@kC}7yUz|&+F$YR^>s2=eT<>L}%&-K@I zG?n%+zuyRDW`JH0acyk}%Puo8;qsDwc~ONLTpdeblTi$vX*z}d6MVoE;nbz~mjEBH zW2!ln2MXzUt^rp0c;h@@RYAR{zyAVoj86CzuC4=fPB`O>pmFJafKHX_wPvGor`4=C zwxG7G1cy1%r&4|ML8W$Y1W0)UfM^hQ(?ZFvdV95Cm()OF3a zwb&h-+K*Gj?KzzoHE{rxxHdvd(Q9+V12AzHC?oC;4w|>}2*@IDZ1B8r=K($20y<}z zZR}7?)h@F_(@!rZ0&~C7X97vfKu-E%G diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/requires b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/requires deleted file mode 100644 index f634f664bf..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/requires +++ /dev/null @@ -1,4 +0,0 @@ -dotencode -fncache -revlogv1 -store diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/00changelog.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/00changelog.i deleted file mode 100644 index 34de69c665766e2537ebfe394f3ccddef641c5e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38699 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≪T2N1C5wm$(sy4=HZ`ec9Hgc>6gwRQqRq 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/00manifest.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/00manifest.i deleted file mode 100644 index 15c762eb9801f30fa749edceaaf5644bdda18cba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34583 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

FibA;JOT2Dps&k_EF77pcry&SO_IypxMr% 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 OKZ{DN^%$6JgtGxVu?AEC diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i deleted file mode 100644 index 1f846fcefb76db0af8be3ebf9c23621fa96c6467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1275 zcmZQzWME_f1ExR*29~`LHUr~-DA4eJ@Lp+!xzCxLoaC(@C!Vmo%#MPp0aF!odP8FU zZySizJ`a!SY;O#?^meMENehdx6VFD!>aw}FZyfsAo3mW?_gCw(S(iSzgob`RzVrFx zdtau69dkQmE~$1iXU(=#6E_bc?yfS z)s!r>JH9B*D@f};YucTs-PH>Z%ypTq!XtWWO+nS?^sk?1ZSO9YJTbrjQ)uILjr{)yg>$4>yLqi<^9C zo*eaEa?P|0o(-$|FVud&vV?onp^48U*kmJ>Y}pq#X$r=#c~@b3?BDeb=OdqM$iHBH z-?-)Yvx&3a)6;q*7>{t;<^zS{(SwZrmS~2#APq+Fphckn0-ZM zGJoNPw~u+>UhwFtjGbGP*D>epXYJ{~9~d{SOJlB_t8Hr?mhn@&IDE^r`iUBfqRZ58 zZ&*B4XxFEohMGSwb_DNRIpM(9lih1xS_;Ru{;caae;syjgZ$SwPwXx77yJaJDo|1c z0$pH&ya#46Fz|qAP@3GHVN?6=aLN1TrI~9M?{N@*y20=kR1K73Sq#(%#0-i-`RS=e z3IVAF1*r-)MfvFkAeKXVZenJRUUGh}9T!LkQyo~J4p7rSFpGgf4@iS^z>{o_E+(;a zJz`ta`xbAxzraZ37YkGklw!#S>H}g11;@OUqSSH)_tc`I#Jm&*o5YlKhxGiM#JqI9 z{GxQIU8}&_92po`jiCnE0BI(W$M)U1c)+>y)6Mdt=1)pla!dksLB&utV5(wHazet( zG=^lh;PqFwn6xU`vL2r^=ZX#M>@|yA+V@cofyn+=d{fD)^{ct zss>Df9Z-3I;TTVwV|)0sFs&ccmpyqdma^p8Qtca0oNw~6N_M)gtg8I!y0g=A<9J>O=|k?su)Yt+4k zplZMr)b0ZZv`!p2@IbhvA~kPmQ+=jaU7n*`R@|;8U%M%9113z2n6hg6^!O>WXH1TY niCO?;3O43h>M%jofT@Z(z7sd* z9X8-`DX(QczRe?dLGrOhE2b~txbTEoq;*q>!6L%H`9%LU6xN$ng*hweg*kyhz#>5$wXC5%QmzO_0Yqe0);_C910_R<9j$Uc@;aSqW zGU29FgSdr`B0F#6UFTZ|L>6&>pHtD9Qhau$%DIjGCx!OZ*RN5Sv4|y=@dnGcnxi@! zuNb(OtuZ)P?|JvSpq0-I(T(!{UJ=F*SKfX<&wRl*A}dc5t@N+81A{ zSgzQ;x%z67`lYl>wP!sd;OSs;kU)#T!%PK9~rehlM^^X~mr6gan&|499qODoU>8%A9Gr@+jBLN-k9g zKfg@ZWqDC`ah@BUywU=*iahHAmpUa01}GU@ny$AnbzNw&RbivXMitZLLH>#srlL!_ zxfgohziF><>GFBmoK;RybrYSuvOJU0{5Hyoi!)^VXv_pz$=Ct5xCF_yfgoX!Yqx9` zj>x#X-#vf-9i^{!do8xie7O^>8cI~mF+F3*b;v=W_2EUMx8>m zOok#Y>(2)BL@aUIoxS&q-;q4-uHzdfO?--CX(MP{j1abs|E~6HZRF4W7GE@mpVlRE47K9L{ON zJ63XjtT0I5G%G7a_m)N@w{qnn&nic=T^epBrMn~ALqkfZPZtq+ZOe5j#k=);fab~n z9TIPrT%2L&QlGl#h133)Cro>;tl;S7+|_nPGxO`Nh;{bUGL|grFF1BKiv{f#OYi@} z`Z(9aS-(`(Xx)k{e@i)c29}-uGkFG|`>XdaJETp+Pb~e!TN-_4Cn%UeVG9Ipz!0tj zvltj8Kr|?j)t4UDOe@$?wt2Nd>%?iP=f25DM?uwqsfszay@p(e90XjqpVPEk5-7mE zUcrzeF(+4ab>gqagP7cJTPd7qqv;FgN3)gR^*^FP1y`tass=Q{j8PrXp6BFT{@ zVZ89|`3%n!H3t*9S|9J diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/_r_e_a_d_m_e.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/_r_e_a_d_m_e.i deleted file mode 100644 index 4a603beb9301656b74bbbee7460da451efa1cdc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmZQzWME_f1IC*S49t2EHUr~-C|GoU!P(TW51dcVcoMw!*5}?Q&Br!C)qtsrIk`c% zv+fuO)UMl~bi&&__3hq(X=?ckmu4;u@R0qq=0>u&Lgo>VxZ{6+^}V_48^vYTVOeZx z{QSx-mkIuk3VsfOqakM3;PWf<_%<)y$3q=d-c{`s?s@7r(K7Y#c zarK5%->3t4dCOABVJWfj8RKi?i94np z60=dAk-S?~i?JqDo#%%b zJy~cPtM0k)V8ugAmowqF>(|&hrpIlVYT6^Sdf}vqDD6lczak6v3YU4uDtl5Cs#D)? zndZiz#l*Q+)G=y)rs2^&2}{V<$fK3 zHA0(C?@jAsdh#y(qM&N+SGQoxgOwqb{*iOT8WtP8nsKM~n3P+t)ZC8~eZ6L=ww%AZ zI^0J`ifi(R>zrlg=IurM@8&-2wwfjOs?qk7l-vu+qv`&~vbN+Y{%DbGmVdz_?D=ou z=UZFqlF#zo6OTVq`VxONicfTtYigUH=AAsV zo6@2FSG*f<6bqZBub*z4+x3V)UtD}OD0V?f0th0338MwfVqh=<(V(F;n#*4mo7Z+fT{sg6?1HlZRBcD5MWD4pZ}=sTFHCMMX`H6b6knP(s6H}V#bdL z#>Y%PTb2ntUMJb88M171pJdUpD}fmgUIm)%p3oGc=DNXx)ug*yW8cp!uFo!~g#Ow7 KjdhK-{5b%3)H1pN diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/cmd/print-glyph-points/main.c.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/cmd/print-glyph-points/main.c.i deleted file mode 100644 index 13c63587eddac2b5885a6743418a015f9eb8bffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2250 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 N2ehOCK83xn{sYRFC941c diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/example/gamma/main.go.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/example/gamma/main.go.i deleted file mode 100644 index eac5254a2f43a918fd4ada05faf0b93eac775879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3404 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/example/truetype/main.go.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/example/truetype/main.go.i deleted file mode 100644 index 46e52a81ad7a0f4d9b1a4c663f764ce8225d261b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1990 zcmYjScU)6v7rummG8=|00mGD$KtQo!l_EoC!jO$IU>E@mBcz6@pbXiDB{qso%WOg5 zW0cuKStfuYh=PKA1VL6m5D?TRxB25cf86KX_xHT#IpcTk1$Y1+05o100Px%X>jV7X zxF-KCHFcJ5(q*OybJ-rAf7P03zRl%;K&2O6cE-L&!4gS{gGljENW=4TQ>8r~7^)?? zmgjWvM$0)3c-B#5+<9Fp@^C6n4ZaOKYT2jWFS zqs(1`OVDULpT}hy1W^ptUck?eGCp~i`B1zEEcc8wcSpSt$dPk9W|Kcryl{qPg zqszmUw^ZFxmxiM&T=GVp9d)tH#&8BaUrmr%x3ug*S3&sKm|%6Zt|Op0CUX?MA9KYM zSD8~usz=1QhD0@m*I^s28YwvC8wm04^bC`^Sd~z@{iV1v7V??}pXS)1AB1lG##6;j z@xZ6c47i$}o*3|yW^rL=v-QHjT-Lm>>yE#QA*4j10jt?;t>z?FWxB{%$BVuew+t0n z%$=!V{F&wK_3rIeTS`muz#oC#y%`=G3k|s$Q4GEcYQk)NR>=O2*6yRO65UaX8`SXQ zmcDVO{Tn1w`mEoRg1%Cs_gcjz19?$Rq@h@jI!YNPa$Ek#K_3ZiqZVKEd2-KM;FhZq z5bHEq*v|TkcW0Mi9nMmveu-?6%U-nLoCdXB-p!o3B(FP{)W+?nP z9tai=eZi$pFn_nrfbkYP zqX1MdI0V3YKI~&`eV7w;YXU=%5QdyB@3TEBVa?zviJ%;=9^R5O5rR8XOr0G!rmt==mEe<4suq?G2-Xme#wFE z_V(}o>pmmv;z~0u<#Irv(y!t1Q9*e8s2?6bVWa)b-d#gubX+@44%f$ zC=m1jK!%MxoQzTwn8-MPSc3Z$)NK03p~~Agisn zJYX?Q9Fy-j`6b(!rB{njD_jX7%9Px5SUk2^7pX4-_NaGOA#^d%)EQe+`riqwIY-rI z-*4;fw0#CPR#8TrTzEf#85yw4Ac7tMoMj_~Q^vX5{Rz7*Ul4;M-|Ulqp&sf{>t(qd z5WvRX^T*>S*^Py*ERT<1XM{MN9T|CUgVdT@hS&u_A`LLamzHpyAte#O%~~>sa}%lv z-Z%L_(R1t*UXG|A4)$rB49TmYiA_#ndauOi>F3~4}o;{>+cg>{fxS~91y5NbE0P(!??D)NR#HIBart!&zuD31PH=a# z_mY@BJYpJ?AF-+gauxDVc7QBo;A?a3e(;!`1_|$$%K>{ z#DQF$+SN}`#u#RVQx2ahSQLTX2^#1DfHUWq(+P(D5n*0v;bf-q)AsRODHiS5)djD=Nva#noCuf01wQuof{(&}(H97aih`TMgLE9i q{RkR?;iPB;JdhF*fPfQG2zYc9B_KK`B0vWdZbKwR6G=gug8u+lGB{=c diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/_makefile.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/_makefile.i deleted file mode 100644 index 70234dfcec5e8351b4fad540880573fc6a2fa48a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 754 zcmZQzWME_f14d2;2F3;mn}Op$6g*t@rLui}|6%r%1|^Bnop*f;%}k+cz*NPY+6jjF zhYSQ-pZ^NC>Ev_G5!Z#6yC#}zp5RY^^5jIgSbS}6@1J6q z0)sajYI;ALmRGg>%TP8=c^V)b^)8nAvD&4&?e}E-q_-RkQfeu@^sVst^XYpm#9S@? zo2S1_FI}3FlY0E?@t6)H>u0OKedIdYnG`nd*lVGa_g99!bQZ1Lc=xUO@~f^kwpADF zewx233w8R#r2D9z8x$I#AOwOoAZt39#lRo|qCsJ~;56g6e_8fdPCq{Ls~}CSlr7KF z7ODnJRm`#NHRL+vAmFV-lTNscTDPl^Oy$@|k(bIi)G73Mv}z z{z3l!A)5NdMalZUiP@=oKq)Sedd6K~T^2}I83RR_Kvu0hp>k*Odk%-}vl@;!lojnx zdwW1rDp(Ig#hm1Xge!>&2|Wo32^TmEd5X6Cp7Zy->V5va|9K#F?)+8#3;x<(zPc-Q RJg)klZ{NI=p($TrF#zK{Dd7MB diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/freetype.go.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/freetype.go.i deleted file mode 100644 index 6fb8e7dc08d4889f1390b040f8ec5487fdd56723..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13159 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/freetype__test.go.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/freetype__test.go.i deleted file mode 100644 index dd8ab50a1e60a5441f30a463db167c2b39b3de2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmZQzWME_f1E#GE46N!9HiPYdC}2OE_M=`bb&V7cS+AKkSV*np@?D%baoyaC zOx4+1w^^2Y7W8ti$_lizNHv=`&GA>m>%cij3NOx(S$643s_LD~s*~14DV%<=;rPc) zru~mIbeklaOZe>OJBv5n_uM!yd0ozt%2m6gev|}f%f%hm=u{5fA}4?DpoXtb;IZc( zOC(oa{3qrfCHb;*^Z5zuv(_@bR&fj5Sh9FN+skj0fB5sAU2UbehI3zR)p2Kydoww9 zzBSt+a_+Qc)-IlV&J8zzUJz@SIwbz->AR|`gH|v7o;CU&YdF80v+kVQWR|@vvgfQi zccGl;$HQPLj`IbV=RW@)#A?Z5KaE3a{?yYe!Cf|tyOe2;uq z&w4wVpKZxY;W=3{+Z^xa&3WZ$IIp#tt3T4*`%hTdYK5l$#g5Lh5?kIRKb^Q#DC+i} z-0Y`6bJZ2Y+Y^QV!FfP5;+V_{gf)*LRC)^2b6R69tySLk}Wf9BVyu zaeeIeqJ8E&TOVyQj3ZdY!x!|OG`3y^ny|oQ`|ChQZi>1i;#Bfg_ZK^h&IIhvc~b{f1EwnG)J`~< zcgR4%<^0$19v6PsEa6jo+c_M&Ts&DH9#bte+t&KpwajVi{`Hf)nHOpA;ZI(0y|un`#L-2PcA zSxA&c*d4DqJ6CSu{aYTqk(O6lrd3}*u%mO!?RD3FKbBg%aSBJ`oGrCAj~@re$#gB6 zv;5%cFN=2t7_HlM_*Jc*%S_o%+rQOu9qmjCn|AEJ>ZJWaYcK7d^-HVdiECWWw%uPp zzSWVdGdC>$xBY!ppwl0QQ?na>fPw@RjzAy|WK96G7#NsAG$=rg_+|E2)J%Pr)jq&P=I^Af+2?@$1BFN>yc#% zGbeg3TC(-?J~;=$EfrU*Kg=oSe}3on;mya+b@+XrdZAE7k|RsPc;Vag8J;I<4kmK7 zKHk4$BJY|eUa_oDUVY;(`IB{NJDn~VIt#y>ne6tZ$-%?wB&*JS$L;sc{%&-9W-%~G18HWEFRoZzXS{vDr?T$g_X*p+U-^4~qSQsG8Ysoc z1Jq{-H(!7(eMVWO9iN98&p3iVpu>{ znf~<%sA}BZ{_B)--Hz4QZ1-xaEr6!&zKXln*o)61|M8ketrIBmh=! zk7S22P=pm^NAs6Lmt*?_#QxSwTlyFJ&oh6+;s90+B`W45CnQ`+Oi1WSPe?G}E95EK x?t9MP^Q!mx^Zw_7)VcFl^)L8qd->|F)bY6Ld%k`1*KVP1@1X7-3~cj-3jr#@b{zl! diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/raster/geom.go.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/raster/geom.go.i deleted file mode 100644 index 4ca1d55a46494aed5f896a1dac1c2de165cfe6f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9573 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

s zP_SqMTsa+~UEN0;J`Y=NWZZnFa*MD|UQ%Q?3_!fDun8nDLdDnYz$GE)`IjdHSffH_ zBa%>Y`h_Vw4*FXt90T|Lijj`B)IXnp3W^@Q9dZA60VNE!!3;o0qO!I(wlrrob20X$ zdfm7P-Clh(!BJ}eJ<0^uXpku1y1zBi_a3ted7UEan=T(vpFx}d^LbUTO^`j+-QAKH z9Nd$e%1K|(tI;#6DO#k>s`^!Wit`=2kOnIqcbml2J5D85RW%e^e0|k4P)cQfRZsz4 zNNjNM7+RECg$?x?J1{_2@(t7-trQ7lXu?s5gz5xm1Ma<`2Ek@g5D6Lv-z&;r`p`g zZgLTcmN-e=RpK!cd>T}ggz$Bb7D|!w16?U=cy{uTuRk8aUs%qX{8@dY4#Y9J2PMnq zgl5P33Cn2Bqit34GE6nKBes@Aou!&`b%R&)IYh%GS)ZSXgG`+}tw@tKWNEwO$TbL@~ z;{UJR*ul3kAjQ}6mEe_f+S7A6h@4R?T(o*X&N=wM(gVPMn&9QjWdhz00~AZfAs^vS zJC8Y!R5UE`@I7kpA5rMclQgq3tMgTg^YM00cLAatbedlpH0Wf<<&@yE zDwHSSnt+@N1=>?8J&T$>?+Z%d2YH(6*?DHUVHu2#lHiT~^Z6Ry@51pThXcif4zK;) Vak+w;D(gyfb7=?w#4em){~syUX`lcA diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/raster/raster.go.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/raster/raster.go.i deleted file mode 100644 index 8f53ce4a22e4b3ee536eccbe02e88165643d4c42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10019 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/_makefile.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/_makefile.i deleted file mode 100644 index 69e150e47a39607320302a1e9e2444d836ce6449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmZQzWME_f14dp32F6YZn}O{=6u6lmb28i;GXMOCO?S2QjvW=1nz0P32254Vshwb$ zf5UTU9Jwr@V4lK!^cf1hpH z)v^4z&NIFLW%t&3b;N&(Y`O&s5l}D!K^u^@0L)@wkO0x3@N~KE`srbH`kl*LjWZuk z?U0+iBXlcN4VbE!W7})Ub;v=$b^AF@yCs1F-0Kw#ITSfwF_vAAEK8U<(R0y~t)KVF zIS6j4xLW;TPBH)UJFgFKK6b9d@AK3Pg({L9SrWzz-=5F#JW+Enk*oFb{v8u}*EI2p zWrgzU8+XZ{tV`SJbivSB_}$E8w=Yc&9#$t=b?!TEzi;+;qvIo|*ROczRqF2nIfZdD z*g@Jr)+{iKfk7H14DyAT;)Pk6Wga?DJXB_evYKD3db#5|R1K73Ag)tL`yD z?%VfXWp62NKLb_`B`W45CnQ`+Oi1uaNk}l@E#xWM?t9MP^Q!mx^Zw_7)VcFl^)L8q cd->|F)bY6Ld%k`1SMM&bgFJc+hB6{)09@NKaR2}S diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/glyph.go.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/glyph.go.i deleted file mode 100644 index ab82aa808c8d49e399b46f3222d1be4f065baf08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18054 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 Kp7;kug+Egloq!eq diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/hint.go.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/hint.go.i deleted file mode 100644 index 5a36044674b2fdf232f74f58279148e7b633e91e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28460 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�g9nWH+wII#K1z7ws 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

$37Tr0?NZ{d=}${&>T?n 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 Xr(~FMwVriZ?xAYYoMDyQH=Fz)&Cz8R diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/truetype__test.go.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/freetype/truetype/truetype__test.go.i deleted file mode 100644 index 081d0e08197665a6ac4619eba51d2b8f969c9151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12970 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luximr.ttf.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luximr.ttf.i deleted file mode 100644 index 5bc4dcd90c195bedd8cea0a1b5b530e88be2d6c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33514 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�Djs#;4OSU8@58U%Qp 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luximr.ttx.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luximr.ttx.i deleted file mode 100644 index 65810f58cfa5a8c15ba015fb4baa93260e8589ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74067 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
q~a;Np6TLqo~(>2Z?8^LGHleSly%2YdFD*xrm) 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
    Zp^M*o#OfE81w$9o9r7gtsYZcI)Iwz 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 Bx9R`@ diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr-12pt-with-hinting.txt.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr-12pt-with-hinting.txt.i deleted file mode 100644 index 36a01055781e9acf32de479ebedbd77df81f9439..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19002 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 lkg+`Dg;5va6n+7jGu{{vY!YFUSDHueAj diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr.ttf.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr.ttf.i deleted file mode 100644 index 9ac47184789958e76801cdcaeee7363df6bea534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32867 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr.ttx.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/luxi-fonts/luxisr.ttx.i deleted file mode 100644 index a8b16ae34de2a51dbc8e4dfd1864889f0f2f8838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71714 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%0DIj{bXRz^v0NCXDEHmHYbFB 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/_c_o_p_y_i_n_g.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/_c_o_p_y_i_n_g.i deleted file mode 100644 index 00af38223f6410995cbce059fe5892304eff533d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 zcmV;Z1Xue20RRC20000000d|N00>Y300000002?{|NsC0|NsA66Y+#1KKNT+jo%|- zv;vY+6Ryqx00000000000001ZoOM-8bK5o$o?P)Oc6{h06IOB3)UkaEB~cb96seL_ zTpuA4lF*Wb1|+SxzrNpsvTWxurWev$9mRwEvRX{M?HWOJ!@_wrl|K9dOXw zTG@1}^k`$1VsNpOcB?$<49Vt!_R6*Zm~|(0qnj-W>6~+Fw}UB~xvt2jB-ys6&=Pc1 znxd~&(@9tFMptn08u@fKbKS_yraMTh&fYksQpt*R!;FrP9>05t7FA!e@%K!!v>Yu|!|5>o&RA*{nhmIi(V?{O zjc|p~*mDVBZ8Z}>1_jf<&dSJ)_4T*e^k+NL@;P$DjXIUSeT~NTvmH6 zM2=5#ZSJ2BinDM!>Be*@VrYH0gWCS-fQN6WbSF{QS{>U6Bj~bxQL1Th?v`p})lVxQ z4PIW>R?7$0VCLGCdZT%SWaWm@V>(%uuIiz05EXlA;i<2rbsD8=^|o;iw$;Oa*D{KS zPZnTlpHD-3k`vGL5U}n8q+Hi9LO*2!=FyF#6pnL5Irl6Y<^V~B;j7a0XbxMxH@d{h zs^>Pq`*M6~C+``HtVdhiu6aPSB+e;IX8En31{7wrOp~wSG?>zvpW*kJN4H@>Ck}h$ z3WJQ<#3D#1bNu$lVHDQSEh(_rDJUp)4hpz4%d%7|bTEEIfYcsBQ=h{QO&38Lhdw^9-< zU=YQO7k)MVco0z2u9P`lv!o#paW04B+qh&rW4*obPNMrc1#%bV3VB}ss<%-8-j9T!m zPtNUco}1rB*28W8;cXD^q2h^u{`3rc<9NfdR)@V&-YeYUmUk7d zf&sBTXj~p%WqWIC(toWcm3LHrM} G!L6{yWK10Z diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/_r_e_a_d_m_e.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/_r_e_a_d_m_e.i deleted file mode 100644 index 5130dccb7fe4750f4d193b1f941af77dc6d334f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmZQzWME_f1IB3#3{1-*Y=*%9P~d5Qq32%trB^=gt3E6h*}!zGU3f864VbE!vvz`i z|78P#qg$`nbnVRTma4uTI{A`x6RYA!e;sxUt8W&D7TZkAwrkFx=h-02euUGtZ_>vz zv+q}jPwjhI#8N*iCO26lvTjfHw?}X92C3Ir9P*Pb+hu9;`}W>_SKITdFV9+@d;Lvr zx9{qx+}&_tE%WK$rBYs=?wacF1f~h_KFe2KR_P>E6(YI0~W3j#2jQYxqepxaN|zWGB0 zmyoN_9raQZjmnHZL3P6^7ym1*Vi)h?-m4M(Q$EGX!&Yi$N9yZ)@s|RYpSb@se~&$b zzuQYEP}G3p6A0!4V>JoPVqgdY(V&Q(n*HU4ibnF~{&bcLZ`6NI6?ie@4pa@8s+c3& zdzR~vfk4aSt^S6`!@T4VtX?4Uhn2sI=j}1JSxeryt?_?!nM+Sr;+er=^J6-{R`qXh zG}xE6Kd-24!^Y#^YAUxZx1A&J`9S&81J=FiuZkY=-#gNx=R2>;!q2h#&|c3!IwC)e z)2?R4iLS9;eU4f9;R5vn&9s{iIU-Ynt_mc*4=CCi(=IaEXIpTQ{%UrVS K2Xo973tIqo7Bn{i diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luximr.ttf.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luximr.ttf.i deleted file mode 100644 index 00d6fdfd037b925587c11c9d7c356198d7204364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33592 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 UuVr?lxmSXoDXJa+AB;?7dw2)g9RL6T diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luximr.ttx.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luximr.ttx.i deleted file mode 100644 index 72aa2de8e355d4d46ea66755edb7bae3d4415b03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74271 zcmXV01ymeOvju_^EVz4ccXtgMJh&5Vk>Kv`!QDd$E{nUn23_2O`vME>Gt=F- zPSu^N*{dX%RDVyrEy85zsE zTjPOUdaqB<&#BLjywG!YoB-EJ)rM3id)3%KBKY@B0)lx56;hLKe6_!QhAS2<(xLwX zU;cGKZ~yK3-K_h$H|rU{9r2&dtn#Nm9XNP5w2DAx03MiN;7Pk}%L+gAs5bEV;`ur9 zAwRWhVd6A!h52nuP5$o#mOlPn-$=I%XXs|LOTUI z3~LVQQ@6w?+36`Ns;ZvG3g`_Co3F z^vIUBGIoFS3&C~@sXgqGJP{Pdac09uo>sYedOe2qfmt_L3aSqmJOl@RZ3H^rR-MW^C_6P&T#=&iFRx!+I_397270=^z`cP~ zuD*Dg{7CKi0KNEpkM!utUsAih1#;+)2=u&dMSB-s0p9iB0>a)g5D9v5c!~bfk<$aL zn|8hhV*ZE8{=+>3JsnTNLGMbQ$o~mN{}a-@(*;8R6M}L6!-4&4i&I-O|Kkh(Pqj09 zIv~$PzFGgD^-U|nF#ikJrDEJ^*L)yIw{gh4MQ_T<)J~)Qdv}|I{>suHI!%t*De$Tt z@oL`}{-e4O7Emt5z~tc6)5kZ^l;9se=APL89$!%e=!Ny;yGVukC4z}R3+>&BNNC9W z?T~JNj!#kip|ax-yqc&1z4R#+dE6qo1+PtQ$v=A5`o72gBCA)ieEFY)+g2tWPaXex z2_{jt1--mtyoZH(NFSfm^S=Pzf&wr7c5aUo=5PZ>f@~TXg;REgWi{PBVoryiP+rb? zoScAa__x|$_I5lMTLm|bo0Y}Qv0I}9ICBbEzH!rrxZ!kj=QVqn!XK2sI{Lk^xTW?a zior~57zilAyt2i{Pj|(9_dBx83dHmQiis8s#Ku_#WT?c=kl2oPdfhq@2byhibfD!(Vyan9wubbGtN4CN1#ALG$z5H1Cix&H}Eb zk7{~NI7W+v13~GP6<2&4T-Uf4?kx2cSBoEfQNe6Zbrn~_fj5jB9j$!@{W+fW3yqCY zZ9|D85;KgnKRl}R(wg>I?n zy?|u`vnkVLEQSr+&fkDeQZ;E13yG2+S&w^&@PJ_vBD%l*!I9jc=pkH6W^#tRrTl` z64jQL$^XURSazb#X?ky^*|Xo2pZj+Bgok<}r|OF(tWU|3P@-yjkNjo>zd`d6v1Gfa zTepb8Wcktgf=tpWJN?a=cgOvm-|9^|^6zh{1W(1|&6we`-ME0kd{C2&Z9sio&cmcZ z6Goha+h%uOK>@p%9Dljp`K?)U?UF&~dep<6$0c8JZP$HAV$nwIYT{Y=CaUqUWorg! zk4Q9|4gh_IefL+p@AK^M>c{n)hx#FE_NqfN4r=WmL756*a#j2uR&#E{+CbW5(8Bsc zfs4u!`e^}<1lU^Dpo2?Qtg}qCL%;ekgL{S2TIC3$E-!r@eRl}_K$H3}{#tW|WS~

    !q@?54!=fBo$>s41% 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

    H^dhVcZkwN1A^USi1pU&+8s!`oW5Ng@ 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/make-other-hinting-txts.sh.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/make-other-hinting-txts.sh.i deleted file mode 100644 index 617ff0123775bee9fba2cfe6de4c2d4aa8930afd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmZQzWME_f111>;1~x4Sn<3~w6fF4t(Z=Ovvcra}EnyE5TKwbr)3l*#z*NPYxxum7 zw+%#Uudm;sT$#aseco-y%ms~W6EE0qxsY1TyGi$UR_@8k>n2w${a-t2@;Y9>AYBKy-KdF)!8(V~PBe ziCJ5G4$rLr_uy3BbJOrcT@4z|XQPsjJHAe+sc8PbMaz3ihO*hR_?{{vf+nAY(At4pS$xq{PE?7u`#Fa z_uhC_Av67~+RVCE32FP-c>i^uR4UsPI3{cHW^Z_LiIp`JHz=-tx3^1t@`lQWX$PWME(y z1G5+yazHdFdF4;|`Jlk7xBta428UbA`jxgO38+KWfT@Z(y*-XxhYSQ z@f*XvLt9&na@j6uTFW_GJ;5OCG{{vL|8s#=BZ#9w<}V;NRaWpUQOHOvR>;rGsZ>ZxP0dp%Ni8l(O#uoh bB<3lECY9!ulqwjS=oy$O6juUea`m_Xx`K=t diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/~2ehgignore.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/~2ehgignore.i deleted file mode 100644 index cf67e9d7a30284c6fd06a1561cdb28b93cebdb96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmZQzWME`~fLb6m0m^3h4+Yld0rN$kojM$m?tkl_#zYGh5!Q7uH6XfTj%x2gu0sX_ zF7H3f&J&B-8*ycG{e|RCMO{M|mFP*Lx4Q4&TM{Q{e1<3Z+LFAT?fpFu-1DoazB#D) zs!t;5^O3_#cUu{TTCUXK{cP2!+jx1kLE?IeY3rNnOsB~(FEiV2v@h|hIP0nZ2EQLn zm-Js2y!u0d-8~-J4U9X=b(p~p0Xdt2K?I0rfLRO-U~!Q9&)J;%yeiGV%yx=wSX9R4 z`U9$O8=-1oQ~{6y!W{XfC3*#U>0DrmiC}Uq0|TQGn8mCAse&tandw**M+*{mFioB^mc)H>9Tc1Zp@3 zN_KcTyes!}Ue*1kNPTT~#oe|9!z;U7j4e3s?+;j(xAt+=Vlyt2?Rkn?_p~^tzkRvK rUM`>@@Z^P`y*`^3U8_5PVzeb6O%ljJ2!Z}aU}Me6n*Hj@GXdi%Ws diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/~2ehgtags.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/~2ehgtags.i deleted file mode 100644 index 51d86733757608b60df0db862d56ca926ed21ee3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmZQzWME`~03#q}2xaU4hl1u4GK)kmKIROnuxz=r!CUex`-~q@HDIdL(k#Uw*}&Y= tz$C@c!ra8bG{rK_*d)=|%+w?~)xa#tz{uDl&DbzSp(r&cHL*CA3jhKhAQ=Dv diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/fncache b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/fncache deleted file mode 100644 index d139235faa..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/fncache +++ /dev/null @@ -1,52 +0,0 @@ -data/testdata/luxisr.ttf.i -data/testdata/luximr.ttx.i -data/freetype/raster/geom.go.i -data/AUTHORS.i -data/CONTRIBUTORS.i -data/freetype/truetype/Makefile.i -data/testdata/luxisr-12pt-with-hinting.txt.i -data/luxi-fonts/luxisr-12pt-sans-hinting.txt.i -data/example/freetype/main.go.i -data/luxi-fonts/luxirr.ttf.i -data/testdata/COPYING.i -data/example/gamma/main.go.i -data/freetype/Makefile.i -data/testdata/luxirr.ttx.i -data/freetype/freetype_test.go.i -data/example/truetype/main.go.i -data/Makefile.i -data/freetype/freetype.go.i -data/luxi-fonts/luximr.ttx.i -data/example/round/main.go.i -data/freetype/raster/paint.go.i -data/luxi-fonts/luximr.ttf.i -data/luxi-fonts/luxisr.ttx.i -data/example/raster/main.go.i -data/lib/codereview/codereview.cfg.i -data/testdata/luximr.ttf.i -data/luxi-fonts/README.i -data/testdata/luxisr.ttx.i -data/luxi-fonts/luxisr-12pt-with-hinting.txt.i -data/freetype/truetype/hint_test.go.i -data/testdata/make-other-hinting-txts.sh.i -data/luxi-fonts/COPYING.i -data/licenses/ftl.txt.i -data/freetype/truetype/opcodes.go.i -data/.hgignore.i -data/freetype/truetype/truetype.go.i -data/testdata/luxirr.ttf.i -data/freetype/truetype/truetype_test.go.i -data/LICENSE.i -data/freetype/raster/stroke.go.i -data/luxi-fonts/luxirr.ttx.i -data/licenses/gpl.txt.i -data/freetype/raster/raster.go.i -data/freetype/truetype/hint.go.i -data/testdata/luxisr-12pt-sans-hinting.txt.i -data/.hgtags.i -data/README.i -data/freetype/raster/Makefile.i -data/testdata/README.i -data/luxi-fonts/luxisr.ttf.i -data/cmd/print-glyph-points/main.c.i -data/freetype/truetype/glyph.go.i diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/phaseroots b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/phaseroots deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/undo b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/undo deleted file mode 100644 index 02a42df5e3a03f93284bb76172dfeb8cc7b69d25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1683 zcmah}%Wm5+5X`y%B2md7q>j-VNbJCI4mlO9yrPJR50G@@{C!0|_z-FPKl${G;#{lx5wF+6FNWU@kH& zGJ?(-K?-XF3K0-2Qt|kH_`Tb|`5RW}(0spse0o{?gN1eMrgbglv11O}LMeMcVCoK6 zyVsA+_Lpxwi%*9VDRBU~!A6Gz^`NzDFqx!{5}$Alytsdmrud?!Ev!n)Nt^(OI2RFE z&dGqzYPUV?H$UGG(OhOEG?9G4pU}__yiarVrw@|QIRqDOA#DitHF8>wS~cc6uQeqS z=({}3iRJhcF{s%QN!8n0knUTyg%o|Q$G2R2xj~n4;pK*2f+XU diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/undo.phaseroots b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/undo.phaseroots deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.bookmarks b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.bookmarks deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.branch b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.branch deleted file mode 100644 index 331d858ce9..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.branch +++ /dev/null @@ -1 +0,0 @@ -default \ No newline at end of file diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.desc b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.desc deleted file mode 100644 index be91031a16..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.desc +++ /dev/null @@ -1,3 +0,0 @@ -0 -pull -https://code.google.com/p/freetype-go/ diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.dirstate b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/undo.dirstate deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hgignore b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hgignore deleted file mode 100644 index 111fafbcd6..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hgignore +++ /dev/null @@ -1,35 +0,0 @@ -syntax:glob -.DS_Store -.git -.gitignore -*.[568ao] -*.a[568o] -*.so -*.pyc -._* -.nfs.* -[568a].out -*~ -*.orig -*.rej -*.exe -.*.swp -core -*.cgo*.go -*.cgo*.c -_cgo_* -_obj -_test -_testmain.go -build.out -test.out -goinstall.log -last-change -VERSION.cache -out.png - -syntax:regexp -^bin/ -^pkg/ -^src/cmd/(.*)/6?\1$ -^.*/core.[0-9]*$ diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hgtags b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hgtags deleted file mode 100644 index 243c80debc..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hgtags +++ /dev/null @@ -1 +0,0 @@ -96d0c07904d187405d9f34a3654ce06b0238f31d release diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/AUTHORS b/Godeps/_workspace/src/code.google.com/p/freetype-go/AUTHORS deleted file mode 100644 index 5d8b8a6b70..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/AUTHORS +++ /dev/null @@ -1,17 +0,0 @@ -# This is the official list of Freetype-Go authors for copyright purposes. -# This file is distinct from the CONTRIBUTORS files. -# See the latter for an explanation. -# -# Freetype-Go is derived from Freetype, which is written in C. The latter -# is copyright 1996-2010 David Turner, Robert Wilhelm, and Werner Lemberg. - -# Names should be added to this file as -# Name or Organization -# The email address is not required for organizations. - -# Please keep the list sorted. - -Google Inc. -Jeff R. Allen -Rémy Oudompheng -Roger Peppe diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/CONTRIBUTORS b/Godeps/_workspace/src/code.google.com/p/freetype-go/CONTRIBUTORS deleted file mode 100644 index 32cb6753b7..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/CONTRIBUTORS +++ /dev/null @@ -1,35 +0,0 @@ -# This is the official list of people who can contribute -# (and typically have contributed) code to the Freetype-Go repository. -# The AUTHORS file lists the copyright holders; this file -# lists people. For example, Google employees are listed here -# but not in AUTHORS, because Google holds the copyright. -# -# The submission process automatically checks to make sure -# that people submitting code are listed in this file (by email address). -# -# Names should be added to this file only after verifying that -# the individual or the individual's organization has agreed to -# the appropriate Contributor License Agreement, found here: -# -# http://code.google.com/legal/individual-cla-v1.0.html -# http://code.google.com/legal/corporate-cla-v1.0.html -# -# The agreement for individuals can be filled out on the web. -# -# When adding J Random Contributor's name to this file, -# either J's name or J's organization's name should be -# added to the AUTHORS file, depending on whether the -# individual or corporate CLA was used. - -# Names should be added to this file like so: -# Name - -# Please keep the list sorted. - -Andrew Gerrand -Jeff R. Allen -Nigel Tao -Rémy Oudompheng -Rob Pike -Roger Peppe -Russ Cox diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/LICENSE b/Godeps/_workspace/src/code.google.com/p/freetype-go/LICENSE deleted file mode 100644 index e854ba5dba..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/LICENSE +++ /dev/null @@ -1,12 +0,0 @@ -Use of the Freetype-Go software is subject to your choice of exactly one of -the following two licenses: - * The FreeType License, which is similar to the original BSD license with - an advertising clause, or - * The GNU General Public License (GPL), version 2 or later. - -The text of these licenses are available in the licenses/ftl.txt and the -licenses/gpl.txt files respectively. They are also available at -http://freetype.sourceforge.net/license.html - -The Luxi fonts in the testdata directory are licensed separately. See the -testdata/COPYING file for details. diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/README b/Godeps/_workspace/src/code.google.com/p/freetype-go/README deleted file mode 100644 index 90fefd5f68..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/README +++ /dev/null @@ -1,22 +0,0 @@ -This is a port of the Freetype font rasterizer (www.freetype.org) to the Go -programming language (golang.org). - -To download and install from source: -$ go get code.google.com/p/freetype-go/freetype - -It is an incomplete port: - * It only supports TrueType fonts, and not Type 1 fonts nor bitmap fonts. - * It only supports the Unicode encoding. - -There are also some implementation differences: - * It uses a 24.8 fixed point co-ordinate system everywhere internally, - as opposed to the original Freetype's mix of 26.6 (or 10.6 for 16-bit - systems) in some places, and 24.8 in the "smooth" rasterizer. - -Freetype-Go is derived from Freetype, which is written in C. Freetype is -copyright 1996-2010 David Turner, Robert Wilhelm, and Werner Lemberg. -Freetype-Go is copyright The Freetype-Go Authors, who are listed in the -AUTHORS file. - -The Freetype-Go homepage is http://code.google.com/p/freetype-go/ - diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/cmd/print-glyph-points/main.c b/Godeps/_workspace/src/code.google.com/p/freetype-go/cmd/print-glyph-points/main.c deleted file mode 100644 index 6e821e892c..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/cmd/print-glyph-points/main.c +++ /dev/null @@ -1,87 +0,0 @@ -/* -gcc main.c -I/usr/include/freetype2 -lfreetype && ./a.out 12 ../../testdata/luxisr.ttf with_hinting -*/ - -#include -#include -#include FT_FREETYPE_H - -void usage(char** argv) { - fprintf(stderr, "usage: %s font_size font_file [with_hinting|sans_hinting]\n", argv[0]); -} - -int main(int argc, char** argv) { - FT_Error error; - FT_Library library; - FT_Face face; - FT_Glyph_Metrics* m; - FT_Outline* o; - FT_Int major, minor, patch; - int i, j, font_size, no_hinting; - - if (argc != 4) { - usage(argv); - return 1; - } - font_size = atoi(argv[1]); - if (font_size <= 0) { - fprintf(stderr, "invalid font_size\n"); - usage(argv); - return 1; - } - if (!strcmp(argv[3], "with_hinting")) { - no_hinting = 0; - } else if (!strcmp(argv[3], "sans_hinting")) { - no_hinting = 1; - } else { - fprintf(stderr, "neither \"with_hinting\" nor \"sans_hinting\"\n"); - usage(argv); - return 1; - }; - error = FT_Init_FreeType(&library); - if (error) { - fprintf(stderr, "FT_Init_FreeType: error #%d\n", error); - return 1; - } - FT_Library_Version(library, &major, &minor, &patch); - printf("freetype version %d.%d.%d\n", major, minor, patch); - error = FT_New_Face(library, argv[2], 0, &face); - if (error) { - fprintf(stderr, "FT_New_Face: error #%d\n", error); - return 1; - } - error = FT_Set_Char_Size(face, 0, font_size*64, 0, 0); - if (error) { - fprintf(stderr, "FT_Set_Char_Size: error #%d\n", error); - return 1; - } - for (i = 0; i < face->num_glyphs; i++) { - error = FT_Load_Glyph(face, i, no_hinting ? FT_LOAD_NO_HINTING : FT_LOAD_DEFAULT); - if (error) { - fprintf(stderr, "FT_Load_Glyph: glyph %d: error #%d\n", i, error); - return 1; - } - if (face->glyph->format != FT_GLYPH_FORMAT_OUTLINE) { - fprintf(stderr, "glyph format for glyph %d is not FT_GLYPH_FORMAT_OUTLINE\n", i); - return 1; - } - m = &face->glyph->metrics; - /* Print what Go calls the AdvanceWidth, and then: XMin, YMin, XMax, YMax. */ - printf("%ld %ld %ld %ld %ld;", - m->horiAdvance, - m->horiBearingX, - m->horiBearingY - m->height, - m->horiBearingX + m->width, - m->horiBearingY); - /* Print the glyph points. */ - o = &face->glyph->outline; - for (j = 0; j < o->n_points; j++) { - if (j != 0) { - printf(", "); - } - printf("%ld %ld %d", o->points[j].x, o->points[j].y, o->tags[j] & 0x01); - } - printf("\n"); - } - return 0; -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/freetype/main.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/example/freetype/main.go deleted file mode 100644 index 83b8c3e5e4..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/freetype/main.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package main - -import ( - "bufio" - "flag" - "fmt" - "image" - "image/color" - "image/draw" - "image/png" - "io/ioutil" - "log" - "os" - - "code.google.com/p/freetype-go/freetype" -) - -var ( - dpi = flag.Float64("dpi", 72, "screen resolution in Dots Per Inch") - fontfile = flag.String("fontfile", "../../testdata/luxisr.ttf", "filename of the ttf font") - hinting = flag.String("hinting", "none", "none | full") - size = flag.Float64("size", 12, "font size in points") - spacing = flag.Float64("spacing", 1.5, "line spacing (e.g. 2 means double spaced)") - wonb = flag.Bool("whiteonblack", false, "white text on a black background") -) - -var text = []string{ - "’Twas brillig, and the slithy toves", - "Did gyre and gimble in the wabe;", - "All mimsy were the borogoves,", - "And the mome raths outgrabe.", - "", - "“Beware the Jabberwock, my son!", - "The jaws that bite, the claws that catch!", - "Beware the Jubjub bird, and shun", - "The frumious Bandersnatch!”", - "", - "He took his vorpal sword in hand:", - "Long time the manxome foe he sought—", - "So rested he by the Tumtum tree,", - "And stood awhile in thought.", - "", - "And as in uffish thought he stood,", - "The Jabberwock, with eyes of flame,", - "Came whiffling through the tulgey wood,", - "And burbled as it came!", - "", - "One, two! One, two! and through and through", - "The vorpal blade went snicker-snack!", - "He left it dead, and with its head", - "He went galumphing back.", - "", - "“And hast thou slain the Jabberwock?", - "Come to my arms, my beamish boy!", - "O frabjous day! Callooh! Callay!”", - "He chortled in his joy.", - "", - "’Twas brillig, and the slithy toves", - "Did gyre and gimble in the wabe;", - "All mimsy were the borogoves,", - "And the mome raths outgrabe.", -} - -func main() { - flag.Parse() - - // Read the font data. - fontBytes, err := ioutil.ReadFile(*fontfile) - if err != nil { - log.Println(err) - return - } - font, err := freetype.ParseFont(fontBytes) - if err != nil { - log.Println(err) - return - } - - // Initialize the context. - fg, bg := image.Black, image.White - ruler := color.RGBA{0xdd, 0xdd, 0xdd, 0xff} - if *wonb { - fg, bg = image.White, image.Black - ruler = color.RGBA{0x22, 0x22, 0x22, 0xff} - } - rgba := image.NewRGBA(image.Rect(0, 0, 640, 480)) - draw.Draw(rgba, rgba.Bounds(), bg, image.ZP, draw.Src) - c := freetype.NewContext() - c.SetDPI(*dpi) - c.SetFont(font) - c.SetFontSize(*size) - c.SetClip(rgba.Bounds()) - c.SetDst(rgba) - c.SetSrc(fg) - switch *hinting { - default: - c.SetHinting(freetype.NoHinting) - case "full": - c.SetHinting(freetype.FullHinting) - } - - // Draw the guidelines. - for i := 0; i < 200; i++ { - rgba.Set(10, 10+i, ruler) - rgba.Set(10+i, 10, ruler) - } - - // Draw the text. - pt := freetype.Pt(10, 10+int(c.PointToFix32(*size)>>8)) - for _, s := range text { - _, err = c.DrawString(s, pt) - if err != nil { - log.Println(err) - return - } - pt.Y += c.PointToFix32(*size * *spacing) - } - - // Save that RGBA image to disk. - f, err := os.Create("out.png") - if err != nil { - log.Println(err) - os.Exit(1) - } - defer f.Close() - b := bufio.NewWriter(f) - err = png.Encode(b, rgba) - if err != nil { - log.Println(err) - os.Exit(1) - } - err = b.Flush() - if err != nil { - log.Println(err) - os.Exit(1) - } - fmt.Println("Wrote out.png OK.") -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/gamma/main.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/example/gamma/main.go deleted file mode 100644 index 4bf7e3309b..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/gamma/main.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package main - -import ( - "bufio" - "fmt" - "image" - "image/draw" - "image/png" - "log" - "os" - - "code.google.com/p/freetype-go/freetype/raster" -) - -func p(x, y int) raster.Point { - return raster.Point{ - X: raster.Fix32(x * 256), - Y: raster.Fix32(y * 256), - } -} - -func main() { - // Draw a rounded corner that is one pixel wide. - r := raster.NewRasterizer(50, 50) - r.Start(p(5, 5)) - r.Add1(p(5, 25)) - r.Add2(p(5, 45), p(25, 45)) - r.Add1(p(45, 45)) - r.Add1(p(45, 44)) - r.Add1(p(26, 44)) - r.Add2(p(6, 44), p(6, 24)) - r.Add1(p(6, 5)) - r.Add1(p(5, 5)) - - // Rasterize that curve multiple times at different gammas. - const ( - w = 600 - h = 200 - ) - rgba := image.NewRGBA(image.Rect(0, 0, w, h)) - draw.Draw(rgba, image.Rect(0, 0, w, h/2), image.Black, image.ZP, draw.Src) - draw.Draw(rgba, image.Rect(0, h/2, w, h), image.White, image.ZP, draw.Src) - mask := image.NewAlpha(image.Rect(0, 0, 50, 50)) - painter := raster.NewAlphaSrcPainter(mask) - gammas := []float64{1.0 / 10.0, 1.0 / 3.0, 1.0 / 2.0, 2.0 / 3.0, 4.0 / 5.0, 1.0, 5.0 / 4.0, 3.0 / 2.0, 2.0, 3.0, 10.0} - for i, g := range gammas { - draw.Draw(mask, mask.Bounds(), image.Transparent, image.ZP, draw.Src) - r.Rasterize(raster.NewGammaCorrectionPainter(painter, g)) - x, y := 50*i+25, 25 - draw.DrawMask(rgba, image.Rect(x, y, x+50, y+50), image.White, image.ZP, mask, image.ZP, draw.Over) - y += 100 - draw.DrawMask(rgba, image.Rect(x, y, x+50, y+50), image.Black, image.ZP, mask, image.ZP, draw.Over) - } - - // Save that RGBA image to disk. - f, err := os.Create("out.png") - if err != nil { - log.Println(err) - os.Exit(1) - } - defer f.Close() - b := bufio.NewWriter(f) - err = png.Encode(b, rgba) - if err != nil { - log.Println(err) - os.Exit(1) - } - err = b.Flush() - if err != nil { - log.Println(err) - os.Exit(1) - } - fmt.Println("Wrote out.png OK.") -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/raster/main.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/example/raster/main.go deleted file mode 100644 index 5e6c9815d1..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/raster/main.go +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package main - -import ( - "bufio" - "fmt" - "image" - "image/color" - "image/draw" - "image/png" - "log" - "os" - - "code.google.com/p/freetype-go/freetype/raster" -) - -type node struct { - x, y, degree int -} - -// These contours "outside" and "inside" are from the `A' glyph from the Droid -// Serif Regular font. - -var outside = []node{ - node{414, 489, 1}, - node{336, 274, 2}, - node{327, 250, 0}, - node{322, 226, 2}, - node{317, 203, 0}, - node{317, 186, 2}, - node{317, 134, 0}, - node{350, 110, 2}, - node{384, 86, 0}, - node{453, 86, 1}, - node{500, 86, 1}, - node{500, 0, 1}, - node{0, 0, 1}, - node{0, 86, 1}, - node{39, 86, 2}, - node{69, 86, 0}, - node{90, 92, 2}, - node{111, 99, 0}, - node{128, 117, 2}, - node{145, 135, 0}, - node{160, 166, 2}, - node{176, 197, 0}, - node{195, 246, 1}, - node{649, 1462, 1}, - node{809, 1462, 1}, - node{1272, 195, 2}, - node{1284, 163, 0}, - node{1296, 142, 2}, - node{1309, 121, 0}, - node{1326, 108, 2}, - node{1343, 96, 0}, - node{1365, 91, 2}, - node{1387, 86, 0}, - node{1417, 86, 1}, - node{1444, 86, 1}, - node{1444, 0, 1}, - node{881, 0, 1}, - node{881, 86, 1}, - node{928, 86, 2}, - node{1051, 86, 0}, - node{1051, 184, 2}, - node{1051, 201, 0}, - node{1046, 219, 2}, - node{1042, 237, 0}, - node{1034, 260, 1}, - node{952, 489, 1}, - node{414, 489, -1}, -} - -var inside = []node{ - node{686, 1274, 1}, - node{453, 592, 1}, - node{915, 592, 1}, - node{686, 1274, -1}, -} - -func p(n node) raster.Point { - x, y := 20+n.x/4, 380-n.y/4 - return raster.Point{ - X: raster.Fix32(x * 256), - Y: raster.Fix32(y * 256), - } -} - -func contour(r *raster.Rasterizer, ns []node) { - if len(ns) == 0 { - return - } - i := 0 - r.Start(p(ns[i])) - for { - switch ns[i].degree { - case -1: - // -1 signifies end-of-contour. - return - case 1: - i += 1 - r.Add1(p(ns[i])) - case 2: - i += 2 - r.Add2(p(ns[i-1]), p(ns[i])) - default: - panic("bad degree") - } - } -} - -func showNodes(m *image.RGBA, ns []node) { - for _, n := range ns { - p := p(n) - x, y := int(p.X)/256, int(p.Y)/256 - if !(image.Point{x, y}).In(m.Bounds()) { - continue - } - var c color.Color - switch n.degree { - case 0: - c = color.RGBA{0, 255, 255, 255} - case 1: - c = color.RGBA{255, 0, 0, 255} - case 2: - c = color.RGBA{255, 0, 0, 255} - } - if c != nil { - m.Set(x, y, c) - } - } -} - -func main() { - // Rasterize the contours to a mask image. - const ( - w = 400 - h = 400 - ) - r := raster.NewRasterizer(w, h) - contour(r, outside) - contour(r, inside) - mask := image.NewAlpha(image.Rect(0, 0, w, h)) - p := raster.NewAlphaSrcPainter(mask) - r.Rasterize(p) - - // Draw the mask image (in gray) onto an RGBA image. - rgba := image.NewRGBA(image.Rect(0, 0, w, h)) - gray := image.NewUniform(color.Alpha{0x1f}) - draw.Draw(rgba, rgba.Bounds(), image.Black, image.ZP, draw.Src) - draw.DrawMask(rgba, rgba.Bounds(), gray, image.ZP, mask, image.ZP, draw.Over) - showNodes(rgba, outside) - showNodes(rgba, inside) - - // Save that RGBA image to disk. - f, err := os.Create("out.png") - if err != nil { - log.Println(err) - os.Exit(1) - } - defer f.Close() - b := bufio.NewWriter(f) - err = png.Encode(b, rgba) - if err != nil { - log.Println(err) - os.Exit(1) - } - err = b.Flush() - if err != nil { - log.Println(err) - os.Exit(1) - } - fmt.Println("Wrote out.png OK.") -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/round/main.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/example/round/main.go deleted file mode 100644 index e2435f9a27..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/round/main.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -// This program visualizes the quadratic approximation to the circle, used to -// implement round joins when stroking paths. The approximation is used in the -// stroking code for arcs between 0 and 45 degrees, but is visualized here -// between 0 and 90 degrees. The discrepancy between the approximation and the -// true circle is clearly visible at angles above 65 degrees. -package main - -import ( - "bufio" - "fmt" - "image" - "image/color" - "image/draw" - "image/png" - "log" - "math" - "os" - - "code.google.com/p/freetype-go/freetype/raster" -) - -func main() { - const ( - n = 17 - r = 256 * 80 - ) - s := raster.Fix32(r * math.Sqrt(2) / 2) - t := raster.Fix32(r * math.Tan(math.Pi/8)) - - m := image.NewRGBA(image.Rect(0, 0, 800, 600)) - draw.Draw(m, m.Bounds(), image.NewUniform(color.RGBA{63, 63, 63, 255}), image.ZP, draw.Src) - mp := raster.NewRGBAPainter(m) - mp.SetColor(image.Black) - z := raster.NewRasterizer(800, 600) - - for i := 0; i < n; i++ { - cx := raster.Fix32(25600 + 51200*(i%4)) - cy := raster.Fix32(2560 + 32000*(i/4)) - c := raster.Point{X: cx, Y: cy} - theta := math.Pi * (0.5 + 0.5*float64(i)/(n-1)) - dx := raster.Fix32(r * math.Cos(theta)) - dy := raster.Fix32(r * math.Sin(theta)) - d := raster.Point{X: dx, Y: dy} - // Draw a quarter-circle approximated by two quadratic segments, - // with each segment spanning 45 degrees. - z.Start(c) - z.Add1(c.Add(raster.Point{X: r, Y: 0})) - z.Add2(c.Add(raster.Point{X: r, Y: t}), c.Add(raster.Point{X: s, Y: s})) - z.Add2(c.Add(raster.Point{X: t, Y: r}), c.Add(raster.Point{X: 0, Y: r})) - // Add another quadratic segment whose angle ranges between 0 and 90 degrees. - // For an explanation of the magic constants 22, 150, 181 and 256, read the - // comments in the freetype/raster package. - dot := 256 * d.Dot(raster.Point{X: 0, Y: r}) / (r * r) - multiple := raster.Fix32(150 - 22*(dot-181)/(256-181)) - z.Add2(c.Add(raster.Point{X: dx, Y: r + dy}.Mul(multiple)), c.Add(d)) - // Close the curve. - z.Add1(c) - } - z.Rasterize(mp) - - for i := 0; i < n; i++ { - cx := raster.Fix32(25600 + 51200*(i%4)) - cy := raster.Fix32(2560 + 32000*(i/4)) - for j := 0; j < n; j++ { - theta := math.Pi * float64(j) / (n - 1) - dx := raster.Fix32(r * math.Cos(theta)) - dy := raster.Fix32(r * math.Sin(theta)) - m.Set(int((cx+dx)/256), int((cy+dy)/256), color.RGBA{255, 255, 0, 255}) - } - } - - // Save that RGBA image to disk. - f, err := os.Create("out.png") - if err != nil { - log.Println(err) - os.Exit(1) - } - defer f.Close() - b := bufio.NewWriter(f) - err = png.Encode(b, m) - if err != nil { - log.Println(err) - os.Exit(1) - } - err = b.Flush() - if err != nil { - log.Println(err) - os.Exit(1) - } - fmt.Println("Wrote out.png OK.") -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/truetype/main.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/example/truetype/main.go deleted file mode 100644 index 747694b618..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/example/truetype/main.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package main - -import ( - "flag" - "fmt" - "io/ioutil" - "log" - - "code.google.com/p/freetype-go/freetype/truetype" -) - -var fontfile = flag.String("fontfile", "../../testdata/luxisr.ttf", "filename of the ttf font") - -func printBounds(b truetype.Bounds) { - fmt.Printf("XMin:%d YMin:%d XMax:%d YMax:%d\n", b.XMin, b.YMin, b.XMax, b.YMax) -} - -func printGlyph(g *truetype.GlyphBuf) { - printBounds(g.B) - fmt.Print("Points:\n---\n") - e := 0 - for i, p := range g.Point { - fmt.Printf("%4d, %4d", p.X, p.Y) - if p.Flags&0x01 != 0 { - fmt.Print(" on\n") - } else { - fmt.Print(" off\n") - } - if i+1 == int(g.End[e]) { - fmt.Print("---\n") - e++ - } - } -} - -func main() { - flag.Parse() - fmt.Printf("Loading fontfile %q\n", *fontfile) - b, err := ioutil.ReadFile(*fontfile) - if err != nil { - log.Println(err) - return - } - font, err := truetype.Parse(b) - if err != nil { - log.Println(err) - return - } - fupe := font.FUnitsPerEm() - printBounds(font.Bounds(fupe)) - fmt.Printf("FUnitsPerEm:%d\n\n", fupe) - - c0, c1 := 'A', 'V' - - i0 := font.Index(c0) - hm := font.HMetric(fupe, i0) - g := truetype.NewGlyphBuf() - err = g.Load(font, fupe, i0, truetype.NoHinting) - if err != nil { - log.Println(err) - return - } - fmt.Printf("'%c' glyph\n", c0) - fmt.Printf("AdvanceWidth:%d LeftSideBearing:%d\n", hm.AdvanceWidth, hm.LeftSideBearing) - printGlyph(g) - i1 := font.Index(c1) - fmt.Printf("\n'%c', '%c' Kerning:%d\n", c0, c1, font.Kerning(fupe, i0, i1)) -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/freetype.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/freetype.go deleted file mode 100644 index f53efd4ff0..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/freetype.go +++ /dev/null @@ -1,349 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -// The freetype package provides a convenient API to draw text onto an image. -// Use the freetype/raster and freetype/truetype packages for lower level -// control over rasterization and TrueType parsing. -package freetype - -import ( - "errors" - "image" - "image/draw" - - "code.google.com/p/freetype-go/freetype/raster" - "code.google.com/p/freetype-go/freetype/truetype" -) - -// These constants determine the size of the glyph cache. The cache is keyed -// primarily by the glyph index modulo nGlyphs, and secondarily by sub-pixel -// position for the mask image. Sub-pixel positions are quantized to -// nXFractions possible values in both the x and y directions. -const ( - nGlyphs = 256 - nXFractions = 4 - nYFractions = 1 -) - -// An entry in the glyph cache is keyed explicitly by the glyph index and -// implicitly by the quantized x and y fractional offset. It maps to a mask -// image and an offset. -type cacheEntry struct { - valid bool - glyph truetype.Index - advanceWidth raster.Fix32 - mask *image.Alpha - offset image.Point -} - -// ParseFont just calls the Parse function from the freetype/truetype package. -// It is provided here so that code that imports this package doesn't need -// to also include the freetype/truetype package. -func ParseFont(b []byte) (*truetype.Font, error) { - return truetype.Parse(b) -} - -// Pt converts from a co-ordinate pair measured in pixels to a raster.Point -// co-ordinate pair measured in raster.Fix32 units. -func Pt(x, y int) raster.Point { - return raster.Point{ - X: raster.Fix32(x << 8), - Y: raster.Fix32(y << 8), - } -} - -// Hinting is the policy for snapping a glyph's contours to pixel boundaries. -type Hinting int32 - -const ( - // NoHinting means to not perform any hinting. - NoHinting = Hinting(truetype.NoHinting) - // FullHinting means to use the font's hinting instructions. - FullHinting = Hinting(truetype.FullHinting) -) - -// A Context holds the state for drawing text in a given font and size. -type Context struct { - r *raster.Rasterizer - font *truetype.Font - glyphBuf *truetype.GlyphBuf - // clip is the clip rectangle for drawing. - clip image.Rectangle - // dst and src are the destination and source images for drawing. - dst draw.Image - src image.Image - // fontSize and dpi are used to calculate scale. scale is the number of - // 26.6 fixed point units in 1 em. hinting is the hinting policy. - fontSize, dpi float64 - scale int32 - hinting Hinting - // cache is the glyph cache. - cache [nGlyphs * nXFractions * nYFractions]cacheEntry -} - -// PointToFix32 converts the given number of points (as in ``a 12 point font'') -// into fixed point units. -func (c *Context) PointToFix32(x float64) raster.Fix32 { - return raster.Fix32(x * float64(c.dpi) * (256.0 / 72.0)) -} - -// drawContour draws the given closed contour with the given offset. -func (c *Context) drawContour(ps []truetype.Point, dx, dy raster.Fix32) { - if len(ps) == 0 { - return - } - - // The low bit of each point's Flags value is whether the point is on the - // curve. Truetype fonts only have quadratic Bézier curves, not cubics. - // Thus, two consecutive off-curve points imply an on-curve point in the - // middle of those two. - // - // See http://chanae.walon.org/pub/ttf/ttf_glyphs.htm for more details. - - // ps[0] is a truetype.Point measured in FUnits and positive Y going - // upwards. start is the same thing measured in fixed point units and - // positive Y going downwards, and offset by (dx, dy). - start := raster.Point{ - X: dx + raster.Fix32(ps[0].X<<2), - Y: dy - raster.Fix32(ps[0].Y<<2), - } - others := []truetype.Point(nil) - if ps[0].Flags&0x01 != 0 { - others = ps[1:] - } else { - last := raster.Point{ - X: dx + raster.Fix32(ps[len(ps)-1].X<<2), - Y: dy - raster.Fix32(ps[len(ps)-1].Y<<2), - } - if ps[len(ps)-1].Flags&0x01 != 0 { - start = last - others = ps[:len(ps)-1] - } else { - start = raster.Point{ - X: (start.X + last.X) / 2, - Y: (start.Y + last.Y) / 2, - } - others = ps - } - } - c.r.Start(start) - q0, on0 := start, true - for _, p := range others { - q := raster.Point{ - X: dx + raster.Fix32(p.X<<2), - Y: dy - raster.Fix32(p.Y<<2), - } - on := p.Flags&0x01 != 0 - if on { - if on0 { - c.r.Add1(q) - } else { - c.r.Add2(q0, q) - } - } else { - if on0 { - // No-op. - } else { - mid := raster.Point{ - X: (q0.X + q.X) / 2, - Y: (q0.Y + q.Y) / 2, - } - c.r.Add2(q0, mid) - } - } - q0, on0 = q, on - } - // Close the curve. - if on0 { - c.r.Add1(start) - } else { - c.r.Add2(q0, start) - } -} - -// rasterize returns the advance width, glyph mask and integer-pixel offset -// to render the given glyph at the given sub-pixel offsets. -// The 24.8 fixed point arguments fx and fy must be in the range [0, 1). -func (c *Context) rasterize(glyph truetype.Index, fx, fy raster.Fix32) ( - raster.Fix32, *image.Alpha, image.Point, error) { - - if err := c.glyphBuf.Load(c.font, c.scale, glyph, truetype.Hinting(c.hinting)); err != nil { - return 0, nil, image.Point{}, err - } - // Calculate the integer-pixel bounds for the glyph. - xmin := int(fx+raster.Fix32(c.glyphBuf.B.XMin<<2)) >> 8 - ymin := int(fy-raster.Fix32(c.glyphBuf.B.YMax<<2)) >> 8 - xmax := int(fx+raster.Fix32(c.glyphBuf.B.XMax<<2)+0xff) >> 8 - ymax := int(fy-raster.Fix32(c.glyphBuf.B.YMin<<2)+0xff) >> 8 - if xmin > xmax || ymin > ymax { - return 0, nil, image.Point{}, errors.New("freetype: negative sized glyph") - } - // A TrueType's glyph's nodes can have negative co-ordinates, but the - // rasterizer clips anything left of x=0 or above y=0. xmin and ymin - // are the pixel offsets, based on the font's FUnit metrics, that let - // a negative co-ordinate in TrueType space be non-negative in - // rasterizer space. xmin and ymin are typically <= 0. - fx += raster.Fix32(-xmin << 8) - fy += raster.Fix32(-ymin << 8) - // Rasterize the glyph's vectors. - c.r.Clear() - e0 := 0 - for _, e1 := range c.glyphBuf.End { - c.drawContour(c.glyphBuf.Point[e0:e1], fx, fy) - e0 = e1 - } - a := image.NewAlpha(image.Rect(0, 0, xmax-xmin, ymax-ymin)) - c.r.Rasterize(raster.NewAlphaSrcPainter(a)) - return raster.Fix32(c.glyphBuf.AdvanceWidth << 2), a, image.Point{xmin, ymin}, nil -} - -// glyph returns the advance width, glyph mask and integer-pixel offset to -// render the given glyph at the given sub-pixel point. It is a cache for the -// rasterize method. Unlike rasterize, p's co-ordinates do not have to be in -// the range [0, 1). -func (c *Context) glyph(glyph truetype.Index, p raster.Point) ( - raster.Fix32, *image.Alpha, image.Point, error) { - - // Split p.X and p.Y into their integer and fractional parts. - ix, fx := int(p.X>>8), p.X&0xff - iy, fy := int(p.Y>>8), p.Y&0xff - // Calculate the index t into the cache array. - tg := int(glyph) % nGlyphs - tx := int(fx) / (256 / nXFractions) - ty := int(fy) / (256 / nYFractions) - t := ((tg*nXFractions)+tx)*nYFractions + ty - // Check for a cache hit. - if e := c.cache[t]; e.valid && e.glyph == glyph { - return e.advanceWidth, e.mask, e.offset.Add(image.Point{ix, iy}), nil - } - // Rasterize the glyph and put the result into the cache. - advanceWidth, mask, offset, err := c.rasterize(glyph, fx, fy) - if err != nil { - return 0, nil, image.Point{}, err - } - c.cache[t] = cacheEntry{true, glyph, advanceWidth, mask, offset} - return advanceWidth, mask, offset.Add(image.Point{ix, iy}), nil -} - -// DrawString draws s at p and returns p advanced by the text extent. The text -// is placed so that the left edge of the em square of the first character of s -// and the baseline intersect at p. The majority of the affected pixels will be -// above and to the right of the point, but some may be below or to the left. -// For example, drawing a string that starts with a 'J' in an italic font may -// affect pixels below and left of the point. -// p is a raster.Point and can therefore represent sub-pixel positions. -func (c *Context) DrawString(s string, p raster.Point) (raster.Point, error) { - if c.font == nil { - return raster.Point{}, errors.New("freetype: DrawText called with a nil font") - } - prev, hasPrev := truetype.Index(0), false - for _, rune := range s { - index := c.font.Index(rune) - if hasPrev { - kern := raster.Fix32(c.font.Kerning(c.scale, prev, index)) << 2 - if c.hinting != NoHinting { - kern = (kern + 128) &^ 255 - } - p.X += kern - } - advanceWidth, mask, offset, err := c.glyph(index, p) - if err != nil { - return raster.Point{}, err - } - p.X += advanceWidth - glyphRect := mask.Bounds().Add(offset) - dr := c.clip.Intersect(glyphRect) - if !dr.Empty() { - mp := image.Point{0, dr.Min.Y - glyphRect.Min.Y} - draw.DrawMask(c.dst, dr, c.src, image.ZP, mask, mp, draw.Over) - } - prev, hasPrev = index, true - } - return p, nil -} - -// recalc recalculates scale and bounds values from the font size, screen -// resolution and font metrics, and invalidates the glyph cache. -func (c *Context) recalc() { - c.scale = int32(c.fontSize * c.dpi * (64.0 / 72.0)) - if c.font == nil { - c.r.SetBounds(0, 0) - } else { - // Set the rasterizer's bounds to be big enough to handle the largest glyph. - b := c.font.Bounds(c.scale) - xmin := +int(b.XMin) >> 6 - ymin := -int(b.YMax) >> 6 - xmax := +int(b.XMax+63) >> 6 - ymax := -int(b.YMin-63) >> 6 - c.r.SetBounds(xmax-xmin, ymax-ymin) - } - for i := range c.cache { - c.cache[i] = cacheEntry{} - } -} - -// SetDPI sets the screen resolution in dots per inch. -func (c *Context) SetDPI(dpi float64) { - if c.dpi == dpi { - return - } - c.dpi = dpi - c.recalc() -} - -// SetFont sets the font used to draw text. -func (c *Context) SetFont(font *truetype.Font) { - if c.font == font { - return - } - c.font = font - c.recalc() -} - -// SetFontSize sets the font size in points (as in ``a 12 point font''). -func (c *Context) SetFontSize(fontSize float64) { - if c.fontSize == fontSize { - return - } - c.fontSize = fontSize - c.recalc() -} - -// SetHinting sets the hinting policy. -func (c *Context) SetHinting(hinting Hinting) { - c.hinting = hinting - for i := range c.cache { - c.cache[i] = cacheEntry{} - } -} - -// SetDst sets the destination image for draw operations. -func (c *Context) SetDst(dst draw.Image) { - c.dst = dst -} - -// SetSrc sets the source image for draw operations. This is typically an -// image.Uniform. -func (c *Context) SetSrc(src image.Image) { - c.src = src -} - -// SetClip sets the clip rectangle for drawing. -func (c *Context) SetClip(clip image.Rectangle) { - c.clip = clip -} - -// TODO(nigeltao): implement Context.SetGamma. - -// NewContext creates a new Context. -func NewContext() *Context { - return &Context{ - r: raster.NewRasterizer(0, 0), - glyphBuf: truetype.NewGlyphBuf(), - fontSize: 12, - dpi: 72, - scale: 12 << 6, - } -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/freetype_test.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/freetype_test.go deleted file mode 100644 index 39f56b36d9..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/freetype_test.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2012 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package freetype - -import ( - "image" - "image/draw" - "io/ioutil" - "runtime" - "strings" - "testing" -) - -func BenchmarkDrawString(b *testing.B) { - data, err := ioutil.ReadFile("../licenses/gpl.txt") - if err != nil { - b.Fatal(err) - } - lines := strings.Split(string(data), "\n") - - data, err = ioutil.ReadFile("../testdata/luxisr.ttf") - if err != nil { - b.Fatal(err) - } - font, err := ParseFont(data) - if err != nil { - b.Fatal(err) - } - - dst := image.NewRGBA(image.Rect(0, 0, 800, 600)) - draw.Draw(dst, dst.Bounds(), image.White, image.ZP, draw.Src) - - c := NewContext() - c.SetDst(dst) - c.SetClip(dst.Bounds()) - c.SetSrc(image.Black) - c.SetFont(font) - - var ms runtime.MemStats - runtime.ReadMemStats(&ms) - mallocs := ms.Mallocs - - b.ResetTimer() - for i := 0; i < b.N; i++ { - for j, line := range lines { - _, err := c.DrawString(line, Pt(0, (j*16)%600)) - if err != nil { - b.Fatal(err) - } - } - } - b.StopTimer() - runtime.ReadMemStats(&ms) - mallocs = ms.Mallocs - mallocs - b.Logf("%d iterations, %d mallocs per iteration\n", b.N, int(mallocs)/b.N) -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/geom.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/geom.go deleted file mode 100644 index 63c86e6ab0..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/geom.go +++ /dev/null @@ -1,280 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package raster - -import ( - "fmt" - "math" -) - -// A Fix32 is a 24.8 fixed point number. -type Fix32 int32 - -// A Fix64 is a 48.16 fixed point number. -type Fix64 int64 - -// String returns a human-readable representation of a 24.8 fixed point number. -// For example, the number one-and-a-quarter becomes "1:064". -func (x Fix32) String() string { - if x < 0 { - x = -x - return fmt.Sprintf("-%d:%03d", int32(x/256), int32(x%256)) - } - return fmt.Sprintf("%d:%03d", int32(x/256), int32(x%256)) -} - -// String returns a human-readable representation of a 48.16 fixed point number. -// For example, the number one-and-a-quarter becomes "1:16384". -func (x Fix64) String() string { - if x < 0 { - x = -x - return fmt.Sprintf("-%d:%05d", int64(x/65536), int64(x%65536)) - } - return fmt.Sprintf("%d:%05d", int64(x/65536), int64(x%65536)) -} - -// maxAbs returns the maximum of abs(a) and abs(b). -func maxAbs(a, b Fix32) Fix32 { - if a < 0 { - a = -a - } - if b < 0 { - b = -b - } - if a < b { - return b - } - return a -} - -// A Point represents a two-dimensional point or vector, in 24.8 fixed point -// format. -type Point struct { - X, Y Fix32 -} - -// String returns a human-readable representation of a Point. -func (p Point) String() string { - return "(" + p.X.String() + ", " + p.Y.String() + ")" -} - -// Add returns the vector p + q. -func (p Point) Add(q Point) Point { - return Point{p.X + q.X, p.Y + q.Y} -} - -// Sub returns the vector p - q. -func (p Point) Sub(q Point) Point { - return Point{p.X - q.X, p.Y - q.Y} -} - -// Mul returns the vector k * p. -func (p Point) Mul(k Fix32) Point { - return Point{p.X * k / 256, p.Y * k / 256} -} - -// Neg returns the vector -p, or equivalently p rotated by 180 degrees. -func (p Point) Neg() Point { - return Point{-p.X, -p.Y} -} - -// Dot returns the dot product p·q. -func (p Point) Dot(q Point) Fix64 { - px, py := int64(p.X), int64(p.Y) - qx, qy := int64(q.X), int64(q.Y) - return Fix64(px*qx + py*qy) -} - -// Len returns the length of the vector p. -func (p Point) Len() Fix32 { - // TODO(nigeltao): use fixed point math. - x := float64(p.X) - y := float64(p.Y) - return Fix32(math.Sqrt(x*x + y*y)) -} - -// Norm returns the vector p normalized to the given length, or the zero Point -// if p is degenerate. -func (p Point) Norm(length Fix32) Point { - d := p.Len() - if d == 0 { - return Point{} - } - s, t := int64(length), int64(d) - x := int64(p.X) * s / t - y := int64(p.Y) * s / t - return Point{Fix32(x), Fix32(y)} -} - -// Rot45CW returns the vector p rotated clockwise by 45 degrees. -// Note that the Y-axis grows downwards, so {1, 0}.Rot45CW is {1/√2, 1/√2}. -func (p Point) Rot45CW() Point { - // 181/256 is approximately 1/√2, or sin(π/4). - px, py := int64(p.X), int64(p.Y) - qx := (+px - py) * 181 / 256 - qy := (+px + py) * 181 / 256 - return Point{Fix32(qx), Fix32(qy)} -} - -// Rot90CW returns the vector p rotated clockwise by 90 degrees. -// Note that the Y-axis grows downwards, so {1, 0}.Rot90CW is {0, 1}. -func (p Point) Rot90CW() Point { - return Point{-p.Y, p.X} -} - -// Rot135CW returns the vector p rotated clockwise by 135 degrees. -// Note that the Y-axis grows downwards, so {1, 0}.Rot135CW is {-1/√2, 1/√2}. -func (p Point) Rot135CW() Point { - // 181/256 is approximately 1/√2, or sin(π/4). - px, py := int64(p.X), int64(p.Y) - qx := (-px - py) * 181 / 256 - qy := (+px - py) * 181 / 256 - return Point{Fix32(qx), Fix32(qy)} -} - -// Rot45CCW returns the vector p rotated counter-clockwise by 45 degrees. -// Note that the Y-axis grows downwards, so {1, 0}.Rot45CCW is {1/√2, -1/√2}. -func (p Point) Rot45CCW() Point { - // 181/256 is approximately 1/√2, or sin(π/4). - px, py := int64(p.X), int64(p.Y) - qx := (+px + py) * 181 / 256 - qy := (-px + py) * 181 / 256 - return Point{Fix32(qx), Fix32(qy)} -} - -// Rot90CCW returns the vector p rotated counter-clockwise by 90 degrees. -// Note that the Y-axis grows downwards, so {1, 0}.Rot90CCW is {0, -1}. -func (p Point) Rot90CCW() Point { - return Point{p.Y, -p.X} -} - -// Rot135CCW returns the vector p rotated counter-clockwise by 135 degrees. -// Note that the Y-axis grows downwards, so {1, 0}.Rot135CCW is {-1/√2, -1/√2}. -func (p Point) Rot135CCW() Point { - // 181/256 is approximately 1/√2, or sin(π/4). - px, py := int64(p.X), int64(p.Y) - qx := (-px + py) * 181 / 256 - qy := (-px - py) * 181 / 256 - return Point{Fix32(qx), Fix32(qy)} -} - -// An Adder accumulates points on a curve. -type Adder interface { - // Start starts a new curve at the given point. - Start(a Point) - // Add1 adds a linear segment to the current curve. - Add1(b Point) - // Add2 adds a quadratic segment to the current curve. - Add2(b, c Point) - // Add3 adds a cubic segment to the current curve. - Add3(b, c, d Point) -} - -// A Path is a sequence of curves, and a curve is a start point followed by a -// sequence of linear, quadratic or cubic segments. -type Path []Fix32 - -// String returns a human-readable representation of a Path. -func (p Path) String() string { - s := "" - for i := 0; i < len(p); { - if i != 0 { - s += " " - } - switch p[i] { - case 0: - s += "S0" + fmt.Sprint([]Fix32(p[i+1:i+3])) - i += 4 - case 1: - s += "A1" + fmt.Sprint([]Fix32(p[i+1:i+3])) - i += 4 - case 2: - s += "A2" + fmt.Sprint([]Fix32(p[i+1:i+5])) - i += 6 - case 3: - s += "A3" + fmt.Sprint([]Fix32(p[i+1:i+7])) - i += 8 - default: - panic("freetype/raster: bad path") - } - } - return s -} - -// Clear cancels any previous calls to p.Start or p.AddXxx. -func (p *Path) Clear() { - *p = (*p)[:0] -} - -// Start starts a new curve at the given point. -func (p *Path) Start(a Point) { - *p = append(*p, 0, a.X, a.Y, 0) -} - -// Add1 adds a linear segment to the current curve. -func (p *Path) Add1(b Point) { - *p = append(*p, 1, b.X, b.Y, 1) -} - -// Add2 adds a quadratic segment to the current curve. -func (p *Path) Add2(b, c Point) { - *p = append(*p, 2, b.X, b.Y, c.X, c.Y, 2) -} - -// Add3 adds a cubic segment to the current curve. -func (p *Path) Add3(b, c, d Point) { - *p = append(*p, 3, b.X, b.Y, c.X, c.Y, d.X, d.Y, 3) -} - -// AddPath adds the Path q to p. -func (p *Path) AddPath(q Path) { - *p = append(*p, q...) -} - -// AddStroke adds a stroked Path. -func (p *Path) AddStroke(q Path, width Fix32, cr Capper, jr Joiner) { - Stroke(p, q, width, cr, jr) -} - -// firstPoint returns the first point in a non-empty Path. -func (p Path) firstPoint() Point { - return Point{p[1], p[2]} -} - -// lastPoint returns the last point in a non-empty Path. -func (p Path) lastPoint() Point { - return Point{p[len(p)-3], p[len(p)-2]} -} - -// addPathReversed adds q reversed to p. -// For example, if q consists of a linear segment from A to B followed by a -// quadratic segment from B to C to D, then the values of q looks like: -// index: 01234567890123 -// value: 0AA01BB12CCDD2 -// So, when adding q backwards to p, we want to Add2(C, B) followed by Add1(A). -func addPathReversed(p Adder, q Path) { - if len(q) == 0 { - return - } - i := len(q) - 1 - for { - switch q[i] { - case 0: - return - case 1: - i -= 4 - p.Add1(Point{q[i-2], q[i-1]}) - case 2: - i -= 6 - p.Add2(Point{q[i+2], q[i+3]}, Point{q[i-2], q[i-1]}) - case 3: - i -= 8 - p.Add3(Point{q[i+4], q[i+5]}, Point{q[i+2], q[i+3]}, Point{q[i-2], q[i-1]}) - default: - panic("freetype/raster: bad path") - } - } -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/paint.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/paint.go deleted file mode 100644 index 13cccc1926..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/paint.go +++ /dev/null @@ -1,292 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package raster - -import ( - "image" - "image/color" - "image/draw" - "math" -) - -// A Span is a horizontal segment of pixels with constant alpha. X0 is an -// inclusive bound and X1 is exclusive, the same as for slices. A fully -// opaque Span has A == 1<<32 - 1. -type Span struct { - Y, X0, X1 int - A uint32 -} - -// A Painter knows how to paint a batch of Spans. Rasterization may involve -// Painting multiple batches, and done will be true for the final batch. -// The Spans' Y values are monotonically increasing during a rasterization. -// Paint may use all of ss as scratch space during the call. -type Painter interface { - Paint(ss []Span, done bool) -} - -// The PainterFunc type adapts an ordinary function to the Painter interface. -type PainterFunc func(ss []Span, done bool) - -// Paint just delegates the call to f. -func (f PainterFunc) Paint(ss []Span, done bool) { f(ss, done) } - -// An AlphaOverPainter is a Painter that paints Spans onto an image.Alpha -// using the Over Porter-Duff composition operator. -type AlphaOverPainter struct { - Image *image.Alpha -} - -// Paint satisfies the Painter interface by painting ss onto an image.Alpha. -func (r AlphaOverPainter) Paint(ss []Span, done bool) { - b := r.Image.Bounds() - for _, s := range ss { - if s.Y < b.Min.Y { - continue - } - if s.Y >= b.Max.Y { - return - } - if s.X0 < b.Min.X { - s.X0 = b.Min.X - } - if s.X1 > b.Max.X { - s.X1 = b.Max.X - } - if s.X0 >= s.X1 { - continue - } - base := (s.Y-r.Image.Rect.Min.Y)*r.Image.Stride - r.Image.Rect.Min.X - p := r.Image.Pix[base+s.X0 : base+s.X1] - a := int(s.A >> 24) - for i, c := range p { - v := int(c) - p[i] = uint8((v*255 + (255-v)*a) / 255) - } - } -} - -// NewAlphaOverPainter creates a new AlphaOverPainter for the given image. -func NewAlphaOverPainter(m *image.Alpha) AlphaOverPainter { - return AlphaOverPainter{m} -} - -// An AlphaSrcPainter is a Painter that paints Spans onto an image.Alpha -// using the Src Porter-Duff composition operator. -type AlphaSrcPainter struct { - Image *image.Alpha -} - -// Paint satisfies the Painter interface by painting ss onto an image.Alpha. -func (r AlphaSrcPainter) Paint(ss []Span, done bool) { - b := r.Image.Bounds() - for _, s := range ss { - if s.Y < b.Min.Y { - continue - } - if s.Y >= b.Max.Y { - return - } - if s.X0 < b.Min.X { - s.X0 = b.Min.X - } - if s.X1 > b.Max.X { - s.X1 = b.Max.X - } - if s.X0 >= s.X1 { - continue - } - base := (s.Y-r.Image.Rect.Min.Y)*r.Image.Stride - r.Image.Rect.Min.X - p := r.Image.Pix[base+s.X0 : base+s.X1] - color := uint8(s.A >> 24) - for i := range p { - p[i] = color - } - } -} - -// NewAlphaSrcPainter creates a new AlphaSrcPainter for the given image. -func NewAlphaSrcPainter(m *image.Alpha) AlphaSrcPainter { - return AlphaSrcPainter{m} -} - -type RGBAPainter struct { - // The image to compose onto. - Image *image.RGBA - // The Porter-Duff composition operator. - Op draw.Op - // The 16-bit color to paint the spans. - cr, cg, cb, ca uint32 -} - -// Paint satisfies the Painter interface by painting ss onto an image.RGBA. -func (r *RGBAPainter) Paint(ss []Span, done bool) { - b := r.Image.Bounds() - for _, s := range ss { - if s.Y < b.Min.Y { - continue - } - if s.Y >= b.Max.Y { - return - } - if s.X0 < b.Min.X { - s.X0 = b.Min.X - } - if s.X1 > b.Max.X { - s.X1 = b.Max.X - } - if s.X0 >= s.X1 { - continue - } - // This code is similar to drawGlyphOver in $GOROOT/src/pkg/image/draw/draw.go. - ma := s.A >> 16 - const m = 1<<16 - 1 - i0 := (s.Y-r.Image.Rect.Min.Y)*r.Image.Stride + (s.X0-r.Image.Rect.Min.X)*4 - i1 := i0 + (s.X1-s.X0)*4 - if r.Op == draw.Over { - for i := i0; i < i1; i += 4 { - dr := uint32(r.Image.Pix[i+0]) - dg := uint32(r.Image.Pix[i+1]) - db := uint32(r.Image.Pix[i+2]) - da := uint32(r.Image.Pix[i+3]) - a := (m - (r.ca * ma / m)) * 0x101 - r.Image.Pix[i+0] = uint8((dr*a + r.cr*ma) / m >> 8) - r.Image.Pix[i+1] = uint8((dg*a + r.cg*ma) / m >> 8) - r.Image.Pix[i+2] = uint8((db*a + r.cb*ma) / m >> 8) - r.Image.Pix[i+3] = uint8((da*a + r.ca*ma) / m >> 8) - } - } else { - for i := i0; i < i1; i += 4 { - r.Image.Pix[i+0] = uint8(r.cr * ma / m >> 8) - r.Image.Pix[i+1] = uint8(r.cg * ma / m >> 8) - r.Image.Pix[i+2] = uint8(r.cb * ma / m >> 8) - r.Image.Pix[i+3] = uint8(r.ca * ma / m >> 8) - } - } - } -} - -// SetColor sets the color to paint the spans. -func (r *RGBAPainter) SetColor(c color.Color) { - r.cr, r.cg, r.cb, r.ca = c.RGBA() -} - -// NewRGBAPainter creates a new RGBAPainter for the given image. -func NewRGBAPainter(m *image.RGBA) *RGBAPainter { - return &RGBAPainter{Image: m} -} - -// A MonochromePainter wraps another Painter, quantizing each Span's alpha to -// be either fully opaque or fully transparent. -type MonochromePainter struct { - Painter Painter - y, x0, x1 int -} - -// Paint delegates to the wrapped Painter after quantizing each Span's alpha -// value and merging adjacent fully opaque Spans. -func (m *MonochromePainter) Paint(ss []Span, done bool) { - // We compact the ss slice, discarding any Spans whose alpha quantizes to zero. - j := 0 - for _, s := range ss { - if s.A >= 1<<31 { - if m.y == s.Y && m.x1 == s.X0 { - m.x1 = s.X1 - } else { - ss[j] = Span{m.y, m.x0, m.x1, 1<<32 - 1} - j++ - m.y, m.x0, m.x1 = s.Y, s.X0, s.X1 - } - } - } - if done { - // Flush the accumulated Span. - finalSpan := Span{m.y, m.x0, m.x1, 1<<32 - 1} - if j < len(ss) { - ss[j] = finalSpan - j++ - m.Painter.Paint(ss[:j], true) - } else if j == len(ss) { - m.Painter.Paint(ss, false) - if cap(ss) > 0 { - ss = ss[:1] - } else { - ss = make([]Span, 1) - } - ss[0] = finalSpan - m.Painter.Paint(ss, true) - } else { - panic("unreachable") - } - // Reset the accumulator, so that this Painter can be re-used. - m.y, m.x0, m.x1 = 0, 0, 0 - } else { - m.Painter.Paint(ss[:j], false) - } -} - -// NewMonochromePainter creates a new MonochromePainter that wraps the given -// Painter. -func NewMonochromePainter(p Painter) *MonochromePainter { - return &MonochromePainter{Painter: p} -} - -// A GammaCorrectionPainter wraps another Painter, performing gamma-correction -// on each Span's alpha value. -type GammaCorrectionPainter struct { - // The wrapped Painter. - Painter Painter - // Precomputed alpha values for linear interpolation, with fully opaque == 1<<16-1. - a [256]uint16 - // Whether gamma correction is a no-op. - gammaIsOne bool -} - -// Paint delegates to the wrapped Painter after performing gamma-correction -// on each Span. -func (g *GammaCorrectionPainter) Paint(ss []Span, done bool) { - if !g.gammaIsOne { - const ( - M = 0x1010101 // 255*M == 1<<32-1 - N = 0x8080 // N = M>>9, and N < 1<<16-1 - ) - for i, s := range ss { - if s.A == 0 || s.A == 1<<32-1 { - continue - } - p, q := s.A/M, (s.A%M)>>9 - // The resultant alpha is a linear interpolation of g.a[p] and g.a[p+1]. - a := uint32(g.a[p])*(N-q) + uint32(g.a[p+1])*q - a = (a + N/2) / N - // Convert the alpha from 16-bit (which is g.a's range) to 32-bit. - a |= a << 16 - ss[i].A = a - } - } - g.Painter.Paint(ss, done) -} - -// SetGamma sets the gamma value. -func (g *GammaCorrectionPainter) SetGamma(gamma float64) { - if gamma == 1.0 { - g.gammaIsOne = true - return - } - g.gammaIsOne = false - for i := 0; i < 256; i++ { - a := float64(i) / 0xff - a = math.Pow(a, gamma) - g.a[i] = uint16(0xffff * a) - } -} - -// NewGammaCorrectionPainter creates a new GammaCorrectionPainter that wraps -// the given Painter. -func NewGammaCorrectionPainter(p Painter, gamma float64) *GammaCorrectionPainter { - g := &GammaCorrectionPainter{Painter: p} - g.SetGamma(gamma) - return g -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/raster.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/raster.go deleted file mode 100644 index 45af7eaa20..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/raster.go +++ /dev/null @@ -1,579 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -// The raster package provides an anti-aliasing 2-D rasterizer. -// -// It is part of the larger Freetype-Go suite of font-related packages, -// but the raster package is not specific to font rasterization, and can -// be used standalone without any other Freetype-Go package. -// -// Rasterization is done by the same area/coverage accumulation algorithm -// as the Freetype "smooth" module, and the Anti-Grain Geometry library. -// A description of the area/coverage algorithm is at -// http://projects.tuxee.net/cl-vectors/section-the-cl-aa-algorithm -package raster - -import ( - "strconv" -) - -// A cell is part of a linked list (for a given yi co-ordinate) of accumulated -// area/coverage for the pixel at (xi, yi). -type cell struct { - xi int - area, cover int - next int -} - -type Rasterizer struct { - // If false, the default behavior is to use the even-odd winding fill - // rule during Rasterize. - UseNonZeroWinding bool - // An offset (in pixels) to the painted spans. - Dx, Dy int - - // The width of the Rasterizer. The height is implicit in len(cellIndex). - width int - // splitScaleN is the scaling factor used to determine how many times - // to decompose a quadratic or cubic segment into a linear approximation. - splitScale2, splitScale3 int - - // The current pen position. - a Point - // The current cell and its area/coverage being accumulated. - xi, yi int - area, cover int - - // Saved cells. - cell []cell - // Linked list of cells, one per row. - cellIndex []int - // Buffers. - cellBuf [256]cell - cellIndexBuf [64]int - spanBuf [64]Span -} - -// findCell returns the index in r.cell for the cell corresponding to -// (r.xi, r.yi). The cell is created if necessary. -func (r *Rasterizer) findCell() int { - if r.yi < 0 || r.yi >= len(r.cellIndex) { - return -1 - } - xi := r.xi - if xi < 0 { - xi = -1 - } else if xi > r.width { - xi = r.width - } - i, prev := r.cellIndex[r.yi], -1 - for i != -1 && r.cell[i].xi <= xi { - if r.cell[i].xi == xi { - return i - } - i, prev = r.cell[i].next, i - } - c := len(r.cell) - if c == cap(r.cell) { - buf := make([]cell, c, 4*c) - copy(buf, r.cell) - r.cell = buf[0 : c+1] - } else { - r.cell = r.cell[0 : c+1] - } - r.cell[c] = cell{xi, 0, 0, i} - if prev == -1 { - r.cellIndex[r.yi] = c - } else { - r.cell[prev].next = c - } - return c -} - -// saveCell saves any accumulated r.area/r.cover for (r.xi, r.yi). -func (r *Rasterizer) saveCell() { - if r.area != 0 || r.cover != 0 { - i := r.findCell() - if i != -1 { - r.cell[i].area += r.area - r.cell[i].cover += r.cover - } - r.area = 0 - r.cover = 0 - } -} - -// setCell sets the (xi, yi) cell that r is accumulating area/coverage for. -func (r *Rasterizer) setCell(xi, yi int) { - if r.xi != xi || r.yi != yi { - r.saveCell() - r.xi, r.yi = xi, yi - } -} - -// scan accumulates area/coverage for the yi'th scanline, going from -// x0 to x1 in the horizontal direction (in 24.8 fixed point co-ordinates) -// and from y0f to y1f fractional vertical units within that scanline. -func (r *Rasterizer) scan(yi int, x0, y0f, x1, y1f Fix32) { - // Break the 24.8 fixed point X co-ordinates into integral and fractional parts. - x0i := int(x0) / 256 - x0f := x0 - Fix32(256*x0i) - x1i := int(x1) / 256 - x1f := x1 - Fix32(256*x1i) - - // A perfectly horizontal scan. - if y0f == y1f { - r.setCell(x1i, yi) - return - } - dx, dy := x1-x0, y1f-y0f - // A single cell scan. - if x0i == x1i { - r.area += int((x0f + x1f) * dy) - r.cover += int(dy) - return - } - // There are at least two cells. Apart from the first and last cells, - // all intermediate cells go through the full width of the cell, - // or 256 units in 24.8 fixed point format. - var ( - p, q, edge0, edge1 Fix32 - xiDelta int - ) - if dx > 0 { - p, q = (256-x0f)*dy, dx - edge0, edge1, xiDelta = 0, 256, 1 - } else { - p, q = x0f*dy, -dx - edge0, edge1, xiDelta = 256, 0, -1 - } - yDelta, yRem := p/q, p%q - if yRem < 0 { - yDelta -= 1 - yRem += q - } - // Do the first cell. - xi, y := x0i, y0f - r.area += int((x0f + edge1) * yDelta) - r.cover += int(yDelta) - xi, y = xi+xiDelta, y+yDelta - r.setCell(xi, yi) - if xi != x1i { - // Do all the intermediate cells. - p = 256 * (y1f - y + yDelta) - fullDelta, fullRem := p/q, p%q - if fullRem < 0 { - fullDelta -= 1 - fullRem += q - } - yRem -= q - for xi != x1i { - yDelta = fullDelta - yRem += fullRem - if yRem >= 0 { - yDelta += 1 - yRem -= q - } - r.area += int(256 * yDelta) - r.cover += int(yDelta) - xi, y = xi+xiDelta, y+yDelta - r.setCell(xi, yi) - } - } - // Do the last cell. - yDelta = y1f - y - r.area += int((edge0 + x1f) * yDelta) - r.cover += int(yDelta) -} - -// Start starts a new curve at the given point. -func (r *Rasterizer) Start(a Point) { - r.setCell(int(a.X/256), int(a.Y/256)) - r.a = a -} - -// Add1 adds a linear segment to the current curve. -func (r *Rasterizer) Add1(b Point) { - x0, y0 := r.a.X, r.a.Y - x1, y1 := b.X, b.Y - dx, dy := x1-x0, y1-y0 - // Break the 24.8 fixed point Y co-ordinates into integral and fractional parts. - y0i := int(y0) / 256 - y0f := y0 - Fix32(256*y0i) - y1i := int(y1) / 256 - y1f := y1 - Fix32(256*y1i) - - if y0i == y1i { - // There is only one scanline. - r.scan(y0i, x0, y0f, x1, y1f) - - } else if dx == 0 { - // This is a vertical line segment. We avoid calling r.scan and instead - // manipulate r.area and r.cover directly. - var ( - edge0, edge1 Fix32 - yiDelta int - ) - if dy > 0 { - edge0, edge1, yiDelta = 0, 256, 1 - } else { - edge0, edge1, yiDelta = 256, 0, -1 - } - x0i, yi := int(x0)/256, y0i - x0fTimes2 := (int(x0) - (256 * x0i)) * 2 - // Do the first pixel. - dcover := int(edge1 - y0f) - darea := int(x0fTimes2 * dcover) - r.area += darea - r.cover += dcover - yi += yiDelta - r.setCell(x0i, yi) - // Do all the intermediate pixels. - dcover = int(edge1 - edge0) - darea = int(x0fTimes2 * dcover) - for yi != y1i { - r.area += darea - r.cover += dcover - yi += yiDelta - r.setCell(x0i, yi) - } - // Do the last pixel. - dcover = int(y1f - edge0) - darea = int(x0fTimes2 * dcover) - r.area += darea - r.cover += dcover - - } else { - // There are at least two scanlines. Apart from the first and last scanlines, - // all intermediate scanlines go through the full height of the row, or 256 - // units in 24.8 fixed point format. - var ( - p, q, edge0, edge1 Fix32 - yiDelta int - ) - if dy > 0 { - p, q = (256-y0f)*dx, dy - edge0, edge1, yiDelta = 0, 256, 1 - } else { - p, q = y0f*dx, -dy - edge0, edge1, yiDelta = 256, 0, -1 - } - xDelta, xRem := p/q, p%q - if xRem < 0 { - xDelta -= 1 - xRem += q - } - // Do the first scanline. - x, yi := x0, y0i - r.scan(yi, x, y0f, x+xDelta, edge1) - x, yi = x+xDelta, yi+yiDelta - r.setCell(int(x)/256, yi) - if yi != y1i { - // Do all the intermediate scanlines. - p = 256 * dx - fullDelta, fullRem := p/q, p%q - if fullRem < 0 { - fullDelta -= 1 - fullRem += q - } - xRem -= q - for yi != y1i { - xDelta = fullDelta - xRem += fullRem - if xRem >= 0 { - xDelta += 1 - xRem -= q - } - r.scan(yi, x, edge0, x+xDelta, edge1) - x, yi = x+xDelta, yi+yiDelta - r.setCell(int(x)/256, yi) - } - } - // Do the last scanline. - r.scan(yi, x, edge0, x1, y1f) - } - // The next lineTo starts from b. - r.a = b -} - -// Add2 adds a quadratic segment to the current curve. -func (r *Rasterizer) Add2(b, c Point) { - // Calculate nSplit (the number of recursive decompositions) based on how `curvy' it is. - // Specifically, how much the middle point b deviates from (a+c)/2. - dev := maxAbs(r.a.X-2*b.X+c.X, r.a.Y-2*b.Y+c.Y) / Fix32(r.splitScale2) - nsplit := 0 - for dev > 0 { - dev /= 4 - nsplit++ - } - // dev is 32-bit, and nsplit++ every time we shift off 2 bits, so maxNsplit is 16. - const maxNsplit = 16 - if nsplit > maxNsplit { - panic("freetype/raster: Add2 nsplit too large: " + strconv.Itoa(nsplit)) - } - // Recursively decompose the curve nSplit levels deep. - var ( - pStack [2*maxNsplit + 3]Point - sStack [maxNsplit + 1]int - i int - ) - sStack[0] = nsplit - pStack[0] = c - pStack[1] = b - pStack[2] = r.a - for i >= 0 { - s := sStack[i] - p := pStack[2*i:] - if s > 0 { - // Split the quadratic curve p[:3] into an equivalent set of two shorter curves: - // p[:3] and p[2:5]. The new p[4] is the old p[2], and p[0] is unchanged. - mx := p[1].X - p[4].X = p[2].X - p[3].X = (p[4].X + mx) / 2 - p[1].X = (p[0].X + mx) / 2 - p[2].X = (p[1].X + p[3].X) / 2 - my := p[1].Y - p[4].Y = p[2].Y - p[3].Y = (p[4].Y + my) / 2 - p[1].Y = (p[0].Y + my) / 2 - p[2].Y = (p[1].Y + p[3].Y) / 2 - // The two shorter curves have one less split to do. - sStack[i] = s - 1 - sStack[i+1] = s - 1 - i++ - } else { - // Replace the level-0 quadratic with a two-linear-piece approximation. - midx := (p[0].X + 2*p[1].X + p[2].X) / 4 - midy := (p[0].Y + 2*p[1].Y + p[2].Y) / 4 - r.Add1(Point{midx, midy}) - r.Add1(p[0]) - i-- - } - } -} - -// Add3 adds a cubic segment to the current curve. -func (r *Rasterizer) Add3(b, c, d Point) { - // Calculate nSplit (the number of recursive decompositions) based on how `curvy' it is. - dev2 := maxAbs(r.a.X-3*(b.X+c.X)+d.X, r.a.Y-3*(b.Y+c.Y)+d.Y) / Fix32(r.splitScale2) - dev3 := maxAbs(r.a.X-2*b.X+d.X, r.a.Y-2*b.Y+d.Y) / Fix32(r.splitScale3) - nsplit := 0 - for dev2 > 0 || dev3 > 0 { - dev2 /= 8 - dev3 /= 4 - nsplit++ - } - // devN is 32-bit, and nsplit++ every time we shift off 2 bits, so maxNsplit is 16. - const maxNsplit = 16 - if nsplit > maxNsplit { - panic("freetype/raster: Add3 nsplit too large: " + strconv.Itoa(nsplit)) - } - // Recursively decompose the curve nSplit levels deep. - var ( - pStack [3*maxNsplit + 4]Point - sStack [maxNsplit + 1]int - i int - ) - sStack[0] = nsplit - pStack[0] = d - pStack[1] = c - pStack[2] = b - pStack[3] = r.a - for i >= 0 { - s := sStack[i] - p := pStack[3*i:] - if s > 0 { - // Split the cubic curve p[:4] into an equivalent set of two shorter curves: - // p[:4] and p[3:7]. The new p[6] is the old p[3], and p[0] is unchanged. - m01x := (p[0].X + p[1].X) / 2 - m12x := (p[1].X + p[2].X) / 2 - m23x := (p[2].X + p[3].X) / 2 - p[6].X = p[3].X - p[5].X = m23x - p[1].X = m01x - p[2].X = (m01x + m12x) / 2 - p[4].X = (m12x + m23x) / 2 - p[3].X = (p[2].X + p[4].X) / 2 - m01y := (p[0].Y + p[1].Y) / 2 - m12y := (p[1].Y + p[2].Y) / 2 - m23y := (p[2].Y + p[3].Y) / 2 - p[6].Y = p[3].Y - p[5].Y = m23y - p[1].Y = m01y - p[2].Y = (m01y + m12y) / 2 - p[4].Y = (m12y + m23y) / 2 - p[3].Y = (p[2].Y + p[4].Y) / 2 - // The two shorter curves have one less split to do. - sStack[i] = s - 1 - sStack[i+1] = s - 1 - i++ - } else { - // Replace the level-0 cubic with a two-linear-piece approximation. - midx := (p[0].X + 3*(p[1].X+p[2].X) + p[3].X) / 8 - midy := (p[0].Y + 3*(p[1].Y+p[2].Y) + p[3].Y) / 8 - r.Add1(Point{midx, midy}) - r.Add1(p[0]) - i-- - } - } -} - -// AddPath adds the given Path. -func (r *Rasterizer) AddPath(p Path) { - for i := 0; i < len(p); { - switch p[i] { - case 0: - r.Start(Point{p[i+1], p[i+2]}) - i += 4 - case 1: - r.Add1(Point{p[i+1], p[i+2]}) - i += 4 - case 2: - r.Add2(Point{p[i+1], p[i+2]}, Point{p[i+3], p[i+4]}) - i += 6 - case 3: - r.Add3(Point{p[i+1], p[i+2]}, Point{p[i+3], p[i+4]}, Point{p[i+5], p[i+6]}) - i += 8 - default: - panic("freetype/raster: bad path") - } - } -} - -// AddStroke adds a stroked Path. -func (r *Rasterizer) AddStroke(q Path, width Fix32, cr Capper, jr Joiner) { - Stroke(r, q, width, cr, jr) -} - -// Converts an area value to a uint32 alpha value. A completely filled pixel -// corresponds to an area of 256*256*2, and an alpha of 1<<32-1. The -// conversion of area values greater than this depends on the winding rule: -// even-odd or non-zero. -func (r *Rasterizer) areaToAlpha(area int) uint32 { - // The C Freetype implementation (version 2.3.12) does "alpha := area>>1" without - // the +1. Round-to-nearest gives a more symmetric result than round-down. - // The C implementation also returns 8-bit alpha, not 32-bit alpha. - a := (area + 1) >> 1 - if a < 0 { - a = -a - } - alpha := uint32(a) - if r.UseNonZeroWinding { - if alpha > 0xffff { - alpha = 0xffff - } - } else { - alpha &= 0x1ffff - if alpha > 0x10000 { - alpha = 0x20000 - alpha - } else if alpha == 0x10000 { - alpha = 0x0ffff - } - } - alpha |= alpha << 16 - return alpha -} - -// Rasterize converts r's accumulated curves into Spans for p. The Spans -// passed to p are non-overlapping, and sorted by Y and then X. They all -// have non-zero width (and 0 <= X0 < X1 <= r.width) and non-zero A, except -// for the final Span, which has Y, X0, X1 and A all equal to zero. -func (r *Rasterizer) Rasterize(p Painter) { - r.saveCell() - s := 0 - for yi := 0; yi < len(r.cellIndex); yi++ { - xi, cover := 0, 0 - for c := r.cellIndex[yi]; c != -1; c = r.cell[c].next { - if cover != 0 && r.cell[c].xi > xi { - alpha := r.areaToAlpha(cover * 256 * 2) - if alpha != 0 { - xi0, xi1 := xi, r.cell[c].xi - if xi0 < 0 { - xi0 = 0 - } - if xi1 >= r.width { - xi1 = r.width - } - if xi0 < xi1 { - r.spanBuf[s] = Span{yi + r.Dy, xi0 + r.Dx, xi1 + r.Dx, alpha} - s++ - } - } - } - cover += r.cell[c].cover - alpha := r.areaToAlpha(cover*256*2 - r.cell[c].area) - xi = r.cell[c].xi + 1 - if alpha != 0 { - xi0, xi1 := r.cell[c].xi, xi - if xi0 < 0 { - xi0 = 0 - } - if xi1 >= r.width { - xi1 = r.width - } - if xi0 < xi1 { - r.spanBuf[s] = Span{yi + r.Dy, xi0 + r.Dx, xi1 + r.Dx, alpha} - s++ - } - } - if s > len(r.spanBuf)-2 { - p.Paint(r.spanBuf[:s], false) - s = 0 - } - } - } - p.Paint(r.spanBuf[:s], true) -} - -// Clear cancels any previous calls to r.Start or r.AddXxx. -func (r *Rasterizer) Clear() { - r.a = Point{} - r.xi = 0 - r.yi = 0 - r.area = 0 - r.cover = 0 - r.cell = r.cell[:0] - for i := 0; i < len(r.cellIndex); i++ { - r.cellIndex[i] = -1 - } -} - -// SetBounds sets the maximum width and height of the rasterized image and -// calls Clear. The width and height are in pixels, not Fix32 units. -func (r *Rasterizer) SetBounds(width, height int) { - if width < 0 { - width = 0 - } - if height < 0 { - height = 0 - } - // Use the same ssN heuristic as the C Freetype implementation. - // The C implementation uses the values 32, 16, but those are in - // 26.6 fixed point units, and we use 24.8 fixed point everywhere. - ss2, ss3 := 128, 64 - if width > 24 || height > 24 { - ss2, ss3 = 2*ss2, 2*ss3 - if width > 120 || height > 120 { - ss2, ss3 = 2*ss2, 2*ss3 - } - } - r.width = width - r.splitScale2 = ss2 - r.splitScale3 = ss3 - r.cell = r.cellBuf[:0] - if height > len(r.cellIndexBuf) { - r.cellIndex = make([]int, height) - } else { - r.cellIndex = r.cellIndexBuf[:height] - } - r.Clear() -} - -// NewRasterizer creates a new Rasterizer with the given bounds. -func NewRasterizer(width, height int) *Rasterizer { - r := new(Rasterizer) - r.SetBounds(width, height) - return r -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/stroke.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/stroke.go deleted file mode 100644 index d49b1cee9d..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/raster/stroke.go +++ /dev/null @@ -1,466 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package raster - -// Two points are considered practically equal if the square of the distance -// between them is less than one quarter (i.e. 16384 / 65536 in Fix64). -const epsilon = 16384 - -// A Capper signifies how to begin or end a stroked path. -type Capper interface { - // Cap adds a cap to p given a pivot point and the normal vector of a - // terminal segment. The normal's length is half of the stroke width. - Cap(p Adder, halfWidth Fix32, pivot, n1 Point) -} - -// The CapperFunc type adapts an ordinary function to be a Capper. -type CapperFunc func(Adder, Fix32, Point, Point) - -func (f CapperFunc) Cap(p Adder, halfWidth Fix32, pivot, n1 Point) { - f(p, halfWidth, pivot, n1) -} - -// A Joiner signifies how to join interior nodes of a stroked path. -type Joiner interface { - // Join adds a join to the two sides of a stroked path given a pivot - // point and the normal vectors of the trailing and leading segments. - // Both normals have length equal to half of the stroke width. - Join(lhs, rhs Adder, halfWidth Fix32, pivot, n0, n1 Point) -} - -// The JoinerFunc type adapts an ordinary function to be a Joiner. -type JoinerFunc func(lhs, rhs Adder, halfWidth Fix32, pivot, n0, n1 Point) - -func (f JoinerFunc) Join(lhs, rhs Adder, halfWidth Fix32, pivot, n0, n1 Point) { - f(lhs, rhs, halfWidth, pivot, n0, n1) -} - -// RoundCapper adds round caps to a stroked path. -var RoundCapper Capper = CapperFunc(roundCapper) - -func roundCapper(p Adder, halfWidth Fix32, pivot, n1 Point) { - // The cubic Bézier approximation to a circle involves the magic number - // (√2 - 1) * 4/3, which is approximately 141/256. - const k = 141 - e := n1.Rot90CCW() - side := pivot.Add(e) - start, end := pivot.Sub(n1), pivot.Add(n1) - d, e := n1.Mul(k), e.Mul(k) - p.Add3(start.Add(e), side.Sub(d), side) - p.Add3(side.Add(d), end.Add(e), end) -} - -// ButtCapper adds butt caps to a stroked path. -var ButtCapper Capper = CapperFunc(buttCapper) - -func buttCapper(p Adder, halfWidth Fix32, pivot, n1 Point) { - p.Add1(pivot.Add(n1)) -} - -// SquareCapper adds square caps to a stroked path. -var SquareCapper Capper = CapperFunc(squareCapper) - -func squareCapper(p Adder, halfWidth Fix32, pivot, n1 Point) { - e := n1.Rot90CCW() - side := pivot.Add(e) - p.Add1(side.Sub(n1)) - p.Add1(side.Add(n1)) - p.Add1(pivot.Add(n1)) -} - -// RoundJoiner adds round joins to a stroked path. -var RoundJoiner Joiner = JoinerFunc(roundJoiner) - -func roundJoiner(lhs, rhs Adder, haflWidth Fix32, pivot, n0, n1 Point) { - dot := n0.Rot90CW().Dot(n1) - if dot >= 0 { - addArc(lhs, pivot, n0, n1) - rhs.Add1(pivot.Sub(n1)) - } else { - lhs.Add1(pivot.Add(n1)) - addArc(rhs, pivot, n0.Neg(), n1.Neg()) - } -} - -// BevelJoiner adds bevel joins to a stroked path. -var BevelJoiner Joiner = JoinerFunc(bevelJoiner) - -func bevelJoiner(lhs, rhs Adder, haflWidth Fix32, pivot, n0, n1 Point) { - lhs.Add1(pivot.Add(n1)) - rhs.Add1(pivot.Sub(n1)) -} - -// addArc adds a circular arc from pivot+n0 to pivot+n1 to p. The shorter of -// the two possible arcs is taken, i.e. the one spanning <= 180 degrees. -// The two vectors n0 and n1 must be of equal length. -func addArc(p Adder, pivot, n0, n1 Point) { - // r2 is the square of the length of n0. - r2 := n0.Dot(n0) - if r2 < epsilon { - // The arc radius is so small that we collapse to a straight line. - p.Add1(pivot.Add(n1)) - return - } - // We approximate the arc by 0, 1, 2 or 3 45-degree quadratic segments plus - // a final quadratic segment from s to n1. Each 45-degree segment has control - // points {1, 0}, {1, tan(π/8)} and {1/√2, 1/√2} suitably scaled, rotated and - // translated. tan(π/8) is approximately 106/256. - const tpo8 = 106 - var s Point - // We determine which octant the angle between n0 and n1 is in via three dot products. - // m0, m1 and m2 are n0 rotated clockwise by 45, 90 and 135 degrees. - m0 := n0.Rot45CW() - m1 := n0.Rot90CW() - m2 := m0.Rot90CW() - if m1.Dot(n1) >= 0 { - if n0.Dot(n1) >= 0 { - if m2.Dot(n1) <= 0 { - // n1 is between 0 and 45 degrees clockwise of n0. - s = n0 - } else { - // n1 is between 45 and 90 degrees clockwise of n0. - p.Add2(pivot.Add(n0).Add(m1.Mul(tpo8)), pivot.Add(m0)) - s = m0 - } - } else { - pm1, n0t := pivot.Add(m1), n0.Mul(tpo8) - p.Add2(pivot.Add(n0).Add(m1.Mul(tpo8)), pivot.Add(m0)) - p.Add2(pm1.Add(n0t), pm1) - if m0.Dot(n1) >= 0 { - // n1 is between 90 and 135 degrees clockwise of n0. - s = m1 - } else { - // n1 is between 135 and 180 degrees clockwise of n0. - p.Add2(pm1.Sub(n0t), pivot.Add(m2)) - s = m2 - } - } - } else { - if n0.Dot(n1) >= 0 { - if m0.Dot(n1) >= 0 { - // n1 is between 0 and 45 degrees counter-clockwise of n0. - s = n0 - } else { - // n1 is between 45 and 90 degrees counter-clockwise of n0. - p.Add2(pivot.Add(n0).Sub(m1.Mul(tpo8)), pivot.Sub(m2)) - s = m2.Neg() - } - } else { - pm1, n0t := pivot.Sub(m1), n0.Mul(tpo8) - p.Add2(pivot.Add(n0).Sub(m1.Mul(tpo8)), pivot.Sub(m2)) - p.Add2(pm1.Add(n0t), pm1) - if m2.Dot(n1) <= 0 { - // n1 is between 90 and 135 degrees counter-clockwise of n0. - s = m1.Neg() - } else { - // n1 is between 135 and 180 degrees counter-clockwise of n0. - p.Add2(pm1.Sub(n0t), pivot.Sub(m0)) - s = m0.Neg() - } - } - } - // The final quadratic segment has two endpoints s and n1 and the middle - // control point is a multiple of s.Add(n1), i.e. it is on the angle bisector - // of those two points. The multiple ranges between 128/256 and 150/256 as - // the angle between s and n1 ranges between 0 and 45 degrees. - // When the angle is 0 degrees (i.e. s and n1 are coincident) then s.Add(n1) - // is twice s and so the middle control point of the degenerate quadratic - // segment should be half s.Add(n1), and half = 128/256. - // When the angle is 45 degrees then 150/256 is the ratio of the lengths of - // the two vectors {1, tan(π/8)} and {1 + 1/√2, 1/√2}. - // d is the normalized dot product between s and n1. Since the angle ranges - // between 0 and 45 degrees then d ranges between 256/256 and 181/256. - d := 256 * s.Dot(n1) / r2 - multiple := Fix32(150 - 22*(d-181)/(256-181)) - p.Add2(pivot.Add(s.Add(n1).Mul(multiple)), pivot.Add(n1)) -} - -// midpoint returns the midpoint of two Points. -func midpoint(a, b Point) Point { - return Point{(a.X + b.X) / 2, (a.Y + b.Y) / 2} -} - -// angleGreaterThan45 returns whether the angle between two vectors is more -// than 45 degrees. -func angleGreaterThan45(v0, v1 Point) bool { - v := v0.Rot45CCW() - return v.Dot(v1) < 0 || v.Rot90CW().Dot(v1) < 0 -} - -// interpolate returns the point (1-t)*a + t*b. -func interpolate(a, b Point, t Fix64) Point { - s := 65536 - t - x := s*Fix64(a.X) + t*Fix64(b.X) - y := s*Fix64(a.Y) + t*Fix64(b.Y) - return Point{Fix32(x >> 16), Fix32(y >> 16)} -} - -// curviest2 returns the value of t for which the quadratic parametric curve -// (1-t)²*a + 2*t*(1-t).b + t²*c has maximum curvature. -// -// The curvature of the parametric curve f(t) = (x(t), y(t)) is -// |x′y″-y′x″| / (x′²+y′²)^(3/2). -// -// Let d = b-a and e = c-2*b+a, so that f′(t) = 2*d+2*e*t and f″(t) = 2*e. -// The curvature's numerator is (2*dx+2*ex*t)*(2*ey)-(2*dy+2*ey*t)*(2*ex), -// which simplifies to 4*dx*ey-4*dy*ex, which is constant with respect to t. -// -// Thus, curvature is extreme where the denominator is extreme, i.e. where -// (x′²+y′²) is extreme. The first order condition is that -// 2*x′*x″+2*y′*y″ = 0, or (dx+ex*t)*ex + (dy+ey*t)*ey = 0. -// Solving for t gives t = -(dx*ex+dy*ey) / (ex*ex+ey*ey). -func curviest2(a, b, c Point) Fix64 { - dx := int64(b.X - a.X) - dy := int64(b.Y - a.Y) - ex := int64(c.X - 2*b.X + a.X) - ey := int64(c.Y - 2*b.Y + a.Y) - if ex == 0 && ey == 0 { - return 32768 - } - return Fix64(-65536 * (dx*ex + dy*ey) / (ex*ex + ey*ey)) -} - -// A stroker holds state for stroking a path. -type stroker struct { - // p is the destination that records the stroked path. - p Adder - // u is the half-width of the stroke. - u Fix32 - // cr and jr specify how to end and connect path segments. - cr Capper - jr Joiner - // r is the reverse path. Stroking a path involves constructing two - // parallel paths 2*u apart. The first path is added immediately to p, - // the second path is accumulated in r and eventually added in reverse. - r Path - // a is the most recent segment point. anorm is the segment normal of - // length u at that point. - a, anorm Point -} - -// addNonCurvy2 adds a quadratic segment to the stroker, where the segment -// defined by (k.a, b, c) achieves maximum curvature at either k.a or c. -func (k *stroker) addNonCurvy2(b, c Point) { - // We repeatedly divide the segment at its middle until it is straight - // enough to approximate the stroke by just translating the control points. - // ds and ps are stacks of depths and points. t is the top of the stack. - const maxDepth = 5 - var ( - ds [maxDepth + 1]int - ps [2*maxDepth + 3]Point - t int - ) - // Initially the ps stack has one quadratic segment of depth zero. - ds[0] = 0 - ps[2] = k.a - ps[1] = b - ps[0] = c - anorm := k.anorm - var cnorm Point - - for { - depth := ds[t] - a := ps[2*t+2] - b := ps[2*t+1] - c := ps[2*t+0] - ab := b.Sub(a) - bc := c.Sub(b) - abIsSmall := ab.Dot(ab) < Fix64(1<<16) - bcIsSmall := bc.Dot(bc) < Fix64(1<<16) - if abIsSmall && bcIsSmall { - // Approximate the segment by a circular arc. - cnorm = bc.Norm(k.u).Rot90CCW() - mac := midpoint(a, c) - addArc(k.p, mac, anorm, cnorm) - addArc(&k.r, mac, anorm.Neg(), cnorm.Neg()) - } else if depth < maxDepth && angleGreaterThan45(ab, bc) { - // Divide the segment in two and push both halves on the stack. - mab := midpoint(a, b) - mbc := midpoint(b, c) - t++ - ds[t+0] = depth + 1 - ds[t-1] = depth + 1 - ps[2*t+2] = a - ps[2*t+1] = mab - ps[2*t+0] = midpoint(mab, mbc) - ps[2*t-1] = mbc - continue - } else { - // Translate the control points. - bnorm := c.Sub(a).Norm(k.u).Rot90CCW() - cnorm = bc.Norm(k.u).Rot90CCW() - k.p.Add2(b.Add(bnorm), c.Add(cnorm)) - k.r.Add2(b.Sub(bnorm), c.Sub(cnorm)) - } - if t == 0 { - k.a, k.anorm = c, cnorm - return - } - t-- - anorm = cnorm - } - panic("unreachable") -} - -// Add1 adds a linear segment to the stroker. -func (k *stroker) Add1(b Point) { - bnorm := b.Sub(k.a).Norm(k.u).Rot90CCW() - if len(k.r) == 0 { - k.p.Start(k.a.Add(bnorm)) - k.r.Start(k.a.Sub(bnorm)) - } else { - k.jr.Join(k.p, &k.r, k.u, k.a, k.anorm, bnorm) - } - k.p.Add1(b.Add(bnorm)) - k.r.Add1(b.Sub(bnorm)) - k.a, k.anorm = b, bnorm -} - -// Add2 adds a quadratic segment to the stroker. -func (k *stroker) Add2(b, c Point) { - ab := b.Sub(k.a) - bc := c.Sub(b) - abnorm := ab.Norm(k.u).Rot90CCW() - if len(k.r) == 0 { - k.p.Start(k.a.Add(abnorm)) - k.r.Start(k.a.Sub(abnorm)) - } else { - k.jr.Join(k.p, &k.r, k.u, k.a, k.anorm, abnorm) - } - - // Approximate nearly-degenerate quadratics by linear segments. - abIsSmall := ab.Dot(ab) < epsilon - bcIsSmall := bc.Dot(bc) < epsilon - if abIsSmall || bcIsSmall { - acnorm := c.Sub(k.a).Norm(k.u).Rot90CCW() - k.p.Add1(c.Add(acnorm)) - k.r.Add1(c.Sub(acnorm)) - k.a, k.anorm = c, acnorm - return - } - - // The quadratic segment (k.a, b, c) has a point of maximum curvature. - // If this occurs at an end point, we process the segment as a whole. - t := curviest2(k.a, b, c) - if t <= 0 || t >= 65536 { - k.addNonCurvy2(b, c) - return - } - - // Otherwise, we perform a de Casteljau decomposition at the point of - // maximum curvature and process the two straighter parts. - mab := interpolate(k.a, b, t) - mbc := interpolate(b, c, t) - mabc := interpolate(mab, mbc, t) - - // If the vectors ab and bc are close to being in opposite directions, - // then the decomposition can become unstable, so we approximate the - // quadratic segment by two linear segments joined by an arc. - bcnorm := bc.Norm(k.u).Rot90CCW() - if abnorm.Dot(bcnorm) < -Fix64(k.u)*Fix64(k.u)*2047/2048 { - pArc := abnorm.Dot(bc) < 0 - - k.p.Add1(mabc.Add(abnorm)) - if pArc { - z := abnorm.Rot90CW() - addArc(k.p, mabc, abnorm, z) - addArc(k.p, mabc, z, bcnorm) - } - k.p.Add1(mabc.Add(bcnorm)) - k.p.Add1(c.Add(bcnorm)) - - k.r.Add1(mabc.Sub(abnorm)) - if !pArc { - z := abnorm.Rot90CW() - addArc(&k.r, mabc, abnorm.Neg(), z) - addArc(&k.r, mabc, z, bcnorm.Neg()) - } - k.r.Add1(mabc.Sub(bcnorm)) - k.r.Add1(c.Sub(bcnorm)) - - k.a, k.anorm = c, bcnorm - return - } - - // Process the decomposed parts. - k.addNonCurvy2(mab, mabc) - k.addNonCurvy2(mbc, c) -} - -// Add3 adds a cubic segment to the stroker. -func (k *stroker) Add3(b, c, d Point) { - panic("freetype/raster: stroke unimplemented for cubic segments") -} - -// stroke adds the stroked Path q to p, where q consists of exactly one curve. -func (k *stroker) stroke(q Path) { - // Stroking is implemented by deriving two paths each k.u apart from q. - // The left-hand-side path is added immediately to k.p; the right-hand-side - // path is accumulated in k.r. Once we've finished adding the LHS to k.p, - // we add the RHS in reverse order. - k.r = make(Path, 0, len(q)) - k.a = Point{q[1], q[2]} - for i := 4; i < len(q); { - switch q[i] { - case 1: - k.Add1(Point{q[i+1], q[i+2]}) - i += 4 - case 2: - k.Add2(Point{q[i+1], q[i+2]}, Point{q[i+3], q[i+4]}) - i += 6 - case 3: - k.Add3(Point{q[i+1], q[i+2]}, Point{q[i+3], q[i+4]}, Point{q[i+5], q[i+6]}) - i += 8 - default: - panic("freetype/raster: bad path") - } - } - if len(k.r) == 0 { - return - } - // TODO(nigeltao): if q is a closed curve then we should join the first and - // last segments instead of capping them. - k.cr.Cap(k.p, k.u, q.lastPoint(), k.anorm.Neg()) - addPathReversed(k.p, k.r) - pivot := q.firstPoint() - k.cr.Cap(k.p, k.u, pivot, pivot.Sub(Point{k.r[1], k.r[2]})) -} - -// Stroke adds q stroked with the given width to p. The result is typically -// self-intersecting and should be rasterized with UseNonZeroWinding. -// cr and jr may be nil, which defaults to a RoundCapper or RoundJoiner. -func Stroke(p Adder, q Path, width Fix32, cr Capper, jr Joiner) { - if len(q) == 0 { - return - } - if cr == nil { - cr = RoundCapper - } - if jr == nil { - jr = RoundJoiner - } - if q[0] != 0 { - panic("freetype/raster: bad path") - } - s := stroker{p: p, u: width / 2, cr: cr, jr: jr} - i := 0 - for j := 4; j < len(q); { - switch q[j] { - case 0: - s.stroke(q[i:j]) - i, j = j, j+4 - case 1: - j += 4 - case 2: - j += 6 - case 3: - j += 8 - default: - panic("freetype/raster: bad path") - } - } - s.stroke(q[i:]) -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/glyph.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/glyph.go deleted file mode 100644 index b5f3278510..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/glyph.go +++ /dev/null @@ -1,530 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package truetype - -// Hinting is the policy for snapping a glyph's contours to pixel boundaries. -type Hinting int32 - -const ( - // NoHinting means to not perform any hinting. - NoHinting Hinting = iota - // FullHinting means to use the font's hinting instructions. - FullHinting - - // TODO: implement VerticalHinting. -) - -// A Point is a co-ordinate pair plus whether it is ``on'' a contour or an -// ``off'' control point. -type Point struct { - X, Y int32 - // The Flags' LSB means whether or not this Point is ``on'' the contour. - // Other bits are reserved for internal use. - Flags uint32 -} - -// A GlyphBuf holds a glyph's contours. A GlyphBuf can be re-used to load a -// series of glyphs from a Font. -type GlyphBuf struct { - // AdvanceWidth is the glyph's advance width. - AdvanceWidth int32 - // B is the glyph's bounding box. - B Bounds - // Point contains all Points from all contours of the glyph. If - // hinting was used to load a glyph then Unhinted contains those - // Points before they were hinted, and InFontUnits contains those - // Points before they were hinted and scaled. - Point, Unhinted, InFontUnits []Point - // End is the point indexes of the end point of each countour. The - // length of End is the number of contours in the glyph. The i'th - // contour consists of points Point[End[i-1]:End[i]], where End[-1] - // is interpreted to mean zero. - End []int - - font *Font - scale int32 - hinting Hinting - hinter hinter - // phantomPoints are the co-ordinates of the synthetic phantom points - // used for hinting and bounding box calculations. - phantomPoints [4]Point - // pp1x is the X co-ordinate of the first phantom point. The '1' is - // using 1-based indexing; pp1x is almost always phantomPoints[0].X. - // TODO: eliminate this and consistently use phantomPoints[0].X. - pp1x int32 - // metricsSet is whether the glyph's metrics have been set yet. For a - // compound glyph, a sub-glyph may override the outer glyph's metrics. - metricsSet bool - // tmp is a scratch buffer. - tmp []Point -} - -// Flags for decoding a glyph's contours. These flags are documented at -// http://developer.apple.com/fonts/TTRefMan/RM06/Chap6glyf.html. -const ( - flagOnCurve = 1 << iota - flagXShortVector - flagYShortVector - flagRepeat - flagPositiveXShortVector - flagPositiveYShortVector - - // The remaining flags are for internal use. - flagTouchedX - flagTouchedY -) - -// The same flag bits (0x10 and 0x20) are overloaded to have two meanings, -// dependent on the value of the flag{X,Y}ShortVector bits. -const ( - flagThisXIsSame = flagPositiveXShortVector - flagThisYIsSame = flagPositiveYShortVector -) - -// Load loads a glyph's contours from a Font, overwriting any previously -// loaded contours for this GlyphBuf. scale is the number of 26.6 fixed point -// units in 1 em, i is the glyph index, and h is the hinting policy. -func (g *GlyphBuf) Load(f *Font, scale int32, i Index, h Hinting) error { - g.Point = g.Point[:0] - g.Unhinted = g.Unhinted[:0] - g.InFontUnits = g.InFontUnits[:0] - g.End = g.End[:0] - g.font = f - g.hinting = h - g.scale = scale - g.pp1x = 0 - g.phantomPoints = [4]Point{} - g.metricsSet = false - - if h != NoHinting { - if err := g.hinter.init(f, scale); err != nil { - return err - } - } - if err := g.load(0, i, true); err != nil { - return err - } - // TODO: this selection of either g.pp1x or g.phantomPoints[0].X isn't ideal, - // and should be cleaned up once we have all the testScaling tests passing, - // plus additional tests for Freetype-Go's bounding boxes matching C Freetype's. - pp1x := g.pp1x - if h != NoHinting { - pp1x = g.phantomPoints[0].X - } - if pp1x != 0 { - for i := range g.Point { - g.Point[i].X -= pp1x - } - } - - advanceWidth := g.phantomPoints[1].X - g.phantomPoints[0].X - if h != NoHinting { - if len(f.hdmx) >= 8 { - if n := u32(f.hdmx, 4); n > 3+uint32(i) { - for hdmx := f.hdmx[8:]; uint32(len(hdmx)) >= n; hdmx = hdmx[n:] { - if int32(hdmx[0]) == scale>>6 { - advanceWidth = int32(hdmx[2+i]) << 6 - break - } - } - } - } - advanceWidth = (advanceWidth + 32) &^ 63 - } - g.AdvanceWidth = advanceWidth - - // Set g.B to the 'control box', which is the bounding box of the Bézier - // curves' control points. This is easier to calculate, no smaller than - // and often equal to the tightest possible bounding box of the curves - // themselves. This approach is what C Freetype does. We can't just scale - // the nominal bounding box in the glyf data as the hinting process and - // phantom point adjustment may move points outside of that box. - if len(g.Point) == 0 { - g.B = Bounds{} - } else { - p := g.Point[0] - g.B.XMin = p.X - g.B.XMax = p.X - g.B.YMin = p.Y - g.B.YMax = p.Y - for _, p := range g.Point[1:] { - if g.B.XMin > p.X { - g.B.XMin = p.X - } else if g.B.XMax < p.X { - g.B.XMax = p.X - } - if g.B.YMin > p.Y { - g.B.YMin = p.Y - } else if g.B.YMax < p.Y { - g.B.YMax = p.Y - } - } - // Snap the box to the grid, if hinting is on. - if h != NoHinting { - g.B.XMin &^= 63 - g.B.YMin &^= 63 - g.B.XMax += 63 - g.B.XMax &^= 63 - g.B.YMax += 63 - g.B.YMax &^= 63 - } - } - return nil -} - -func (g *GlyphBuf) load(recursion int32, i Index, useMyMetrics bool) (err error) { - // The recursion limit here is arbitrary, but defends against malformed glyphs. - if recursion >= 32 { - return UnsupportedError("excessive compound glyph recursion") - } - // Find the relevant slice of g.font.glyf. - var g0, g1 uint32 - if g.font.locaOffsetFormat == locaOffsetFormatShort { - g0 = 2 * uint32(u16(g.font.loca, 2*int(i))) - g1 = 2 * uint32(u16(g.font.loca, 2*int(i)+2)) - } else { - g0 = u32(g.font.loca, 4*int(i)) - g1 = u32(g.font.loca, 4*int(i)+4) - } - - // Decode the contour count and nominal bounding box, from the first - // 10 bytes of the glyf data. boundsYMin and boundsXMax, at offsets 4 - // and 6, are unused. - glyf, ne, boundsXMin, boundsYMax := []byte(nil), 0, int32(0), int32(0) - if g0+10 <= g1 { - glyf = g.font.glyf[g0:g1] - ne = int(int16(u16(glyf, 0))) - boundsXMin = int32(int16(u16(glyf, 2))) - boundsYMax = int32(int16(u16(glyf, 8))) - } - - // Create the phantom points. - uhm, pp1x := g.font.unscaledHMetric(i), int32(0) - uvm := g.font.unscaledVMetric(i, boundsYMax) - g.phantomPoints = [4]Point{ - {X: boundsXMin - uhm.LeftSideBearing}, - {X: boundsXMin - uhm.LeftSideBearing + uhm.AdvanceWidth}, - {X: uhm.AdvanceWidth / 2, Y: boundsYMax + uvm.TopSideBearing}, - {X: uhm.AdvanceWidth / 2, Y: boundsYMax + uvm.TopSideBearing - uvm.AdvanceHeight}, - } - if len(glyf) == 0 { - g.addPhantomsAndScale(len(g.Point), len(g.Point), true, true) - copy(g.phantomPoints[:], g.Point[len(g.Point)-4:]) - g.Point = g.Point[:len(g.Point)-4] - return nil - } - - // Load and hint the contours. - if ne < 0 { - if ne != -1 { - // http://developer.apple.com/fonts/TTRefMan/RM06/Chap6glyf.html says that - // "the values -2, -3, and so forth, are reserved for future use." - return UnsupportedError("negative number of contours") - } - pp1x = g.font.scale(g.scale * (boundsXMin - uhm.LeftSideBearing)) - if err := g.loadCompound(recursion, uhm, i, glyf, useMyMetrics); err != nil { - return err - } - } else { - np0, ne0 := len(g.Point), len(g.End) - program := g.loadSimple(glyf, ne) - g.addPhantomsAndScale(np0, np0, true, true) - pp1x = g.Point[len(g.Point)-4].X - if g.hinting != NoHinting { - if len(program) != 0 { - err := g.hinter.run( - program, - g.Point[np0:], - g.Unhinted[np0:], - g.InFontUnits[np0:], - g.End[ne0:], - ) - if err != nil { - return err - } - } - // Drop the four phantom points. - g.InFontUnits = g.InFontUnits[:len(g.InFontUnits)-4] - g.Unhinted = g.Unhinted[:len(g.Unhinted)-4] - } - if useMyMetrics { - copy(g.phantomPoints[:], g.Point[len(g.Point)-4:]) - } - g.Point = g.Point[:len(g.Point)-4] - if np0 != 0 { - // The hinting program expects the []End values to be indexed relative - // to the inner glyph, not the outer glyph, so we delay adding np0 until - // after the hinting program (if any) has run. - for i := ne0; i < len(g.End); i++ { - g.End[i] += np0 - } - } - } - if useMyMetrics && !g.metricsSet { - g.metricsSet = true - g.pp1x = pp1x - } - return nil -} - -// loadOffset is the initial offset for loadSimple and loadCompound. The first -// 10 bytes are the number of contours and the bounding box. -const loadOffset = 10 - -func (g *GlyphBuf) loadSimple(glyf []byte, ne int) (program []byte) { - offset := loadOffset - for i := 0; i < ne; i++ { - g.End = append(g.End, 1+int(u16(glyf, offset))) - offset += 2 - } - - // Note the TrueType hinting instructions. - instrLen := int(u16(glyf, offset)) - offset += 2 - program = glyf[offset : offset+instrLen] - offset += instrLen - - np0 := len(g.Point) - np1 := np0 + int(g.End[len(g.End)-1]) - - // Decode the flags. - for i := np0; i < np1; { - c := uint32(glyf[offset]) - offset++ - g.Point = append(g.Point, Point{Flags: c}) - i++ - if c&flagRepeat != 0 { - count := glyf[offset] - offset++ - for ; count > 0; count-- { - g.Point = append(g.Point, Point{Flags: c}) - i++ - } - } - } - - // Decode the co-ordinates. - var x int16 - for i := np0; i < np1; i++ { - f := g.Point[i].Flags - if f&flagXShortVector != 0 { - dx := int16(glyf[offset]) - offset++ - if f&flagPositiveXShortVector == 0 { - x -= dx - } else { - x += dx - } - } else if f&flagThisXIsSame == 0 { - x += int16(u16(glyf, offset)) - offset += 2 - } - g.Point[i].X = int32(x) - } - var y int16 - for i := np0; i < np1; i++ { - f := g.Point[i].Flags - if f&flagYShortVector != 0 { - dy := int16(glyf[offset]) - offset++ - if f&flagPositiveYShortVector == 0 { - y -= dy - } else { - y += dy - } - } else if f&flagThisYIsSame == 0 { - y += int16(u16(glyf, offset)) - offset += 2 - } - g.Point[i].Y = int32(y) - } - - return program -} - -func (g *GlyphBuf) loadCompound(recursion int32, uhm HMetric, i Index, - glyf []byte, useMyMetrics bool) error { - - // Flags for decoding a compound glyph. These flags are documented at - // http://developer.apple.com/fonts/TTRefMan/RM06/Chap6glyf.html. - const ( - flagArg1And2AreWords = 1 << iota - flagArgsAreXYValues - flagRoundXYToGrid - flagWeHaveAScale - flagUnused - flagMoreComponents - flagWeHaveAnXAndYScale - flagWeHaveATwoByTwo - flagWeHaveInstructions - flagUseMyMetrics - flagOverlapCompound - ) - np0, ne0 := len(g.Point), len(g.End) - offset := loadOffset - for { - flags := u16(glyf, offset) - component := Index(u16(glyf, offset+2)) - dx, dy, transform, hasTransform := int32(0), int32(0), [4]int32{}, false - if flags&flagArg1And2AreWords != 0 { - dx = int32(int16(u16(glyf, offset+4))) - dy = int32(int16(u16(glyf, offset+6))) - offset += 8 - } else { - dx = int32(int16(int8(glyf[offset+4]))) - dy = int32(int16(int8(glyf[offset+5]))) - offset += 6 - } - if flags&flagArgsAreXYValues == 0 { - return UnsupportedError("compound glyph transform vector") - } - if flags&(flagWeHaveAScale|flagWeHaveAnXAndYScale|flagWeHaveATwoByTwo) != 0 { - hasTransform = true - switch { - case flags&flagWeHaveAScale != 0: - transform[0] = int32(int16(u16(glyf, offset+0))) - transform[3] = transform[0] - offset += 2 - case flags&flagWeHaveAnXAndYScale != 0: - transform[0] = int32(int16(u16(glyf, offset+0))) - transform[3] = int32(int16(u16(glyf, offset+2))) - offset += 4 - case flags&flagWeHaveATwoByTwo != 0: - transform[0] = int32(int16(u16(glyf, offset+0))) - transform[1] = int32(int16(u16(glyf, offset+2))) - transform[2] = int32(int16(u16(glyf, offset+4))) - transform[3] = int32(int16(u16(glyf, offset+6))) - offset += 8 - } - } - savedPP := g.phantomPoints - np0 := len(g.Point) - componentUMM := useMyMetrics && (flags&flagUseMyMetrics != 0) - if err := g.load(recursion+1, component, componentUMM); err != nil { - return err - } - if flags&flagUseMyMetrics == 0 { - g.phantomPoints = savedPP - } - if hasTransform { - for j := np0; j < len(g.Point); j++ { - p := &g.Point[j] - newX := int32((int64(p.X)*int64(transform[0])+1<<13)>>14) + - int32((int64(p.Y)*int64(transform[2])+1<<13)>>14) - newY := int32((int64(p.X)*int64(transform[1])+1<<13)>>14) + - int32((int64(p.Y)*int64(transform[3])+1<<13)>>14) - p.X, p.Y = newX, newY - } - } - dx = g.font.scale(g.scale * dx) - dy = g.font.scale(g.scale * dy) - if flags&flagRoundXYToGrid != 0 { - dx = (dx + 32) &^ 63 - dy = (dy + 32) &^ 63 - } - for j := np0; j < len(g.Point); j++ { - p := &g.Point[j] - p.X += dx - p.Y += dy - } - // TODO: also adjust g.InFontUnits and g.Unhinted? - if flags&flagMoreComponents == 0 { - break - } - } - - instrLen := 0 - if g.hinting != NoHinting && offset+2 <= len(glyf) { - instrLen = int(u16(glyf, offset)) - offset += 2 - } - - g.addPhantomsAndScale(np0, len(g.Point), false, instrLen > 0) - points, ends := g.Point[np0:], g.End[ne0:] - g.Point = g.Point[:len(g.Point)-4] - for j := range points { - points[j].Flags &^= flagTouchedX | flagTouchedY - } - - if instrLen == 0 { - if !g.metricsSet { - copy(g.phantomPoints[:], points[len(points)-4:]) - } - return nil - } - - // Hint the compound glyph. - program := glyf[offset : offset+instrLen] - // Temporarily adjust the ends to be relative to this compound glyph. - if np0 != 0 { - for i := range ends { - ends[i] -= np0 - } - } - // Hinting instructions of a composite glyph completely refer to the - // (already) hinted subglyphs. - g.tmp = append(g.tmp[:0], points...) - if err := g.hinter.run(program, points, g.tmp, g.tmp, ends); err != nil { - return err - } - if np0 != 0 { - for i := range ends { - ends[i] += np0 - } - } - if !g.metricsSet { - copy(g.phantomPoints[:], points[len(points)-4:]) - } - return nil -} - -func (g *GlyphBuf) addPhantomsAndScale(np0, np1 int, simple, adjust bool) { - // Add the four phantom points. - g.Point = append(g.Point, g.phantomPoints[:]...) - // Scale the points. - if simple && g.hinting != NoHinting { - g.InFontUnits = append(g.InFontUnits, g.Point[np1:]...) - } - for i := np1; i < len(g.Point); i++ { - p := &g.Point[i] - p.X = g.font.scale(g.scale * p.X) - p.Y = g.font.scale(g.scale * p.Y) - } - if g.hinting == NoHinting { - return - } - // Round the 1st phantom point to the grid, shifting all other points equally. - // Note that "all other points" starts from np0, not np1. - // TODO: delete this adjustment and the np0/np1 distinction, when - // we update the compatibility tests to C Freetype 2.5.3. - // See http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=05c786d990390a7ca18e62962641dac740bacb06 - if adjust { - pp1x := g.Point[len(g.Point)-4].X - if dx := ((pp1x + 32) &^ 63) - pp1x; dx != 0 { - for i := np0; i < len(g.Point); i++ { - g.Point[i].X += dx - } - } - } - if simple { - g.Unhinted = append(g.Unhinted, g.Point[np1:]...) - } - // Round the 2nd and 4th phantom point to the grid. - p := &g.Point[len(g.Point)-3] - p.X = (p.X + 32) &^ 63 - p = &g.Point[len(g.Point)-1] - p.Y = (p.Y + 32) &^ 63 -} - -// TODO: is this necessary? The zero-valued GlyphBuf is perfectly usable. - -// NewGlyphBuf returns a newly allocated GlyphBuf. -func NewGlyphBuf() *GlyphBuf { - return &GlyphBuf{ - Point: make([]Point, 0, 256), - End: make([]int, 0, 32), - } -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/hint.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/hint.go deleted file mode 100644 index 26c631436d..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/hint.go +++ /dev/null @@ -1,1764 +0,0 @@ -// Copyright 2012 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package truetype - -// This file implements a Truetype bytecode interpreter. -// The opcodes are described at https://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html - -import ( - "errors" - "math" -) - -const ( - twilightZone = 0 - glyphZone = 1 - numZone = 2 -) - -type pointType uint32 - -const ( - current pointType = 0 - unhinted pointType = 1 - inFontUnits pointType = 2 - numPointType = 3 -) - -// callStackEntry is a bytecode call stack entry. -type callStackEntry struct { - program []byte - pc int - loopCount int32 -} - -// hinter implements bytecode hinting. A hinter can be re-used to hint a series -// of glyphs from a Font. -type hinter struct { - stack, store []int32 - - // functions is a map from function number to bytecode. - functions map[int32][]byte - - // font and scale are the font and scale last used for this hinter. - // Changing the font will require running the new font's fpgm bytecode. - // Changing either will require running the font's prep bytecode. - font *Font - scale int32 - - // gs and defaultGS are the current and default graphics state. The - // default graphics state is the global default graphics state after - // the font's fpgm and prep programs have been run. - gs, defaultGS graphicsState - - // points and ends are the twilight zone's points, glyph's points - // and glyph's contour boundaries. - points [numZone][numPointType][]Point - ends []int - - // scaledCVT is the lazily initialized scaled Control Value Table. - scaledCVTInitialized bool - scaledCVT []f26dot6 -} - -// graphicsState is described at https://developer.apple.com/fonts/TTRefMan/RM04/Chap4.html -type graphicsState struct { - // Projection vector, freedom vector and dual projection vector. - pv, fv, dv [2]f2dot14 - // Reference points and zone pointers. - rp, zp [3]int32 - // Control Value / Single Width Cut-In. - controlValueCutIn, singleWidthCutIn, singleWidth f26dot6 - // Delta base / shift. - deltaBase, deltaShift int32 - // Minimum distance. - minDist f26dot6 - // Loop count. - loop int32 - // Rounding policy. - roundPeriod, roundPhase, roundThreshold f26dot6 - roundSuper45 bool - // Auto-flip. - autoFlip bool -} - -var globalDefaultGS = graphicsState{ - pv: [2]f2dot14{0x4000, 0}, // Unit vector along the X axis. - fv: [2]f2dot14{0x4000, 0}, - dv: [2]f2dot14{0x4000, 0}, - zp: [3]int32{1, 1, 1}, - controlValueCutIn: (17 << 6) / 16, // 17/16 as an f26dot6. - deltaBase: 9, - deltaShift: 3, - minDist: 1 << 6, // 1 as an f26dot6. - loop: 1, - roundPeriod: 1 << 6, // 1 as an f26dot6. - roundThreshold: 1 << 5, // 1/2 as an f26dot6. - roundSuper45: false, - autoFlip: true, -} - -func resetTwilightPoints(f *Font, p []Point) []Point { - if n := int(f.maxTwilightPoints) + 4; n <= cap(p) { - p = p[:n] - for i := range p { - p[i] = Point{} - } - } else { - p = make([]Point, n) - } - return p -} - -func (h *hinter) init(f *Font, scale int32) error { - h.points[twilightZone][0] = resetTwilightPoints(f, h.points[twilightZone][0]) - h.points[twilightZone][1] = resetTwilightPoints(f, h.points[twilightZone][1]) - h.points[twilightZone][2] = resetTwilightPoints(f, h.points[twilightZone][2]) - - rescale := h.scale != scale - if h.font != f { - h.font, rescale = f, true - if h.functions == nil { - h.functions = make(map[int32][]byte) - } else { - for k := range h.functions { - delete(h.functions, k) - } - } - - if x := int(f.maxStackElements); x > len(h.stack) { - x += 255 - x &^= 255 - h.stack = make([]int32, x) - } - if x := int(f.maxStorage); x > len(h.store) { - x += 15 - x &^= 15 - h.store = make([]int32, x) - } - if len(f.fpgm) != 0 { - if err := h.run(f.fpgm, nil, nil, nil, nil); err != nil { - return err - } - } - } - - if rescale { - h.scale = scale - h.scaledCVTInitialized = false - - h.defaultGS = globalDefaultGS - - if len(f.prep) != 0 { - if err := h.run(f.prep, nil, nil, nil, nil); err != nil { - return err - } - h.defaultGS = h.gs - // The MS rasterizer doesn't allow the following graphics state - // variables to be modified by the CVT program. - h.defaultGS.pv = globalDefaultGS.pv - h.defaultGS.fv = globalDefaultGS.fv - h.defaultGS.dv = globalDefaultGS.dv - h.defaultGS.rp = globalDefaultGS.rp - h.defaultGS.zp = globalDefaultGS.zp - h.defaultGS.loop = globalDefaultGS.loop - } - } - return nil -} - -func (h *hinter) run(program []byte, pCurrent, pUnhinted, pInFontUnits []Point, ends []int) error { - h.gs = h.defaultGS - h.points[glyphZone][current] = pCurrent - h.points[glyphZone][unhinted] = pUnhinted - h.points[glyphZone][inFontUnits] = pInFontUnits - h.ends = ends - - if len(program) > 50000 { - return errors.New("truetype: hinting: too many instructions") - } - var ( - steps, pc, top int - opcode uint8 - - callStack [32]callStackEntry - callStackTop int - ) - - for 0 <= pc && pc < len(program) { - steps++ - if steps == 100000 { - return errors.New("truetype: hinting: too many steps") - } - opcode = program[pc] - if top < int(popCount[opcode]) { - return errors.New("truetype: hinting: stack underflow") - } - switch opcode { - - case opSVTCA0: - h.gs.pv = [2]f2dot14{0, 0x4000} - h.gs.fv = [2]f2dot14{0, 0x4000} - h.gs.dv = [2]f2dot14{0, 0x4000} - - case opSVTCA1: - h.gs.pv = [2]f2dot14{0x4000, 0} - h.gs.fv = [2]f2dot14{0x4000, 0} - h.gs.dv = [2]f2dot14{0x4000, 0} - - case opSPVTCA0: - h.gs.pv = [2]f2dot14{0, 0x4000} - h.gs.dv = [2]f2dot14{0, 0x4000} - - case opSPVTCA1: - h.gs.pv = [2]f2dot14{0x4000, 0} - h.gs.dv = [2]f2dot14{0x4000, 0} - - case opSFVTCA0: - h.gs.fv = [2]f2dot14{0, 0x4000} - - case opSFVTCA1: - h.gs.fv = [2]f2dot14{0x4000, 0} - - case opSPVTL0, opSPVTL1, opSFVTL0, opSFVTL1: - top -= 2 - p1 := h.point(0, current, h.stack[top+0]) - p2 := h.point(0, current, h.stack[top+1]) - if p1 == nil || p2 == nil { - return errors.New("truetype: hinting: point out of range") - } - dx := f2dot14(p1.X - p2.X) - dy := f2dot14(p1.Y - p2.Y) - if dx == 0 && dy == 0 { - dx = 0x4000 - } else if opcode&1 != 0 { - // Counter-clockwise rotation. - dx, dy = -dy, dx - } - v := normalize(dx, dy) - if opcode < opSFVTL0 { - h.gs.pv = v - h.gs.dv = v - } else { - h.gs.fv = v - } - - case opSPVFS: - top -= 2 - h.gs.pv = normalize(f2dot14(h.stack[top]), f2dot14(h.stack[top+1])) - h.gs.dv = h.gs.pv - - case opSFVFS: - top -= 2 - h.gs.fv = normalize(f2dot14(h.stack[top]), f2dot14(h.stack[top+1])) - - case opGPV: - if top+1 >= len(h.stack) { - return errors.New("truetype: hinting: stack overflow") - } - h.stack[top+0] = int32(h.gs.pv[0]) - h.stack[top+1] = int32(h.gs.pv[1]) - top += 2 - - case opGFV: - if top+1 >= len(h.stack) { - return errors.New("truetype: hinting: stack overflow") - } - h.stack[top+0] = int32(h.gs.fv[0]) - h.stack[top+1] = int32(h.gs.fv[1]) - top += 2 - - case opSFVTPV: - h.gs.fv = h.gs.pv - - case opISECT: - top -= 5 - p := h.point(2, current, h.stack[top+0]) - a0 := h.point(1, current, h.stack[top+1]) - a1 := h.point(1, current, h.stack[top+2]) - b0 := h.point(0, current, h.stack[top+3]) - b1 := h.point(0, current, h.stack[top+4]) - if p == nil || a0 == nil || a1 == nil || b0 == nil || b1 == nil { - return errors.New("truetype: hinting: point out of range") - } - - dbx := b1.X - b0.X - dby := b1.Y - b0.Y - dax := a1.X - a0.X - day := a1.Y - a0.Y - dx := b0.X - a0.X - dy := b0.Y - a0.Y - discriminant := mulDiv(int64(dax), int64(-dby), 0x40) + - mulDiv(int64(day), int64(dbx), 0x40) - dotProduct := mulDiv(int64(dax), int64(dbx), 0x40) + - mulDiv(int64(day), int64(dby), 0x40) - // The discriminant above is actually a cross product of vectors - // da and db. Together with the dot product, they can be used as - // surrogates for sine and cosine of the angle between the vectors. - // Indeed, - // dotproduct = |da||db|cos(angle) - // discriminant = |da||db|sin(angle) - // We use these equations to reject grazing intersections by - // thresholding abs(tan(angle)) at 1/19, corresponding to 3 degrees. - absDisc, absDotP := discriminant, dotProduct - if absDisc < 0 { - absDisc = -absDisc - } - if absDotP < 0 { - absDotP = -absDotP - } - if 19*absDisc > absDotP { - val := mulDiv(int64(dx), int64(-dby), 0x40) + - mulDiv(int64(dy), int64(dbx), 0x40) - rx := mulDiv(val, int64(dax), discriminant) - ry := mulDiv(val, int64(day), discriminant) - p.X = a0.X + int32(rx) - p.Y = a0.Y + int32(ry) - } else { - p.X = (a0.X + a1.X + b0.X + b1.X) / 4 - p.Y = (a0.Y + a1.Y + b0.Y + b1.Y) / 4 - } - p.Flags |= flagTouchedX | flagTouchedY - - case opSRP0, opSRP1, opSRP2: - top-- - h.gs.rp[opcode-opSRP0] = h.stack[top] - - case opSZP0, opSZP1, opSZP2: - top-- - h.gs.zp[opcode-opSZP0] = h.stack[top] - - case opSZPS: - top-- - h.gs.zp[0] = h.stack[top] - h.gs.zp[1] = h.stack[top] - h.gs.zp[2] = h.stack[top] - - case opSLOOP: - top-- - if h.stack[top] <= 0 { - return errors.New("truetype: hinting: invalid data") - } - h.gs.loop = h.stack[top] - - case opRTG: - h.gs.roundPeriod = 1 << 6 - h.gs.roundPhase = 0 - h.gs.roundThreshold = 1 << 5 - h.gs.roundSuper45 = false - - case opRTHG: - h.gs.roundPeriod = 1 << 6 - h.gs.roundPhase = 1 << 5 - h.gs.roundThreshold = 1 << 5 - h.gs.roundSuper45 = false - - case opSMD: - top-- - h.gs.minDist = f26dot6(h.stack[top]) - - case opELSE: - opcode = 1 - goto ifelse - - case opJMPR: - top-- - pc += int(h.stack[top]) - continue - - case opSCVTCI: - top-- - h.gs.controlValueCutIn = f26dot6(h.stack[top]) - - case opSSWCI: - top-- - h.gs.singleWidthCutIn = f26dot6(h.stack[top]) - - case opSSW: - top-- - h.gs.singleWidth = f26dot6(h.font.scale(h.scale * h.stack[top])) - - case opDUP: - if top >= len(h.stack) { - return errors.New("truetype: hinting: stack overflow") - } - h.stack[top] = h.stack[top-1] - top++ - - case opPOP: - top-- - - case opCLEAR: - top = 0 - - case opSWAP: - h.stack[top-1], h.stack[top-2] = h.stack[top-2], h.stack[top-1] - - case opDEPTH: - if top >= len(h.stack) { - return errors.New("truetype: hinting: stack overflow") - } - h.stack[top] = int32(top) - top++ - - case opCINDEX, opMINDEX: - x := int(h.stack[top-1]) - if x <= 0 || x >= top { - return errors.New("truetype: hinting: invalid data") - } - h.stack[top-1] = h.stack[top-1-x] - if opcode == opMINDEX { - copy(h.stack[top-1-x:top-1], h.stack[top-x:top]) - top-- - } - - case opALIGNPTS: - top -= 2 - p := h.point(1, current, h.stack[top]) - q := h.point(0, current, h.stack[top+1]) - if p == nil || q == nil { - return errors.New("truetype: hinting: point out of range") - } - d := dotProduct(f26dot6(q.X-p.X), f26dot6(q.Y-p.Y), h.gs.pv) / 2 - h.move(p, +d, true) - h.move(q, -d, true) - - case opUTP: - top-- - p := h.point(0, current, h.stack[top]) - if p == nil { - return errors.New("truetype: hinting: point out of range") - } - p.Flags &^= flagTouchedX | flagTouchedY - - case opLOOPCALL, opCALL: - if callStackTop >= len(callStack) { - return errors.New("truetype: hinting: call stack overflow") - } - top-- - f, ok := h.functions[h.stack[top]] - if !ok { - return errors.New("truetype: hinting: undefined function") - } - callStack[callStackTop] = callStackEntry{program, pc, 1} - if opcode == opLOOPCALL { - top-- - if h.stack[top] == 0 { - break - } - callStack[callStackTop].loopCount = h.stack[top] - } - callStackTop++ - program, pc = f, 0 - continue - - case opFDEF: - // Save all bytecode up until the next ENDF. - startPC := pc + 1 - fdefloop: - for { - pc++ - if pc >= len(program) { - return errors.New("truetype: hinting: unbalanced FDEF") - } - switch program[pc] { - case opFDEF: - return errors.New("truetype: hinting: nested FDEF") - case opENDF: - top-- - h.functions[h.stack[top]] = program[startPC : pc+1] - break fdefloop - default: - var ok bool - pc, ok = skipInstructionPayload(program, pc) - if !ok { - return errors.New("truetype: hinting: unbalanced FDEF") - } - } - } - - case opENDF: - if callStackTop == 0 { - return errors.New("truetype: hinting: call stack underflow") - } - callStackTop-- - callStack[callStackTop].loopCount-- - if callStack[callStackTop].loopCount != 0 { - callStackTop++ - pc = 0 - continue - } - program, pc = callStack[callStackTop].program, callStack[callStackTop].pc - - case opMDAP0, opMDAP1: - top-- - i := h.stack[top] - p := h.point(0, current, i) - if p == nil { - return errors.New("truetype: hinting: point out of range") - } - distance := f26dot6(0) - if opcode == opMDAP1 { - distance = dotProduct(f26dot6(p.X), f26dot6(p.Y), h.gs.pv) - // TODO: metrics compensation. - distance = h.round(distance) - distance - } - h.move(p, distance, true) - h.gs.rp[0] = i - h.gs.rp[1] = i - - case opIUP0, opIUP1: - iupY, mask := opcode == opIUP0, uint32(flagTouchedX) - if iupY { - mask = flagTouchedY - } - prevEnd := 0 - for _, end := range h.ends { - for i := prevEnd; i < end; i++ { - for i < end && h.points[glyphZone][current][i].Flags&mask == 0 { - i++ - } - if i == end { - break - } - firstTouched, curTouched := i, i - i++ - for ; i < end; i++ { - if h.points[glyphZone][current][i].Flags&mask != 0 { - h.iupInterp(iupY, curTouched+1, i-1, curTouched, i) - curTouched = i - } - } - if curTouched == firstTouched { - h.iupShift(iupY, prevEnd, end, curTouched) - } else { - h.iupInterp(iupY, curTouched+1, end-1, curTouched, firstTouched) - if firstTouched > 0 { - h.iupInterp(iupY, prevEnd, firstTouched-1, curTouched, firstTouched) - } - } - } - prevEnd = end - } - - case opSHP0, opSHP1: - if top < int(h.gs.loop) { - return errors.New("truetype: hinting: stack underflow") - } - _, _, d, ok := h.displacement(opcode&1 == 0) - if !ok { - return errors.New("truetype: hinting: point out of range") - } - for ; h.gs.loop != 0; h.gs.loop-- { - top-- - p := h.point(2, current, h.stack[top]) - if p == nil { - return errors.New("truetype: hinting: point out of range") - } - h.move(p, d, true) - } - h.gs.loop = 1 - - case opSHC0, opSHC1: - top-- - zonePointer, i, d, ok := h.displacement(opcode&1 == 0) - if !ok { - return errors.New("truetype: hinting: point out of range") - } - if h.gs.zp[2] == 0 { - // TODO: implement this when we have a glyph that does this. - return errors.New("hinting: unimplemented SHC instruction") - } - contour := h.stack[top] - if contour < 0 || len(ends) <= int(contour) { - return errors.New("truetype: hinting: contour out of range") - } - j0, j1 := int32(0), int32(h.ends[contour]) - if contour > 0 { - j0 = int32(h.ends[contour-1]) - } - move := h.gs.zp[zonePointer] != h.gs.zp[2] - for j := j0; j < j1; j++ { - if move || j != i { - h.move(h.point(2, current, j), d, true) - } - } - - case opSHZ0, opSHZ1: - top-- - zonePointer, i, d, ok := h.displacement(opcode&1 == 0) - if !ok { - return errors.New("truetype: hinting: point out of range") - } - - // As per C Freetype, SHZ doesn't move the phantom points, or mark - // the points as touched. - limit := int32(len(h.points[h.gs.zp[2]][current])) - if h.gs.zp[2] == glyphZone { - limit -= 4 - } - for j := int32(0); j < limit; j++ { - if i != j || h.gs.zp[zonePointer] != h.gs.zp[2] { - h.move(h.point(2, current, j), d, false) - } - } - - case opSHPIX: - top-- - d := f26dot6(h.stack[top]) - if top < int(h.gs.loop) { - return errors.New("truetype: hinting: stack underflow") - } - for ; h.gs.loop != 0; h.gs.loop-- { - top-- - p := h.point(2, current, h.stack[top]) - if p == nil { - return errors.New("truetype: hinting: point out of range") - } - h.move(p, d, true) - } - h.gs.loop = 1 - - case opIP: - if top < int(h.gs.loop) { - return errors.New("truetype: hinting: stack underflow") - } - pointType := inFontUnits - twilight := h.gs.zp[0] == 0 || h.gs.zp[1] == 0 || h.gs.zp[2] == 0 - if twilight { - pointType = unhinted - } - p := h.point(1, pointType, h.gs.rp[2]) - oldP := h.point(0, pointType, h.gs.rp[1]) - oldRange := dotProduct(f26dot6(p.X-oldP.X), f26dot6(p.Y-oldP.Y), h.gs.dv) - - p = h.point(1, current, h.gs.rp[2]) - curP := h.point(0, current, h.gs.rp[1]) - curRange := dotProduct(f26dot6(p.X-curP.X), f26dot6(p.Y-curP.Y), h.gs.pv) - for ; h.gs.loop != 0; h.gs.loop-- { - top-- - i := h.stack[top] - p = h.point(2, pointType, i) - oldDist := dotProduct(f26dot6(p.X-oldP.X), f26dot6(p.Y-oldP.Y), h.gs.dv) - p = h.point(2, current, i) - curDist := dotProduct(f26dot6(p.X-curP.X), f26dot6(p.Y-curP.Y), h.gs.pv) - newDist := f26dot6(0) - if oldDist != 0 { - if oldRange != 0 { - newDist = f26dot6(mulDiv(int64(oldDist), int64(curRange), int64(oldRange))) - } else { - newDist = -oldDist - } - } - h.move(p, newDist-curDist, true) - } - h.gs.loop = 1 - - case opMSIRP0, opMSIRP1: - top -= 2 - i := h.stack[top] - distance := f26dot6(h.stack[top+1]) - - // TODO: special case h.gs.zp[1] == 0 in C Freetype. - ref := h.point(0, current, h.gs.rp[0]) - p := h.point(1, current, i) - if ref == nil || p == nil { - return errors.New("truetype: hinting: point out of range") - } - curDist := dotProduct(f26dot6(p.X-ref.X), f26dot6(p.Y-ref.Y), h.gs.pv) - - // Set-RP0 bit. - if opcode == opMSIRP1 { - h.gs.rp[0] = i - } - h.gs.rp[1] = h.gs.rp[0] - h.gs.rp[2] = i - - // Move the point. - h.move(p, distance-curDist, true) - - case opALIGNRP: - if top < int(h.gs.loop) { - return errors.New("truetype: hinting: stack underflow") - } - ref := h.point(0, current, h.gs.rp[0]) - if ref == nil { - return errors.New("truetype: hinting: point out of range") - } - for ; h.gs.loop != 0; h.gs.loop-- { - top-- - p := h.point(1, current, h.stack[top]) - if p == nil { - return errors.New("truetype: hinting: point out of range") - } - h.move(p, -dotProduct(f26dot6(p.X-ref.X), f26dot6(p.Y-ref.Y), h.gs.pv), true) - } - h.gs.loop = 1 - - case opRTDG: - h.gs.roundPeriod = 1 << 5 - h.gs.roundPhase = 0 - h.gs.roundThreshold = 1 << 4 - h.gs.roundSuper45 = false - - case opMIAP0, opMIAP1: - top -= 2 - i := h.stack[top] - distance := h.getScaledCVT(h.stack[top+1]) - if h.gs.zp[0] == 0 { - p := h.point(0, unhinted, i) - q := h.point(0, current, i) - p.X = int32((int64(distance) * int64(h.gs.fv[0])) >> 14) - p.Y = int32((int64(distance) * int64(h.gs.fv[1])) >> 14) - *q = *p - } - p := h.point(0, current, i) - oldDist := dotProduct(f26dot6(p.X), f26dot6(p.Y), h.gs.pv) - if opcode == opMIAP1 { - if (distance - oldDist).abs() > h.gs.controlValueCutIn { - distance = oldDist - } - // TODO: metrics compensation. - distance = h.round(distance) - } - h.move(p, distance-oldDist, true) - h.gs.rp[0] = i - h.gs.rp[1] = i - - case opNPUSHB: - opcode = 0 - goto push - - case opNPUSHW: - opcode = 0x80 - goto push - - case opWS: - top -= 2 - i := int(h.stack[top]) - if i < 0 || len(h.store) <= i { - return errors.New("truetype: hinting: invalid data") - } - h.store[i] = h.stack[top+1] - - case opRS: - i := int(h.stack[top-1]) - if i < 0 || len(h.store) <= i { - return errors.New("truetype: hinting: invalid data") - } - h.stack[top-1] = h.store[i] - - case opWCVTP: - top -= 2 - h.setScaledCVT(h.stack[top], f26dot6(h.stack[top+1])) - - case opRCVT: - h.stack[top-1] = int32(h.getScaledCVT(h.stack[top-1])) - - case opGC0, opGC1: - i := h.stack[top-1] - if opcode == opGC0 { - p := h.point(2, current, i) - h.stack[top-1] = int32(dotProduct(f26dot6(p.X), f26dot6(p.Y), h.gs.pv)) - } else { - p := h.point(2, unhinted, i) - // Using dv as per C Freetype. - h.stack[top-1] = int32(dotProduct(f26dot6(p.X), f26dot6(p.Y), h.gs.dv)) - } - - case opSCFS: - top -= 2 - i := h.stack[top] - p := h.point(2, current, i) - if p == nil { - return errors.New("truetype: hinting: point out of range") - } - c := dotProduct(f26dot6(p.X), f26dot6(p.Y), h.gs.pv) - h.move(p, f26dot6(h.stack[top+1])-c, true) - if h.gs.zp[2] != 0 { - break - } - q := h.point(2, unhinted, i) - if q == nil { - return errors.New("truetype: hinting: point out of range") - } - q.X = p.X - q.Y = p.Y - - case opMD0, opMD1: - top-- - pt, v, scale := pointType(0), [2]f2dot14{}, false - if opcode == opMD0 { - pt = current - v = h.gs.pv - } else if h.gs.zp[0] == 0 || h.gs.zp[1] == 0 { - pt = unhinted - v = h.gs.dv - } else { - pt = inFontUnits - v = h.gs.dv - scale = true - } - p := h.point(0, pt, h.stack[top-1]) - q := h.point(1, pt, h.stack[top]) - if p == nil || q == nil { - return errors.New("truetype: hinting: point out of range") - } - d := int32(dotProduct(f26dot6(p.X-q.X), f26dot6(p.Y-q.Y), v)) - if scale { - d = int32(int64(d*h.scale) / int64(h.font.fUnitsPerEm)) - } - h.stack[top-1] = d - - case opMPPEM, opMPS: - if top >= len(h.stack) { - return errors.New("truetype: hinting: stack overflow") - } - // For MPS, point size should be irrelevant; we return the PPEM. - h.stack[top] = h.scale >> 6 - top++ - - case opFLIPON, opFLIPOFF: - h.gs.autoFlip = opcode == opFLIPON - - case opDEBUG: - // No-op. - - case opLT: - top-- - h.stack[top-1] = bool2int32(h.stack[top-1] < h.stack[top]) - - case opLTEQ: - top-- - h.stack[top-1] = bool2int32(h.stack[top-1] <= h.stack[top]) - - case opGT: - top-- - h.stack[top-1] = bool2int32(h.stack[top-1] > h.stack[top]) - - case opGTEQ: - top-- - h.stack[top-1] = bool2int32(h.stack[top-1] >= h.stack[top]) - - case opEQ: - top-- - h.stack[top-1] = bool2int32(h.stack[top-1] == h.stack[top]) - - case opNEQ: - top-- - h.stack[top-1] = bool2int32(h.stack[top-1] != h.stack[top]) - - case opODD, opEVEN: - i := h.round(f26dot6(h.stack[top-1])) >> 6 - h.stack[top-1] = int32(i&1) ^ int32(opcode-opODD) - - case opIF: - top-- - if h.stack[top] == 0 { - opcode = 0 - goto ifelse - } - - case opEIF: - // No-op. - - case opAND: - top-- - h.stack[top-1] = bool2int32(h.stack[top-1] != 0 && h.stack[top] != 0) - - case opOR: - top-- - h.stack[top-1] = bool2int32(h.stack[top-1]|h.stack[top] != 0) - - case opNOT: - h.stack[top-1] = bool2int32(h.stack[top-1] == 0) - - case opDELTAP1: - goto delta - - case opSDB: - top-- - h.gs.deltaBase = h.stack[top] - - case opSDS: - top-- - h.gs.deltaShift = h.stack[top] - - case opADD: - top-- - h.stack[top-1] += h.stack[top] - - case opSUB: - top-- - h.stack[top-1] -= h.stack[top] - - case opDIV: - top-- - if h.stack[top] == 0 { - return errors.New("truetype: hinting: division by zero") - } - h.stack[top-1] = int32(f26dot6(h.stack[top-1]).div(f26dot6(h.stack[top]))) - - case opMUL: - top-- - h.stack[top-1] = int32(f26dot6(h.stack[top-1]).mul(f26dot6(h.stack[top]))) - - case opABS: - if h.stack[top-1] < 0 { - h.stack[top-1] = -h.stack[top-1] - } - - case opNEG: - h.stack[top-1] = -h.stack[top-1] - - case opFLOOR: - h.stack[top-1] &^= 63 - - case opCEILING: - h.stack[top-1] += 63 - h.stack[top-1] &^= 63 - - case opROUND00, opROUND01, opROUND10, opROUND11: - // The four flavors of opROUND are equivalent. See the comment below on - // opNROUND for the rationale. - h.stack[top-1] = int32(h.round(f26dot6(h.stack[top-1]))) - - case opNROUND00, opNROUND01, opNROUND10, opNROUND11: - // No-op. The spec says to add one of four "compensations for the engine - // characteristics", to cater for things like "different dot-size printers". - // https://developer.apple.com/fonts/TTRefMan/RM02/Chap2.html#engine_compensation - // This code does not implement engine compensation, as we don't expect to - // be used to output on dot-matrix printers. - - case opWCVTF: - top -= 2 - h.setScaledCVT(h.stack[top], f26dot6(h.font.scale(h.scale*h.stack[top+1]))) - - case opDELTAP2, opDELTAP3, opDELTAC1, opDELTAC2, opDELTAC3: - goto delta - - case opSROUND, opS45ROUND: - top-- - switch (h.stack[top] >> 6) & 0x03 { - case 0: - h.gs.roundPeriod = 1 << 5 - case 1, 3: - h.gs.roundPeriod = 1 << 6 - case 2: - h.gs.roundPeriod = 1 << 7 - } - h.gs.roundSuper45 = opcode == opS45ROUND - if h.gs.roundSuper45 { - // The spec says to multiply by √2, but the C Freetype code says 1/√2. - // We go with 1/√2. - h.gs.roundPeriod *= 46341 - h.gs.roundPeriod /= 65536 - } - h.gs.roundPhase = h.gs.roundPeriod * f26dot6((h.stack[top]>>4)&0x03) / 4 - if x := h.stack[top] & 0x0f; x != 0 { - h.gs.roundThreshold = h.gs.roundPeriod * f26dot6(x-4) / 8 - } else { - h.gs.roundThreshold = h.gs.roundPeriod - 1 - } - - case opJROT: - top -= 2 - if h.stack[top+1] != 0 { - pc += int(h.stack[top]) - continue - } - - case opJROF: - top -= 2 - if h.stack[top+1] == 0 { - pc += int(h.stack[top]) - continue - } - - case opROFF: - h.gs.roundPeriod = 0 - h.gs.roundPhase = 0 - h.gs.roundThreshold = 0 - h.gs.roundSuper45 = false - - case opRUTG: - h.gs.roundPeriod = 1 << 6 - h.gs.roundPhase = 0 - h.gs.roundThreshold = 1<<6 - 1 - h.gs.roundSuper45 = false - - case opRDTG: - h.gs.roundPeriod = 1 << 6 - h.gs.roundPhase = 0 - h.gs.roundThreshold = 0 - h.gs.roundSuper45 = false - - case opSANGW, opAA: - // These ops are "anachronistic" and no longer used. - top-- - - case opFLIPPT: - if top < int(h.gs.loop) { - return errors.New("truetype: hinting: stack underflow") - } - points := h.points[glyphZone][current] - for ; h.gs.loop != 0; h.gs.loop-- { - top-- - i := h.stack[top] - if i < 0 || len(points) <= int(i) { - return errors.New("truetype: hinting: point out of range") - } - points[i].Flags ^= flagOnCurve - } - h.gs.loop = 1 - - case opFLIPRGON, opFLIPRGOFF: - top -= 2 - i, j, points := h.stack[top], h.stack[top+1], h.points[glyphZone][current] - if i < 0 || len(points) <= int(i) || j < 0 || len(points) <= int(j) { - return errors.New("truetype: hinting: point out of range") - } - for ; i <= j; i++ { - if opcode == opFLIPRGON { - points[i].Flags |= flagOnCurve - } else { - points[i].Flags &^= flagOnCurve - } - } - - case opSCANCTRL: - // We do not support dropout control, as we always rasterize grayscale glyphs. - top-- - - case opSDPVTL0, opSDPVTL1: - top -= 2 - for i := 0; i < 2; i++ { - pt := unhinted - if i != 0 { - pt = current - } - p := h.point(1, pt, h.stack[top]) - q := h.point(2, pt, h.stack[top+1]) - if p == nil || q == nil { - return errors.New("truetype: hinting: point out of range") - } - dx := f2dot14(p.X - q.X) - dy := f2dot14(p.Y - q.Y) - if dx == 0 && dy == 0 { - dx = 0x4000 - } else if opcode&1 != 0 { - // Counter-clockwise rotation. - dx, dy = -dy, dx - } - if i == 0 { - h.gs.dv = normalize(dx, dy) - } else { - h.gs.pv = normalize(dx, dy) - } - } - - case opGETINFO: - res := int32(0) - if h.stack[top-1]&(1<<0) != 0 { - // Set the engine version. We hard-code this to 35, the same as - // the C freetype code, which says that "Version~35 corresponds - // to MS rasterizer v.1.7 as used e.g. in Windows~98". - res |= 35 - } - if h.stack[top-1]&(1<<5) != 0 { - // Set that we support grayscale. - res |= 1 << 12 - } - // We set no other bits, as we do not support rotated or stretched glyphs. - h.stack[top-1] = res - - case opIDEF: - // IDEF is for ancient versions of the bytecode interpreter, and is no longer used. - return errors.New("truetype: hinting: unsupported IDEF instruction") - - case opROLL: - h.stack[top-1], h.stack[top-3], h.stack[top-2] = - h.stack[top-3], h.stack[top-2], h.stack[top-1] - - case opMAX: - top-- - if h.stack[top-1] < h.stack[top] { - h.stack[top-1] = h.stack[top] - } - - case opMIN: - top-- - if h.stack[top-1] > h.stack[top] { - h.stack[top-1] = h.stack[top] - } - - case opSCANTYPE: - // We do not support dropout control, as we always rasterize grayscale glyphs. - top-- - - case opINSTCTRL: - // TODO: support instruction execution control? It seems rare, and even when - // nominally used (e.g. Source Sans Pro), it seems conditional on extreme or - // unusual rasterization conditions. For example, the code snippet at - // https://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html#INSTCTRL - // uses INSTCTRL when grid-fitting a rotated or stretched glyph, but - // freetype-go does not support rotated or stretched glyphs. - top -= 2 - - default: - if opcode < opPUSHB000 { - return errors.New("truetype: hinting: unrecognized instruction") - } - - if opcode < opMDRP00000 { - // PUSHxxxx opcode. - - if opcode < opPUSHW000 { - opcode -= opPUSHB000 - 1 - } else { - opcode -= opPUSHW000 - 1 - 0x80 - } - goto push - } - - if opcode < opMIRP00000 { - // MDRPxxxxx opcode. - - top-- - i := h.stack[top] - ref := h.point(0, current, h.gs.rp[0]) - p := h.point(1, current, i) - if ref == nil || p == nil { - return errors.New("truetype: hinting: point out of range") - } - - oldDist := f26dot6(0) - if h.gs.zp[0] == 0 || h.gs.zp[1] == 0 { - p0 := h.point(1, unhinted, i) - p1 := h.point(0, unhinted, h.gs.rp[0]) - oldDist = dotProduct(f26dot6(p0.X-p1.X), f26dot6(p0.Y-p1.Y), h.gs.dv) - } else { - p0 := h.point(1, inFontUnits, i) - p1 := h.point(0, inFontUnits, h.gs.rp[0]) - oldDist = dotProduct(f26dot6(p0.X-p1.X), f26dot6(p0.Y-p1.Y), h.gs.dv) - oldDist = f26dot6(h.font.scale(h.scale * int32(oldDist))) - } - - // Single-width cut-in test. - if x := (oldDist - h.gs.singleWidth).abs(); x < h.gs.singleWidthCutIn { - if oldDist >= 0 { - oldDist = +h.gs.singleWidth - } else { - oldDist = -h.gs.singleWidth - } - } - - // Rounding bit. - // TODO: metrics compensation. - distance := oldDist - if opcode&0x04 != 0 { - distance = h.round(oldDist) - } - - // Minimum distance bit. - if opcode&0x08 != 0 { - if oldDist >= 0 { - if distance < h.gs.minDist { - distance = h.gs.minDist - } - } else { - if distance > -h.gs.minDist { - distance = -h.gs.minDist - } - } - } - - // Set-RP0 bit. - h.gs.rp[1] = h.gs.rp[0] - h.gs.rp[2] = i - if opcode&0x10 != 0 { - h.gs.rp[0] = i - } - - // Move the point. - oldDist = dotProduct(f26dot6(p.X-ref.X), f26dot6(p.Y-ref.Y), h.gs.pv) - h.move(p, distance-oldDist, true) - - } else { - // MIRPxxxxx opcode. - - top -= 2 - i := h.stack[top] - cvtDist := h.getScaledCVT(h.stack[top+1]) - if (cvtDist - h.gs.singleWidth).abs() < h.gs.singleWidthCutIn { - if cvtDist >= 0 { - cvtDist = +h.gs.singleWidth - } else { - cvtDist = -h.gs.singleWidth - } - } - - if h.gs.zp[1] == 0 { - // TODO: implement once we have a .ttf file that triggers - // this, so that we can step through C's freetype. - return errors.New("truetype: hinting: unimplemented twilight point adjustment") - } - - ref := h.point(0, unhinted, h.gs.rp[0]) - p := h.point(1, unhinted, i) - if ref == nil || p == nil { - return errors.New("truetype: hinting: point out of range") - } - oldDist := dotProduct(f26dot6(p.X-ref.X), f26dot6(p.Y-ref.Y), h.gs.dv) - - ref = h.point(0, current, h.gs.rp[0]) - p = h.point(1, current, i) - if ref == nil || p == nil { - return errors.New("truetype: hinting: point out of range") - } - curDist := dotProduct(f26dot6(p.X-ref.X), f26dot6(p.Y-ref.Y), h.gs.pv) - - if h.gs.autoFlip && oldDist^cvtDist < 0 { - cvtDist = -cvtDist - } - - // Rounding bit. - // TODO: metrics compensation. - distance := cvtDist - if opcode&0x04 != 0 { - // The CVT value is only used if close enough to oldDist. - if (h.gs.zp[0] == h.gs.zp[1]) && - ((cvtDist - oldDist).abs() > h.gs.controlValueCutIn) { - - distance = oldDist - } - distance = h.round(distance) - } - - // Minimum distance bit. - if opcode&0x08 != 0 { - if oldDist >= 0 { - if distance < h.gs.minDist { - distance = h.gs.minDist - } - } else { - if distance > -h.gs.minDist { - distance = -h.gs.minDist - } - } - } - - // Set-RP0 bit. - h.gs.rp[1] = h.gs.rp[0] - h.gs.rp[2] = i - if opcode&0x10 != 0 { - h.gs.rp[0] = i - } - - // Move the point. - h.move(p, distance-curDist, true) - } - } - pc++ - continue - - ifelse: - // Skip past bytecode until the next ELSE (if opcode == 0) or the - // next EIF (for all opcodes). Opcode == 0 means that we have come - // from an IF. Opcode == 1 means that we have come from an ELSE. - { - ifelseloop: - for depth := 0; ; { - pc++ - if pc >= len(program) { - return errors.New("truetype: hinting: unbalanced IF or ELSE") - } - switch program[pc] { - case opIF: - depth++ - case opELSE: - if depth == 0 && opcode == 0 { - break ifelseloop - } - case opEIF: - depth-- - if depth < 0 { - break ifelseloop - } - default: - var ok bool - pc, ok = skipInstructionPayload(program, pc) - if !ok { - return errors.New("truetype: hinting: unbalanced IF or ELSE") - } - } - } - pc++ - continue - } - - push: - // Push n elements from the program to the stack, where n is the low 7 bits of - // opcode. If the low 7 bits are zero, then n is the next byte from the program. - // The high bit being 0 means that the elements are zero-extended bytes. - // The high bit being 1 means that the elements are sign-extended words. - { - width := 1 - if opcode&0x80 != 0 { - opcode &^= 0x80 - width = 2 - } - if opcode == 0 { - pc++ - if pc >= len(program) { - return errors.New("truetype: hinting: insufficient data") - } - opcode = program[pc] - } - pc++ - if top+int(opcode) > len(h.stack) { - return errors.New("truetype: hinting: stack overflow") - } - if pc+width*int(opcode) > len(program) { - return errors.New("truetype: hinting: insufficient data") - } - for ; opcode > 0; opcode-- { - if width == 1 { - h.stack[top] = int32(program[pc]) - } else { - h.stack[top] = int32(int8(program[pc]))<<8 | int32(program[pc+1]) - } - top++ - pc += width - } - continue - } - - delta: - { - if opcode >= opDELTAC1 && !h.scaledCVTInitialized { - h.initializeScaledCVT() - } - top-- - n := h.stack[top] - if int32(top) < 2*n { - return errors.New("truetype: hinting: stack underflow") - } - for ; n > 0; n-- { - top -= 2 - b := h.stack[top] - c := (b & 0xf0) >> 4 - switch opcode { - case opDELTAP2, opDELTAC2: - c += 16 - case opDELTAP3, opDELTAC3: - c += 32 - } - c += h.gs.deltaBase - if ppem := (h.scale + 1<<5) >> 6; ppem != c { - continue - } - b = (b & 0x0f) - 8 - if b >= 0 { - b++ - } - b = b * 64 / (1 << uint32(h.gs.deltaShift)) - if opcode >= opDELTAC1 { - a := h.stack[top+1] - if a < 0 || len(h.scaledCVT) <= int(a) { - return errors.New("truetype: hinting: index out of range") - } - h.scaledCVT[a] += f26dot6(b) - } else { - p := h.point(0, current, h.stack[top+1]) - if p == nil { - return errors.New("truetype: hinting: point out of range") - } - h.move(p, f26dot6(b), true) - } - } - pc++ - continue - } - } - return nil -} - -func (h *hinter) initializeScaledCVT() { - h.scaledCVTInitialized = true - if n := len(h.font.cvt) / 2; n <= cap(h.scaledCVT) { - h.scaledCVT = h.scaledCVT[:n] - } else { - if n < 32 { - n = 32 - } - h.scaledCVT = make([]f26dot6, len(h.font.cvt)/2, n) - } - for i := range h.scaledCVT { - unscaled := uint16(h.font.cvt[2*i])<<8 | uint16(h.font.cvt[2*i+1]) - h.scaledCVT[i] = f26dot6(h.font.scale(h.scale * int32(int16(unscaled)))) - } -} - -// getScaledCVT returns the scaled value from the font's Control Value Table. -func (h *hinter) getScaledCVT(i int32) f26dot6 { - if !h.scaledCVTInitialized { - h.initializeScaledCVT() - } - if i < 0 || len(h.scaledCVT) <= int(i) { - return 0 - } - return h.scaledCVT[i] -} - -// setScaledCVT overrides the scaled value from the font's Control Value Table. -func (h *hinter) setScaledCVT(i int32, v f26dot6) { - if !h.scaledCVTInitialized { - h.initializeScaledCVT() - } - if i < 0 || len(h.scaledCVT) <= int(i) { - return - } - h.scaledCVT[i] = v -} - -func (h *hinter) point(zonePointer uint32, pt pointType, i int32) *Point { - points := h.points[h.gs.zp[zonePointer]][pt] - if i < 0 || len(points) <= int(i) { - return nil - } - return &points[i] -} - -func (h *hinter) move(p *Point, distance f26dot6, touch bool) { - fvx := int64(h.gs.fv[0]) - pvx := int64(h.gs.pv[0]) - if fvx == 0x4000 && pvx == 0x4000 { - p.X += int32(distance) - if touch { - p.Flags |= flagTouchedX - } - return - } - - fvy := int64(h.gs.fv[1]) - pvy := int64(h.gs.pv[1]) - if fvy == 0x4000 && pvy == 0x4000 { - p.Y += int32(distance) - if touch { - p.Flags |= flagTouchedY - } - return - } - - fvDotPv := (fvx*pvx + fvy*pvy) >> 14 - - if fvx != 0 { - p.X += int32(mulDiv(fvx, int64(distance), fvDotPv)) - if touch { - p.Flags |= flagTouchedX - } - } - - if fvy != 0 { - p.Y += int32(mulDiv(fvy, int64(distance), fvDotPv)) - if touch { - p.Flags |= flagTouchedY - } - } -} - -func (h *hinter) iupInterp(interpY bool, p1, p2, ref1, ref2 int) { - if p1 > p2 { - return - } - if ref1 >= len(h.points[glyphZone][current]) || - ref2 >= len(h.points[glyphZone][current]) { - return - } - - var ifu1, ifu2 int32 - if interpY { - ifu1 = h.points[glyphZone][inFontUnits][ref1].Y - ifu2 = h.points[glyphZone][inFontUnits][ref2].Y - } else { - ifu1 = h.points[glyphZone][inFontUnits][ref1].X - ifu2 = h.points[glyphZone][inFontUnits][ref2].X - } - if ifu1 > ifu2 { - ifu1, ifu2 = ifu2, ifu1 - ref1, ref2 = ref2, ref1 - } - - var unh1, unh2, delta1, delta2 int32 - if interpY { - unh1 = h.points[glyphZone][unhinted][ref1].Y - unh2 = h.points[glyphZone][unhinted][ref2].Y - delta1 = h.points[glyphZone][current][ref1].Y - unh1 - delta2 = h.points[glyphZone][current][ref2].Y - unh2 - } else { - unh1 = h.points[glyphZone][unhinted][ref1].X - unh2 = h.points[glyphZone][unhinted][ref2].X - delta1 = h.points[glyphZone][current][ref1].X - unh1 - delta2 = h.points[glyphZone][current][ref2].X - unh2 - } - - var xy, ifuXY int32 - if ifu1 == ifu2 { - for i := p1; i <= p2; i++ { - if interpY { - xy = h.points[glyphZone][unhinted][i].Y - } else { - xy = h.points[glyphZone][unhinted][i].X - } - - if xy <= unh1 { - xy += delta1 - } else { - xy += delta2 - } - - if interpY { - h.points[glyphZone][current][i].Y = xy - } else { - h.points[glyphZone][current][i].X = xy - } - } - return - } - - scale, scaleOK := int64(0), false - for i := p1; i <= p2; i++ { - if interpY { - xy = h.points[glyphZone][unhinted][i].Y - ifuXY = h.points[glyphZone][inFontUnits][i].Y - } else { - xy = h.points[glyphZone][unhinted][i].X - ifuXY = h.points[glyphZone][inFontUnits][i].X - } - - if xy <= unh1 { - xy += delta1 - } else if xy >= unh2 { - xy += delta2 - } else { - if !scaleOK { - scaleOK = true - scale = mulDiv(int64(unh2+delta2-unh1-delta1), 0x10000, int64(ifu2-ifu1)) - } - numer := int64(ifuXY-ifu1) * scale - if numer >= 0 { - numer += 0x8000 - } else { - numer -= 0x8000 - } - xy = unh1 + delta1 + int32(numer/0x10000) - } - - if interpY { - h.points[glyphZone][current][i].Y = xy - } else { - h.points[glyphZone][current][i].X = xy - } - } -} - -func (h *hinter) iupShift(interpY bool, p1, p2, p int) { - var delta int32 - if interpY { - delta = h.points[glyphZone][current][p].Y - h.points[glyphZone][unhinted][p].Y - } else { - delta = h.points[glyphZone][current][p].X - h.points[glyphZone][unhinted][p].X - } - if delta == 0 { - return - } - for i := p1; i < p2; i++ { - if i == p { - continue - } - if interpY { - h.points[glyphZone][current][i].Y += delta - } else { - h.points[glyphZone][current][i].X += delta - } - } -} - -func (h *hinter) displacement(useZP1 bool) (zonePointer uint32, i int32, d f26dot6, ok bool) { - zonePointer, i = uint32(0), h.gs.rp[1] - if useZP1 { - zonePointer, i = 1, h.gs.rp[2] - } - p := h.point(zonePointer, current, i) - q := h.point(zonePointer, unhinted, i) - if p == nil || q == nil { - return 0, 0, 0, false - } - d = dotProduct(f26dot6(p.X-q.X), f26dot6(p.Y-q.Y), h.gs.pv) - return zonePointer, i, d, true -} - -// skipInstructionPayload increments pc by the extra data that follows a -// variable length PUSHB or PUSHW instruction. -func skipInstructionPayload(program []byte, pc int) (newPC int, ok bool) { - switch program[pc] { - case opNPUSHB: - pc++ - if pc >= len(program) { - return 0, false - } - pc += int(program[pc]) - case opNPUSHW: - pc++ - if pc >= len(program) { - return 0, false - } - pc += 2 * int(program[pc]) - case opPUSHB000, opPUSHB001, opPUSHB010, opPUSHB011, - opPUSHB100, opPUSHB101, opPUSHB110, opPUSHB111: - pc += int(program[pc] - (opPUSHB000 - 1)) - case opPUSHW000, opPUSHW001, opPUSHW010, opPUSHW011, - opPUSHW100, opPUSHW101, opPUSHW110, opPUSHW111: - pc += 2 * int(program[pc]-(opPUSHW000-1)) - } - return pc, true -} - -// f2dot14 is a 2.14 fixed point number. -type f2dot14 int16 - -func normalize(x, y f2dot14) [2]f2dot14 { - fx, fy := float64(x), float64(y) - l := 0x4000 / math.Hypot(fx, fy) - fx *= l - if fx >= 0 { - fx += 0.5 - } else { - fx -= 0.5 - } - fy *= l - if fy >= 0 { - fy += 0.5 - } else { - fy -= 0.5 - } - return [2]f2dot14{f2dot14(fx), f2dot14(fy)} -} - -// f26dot6 is a 26.6 fixed point number. -type f26dot6 int32 - -// abs returns abs(x) in 26.6 fixed point arithmetic. -func (x f26dot6) abs() f26dot6 { - if x < 0 { - return -x - } - return x -} - -// div returns x/y in 26.6 fixed point arithmetic. -func (x f26dot6) div(y f26dot6) f26dot6 { - return f26dot6((int64(x) << 6) / int64(y)) -} - -// mul returns x*y in 26.6 fixed point arithmetic. -func (x f26dot6) mul(y f26dot6) f26dot6 { - return f26dot6((int64(x)*int64(y) + 1<<5) >> 6) -} - -// dotProduct returns the dot product of [x, y] and q. It is almost the same as -// px := int64(x) -// py := int64(y) -// qx := int64(q[0]) -// qy := int64(q[1]) -// return f26dot6((px*qx + py*qy + 1<<13) >> 14) -// except that the computation is done with 32-bit integers to produce exactly -// the same rounding behavior as C Freetype. -func dotProduct(x, y f26dot6, q [2]f2dot14) f26dot6 { - // Compute x*q[0] as 64-bit value. - l := uint32((int32(x) & 0xFFFF) * int32(q[0])) - m := (int32(x) >> 16) * int32(q[0]) - - lo1 := l + (uint32(m) << 16) - hi1 := (m >> 16) + (int32(l) >> 31) + bool2int32(lo1 < l) - - // Compute y*q[1] as 64-bit value. - l = uint32((int32(y) & 0xFFFF) * int32(q[1])) - m = (int32(y) >> 16) * int32(q[1]) - - lo2 := l + (uint32(m) << 16) - hi2 := (m >> 16) + (int32(l) >> 31) + bool2int32(lo2 < l) - - // Add them. - lo := lo1 + lo2 - hi := hi1 + hi2 + bool2int32(lo < lo1) - - // Divide the result by 2^14 with rounding. - s := hi >> 31 - l = lo + uint32(s) - hi += s + bool2int32(l < lo) - lo = l - - l = lo + 0x2000 - hi += bool2int32(l < lo) - - return f26dot6((uint32(hi) << 18) | (l >> 14)) -} - -// mulDiv returns x*y/z, rounded to the nearest integer. -func mulDiv(x, y, z int64) int64 { - xy := x * y - if z < 0 { - xy, z = -xy, -z - } - if xy >= 0 { - xy += z / 2 - } else { - xy -= z / 2 - } - return xy / z -} - -// round rounds the given number. The rounding algorithm is described at -// https://developer.apple.com/fonts/TTRefMan/RM02/Chap2.html#rounding -func (h *hinter) round(x f26dot6) f26dot6 { - if h.gs.roundPeriod == 0 { - // Rounding is off. - return x - } - if x >= 0 { - ret := x - h.gs.roundPhase + h.gs.roundThreshold - if h.gs.roundSuper45 { - ret /= h.gs.roundPeriod - ret *= h.gs.roundPeriod - } else { - ret &= -h.gs.roundPeriod - } - if x != 0 && ret < 0 { - ret = 0 - } - return ret + h.gs.roundPhase - } - ret := -x - h.gs.roundPhase + h.gs.roundThreshold - if h.gs.roundSuper45 { - ret /= h.gs.roundPeriod - ret *= h.gs.roundPeriod - } else { - ret &= -h.gs.roundPeriod - } - if ret < 0 { - ret = 0 - } - return -ret - h.gs.roundPhase -} - -func bool2int32(b bool) int32 { - if b { - return 1 - } - return 0 -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/hint_test.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/hint_test.go deleted file mode 100644 index c8b8d604df..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/hint_test.go +++ /dev/null @@ -1,673 +0,0 @@ -// Copyright 2012 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package truetype - -import ( - "reflect" - "strings" - "testing" -) - -func TestBytecode(t *testing.T) { - testCases := []struct { - desc string - prog []byte - want []int32 - errStr string - }{ - { - "underflow", - []byte{ - opDUP, - }, - nil, - "underflow", - }, - { - "infinite loop", - []byte{ - opPUSHW000, // [-1] - 0xff, - 0xff, - opDUP, // [-1, -1] - opJMPR, // [-1] - }, - nil, - "too many steps", - }, - { - "unbalanced if/else", - []byte{ - opPUSHB000, // [0] - 0, - opIF, - }, - nil, - "unbalanced", - }, - { - "vector set/gets", - []byte{ - opSVTCA1, // [] - opGPV, // [0x4000, 0] - opSVTCA0, // [0x4000, 0] - opGFV, // [0x4000, 0, 0, 0x4000] - opNEG, // [0x4000, 0, 0, -0x4000] - opSPVFS, // [0x4000, 0] - opSFVTPV, // [0x4000, 0] - opPUSHB000, // [0x4000, 0, 1] - 1, - opGFV, // [0x4000, 0, 1, 0, -0x4000] - opPUSHB000, // [0x4000, 0, 1, 0, -0x4000, 2] - 2, - }, - []int32{0x4000, 0, 1, 0, -0x4000, 2}, - "", - }, - { - "jumps", - []byte{ - opPUSHB001, // [10, 2] - 10, - 2, - opJMPR, // [10] - opDUP, // not executed - opDUP, // [10, 10] - opPUSHB010, // [10, 10, 20, 2, 1] - 20, - 2, - 1, - opJROT, // [10, 10, 20] - opDUP, // not executed - opDUP, // [10, 10, 20, 20] - opPUSHB010, // [10, 10, 20, 20, 30, 2, 1] - 30, - 2, - 1, - opJROF, // [10, 10, 20, 20, 30] - opDUP, // [10, 10, 20, 20, 30, 30] - opDUP, // [10, 10, 20, 20, 30, 30, 30] - }, - []int32{10, 10, 20, 20, 30, 30, 30}, - "", - }, - { - "stack ops", - []byte{ - opPUSHB010, // [10, 20, 30] - 10, - 20, - 30, - opCLEAR, // [] - opPUSHB010, // [40, 50, 60] - 40, - 50, - 60, - opSWAP, // [40, 60, 50] - opDUP, // [40, 60, 50, 50] - opDUP, // [40, 60, 50, 50, 50] - opPOP, // [40, 60, 50, 50] - opDEPTH, // [40, 60, 50, 50, 4] - opCINDEX, // [40, 60, 50, 50, 40] - opPUSHB000, // [40, 60, 50, 50, 40, 4] - 4, - opMINDEX, // [40, 50, 50, 40, 60] - }, - []int32{40, 50, 50, 40, 60}, - "", - }, - { - "push ops", - []byte{ - opPUSHB000, // [255] - 255, - opPUSHW001, // [255, -2, 253] - 255, - 254, - 0, - 253, - opNPUSHB, // [1, -2, 253, 1, 2] - 2, - 1, - 2, - opNPUSHW, // [1, -2, 253, 1, 2, 0x0405, 0x0607, 0x0809] - 3, - 4, - 5, - 6, - 7, - 8, - 9, - }, - []int32{255, -2, 253, 1, 2, 0x0405, 0x0607, 0x0809}, - "", - }, - { - "store ops", - []byte{ - opPUSHB011, // [1, 22, 3, 44] - 1, - 22, - 3, - 44, - opWS, // [1, 22] - opWS, // [] - opPUSHB000, // [3] - 3, - opRS, // [44] - }, - []int32{44}, - "", - }, - { - "comparison ops", - []byte{ - opPUSHB001, // [10, 20] - 10, - 20, - opLT, // [1] - opPUSHB001, // [1, 10, 20] - 10, - 20, - opLTEQ, // [1, 1] - opPUSHB001, // [1, 1, 10, 20] - 10, - 20, - opGT, // [1, 1, 0] - opPUSHB001, // [1, 1, 0, 10, 20] - 10, - 20, - opGTEQ, // [1, 1, 0, 0] - opEQ, // [1, 1, 1] - opNEQ, // [1, 0] - }, - []int32{1, 0}, - "", - }, - { - "odd/even", - // Calculate odd(2+31/64), odd(2+32/64), even(2), even(1). - []byte{ - opPUSHB000, // [159] - 159, - opODD, // [0] - opPUSHB000, // [0, 160] - 160, - opODD, // [0, 1] - opPUSHB000, // [0, 1, 128] - 128, - opEVEN, // [0, 1, 1] - opPUSHB000, // [0, 1, 1, 64] - 64, - opEVEN, // [0, 1, 1, 0] - }, - []int32{0, 1, 1, 0}, - "", - }, - { - "if true", - []byte{ - opPUSHB001, // [255, 1] - 255, - 1, - opIF, - opPUSHB000, // [255, 2] - 2, - opEIF, - opPUSHB000, // [255, 2, 254] - 254, - }, - []int32{255, 2, 254}, - "", - }, - { - "if false", - []byte{ - opPUSHB001, // [255, 0] - 255, - 0, - opIF, - opPUSHB000, // [255] - 2, - opEIF, - opPUSHB000, // [255, 254] - 254, - }, - []int32{255, 254}, - "", - }, - { - "if/else true", - []byte{ - opPUSHB000, // [1] - 1, - opIF, - opPUSHB000, // [2] - 2, - opELSE, - opPUSHB000, // not executed - 3, - opEIF, - }, - []int32{2}, - "", - }, - { - "if/else false", - []byte{ - opPUSHB000, // [0] - 0, - opIF, - opPUSHB000, // not executed - 2, - opELSE, - opPUSHB000, // [3] - 3, - opEIF, - }, - []int32{3}, - "", - }, - { - "if/else true if/else false", - // 0x58 is the opcode for opIF. The literal 0x58s below are pushed data. - []byte{ - opPUSHB010, // [255, 0, 1] - 255, - 0, - 1, - opIF, - opIF, - opPUSHB001, // not executed - 0x58, - 0x58, - opELSE, - opPUSHW000, // [255, 0x5858] - 0x58, - 0x58, - opEIF, - opELSE, - opIF, - opNPUSHB, // not executed - 3, - 0x58, - 0x58, - 0x58, - opELSE, - opNPUSHW, // not executed - 2, - 0x58, - 0x58, - 0x58, - 0x58, - opEIF, - opEIF, - opPUSHB000, // [255, 0x5858, 254] - 254, - }, - []int32{255, 0x5858, 254}, - "", - }, - { - "if/else false if/else true", - // 0x58 is the opcode for opIF. The literal 0x58s below are pushed data. - []byte{ - opPUSHB010, // [255, 1, 0] - 255, - 1, - 0, - opIF, - opIF, - opPUSHB001, // not executed - 0x58, - 0x58, - opELSE, - opPUSHW000, // not executed - 0x58, - 0x58, - opEIF, - opELSE, - opIF, - opNPUSHB, // [255, 0x58, 0x58, 0x58] - 3, - 0x58, - 0x58, - 0x58, - opELSE, - opNPUSHW, // not executed - 2, - 0x58, - 0x58, - 0x58, - 0x58, - opEIF, - opEIF, - opPUSHB000, // [255, 0x58, 0x58, 0x58, 254] - 254, - }, - []int32{255, 0x58, 0x58, 0x58, 254}, - "", - }, - { - "logical ops", - []byte{ - opPUSHB010, // [0, 10, 20] - 0, - 10, - 20, - opAND, // [0, 1] - opOR, // [1] - opNOT, // [0] - }, - []int32{0}, - "", - }, - { - "arithmetic ops", - // Calculate abs((-(1 - (2*3)))/2 + 1/64). - // The answer is 5/2 + 1/64 in ideal numbers, or 161 in 26.6 fixed point math. - []byte{ - opPUSHB010, // [64, 128, 192] - 1 << 6, - 2 << 6, - 3 << 6, - opMUL, // [64, 384] - opSUB, // [-320] - opNEG, // [320] - opPUSHB000, // [320, 128] - 2 << 6, - opDIV, // [160] - opPUSHB000, // [160, 1] - 1, - opADD, // [161] - opABS, // [161] - }, - []int32{161}, - "", - }, - { - "floor, ceiling", - []byte{ - opPUSHB000, // [96] - 96, - opFLOOR, // [64] - opPUSHB000, // [64, 96] - 96, - opCEILING, // [64, 128] - }, - []int32{64, 128}, - "", - }, - { - "rounding", - // Round 1.40625 (which is 90/64) under various rounding policies. - // See figure 20 of https://developer.apple.com/fonts/TTRefMan/RM02/Chap2.html#rounding - []byte{ - opROFF, // [] - opPUSHB000, // [90] - 90, - opROUND00, // [90] - opRTG, // [90] - opPUSHB000, // [90, 90] - 90, - opROUND00, // [90, 64] - opRTHG, // [90, 64] - opPUSHB000, // [90, 64, 90] - 90, - opROUND00, // [90, 64, 96] - opRDTG, // [90, 64, 96] - opPUSHB000, // [90, 64, 96, 90] - 90, - opROUND00, // [90, 64, 96, 64] - opRUTG, // [90, 64, 96, 64] - opPUSHB000, // [90, 64, 96, 64, 90] - 90, - opROUND00, // [90, 64, 96, 64, 128] - opRTDG, // [90, 64, 96, 64, 128] - opPUSHB000, // [90, 64, 96, 64, 128, 90] - 90, - opROUND00, // [90, 64, 96, 64, 128, 96] - }, - []int32{90, 64, 96, 64, 128, 96}, - "", - }, - { - "super-rounding", - // See figure 20 of https://developer.apple.com/fonts/TTRefMan/RM02/Chap2.html#rounding - // and the sign preservation steps of the "Order of rounding operations" section. - []byte{ - opPUSHB000, // [0x58] - 0x58, - opSROUND, // [] - opPUSHW000, // [-81] - 0xff, - 0xaf, - opROUND00, // [-80] - opPUSHW000, // [-80, -80] - 0xff, - 0xb0, - opROUND00, // [-80, -80] - opPUSHW000, // [-80, -80, -17] - 0xff, - 0xef, - opROUND00, // [-80, -80, -16] - opPUSHW000, // [-80, -80, -16, -16] - 0xff, - 0xf0, - opROUND00, // [-80, -80, -16, -16] - opPUSHB000, // [-80, -80, -16, -16, 0] - 0, - opROUND00, // [-80, -80, -16, -16, 16] - opPUSHB000, // [-80, -80, -16, -16, 16, 16] - 16, - opROUND00, // [-80, -80, -16, -16, 16, 16] - opPUSHB000, // [-80, -80, -16, -16, 16, 16, 47] - 47, - opROUND00, // [-80, -80, -16, -16, 16, 16, 16] - opPUSHB000, // [-80, -80, -16, -16, 16, 16, 16, 48] - 48, - opROUND00, // [-80, -80, -16, -16, 16, 16, 16, 80] - }, - []int32{-80, -80, -16, -16, 16, 16, 16, 80}, - "", - }, - { - "roll", - []byte{ - opPUSHB010, // [1, 2, 3] - 1, - 2, - 3, - opROLL, // [2, 3, 1] - }, - []int32{2, 3, 1}, - "", - }, - { - "max/min", - []byte{ - opPUSHW001, // [-2, -3] - 0xff, - 0xfe, - 0xff, - 0xfd, - opMAX, // [-2] - opPUSHW001, // [-2, -4, -5] - 0xff, - 0xfc, - 0xff, - 0xfb, - opMIN, // [-2, -5] - }, - []int32{-2, -5}, - "", - }, - { - "functions", - []byte{ - opPUSHB011, // [3, 7, 0, 3] - 3, - 7, - 0, - 3, - - opFDEF, // Function #3 (not called) - opPUSHB000, - 98, - opENDF, - - opFDEF, // Function #0 - opDUP, - opADD, - opENDF, - - opFDEF, // Function #7 - opPUSHB001, - 10, - 0, - opCALL, - opDUP, - opENDF, - - opFDEF, // Function #3 (again) - opPUSHB000, - 99, - opENDF, - - opPUSHB001, // [2, 0] - 2, - 0, - opCALL, // [4] - opPUSHB000, // [4, 3] - 3, - opLOOPCALL, // [99, 99, 99, 99] - opPUSHB000, // [99, 99, 99, 99, 7] - 7, - opCALL, // [99, 99, 99, 99, 20, 20] - }, - []int32{99, 99, 99, 99, 20, 20}, - "", - }, - } - - for _, tc := range testCases { - h := &hinter{} - h.init(&Font{ - maxStorage: 32, - maxStackElements: 100, - }, 768) - err, errStr := h.run(tc.prog, nil, nil, nil, nil), "" - if err != nil { - errStr = err.Error() - } - if tc.errStr != "" { - if errStr == "" { - t.Errorf("%s: got no error, want %q", tc.desc, tc.errStr) - } else if !strings.Contains(errStr, tc.errStr) { - t.Errorf("%s: got error %q, want one containing %q", tc.desc, errStr, tc.errStr) - } - continue - } - if errStr != "" { - t.Errorf("%s: got error %q, want none", tc.desc, errStr) - continue - } - got := h.stack[:len(tc.want)] - if !reflect.DeepEqual(got, tc.want) { - t.Errorf("%s: got %v, want %v", tc.desc, got, tc.want) - continue - } - } -} - -// TestMove tests that the hinter.move method matches the output of the C -// Freetype implementation. -func TestMove(t *testing.T) { - h, p := hinter{}, Point{} - testCases := []struct { - pvX, pvY, fvX, fvY f2dot14 - wantX, wantY int32 - }{ - {+0x4000, +0x0000, +0x4000, +0x0000, +1000, +0}, - {+0x4000, +0x0000, -0x4000, +0x0000, +1000, +0}, - {-0x4000, +0x0000, +0x4000, +0x0000, -1000, +0}, - {-0x4000, +0x0000, -0x4000, +0x0000, -1000, +0}, - {+0x0000, +0x4000, +0x0000, +0x4000, +0, +1000}, - {+0x0000, +0x4000, +0x0000, -0x4000, +0, +1000}, - {+0x4000, +0x0000, +0x2d41, +0x2d41, +1000, +1000}, - {+0x4000, +0x0000, -0x2d41, +0x2d41, +1000, -1000}, - {+0x4000, +0x0000, +0x2d41, -0x2d41, +1000, -1000}, - {+0x4000, +0x0000, -0x2d41, -0x2d41, +1000, +1000}, - {-0x4000, +0x0000, +0x2d41, +0x2d41, -1000, -1000}, - {-0x4000, +0x0000, -0x2d41, +0x2d41, -1000, +1000}, - {-0x4000, +0x0000, +0x2d41, -0x2d41, -1000, +1000}, - {-0x4000, +0x0000, -0x2d41, -0x2d41, -1000, -1000}, - {+0x376d, +0x2000, +0x2d41, +0x2d41, +732, +732}, - {-0x376d, +0x2000, +0x2d41, +0x2d41, -2732, -2732}, - {+0x376d, +0x2000, +0x2d41, -0x2d41, +2732, -2732}, - {-0x376d, +0x2000, +0x2d41, -0x2d41, -732, +732}, - {-0x376d, -0x2000, +0x2d41, +0x2d41, -732, -732}, - {+0x376d, +0x2000, +0x4000, +0x0000, +1155, +0}, - {+0x376d, +0x2000, +0x0000, +0x4000, +0, +2000}, - } - for _, tc := range testCases { - p = Point{} - h.gs.pv = [2]f2dot14{tc.pvX, tc.pvY} - h.gs.fv = [2]f2dot14{tc.fvX, tc.fvY} - h.move(&p, 1000, true) - tx := p.Flags&flagTouchedX != 0 - ty := p.Flags&flagTouchedY != 0 - wantTX := tc.fvX != 0 - wantTY := tc.fvY != 0 - if p.X != tc.wantX || p.Y != tc.wantY || tx != wantTX || ty != wantTY { - t.Errorf("pv=%v, fv=%v\ngot %d, %d, %t, %t\nwant %d, %d, %t, %t", - h.gs.pv, h.gs.fv, p.X, p.Y, tx, ty, tc.wantX, tc.wantY, wantTX, wantTY) - continue - } - - // Check that p is aligned with the freedom vector. - a := int64(p.X) * int64(tc.fvY) - b := int64(p.Y) * int64(tc.fvX) - if a != b { - t.Errorf("pv=%v, fv=%v, p=%v not aligned with fv", h.gs.pv, h.gs.fv, p) - continue - } - - // Check that the projected p is 1000 away from the origin. - dotProd := (int64(p.X)*int64(tc.pvX) + int64(p.Y)*int64(tc.pvY) + 1<<13) >> 14 - if dotProd != 1000 { - t.Errorf("pv=%v, fv=%v, p=%v not 1000 from origin", h.gs.pv, h.gs.fv, p) - continue - } - } -} - -// TestNormalize tests that the normalize function matches the output of the C -// Freetype implementation. -func TestNormalize(t *testing.T) { - testCases := [][2]f2dot14{ - {-15895, 3974}, - {-15543, 5181}, - {-14654, 7327}, - {-11585, 11585}, - {0, 16384}, - {11585, 11585}, - {14654, 7327}, - {15543, 5181}, - {15895, 3974}, - {16066, 3213}, - {16161, 2694}, - {16219, 2317}, - {16257, 2032}, - {16284, 1809}, - } - for i, want := range testCases { - got := normalize(f2dot14(i)-4, 1) - if got != want { - t.Errorf("i=%d: got %v, want %v", i, got, want) - } - } -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/opcodes.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/opcodes.go deleted file mode 100644 index 1880e1e63b..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/opcodes.go +++ /dev/null @@ -1,289 +0,0 @@ -// Copyright 2012 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package truetype - -// The Truetype opcodes are summarized at -// https://developer.apple.com/fonts/TTRefMan/RM07/appendixA.html - -const ( - opSVTCA0 = 0x00 // Set freedom and projection Vectors To Coordinate Axis - opSVTCA1 = 0x01 // . - opSPVTCA0 = 0x02 // Set Projection Vector To Coordinate Axis - opSPVTCA1 = 0x03 // . - opSFVTCA0 = 0x04 // Set Freedom Vector to Coordinate Axis - opSFVTCA1 = 0x05 // . - opSPVTL0 = 0x06 // Set Projection Vector To Line - opSPVTL1 = 0x07 // . - opSFVTL0 = 0x08 // Set Freedom Vector To Line - opSFVTL1 = 0x09 // . - opSPVFS = 0x0a // Set Projection Vector From Stack - opSFVFS = 0x0b // Set Freedom Vector From Stack - opGPV = 0x0c // Get Projection Vector - opGFV = 0x0d // Get Freedom Vector - opSFVTPV = 0x0e // Set Freedom Vector To Projection Vector - opISECT = 0x0f // moves point p to the InterSECTion of two lines - opSRP0 = 0x10 // Set Reference Point 0 - opSRP1 = 0x11 // Set Reference Point 1 - opSRP2 = 0x12 // Set Reference Point 2 - opSZP0 = 0x13 // Set Zone Pointer 0 - opSZP1 = 0x14 // Set Zone Pointer 1 - opSZP2 = 0x15 // Set Zone Pointer 2 - opSZPS = 0x16 // Set Zone PointerS - opSLOOP = 0x17 // Set LOOP variable - opRTG = 0x18 // Round To Grid - opRTHG = 0x19 // Round To Half Grid - opSMD = 0x1a // Set Minimum Distance - opELSE = 0x1b // ELSE clause - opJMPR = 0x1c // JuMP Relative - opSCVTCI = 0x1d // Set Control Value Table Cut-In - opSSWCI = 0x1e // Set Single Width Cut-In - opSSW = 0x1f // Set Single Width - opDUP = 0x20 // DUPlicate top stack element - opPOP = 0x21 // POP top stack element - opCLEAR = 0x22 // CLEAR the stack - opSWAP = 0x23 // SWAP the top two elements on the stack - opDEPTH = 0x24 // DEPTH of the stack - opCINDEX = 0x25 // Copy the INDEXed element to the top of the stack - opMINDEX = 0x26 // Move the INDEXed element to the top of the stack - opALIGNPTS = 0x27 // ALIGN PoinTS - op_0x28 = 0x28 // deprecated - opUTP = 0x29 // UnTouch Point - opLOOPCALL = 0x2a // LOOP and CALL function - opCALL = 0x2b // CALL function - opFDEF = 0x2c // Function DEFinition - opENDF = 0x2d // END Function definition - opMDAP0 = 0x2e // Move Direct Absolute Point - opMDAP1 = 0x2f // . - opIUP0 = 0x30 // Interpolate Untouched Points through the outline - opIUP1 = 0x31 // . - opSHP0 = 0x32 // SHift Point using reference point - opSHP1 = 0x33 // . - opSHC0 = 0x34 // SHift Contour using reference point - opSHC1 = 0x35 // . - opSHZ0 = 0x36 // SHift Zone using reference point - opSHZ1 = 0x37 // . - opSHPIX = 0x38 // SHift point by a PIXel amount - opIP = 0x39 // Interpolate Point - opMSIRP0 = 0x3a // Move Stack Indirect Relative Point - opMSIRP1 = 0x3b // . - opALIGNRP = 0x3c // ALIGN to Reference Point - opRTDG = 0x3d // Round To Double Grid - opMIAP0 = 0x3e // Move Indirect Absolute Point - opMIAP1 = 0x3f // . - opNPUSHB = 0x40 // PUSH N Bytes - opNPUSHW = 0x41 // PUSH N Words - opWS = 0x42 // Write Store - opRS = 0x43 // Read Store - opWCVTP = 0x44 // Write Control Value Table in Pixel units - opRCVT = 0x45 // Read Control Value Table entry - opGC0 = 0x46 // Get Coordinate projected onto the projection vector - opGC1 = 0x47 // . - opSCFS = 0x48 // Sets Coordinate From the Stack using projection vector and freedom vector - opMD0 = 0x49 // Measure Distance - opMD1 = 0x4a // . - opMPPEM = 0x4b // Measure Pixels Per EM - opMPS = 0x4c // Measure Point Size - opFLIPON = 0x4d // set the auto FLIP Boolean to ON - opFLIPOFF = 0x4e // set the auto FLIP Boolean to OFF - opDEBUG = 0x4f // DEBUG call - opLT = 0x50 // Less Than - opLTEQ = 0x51 // Less Than or EQual - opGT = 0x52 // Greater Than - opGTEQ = 0x53 // Greater Than or EQual - opEQ = 0x54 // EQual - opNEQ = 0x55 // Not EQual - opODD = 0x56 // ODD - opEVEN = 0x57 // EVEN - opIF = 0x58 // IF test - opEIF = 0x59 // End IF - opAND = 0x5a // logical AND - opOR = 0x5b // logical OR - opNOT = 0x5c // logical NOT - opDELTAP1 = 0x5d // DELTA exception P1 - opSDB = 0x5e // Set Delta Base in the graphics state - opSDS = 0x5f // Set Delta Shift in the graphics state - opADD = 0x60 // ADD - opSUB = 0x61 // SUBtract - opDIV = 0x62 // DIVide - opMUL = 0x63 // MULtiply - opABS = 0x64 // ABSolute value - opNEG = 0x65 // NEGate - opFLOOR = 0x66 // FLOOR - opCEILING = 0x67 // CEILING - opROUND00 = 0x68 // ROUND value - opROUND01 = 0x69 // . - opROUND10 = 0x6a // . - opROUND11 = 0x6b // . - opNROUND00 = 0x6c // No ROUNDing of value - opNROUND01 = 0x6d // . - opNROUND10 = 0x6e // . - opNROUND11 = 0x6f // . - opWCVTF = 0x70 // Write Control Value Table in Funits - opDELTAP2 = 0x71 // DELTA exception P2 - opDELTAP3 = 0x72 // DELTA exception P3 - opDELTAC1 = 0x73 // DELTA exception C1 - opDELTAC2 = 0x74 // DELTA exception C2 - opDELTAC3 = 0x75 // DELTA exception C3 - opSROUND = 0x76 // Super ROUND - opS45ROUND = 0x77 // Super ROUND 45 degrees - opJROT = 0x78 // Jump Relative On True - opJROF = 0x79 // Jump Relative On False - opROFF = 0x7a // Round OFF - op_0x7b = 0x7b // deprecated - opRUTG = 0x7c // Round Up To Grid - opRDTG = 0x7d // Round Down To Grid - opSANGW = 0x7e // Set ANGle Weight - opAA = 0x7f // Adjust Angle - opFLIPPT = 0x80 // FLIP PoinT - opFLIPRGON = 0x81 // FLIP RanGe ON - opFLIPRGOFF = 0x82 // FLIP RanGe OFF - op_0x83 = 0x83 // deprecated - op_0x84 = 0x84 // deprecated - opSCANCTRL = 0x85 // SCAN conversion ConTRoL - opSDPVTL0 = 0x86 // Set Dual Projection Vector To Line - opSDPVTL1 = 0x87 // . - opGETINFO = 0x88 // GET INFOrmation - opIDEF = 0x89 // Instruction DEFinition - opROLL = 0x8a // ROLL the top three stack elements - opMAX = 0x8b // MAXimum of top two stack elements - opMIN = 0x8c // MINimum of top two stack elements - opSCANTYPE = 0x8d // SCANTYPE - opINSTCTRL = 0x8e // INSTRuction execution ConTRoL - op_0x8f = 0x8f - op_0x90 = 0x90 - op_0x91 = 0x91 - op_0x92 = 0x92 - op_0x93 = 0x93 - op_0x94 = 0x94 - op_0x95 = 0x95 - op_0x96 = 0x96 - op_0x97 = 0x97 - op_0x98 = 0x98 - op_0x99 = 0x99 - op_0x9a = 0x9a - op_0x9b = 0x9b - op_0x9c = 0x9c - op_0x9d = 0x9d - op_0x9e = 0x9e - op_0x9f = 0x9f - op_0xa0 = 0xa0 - op_0xa1 = 0xa1 - op_0xa2 = 0xa2 - op_0xa3 = 0xa3 - op_0xa4 = 0xa4 - op_0xa5 = 0xa5 - op_0xa6 = 0xa6 - op_0xa7 = 0xa7 - op_0xa8 = 0xa8 - op_0xa9 = 0xa9 - op_0xaa = 0xaa - op_0xab = 0xab - op_0xac = 0xac - op_0xad = 0xad - op_0xae = 0xae - op_0xaf = 0xaf - opPUSHB000 = 0xb0 // PUSH Bytes - opPUSHB001 = 0xb1 // . - opPUSHB010 = 0xb2 // . - opPUSHB011 = 0xb3 // . - opPUSHB100 = 0xb4 // . - opPUSHB101 = 0xb5 // . - opPUSHB110 = 0xb6 // . - opPUSHB111 = 0xb7 // . - opPUSHW000 = 0xb8 // PUSH Words - opPUSHW001 = 0xb9 // . - opPUSHW010 = 0xba // . - opPUSHW011 = 0xbb // . - opPUSHW100 = 0xbc // . - opPUSHW101 = 0xbd // . - opPUSHW110 = 0xbe // . - opPUSHW111 = 0xbf // . - opMDRP00000 = 0xc0 // Move Direct Relative Point - opMDRP00001 = 0xc1 // . - opMDRP00010 = 0xc2 // . - opMDRP00011 = 0xc3 // . - opMDRP00100 = 0xc4 // . - opMDRP00101 = 0xc5 // . - opMDRP00110 = 0xc6 // . - opMDRP00111 = 0xc7 // . - opMDRP01000 = 0xc8 // . - opMDRP01001 = 0xc9 // . - opMDRP01010 = 0xca // . - opMDRP01011 = 0xcb // . - opMDRP01100 = 0xcc // . - opMDRP01101 = 0xcd // . - opMDRP01110 = 0xce // . - opMDRP01111 = 0xcf // . - opMDRP10000 = 0xd0 // . - opMDRP10001 = 0xd1 // . - opMDRP10010 = 0xd2 // . - opMDRP10011 = 0xd3 // . - opMDRP10100 = 0xd4 // . - opMDRP10101 = 0xd5 // . - opMDRP10110 = 0xd6 // . - opMDRP10111 = 0xd7 // . - opMDRP11000 = 0xd8 // . - opMDRP11001 = 0xd9 // . - opMDRP11010 = 0xda // . - opMDRP11011 = 0xdb // . - opMDRP11100 = 0xdc // . - opMDRP11101 = 0xdd // . - opMDRP11110 = 0xde // . - opMDRP11111 = 0xdf // . - opMIRP00000 = 0xe0 // Move Indirect Relative Point - opMIRP00001 = 0xe1 // . - opMIRP00010 = 0xe2 // . - opMIRP00011 = 0xe3 // . - opMIRP00100 = 0xe4 // . - opMIRP00101 = 0xe5 // . - opMIRP00110 = 0xe6 // . - opMIRP00111 = 0xe7 // . - opMIRP01000 = 0xe8 // . - opMIRP01001 = 0xe9 // . - opMIRP01010 = 0xea // . - opMIRP01011 = 0xeb // . - opMIRP01100 = 0xec // . - opMIRP01101 = 0xed // . - opMIRP01110 = 0xee // . - opMIRP01111 = 0xef // . - opMIRP10000 = 0xf0 // . - opMIRP10001 = 0xf1 // . - opMIRP10010 = 0xf2 // . - opMIRP10011 = 0xf3 // . - opMIRP10100 = 0xf4 // . - opMIRP10101 = 0xf5 // . - opMIRP10110 = 0xf6 // . - opMIRP10111 = 0xf7 // . - opMIRP11000 = 0xf8 // . - opMIRP11001 = 0xf9 // . - opMIRP11010 = 0xfa // . - opMIRP11011 = 0xfb // . - opMIRP11100 = 0xfc // . - opMIRP11101 = 0xfd // . - opMIRP11110 = 0xfe // . - opMIRP11111 = 0xff // . -) - -// popCount is the number of stack elements that each opcode pops. -var popCount = [256]uint8{ - // 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f - 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 5, // 0x00 - 0x0f - 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, // 0x10 - 0x1f - 1, 1, 0, 2, 0, 1, 1, 2, 0, 1, 2, 1, 1, 0, 1, 1, // 0x20 - 0x2f - 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 2, 2, 0, 0, 2, 2, // 0x30 - 0x3f - 0, 0, 2, 1, 2, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, // 0x40 - 0x4f - 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 2, 2, 1, 1, 1, 1, // 0x50 - 0x5f - 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 - 0x6f - 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, // 0x70 - 0x7f - 0, 2, 2, 0, 0, 1, 2, 2, 1, 1, 3, 2, 2, 1, 2, 0, // 0x80 - 0x8f - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x90 - 0x9f - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xa0 - 0xaf - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xb0 - 0xbf - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xc0 - 0xcf - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xd0 - 0xdf - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xe0 - 0xef - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xf0 - 0xff -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/truetype.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/truetype.go deleted file mode 100644 index 96ceef5479..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/truetype.go +++ /dev/null @@ -1,554 +0,0 @@ -// Copyright 2010 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -// Package truetype provides a parser for the TTF and TTC file formats. -// Those formats are documented at http://developer.apple.com/fonts/TTRefMan/ -// and http://www.microsoft.com/typography/otspec/ -// -// Some of a font's methods provide lengths or co-ordinates, e.g. bounds, font -// metrics and control points. All these methods take a scale parameter, which -// is the number of device units in 1 em. For example, if 1 em is 10 pixels and -// 1 pixel is 64 units, then scale is 640. If the device space involves pixels, -// 64 units per pixel is recommended, since that is what the bytecode hinter -// uses when snapping point co-ordinates to the pixel grid. -// -// To measure a TrueType font in ideal FUnit space, use scale equal to -// font.FUnitsPerEm(). -package truetype - -import ( - "fmt" -) - -// An Index is a Font's index of a rune. -type Index uint16 - -// A Bounds holds the co-ordinate range of one or more glyphs. -// The endpoints are inclusive. -type Bounds struct { - XMin, YMin, XMax, YMax int32 -} - -// An HMetric holds the horizontal metrics of a single glyph. -type HMetric struct { - AdvanceWidth, LeftSideBearing int32 -} - -// A VMetric holds the vertical metrics of a single glyph. -type VMetric struct { - AdvanceHeight, TopSideBearing int32 -} - -// A FormatError reports that the input is not a valid TrueType font. -type FormatError string - -func (e FormatError) Error() string { - return "freetype: invalid TrueType format: " + string(e) -} - -// An UnsupportedError reports that the input uses a valid but unimplemented -// TrueType feature. -type UnsupportedError string - -func (e UnsupportedError) Error() string { - return "freetype: unsupported TrueType feature: " + string(e) -} - -// u32 returns the big-endian uint32 at b[i:]. -func u32(b []byte, i int) uint32 { - return uint32(b[i])<<24 | uint32(b[i+1])<<16 | uint32(b[i+2])<<8 | uint32(b[i+3]) -} - -// u16 returns the big-endian uint16 at b[i:]. -func u16(b []byte, i int) uint16 { - return uint16(b[i])<<8 | uint16(b[i+1]) -} - -// readTable returns a slice of the TTF data given by a table's directory entry. -func readTable(ttf []byte, offsetLength []byte) ([]byte, error) { - offset := int(u32(offsetLength, 0)) - if offset < 0 { - return nil, FormatError(fmt.Sprintf("offset too large: %d", uint32(offset))) - } - length := int(u32(offsetLength, 4)) - if length < 0 { - return nil, FormatError(fmt.Sprintf("length too large: %d", uint32(length))) - } - end := offset + length - if end < 0 || end > len(ttf) { - return nil, FormatError(fmt.Sprintf("offset + length too large: %d", uint32(offset)+uint32(length))) - } - return ttf[offset:end], nil -} - -const ( - locaOffsetFormatUnknown int = iota - locaOffsetFormatShort - locaOffsetFormatLong -) - -// A cm holds a parsed cmap entry. -type cm struct { - start, end, delta, offset uint32 -} - -// A Font represents a Truetype font. -type Font struct { - // Tables sliced from the TTF data. The different tables are documented - // at http://developer.apple.com/fonts/TTRefMan/RM06/Chap6.html - cmap, cvt, fpgm, glyf, hdmx, head, hhea, hmtx, kern, loca, maxp, os2, prep, vmtx []byte - - cmapIndexes []byte - - // Cached values derived from the raw ttf data. - cm []cm - locaOffsetFormat int - nGlyph, nHMetric, nKern int - fUnitsPerEm int32 - bounds Bounds - // Values from the maxp section. - maxTwilightPoints, maxStorage, maxFunctionDefs, maxStackElements uint16 -} - -func (f *Font) parseCmap() error { - const ( - cmapFormat4 = 4 - cmapFormat12 = 12 - languageIndependent = 0 - - // A 32-bit encoding consists of a most-significant 16-bit Platform ID and a - // least-significant 16-bit Platform Specific ID. The magic numbers are - // specified at https://www.microsoft.com/typography/otspec/name.htm - unicodeEncoding = 0x00000003 // PID = 0 (Unicode), PSID = 3 (Unicode 2.0) - microsoftSymbolEncoding = 0x00030000 // PID = 3 (Microsoft), PSID = 0 (Symbol) - microsoftUCS2Encoding = 0x00030001 // PID = 3 (Microsoft), PSID = 1 (UCS-2) - microsoftUCS4Encoding = 0x0003000a // PID = 3 (Microsoft), PSID = 10 (UCS-4) - ) - - if len(f.cmap) < 4 { - return FormatError("cmap too short") - } - nsubtab := int(u16(f.cmap, 2)) - if len(f.cmap) < 8*nsubtab+4 { - return FormatError("cmap too short") - } - offset, found, x := 0, false, 4 - for i := 0; i < nsubtab; i++ { - // We read the 16-bit Platform ID and 16-bit Platform Specific ID as a single uint32. - // All values are big-endian. - pidPsid, o := u32(f.cmap, x), u32(f.cmap, x+4) - x += 8 - // We prefer the Unicode cmap encoding. Failing to find that, we fall - // back onto the Microsoft cmap encoding. - if pidPsid == unicodeEncoding { - offset, found = int(o), true - break - - } else if pidPsid == microsoftSymbolEncoding || - pidPsid == microsoftUCS2Encoding || - pidPsid == microsoftUCS4Encoding { - - offset, found = int(o), true - // We don't break out of the for loop, so that Unicode can override Microsoft. - } - } - if !found { - return UnsupportedError("cmap encoding") - } - if offset <= 0 || offset > len(f.cmap) { - return FormatError("bad cmap offset") - } - - cmapFormat := u16(f.cmap, offset) - switch cmapFormat { - case cmapFormat4: - language := u16(f.cmap, offset+4) - if language != languageIndependent { - return UnsupportedError(fmt.Sprintf("language: %d", language)) - } - segCountX2 := int(u16(f.cmap, offset+6)) - if segCountX2%2 == 1 { - return FormatError(fmt.Sprintf("bad segCountX2: %d", segCountX2)) - } - segCount := segCountX2 / 2 - offset += 14 - f.cm = make([]cm, segCount) - for i := 0; i < segCount; i++ { - f.cm[i].end = uint32(u16(f.cmap, offset)) - offset += 2 - } - offset += 2 - for i := 0; i < segCount; i++ { - f.cm[i].start = uint32(u16(f.cmap, offset)) - offset += 2 - } - for i := 0; i < segCount; i++ { - f.cm[i].delta = uint32(u16(f.cmap, offset)) - offset += 2 - } - for i := 0; i < segCount; i++ { - f.cm[i].offset = uint32(u16(f.cmap, offset)) - offset += 2 - } - f.cmapIndexes = f.cmap[offset:] - return nil - - case cmapFormat12: - if u16(f.cmap, offset+2) != 0 { - return FormatError(fmt.Sprintf("cmap format: % x", f.cmap[offset:offset+4])) - } - length := u32(f.cmap, offset+4) - language := u32(f.cmap, offset+8) - if language != languageIndependent { - return UnsupportedError(fmt.Sprintf("language: %d", language)) - } - nGroups := u32(f.cmap, offset+12) - if length != 12*nGroups+16 { - return FormatError("inconsistent cmap length") - } - offset += 16 - f.cm = make([]cm, nGroups) - for i := uint32(0); i < nGroups; i++ { - f.cm[i].start = u32(f.cmap, offset+0) - f.cm[i].end = u32(f.cmap, offset+4) - f.cm[i].delta = u32(f.cmap, offset+8) - f.cm[i].start - offset += 12 - } - return nil - } - return UnsupportedError(fmt.Sprintf("cmap format: %d", cmapFormat)) -} - -func (f *Font) parseHead() error { - if len(f.head) != 54 { - return FormatError(fmt.Sprintf("bad head length: %d", len(f.head))) - } - f.fUnitsPerEm = int32(u16(f.head, 18)) - f.bounds.XMin = int32(int16(u16(f.head, 36))) - f.bounds.YMin = int32(int16(u16(f.head, 38))) - f.bounds.XMax = int32(int16(u16(f.head, 40))) - f.bounds.YMax = int32(int16(u16(f.head, 42))) - switch i := u16(f.head, 50); i { - case 0: - f.locaOffsetFormat = locaOffsetFormatShort - case 1: - f.locaOffsetFormat = locaOffsetFormatLong - default: - return FormatError(fmt.Sprintf("bad indexToLocFormat: %d", i)) - } - return nil -} - -func (f *Font) parseHhea() error { - if len(f.hhea) != 36 { - return FormatError(fmt.Sprintf("bad hhea length: %d", len(f.hhea))) - } - f.nHMetric = int(u16(f.hhea, 34)) - if 4*f.nHMetric+2*(f.nGlyph-f.nHMetric) != len(f.hmtx) { - return FormatError(fmt.Sprintf("bad hmtx length: %d", len(f.hmtx))) - } - return nil -} - -func (f *Font) parseKern() error { - // Apple's TrueType documentation (http://developer.apple.com/fonts/TTRefMan/RM06/Chap6kern.html) says: - // "Previous versions of the 'kern' table defined both the version and nTables fields in the header - // as UInt16 values and not UInt32 values. Use of the older format on the Mac OS is discouraged - // (although AAT can sense an old kerning table and still make correct use of it). Microsoft - // Windows still uses the older format for the 'kern' table and will not recognize the newer one. - // Fonts targeted for the Mac OS only should use the new format; fonts targeted for both the Mac OS - // and Windows should use the old format." - // Since we expect that almost all fonts aim to be Windows-compatible, we only parse the "older" format, - // just like the C Freetype implementation. - if len(f.kern) == 0 { - if f.nKern != 0 { - return FormatError("bad kern table length") - } - return nil - } - if len(f.kern) < 18 { - return FormatError("kern data too short") - } - version, offset := u16(f.kern, 0), 2 - if version != 0 { - return UnsupportedError(fmt.Sprintf("kern version: %d", version)) - } - n, offset := u16(f.kern, offset), offset+2 - if n != 1 { - return UnsupportedError(fmt.Sprintf("kern nTables: %d", n)) - } - offset += 2 - length, offset := int(u16(f.kern, offset)), offset+2 - coverage, offset := u16(f.kern, offset), offset+2 - if coverage != 0x0001 { - // We only support horizontal kerning. - return UnsupportedError(fmt.Sprintf("kern coverage: 0x%04x", coverage)) - } - f.nKern, offset = int(u16(f.kern, offset)), offset+2 - if 6*f.nKern != length-14 { - return FormatError("bad kern table length") - } - return nil -} - -func (f *Font) parseMaxp() error { - if len(f.maxp) != 32 { - return FormatError(fmt.Sprintf("bad maxp length: %d", len(f.maxp))) - } - f.nGlyph = int(u16(f.maxp, 4)) - f.maxTwilightPoints = u16(f.maxp, 16) - f.maxStorage = u16(f.maxp, 18) - f.maxFunctionDefs = u16(f.maxp, 20) - f.maxStackElements = u16(f.maxp, 24) - return nil -} - -// scale returns x divided by f.fUnitsPerEm, rounded to the nearest integer. -func (f *Font) scale(x int32) int32 { - if x >= 0 { - x += f.fUnitsPerEm / 2 - } else { - x -= f.fUnitsPerEm / 2 - } - return x / f.fUnitsPerEm -} - -// Bounds returns the union of a Font's glyphs' bounds. -func (f *Font) Bounds(scale int32) Bounds { - b := f.bounds - b.XMin = f.scale(scale * b.XMin) - b.YMin = f.scale(scale * b.YMin) - b.XMax = f.scale(scale * b.XMax) - b.YMax = f.scale(scale * b.YMax) - return b -} - -// FUnitsPerEm returns the number of FUnits in a Font's em-square's side. -func (f *Font) FUnitsPerEm() int32 { - return f.fUnitsPerEm -} - -// Index returns a Font's index for the given rune. -func (f *Font) Index(x rune) Index { - c := uint32(x) - for i, j := 0, len(f.cm); i < j; { - h := i + (j-i)/2 - cm := &f.cm[h] - if c < cm.start { - j = h - } else if cm.end < c { - i = h + 1 - } else if cm.offset == 0 { - return Index(c + cm.delta) - } else { - offset := int(cm.offset) + 2*(h-len(f.cm)+int(c-cm.start)) - return Index(u16(f.cmapIndexes, offset)) - } - } - return 0 -} - -// unscaledHMetric returns the unscaled horizontal metrics for the glyph with -// the given index. -func (f *Font) unscaledHMetric(i Index) (h HMetric) { - j := int(i) - if j < 0 || f.nGlyph <= j { - return HMetric{} - } - if j >= f.nHMetric { - p := 4 * (f.nHMetric - 1) - return HMetric{ - AdvanceWidth: int32(u16(f.hmtx, p)), - LeftSideBearing: int32(int16(u16(f.hmtx, p+2*(j-f.nHMetric)+4))), - } - } - return HMetric{ - AdvanceWidth: int32(u16(f.hmtx, 4*j)), - LeftSideBearing: int32(int16(u16(f.hmtx, 4*j+2))), - } -} - -// HMetric returns the horizontal metrics for the glyph with the given index. -func (f *Font) HMetric(scale int32, i Index) HMetric { - h := f.unscaledHMetric(i) - h.AdvanceWidth = f.scale(scale * h.AdvanceWidth) - h.LeftSideBearing = f.scale(scale * h.LeftSideBearing) - return h -} - -// unscaledVMetric returns the unscaled vertical metrics for the glyph with -// the given index. yMax is the top of the glyph's bounding box. -func (f *Font) unscaledVMetric(i Index, yMax int32) (v VMetric) { - j := int(i) - if j < 0 || f.nGlyph <= j { - return VMetric{} - } - if 4*j+4 <= len(f.vmtx) { - return VMetric{ - AdvanceHeight: int32(u16(f.vmtx, 4*j)), - TopSideBearing: int32(int16(u16(f.vmtx, 4*j+2))), - } - } - // The OS/2 table has grown over time. - // https://developer.apple.com/fonts/TTRefMan/RM06/Chap6OS2.html - // says that it was originally 68 bytes. Optional fields, including - // the ascender and descender, are described at - // http://www.microsoft.com/typography/otspec/os2.htm - if len(f.os2) >= 72 { - sTypoAscender := int32(int16(u16(f.os2, 68))) - sTypoDescender := int32(int16(u16(f.os2, 70))) - return VMetric{ - AdvanceHeight: sTypoAscender - sTypoDescender, - TopSideBearing: sTypoAscender - yMax, - } - } - return VMetric{ - AdvanceHeight: f.fUnitsPerEm, - TopSideBearing: 0, - } -} - -// VMetric returns the vertical metrics for the glyph with the given index. -func (f *Font) VMetric(scale int32, i Index) VMetric { - // TODO: should 0 be bounds.YMax? - v := f.unscaledVMetric(i, 0) - v.AdvanceHeight = f.scale(scale * v.AdvanceHeight) - v.TopSideBearing = f.scale(scale * v.TopSideBearing) - return v -} - -// Kerning returns the kerning for the given glyph pair. -func (f *Font) Kerning(scale int32, i0, i1 Index) int32 { - if f.nKern == 0 { - return 0 - } - g := uint32(i0)<<16 | uint32(i1) - lo, hi := 0, f.nKern - for lo < hi { - i := (lo + hi) / 2 - ig := u32(f.kern, 18+6*i) - if ig < g { - lo = i + 1 - } else if ig > g { - hi = i - } else { - return f.scale(scale * int32(int16(u16(f.kern, 22+6*i)))) - } - } - return 0 -} - -// Parse returns a new Font for the given TTF or TTC data. -// -// For TrueType Collections, the first font in the collection is parsed. -func Parse(ttf []byte) (font *Font, err error) { - return parse(ttf, 0) -} - -func parse(ttf []byte, offset int) (font *Font, err error) { - if len(ttf)-offset < 12 { - err = FormatError("TTF data is too short") - return - } - originalOffset := offset - magic, offset := u32(ttf, offset), offset+4 - switch magic { - case 0x00010000: - // No-op. - case 0x74746366: // "ttcf" as a big-endian uint32. - if originalOffset != 0 { - err = FormatError("recursive TTC") - return - } - ttcVersion, offset := u32(ttf, offset), offset+4 - if ttcVersion != 0x00010000 { - // TODO: support TTC version 2.0, once I have such a .ttc file to test with. - err = FormatError("bad TTC version") - return - } - numFonts, offset := int(u32(ttf, offset)), offset+4 - if numFonts <= 0 { - err = FormatError("bad number of TTC fonts") - return - } - if len(ttf[offset:])/4 < numFonts { - err = FormatError("TTC offset table is too short") - return - } - // TODO: provide an API to select which font in a TrueType collection to return, - // not just the first one. This may require an API to parse a TTC's name tables, - // so users of this package can select the font in a TTC by name. - offset = int(u32(ttf, offset)) - if offset <= 0 || offset > len(ttf) { - err = FormatError("bad TTC offset") - return - } - return parse(ttf, offset) - default: - err = FormatError("bad TTF version") - return - } - n, offset := int(u16(ttf, offset)), offset+2 - if len(ttf) < 16*n+12 { - err = FormatError("TTF data is too short") - return - } - f := new(Font) - // Assign the table slices. - for i := 0; i < n; i++ { - x := 16*i + 12 - switch string(ttf[x : x+4]) { - case "cmap": - f.cmap, err = readTable(ttf, ttf[x+8:x+16]) - case "cvt ": - f.cvt, err = readTable(ttf, ttf[x+8:x+16]) - case "fpgm": - f.fpgm, err = readTable(ttf, ttf[x+8:x+16]) - case "glyf": - f.glyf, err = readTable(ttf, ttf[x+8:x+16]) - case "hdmx": - f.hdmx, err = readTable(ttf, ttf[x+8:x+16]) - case "head": - f.head, err = readTable(ttf, ttf[x+8:x+16]) - case "hhea": - f.hhea, err = readTable(ttf, ttf[x+8:x+16]) - case "hmtx": - f.hmtx, err = readTable(ttf, ttf[x+8:x+16]) - case "kern": - f.kern, err = readTable(ttf, ttf[x+8:x+16]) - case "loca": - f.loca, err = readTable(ttf, ttf[x+8:x+16]) - case "maxp": - f.maxp, err = readTable(ttf, ttf[x+8:x+16]) - case "OS/2": - f.os2, err = readTable(ttf, ttf[x+8:x+16]) - case "prep": - f.prep, err = readTable(ttf, ttf[x+8:x+16]) - case "vmtx": - f.vmtx, err = readTable(ttf, ttf[x+8:x+16]) - } - if err != nil { - return - } - } - // Parse and sanity-check the TTF data. - if err = f.parseHead(); err != nil { - return - } - if err = f.parseMaxp(); err != nil { - return - } - if err = f.parseCmap(); err != nil { - return - } - if err = f.parseKern(); err != nil { - return - } - if err = f.parseHhea(); err != nil { - return - } - font = f - return -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/truetype_test.go b/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/truetype_test.go deleted file mode 100644 index 9ef6ec8d26..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/freetype/truetype/truetype_test.go +++ /dev/null @@ -1,366 +0,0 @@ -// Copyright 2012 The Freetype-Go Authors. All rights reserved. -// Use of this source code is governed by your choice of either the -// FreeType License or the GNU General Public License version 2 (or -// any later version), both of which can be found in the LICENSE file. - -package truetype - -import ( - "bufio" - "fmt" - "io" - "io/ioutil" - "os" - "strconv" - "strings" - "testing" -) - -func parseTestdataFont(name string) (font *Font, testdataIsOptional bool, err error) { - b, err := ioutil.ReadFile(fmt.Sprintf("../../testdata/%s.ttf", name)) - if err != nil { - // The "x-foo" fonts are optional tests, as they are not checked - // in for copyright or file size reasons. - return nil, strings.HasPrefix(name, "x-"), fmt.Errorf("%s: ReadFile: %v", name, err) - } - font, err = Parse(b) - if err != nil { - return nil, true, fmt.Errorf("%s: Parse: %v", name, err) - } - return font, false, nil -} - -// TestParse tests that the luxisr.ttf metrics and glyphs are parsed correctly. -// The numerical values can be manually verified by examining luxisr.ttx. -func TestParse(t *testing.T) { - font, _, err := parseTestdataFont("luxisr") - if err != nil { - t.Fatal(err) - } - if got, want := font.FUnitsPerEm(), int32(2048); got != want { - t.Errorf("FUnitsPerEm: got %v, want %v", got, want) - } - fupe := font.FUnitsPerEm() - if got, want := font.Bounds(fupe), (Bounds{-441, -432, 2024, 2033}); got != want { - t.Errorf("Bounds: got %v, want %v", got, want) - } - - i0 := font.Index('A') - i1 := font.Index('V') - if i0 != 36 || i1 != 57 { - t.Fatalf("Index: i0, i1 = %d, %d, want 36, 57", i0, i1) - } - if got, want := font.HMetric(fupe, i0), (HMetric{1366, 19}); got != want { - t.Errorf("HMetric: got %v, want %v", got, want) - } - if got, want := font.VMetric(fupe, i0), (VMetric{2465, 553}); got != want { - t.Errorf("VMetric: got %v, want %v", got, want) - } - if got, want := font.Kerning(fupe, i0, i1), int32(-144); got != want { - t.Errorf("Kerning: got %v, want %v", got, want) - } - - g := NewGlyphBuf() - err = g.Load(font, fupe, i0, NoHinting) - if err != nil { - t.Fatalf("Load: %v", err) - } - g0 := &GlyphBuf{ - B: g.B, - Point: g.Point, - End: g.End, - } - g1 := &GlyphBuf{ - B: Bounds{19, 0, 1342, 1480}, - Point: []Point{ - {19, 0, 51}, - {581, 1480, 1}, - {789, 1480, 51}, - {1342, 0, 1}, - {1116, 0, 35}, - {962, 410, 3}, - {368, 410, 33}, - {214, 0, 3}, - {428, 566, 19}, - {904, 566, 33}, - {667, 1200, 3}, - }, - End: []int{8, 11}, - } - if got, want := fmt.Sprint(g0), fmt.Sprint(g1); got != want { - t.Errorf("GlyphBuf:\ngot %v\nwant %v", got, want) - } -} - -func TestIndex(t *testing.T) { - testCases := map[string]map[rune]Index{ - "luxisr": { - ' ': 3, - '!': 4, - 'A': 36, - 'V': 57, - 'É': 101, - 'fl': 193, - '\u22c5': 385, - '中': 0, - }, - - // The x-etc test cases use those versions of the .ttf files provided - // by Ubuntu 14.04. See testdata/make-other-hinting-txts.sh for details. - - "x-arial-bold": { - ' ': 3, - '+': 14, - '0': 19, - '_': 66, - 'w': 90, - '~': 97, - 'Ä': 98, - 'fl': 192, - '½': 242, - 'σ': 305, - 'λ': 540, - 'ỹ': 1275, - '\u04e9': 1319, - '中': 0, - }, - "x-deja-vu-sans-oblique": { - ' ': 3, - '*': 13, - 'Œ': 276, - 'ω': 861, - '‡': 2571, - '⊕': 3110, - 'fl': 4728, - '\ufb03': 4729, - '\ufffd': 4813, - // TODO: '\U0001f640': ???, - '中': 0, - }, - "x-droid-sans-japanese": { - ' ': 0, - '\u3000': 3, - '\u3041': 25, - '\u30fe': 201, - '\uff61': 202, - '\uff67': 208, - '\uff9e': 263, - '\uff9f': 264, - '\u4e00': 265, - '\u557e': 1000, - '\u61b6': 2024, - '\u6ede': 3177, - '\u7505': 3555, - '\u81e3': 4602, - '\u81e5': 4603, - '\u81e7': 4604, - '\u81e8': 4605, - '\u81ea': 4606, - '\u81ed': 4607, - '\u81f3': 4608, - '\u81f4': 4609, - '\u91c7': 5796, - '\u9fa0': 6620, - '\u203e': 12584, - }, - "x-times-new-roman": { - ' ': 3, - ':': 29, - 'fl': 192, - 'Ŀ': 273, - '♠': 388, - 'Ŗ': 451, - 'Σ': 520, - '\u200D': 745, - 'Ẽ': 1216, - '\u04e9': 1319, - '中': 0, - }, - } - for name, wants := range testCases { - font, testdataIsOptional, err := parseTestdataFont(name) - if err != nil { - if testdataIsOptional { - t.Log(err) - } else { - t.Fatal(err) - } - continue - } - for r, want := range wants { - if got := font.Index(r); got != want { - t.Errorf("%s: Index of %q, aka %U: got %d, want %d", name, r, r, got, want) - } - } - } -} - -type scalingTestData struct { - advanceWidth int32 - bounds Bounds - points []Point -} - -// scalingTestParse parses a line of points like -// 213 -22 -111 236 555;-22 -111 1, 178 555 1, 236 555 1, 36 -111 1 -// The line will not have a trailing "\n". -func scalingTestParse(line string) (ret scalingTestData) { - next := func(s string) (string, int32) { - t, i := "", strings.Index(s, " ") - if i != -1 { - s, t = s[:i], s[i+1:] - } - x, _ := strconv.Atoi(s) - return t, int32(x) - } - - i := strings.Index(line, ";") - prefix, line := line[:i], line[i+1:] - - prefix, ret.advanceWidth = next(prefix) - prefix, ret.bounds.XMin = next(prefix) - prefix, ret.bounds.YMin = next(prefix) - prefix, ret.bounds.XMax = next(prefix) - prefix, ret.bounds.YMax = next(prefix) - - ret.points = make([]Point, 0, 1+strings.Count(line, ",")) - for len(line) > 0 { - s := line - if i := strings.Index(line, ","); i != -1 { - s, line = line[:i], line[i+1:] - for len(line) > 0 && line[0] == ' ' { - line = line[1:] - } - } else { - line = "" - } - s, x := next(s) - s, y := next(s) - s, f := next(s) - ret.points = append(ret.points, Point{X: x, Y: y, Flags: uint32(f)}) - } - return ret -} - -// scalingTestEquals is equivalent to, but faster than, calling -// reflect.DeepEquals(a, b), and also returns the index of the first non-equal -// element. It also treats a nil []Point and an empty non-nil []Point as equal. -// a and b must have equal length. -func scalingTestEquals(a, b []Point) (index int, equals bool) { - for i, p := range a { - if p != b[i] { - return i, false - } - } - return 0, true -} - -var scalingTestCases = []struct { - name string - size int32 -}{ - {"luxisr", 12}, - {"x-arial-bold", 11}, - {"x-deja-vu-sans-oblique", 17}, - {"x-droid-sans-japanese", 9}, - {"x-times-new-roman", 13}, -} - -func testScaling(t *testing.T, h Hinting) { - for _, tc := range scalingTestCases { - font, testdataIsOptional, err := parseTestdataFont(tc.name) - if err != nil { - if testdataIsOptional { - t.Log(err) - } else { - t.Error(err) - } - continue - } - hintingStr := "sans" - if h != NoHinting { - hintingStr = "with" - } - f, err := os.Open(fmt.Sprintf( - "../../testdata/%s-%dpt-%s-hinting.txt", tc.name, tc.size, hintingStr)) - if err != nil { - t.Errorf("%s: Open: %v", tc.name, err) - continue - } - defer f.Close() - - wants := []scalingTestData{} - scanner := bufio.NewScanner(f) - if scanner.Scan() { - major, minor, patch := 0, 0, 0 - _, err := fmt.Sscanf(scanner.Text(), "freetype version %d.%d.%d", &major, &minor, &patch) - if err != nil { - t.Errorf("%s: version information: %v", tc.name, err) - } - if (major < 2) || (major == 2 && minor < 5) || (major == 2 && minor == 5 && patch < 1) { - t.Errorf("%s: need freetype version >= 2.5.1.\n"+ - "Try setting LD_LIBRARY_PATH=/path/to/freetype_built_from_src/objs/.libs/\n"+ - "and re-running testdata/make-other-hinting-txts.sh", - tc.name) - continue - } - } else { - t.Errorf("%s: no version information", tc.name) - continue - } - for scanner.Scan() { - wants = append(wants, scalingTestParse(scanner.Text())) - } - if err := scanner.Err(); err != nil && err != io.EOF { - t.Errorf("%s: Scanner: %v", tc.name, err) - continue - } - - glyphBuf := NewGlyphBuf() - for i, want := range wants { - if err = glyphBuf.Load(font, tc.size*64, Index(i), h); err != nil { - t.Errorf("%s: glyph #%d: Load: %v", tc.name, i, err) - continue - } - got := scalingTestData{ - advanceWidth: glyphBuf.AdvanceWidth, - bounds: glyphBuf.B, - points: glyphBuf.Point, - } - - if got.advanceWidth != want.advanceWidth { - t.Errorf("%s: glyph #%d advance width:\ngot %v\nwant %v", - tc.name, i, got.advanceWidth, want.advanceWidth) - continue - } - - if got.bounds != want.bounds { - t.Errorf("%s: glyph #%d bounds:\ngot %v\nwant %v", - tc.name, i, got.bounds, want.bounds) - continue - } - - for i := range got.points { - got.points[i].Flags &= 0x01 - } - if len(got.points) != len(want.points) { - t.Errorf("%s: glyph #%d:\ngot %v\nwant %v\ndifferent slice lengths: %d versus %d", - tc.name, i, got.points, want.points, len(got.points), len(want.points)) - continue - } - if j, equals := scalingTestEquals(got.points, want.points); !equals { - t.Errorf("%s: glyph #%d:\ngot %v\nwant %v\nat index %d: %v versus %v", - tc.name, i, got.points, want.points, j, got.points[j], want.points[j]) - continue - } - } - } -} - -func TestScalingSansHinting(t *testing.T) { - testScaling(t, NoHinting) -} - -func TestScalingWithHinting(t *testing.T) { - testScaling(t, FullHinting) -} diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/lib/codereview/codereview.cfg b/Godeps/_workspace/src/code.google.com/p/freetype-go/lib/codereview/codereview.cfg deleted file mode 100644 index 2801ebf8d6..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/lib/codereview/codereview.cfg +++ /dev/null @@ -1 +0,0 @@ -defaultcc: golang-codereviews@googlegroups.com diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/licenses/ftl.txt b/Godeps/_workspace/src/code.google.com/p/freetype-go/licenses/ftl.txt deleted file mode 100644 index bbaba33f47..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/licenses/ftl.txt +++ /dev/null @@ -1,169 +0,0 @@ - The FreeType Project LICENSE - ---------------------------- - - 2006-Jan-27 - - Copyright 1996-2002, 2006 by - David Turner, Robert Wilhelm, and Werner Lemberg - - - -Introduction -============ - - The FreeType Project is distributed in several archive packages; - some of them may contain, in addition to the FreeType font engine, - various tools and contributions which rely on, or relate to, the - FreeType Project. - - This license applies to all files found in such packages, and - which do not fall under their own explicit license. The license - affects thus the FreeType font engine, the test programs, - documentation and makefiles, at the very least. - - This license was inspired by the BSD, Artistic, and IJG - (Independent JPEG Group) licenses, which all encourage inclusion - and use of free software in commercial and freeware products - alike. As a consequence, its main points are that: - - o We don't promise that this software works. However, we will be - interested in any kind of bug reports. (`as is' distribution) - - o You can use this software for whatever you want, in parts or - full form, without having to pay us. (`royalty-free' usage) - - o You may not pretend that you wrote this software. If you use - it, or only parts of it, in a program, you must acknowledge - somewhere in your documentation that you have used the - FreeType code. (`credits') - - We specifically permit and encourage the inclusion of this - software, with or without modifications, in commercial products. - We disclaim all warranties covering The FreeType Project and - assume no liability related to The FreeType Project. - - - Finally, many people asked us for a preferred form for a - credit/disclaimer to use in compliance with this license. We thus - encourage you to use the following text: - - """ - Portions of this software are copyright The FreeType - Project (www.freetype.org). All rights reserved. - """ - - Please replace with the value from the FreeType version you - actually use. - - -Legal Terms -=========== - -0. Definitions --------------- - - Throughout this license, the terms `package', `FreeType Project', - and `FreeType archive' refer to the set of files originally - distributed by the authors (David Turner, Robert Wilhelm, and - Werner Lemberg) as the `FreeType Project', be they named as alpha, - beta or final release. - - `You' refers to the licensee, or person using the project, where - `using' is a generic term including compiling the project's source - code as well as linking it to form a `program' or `executable'. - This program is referred to as `a program using the FreeType - engine'. - - This license applies to all files distributed in the original - FreeType Project, including all source code, binaries and - documentation, unless otherwise stated in the file in its - original, unmodified form as distributed in the original archive. - If you are unsure whether or not a particular file is covered by - this license, you must contact us to verify this. - - The FreeType Project is copyright (C) 1996-2000 by David Turner, - Robert Wilhelm, and Werner Lemberg. All rights reserved except as - specified below. - -1. No Warranty --------------- - - THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO - USE, OF THE FREETYPE PROJECT. - -2. Redistribution ------------------ - - This license grants a worldwide, royalty-free, perpetual and - irrevocable right and license to use, execute, perform, compile, - display, copy, create derivative works of, distribute and - sublicense the FreeType Project (in both source and object code - forms) and derivative works thereof for any purpose; and to - authorize others to exercise some or all of the rights granted - herein, subject to the following conditions: - - o Redistribution of source code must retain this license file - (`FTL.TXT') unaltered; any additions, deletions or changes to - the original files must be clearly indicated in accompanying - documentation. The copyright notices of the unaltered, - original files must be preserved in all copies of source - files. - - o Redistribution in binary form must provide a disclaimer that - states that the software is based in part of the work of the - FreeType Team, in the distribution documentation. We also - encourage you to put an URL to the FreeType web page in your - documentation, though this isn't mandatory. - - These conditions apply to any software derived from or based on - the FreeType Project, not just the unmodified files. If you use - our work, you must acknowledge us. However, no fee need be paid - to us. - -3. Advertising --------------- - - Neither the FreeType authors and contributors nor you shall use - the name of the other for commercial, advertising, or promotional - purposes without specific prior written permission. - - We suggest, but do not require, that you use one or more of the - following phrases to refer to this software in your documentation - or advertising materials: `FreeType Project', `FreeType Engine', - `FreeType library', or `FreeType Distribution'. - - As you have not signed this license, you are not required to - accept it. However, as the FreeType Project is copyrighted - material, only this license, or another one contracted with the - authors, grants you the right to use, distribute, and modify it. - Therefore, by using, distributing, or modifying the FreeType - Project, you indicate that you understand and accept all the terms - of this license. - -4. Contacts ------------ - - There are two mailing lists related to FreeType: - - o freetype@nongnu.org - - Discusses general use and applications of FreeType, as well as - future and wanted additions to the library and distribution. - If you are looking for support, start in this list if you - haven't found anything to help you in the documentation. - - o freetype-devel@nongnu.org - - Discusses bugs, as well as engine internals, design issues, - specific licenses, porting, etc. - - Our home page can be found at - - http://www.freetype.org - - ---- end of FTL.TXT --- diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/licenses/gpl.txt b/Godeps/_workspace/src/code.google.com/p/freetype-go/licenses/gpl.txt deleted file mode 100644 index b2fe7b6af3..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/licenses/gpl.txt +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 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/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/COPYING b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/COPYING deleted file mode 100644 index 78c6065337..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/COPYING +++ /dev/null @@ -1,42 +0,0 @@ -Luxi fonts copyright (c) 2001 by Bigelow & Holmes Inc. Luxi font -instruction code copyright (c) 2001 by URW++ GmbH. All Rights -Reserved. Luxi is a registered trademark of Bigelow & Holmes Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of these Fonts and associated documentation files (the "Font -Software"), to deal in the Font Software, including without -limitation the rights to use, copy, merge, publish, distribute, -sublicense, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to -the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software. - -The Font Software may not be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may not -be modified nor may additional glyphs or characters be added to the -Fonts. This License becomes null and void when the Fonts or Font -Software have been modified. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -BIGELOW & HOLMES INC. OR URW++ GMBH. BE LIABLE FOR ANY CLAIM, DAMAGES -OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, -INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR -INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT -SOFTWARE. - -Except as contained in this notice, the names of Bigelow & Holmes -Inc. and URW++ GmbH. shall not be used in advertising or otherwise to -promote the sale, use or other dealings in this Font Software without -prior written authorization from Bigelow & Holmes Inc. and URW++ GmbH. - -For further information, contact: - -info@urwpp.de -or -design@bigelowandholmes.com diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/README b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/README deleted file mode 100644 index bae438269f..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/README +++ /dev/null @@ -1,13 +0,0 @@ -The luxi*.ttf and COPYING files in this directory were copied from the X.org -project, specifically -http://xorg.freedesktop.org/releases/individual/font/font-bh-ttf-1.0.0.tar.bz2 - -There are three Luxi fonts: sans (s), serif (r) and monospaced (m). For example, -luxisr.ttf is Luxi Sans. The 'r' here means regular, as opposed to bold. - -The *.ttx files in this directory were generated from the *.ttf files -by the ttx command-line tool. -http://www.letterror.com/code/ttx/index.html - -The *-hinting.txt files in this directory were generated from the *.ttf files -by the ../cmd/print-glyph-points command-line tool. diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luximr.ttf b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luximr.ttf deleted file mode 100644 index 6ad6e1266faff2824dd3cef235e1c833875c2121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71784 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 KXY_8t$NvWn>r3hY diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luximr.ttx b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luximr.ttx deleted file mode 100644 index e60ebca45d..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luximr.ttx +++ /dev/null @@ -1,24616 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 15 values pushed */ - 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - FDEF[ ] - SLOOP[ ] - MDAP[1] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - MDAP[1] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP1[ ] - SRP2[ ] - IP[ ] - ENDF[ ] - FDEF[ ] - SRP1[ ] - SRP2[ ] - SLOOP[ ] - IP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MIRP[11101] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MIRP[10100] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MDRP[11101] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MDRP[10100] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MIRP[11101] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MIRP[10100] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MDRP[11101] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MDRP[10100] - ENDF[ ] - FDEF[ ] - MDRP[00100] - ENDF[ ] - FDEF[ ] - MDRP[00000] - ENDF[ ] - FDEF[ ] - SVTCA[0] - NPUSHB[ ] /* 10 values pushed */ - 1 0 0 1 1 2 2 3 3 0 - SZPS[ ] - MIAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SZPS[ ] - ENDF[ ] - - - - - - PUSHB[ ] /* 2 values pushed */ - 48 1 - PUSHW[ ] /* 1 value pushed */ - 329 - RTG[ ] - SCANCTRL[ ] - SCANTYPE[ ] - SCVTCI[ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 16 values pushed */ - 5 6 2 1 4 7 3 0 5 4 2 3 6 7 1 0 - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - SVTCA[0] - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 19 18 2 7 16 3 0 0 17 16 6 1 0 14 13 10 9 6 5 2 1 6 7 3 2 - 4 48 200 15 0 1 12 11 4 3 3 2 0 8 7 0 14 19 18 17 16 15 14 13 12 - 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 133 values pushed */ - 33 32 26 25 20 19 6 21 23 3 28 27 2 0 30 3 4 3 2 9 1 3 0 0 22 - 21 6 1 17 29 0 6 1 23 31 30 6 1 9 16 15 12 11 8 7 2 1 6 7 5 - 4 4 48 200 24 23 1 10 9 1 14 13 6 5 3 3 0 18 17 0 14 29 28 25 24 - 4 20 0 3 33 30 16 15 14 13 12 11 10 7 6 11 13 8 0 0 3 2 6 1 4 - 21 20 6 1 18 32 31 17 9 8 19 4 0 3 4 48 200 5 4 1 19 18 1 27 26 - 1 23 22 1 0 3 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 23 20 2 21 7 3 19 18 2 7 16 3 0 0 17 16 6 1 0 14 13 10 9 6 5 - 2 1 6 7 3 2 4 48 200 22 21 1 15 0 1 12 11 4 3 3 3 0 8 7 0 - 14 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 23 14 30 48 200 19 18 2 7 16 3 26 25 21 20 4 13 30 7 0 0 17 16 - 6 1 0 14 13 10 9 6 5 2 1 6 7 3 2 4 48 200 15 0 1 12 11 4 3 - 3 2 0 8 7 0 14 26 25 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 - 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 27 26 25 24 23 20 6 21 7 3 19 18 2 7 16 3 0 0 17 16 6 1 0 14 13 - 10 9 6 5 2 1 6 7 3 2 4 48 200 22 21 1 15 0 1 12 11 4 3 3 3 - 0 8 7 0 14 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 - 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 116 values pushed */ - 19 18 2 7 16 3 0 0 27 24 23 20 10 3 21 17 16 6 1 0 14 13 10 9 6 - 5 2 1 6 7 3 3 4 48 200 26 25 22 21 3 15 0 1 12 11 4 3 3 3 0 - 8 7 0 14 17 15 14 13 12 5 26 24 3 19 18 8 7 4 24 22 3 16 3 2 0 - 4 22 20 3 11 10 9 3 13 26 6 5 4 1 4 13 20 0 0 25 24 10 1 26 23 - 22 10 1 20 2 4 48 200 27 26 1 21 20 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 21 20 2 22 7 3 19 18 2 7 16 3 0 0 17 16 6 1 0 14 13 10 9 6 5 - 2 1 6 7 3 2 4 48 200 23 22 1 15 0 1 12 11 4 3 3 3 0 8 7 0 - 14 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 19 18 2 7 16 3 0 0 23 20 6 1 21 17 16 6 1 0 14 13 10 9 6 5 2 - 1 6 7 3 3 4 48 200 22 21 1 15 0 1 12 11 4 3 3 3 0 8 7 0 14 - 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 25 17 30 48 200 19 18 2 7 16 3 28 27 30 3 0 0 17 16 6 1 0 14 - 13 10 9 6 5 2 1 6 7 3 2 4 48 200 15 0 1 21 20 12 11 4 3 5 2 - 0 8 7 0 14 0 0 23 20 32 48 200 32 28 27 21 20 19 18 17 16 15 14 13 12 - 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 88 values pushed */ - 0 0 44 32 28 36 32 20 48 200 28 0 19 18 2 7 16 3 20 7 0 0 17 16 6 - 1 0 14 13 10 9 6 5 2 1 6 7 3 2 4 48 200 15 0 1 12 11 4 3 3 - 2 0 8 7 0 14 0 0 48 32 24 40 32 32 48 200 32 24 19 18 17 16 15 14 13 - 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 41 5 24 29 5 36 48 200 19 18 2 7 16 3 43 32 31 20 4 13 36 24 7 - 0 0 17 16 6 1 0 14 13 10 9 6 5 2 1 6 7 3 2 4 48 200 15 0 1 - 12 11 4 3 3 2 0 8 7 0 14 43 32 31 20 19 18 17 16 15 14 13 12 11 10 - 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 29 28 27 26 10 5 1 0 3 0 0 34 33 2 1 6 3 3 20 19 18 0 6 3 16 - 2 4 48 200 17 16 1 0 4 3 0 14 0 0 31 39 6 22 39 14 48 200 33 29 26 - 20 16 10 4 7 13 14 6 19 18 17 3 2 4 13 0 0 0 34 28 27 19 10 3 0 - 1 4 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 55 values pushed */ - 0 0 25 20 2 17 5 10 48 200 10 0 2 2 1 1 27 15 14 13 12 0 6 0 2 - 3 0 0 14 0 0 21 39 6 48 200 15 14 6 12 0 0 13 12 29 1 0 1 5 48 - 200 27 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 0 0 25 20 2 17 5 10 48 200 10 0 2 2 1 31 28 2 29 0 3 0 1 1 27 - 15 14 13 12 0 6 0 2 3 0 0 30 29 1 0 14 0 0 21 39 6 48 200 31 30 - 29 28 15 14 6 13 6 12 0 0 13 12 29 1 0 1 5 48 200 27 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 78 values pushed */ - 0 0 25 20 2 17 5 10 48 200 10 0 2 2 1 1 27 15 14 13 12 0 6 0 2 - 3 0 0 35 34 33 32 31 28 6 13 29 30 29 1 0 14 0 0 21 39 6 48 200 35 - 34 33 32 31 30 29 28 15 14 10 13 6 12 0 0 13 12 29 1 0 1 5 48 200 27 - 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 0 0 43 32 38 25 20 2 17 5 10 48 200 10 0 2 2 1 1 27 15 14 13 12 0 - 6 0 2 3 0 0 1 47 41 40 30 29 28 6 13 38 2 0 14 0 0 45 20 34 21 - 39 6 48 200 47 41 40 30 29 28 15 14 8 13 34 6 12 0 0 13 12 29 1 0 1 - 5 48 200 27 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 25 20 2 17 5 10 48 200 10 0 2 2 1 35 34 33 32 31 28 6 29 0 3 - 0 1 1 27 15 14 13 12 0 6 0 2 3 0 0 30 29 1 0 14 0 0 21 39 6 - 48 200 35 34 33 32 31 30 29 28 15 14 10 13 6 12 0 0 13 12 29 1 0 1 5 - 48 200 27 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 25 20 2 17 5 10 48 200 10 0 2 2 1 1 27 15 14 13 12 0 6 0 2 - 3 0 0 0 0 31 28 10 1 29 1 4 48 200 30 29 1 0 14 0 0 21 39 6 48 - 200 15 14 2 12 30 3 6 28 0 0 31 30 10 1 28 1 4 13 12 29 1 0 1 5 - 48 200 29 28 1 27 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 21 20 4 3 6 3 5 14 13 2 1 6 3 0 2 4 48 200 12 0 1 0 6 - 5 0 14 0 0 16 39 8 48 200 20 14 12 6 4 13 8 13 5 4 1 0 4 13 2 - 0 0 21 13 10 1 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 89 values pushed */ - 29 28 27 26 25 22 6 13 23 0 0 21 20 4 3 6 3 5 14 13 2 1 6 3 0 - 2 4 48 200 24 23 1 12 0 1 2 0 6 5 0 14 0 0 16 39 8 48 200 26 13 - 2 2 29 28 27 24 23 22 20 14 12 6 10 13 8 13 25 5 4 1 0 5 13 2 0 - 0 21 13 10 1 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 0 0 29 17 8 7 6 3 9 21 20 4 3 6 3 5 23 22 2 1 6 3 0 3 4 - 48 200 19 18 6 5 3 16 0 1 2 0 10 9 0 14 0 0 25 39 12 48 200 29 23 - 20 19 16 10 6 13 12 17 9 8 5 4 1 0 6 13 2 0 0 22 21 18 17 10 3 - 2 1 4 48 200 7 6 3 2 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 108 values pushed */ - 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 3 0 0 10 9 4 3 6 3 5 - 18 17 6 1 11 20 19 20 1 0 2 1 6 1 0 4 4 48 200 12 11 1 23 0 1 - 2 0 6 5 0 14 17 16 13 12 4 14 10 3 5 4 1 0 4 13 2 0 0 21 20 - 6 1 22 9 8 6 1 6 19 18 11 10 10 3 2 3 4 48 200 23 22 1 7 6 1 - 15 14 1 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 124 values pushed */ - 27 24 2 25 5 3 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 3 0 0 10 - 9 4 3 6 3 5 18 17 6 1 11 20 19 20 1 0 2 1 6 1 0 4 4 48 200 - 26 25 1 12 11 1 23 0 1 3 0 6 5 0 14 26 8 14 2 27 25 24 17 16 13 - 12 7 14 10 3 5 4 1 0 4 13 2 0 0 21 20 6 1 22 9 8 6 1 6 19 - 18 11 10 10 3 2 3 4 48 200 23 22 1 7 6 1 15 14 1 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 133 values pushed */ - 0 0 27 14 34 48 200 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 3 30 29 - 25 24 4 13 34 5 0 0 10 9 4 3 6 3 5 18 17 6 1 11 20 19 20 1 0 - 2 1 6 1 0 4 4 48 200 12 11 1 23 0 1 2 0 6 5 0 14 30 20 8 2 - 29 17 16 13 12 5 14 10 3 25 10 2 2 5 4 1 0 4 13 2 0 0 21 20 6 - 1 22 9 8 6 1 6 19 18 11 10 10 3 2 3 4 48 200 23 22 1 7 6 1 15 - 14 1 24 3 2 2 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 134 values pushed */ - 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 3 31 30 29 28 27 24 6 13 25 - 0 0 10 9 4 3 6 3 5 18 17 6 1 11 20 19 20 1 0 2 1 6 1 0 4 - 4 48 200 26 25 1 12 11 1 23 0 1 3 0 6 5 0 14 24 20 8 2 31 30 29 - 26 25 17 16 13 12 9 14 10 3 28 10 2 2 27 5 4 1 0 5 13 2 0 0 21 - 20 6 1 22 9 8 6 1 6 19 18 11 10 10 3 2 3 4 48 200 23 22 1 7 6 - 1 15 14 1 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 135 values pushed */ - 31 30 29 28 27 24 6 25 5 3 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 - 3 0 0 10 9 4 3 6 3 5 18 17 6 1 11 20 19 20 1 0 2 1 6 1 0 - 4 4 48 200 26 25 1 12 11 1 23 0 1 3 0 6 5 0 14 27 6 20 2 30 29 - 28 26 25 17 16 13 12 9 14 10 3 31 10 2 2 5 4 1 0 4 13 2 0 0 21 - 20 6 1 22 9 8 6 1 6 19 18 11 10 10 3 2 3 4 48 200 23 22 1 7 6 - 1 15 14 1 24 3 2 2 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 135 values pushed */ - 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 3 0 0 31 28 27 24 10 3 25 - 10 9 4 3 6 3 5 18 17 6 1 11 20 19 20 1 0 2 1 6 1 0 5 4 48 - 200 30 29 26 25 3 12 11 1 23 0 1 3 0 6 5 0 14 17 16 13 12 4 14 28 - 3 5 4 1 0 4 13 2 0 0 29 28 10 1 30 27 26 10 1 2 21 20 6 1 22 - 9 8 6 1 6 19 18 11 10 10 3 2 5 4 48 200 31 30 1 23 22 1 7 6 1 - 15 14 1 25 24 3 2 3 5 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 124 values pushed */ - 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 3 0 0 27 24 10 1 25 10 9 - 4 3 6 3 5 18 17 6 1 11 20 19 20 1 0 2 1 6 1 0 5 4 48 200 26 - 25 1 12 11 1 23 0 1 3 0 6 5 0 14 17 16 13 12 4 14 26 3 5 4 1 - 0 4 13 2 0 0 27 26 10 1 24 21 20 6 1 22 9 8 6 1 6 19 18 11 10 - 10 3 2 4 4 48 200 25 24 1 23 22 1 7 6 1 15 14 1 3 2 1 5 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 124 values pushed */ - 25 24 2 26 5 3 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 3 0 0 10 - 9 4 3 6 3 5 18 17 6 1 11 20 19 20 1 0 2 1 6 1 0 4 4 48 200 - 27 26 1 12 11 1 23 0 1 3 0 6 5 0 14 27 25 24 17 16 13 12 7 14 10 - 3 26 10 2 2 5 4 1 0 4 13 2 0 0 21 20 6 1 22 9 8 6 1 6 19 - 18 11 10 10 3 2 3 4 48 200 23 22 1 7 6 1 15 14 1 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 128 values pushed */ - 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 3 0 0 27 24 6 1 25 10 9 - 4 3 6 3 5 18 17 6 1 11 20 19 20 1 0 2 1 6 1 0 5 4 48 200 26 - 25 1 12 11 1 23 0 1 3 0 6 5 0 14 27 26 2 20 8 3 17 16 13 12 4 - 14 10 3 25 24 2 10 2 3 5 4 1 0 4 13 2 0 0 21 20 6 1 22 9 8 - 6 1 6 19 18 11 10 10 3 2 3 4 48 200 23 22 1 7 6 1 15 14 1 3 2 - 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 108 values pushed */ - 0 0 26 17 19 48 200 37 36 35 34 14 13 10 9 8 7 4 3 2 1 14 5 0 3 - 24 23 22 21 4 13 19 0 38 33 15 0 3 0 12 11 6 5 0 3 14 30 30 14 8 - 2 24 23 11 10 7 5 8 21 3 38 37 34 3 21 6 3 13 12 2 13 14 5 4 1 - 0 4 13 2 0 0 33 9 8 6 2 14 36 35 6 6 2 2 2 4 48 200 15 14 1 - 22 21 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MDAP[1] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 141 values pushed */ - 0 0 29 17 34 48 200 14 13 8 7 4 3 11 3 22 21 16 15 4 17 19 3 32 31 - 34 0 0 0 10 9 4 3 6 3 5 18 17 6 1 11 20 19 20 1 0 2 1 6 1 - 0 4 4 48 200 12 11 1 25 24 23 0 3 2 0 6 5 0 14 0 0 27 20 36 48 - 200 32 31 2 6 20 3 25 20 8 2 36 36 24 17 16 13 12 6 14 10 3 5 4 1 - 0 4 13 2 0 0 21 20 6 1 22 9 8 6 1 6 19 18 11 10 10 3 2 3 4 - 48 200 23 22 1 7 6 1 15 14 1 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 0 0 29 17 8 7 6 3 9 21 20 4 3 6 3 5 23 22 2 1 6 3 0 3 4 - 48 200 19 18 6 5 3 16 0 1 2 0 10 9 0 14 0 0 25 39 12 48 200 29 23 - 20 19 16 10 6 13 12 17 9 8 5 4 1 0 6 13 2 0 0 22 21 18 17 10 3 - 2 1 4 48 200 7 6 3 2 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 114 values pushed */ - 0 0 37 20 42 14 5 7 48 200 42 2 7 0 1 12 11 10 9 4 0 2 3 0 52 - 0 30 2 1 40 39 2 32 2 3 0 0 0 21 20 1 0 6 3 2 49 48 33 32 6 - 3 30 2 4 48 200 19 18 3 2 3 51 50 31 30 3 2 0 14 0 0 27 36 53 48 - 200 52 51 50 49 48 33 32 31 30 21 20 19 18 12 11 3 2 1 0 19 13 53 9 0 - 0 10 9 29 1 39 1 5 48 200 40 39 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 114 values pushed */ - 0 0 37 20 42 14 5 7 48 200 42 2 7 0 1 12 11 10 9 4 0 2 3 0 52 - 0 30 2 1 40 39 2 32 2 3 0 0 0 21 20 1 0 6 3 2 49 48 33 32 6 - 3 30 2 4 48 200 19 18 3 2 3 51 50 31 30 3 2 0 14 0 0 27 36 53 48 - 200 52 51 50 49 48 33 32 31 30 21 20 19 18 12 11 3 2 1 0 19 13 53 9 0 - 0 10 9 29 1 39 1 5 48 200 40 39 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 97 values pushed */ - 17 16 11 10 4 6 14 3 19 18 2 20 0 3 0 0 13 12 7 6 6 3 8 21 20 - 6 1 14 5 4 1 0 6 3 2 3 4 48 200 15 14 1 3 2 1 2 0 9 8 0 - 14 20 19 16 15 2 1 6 17 0 3 8 7 4 3 4 13 5 0 0 12 11 6 1 9 - 21 14 13 0 10 3 5 2 4 48 200 10 9 1 18 17 1 6 5 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 0 0 23 20 2 17 5 10 48 200 10 0 2 2 1 15 14 13 12 4 0 28 3 0 1 - 25 0 2 26 2 3 0 0 0 27 26 6 1 28 1 4 48 200 29 28 1 0 14 0 0 - 19 39 6 48 200 15 14 2 12 25 3 28 27 6 25 0 0 26 25 10 1 0 1 4 48 - 200 29 0 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 0 0 33 14 40 23 20 2 17 5 10 48 200 10 0 2 2 1 15 14 13 12 4 0 28 - 3 0 1 25 0 2 26 2 3 0 1 36 35 31 30 4 13 40 0 0 0 0 27 26 6 - 1 28 1 4 48 200 29 28 1 0 14 0 0 19 39 6 48 200 36 35 15 14 4 12 25 - 3 31 30 28 27 4 13 6 25 0 0 26 25 10 1 0 1 4 48 200 29 0 1 13 12 - 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 110 values pushed */ - 0 0 23 20 2 17 5 10 48 200 10 0 2 2 1 37 36 35 34 33 30 6 31 0 3 - 0 1 15 14 13 12 4 0 28 3 0 1 25 0 2 26 2 3 0 0 0 27 26 6 1 - 28 1 4 48 200 32 31 1 29 28 1 2 0 14 0 0 19 39 6 48 200 34 33 15 14 - 4 12 25 3 37 36 35 32 31 30 28 27 8 13 6 25 0 0 26 25 10 1 0 1 4 - 48 200 29 0 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 107 values pushed */ - 0 0 33 32 44 23 20 2 17 5 10 48 200 10 0 2 2 1 15 14 13 12 4 0 28 - 3 0 1 25 0 2 26 2 3 0 1 38 37 31 30 4 13 44 2 0 0 0 27 26 6 - 1 28 1 4 48 200 29 28 1 0 14 0 0 35 20 42 19 39 6 48 200 15 14 2 12 - 25 3 38 37 31 30 28 27 6 13 42 6 25 0 0 26 25 10 1 0 1 4 48 200 29 - 0 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 105 values pushed */ - 0 0 23 20 2 17 5 10 48 200 10 0 2 2 1 15 14 13 12 4 0 28 3 0 1 - 25 0 2 26 2 3 0 0 0 33 30 10 1 31 27 26 6 1 28 2 4 48 200 32 31 - 1 29 28 1 2 0 14 0 0 19 39 6 48 200 15 14 2 12 25 3 28 27 2 32 30 - 3 6 30 0 0 33 32 10 1 30 26 25 10 1 0 2 4 48 200 31 30 1 29 0 1 - 13 12 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 106 values pushed */ - 20 19 16 15 12 11 8 7 8 9 13 3 26 25 22 21 6 5 2 1 8 0 3 3 0 - 0 27 0 6 1 13 1 4 48 200 14 13 1 24 23 4 3 3 2 0 18 17 10 9 0 - 3 14 25 24 17 16 11 10 3 2 8 14 0 3 23 22 19 18 4 13 20 9 8 5 4 - 4 13 6 0 0 27 26 15 14 10 3 20 13 12 1 0 10 3 6 2 4 48 200 21 20 - 1 7 6 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 143 values pushed */ - 24 23 20 19 16 15 12 11 8 13 17 3 26 25 10 9 4 17 2 3 38 37 34 33 30 - 29 6 5 8 35 4 3 18 17 1 36 35 1 39 32 31 4 3 1 0 1 4 0 22 21 - 14 13 0 3 28 27 8 7 3 2 1 5 14 39 38 33 32 21 20 15 14 8 1 0 3 - 31 30 27 26 23 22 6 13 24 13 12 9 8 5 4 6 13 6 0 0 35 34 19 18 2 - 1 10 5 24 37 36 17 16 3 0 10 5 6 2 4 48 200 29 28 25 24 3 11 10 7 - 6 3 35 34 19 18 2 1 5 37 36 17 16 3 0 5 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 133 values pushed */ - 35 34 33 32 31 28 6 29 9 3 20 19 16 15 12 11 8 7 8 9 13 3 26 25 22 - 21 6 5 2 1 8 0 3 3 0 0 27 0 6 1 13 1 4 48 200 30 29 1 14 13 - 1 24 23 4 3 3 3 0 18 17 10 9 0 3 14 31 20 14 2 35 34 33 32 30 29 - 25 24 17 16 11 10 3 2 14 14 0 3 28 0 6 2 23 22 19 18 4 13 20 9 8 - 5 4 4 13 6 0 0 27 26 15 14 10 3 20 13 12 1 0 10 3 6 2 4 48 200 - 21 20 1 7 6 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 0 0 8 7 4 3 6 3 5 10 9 2 1 6 3 0 2 4 48 200 11 0 1 0 6 - 5 0 14 11 10 7 6 4 13 8 5 4 1 0 4 13 2 0 0 9 8 10 1 2 1 - 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 100 values pushed */ - 0 0 17 5 28 48 200 28 2 24 19 15 14 13 10 9 2 1 9 3 0 3 12 0 0 - 0 21 20 8 7 4 3 6 5 5 1 4 48 200 11 0 1 0 23 22 6 5 0 3 14 - 22 21 15 14 4 19 12 3 11 10 7 6 4 12 8 3 5 4 1 0 4 13 2 0 0 - 20 19 10 1 23 9 8 10 1 2 2 4 48 200 24 23 1 13 12 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 15 12 2 13 5 3 0 0 8 7 4 3 6 3 5 10 9 2 1 6 3 0 2 4 48 - 200 14 13 1 11 0 1 2 0 6 5 0 14 15 8 2 2 14 13 11 10 7 6 6 13 - 8 5 4 1 0 4 13 2 0 0 9 8 10 1 2 1 4 48 200 12 3 2 2 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 76 values pushed */ - 0 0 15 14 22 48 200 18 17 13 12 4 13 22 5 0 0 8 7 4 3 6 3 5 10 - 9 2 1 6 3 0 2 4 48 200 11 0 1 0 6 5 0 14 18 17 11 10 7 6 6 - 13 8 13 12 5 4 1 0 6 13 2 0 0 9 8 10 1 2 1 4 48 200 3 2 1 - 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 19 18 17 16 15 12 6 13 5 3 0 0 8 7 4 3 6 3 5 10 9 2 1 6 3 - 0 2 4 48 200 14 13 1 11 0 1 2 0 6 5 0 14 18 17 2 8 2 3 16 15 - 14 11 10 7 6 7 13 8 19 13 12 5 4 1 0 7 13 2 0 0 9 8 10 1 2 - 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 19 16 15 12 10 3 13 8 7 4 3 6 3 5 10 9 2 1 6 3 0 3 4 - 48 200 18 17 14 13 3 11 0 1 2 0 6 5 0 14 11 10 7 6 4 13 18 5 4 - 1 0 4 13 12 0 0 17 16 10 1 18 15 14 10 1 12 9 8 10 1 2 3 4 48 - 200 19 18 1 13 12 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 0 0 15 12 10 1 13 8 7 4 3 6 3 5 10 9 2 1 6 3 0 3 4 48 200 - 14 13 1 11 0 1 2 0 6 5 0 14 11 10 7 6 4 13 8 5 4 1 0 4 13 - 2 0 0 15 14 10 1 2 9 8 10 1 2 2 4 48 200 13 12 3 2 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 13 12 2 14 5 3 0 0 8 7 4 3 6 3 5 10 9 2 1 6 3 0 2 4 48 - 200 15 14 1 11 0 1 2 0 6 5 0 14 13 12 2 8 2 3 11 10 7 6 4 13 - 8 15 14 5 4 1 0 6 13 2 0 0 9 8 10 1 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 15 12 6 1 13 8 7 4 3 6 3 5 10 9 2 1 6 3 0 3 4 48 200 - 14 13 1 11 0 1 2 0 6 5 0 14 15 14 11 10 7 6 6 13 8 13 12 5 4 - 1 0 6 13 2 0 0 9 8 10 1 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 0 0 17 17 22 48 200 20 19 22 0 0 0 8 7 4 3 6 3 5 10 9 2 1 6 - 3 0 2 4 48 200 13 12 11 0 3 0 6 5 0 14 0 0 15 20 24 48 200 24 24 - 8 2 2 20 19 13 12 11 10 7 6 8 13 8 5 4 1 0 4 13 2 0 0 9 8 - 10 1 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 33 5 16 21 5 28 48 200 35 24 23 12 4 13 28 16 5 0 0 8 7 4 3 - 6 3 5 10 9 2 1 6 3 0 2 4 48 200 11 0 1 0 6 5 0 14 24 23 11 - 10 7 6 6 13 8 35 12 5 4 1 0 6 13 2 0 0 9 8 10 1 2 1 4 48 - 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 5 5 20 48 200 20 2 1 16 9 3 2 1 0 6 10 2 3 0 0 0 15 14 - 11 10 6 3 12 1 4 48 200 13 12 0 14 12 11 3 2 4 9 0 3 14 13 2 13 - 15 0 0 10 9 10 1 15 1 4 48 200 16 15 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 96 values pushed */ - 0 0 5 5 20 48 200 20 2 29 28 27 26 25 22 6 23 12 3 1 16 9 3 2 1 - 0 6 10 2 3 0 0 0 15 14 11 10 6 3 12 1 4 48 200 24 23 1 0 13 12 - 0 14 28 27 24 3 15 9 3 29 23 22 12 11 3 2 7 9 0 3 26 25 14 13 4 - 13 15 0 0 10 9 10 1 15 1 4 48 200 16 15 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 27 26 25 24 23 22 19 18 17 16 15 12 11 10 9 8 7 4 3 2 1 21 5 0 3 - 28 21 20 0 3 0 14 13 6 5 0 3 14 28 27 24 23 22 21 20 19 18 17 16 15 - 14 13 12 11 10 7 6 19 13 8 5 4 1 0 4 13 2 0 0 26 25 9 8 10 3 - 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 111 values pushed */ - 0 0 32 32 43 48 200 27 26 25 24 23 22 19 18 17 16 15 12 11 10 9 8 7 4 - 3 2 1 21 5 0 3 37 36 30 29 4 13 43 0 28 21 20 0 3 0 14 13 6 5 - 0 3 14 0 0 34 20 41 48 200 37 36 30 29 28 27 24 23 22 21 20 19 18 17 16 - 15 14 13 12 11 10 7 6 23 13 41 8 5 4 1 0 4 13 2 0 0 26 25 9 8 - 10 3 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 13 12 2 4 10 3 0 0 9 8 5 4 6 3 6 11 10 20 1 0 3 2 6 1 0 - 3 4 48 200 1 0 1 0 7 6 0 14 8 7 2 11 9 3 6 5 2 1 4 13 3 - 0 0 12 11 6 1 0 10 9 10 1 3 2 4 48 200 13 0 1 4 3 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 91 values pushed */ - 17 14 2 15 6 3 13 12 2 4 10 3 0 0 9 8 5 4 6 3 6 11 10 20 1 - 0 3 2 6 1 0 3 4 48 200 16 15 1 1 0 1 2 0 7 6 0 14 16 15 8 - 7 4 11 9 3 14 9 3 2 6 5 2 1 4 13 3 0 0 12 11 6 1 0 17 10 - 9 10 2 3 2 4 48 200 13 0 1 4 3 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 99 values pushed */ - 22 19 18 17 15 14 13 12 8 4 10 3 0 0 9 8 5 4 6 3 6 11 10 20 1 - 0 3 2 6 1 0 3 4 48 200 1 0 1 0 21 20 7 6 0 3 14 18 17 2 11 - 14 3 8 7 2 14 9 3 6 5 2 1 4 13 3 0 0 20 19 15 14 10 3 21 12 - 11 6 1 0 10 9 10 1 3 3 4 48 200 22 21 1 13 0 1 4 3 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 106 values pushed */ - 0 0 17 32 28 48 200 13 12 2 4 10 3 22 21 15 14 4 13 28 0 0 0 9 8 - 5 4 6 3 6 11 10 20 1 0 3 2 6 1 0 3 4 48 200 1 0 1 0 7 6 - 0 14 0 0 19 20 26 48 200 26 26 22 21 8 7 5 11 9 3 15 14 2 9 3 3 - 6 5 2 1 4 13 3 0 0 12 11 6 1 0 10 9 10 1 3 2 4 48 200 13 0 - 1 4 3 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 13 12 2 14 10 3 0 0 17 14 10 1 15 9 8 5 4 6 3 6 11 10 20 1 0 - 3 2 6 1 0 4 4 48 200 16 15 1 1 0 1 2 0 7 6 0 14 8 7 2 14 - 9 3 6 5 2 1 4 13 3 0 0 15 14 10 1 0 12 11 6 1 0 10 9 10 1 - 3 3 4 48 200 17 16 13 0 3 4 3 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 89 values pushed */ - 20 19 16 15 14 13 6 5 4 3 10 7 17 3 0 0 12 11 8 7 6 3 9 18 17 - 20 1 0 2 1 6 1 0 3 4 48 200 21 0 1 0 10 9 0 14 11 10 2 14 12 - 3 0 0 19 18 6 1 20 17 16 13 12 10 3 2 2 4 48 200 21 20 1 15 14 1 - 7 6 3 2 3 9 8 5 4 1 0 5 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 91 values pushed */ - 26 25 24 23 22 21 20 19 18 17 14 13 12 11 8 7 4 3 2 1 20 5 0 3 27 - 16 15 0 3 0 10 9 6 5 0 3 14 27 26 23 22 21 20 17 16 9 8 7 6 12 - 18 24 3 15 14 11 10 4 13 12 5 4 1 0 4 13 2 0 0 19 18 34 1 12 25 - 24 6 1 2 2 4 48 200 13 12 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 79 values pushed */ - 20 19 18 17 14 13 10 9 8 7 4 3 2 1 14 5 0 3 21 16 15 0 3 0 12 - 11 6 5 0 3 14 21 20 17 11 10 7 6 8 6 3 13 12 2 13 14 5 4 1 0 - 4 13 2 0 0 16 9 8 6 2 14 19 18 6 6 2 2 2 4 48 200 15 14 1 3 - 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 96 values pushed */ - 25 22 2 23 5 3 20 19 18 17 14 13 10 9 8 7 4 3 2 1 14 5 0 3 24 - 23 1 21 16 15 0 3 2 0 12 11 6 5 0 3 14 24 14 8 2 25 23 22 21 20 - 17 11 10 7 9 8 6 3 13 12 2 13 14 5 4 1 0 4 13 2 0 0 16 9 8 - 6 2 14 19 18 6 6 2 2 2 4 48 200 15 14 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 106 values pushed */ - 20 19 18 17 14 13 10 9 8 7 4 3 2 1 14 5 0 3 29 28 27 26 25 22 6 - 13 23 24 23 1 21 16 15 0 3 2 0 12 11 6 5 0 3 14 22 14 8 2 29 28 - 27 26 24 23 21 20 17 11 10 7 12 8 6 3 25 6 2 2 13 12 2 13 14 5 4 - 1 0 4 13 2 0 0 16 9 8 6 2 14 19 18 6 6 2 2 2 4 48 200 15 14 - 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 107 values pushed */ - 0 0 25 32 36 48 200 20 19 18 17 14 13 10 9 8 7 4 3 2 1 14 5 0 3 - 30 29 23 22 4 13 36 0 21 16 15 0 3 0 12 11 6 5 0 3 14 0 0 27 20 - 34 48 200 34 34 30 29 23 22 21 20 17 11 10 7 11 8 6 3 13 12 2 13 14 5 - 4 1 0 4 13 2 0 0 16 9 8 6 2 14 19 18 6 6 2 2 2 4 48 200 15 - 14 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 108 values pushed */ - 0 0 43 5 26 31 5 38 48 200 20 19 18 17 14 13 10 9 8 7 4 3 2 1 14 - 5 0 3 45 34 33 22 4 13 38 26 5 21 16 15 0 3 0 12 11 6 5 0 3 14 - 34 14 8 2 45 33 21 20 17 11 10 7 8 8 6 3 22 6 2 2 13 12 2 13 14 - 5 4 1 0 4 13 2 0 0 16 9 8 6 2 14 19 18 6 6 2 2 2 4 48 200 - 15 14 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 24 5 8 16 5 0 48 200 8 2 0 0 14 0 0 28 39 4 20 39 12 48 200 - 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 131 values pushed */ - 0 0 42 5 3 36 5 11 48 200 11 0 3 2 13 14 18 2 34 23 22 17 16 5 18 - 20 3 33 31 30 25 24 5 26 28 3 1 28 0 2 0 0 19 18 6 1 14 27 26 6 - 1 20 29 28 20 1 0 3 4 48 200 21 20 1 32 0 1 2 0 15 14 0 14 0 0 - 38 24 7 48 200 26 25 22 21 4 17 19 3 7 0 0 0 30 29 6 1 31 18 17 6 - 1 15 34 33 14 13 1 0 19 5 19 3 4 48 200 32 31 1 16 15 1 24 23 1 28 - 27 20 19 3 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 24 5 8 16 5 0 48 200 8 2 0 0 1 35 32 2 33 0 3 0 34 33 1 - 0 14 0 0 28 39 4 20 39 12 48 200 35 34 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 35 14 42 24 5 8 16 5 0 48 200 8 2 0 0 1 38 37 33 32 4 13 42 - 0 0 14 0 0 28 36 4 20 36 12 48 200 38 37 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 51 values pushed */ - 0 0 24 5 8 16 5 0 48 200 8 2 0 0 1 39 38 37 36 35 32 6 33 0 3 - 0 34 33 1 0 14 0 0 28 39 4 20 39 12 48 200 39 38 37 36 35 34 33 32 12 - 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 0 0 24 5 8 16 5 0 48 200 8 2 0 0 0 0 39 36 35 32 10 3 33 1 4 - 48 200 38 37 34 33 3 0 14 0 0 28 39 4 20 39 12 48 200 4 38 12 32 0 0 - 37 36 10 1 38 35 34 10 1 32 2 4 48 200 39 38 1 33 32 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 24 5 8 16 5 0 48 200 8 2 0 0 1 33 32 2 34 0 3 0 35 34 1 - 0 14 0 0 28 39 4 20 39 12 48 200 35 34 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 51 values pushed */ - 0 0 24 5 8 16 5 0 48 200 8 2 0 0 1 39 36 35 32 4 33 0 3 0 38 - 37 34 33 3 0 14 0 0 28 39 4 20 39 12 48 200 39 38 37 36 35 34 33 32 12 - 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 0 0 24 5 8 16 5 0 48 200 8 2 0 0 0 0 35 32 6 1 33 1 4 48 200 - 34 33 1 0 14 0 0 28 39 4 20 39 12 48 200 35 34 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 61 values pushed */ - 36 2 25 0 3 1 1 30 27 17 3 1 5 0 1 3 0 0 11 1 1 38 19 11 9 - 0 5 1 2 3 0 0 1 29 28 2 13 0 0 1 39 18 2 0 14 39 38 32 30 29 - 28 27 21 19 18 17 15 9 7 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 48 values pushed */ - 0 0 53 5 36 41 5 48 24 5 8 16 5 0 48 200 8 2 0 0 1 55 44 43 32 - 4 13 48 36 0 0 14 0 0 28 39 4 20 39 12 48 200 55 44 43 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 18 17 16 0 4 7 1 3 0 0 23 22 8 7 6 3 9 6 5 2 1 6 3 3 2 - 4 48 200 4 3 1 0 10 9 0 14 0 0 20 39 12 48 200 22 18 16 10 3 2 6 - 13 12 0 9 8 5 4 4 13 6 0 0 23 17 1 0 10 3 6 1 4 48 200 7 6 - 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 36 values pushed */ - 0 0 24 5 10 48 200 10 0 1 22 20 18 0 4 13 32 0 0 14 0 0 36 39 14 - 28 39 6 48 200 22 20 18 14 6 0 - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 25 24 14 3 3 19 3 22 21 16 15 2 1 6 19 0 3 0 0 30 29 4 3 6 3 - 5 1 4 48 200 20 19 1 23 18 17 0 3 2 0 6 5 0 14 0 0 27 39 10 48 - 200 29 25 23 22 19 18 17 16 15 14 6 11 13 10 20 5 4 1 0 4 13 2 0 0 - 30 24 21 20 10 3 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 34 31 2 32 5 3 25 24 14 3 3 19 3 22 21 16 15 2 1 6 19 0 3 0 0 - 30 29 4 3 6 3 5 1 4 48 200 33 32 1 20 19 1 23 18 17 0 3 3 0 6 - 5 0 14 0 0 27 39 10 48 200 34 33 32 31 29 25 23 22 19 18 17 16 15 14 6 - 15 13 10 20 5 4 1 0 4 13 2 0 0 30 24 21 20 10 3 2 1 4 48 200 3 - 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 113 values pushed */ - 25 24 14 3 3 19 3 22 21 16 15 2 1 6 19 0 3 38 37 36 35 34 31 6 13 - 32 0 0 30 29 4 3 6 3 5 1 4 48 200 33 32 1 20 19 1 23 18 17 0 3 - 3 0 6 5 0 14 0 0 27 39 10 48 200 35 20 2 2 38 37 36 33 32 31 29 25 - 23 22 19 18 17 16 15 14 6 17 13 10 20 34 5 4 1 0 5 13 2 0 0 30 24 - 21 20 10 3 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 113 values pushed */ - 0 0 34 32 45 48 200 25 24 14 3 3 19 3 22 21 16 15 2 1 6 19 0 3 39 - 38 32 31 4 13 45 0 0 0 30 29 4 3 6 3 5 1 4 48 200 20 19 1 23 18 - 17 0 3 2 0 6 5 0 14 0 0 36 20 43 27 39 10 48 200 39 38 32 31 29 25 - 23 22 19 18 17 16 15 14 6 15 13 43 10 20 5 4 1 0 4 13 2 0 0 30 24 - 21 20 10 3 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 61 values pushed */ - 0 0 25 5 18 5 5 40 48 200 40 2 18 0 1 1 23 22 21 20 3 2 1 0 8 - 0 2 3 0 0 14 0 0 27 19 16 9 28 36 48 200 16 23 22 16 3 2 5 20 0 - 3 36 20 21 20 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 25 5 18 5 5 40 48 200 40 2 18 0 1 45 42 2 43 0 3 0 1 1 23 - 22 21 20 3 2 1 0 8 0 2 3 0 0 44 43 1 0 14 0 0 27 19 16 9 28 - 36 48 200 16 45 44 43 42 23 22 16 3 2 9 20 0 3 36 20 21 20 1 1 0 1 - 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 0 0 25 5 18 5 5 40 48 200 40 2 18 0 1 1 23 22 21 20 3 2 1 0 8 - 0 2 3 0 0 49 48 47 46 45 42 6 13 43 44 43 1 0 14 0 0 27 19 16 9 - 28 36 48 200 16 49 48 47 46 45 44 43 42 23 22 16 3 2 13 20 0 3 36 20 21 - 20 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 57 32 52 25 5 18 5 5 40 48 200 40 2 18 0 1 1 23 22 21 20 3 2 - 1 0 8 0 2 3 0 0 1 61 55 54 44 43 42 6 13 52 2 0 14 0 0 59 20 - 48 27 19 16 9 28 36 48 200 48 16 61 55 54 48 44 43 42 23 22 16 3 2 12 20 - 0 3 36 20 21 20 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 25 5 18 5 5 40 48 200 40 2 18 0 1 49 48 47 46 45 42 6 43 0 3 - 0 1 1 23 22 21 20 3 2 1 0 8 0 2 3 0 0 44 43 1 0 14 0 0 27 - 19 16 9 28 36 48 200 16 49 48 47 46 45 44 43 42 23 22 16 3 2 13 20 0 3 - 36 20 21 20 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 0 0 45 32 56 25 5 18 5 5 40 48 200 40 2 18 0 1 1 23 22 21 20 3 2 - 1 0 8 0 2 3 0 0 1 50 49 43 42 4 13 56 2 0 14 0 0 47 20 54 27 - 19 16 9 28 36 48 200 54 16 54 50 49 43 42 23 22 16 3 2 10 20 0 3 36 20 - 21 20 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 10 9 6 5 4 3 1 3 0 0 12 11 4 3 6 3 7 14 13 2 1 6 3 0 2 - 4 48 200 15 0 1 0 8 7 0 14 15 14 2 10 12 3 1 0 2 2 4 3 0 0 - 11 10 6 1 8 13 12 10 1 2 5 4 6 1 6 3 4 48 200 9 8 1 3 2 1 - 7 6 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 101 values pushed */ - 14 13 10 9 4 7 5 3 0 0 16 15 8 7 6 3 11 20 19 4 3 33 3 5 22 - 21 2 1 6 3 0 3 4 48 200 18 17 6 5 3 23 0 1 2 0 12 11 0 14 23 - 22 19 18 4 14 16 3 5 4 1 0 4 2 8 3 0 0 15 14 6 1 12 21 20 17 - 16 10 3 2 9 8 6 1 10 3 4 48 200 13 12 1 7 6 3 2 3 11 10 1 3 - 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 105 values pushed */ - 10 9 6 5 4 3 1 3 23 22 21 20 19 16 6 13 17 0 0 12 11 4 3 6 3 - 7 14 13 2 1 6 3 0 2 4 48 200 18 17 1 15 0 1 2 0 8 7 0 14 23 - 17 16 15 14 5 10 12 3 22 21 2 12 2 3 20 19 18 1 0 5 2 4 3 0 0 - 11 10 6 1 8 13 12 10 1 2 5 4 6 1 6 3 4 48 200 9 8 1 3 2 1 - 7 6 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 116 values pushed */ - 0 0 31 32 26 48 200 10 9 6 5 4 3 1 3 35 29 28 18 4 13 26 0 0 0 - 12 11 4 3 6 3 7 14 13 2 1 6 3 0 2 4 48 200 17 16 15 0 3 0 8 - 7 0 14 0 0 33 20 22 48 200 22 22 15 14 3 10 12 3 18 17 16 3 12 2 3 - 35 29 28 1 0 5 2 4 3 0 0 11 10 6 1 8 13 12 10 1 2 5 4 6 1 - 6 3 4 48 200 9 8 1 3 2 1 7 6 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 112 values pushed */ - 0 0 19 32 30 48 200 10 9 6 5 4 3 1 3 24 23 17 16 4 13 30 0 0 0 - 12 11 4 3 6 3 7 14 13 2 1 6 3 0 2 4 48 200 15 0 1 0 8 7 0 - 14 0 0 21 20 28 48 200 28 28 15 14 3 10 12 3 24 23 2 12 2 3 17 16 1 - 0 4 2 4 3 0 0 11 10 6 1 8 13 12 10 1 2 5 4 6 1 6 3 4 48 - 200 9 8 1 3 2 1 7 6 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 29 28 22 21 8 7 6 0 9 3 0 0 20 19 16 15 6 3 17 14 13 10 9 6 3 - 11 2 4 48 200 1 0 1 12 11 1 2 0 18 17 0 14 0 0 26 39 3 48 200 28 - 22 19 18 11 10 7 1 8 13 3 0 17 16 13 12 4 13 14 0 0 29 21 20 9 8 - 0 10 5 14 1 4 48 200 15 14 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 0 0 10 5 23 48 200 23 2 1 25 19 18 17 14 13 12 6 5 4 1 0 12 2 2 - 3 0 16 15 3 2 0 3 14 15 14 4 3 4 12 5 3 17 16 2 13 18 2 1 0 - 0 0 13 12 6 1 18 6 5 10 1 0 2 4 48 200 19 18 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 91 values pushed */ - 0 0 10 5 23 48 200 23 2 29 26 2 27 2 3 1 25 19 18 17 14 13 12 6 5 - 4 1 0 12 2 2 3 0 28 27 1 0 16 15 3 2 0 3 14 28 18 12 2 29 27 - 26 15 14 4 3 7 12 5 3 17 16 2 13 18 2 1 0 0 0 13 12 6 1 18 6 - 5 10 1 0 2 4 48 200 19 18 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 95 values pushed */ - 0 0 29 14 36 10 5 23 48 200 23 2 1 25 19 18 17 14 13 12 6 5 4 1 0 - 12 2 2 3 0 32 31 27 26 4 13 36 2 16 15 3 2 0 3 14 32 18 12 2 31 - 27 15 14 4 3 6 12 5 3 26 5 0 2 17 16 2 13 18 2 1 0 0 0 13 12 - 6 1 18 6 5 10 1 0 2 4 48 200 19 18 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 102 values pushed */ - 0 0 10 5 23 48 200 23 2 33 32 31 30 29 26 6 27 2 3 1 25 19 18 17 14 - 13 12 6 5 4 1 0 12 2 2 3 0 28 27 1 0 16 15 3 2 0 3 14 29 18 - 12 2 33 32 31 30 28 27 15 14 4 3 10 12 5 3 26 5 0 2 17 16 2 13 18 - 2 1 0 0 0 13 12 6 1 18 6 5 10 1 0 2 4 48 200 19 18 1 25 0 1 - 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 109 values pushed */ - 0 0 10 5 23 48 200 23 2 1 25 19 18 17 14 13 12 6 5 4 1 0 12 2 2 - 3 0 0 0 33 30 29 26 10 3 27 1 4 48 200 32 31 28 27 3 0 16 15 3 2 - 0 3 14 15 14 4 3 4 30 28 3 17 16 2 13 18 2 1 0 0 0 31 30 10 1 - 32 29 28 10 1 26 13 12 6 1 18 6 5 10 1 0 4 4 48 200 33 32 1 27 26 - 1 19 18 1 25 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 91 values pushed */ - 0 0 10 5 23 48 200 23 2 27 26 2 28 2 3 1 25 19 18 17 14 13 12 6 5 - 4 1 0 12 2 2 3 0 29 28 1 0 16 15 3 2 0 3 14 29 27 26 15 14 4 - 3 7 12 5 3 28 5 0 2 17 16 2 13 18 2 1 0 0 0 13 12 6 1 18 6 - 5 10 1 0 2 4 48 200 19 18 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 99 values pushed */ - 0 0 10 5 23 48 200 23 2 33 30 29 26 4 27 2 3 1 25 19 18 17 14 13 12 - 6 5 4 1 0 12 2 2 3 0 32 31 28 27 3 0 16 15 3 2 0 3 14 31 18 - 12 2 33 30 29 28 27 26 15 14 4 3 10 12 5 3 32 17 16 3 13 18 2 1 0 - 0 0 13 12 6 1 18 6 5 10 1 0 2 4 48 200 19 18 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 101 values pushed */ - 0 0 10 5 23 48 200 23 2 1 25 19 18 17 14 13 12 6 5 4 1 0 12 2 2 - 3 0 0 0 29 26 6 1 27 1 4 48 200 28 27 1 0 16 15 3 2 0 3 14 29 - 28 2 18 12 3 15 14 4 3 4 12 5 3 27 26 2 5 0 3 17 16 2 13 18 2 - 1 0 0 0 13 12 6 1 18 6 5 10 1 0 2 4 48 200 19 18 1 25 0 1 2 - 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 0 0 3 32 14 48 200 14 8 7 1 0 14 0 0 5 20 12 48 200 12 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 100 values pushed */ - 0 0 31 17 36 10 5 23 48 200 23 2 1 25 19 18 17 14 13 12 6 5 4 1 0 - 12 2 2 3 0 1 34 33 27 26 4 13 36 2 0 16 15 3 2 0 3 14 0 0 29 - 20 38 48 200 38 38 34 33 27 26 15 14 4 3 9 12 5 3 17 16 2 13 18 2 1 - 0 0 0 13 12 6 1 18 6 5 10 1 0 2 4 48 200 19 18 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 100 values pushed */ - 0 0 50 32 34 42 32 26 10 5 23 48 200 23 2 1 25 19 18 17 14 13 12 6 5 - 4 1 0 12 2 2 3 0 34 26 2 16 15 3 2 0 3 14 0 0 54 32 30 46 32 - 38 48 200 30 30 15 14 4 3 5 12 5 3 38 38 5 0 2 17 16 2 13 18 2 1 - 0 0 0 13 12 6 1 18 6 5 10 1 0 2 4 48 200 19 18 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 99 values pushed */ - 0 0 47 5 30 35 5 42 10 5 23 48 200 23 2 1 25 19 18 17 14 13 12 6 5 - 4 1 0 12 2 2 3 0 49 38 37 26 4 13 42 30 2 16 15 3 2 0 3 14 38 - 18 12 2 49 37 15 14 4 3 6 12 5 3 26 5 0 2 17 16 2 13 18 2 1 0 - 0 0 13 12 6 1 18 6 5 10 1 0 2 4 48 200 19 18 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 8 7 2 1 0 3 0 0 14 13 10 9 6 5 2 1 6 7 3 1 4 48 200 15 0 - 1 0 12 11 4 3 0 3 14 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 18 17 14 13 6 5 2 1 8 3 9 3 22 21 12 11 8 7 6 9 0 3 10 9 1 - 23 20 19 0 3 2 0 16 15 4 3 0 3 14 23 22 21 20 19 18 17 16 15 14 13 - 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 31 30 29 28 27 24 6 25 3 3 18 17 14 13 6 5 2 1 8 3 9 3 22 21 12 - 11 8 7 6 9 0 3 26 25 1 10 9 1 23 20 19 0 3 3 0 16 15 4 3 0 - 3 14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 - 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 24 17 16 15 12 11 10 9 8 5 4 3 12 6 1 3 0 0 26 25 23 22 19 18 2 - 1 6 7 0 1 4 48 200 27 21 20 0 3 0 14 13 7 6 0 3 14 27 26 25 24 - 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 18 11 10 3 4 4 1 3 0 0 17 16 13 12 9 8 5 4 6 7 6 20 19 2 1 - 6 3 0 2 4 48 200 21 0 1 0 15 14 7 6 0 3 14 11 10 2 18 2 3 21 - 20 17 16 15 14 13 12 8 13 18 9 8 7 6 5 4 1 0 8 13 2 0 0 19 18 - 10 1 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 100 values pushed */ - 25 22 2 23 6 3 18 11 10 3 4 4 1 3 0 0 17 16 13 12 9 8 5 4 6 - 7 6 20 19 2 1 6 3 0 2 4 48 200 24 23 1 21 0 1 2 0 15 14 7 6 - 0 3 14 25 22 11 10 4 18 2 3 24 23 21 20 17 16 15 14 13 12 10 13 18 9 - 8 7 6 5 4 1 0 8 13 2 0 0 19 18 10 1 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 108 values pushed */ - 29 28 27 26 25 22 6 23 6 3 18 11 10 3 4 4 1 3 0 0 17 16 13 12 9 - 8 5 4 6 7 6 20 19 2 1 6 3 0 2 4 48 200 24 23 1 21 0 1 2 0 - 15 14 7 6 0 3 14 28 27 23 11 10 5 18 2 3 26 25 24 21 20 17 16 15 14 - 13 12 11 13 18 29 22 9 8 7 6 5 4 1 0 10 13 2 0 0 19 18 10 1 2 - 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 124 values pushed */ - 18 11 10 3 4 4 1 3 0 0 29 26 25 22 10 3 23 17 16 13 12 9 8 5 4 - 6 7 6 20 19 2 1 6 3 0 3 4 48 200 28 27 24 23 3 21 0 1 2 0 15 - 14 7 6 0 3 14 21 20 14 13 12 5 28 26 3 11 10 2 18 24 3 9 8 7 3 - 2 22 3 17 16 15 3 13 28 6 5 4 1 0 5 13 22 0 0 27 26 10 1 28 25 - 24 10 1 22 19 18 10 1 2 3 4 48 200 29 28 1 23 22 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 12 11 5 4 4 2 1 3 0 0 8 3 2 6 2 6 10 9 1 20 2 0 2 4 48 - 200 13 0 1 0 7 6 0 14 8 7 2 12 10 3 9 2 2 10 3 3 1 0 5 0 - 0 11 10 6 1 12 4 3 6 1 5 2 4 48 200 13 12 1 6 5 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 17 14 2 15 6 3 12 11 5 4 4 2 1 3 0 0 8 3 2 6 2 6 10 9 1 - 20 2 0 2 4 48 200 16 15 1 13 0 1 2 0 7 6 0 14 8 7 2 12 10 3 - 17 16 15 14 9 2 6 10 3 3 1 0 5 0 0 11 10 6 1 12 4 3 6 1 5 - 2 4 48 200 13 12 1 6 5 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 97 values pushed */ - 12 11 5 4 4 2 1 3 21 20 19 18 17 14 6 13 15 0 0 8 3 2 6 2 6 - 10 9 1 20 2 0 2 4 48 200 16 15 1 13 0 1 2 0 7 6 0 14 14 8 7 - 3 12 10 3 21 20 19 18 16 15 9 2 8 10 3 3 17 3 5 2 1 0 5 0 0 - 11 10 6 1 12 4 3 6 1 5 2 4 48 200 13 12 1 6 5 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 12 11 5 4 4 2 1 3 0 0 17 14 10 1 15 8 3 2 6 2 6 10 9 1 20 - 2 0 3 4 48 200 16 15 1 13 0 1 2 0 7 6 0 14 8 7 2 12 10 3 2 - 10 16 2 9 14 3 2 1 0 5 0 0 17 16 10 1 14 11 10 6 1 12 4 3 6 - 1 5 3 4 48 200 15 14 1 13 12 1 6 5 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 38 14 2 14 5 21 48 200 21 1 2 2 1 32 31 30 27 26 25 19 18 17 16 - 12 11 10 0 14 1 28 3 0 29 28 1 0 14 0 0 36 39 6 48 200 29 25 0 2 - 32 17 16 10 4 0 18 3 28 27 2 13 25 6 18 0 0 31 30 12 11 0 10 4 25 - 1 4 48 200 26 25 1 19 18 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 12 values pushed */ - 3 0 1 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 111 values pushed */ - 0 0 60 5 31 53 30 4 40 14 45 18 5 25 48 200 45 2 31 1 25 1 4 2 1 - 29 23 22 21 20 14 6 1 12 3 0 35 12 36 2 1 47 43 42 0 4 36 2 3 0 - 0 0 49 48 37 36 6 3 12 1 4 48 200 56 55 13 12 3 0 14 0 0 51 24 8 - 48 200 56 55 37 36 35 29 0 7 42 13 3 49 21 20 12 4 13 22 3 8 22 43 42 - 1 48 47 14 13 3 23 22 1 3 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 6 1 1 1 4 48 200 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 0 0 59 5 17 51 14 3 48 200 17 0 3 2 1 53 25 11 3 0 32 3 0 45 43 - 41 40 39 35 34 31 30 29 27 1 12 32 0 3 33 32 1 42 0 1 2 0 14 0 0 - 61 13 13 57 13 21 47 13 7 48 200 53 45 43 42 41 40 39 35 34 33 32 31 30 29 - 27 25 21 13 11 7 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 2 1 4 1 0 1 4 48 200 3 0 1 0 14 0 0 3 2 4 1 0 1 4 - 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 18 values pushed */ - 4 1 2 13 0 5 3 2 0 3 0 14 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 24 16 5 11 16 18 48 200 5 13 18 0 14 13 1 1 0 1 2 0 14 14 13 - 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 17 1 32 31 29 28 26 25 24 22 21 20 19 17 15 12 11 7 6 5 4 2 1 0 22 - 13 2 3 0 14 13 0 14 32 31 29 28 26 25 24 22 21 20 19 15 14 13 12 11 9 - 7 6 5 4 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 0 0 58 14 22 50 17 30 44 5 2 36 5 10 48 200 10 0 2 2 30 1 48 47 32 - 30 18 17 14 13 12 9 0 15 3 0 22 1 46 22 0 3 15 2 3 0 16 15 1 0 - 14 0 0 54 16 26 40 6 6 48 200 15 14 2 13 12 32 18 26 6 0 0 0 48 47 - 46 17 16 0 6 5 12 1 4 48 200 13 12 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 28 30 10 22 14 18 48 200 18 2 10 1 1 3 2 2 4 1 3 0 1 30 20 - 6 3 1 0 3 0 5 4 1 1 0 1 2 0 14 0 0 26 39 14 48 200 14 0 4 - 3 1 0 0 30 20 6 5 0 10 4 1 1 4 48 200 2 1 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 3 2 1 1 0 1 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 2 1 1 3 0 1 2 0 14 0 0 3 2 16 1 0 1 4 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 52 51 40 29 28 27 26 15 14 13 12 1 0 14 0 0 49 19 5 31 19 22 17 13 36 - 10 13 44 48 200 52 51 44 40 36 29 28 27 26 22 15 14 13 12 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 52 51 40 29 28 27 26 15 14 13 12 1 0 14 0 0 49 19 5 31 19 22 17 13 36 - 10 13 44 48 200 52 51 44 40 36 29 28 27 26 22 15 14 13 12 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 0 0 4 3 6 1 1 6 5 6 1 0 2 4 48 200 2 1 1 7 0 1 2 0 14 - 7 6 3 2 4 13 4 0 0 5 4 12 1 0 1 4 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 0 0 5 4 6 1 6 3 2 6 1 0 2 4 48 200 7 6 1 1 0 1 2 0 14 - 6 5 2 1 4 13 3 0 0 4 3 12 1 0 1 4 48 200 7 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 17 values pushed */ - 0 0 3 14 10 48 200 10 6 5 1 0 14 6 5 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 34 values pushed */ - 6 5 1 7 4 1 2 1 1 3 0 1 4 0 14 0 0 7 6 3 2 16 3 0 1 - 4 48 200 5 4 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 15 values pushed */ - 0 0 0 8 48 200 8 14 0 0 4 12 48 200 12 - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 48 values pushed */ - 0 0 25 14 2 17 5 10 48 200 10 1 2 2 1 1 27 15 14 13 12 0 6 1 2 - 3 0 0 14 0 0 21 39 6 48 200 15 14 6 12 27 0 1 13 12 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 22 values pushed */ - 7 6 5 4 3 0 6 13 1 2 1 1 0 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 0 0 25 14 2 17 5 10 48 200 10 1 2 2 1 35 34 33 32 31 28 6 29 1 3 - 0 1 1 27 15 14 13 12 0 6 1 2 3 0 0 30 29 1 0 14 0 0 21 39 6 - 48 200 31 0 35 34 33 32 30 29 28 15 14 9 13 6 12 27 0 1 13 12 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 25 14 2 17 5 10 48 200 10 1 2 2 1 1 27 15 14 13 12 0 6 1 2 - 3 0 0 0 0 31 28 10 1 29 1 4 48 200 30 29 0 14 0 0 21 39 6 48 200 - 15 14 2 12 30 3 6 28 0 0 31 30 10 1 28 1 4 48 200 29 28 1 27 0 1 - 13 12 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 29 values pushed */ - 0 0 15 32 10 48 200 19 13 12 10 2 1 0 14 0 0 17 20 6 48 200 19 13 12 - 6 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 64 values pushed */ - 28 27 26 25 23 22 20 19 17 16 15 14 12 11 10 9 1 0 14 0 0 32 39 5 48 - 200 17 16 2 14 11 3 5 0 0 0 28 27 10 9 1 0 6 5 11 1 4 48 200 23 - 22 1 15 14 1 26 25 20 19 12 11 5 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 22 values pushed */ - 7 6 5 4 3 0 6 13 1 2 1 1 0 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 7 4 8 1 5 2 1 8 1 0 2 4 48 200 3 0 1 0 6 5 1 14 0 - 0 7 6 3 2 8 3 0 1 4 48 200 5 4 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 34 values pushed */ - 10 6 5 3 0 5 13 1 2 1 1 0 14 10 2 0 2 0 0 3 2 8 1 0 1 - 4 48 200 6 5 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 0 0 59 40 35 51 17 43 24 40 8 16 40 0 48 200 8 2 0 0 43 35 1 1 61 - 49 48 47 46 43 35 32 8 0 2 3 0 0 14 0 0 55 6 39 28 6 4 20 6 12 - 48 200 61 32 2 13 4 46 49 48 39 12 46 47 46 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 68 values pushed */ - 0 0 36 14 26 28 14 12 48 200 12 1 1 16 15 9 8 4 13 1 0 1 24 23 22 - 21 17 14 10 7 3 2 1 0 12 13 26 1 0 14 0 0 40 16 19 32 16 5 48 200 - 24 23 22 21 19 17 16 15 14 10 9 8 7 5 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 31 30 12 25 14 20 48 200 20 1 12 2 1 33 23 22 8 5 4 6 1 6 3 - 0 0 0 1 0 6 1 2 1 4 48 200 3 2 1 7 6 1 2 0 14 0 0 29 39 - 16 48 200 6 5 2 13 3 2 1 16 0 0 0 33 23 22 8 7 0 10 5 3 1 4 - 48 200 4 3 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 42 values pushed */ - 1 10 9 8 7 4 3 2 1 8 5 2 3 0 11 0 1 0 6 5 0 14 11 10 7 - 6 5 4 1 0 8 8 2 3 9 8 1 3 2 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 1 18 17 16 15 14 13 12 11 8 7 6 5 4 3 2 1 16 9 2 3 0 19 0 1 - 0 10 9 0 14 19 10 2 12 11 3 9 0 2 1 2 3 0 0 18 15 14 11 14 3 - 1 1 4 48 200 17 16 13 12 3 8 5 4 1 3 7 6 3 2 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 109 values pushed */ - 0 0 31 30 5 25 14 13 48 200 13 1 5 2 1 42 39 38 37 35 34 6 16 1 3 - 0 1 33 23 21 20 15 1 6 1 0 3 0 0 0 17 16 6 1 18 1 4 48 200 41 - 40 19 18 3 22 0 1 2 0 14 0 0 29 39 9 48 200 38 37 22 21 4 41 34 3 - 18 17 9 0 0 0 40 39 35 34 10 3 41 33 23 16 15 1 0 10 5 19 2 4 48 - 200 42 41 1 20 19 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 0 0 39 30 5 33 14 13 48 200 13 1 5 2 1 41 31 29 28 15 1 6 1 0 3 - 0 0 0 21 20 6 1 22 27 26 17 16 6 3 18 2 4 48 200 23 22 1 25 24 19 - 18 3 30 0 1 3 0 14 0 0 37 39 9 48 200 30 29 26 25 4 13 23 22 21 18 - 17 4 13 9 0 0 0 41 31 20 19 16 15 1 0 10 7 23 1 4 48 200 28 27 24 - 23 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 29 values pushed */ - 0 0 24 5 8 16 5 0 48 200 0 0 1 8 0 0 14 0 0 28 6 4 20 6 12 - 48 200 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 7 4 3 0 10 3 1 1 4 48 200 6 5 2 1 0 3 14 0 0 5 4 10 - 1 6 3 2 10 1 0 2 4 48 200 7 6 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 59 values pushed */ - 0 0 11 8 4 1 9 6 5 4 1 4 3 0 7 1 1 3 4 48 200 10 9 1 7 - 4 1 2 1 1 3 0 14 0 0 11 10 7 6 4 3 4 1 4 48 200 9 8 5 4 - 3 3 2 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 91 values pushed */ - 48 47 46 39 38 37 28 27 26 24 23 22 21 19 18 17 16 9 8 6 5 4 3 1 0 - 14 0 0 52 13 12 43 13 33 48 200 26 24 23 3 21 18 3 12 12 6 5 3 0 3 - 3 33 21 0 0 28 27 19 18 6 3 16 46 39 38 37 6 3 0 2 4 48 200 22 21 - 1 48 47 17 16 3 9 8 1 0 3 4 3 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 0 0 3 0 10 1 1 1 4 48 200 2 1 0 14 0 0 3 2 10 1 0 1 4 48 - 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 53 values pushed */ - 0 0 4 3 6 1 5 8 7 2 1 6 3 0 2 4 48 200 9 0 1 0 6 5 1 - 14 9 8 2 13 6 5 4 1 0 4 13 2 0 0 7 6 10 1 2 1 4 48 200 3 - 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 0 0 5 5 18 48 200 1 14 9 2 10 2 3 0 1 3 2 1 0 4 13 18 2 0 - 0 0 11 10 6 1 12 1 4 48 200 13 12 1 14 12 11 3 2 4 9 0 3 0 0 - 10 9 10 1 13 1 4 48 200 14 13 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 2 1 4 1 0 1 4 48 200 3 0 1 0 14 0 0 3 2 4 1 0 1 4 - 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 25 5 18 5 14 10 48 200 18 1 10 2 1 23 1 21 2 0 20 21 0 2 1 - 8 7 2 0 2 3 0 0 0 1 0 6 1 21 1 4 48 200 22 21 1 0 14 20 0 - 2 13 7 23 22 21 1 4 13 14 7 8 7 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 0 0 32 14 39 25 5 18 5 14 10 48 200 18 1 10 2 1 23 1 21 2 0 20 21 - 0 2 1 8 7 2 0 2 3 0 1 35 34 30 29 4 13 39 1 0 0 0 1 0 6 - 1 21 1 4 48 200 22 21 1 0 14 20 0 2 13 7 35 34 30 29 23 22 21 1 8 - 13 14 7 8 7 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 53 values pushed */ - 0 0 54 5 25 38 5 7 48 200 25 2 7 0 1 1 46 45 32 16 0 5 0 2 3 - 0 0 14 0 0 58 39 21 50 28 29 42 19 3 34 19 11 48 200 46 45 32 29 21 16 - 11 3 0 - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 10 9 6 5 2 1 4 5 0 1 4 48 200 11 8 7 4 3 0 5 0 14 0 - 0 9 8 4 1 10 7 6 4 1 4 3 2 4 1 0 3 4 48 200 11 10 1 5 4 - 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 6 1 1 1 4 48 200 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 200 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 28 30 11 23 17 16 48 200 11 1 32 31 30 26 7 4 3 2 1 9 5 0 3 - 25 21 20 19 18 5 13 16 0 33 0 1 0 6 5 1 14 33 32 21 20 4 25 18 3 - 5 4 1 0 4 13 2 0 0 31 30 7 6 10 3 2 1 4 48 200 26 25 1 19 18 - 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 0 0 7 4 7 1 5 2 1 7 1 0 2 4 48 200 6 5 1 3 0 1 2 0 14 - 7 6 3 2 3 5 4 1 0 3 2 0 - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 25 5 18 5 14 10 48 200 18 1 10 2 1 23 1 21 2 0 20 21 0 2 1 - 8 7 2 0 2 3 0 0 0 1 0 6 1 21 1 4 48 200 22 21 1 0 14 20 0 - 2 13 7 23 22 21 1 4 13 14 7 8 7 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 40 5 22 32 5 30 48 200 30 1 22 2 1 1 14 11 7 5 4 3 2 7 0 - 1 3 0 0 1 1 0 1 2 2 0 0 1 13 12 9 8 4 13 0 0 14 0 0 44 - 39 18 36 39 26 48 200 26 18 14 13 12 11 9 8 7 5 4 3 2 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 9 8 5 4 4 6 1 3 0 0 2 1 9 1 0 1 4 48 200 3 0 1 0 7 6 - 0 14 9 4 2 7 5 3 0 0 8 7 10 1 5 3 2 4 1 0 2 4 48 200 6 - 5 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 1 9 4 2 1 2 3 0 1 8 5 2 2 6 3 0 0 0 2 1 9 1 0 1 4 - 48 200 7 6 1 0 3 0 1 14 9 4 2 5 7 3 0 0 6 5 10 1 7 1 0 - 4 1 2 2 4 48 200 8 7 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 88 values pushed */ - 0 0 18 5 11 48 200 22 16 15 14 13 7 6 13 11 5 0 0 26 25 4 3 20 3 - 5 28 27 2 1 6 3 0 2 4 48 200 24 23 6 5 3 29 0 1 2 0 14 29 28 - 25 24 16 15 6 13 22 3 5 4 1 0 4 13 2 0 0 27 26 23 22 10 3 2 1 - 4 48 200 14 13 1 7 6 3 2 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 129 values pushed */ - 0 0 18 40 11 48 200 16 35 14 2 20 7 2 14 5 3 32 31 28 27 24 23 2 1 - 8 3 0 3 13 11 35 0 0 37 34 15 14 10 3 35 30 29 4 3 20 3 5 2 4 - 48 200 36 35 1 22 21 6 5 3 33 26 25 0 3 3 0 14 27 26 2 28 13 3 33 - 32 16 15 4 13 20 3 25 24 2 13 22 5 4 1 0 4 13 2 0 0 35 34 29 28 - 10 3 22 31 30 21 20 10 3 2 2 4 48 200 37 36 23 22 3 14 13 1 7 6 3 - 2 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 129 values pushed */ - 0 0 18 40 11 48 200 16 35 14 2 20 7 2 14 5 3 32 31 28 27 24 23 2 1 - 8 3 0 3 13 11 35 0 0 37 34 15 14 10 3 35 30 29 4 3 20 3 5 2 4 - 48 200 36 35 1 22 21 6 5 3 33 26 25 0 3 3 0 14 27 26 2 28 13 3 33 - 32 16 15 4 13 20 3 25 24 2 13 22 5 4 1 0 4 13 2 0 0 35 34 29 28 - 10 3 22 31 30 21 20 10 3 2 2 4 48 200 37 36 23 22 3 14 13 1 7 6 3 - 2 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 200 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 13 5 22 5 5 30 48 200 30 2 22 1 22 20 15 3 2 1 6 18 2 3 0 - 1 0 2 0 0 0 19 18 22 1 16 1 4 48 200 17 16 0 14 0 0 9 39 26 48 - 200 3 2 2 19 15 3 26 17 0 0 20 19 14 1 15 1 4 48 200 18 17 1 16 15 - 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 108 values pushed */ - 0 0 29 40 16 48 200 33 27 14 3 19 0 3 26 25 22 21 9 8 5 4 8 2 6 - 3 16 19 0 0 11 10 3 2 20 3 0 1 4 48 200 20 19 1 13 12 1 0 3 24 - 23 7 6 3 3 0 14 25 24 6 5 2 1 6 19 0 3 23 22 2 13 20 12 11 8 - 7 4 13 9 0 0 27 26 19 10 2 20 33 4 3 0 10 3 9 2 4 48 200 21 20 - 1 14 13 10 9 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 108 values pushed */ - 0 0 29 40 16 48 200 33 27 14 3 19 0 3 26 25 22 21 9 8 5 4 8 2 6 - 3 16 19 0 0 11 10 3 2 20 3 0 1 4 48 200 20 19 1 13 12 1 0 3 24 - 23 7 6 3 3 0 14 25 24 6 5 2 1 6 19 0 3 23 22 2 13 20 12 11 8 - 7 4 13 9 0 0 27 26 19 10 2 20 33 4 3 0 10 3 9 2 4 48 200 21 20 - 1 14 13 10 9 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 14 25 7 48 200 7 0 1 12 11 10 3 0 3 3 0 1 9 0 0 0 0 20 - 19 2 1 6 3 3 1 4 48 200 18 17 4 3 3 21 0 1 2 0 14 21 20 19 18 - 17 12 11 4 3 2 1 0 12 13 9 10 9 1 0 - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 79 values pushed */ - 17 3 2 2 0 0 16 15 6 5 2 7 4 0 14 13 10 9 6 3 11 2 4 48 200 - 8 7 1 0 3 12 11 1 2 0 4 3 0 14 11 10 2 6 4 3 15 13 12 3 4 - 0 1 3 0 0 17 16 14 0 12 3 4 1 4 48 200 7 6 1 9 8 5 4 3 2 - 1 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 13 5 4 2 0 0 10 9 3 2 6 3 4 1 4 48 200 6 5 1 12 11 8 7 4 - 4 1 0 1 3 0 14 9 8 2 13 0 11 5 4 3 4 13 1 0 0 13 12 2 1 - 16 3 0 1 4 48 200 10 7 6 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 2 1 1 3 0 1 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 2 1 1 3 0 1 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 2 1 1 3 0 1 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 89 values pushed */ - 0 0 61 5 24 53 5 13 46 5 36 48 200 13 1 24 1 26 24 18 17 15 5 6 1 - 31 3 0 0 31 41 2 1 16 1 0 36 41 0 0 32 31 7 1 41 1 4 48 200 52 - 41 1 0 14 0 0 65 19 20 57 28 9 50 28 34 44 28 38 29 15 2 48 200 52 41 - 38 34 32 31 26 20 18 17 16 15 9 5 2 0 - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 110 values pushed */ - 0 0 61 5 24 53 5 13 46 5 36 48 200 13 1 1 76 75 74 73 72 69 16 7 70 - 1 3 0 24 1 26 24 18 17 15 5 6 1 31 3 0 0 31 41 2 36 41 0 0 32 - 31 7 1 41 1 4 48 200 71 70 1 52 41 1 2 0 14 0 0 65 19 20 57 28 9 - 50 28 34 44 28 38 29 15 2 48 200 76 75 74 73 72 71 70 69 52 41 38 34 32 31 - 26 20 18 17 16 15 9 5 2 0 - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 135 values pushed */ - 0 0 61 5 24 53 5 13 46 5 36 48 200 13 1 1 16 75 1 2 0 24 1 26 24 - 18 17 15 5 6 1 31 3 0 0 31 41 2 77 74 73 72 70 69 6 13 75 36 41 0 - 0 32 31 7 1 41 1 4 48 200 76 75 1 52 41 1 2 0 14 0 0 65 19 20 57 - 28 9 50 28 34 44 28 38 29 15 2 48 200 73 72 31 3 69 76 3 52 32 18 17 16 - 15 6 13 34 20 69 41 26 5 0 4 13 38 9 2 3 12 76 0 0 75 74 70 69 10 - 3 76 1 4 48 200 77 76 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 125 values pushed */ - 0 0 61 5 24 53 5 13 46 5 36 48 200 13 1 1 16 69 1 2 0 24 1 26 24 - 18 17 15 5 6 1 31 3 0 0 31 41 2 36 41 0 0 72 69 10 1 70 32 31 7 - 1 41 2 4 48 200 52 41 1 0 71 70 0 14 0 0 65 19 20 57 28 9 50 28 34 - 44 28 38 29 15 2 48 200 31 71 69 2 52 32 18 17 16 15 6 13 34 20 71 41 26 - 5 0 4 13 38 9 2 3 12 69 0 0 72 71 10 1 69 1 4 48 200 70 69 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 53 5 9 36 5 29 48 200 29 2 59 58 57 34 33 32 31 3 2 1 10 13 9 - 0 60 0 1 0 14 0 0 51 28 13 38 15 25 18 13 46 48 200 46 60 59 46 3 31 - 57 3 34 33 2 13 25 13 31 1 0 2 0 0 58 57 10 1 2 1 4 48 200 32 31 - 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 12 values pushed */ - 1 0 2 3 2 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 18 values pushed */ - 5 4 3 2 1 0 14 5 2 2 13 0 4 3 1 0 3 0 - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 11 10 9 8 7 6 5 4 3 2 1 0 14 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 11 10 9 8 7 6 5 4 3 2 1 0 14 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 5 4 3 2 1 0 14 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 5 4 3 2 1 0 14 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 0 0 22 30 11 48 200 11 1 1 4 3 2 5 1 3 0 1 26 25 24 20 19 18 15 - 14 13 7 2 1 12 1 0 3 0 6 5 1 27 17 16 0 3 2 0 14 27 26 18 17 - 4 19 6 3 16 15 2 13 13 5 4 1 0 4 13 2 0 0 20 19 10 1 13 25 24 - 7 6 10 3 2 2 4 48 200 14 13 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 116 values pushed */ - 0 0 15 30 4 48 200 4 1 29 28 2 30 26 3 1 23 22 19 18 17 13 12 11 8 - 7 6 0 12 1 9 3 0 0 0 35 34 25 24 33 3 26 1 4 48 200 31 30 1 33 - 32 27 26 3 21 20 10 9 3 3 0 14 34 33 20 19 11 10 6 12 0 3 9 8 2 - 13 6 30 29 26 25 22 21 6 13 23 0 0 13 12 10 1 6 35 32 31 18 17 0 10 - 5 23 2 4 48 200 7 6 1 28 27 24 23 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 121 values pushed */ - 0 0 22 35 11 48 200 11 1 35 34 33 32 31 28 6 29 5 3 1 4 3 2 5 1 - 3 0 1 26 25 24 20 19 18 15 14 13 7 2 1 12 1 0 3 0 30 29 1 6 5 - 1 27 17 16 0 3 3 0 14 32 31 2 13 19 3 34 33 30 29 27 26 18 17 8 19 - 6 3 35 28 2 6 2 3 16 15 2 13 13 5 4 1 0 4 13 2 0 0 20 19 10 - 1 13 25 24 7 6 10 3 2 2 4 48 200 14 13 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 22 values pushed */ - 7 4 3 0 4 13 1 6 5 2 1 3 0 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 200 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 200 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 13 10 4 1 11 4 3 6 1 5 8 7 2 1 6 3 0 3 4 48 200 12 11 - 1 9 0 1 2 0 6 5 1 14 9 8 2 13 12 5 4 1 0 4 13 10 0 0 13 - 12 9 1 10 7 6 10 1 2 2 4 48 200 11 10 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 0 0 13 14 20 48 200 16 15 11 10 4 13 20 5 0 0 4 3 6 1 5 8 7 2 - 1 6 3 0 2 4 48 200 9 0 1 0 6 5 1 14 16 15 9 8 4 13 6 11 10 - 5 4 1 0 6 13 2 0 0 7 6 10 1 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 0 0 17 14 13 10 10 3 11 4 3 6 1 5 8 7 2 1 6 3 0 3 4 48 200 - 9 0 1 0 16 15 12 11 0 3 6 5 1 14 9 8 2 13 16 5 4 1 0 4 13 - 10 0 0 15 14 10 1 16 13 12 10 1 10 7 6 10 1 2 3 4 48 200 17 16 1 - 11 10 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 120 values pushed */ - 0 0 20 17 13 48 200 11 1 0 2 22 18 17 16 15 5 13 13 0 0 0 33 30 29 - 26 4 3 27 24 23 4 3 6 3 5 8 7 2 1 6 3 0 3 4 48 200 32 31 28 - 27 3 9 0 1 2 0 25 10 6 5 1 3 14 25 24 18 17 9 8 6 30 15 3 5 - 4 1 0 4 13 26 0 0 31 30 9 1 10 23 22 10 1 10 29 28 7 6 10 3 2 - 3 4 48 200 27 26 1 33 32 11 10 3 16 15 1 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 0 0 31 5 14 19 5 26 48 200 14 0 26 1 33 26 10 3 0 5 3 0 1 22 21 - 2 13 0 0 0 0 4 3 6 1 5 8 7 2 1 6 3 0 2 4 48 200 9 0 1 - 0 6 5 1 14 22 21 9 8 4 13 6 33 10 5 4 1 0 6 13 2 0 0 7 6 - 10 1 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 0 0 5 5 18 48 200 1 14 9 2 10 2 3 0 1 3 2 1 0 4 13 18 2 0 - 0 0 23 20 4 1 21 11 10 6 1 12 2 4 48 200 22 21 1 0 13 12 1 14 12 - 11 3 2 4 20 0 3 0 0 21 20 9 1 22 10 9 10 1 13 2 4 48 200 23 22 - 1 14 13 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 96 values pushed */ - 0 0 5 5 18 48 200 27 26 25 24 23 20 6 21 12 3 1 14 9 2 10 2 3 0 - 1 3 2 1 0 4 13 18 2 0 0 0 11 10 6 1 12 1 4 48 200 22 21 1 0 - 13 12 1 14 26 25 22 3 13 9 3 27 21 20 12 11 3 2 7 9 0 3 24 23 2 - 13 13 0 0 10 9 10 1 13 1 4 48 200 14 13 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 11 10 2 12 18 3 24 23 22 15 14 9 8 5 4 3 2 1 12 16 0 3 0 0 21 - 20 17 16 6 3 18 1 4 48 200 13 12 1 25 7 6 0 3 2 0 19 18 1 14 25 - 24 23 22 21 20 19 18 17 16 15 6 5 2 1 0 16 13 3 12 11 8 7 4 13 9 - 0 0 14 13 4 3 10 3 9 1 4 48 200 10 9 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 24 23 22 15 14 9 8 5 4 3 2 1 12 10 0 3 0 0 21 20 17 16 11 10 6 - 5 12 1 4 48 200 25 7 6 0 3 0 19 18 13 12 1 3 14 25 24 23 22 21 20 - 19 18 17 16 15 6 5 2 1 0 16 13 3 12 11 8 7 4 13 9 0 0 14 13 4 - 3 10 3 9 1 4 48 200 10 9 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 54 values pushed */ - 0 0 4 3 6 1 5 8 7 2 1 6 3 0 2 4 48 200 6 5 1 9 0 1 2 - 0 14 9 8 2 13 6 5 4 1 0 4 13 2 0 0 7 6 10 1 2 1 4 48 200 - 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 18 15 14 13 11 10 6 3 1 3 0 0 4 3 6 1 5 8 7 2 1 6 3 0 2 - 4 48 200 17 16 6 5 3 9 0 1 2 0 14 14 13 9 8 4 17 10 3 5 4 1 - 0 4 13 2 0 0 16 15 11 10 10 3 17 7 6 10 1 2 2 4 48 200 18 17 1 - 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 0 0 13 10 10 1 11 4 3 6 1 5 8 7 2 1 6 3 0 3 4 48 200 12 11 - 1 6 5 1 9 0 1 3 0 14 9 8 2 12 10 3 5 4 1 0 4 13 2 0 0 - 11 10 10 1 12 7 6 10 1 2 2 4 48 200 13 12 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 16 values pushed */ - 5 4 3 2 1 0 14 4 1 0 5 3 2 0 3 0 - CALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 6 5 2 1 16 3 3 1 4 48 200 4 3 1 7 0 1 2 0 14 0 0 1 - 0 16 1 4 1 4 48 200 7 6 5 4 3 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 18 5 11 48 200 22 16 15 14 13 7 6 13 11 5 0 0 4 3 20 1 5 24 - 23 2 1 6 3 0 2 4 48 200 6 5 1 25 0 1 2 0 14 25 24 16 15 4 13 - 22 3 5 4 1 0 4 13 2 0 0 23 22 10 1 2 1 4 48 200 14 13 1 7 6 - 3 2 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 14 13 12 11 6 5 4 3 8 7 1 3 0 0 8 7 6 1 9 16 15 2 1 6 3 - 0 2 4 48 200 10 9 1 17 0 1 2 0 14 17 16 2 13 12 9 8 1 0 4 13 - 4 0 0 15 14 11 10 10 3 2 1 4 48 200 13 12 1 7 6 3 2 3 5 4 1 - 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 109 values pushed */ - 0 0 41 30 11 28 30 19 48 200 19 1 11 1 45 44 43 39 36 35 34 26 23 22 21 - 15 7 4 3 2 1 17 5 0 3 46 38 37 25 24 0 5 0 6 5 1 14 37 36 2 - 25 34 3 15 34 38 2 46 45 2 38 6 3 24 23 2 13 21 5 4 1 0 4 13 2 - 0 0 26 25 12 1 21 35 34 12 1 38 44 43 7 6 12 3 2 3 4 48 200 22 21 - 1 39 38 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 6 1 1 1 4 48 200 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 2 16 1 0 1 4 48 200 1 0 1 0 14 2 1 1 3 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 200 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 6 30 21 48 200 21 2 26 17 14 13 10 9 8 4 1 0 10 2 15 3 23 15 - 24 2 16 15 1 25 24 1 2 0 12 11 3 2 1 3 14 11 10 2 8 3 3 15 14 - 2 13 12 2 1 0 0 0 17 16 9 8 10 3 12 24 23 4 3 10 3 0 2 4 48 - 200 13 12 1 26 25 0 2 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 33 values pushed */ - 1 10 8 7 6 5 4 3 2 1 0 10 13 2 0 1 11 9 2 0 14 11 10 9 8 - 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 0 0 22 30 11 48 200 11 1 26 25 24 20 19 18 15 14 13 7 4 3 2 1 14 5 - 0 3 27 17 16 0 3 0 6 5 1 14 27 26 18 17 4 19 6 3 16 15 2 13 13 - 5 4 1 0 4 13 2 0 0 20 19 10 1 13 25 24 7 6 10 3 2 2 4 48 200 - 14 13 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 110 values pushed */ - 0 0 22 30 11 48 200 11 1 36 33 32 31 29 28 6 34 5 3 26 25 24 20 19 18 - 15 14 13 7 4 3 2 1 14 5 0 3 35 34 1 27 17 16 0 3 2 0 6 5 1 - 14 27 26 18 17 4 19 6 3 32 31 5 4 1 0 6 2 28 3 16 15 2 13 13 0 - 0 36 35 10 1 28 20 19 10 1 13 25 24 7 6 10 3 2 3 4 48 200 34 33 29 - 28 3 14 13 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 200 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 37 25 4 31 5 12 27 5 20 48 200 20 2 12 0 4 1 1 25 24 23 22 4 - 0 6 0 2 3 0 0 14 0 0 41 26 16 35 24 8 48 200 25 24 0 3 13 16 22 - 8 22 23 22 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 14 13 10 9 4 13 7 27 24 23 0 4 13 1 0 0 31 30 18 17 6 5 6 5 7 - 29 28 20 19 4 3 6 5 1 2 4 48 200 16 15 12 11 8 7 5 26 25 22 21 2 - 1 5 2 0 14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 - 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 20 5 8 16 5 0 48 200 8 2 0 1 14 0 0 22 39 4 18 39 12 48 200 - 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 27 14 34 20 5 8 16 5 0 48 200 8 2 0 1 1 30 29 25 24 4 13 34 - 1 0 14 0 0 22 36 4 18 36 12 48 200 30 29 25 24 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 44 5 14 32 5 2 28 5 10 21 14 26 48 200 26 2 14 1 10 1 2 2 1 - 42 12 2 1 40 3 0 16 40 17 2 1 24 23 19 0 4 17 2 3 0 0 0 18 17 - 6 1 40 1 4 48 200 41 40 1 0 14 0 0 30 19 6 48 200 42 41 40 19 18 12 - 0 7 13 36 6 16 24 23 17 16 3 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 0 0 5 17 10 48 200 10 8 7 1 0 14 0 0 3 20 12 48 200 12 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 6 5 4 3 4 13 1 0 0 8 7 2 1 6 3 0 1 4 48 200 9 0 1 0 14 - 9 8 7 6 4 13 2 5 4 1 0 4 13 2 3 2 1 0 - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 108 values pushed */ - 0 0 15 22 48 200 22 43 42 41 22 20 5 1 40 3 28 27 19 18 17 10 5 7 40 - 37 3 0 0 38 37 16 1 4 1 4 48 200 45 40 1 39 4 1 44 2 1 2 3 0 - 1 4 0 14 0 0 13 34 24 48 200 37 28 27 18 17 10 2 1 8 24 4 3 3 44 - 40 2 43 42 0 3 13 40 0 0 45 44 16 1 40 1 4 48 200 41 40 1 39 38 24 - 2 20 19 5 4 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 105 values pushed */ - 3 2 1 3 4 15 3 23 0 14 2 0 0 22 21 18 17 14 6 4 12 1 4 48 200 - 16 15 1 20 19 13 12 3 11 10 1 8 7 4 2 9 6 1 5 0 1 6 0 14 8 - 10 11 2 21 15 14 13 7 5 11 4 3 9 4 0 2 19 18 2 13 10 6 3 2 3 - 13 0 0 0 23 22 12 11 16 3 10 5 4 16 1 0 2 4 48 200 20 17 16 10 3 - 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 52 values pushed */ - 6 5 4 3 4 13 1 0 0 9 0 6 1 1 1 4 48 200 8 7 2 1 3 0 14 - 9 8 2 13 6 5 4 1 0 4 13 2 0 0 7 6 37 1 2 1 4 48 200 3 2 - 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 4 3 2 1 4 13 0 5 0 1 0 14 3 2 0 0 0 1 0 16 1 4 1 4 48 - 200 5 4 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 105 values pushed */ - 0 0 36 5 2 14 5 21 48 200 21 0 1 25 19 16 3 0 17 3 0 32 31 30 10 - 9 8 6 17 26 3 0 26 28 2 2 28 0 0 29 28 6 1 26 1 4 48 200 18 17 - 1 27 26 1 2 0 14 0 0 34 19 6 48 200 29 25 0 2 32 17 16 8 4 0 18 - 3 28 27 2 13 25 6 18 0 0 31 30 10 9 0 12 4 25 1 4 48 200 26 25 1 - 19 18 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 29 values pushed */ - 0 0 24 5 8 16 5 0 48 200 0 0 1 8 0 0 14 0 0 28 19 4 20 19 12 - 48 200 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 0 0 31 5 18 24 5 7 48 200 18 2 7 1 1 1 35 29 28 22 20 12 9 1 8 - 1 2 3 0 0 1 11 10 2 13 1 0 1 21 0 2 0 14 0 0 33 39 14 26 39 - 3 48 200 35 29 28 22 21 20 14 12 11 10 9 3 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 91 values pushed */ - 0 0 33 30 14 27 14 22 48 200 22 2 14 1 1 35 25 10 7 6 5 8 2 3 0 - 1 24 2 0 2 0 0 0 5 4 1 0 6 3 2 1 4 48 200 3 2 1 0 9 8 - 1 14 0 0 31 39 18 48 200 2 1 2 13 18 0 8 7 4 3 4 13 5 0 0 35 - 25 24 10 9 0 10 5 5 1 4 48 200 6 5 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 7 0 1 1 16 2 2 0 1 18 15 14 0 4 13 2 0 0 0 17 16 6 1 12 1 - 4 48 200 13 12 0 14 12 15 17 2 5 0 0 0 16 15 6 1 13 1 0 6 1 17 - 2 4 48 200 14 13 1 18 17 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 17 values pushed */ - 21 13 12 0 14 0 0 17 39 6 48 200 21 13 12 6 0 - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 17 values pushed */ - 10 9 1 0 14 0 0 5 39 16 48 200 16 10 9 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 69 values pushed */ - 0 0 48 5 36 44 5 28 24 5 12 20 5 4 48 200 36 2 4 0 28 12 1 1 28 - 12 2 0 2 3 0 0 1 2 1 2 13 0 0 1 3 0 2 0 14 0 0 50 20 32 - 46 20 40 26 20 8 22 20 16 48 200 40 32 16 8 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 2 1 8 1 0 1 4 48 200 3 0 1 0 14 0 0 3 2 8 1 0 1 4 - 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 2 1 4 1 0 1 4 48 200 3 0 1 0 14 0 0 3 2 4 1 0 1 4 - 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 2 1 4 1 0 1 4 48 200 3 0 1 0 14 0 0 3 2 4 1 0 1 4 - 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 0 0 72 17 60 68 17 52 48 17 36 44 17 28 20 17 8 16 17 0 48 200 60 2 36 - 2 0 0 52 28 8 1 1 52 28 26 25 8 5 0 2 3 0 0 1 27 24 2 0 14 - 0 0 74 21 56 70 21 64 50 21 32 46 21 40 22 21 4 18 21 12 48 200 64 56 40 - 32 27 26 25 24 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 53 values pushed */ - 0 0 10 9 2 1 7 3 3 1 4 48 200 6 5 1 8 7 4 3 3 11 0 1 3 - 0 14 0 0 11 10 7 6 14 3 0 1 4 48 200 9 8 1 5 4 1 0 3 3 2 - 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 15 14 7 1 12 10 9 2 1 7 3 3 2 4 48 200 13 12 1 6 5 1 8 - 7 4 3 3 11 0 1 4 0 14 0 0 11 10 7 6 14 3 0 1 4 48 200 15 12 - 9 8 3 5 4 1 0 3 14 13 3 2 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 0 0 29 30 4 23 14 12 48 200 12 1 4 2 1 31 21 0 3 13 2 3 0 16 15 - 2 19 17 3 0 0 20 19 6 1 17 1 4 48 200 18 17 1 0 14 13 1 14 0 0 - 27 39 8 48 200 17 16 2 13 14 19 18 8 0 0 0 31 21 20 13 0 10 4 14 1 - 4 48 200 15 14 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 14 5 21 48 200 21 0 1 36 34 19 18 17 16 5 7 0 4 3 0 0 0 2 - 1 9 1 0 1 4 48 200 37 4 1 3 0 1 2 0 14 0 0 10 39 23 48 200 37 - 36 5 4 4 2 0 3 17 16 2 0 18 3 34 23 2 0 0 3 2 4 1 0 1 4 - 48 200 19 18 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 0 0 14 5 21 48 200 1 32 30 18 17 5 5 4 2 3 0 1 19 16 21 2 0 0 - 0 2 1 9 1 0 1 4 48 200 33 4 1 0 3 0 1 14 0 0 10 39 23 48 200 - 17 16 2 18 0 3 33 32 5 4 4 0 2 3 30 23 2 0 0 1 0 4 1 2 1 - 4 48 200 19 18 1 3 2 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 21 values pushed */ - 6 5 2 1 3 7 4 3 0 3 2 0 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 18 17 16 14 13 11 8 7 6 4 3 1 12 13 0 19 10 9 0 3 0 14 7 6 2 - 0 3 3 17 16 2 10 13 3 0 0 11 10 4 1 13 9 8 4 3 4 3 0 2 4 - 48 200 19 18 14 13 3 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 18 17 16 14 13 11 8 7 6 4 3 1 12 13 0 19 10 9 0 3 0 14 17 16 2 - 13 10 3 7 6 2 3 0 3 0 0 11 10 4 1 13 9 8 4 3 4 3 0 2 4 - 48 200 19 18 14 13 3 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 18 17 16 14 13 11 8 7 6 4 3 1 12 13 0 19 10 9 0 3 0 14 7 6 2 - 0 3 3 17 16 2 10 13 3 0 0 11 10 4 1 13 9 8 4 3 4 3 0 2 4 - 48 200 19 18 14 13 3 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 34 values pushed */ - 10 6 5 3 0 5 13 1 2 1 1 0 14 10 0 2 2 0 0 6 5 1 0 8 3 - 2 1 4 48 200 3 2 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 34 values pushed */ - 10 6 5 3 0 5 13 1 2 1 1 0 14 10 2 0 2 0 0 3 2 8 1 0 1 - 4 48 200 6 5 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 34 values pushed */ - 10 6 5 3 0 5 13 1 2 1 1 0 14 10 2 0 2 0 0 3 2 8 1 0 1 - 4 48 200 6 5 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 2 1 1 3 0 1 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 0 0 22 22 15 48 200 15 1 17 9 7 2 20 19 18 11 0 5 7 1 3 0 0 8 - 7 6 1 9 6 5 2 1 6 3 3 2 4 48 200 4 3 1 0 10 9 1 14 20 19 - 3 2 4 17 0 3 9 8 5 4 4 13 6 0 0 11 10 1 0 10 3 6 1 4 48 - 200 18 17 1 7 6 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 2 16 1 0 1 4 48 200 1 0 1 0 14 2 1 1 3 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 97 values pushed */ - 0 0 24 40 8 16 40 0 48 200 8 2 0 0 60 59 53 52 50 49 48 47 44 43 42 - 36 35 34 33 15 37 32 3 38 37 1 51 46 45 32 3 2 0 14 0 0 55 6 40 28 - 6 4 20 6 12 48 200 59 53 51 50 47 46 45 44 43 42 38 11 13 40 4 48 37 36 - 33 32 4 13 12 34 0 0 60 52 49 48 3 34 1 6 48 200 35 34 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 0 0 24 32 8 16 32 0 48 200 8 0 14 0 0 28 32 4 20 32 12 48 200 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 61 values pushed */ - 0 0 25 5 18 5 5 40 48 200 40 2 18 1 1 1 23 22 21 20 3 2 1 0 8 - 1 2 3 0 0 14 0 0 29 19 16 7 28 36 48 200 16 23 22 16 3 2 5 20 0 - 3 36 20 21 20 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 25 5 18 5 5 40 48 200 40 2 18 1 1 49 48 47 46 45 42 6 43 1 3 - 0 1 1 23 22 21 20 3 2 1 0 8 1 2 3 0 0 44 43 1 0 14 0 0 29 - 19 16 7 28 36 48 200 16 49 48 47 46 45 44 43 42 23 22 16 3 2 13 20 0 3 - 36 20 21 20 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 0 0 31 5 24 5 5 50 48 200 24 0 1 58 52 44 29 28 27 26 18 3 2 1 0 - 12 13 50 0 0 14 0 0 60 15 16 54 16 42 35 15 20 9 15 46 48 200 20 16 58 - 52 44 29 28 20 18 16 3 2 10 26 0 3 46 42 26 27 26 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 59 values pushed */ - 1 3 1 2 2 0 1 10 6 5 0 4 13 2 0 0 0 14 11 8 1 12 1 4 48 - 200 2 1 1 0 13 12 1 14 10 2 0 2 0 0 14 13 3 2 8 3 0 1 4 48 - 200 12 11 6 5 1 0 5 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 59 values pushed */ - 1 3 1 2 2 0 1 10 6 5 0 4 13 2 0 0 0 14 11 8 1 12 1 4 48 - 200 2 1 1 0 13 12 1 14 10 2 0 2 0 0 14 13 3 2 8 3 0 1 4 48 - 200 12 11 6 5 1 0 5 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 35 values pushed */ - 0 0 8 5 4 27 2 6 1 4 48 200 13 0 1 0 7 6 0 14 13 4 0 3 7 - 5 3 8 7 1 6 5 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 200 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 39 5 12 31 25 4 27 5 20 48 200 20 0 12 2 4 1 1 25 24 23 22 4 - 0 6 0 2 3 0 0 14 0 0 43 24 8 35 26 16 48 200 8 22 25 24 0 3 13 - 16 22 23 22 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 2 1 1 3 0 1 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 104 values pushed */ - 0 0 19 5 12 48 200 12 0 1 21 17 16 15 14 8 6 0 6 3 0 26 3 1 3 - 4 28 3 0 0 25 24 5 4 6 3 6 29 28 22 1 0 2 4 48 200 23 22 7 6 - 3 30 0 1 2 0 14 24 23 17 16 4 14 21 3 28 21 3 2 6 5 2 3 0 3 - 0 0 26 25 22 21 10 3 3 1 4 48 200 30 29 1 15 14 1 8 7 4 3 3 1 - 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 0 0 21 14 2 48 200 2 2 1 23 17 6 0 4 7 2 3 0 0 0 16 15 8 7 - 20 3 9 1 4 48 200 12 11 1 14 13 10 9 3 2 0 14 15 14 2 0 12 3 9 - 8 6 0 0 17 16 13 12 10 3 6 1 4 48 200 23 0 1 11 10 7 6 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 97 values pushed */ - 0 0 30 14 3 48 200 3 2 1 26 7 1 0 4 8 2 3 0 0 0 21 20 13 12 - 20 3 14 25 24 9 8 33 3 10 2 4 48 200 17 16 1 19 18 15 14 3 23 22 11 - 10 3 3 0 14 24 23 20 19 4 0 17 3 14 13 10 9 4 13 7 0 0 26 25 22 - 21 18 17 10 5 7 1 4 48 200 1 0 1 16 15 12 11 8 7 5 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 108 values pushed */ - 0 0 21 14 2 48 200 2 2 32 29 28 27 4 30 11 3 25 24 2 11 9 3 1 23 - 17 6 0 4 7 2 3 0 0 0 16 15 8 7 20 3 9 1 4 48 200 31 30 1 12 - 11 1 14 13 10 9 3 3 0 14 15 14 2 0 31 3 28 27 2 31 24 3 9 8 6 - 0 0 30 29 25 24 10 3 31 17 16 13 12 10 3 6 2 4 48 200 32 31 1 23 0 - 1 11 10 7 6 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 109 values pushed */ - 0 0 39 32 34 21 14 2 48 200 2 2 1 23 17 6 0 4 7 2 3 0 1 43 37 - 36 26 25 24 6 13 34 2 0 0 0 16 15 8 7 20 3 9 1 4 48 200 12 11 1 - 14 13 10 9 3 2 0 14 0 0 41 20 30 48 200 30 30 26 25 24 15 14 6 0 12 - 3 43 37 36 3 12 6 3 9 8 6 0 0 17 16 13 12 10 3 6 1 4 48 200 23 - 0 1 11 10 7 6 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 100 values pushed */ - 0 0 31 30 9 27 14 17 48 200 17 2 9 1 1 2 1 2 3 1 3 0 1 1 33 - 25 5 3 1 2 3 0 0 1 19 2 0 2 0 0 0 24 21 20 0 6 3 22 1 4 - 48 200 4 3 1 23 22 1 2 0 14 0 0 29 39 13 48 200 22 21 2 13 13 4 24 - 23 3 2 4 13 0 0 0 33 25 20 19 5 4 10 5 0 1 4 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 0 0 20 5 27 5 5 41 48 200 41 2 27 0 1 1 33 25 24 23 22 14 13 12 11 - 3 2 1 0 13 0 2 3 0 0 14 0 0 16 24 29 9 39 37 48 200 33 23 22 14 - 13 12 11 3 2 9 13 37 29 24 0 0 25 24 23 1 0 1 5 48 200 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 139 values pushed */ - 0 0 20 31 27 9 31 37 48 200 31 25 24 23 22 16 15 14 13 7 6 5 12 1 45 - 3 37 53 37 4 3 45 44 3 27 1 0 0 52 51 48 47 44 6 4 42 1 4 48 200 - 46 45 1 50 49 43 42 3 41 40 1 2 1 1 3 0 1 5 0 14 0 0 18 38 29 - 11 38 33 48 200 2 1 2 40 41 3 33 29 51 45 44 43 33 31 29 23 22 16 15 14 - 13 7 6 3 0 17 41 4 3 49 48 2 13 40 0 0 53 52 42 41 16 3 40 1 4 - 48 200 50 47 46 40 3 25 24 5 4 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - MDAP[1] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 20 6 27 5 6 35 48 200 35 31 27 25 24 23 22 14 13 12 11 3 2 1 0 - 14 0 0 18 13 29 7 13 33 48 200 31 23 22 14 13 12 11 3 2 9 13 33 29 0 - 25 24 1 0 3 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 16 31 23 5 31 35 48 200 35 27 23 21 20 19 18 12 11 10 9 3 2 1 0 - 14 0 0 14 38 25 7 38 31 48 200 27 19 18 12 11 10 9 3 2 9 13 31 25 0 - 21 20 1 0 3 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 0 0 21 5 4 9 5 16 48 200 4 0 1 12 11 2 13 0 0 1 23 0 16 0 0 - 14 23 12 11 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 129 values pushed */ - 37 36 35 34 33 32 29 28 27 26 23 20 19 18 17 14 13 12 11 10 9 6 5 4 3 - 2 1 27 7 0 3 38 31 30 16 15 0 5 0 25 24 22 21 8 7 0 5 14 36 35 - 34 33 24 23 22 7 31 37 3 21 20 17 16 4 18 8 3 15 14 11 10 4 8 12 3 - 5 4 1 0 4 2 6 3 30 29 26 25 4 13 27 0 0 32 31 18 1 27 38 37 18 - 1 18 2 4 13 12 1 2 1 6 48 200 28 27 1 19 18 1 9 8 1 3 2 1 7 - 6 1 5 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 0 0 11 5 18 48 200 18 0 1 16 15 14 13 4 0 1 3 0 0 0 32 31 1 22 - 2 0 1 4 48 200 33 0 1 0 14 0 0 7 39 22 48 200 22 31 22 14 13 4 32 - 15 3 33 32 1 16 15 1 1 0 1 3 0 - LOOPCALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 0 0 10 6 18 48 200 15 14 13 12 4 13 18 1 0 0 27 0 16 1 1 1 4 48 - 200 26 25 1 2 0 14 0 0 8 13 20 48 200 20 25 20 13 12 4 26 0 3 27 26 - 1 15 14 1 0 3 2 0 - LOOPCALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 0 0 11 18 48 200 24 23 16 15 14 13 1 7 13 18 31 0 0 33 0 16 1 31 1 - 4 48 200 32 31 1 0 14 0 0 9 34 20 48 200 31 24 23 14 13 5 20 0 3 33 - 32 20 2 16 15 1 0 3 2 0 - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 0 0 19 30 10 48 200 10 2 23 22 21 17 14 13 12 6 3 2 10 0 4 3 5 4 - 1 0 16 15 1 0 1 3 14 23 0 2 5 16 3 4 3 2 13 1 15 14 12 0 0 - 22 21 6 5 10 3 1 17 16 10 1 12 2 4 48 200 2 1 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 96 values pushed */ - 0 0 27 14 34 19 30 10 48 200 10 2 23 22 21 17 14 13 12 6 3 2 10 0 4 - 3 30 29 25 24 4 13 34 0 5 4 1 0 16 15 1 0 1 3 14 30 1 5 2 29 - 23 0 3 5 16 3 25 24 2 16 12 3 4 3 2 13 1 15 14 12 0 0 22 21 6 - 5 10 3 1 17 16 10 1 12 2 4 48 200 2 1 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 2 16 1 0 1 4 48 200 1 0 1 0 14 2 1 1 3 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 110 values pushed */ - 0 0 45 5 28 33 5 40 19 30 10 48 200 28 0 10 2 40 1 47 40 24 3 0 0 - 3 0 23 22 21 17 14 13 12 6 3 2 10 0 4 3 1 36 35 2 13 0 0 5 4 - 1 0 16 15 1 0 1 3 14 36 1 5 2 35 23 0 3 5 16 3 47 24 2 16 12 - 3 4 3 2 13 1 15 14 12 0 0 22 21 6 5 10 3 1 17 16 10 1 12 2 4 - 48 200 2 1 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 8 7 2 1 0 3 0 0 14 13 10 9 6 5 2 1 6 7 3 1 4 48 200 15 0 - 1 0 12 11 4 3 1 3 14 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 18 17 14 13 6 5 2 1 8 3 9 3 22 21 12 11 8 7 6 9 0 3 10 9 1 - 23 20 19 0 3 2 0 16 15 4 3 1 3 14 23 22 21 20 19 18 17 16 15 14 13 - 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 31 30 29 28 27 24 6 25 3 3 18 17 14 13 6 5 2 1 8 3 9 3 22 21 12 - 11 8 7 6 9 0 3 26 25 1 10 9 1 23 20 19 0 3 3 0 16 15 4 3 1 - 3 14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 - 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 26 25 24 23 22 19 18 17 16 15 12 11 10 9 8 5 4 3 2 1 20 6 0 3 27 - 21 20 0 3 0 14 13 7 6 1 3 14 27 26 25 24 23 22 21 20 19 18 17 16 15 - 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 1 8 7 2 1 2 3 0 1 22 0 2 2 16 3 0 0 0 14 13 10 9 6 5 2 - 1 6 7 3 21 20 17 16 6 3 18 2 4 48 200 19 18 1 0 12 11 4 3 1 3 - 14 22 21 20 19 18 17 16 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 95 values pushed */ - 30 29 28 27 26 23 6 24 3 3 1 8 7 2 1 2 3 0 1 22 0 2 2 16 3 - 0 0 0 14 13 10 9 6 5 2 1 6 7 3 21 20 17 16 6 3 18 2 4 48 200 - 25 24 1 19 18 1 2 0 12 11 4 3 1 3 14 30 29 28 27 26 25 24 23 22 21 - 20 19 18 17 16 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 131 values pushed */ - 19 18 2 10 8 3 30 7 2 8 5 3 0 0 25 24 21 20 17 16 13 12 6 7 14 - 29 28 9 8 6 3 10 32 31 6 5 6 3 3 36 35 2 1 6 3 0 4 4 48 200 - 27 26 11 10 3 34 33 4 3 3 37 0 1 3 0 23 22 15 14 0 3 14 19 18 2 - 30 2 3 37 36 33 32 29 28 27 26 25 24 23 22 21 20 14 13 30 17 16 15 14 13 - 12 11 10 9 8 5 4 1 0 14 13 2 0 0 35 34 31 30 10 3 2 1 4 48 200 - 7 6 3 2 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 12 11 5 4 4 2 1 3 0 0 8 3 2 6 2 6 10 9 1 7 2 0 2 4 48 - 200 13 0 1 0 7 6 1 14 8 7 2 12 10 3 9 2 2 10 3 3 0 0 11 10 - 6 1 12 4 3 6 1 5 2 4 48 200 13 12 1 6 5 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 24 5 8 16 5 0 48 200 8 2 0 0 14 0 0 26 39 4 20 39 12 48 200 - 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. - - - Luxi Mono - - - Regular - - - Luxi Mono Regular: B&H - - - Luxi Mono Regular - - - 1.2 : October 12, 2001 - - - LuxiMono - - - Luxi is a registered trademark of Bigelow & Holmes Inc. - - - Bigelow & Holmes Inc. - - - Kris Holmes and Charles Bigelow - - - http://www.urwpp.de - - - design@bigelowandholmes.com - - - Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. - - - Luxi Mono - - - Regular - - - Luxi Mono Regular: B&H - - - Luxi Mono Regular - - - 1.2 : October 12, 2001 - - - LuxiMono - - - Luxi is a registered trademark of Bigelow & Holmes Inc. - - - Bigelow & Holmes Inc. - - - Kris Holmes and Charles Bigelow - - - http://www.urwpp.de - - - design@bigelowandholmes.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxirr.ttf b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxirr.ttf deleted file mode 100644 index daa8ad8cccd5fde8f9271939afa438f9f302b316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88732 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 z

    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 qRuzuk(EngR3h#6~( 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxirr.ttx b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxirr.ttx deleted file mode 100644 index 27191d0a7e..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxirr.ttx +++ /dev/null @@ -1,30264 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 15 values pushed */ - 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - FDEF[ ] - SLOOP[ ] - MDAP[1] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - MDAP[1] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP1[ ] - SRP2[ ] - IP[ ] - ENDF[ ] - FDEF[ ] - SRP1[ ] - SRP2[ ] - SLOOP[ ] - IP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MIRP[11101] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MIRP[10100] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MDRP[11101] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MDRP[10100] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MIRP[11101] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MIRP[10100] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MDRP[11101] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MDRP[10100] - ENDF[ ] - FDEF[ ] - MDRP[00100] - ENDF[ ] - FDEF[ ] - MDRP[00000] - ENDF[ ] - FDEF[ ] - SVTCA[0] - NPUSHB[ ] /* 10 values pushed */ - 1 0 0 1 1 2 2 3 3 0 - SZPS[ ] - MIAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SZPS[ ] - ENDF[ ] - - - - - - PUSHB[ ] /* 2 values pushed */ - 48 1 - PUSHW[ ] /* 1 value pushed */ - 329 - RTG[ ] - SCANCTRL[ ] - SCANTYPE[ ] - SCVTCI[ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 16 values pushed */ - 5 6 2 1 4 7 3 0 5 4 2 3 6 7 1 0 - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - SVTCA[0] - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 61 values pushed */ - 33 32 18 17 14 10 7 1 8 23 0 3 37 9 8 3 13 35 0 0 24 23 7 1 35 - 1 4 48 84 36 35 1 34 16 15 0 3 2 0 14 37 36 35 34 33 32 30 24 23 20 - 18 17 16 15 14 10 9 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 147 values pushed */ - 87 32 31 29 28 11 9 8 8 16 18 3 34 33 2 39 85 3 83 81 80 78 77 62 55 - 52 51 49 47 46 45 41 1 15 63 0 3 0 0 17 16 21 1 6 40 39 21 1 18 64 - 63 7 1 85 3 4 48 84 19 18 1 86 85 1 84 54 53 0 3 3 0 7 6 0 14 - 51 49 2 7 32 3 26 25 47 46 45 39 34 31 29 28 26 25 19 16 11 9 14 32 17 - 3 85 84 83 81 80 78 77 64 55 54 6 1 0 13 13 75 62 0 0 87 86 63 62 32 - 3 17 1 4 48 196 53 52 1 8 7 1 33 32 1 41 40 18 17 3 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - MDAP[1] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 41 38 37 9 8 5 39 35 3 33 32 18 17 14 10 7 1 8 23 0 3 0 0 24 23 - 7 1 35 1 4 48 84 40 39 1 36 35 1 34 16 15 0 3 3 0 14 41 40 39 38 - 37 36 35 34 33 32 30 24 23 20 18 17 16 15 14 10 9 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 43 20 52 48 84 33 32 18 17 14 10 7 1 8 23 0 3 48 47 39 38 37 9 - 8 7 13 52 35 0 0 24 23 7 1 35 1 4 48 84 36 35 1 34 16 15 0 3 2 - 0 14 48 47 39 38 37 36 35 34 33 32 30 24 23 20 18 17 16 15 14 10 9 8 7 - 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 44 43 42 41 38 37 9 8 8 39 35 3 33 32 18 17 14 10 7 1 8 23 0 3 0 - 0 24 23 7 1 35 1 4 48 84 40 39 1 36 35 1 34 16 15 0 3 3 0 14 44 - 43 42 41 40 39 38 37 36 35 34 33 32 30 24 23 20 18 17 16 15 14 10 9 8 7 - 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 112 values pushed */ - 37 9 8 3 38 35 3 33 32 18 17 14 10 7 1 8 23 0 3 0 0 45 42 41 38 - 13 3 39 24 23 7 1 35 2 4 48 84 44 43 40 39 3 36 35 1 34 16 15 0 3 - 3 0 14 36 23 18 17 16 5 44 42 3 37 9 8 3 42 40 3 15 14 10 3 13 20 - 44 35 34 33 32 24 7 1 0 8 13 30 38 0 0 43 42 13 1 44 41 40 13 1 38 - 2 4 48 196 45 44 1 39 38 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 39 38 37 9 8 5 40 35 3 33 32 18 17 14 10 7 1 8 23 0 3 0 0 24 23 - 7 1 35 1 4 48 84 41 40 1 36 35 1 34 16 15 0 3 3 0 14 41 40 39 38 - 37 36 35 34 33 32 30 24 23 20 18 17 16 15 14 10 9 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 37 9 8 3 38 35 3 33 32 18 17 14 10 7 1 8 23 0 3 0 0 41 38 12 1 - 39 24 23 7 1 35 2 4 48 84 40 39 1 36 35 1 34 16 15 0 3 3 0 14 41 - 40 39 38 37 36 35 34 33 32 30 24 23 20 18 17 16 15 14 10 9 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 0 0 50 7 41 48 84 33 32 18 17 14 10 7 1 8 23 0 3 37 9 8 3 13 35 - 39 38 41 0 0 0 24 23 7 1 35 1 4 48 84 36 35 1 46 45 34 16 15 0 5 - 2 0 14 0 0 48 48 43 48 196 46 45 43 39 38 37 36 35 34 33 32 30 24 23 20 - 18 17 16 15 14 10 9 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 93 values pushed */ - 0 0 62 17 46 54 17 38 48 84 46 0 1 37 0 35 2 0 33 32 18 17 14 10 7 - 1 8 23 0 3 1 9 8 2 13 38 0 0 0 0 24 23 7 1 35 1 4 48 84 36 - 35 1 34 16 15 0 3 2 0 14 0 0 66 17 42 58 17 50 48 196 50 42 37 36 35 - 34 33 32 30 24 23 20 18 17 16 15 14 10 9 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 59 20 42 47 20 54 48 84 33 32 18 17 14 10 7 1 8 23 0 3 61 50 49 - 38 37 9 8 7 13 54 42 35 0 0 24 23 7 1 35 1 4 48 84 36 35 1 34 16 - 15 0 3 2 0 14 61 50 49 38 37 36 35 34 33 32 30 24 23 20 18 17 16 15 14 - 10 9 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 17 26 16 9 43 59 58 50 49 43 38 37 0 8 26 8 3 9 8 1 0 27 26 0 14 - 0 0 54 10 31 45 33 4 48 196 26 17 9 16 58 50 27 8 0 5 13 31 4 37 0 - 0 59 49 38 37 32 3 16 1 4 48 196 17 16 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 0 0 32 9 2 24 17 10 48 84 10 0 2 2 1 1 34 20 19 18 17 14 13 12 0 - 9 0 2 3 0 0 14 0 0 28 34 6 48 196 34 0 2 13 12 20 19 18 17 14 5 - 13 6 12 13 12 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 0 0 32 9 2 24 17 10 48 84 10 0 2 2 1 38 35 2 36 0 3 0 1 1 34 - 20 19 18 17 14 13 12 0 9 0 2 3 0 0 37 36 1 0 14 0 0 28 34 6 48 - 196 34 0 2 13 12 38 37 36 35 20 19 18 17 14 9 13 6 12 13 12 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 76 values pushed */ - 0 0 32 9 2 24 17 10 48 84 10 0 2 2 1 1 34 20 19 18 17 14 13 12 0 - 9 0 2 3 0 0 41 40 39 38 35 5 13 36 37 36 1 0 14 0 0 28 34 6 48 - 196 34 0 2 13 12 41 40 39 38 37 36 35 20 19 18 17 14 12 13 6 12 13 12 1 - 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 0 0 38 17 51 32 9 2 24 17 10 48 84 10 0 2 2 1 1 34 20 19 18 17 14 - 13 12 0 9 0 2 3 0 0 1 45 44 43 42 36 35 6 13 51 2 0 14 0 0 40 - 48 47 28 34 6 48 196 34 0 2 13 12 45 44 43 42 36 35 20 19 18 17 14 11 13 - 47 6 12 13 12 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 79 values pushed */ - 0 0 32 9 2 24 17 10 48 84 10 0 2 2 1 41 40 39 38 35 5 36 0 3 0 - 1 1 34 20 19 18 17 14 13 12 0 9 0 2 3 0 0 37 36 1 0 14 0 0 28 - 34 6 48 196 34 0 2 13 12 41 40 39 38 37 36 35 20 19 18 17 14 12 13 6 12 - 13 12 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 89 values pushed */ - 0 0 32 9 2 24 17 10 48 84 10 0 2 2 1 1 34 20 19 18 17 14 13 12 0 - 9 0 2 3 0 0 0 0 38 35 5 1 36 1 4 48 84 37 36 1 0 14 0 0 28 - 34 6 48 196 20 19 18 17 14 5 12 37 3 34 0 2 13 12 6 35 0 0 36 35 4 - 1 37 1 4 48 196 38 37 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 54 values pushed */ - 20 29 19 12 36 44 36 31 30 4 0 11 3 12 11 1 0 29 0 0 14 0 0 40 34 - 7 48 196 29 20 12 19 44 11 0 3 13 7 30 0 0 31 30 32 1 19 1 4 48 196 - 20 19 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 20 29 19 12 36 44 36 31 30 4 0 11 3 51 50 49 48 45 5 13 46 47 46 1 12 - 11 1 2 0 29 0 0 14 0 0 40 34 7 48 196 29 20 12 19 49 48 2 30 19 3 - 51 50 47 46 45 44 11 0 8 13 7 30 0 0 31 30 32 1 19 1 4 48 196 20 19 - 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 33 26 4 13 49 48 2 13 2 3 40 40 35 2 0 25 3 0 0 52 34 1 0 14 3 - 2 1 4 48 84 51 50 3 2 3 26 25 1 2 0 14 13 0 14 0 0 44 34 21 48 - 196 26 33 13 4 52 51 48 25 14 5 13 21 34 2 1 0 0 0 50 49 35 34 32 3 - 0 1 4 48 196 33 4 3 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 101 values pushed */ - 52 61 51 44 21 20 12 11 2 1 6 9 28 3 42 41 30 26 23 22 6 28 34 3 0 - 0 10 9 21 1 0 35 34 7 1 43 2 4 48 84 29 28 1 44 43 1 2 0 61 0 - 0 14 61 52 44 51 41 2 2 0 21 3 35 34 28 26 23 20 12 9 8 21 10 3 0 - 0 30 29 11 10 32 3 51 1 4 48 196 43 42 1 1 0 1 22 21 1 52 51 1 4 - 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 117 values pushed */ - 52 61 51 44 65 62 2 63 0 3 21 20 12 11 2 1 6 9 28 3 42 41 30 26 23 - 22 6 28 34 3 0 0 10 9 21 1 0 35 34 7 1 43 2 4 48 84 64 63 1 29 - 28 1 44 43 1 3 0 61 0 0 14 61 52 44 51 41 2 2 0 21 3 65 64 63 35 - 34 28 26 23 20 12 9 11 21 10 3 62 10 51 2 0 0 30 29 11 10 32 3 51 1 - 4 48 196 43 42 1 1 0 1 22 21 1 52 51 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 124 values pushed */ - 0 0 67 20 76 48 84 52 61 51 44 21 20 12 11 2 1 6 9 28 3 42 41 30 26 - 23 22 6 28 34 3 72 71 63 62 4 13 76 0 0 0 10 9 21 1 0 35 34 7 1 - 43 2 4 48 84 29 28 1 44 43 1 2 0 61 0 0 14 61 52 44 51 41 2 2 0 - 21 3 72 71 35 34 28 26 23 20 12 9 10 21 10 3 63 62 2 10 51 3 0 0 30 - 29 11 10 32 3 51 1 4 48 196 43 42 1 1 0 1 22 21 1 52 51 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 123 values pushed */ - 52 61 51 44 21 20 12 11 2 1 6 9 28 3 42 41 30 26 23 22 6 28 34 3 68 - 67 66 65 62 5 13 63 0 0 10 9 21 1 0 35 34 7 1 43 2 4 48 84 64 63 - 1 29 28 1 44 43 1 3 0 61 0 0 14 61 52 44 51 62 41 2 3 0 21 3 68 - 67 64 63 35 34 28 26 23 20 12 9 12 21 10 3 66 65 2 10 51 3 0 0 30 29 - 11 10 32 3 51 1 4 48 196 43 42 1 1 0 1 22 21 1 52 51 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 124 values pushed */ - 52 61 51 44 68 67 66 65 62 5 63 0 3 21 20 12 11 2 1 6 9 28 3 42 41 - 30 26 23 22 6 28 34 3 0 0 10 9 21 1 0 35 34 7 1 43 2 4 48 84 64 - 63 1 29 28 1 44 43 1 3 0 61 0 0 14 61 52 44 51 41 2 2 0 21 3 67 - 66 65 64 63 35 34 28 26 23 20 12 9 13 21 10 3 68 62 2 10 51 3 0 0 30 - 29 11 10 32 3 51 1 4 48 196 43 42 1 1 0 1 22 21 1 52 51 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 136 values pushed */ - 52 61 51 44 21 20 12 11 2 1 6 9 28 3 42 41 30 26 23 22 6 28 34 3 0 - 0 69 66 65 62 13 3 63 10 9 21 1 0 35 34 7 1 43 3 4 48 84 68 67 64 - 63 3 29 28 1 44 43 1 3 0 61 0 0 14 61 52 44 51 41 2 2 0 21 3 26 - 23 20 3 21 68 3 35 28 12 9 4 68 66 3 34 66 64 2 0 0 67 66 13 1 68 - 65 64 13 1 62 30 29 11 10 32 3 51 3 4 48 196 69 68 1 63 62 1 43 42 1 - 1 0 1 22 21 1 52 51 1 6 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 120 values pushed */ - 52 61 51 44 21 20 12 11 2 1 6 9 28 3 42 41 30 26 23 22 6 28 34 3 0 - 0 65 62 5 1 63 10 9 21 1 0 35 34 7 1 43 3 4 48 84 64 63 1 29 28 - 1 44 43 1 3 0 61 0 0 14 61 52 44 51 41 2 2 0 21 3 35 28 26 23 20 - 12 9 7 21 64 3 34 64 62 2 0 0 65 64 4 1 62 30 29 11 10 32 3 51 2 - 4 48 196 63 62 1 43 42 1 1 0 1 22 21 1 52 51 1 5 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 117 values pushed */ - 52 61 51 44 63 62 2 64 0 3 21 20 12 11 2 1 6 9 28 3 42 41 30 26 23 - 22 6 28 34 3 0 0 10 9 21 1 0 35 34 7 1 43 2 4 48 84 65 64 1 29 - 28 1 44 43 1 3 0 61 0 0 14 61 52 44 51 41 2 2 0 21 3 65 63 62 35 - 34 28 26 23 20 12 9 11 21 10 3 64 10 51 2 0 0 30 29 11 10 32 3 51 1 - 4 48 196 43 42 1 1 0 1 22 21 1 52 51 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 117 values pushed */ - 52 61 51 44 21 20 12 11 2 1 6 9 28 3 42 41 30 26 23 22 6 28 34 3 0 - 0 65 62 12 1 63 10 9 21 1 0 35 34 7 1 43 3 4 48 84 64 63 1 29 28 - 1 44 43 1 3 0 61 0 0 14 61 52 44 51 41 2 2 0 21 3 65 64 35 34 28 - 26 23 20 12 9 10 21 10 3 63 62 2 10 51 3 0 0 30 29 11 10 32 3 51 1 - 4 48 196 43 42 1 1 0 1 22 21 1 52 51 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 97 values pushed */ - 0 0 53 21 39 48 84 7 14 64 58 57 34 27 24 17 16 6 1 10 14 0 3 55 43 - 42 41 4 13 39 0 65 56 35 0 3 0 26 25 15 14 0 3 14 14 7 56 55 43 25 - 24 5 16 41 3 65 64 15 3 41 57 3 27 26 2 13 34 1 0 6 0 0 17 16 35 - 1 34 58 57 35 1 6 2 4 48 196 35 34 1 42 41 1 7 6 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 127 values pushed */ - 0 0 74 7 65 48 84 52 61 51 44 21 20 12 11 2 1 6 9 28 3 42 41 30 26 - 23 22 6 28 34 3 63 62 65 43 0 0 10 9 21 1 0 35 34 7 1 43 2 4 48 - 84 29 28 1 70 69 44 43 3 2 0 61 0 0 14 0 0 72 48 67 48 196 61 52 44 - 51 70 63 62 41 2 5 0 21 3 67 69 67 35 34 28 26 23 20 12 9 10 21 10 3 - 0 0 30 29 11 10 32 3 51 1 4 48 196 43 42 1 1 0 1 22 21 1 52 51 1 - 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 33 26 4 13 49 48 2 13 2 3 40 40 35 2 0 25 3 0 0 52 34 1 0 14 3 - 2 1 4 48 84 51 50 3 2 3 26 25 1 2 0 14 13 0 14 0 0 44 34 21 48 - 196 26 33 13 4 52 51 48 25 14 5 13 21 34 2 1 0 0 0 50 49 35 34 32 3 - 0 1 4 48 196 33 4 3 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 98 values pushed */ - 0 0 40 9 45 22 38 15 48 84 45 2 15 0 1 19 18 17 3 0 10 3 0 1 43 - 42 2 0 2 3 0 0 0 29 28 9 8 11 3 10 49 38 37 0 11 3 1 2 4 48 - 84 27 26 11 10 3 36 35 2 1 3 2 0 14 0 0 31 5 4 48 196 49 43 42 38 - 37 36 35 29 28 27 26 19 11 10 9 8 2 1 0 19 13 4 17 18 17 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 98 values pushed */ - 0 0 40 9 45 22 38 15 48 84 45 2 15 0 1 19 18 17 3 0 10 3 0 1 43 - 42 2 0 2 3 0 0 0 29 28 9 8 11 3 10 49 38 37 0 11 3 1 2 4 48 - 84 27 26 11 10 3 36 35 2 1 3 2 0 14 0 0 31 5 4 48 196 49 43 42 38 - 37 36 35 29 28 27 26 19 11 10 9 8 2 1 0 19 13 4 17 18 17 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 91 values pushed */ - 48 57 47 40 30 39 21 20 2 1 4 9 11 3 23 22 2 28 39 3 0 0 10 9 21 - 1 0 29 28 7 1 11 2 4 48 84 12 11 1 40 39 1 2 0 57 0 0 14 57 48 - 40 47 39 30 2 0 21 2 28 23 20 12 9 5 21 10 3 0 0 30 29 11 10 32 3 - 47 1 4 48 196 1 0 1 22 21 1 48 47 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 0 0 30 7 2 22 17 10 48 84 10 0 2 2 1 18 17 14 13 12 5 0 40 3 0 - 1 49 42 39 33 32 0 6 40 2 3 0 41 40 1 0 14 0 0 26 34 6 48 196 18 - 17 14 3 12 32 3 42 41 2 13 0 40 39 6 32 0 0 33 32 32 1 0 1 4 48 - 196 49 0 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 0 0 55 20 64 30 7 2 22 17 10 48 84 10 0 2 2 1 18 17 14 13 12 5 0 - 40 3 0 1 49 42 39 33 32 0 6 40 2 3 0 1 60 59 51 50 4 13 64 0 0 - 41 40 1 0 14 0 0 26 34 6 48 196 60 59 18 17 14 5 12 32 3 42 41 2 13 - 0 51 50 40 39 4 13 6 32 0 0 33 32 32 1 0 1 4 48 196 49 0 1 13 12 - 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 108 values pushed */ - 0 0 30 7 2 22 17 10 48 84 10 0 2 2 1 56 55 54 53 50 5 51 0 3 0 - 1 18 17 14 13 12 5 0 40 3 0 1 49 42 39 33 32 0 6 40 2 3 0 52 51 - 1 41 40 1 2 0 14 0 0 26 34 6 48 196 54 53 18 17 14 5 12 32 3 42 41 - 2 13 0 56 55 52 51 50 40 39 7 13 6 32 0 0 33 32 32 1 0 1 4 48 196 - 49 0 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 107 values pushed */ - 0 0 53 17 64 30 7 2 22 17 10 48 84 10 0 2 2 1 18 17 14 13 12 5 0 - 40 3 0 1 49 42 39 33 32 0 6 40 2 3 0 1 58 57 51 50 4 13 64 2 0 - 41 40 1 0 14 0 0 55 48 62 26 34 6 48 196 18 17 14 3 12 32 3 42 41 2 - 13 0 58 57 51 50 40 39 6 13 62 6 32 0 0 33 32 32 1 0 1 4 48 196 49 - 0 1 13 12 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 111 values pushed */ - 0 0 30 7 2 22 17 10 48 84 10 0 2 2 1 18 17 14 13 12 5 0 40 3 0 - 1 49 42 39 33 32 0 6 40 2 3 0 0 0 53 50 5 1 51 1 4 48 84 52 51 - 1 41 40 1 2 0 14 0 0 26 34 6 48 196 18 17 14 3 12 32 3 40 39 2 52 - 50 3 42 41 2 13 0 6 50 0 0 53 52 4 1 50 33 32 32 1 0 2 4 48 196 - 51 50 1 49 0 1 13 12 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 88 values pushed */ - 74 67 57 66 56 50 40 49 37 30 20 29 19 12 2 11 0 0 39 38 7 1 0 1 4 - 48 84 1 0 1 50 49 30 29 3 2 0 67 66 12 11 0 3 14 67 74 66 57 50 56 - 49 40 30 37 29 20 12 19 11 2 0 0 38 37 2 1 32 3 19 74 40 39 0 32 3 - 56 2 4 48 196 20 19 1 57 56 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 121 values pushed */ - 82 75 65 74 60 53 43 52 40 33 23 32 18 12 2 11 0 0 62 61 42 41 22 21 21 - 5 19 1 0 7 1 83 2 4 48 84 84 83 1 75 74 12 11 3 2 0 53 52 33 32 - 0 3 86 85 64 63 20 19 1 5 14 75 82 74 65 53 60 52 43 33 40 32 23 12 18 - 11 2 63 62 2 13 60 21 20 18 0 0 85 84 82 43 42 0 32 5 60 86 83 41 40 - 2 1 32 5 18 2 4 48 196 65 64 61 60 3 23 22 19 18 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 117 values pushed */ - 74 67 57 66 56 50 40 49 37 30 20 29 19 12 2 11 81 80 79 78 75 5 76 11 3 - 0 0 39 38 7 1 0 1 4 48 84 77 76 1 1 0 1 50 49 30 29 3 3 0 67 - 66 12 11 0 3 14 67 74 66 57 50 56 49 40 30 37 29 20 12 19 11 2 78 19 1 - 2 81 80 79 77 76 5 1 0 3 75 0 56 2 0 0 38 37 2 1 32 3 19 74 40 - 39 0 32 3 56 2 4 48 196 20 19 1 57 56 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 39 values pushed */ - 0 29 19 28 18 11 1 10 29 28 1 0 11 10 0 14 29 0 28 19 11 18 10 1 0 - 0 19 18 32 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 0 29 19 28 18 11 1 10 39 36 2 37 10 3 38 37 1 29 28 1 2 0 11 10 0 - 14 29 0 28 19 11 18 10 1 37 18 0 2 38 18 39 36 0 0 0 19 18 32 1 0 - 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 0 0 41 20 50 48 84 0 29 19 28 18 11 1 10 46 45 37 36 4 13 50 10 29 28 - 1 0 11 10 0 14 29 0 28 19 11 18 10 1 46 45 2 13 18 37 36 0 0 0 19 - 18 37 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 68 values pushed */ - 0 29 19 28 18 11 1 10 42 41 40 39 36 5 37 10 3 38 37 1 29 28 1 2 0 - 11 10 0 14 29 0 28 19 11 18 10 1 41 18 0 2 40 39 38 3 13 18 42 37 36 - 3 13 0 0 0 19 18 32 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 0 29 19 28 18 11 1 10 0 0 43 40 39 36 13 3 37 1 4 48 84 42 41 38 37 - 3 29 28 1 2 0 11 10 0 14 29 0 28 19 11 18 10 1 0 0 41 40 13 1 42 - 39 38 13 1 36 19 18 32 1 0 3 4 48 196 43 42 1 37 36 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 0 29 19 28 18 11 1 10 0 0 39 36 5 1 37 1 4 48 84 38 37 1 29 28 1 - 2 0 11 10 0 14 29 0 28 19 11 18 10 1 0 0 39 38 4 1 36 19 18 32 1 - 0 2 4 48 196 37 36 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 0 29 19 28 18 11 1 10 37 36 2 38 10 3 39 38 1 29 28 1 2 0 11 10 0 - 14 29 0 28 19 11 18 10 1 39 18 0 2 36 18 38 0 0 0 37 19 18 32 2 0 - 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 0 29 19 28 18 11 1 10 0 0 39 36 12 1 37 1 4 48 84 38 37 1 29 28 1 - 2 0 11 10 0 14 29 0 28 19 11 18 10 1 39 38 2 13 18 37 36 0 0 0 19 - 18 32 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 48 7 39 48 84 0 29 19 28 18 11 1 10 37 36 39 28 44 43 29 28 3 0 - 11 10 0 14 0 0 46 48 41 48 196 29 0 28 19 11 18 10 1 43 18 0 2 44 37 - 36 3 13 18 41 0 0 0 19 18 32 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 0 0 57 20 40 45 20 52 48 84 0 29 19 28 18 11 1 10 59 48 47 36 4 13 52 - 40 10 29 28 1 0 11 10 0 14 29 0 28 19 11 18 10 1 48 47 2 13 18 59 36 - 0 0 0 19 18 37 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 0 0 7 7 33 48 84 12 19 1 29 28 21 11 4 19 2 3 0 1 2 1 0 3 13 - 33 2 0 20 19 0 14 19 12 2 11 0 2 21 20 2 13 28 0 0 29 28 32 1 11 - 1 4 48 196 12 11 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 0 0 7 7 33 48 84 12 19 41 40 39 38 35 5 36 19 3 1 29 28 21 11 4 19 - 2 3 0 1 2 1 0 3 13 33 2 0 37 36 1 0 20 19 0 14 19 12 40 28 11 - 2 41 36 35 2 4 11 0 3 39 38 37 21 20 5 13 28 0 0 29 28 32 1 11 1 - 4 48 196 12 11 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 71 64 54 63 53 46 44 38 37 32 31 28 22 21 14 11 10 0 12 12 29 3 46 45 30 - 29 3 0 64 63 13 12 0 3 14 64 71 63 54 46 53 45 44 32 31 30 29 28 22 21 - 14 13 12 11 10 14 13 34 7 0 0 0 71 38 37 0 32 3 53 1 4 48 196 54 53 - 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 106 values pushed */ - 0 0 75 17 86 48 84 71 64 54 63 53 46 44 38 37 32 31 28 22 21 14 11 10 0 - 12 12 29 3 80 79 73 72 4 13 86 29 46 45 30 29 3 0 64 63 13 12 0 3 14 - 0 0 77 48 84 48 196 64 71 63 54 46 53 80 79 73 72 45 44 32 31 30 29 28 22 - 21 14 13 12 11 10 18 13 84 34 7 3 12 0 0 0 71 38 37 0 32 3 53 1 4 - 48 196 54 53 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 29 22 12 21 11 4 32 30 2 1 4 21 34 3 0 0 35 34 7 1 3 1 4 48 84 - 4 3 1 0 22 21 0 14 22 29 21 12 4 11 35 34 32 1 4 2 29 3 0 0 30 - 29 32 1 11 1 4 48 196 3 2 1 12 11 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 29 22 12 21 11 4 43 40 2 41 21 3 32 30 2 1 4 21 34 3 0 0 35 34 7 - 1 3 1 4 48 84 42 41 1 4 3 1 2 0 22 21 0 14 22 29 21 12 4 11 42 - 41 35 34 32 1 6 2 29 3 43 40 2 29 11 3 0 0 30 29 32 1 11 1 4 48 - 196 3 2 1 12 11 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 94 values pushed */ - 29 22 12 21 11 4 51 49 48 44 41 40 32 30 2 1 10 21 34 3 0 0 35 34 7 - 1 3 1 4 48 84 4 3 1 0 43 42 22 21 0 3 14 22 29 21 12 4 11 1 2 - 43 2 51 40 35 3 43 41 3 34 32 2 41 29 3 0 0 49 48 42 41 4 3 43 30 - 29 32 1 11 2 4 48 196 44 43 1 3 2 1 12 11 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 94 values pushed */ - 0 0 43 17 54 48 84 29 22 12 21 11 4 32 30 2 1 4 21 34 3 48 47 41 40 - 4 13 54 3 0 0 35 34 7 1 3 1 4 48 84 4 3 1 0 22 21 0 14 0 0 - 45 48 52 48 196 22 29 21 12 4 11 52 52 48 47 35 34 32 1 7 2 29 3 0 0 - 41 40 30 29 32 3 11 1 4 48 196 3 2 1 12 11 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 29 22 12 21 11 4 32 30 2 1 4 40 34 3 0 0 43 40 5 1 41 35 34 7 1 - 3 2 4 48 84 42 41 1 4 3 1 2 0 22 21 0 14 22 29 21 12 4 11 1 2 - 42 2 35 34 32 3 40 29 3 0 0 41 40 4 1 42 30 29 32 1 11 2 4 48 196 - 43 42 1 3 2 1 12 11 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 47 40 21 14 4 13 38 37 28 26 25 24 23 22 3 2 1 0 12 13 30 3 0 0 31 - 30 7 1 39 1 4 48 84 40 39 1 0 14 13 0 14 40 47 14 21 13 4 37 31 30 - 28 24 23 6 38 21 3 2 1 0 0 0 26 25 22 21 32 3 0 1 4 48 196 39 38 - 1 47 4 3 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 51 58 50 44 34 43 33 32 31 30 29 22 19 12 11 4 1 11 0 20 3 44 43 21 20 - 3 0 58 3 2 0 0 3 14 58 51 44 50 43 34 2 11 29 2 32 31 22 21 1 0 - 6 29 33 3 20 19 4 3 4 13 11 51 50 33 0 0 30 29 4 1 11 1 4 48 196 - 12 11 1 34 33 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 76 values pushed */ - 38 45 37 31 23 30 22 19 12 9 2 1 6 0 30 3 21 20 30 31 30 1 0 45 11 - 10 0 0 3 14 45 38 31 37 30 23 21 19 1 2 10 9 0 3 1 22 3 12 11 2 - 13 19 0 0 2 1 35 1 19 23 22 35 1 37 2 4 48 196 20 19 1 38 37 1 2 - 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 38 45 37 31 23 30 49 46 2 47 0 3 22 19 12 9 2 1 6 0 30 3 21 20 30 - 48 47 1 31 30 1 2 0 45 11 10 0 0 3 14 45 38 31 37 30 23 21 19 1 2 - 49 48 47 46 10 9 0 7 1 22 3 12 11 2 13 19 0 0 2 1 35 1 19 23 22 - 35 1 37 2 4 48 196 20 19 1 38 37 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 95 values pushed */ - 38 45 37 31 23 30 22 19 12 9 2 1 6 0 30 3 52 51 50 49 46 5 13 47 21 - 20 30 48 47 1 31 30 1 2 0 45 11 10 0 0 3 14 45 38 31 37 30 23 21 19 - 1 2 52 51 50 49 48 47 46 10 9 0 10 1 22 3 12 11 2 13 19 0 0 2 1 - 35 1 19 23 22 35 1 37 2 4 48 196 20 19 1 38 37 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 0 0 49 17 60 48 84 38 45 37 31 23 30 22 19 12 9 2 1 6 0 30 3 54 53 - 47 46 21 20 6 13 60 30 31 30 1 0 45 11 10 0 0 3 14 0 0 51 48 58 48 - 196 45 38 31 37 30 23 21 19 1 2 58 58 54 53 47 46 10 9 0 8 1 22 3 12 - 11 2 13 19 0 0 2 1 35 1 19 23 22 35 1 37 2 4 48 196 20 19 1 38 37 - 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 99 values pushed */ - 0 0 67 20 50 55 20 62 48 84 38 45 37 31 23 30 22 19 12 9 2 1 6 0 30 - 3 69 58 57 46 4 13 62 50 0 21 20 30 31 30 1 0 45 11 10 0 0 3 14 45 - 38 31 37 30 23 21 19 1 2 69 58 57 46 10 9 0 7 1 22 3 12 11 2 13 19 - 0 0 2 1 35 1 19 23 22 35 1 37 2 4 48 196 20 19 1 38 37 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 24 17 8 16 17 0 48 84 8 2 0 0 14 0 0 28 34 4 20 34 12 48 196 - 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 133 values pushed */ - 0 0 85 17 60 77 17 70 48 84 70 0 60 2 0 1 14 2 73 31 30 24 23 22 16 - 9 8 4 3 11 14 38 3 72 54 51 50 45 44 42 40 36 33 32 11 38 52 3 0 0 - 15 14 21 1 1 1 4 48 84 39 38 1 53 52 1 2 0 2 1 0 14 0 0 81 33 - 66 48 196 50 2 31 2 45 44 42 38 36 33 30 24 23 22 14 9 8 4 14 31 15 3 - 66 0 0 0 73 72 54 53 1 0 36 5 15 1 4 48 196 52 51 1 3 2 1 32 31 - 1 40 39 16 15 3 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 24 17 8 16 17 0 48 84 8 2 0 0 1 35 32 2 33 0 3 0 34 33 1 - 0 14 0 0 28 34 4 20 34 12 48 196 35 34 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 37 20 46 24 38 8 16 38 0 48 84 8 2 0 0 1 42 41 33 32 4 13 46 - 0 0 14 0 0 28 34 4 20 34 12 48 196 42 41 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 49 values pushed */ - 0 0 24 17 8 16 17 0 48 84 8 2 0 0 1 38 37 36 35 32 5 33 0 3 0 - 34 33 1 0 14 0 0 28 34 4 20 34 12 48 196 38 37 36 35 34 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 0 0 24 17 8 16 17 0 48 84 8 2 0 0 0 0 39 36 35 32 13 3 33 1 4 - 48 84 38 37 34 33 3 0 14 0 0 28 34 4 20 34 12 48 196 4 38 12 32 0 0 - 37 36 13 1 38 35 34 13 1 32 2 4 48 196 39 38 1 33 32 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 24 17 8 16 17 0 48 84 8 2 0 0 1 33 32 2 34 0 3 0 35 34 1 - 0 14 0 0 28 34 4 20 34 12 48 196 35 34 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 51 values pushed */ - 0 0 24 17 8 16 17 0 48 84 8 2 0 0 1 39 36 35 32 4 33 0 3 0 38 - 37 34 33 3 0 14 0 0 28 34 4 20 34 12 48 196 39 38 37 36 35 34 33 32 12 - 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 0 0 24 17 8 16 17 0 48 84 8 2 0 0 0 0 35 32 12 1 33 1 4 48 84 - 34 33 1 0 14 0 0 28 34 4 20 34 12 48 196 35 34 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 0 0 41 17 9 30 17 22 48 84 22 2 9 0 1 1 47 37 36 26 24 14 11 1 8 - 0 2 3 0 0 1 13 12 2 13 0 0 1 25 0 2 0 14 0 0 45 34 5 34 34 - 18 48 196 47 37 36 26 25 24 18 14 13 12 11 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 48 values pushed */ - 0 0 53 20 36 41 20 48 24 17 8 16 17 0 48 84 8 2 0 0 1 55 44 43 32 - 4 13 48 36 0 0 14 0 0 28 34 4 20 34 12 48 196 55 44 43 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 26 35 25 18 10 17 44 43 37 36 9 8 6 0 17 3 18 17 1 0 35 0 0 14 0 - 0 39 33 6 48 196 35 26 18 25 17 10 43 37 8 0 4 13 6 9 0 0 44 36 10 - 9 32 3 25 1 4 48 196 26 25 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 0 0 32 17 6 24 17 14 48 84 14 0 6 2 1 1 22 0 2 2 0 0 1 4 1 - 0 3 13 2 0 14 0 0 36 34 18 28 34 10 48 196 22 18 10 4 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 38 47 37 30 49 48 11 3 55 20 3 28 22 17 12 4 20 18 3 56 55 1 21 20 1 - 30 29 19 18 3 3 0 47 0 0 14 0 0 51 10 7 48 196 47 38 30 37 0 21 37 - 2 55 49 29 28 20 19 18 17 12 11 10 13 7 21 0 0 56 48 22 21 32 3 37 1 - 4 48 196 38 37 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 95 values pushed */ - 38 47 37 30 60 57 2 58 0 3 49 48 11 3 55 20 3 28 22 17 12 4 20 18 3 - 59 58 1 56 55 1 21 20 1 30 29 19 18 3 4 0 47 0 0 14 0 0 51 10 7 - 48 196 47 38 30 37 0 21 37 2 60 59 58 57 55 49 29 28 20 19 18 17 12 11 14 - 13 7 21 0 0 56 48 22 21 32 3 37 1 4 48 196 38 37 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 101 values pushed */ - 38 47 37 30 49 48 11 3 55 20 3 28 22 17 12 4 20 18 3 63 62 61 60 57 5 - 13 58 59 58 1 56 55 1 21 20 1 30 29 19 18 3 4 0 47 0 0 14 0 0 51 - 10 7 48 196 47 38 30 37 61 60 0 3 21 37 3 63 62 59 58 57 55 49 29 28 20 - 19 18 17 12 11 15 13 7 21 0 0 56 48 22 21 32 3 37 1 4 48 196 38 37 1 - 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 105 values pushed */ - 0 0 60 17 71 48 84 38 47 37 30 49 48 11 3 55 20 3 28 22 17 12 4 20 18 - 3 65 64 58 57 4 13 71 18 56 55 1 21 20 1 30 29 19 18 3 3 0 47 0 0 - 14 0 0 62 48 69 51 10 7 48 196 47 38 30 37 0 21 37 2 65 64 58 57 55 49 - 29 28 20 19 18 17 12 11 14 13 69 7 21 0 0 56 48 22 21 32 3 37 1 4 48 - 196 38 37 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 35 17 23 10 21 50 48 84 50 2 23 0 1 1 31 30 27 26 25 6 5 2 1 - 0 10 0 2 3 0 0 14 0 0 37 5 19 12 10 46 48 196 19 31 30 27 19 6 5 - 2 7 25 0 3 46 25 26 25 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 35 17 23 10 21 50 48 84 50 2 23 0 1 55 52 2 53 0 3 0 1 1 31 - 30 27 26 25 6 5 2 1 0 10 0 2 3 0 0 54 53 1 0 14 0 0 37 5 19 - 12 10 46 48 196 19 55 53 52 31 30 27 19 6 5 2 10 25 0 3 54 46 25 26 25 - 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 0 0 35 17 23 10 21 50 48 84 50 2 23 0 1 1 31 30 27 26 25 6 5 2 1 - 0 10 0 2 3 0 0 58 57 56 55 52 5 13 53 54 53 1 0 14 0 0 37 5 19 - 12 10 46 48 196 19 58 57 56 55 54 53 52 31 30 27 19 6 5 2 14 25 0 3 46 - 25 26 25 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 91 values pushed */ - 0 0 55 17 68 35 17 23 10 21 50 48 84 50 2 23 0 1 1 31 30 27 26 25 6 - 5 2 1 0 10 0 2 3 0 0 1 62 61 60 59 53 52 6 13 68 2 0 14 0 0 - 57 48 64 37 5 19 12 10 46 48 196 64 19 64 62 61 60 59 53 52 31 30 27 19 6 - 5 2 14 25 0 3 46 25 26 25 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 35 17 23 10 21 50 48 84 50 2 23 0 1 58 57 56 55 52 5 53 0 3 0 - 1 1 31 30 27 26 25 6 5 2 1 0 10 0 2 3 0 0 54 53 1 0 14 0 0 - 37 5 19 12 10 46 48 196 19 58 57 56 55 54 53 52 31 30 27 19 6 5 2 14 25 - 0 3 46 25 26 25 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 55 17 66 35 17 23 10 21 50 48 84 50 2 23 0 1 1 31 30 27 26 25 6 - 5 2 1 0 10 0 2 3 0 0 1 60 59 53 52 4 13 66 2 0 14 0 0 57 48 - 64 37 5 19 12 10 46 48 196 64 19 64 60 59 53 52 31 30 27 19 6 5 2 12 25 - 0 3 46 25 26 25 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 44 37 27 36 24 20 19 16 15 12 11 7 6 9 0 36 3 0 0 26 25 1 0 21 3 - 13 1 4 48 84 37 36 1 0 14 13 0 14 37 44 36 27 25 24 20 19 16 5 14 26 - 3 11 7 6 1 4 0 12 3 0 0 27 26 32 1 0 1 4 48 196 15 14 1 44 0 - 1 13 12 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 102 values pushed */ - 52 45 35 44 28 24 23 20 19 16 15 11 10 9 4 2 3 0 0 30 29 5 4 21 3 - 17 34 33 1 0 21 3 2 2 4 48 84 32 31 3 2 3 45 44 1 2 0 18 17 0 - 14 45 52 44 35 33 32 29 28 24 23 20 7 18 30 3 15 11 10 5 2 1 6 0 16 - 3 0 0 35 34 31 30 32 3 0 1 4 48 196 19 18 1 52 4 3 0 3 17 16 1 - 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 44 37 27 36 24 20 19 16 15 12 11 7 6 9 0 36 3 51 50 49 48 45 5 13 46 - 0 0 26 25 1 0 21 3 13 1 4 48 84 47 46 1 37 36 1 2 0 14 13 0 14 - 37 44 36 27 51 46 45 25 24 20 19 16 8 14 26 3 50 26 0 2 49 48 47 11 7 - 6 1 7 0 12 3 0 0 27 26 32 1 0 1 4 48 196 15 14 1 44 0 1 13 12 - 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 117 values pushed */ - 0 0 48 17 61 48 84 44 37 27 36 24 20 19 16 15 12 11 7 6 9 0 36 3 55 - 52 46 45 4 13 61 36 0 0 26 25 1 0 21 3 13 1 4 48 84 54 53 37 36 3 - 0 14 13 0 14 0 0 50 48 57 48 196 37 44 36 27 57 57 25 24 20 19 16 6 14 - 26 3 55 54 53 3 26 0 3 52 46 45 11 7 6 1 7 0 12 3 0 0 27 26 32 - 1 0 1 4 48 196 15 14 1 44 0 1 13 12 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 109 values pushed */ - 0 0 48 38 59 48 84 44 37 27 36 24 20 19 16 15 12 11 7 6 9 0 36 3 53 - 52 46 45 4 13 59 36 0 0 26 25 1 0 42 3 13 1 4 48 84 37 36 1 0 14 - 13 0 14 0 0 50 23 57 48 196 37 44 36 27 57 57 25 24 20 19 16 6 14 26 3 - 46 45 11 7 6 1 6 0 12 3 0 0 27 26 37 1 0 1 4 48 196 15 14 1 53 - 52 44 0 3 13 12 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 68 values pushed */ - 44 37 27 36 26 19 9 18 55 54 46 45 8 7 0 7 36 18 3 19 18 1 0 37 36 - 0 14 0 0 50 33 5 48 196 37 44 36 27 19 26 18 9 54 46 7 3 13 5 0 0 - 0 55 45 44 9 8 0 32 5 26 1 4 48 196 27 26 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 15 17 44 48 84 44 2 47 56 37 30 22 29 1 46 38 21 9 8 1 6 0 2 - 3 0 56 30 29 0 0 3 14 56 47 30 37 29 22 1 0 2 21 8 3 0 0 22 21 - 9 1 37 9 8 32 1 46 2 4 48 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 0 0 15 17 44 48 84 44 2 47 56 37 30 22 29 60 57 2 58 0 3 1 46 38 21 - 9 8 1 6 0 2 3 0 59 58 1 0 56 30 29 0 0 3 14 56 47 30 37 29 22 - 60 59 58 57 1 0 6 21 8 3 0 0 22 21 9 1 37 9 8 32 1 46 2 4 48 - 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 62 20 71 15 38 44 48 84 44 2 47 56 37 30 22 29 1 46 38 21 9 8 1 - 6 0 2 3 0 67 66 58 57 4 13 71 0 56 30 29 0 0 3 14 56 47 30 37 29 - 22 67 66 58 57 1 0 6 21 8 3 0 0 22 21 41 1 37 9 8 37 1 46 2 4 - 48 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 0 0 15 17 44 48 84 44 2 47 56 37 30 22 29 63 62 61 60 57 5 58 0 3 1 - 46 38 21 9 8 1 6 0 2 3 0 59 58 1 0 56 30 29 0 0 3 14 56 47 30 - 37 29 22 63 62 61 60 59 58 57 1 0 9 21 8 3 0 0 22 21 9 1 37 9 8 - 32 1 46 2 4 48 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 105 values pushed */ - 0 0 15 17 44 48 84 44 2 47 56 37 30 22 29 1 46 38 21 9 8 1 6 0 2 - 3 0 0 0 64 61 60 57 13 3 58 1 4 48 84 63 62 59 58 3 0 56 30 29 0 - 0 3 14 56 47 30 37 29 22 1 0 2 59 57 3 0 0 62 61 13 1 63 60 59 13 - 1 57 22 21 9 1 37 9 8 32 1 46 4 4 48 196 64 63 1 58 57 1 38 37 1 - 47 46 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 84 values pushed */ - 0 0 15 17 44 48 84 44 2 47 56 37 30 22 29 58 57 2 59 0 3 1 46 38 21 - 9 8 1 6 0 2 3 0 60 59 1 0 56 30 29 0 0 3 14 56 47 30 37 29 22 - 60 59 58 57 1 0 6 21 8 3 0 0 22 21 9 1 37 9 8 32 1 46 2 4 48 - 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 95 values pushed */ - 0 0 15 17 44 48 84 44 2 47 56 37 30 22 29 64 61 60 57 4 58 0 3 1 46 - 38 21 9 8 1 6 0 2 3 0 63 62 59 58 3 0 56 30 29 0 0 3 14 56 47 - 30 37 29 22 63 37 21 2 64 62 61 60 59 58 57 1 0 9 21 8 3 0 0 22 21 - 9 1 37 9 8 32 1 46 2 4 48 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 89 values pushed */ - 0 0 15 17 44 48 84 44 2 47 56 37 30 22 29 1 46 38 21 9 8 1 6 0 2 - 3 0 0 0 60 57 12 1 58 1 4 48 84 59 58 1 0 56 30 29 0 0 3 14 56 - 47 30 37 29 22 60 59 58 57 1 0 6 21 8 3 0 0 22 21 9 1 37 9 8 32 - 1 46 2 4 48 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 0 0 3 17 14 48 84 14 8 7 1 0 14 0 0 5 48 12 48 196 12 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 96 values pushed */ - 0 0 69 7 60 15 17 44 48 84 44 2 47 56 37 30 22 29 1 46 38 21 9 8 1 - 6 0 2 3 0 1 65 64 58 57 4 13 60 2 0 56 30 29 0 0 3 14 0 0 67 - 48 62 48 196 56 47 30 37 29 22 62 65 64 62 58 57 1 0 7 21 8 3 0 0 22 - 21 9 1 37 9 8 32 1 46 2 4 48 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 93 values pushed */ - 0 0 81 17 65 73 17 57 15 17 44 48 84 44 2 47 56 37 30 22 29 1 46 38 21 - 9 8 1 6 0 2 3 0 65 57 0 56 30 29 0 0 3 14 0 0 85 17 61 77 17 - 69 48 196 56 47 30 37 29 22 69 61 69 61 1 0 4 21 8 3 0 0 22 21 9 1 - 37 9 8 32 1 46 2 4 48 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 89 values pushed */ - 0 0 78 20 61 66 20 73 15 38 44 48 84 44 2 47 56 37 30 22 29 1 46 38 21 - 9 8 1 6 0 2 3 0 80 69 68 57 4 13 73 61 0 56 30 29 0 0 3 14 56 - 47 30 37 29 22 80 69 68 57 1 0 6 21 8 3 0 0 22 21 41 1 37 9 8 37 - 1 46 2 4 48 196 38 37 1 47 46 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 1 28 25 24 17 16 11 10 7 1 9 8 2 3 0 1 35 0 2 0 27 26 9 8 0 - 3 14 35 28 27 26 25 24 21 17 16 13 11 10 9 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 1 38 30 27 26 19 18 11 10 7 9 8 1 3 0 1 1 20 17 2 1 2 3 0 0 - 1 39 37 36 0 4 13 2 0 29 28 9 8 0 3 14 39 38 37 36 30 29 28 27 26 - 23 20 19 18 17 14 11 10 9 8 7 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 46 45 44 43 40 5 41 8 3 1 38 30 27 26 19 18 11 10 7 9 8 1 3 0 1 - 1 20 17 2 1 2 3 0 0 1 39 37 36 0 4 13 2 0 42 41 1 0 29 28 9 - 8 0 3 14 46 45 44 43 42 41 40 39 38 37 36 30 29 28 27 26 23 20 19 18 17 - 14 11 10 9 8 7 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 70 69 59 58 52 51 48 43 42 36 33 32 26 17 16 13 8 7 1 19 14 0 3 71 50 - 49 0 3 0 35 34 15 14 0 3 14 71 70 69 66 59 58 55 52 51 50 49 48 43 42 - 36 35 34 33 32 29 26 20 17 16 15 14 13 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 58 51 43 50 33 32 30 42 33 32 30 27 24 23 17 10 9 6 4 0 13 7 50 3 51 - 50 1 0 26 25 8 7 0 3 14 51 58 50 43 17 42 0 2 27 26 25 24 23 5 13 - 20 42 10 9 8 7 6 4 6 13 13 0 0 0 43 42 32 1 0 1 4 48 196 58 0 - 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MDAP[1] - MDAP[1] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 58 51 43 50 62 59 2 60 7 3 33 32 30 42 33 32 30 27 24 23 17 10 9 6 4 - 0 13 7 50 3 61 60 1 51 50 1 2 0 26 25 8 7 0 3 14 51 58 50 43 62 - 59 17 3 42 0 3 61 60 27 26 25 24 23 7 13 20 42 10 9 8 7 6 4 6 13 - 13 0 0 0 43 42 32 1 0 1 4 48 196 58 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - MDAP[1] - MDAP[1] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 98 values pushed */ - 58 51 43 50 65 64 63 62 59 5 60 7 3 33 32 30 42 33 32 30 27 24 23 17 10 - 9 6 4 0 13 7 50 3 61 60 1 51 50 1 2 0 26 25 8 7 0 3 14 51 58 - 50 43 64 60 17 3 42 0 3 63 62 61 27 26 25 24 23 8 13 20 42 65 59 10 9 - 8 7 6 4 8 13 13 0 0 0 43 42 32 1 0 1 4 48 196 58 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - MDAP[1] - MDAP[1] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 121 values pushed */ - 58 51 43 50 33 32 30 42 33 32 30 27 24 23 17 10 9 6 4 0 13 7 50 3 0 - 0 66 63 62 59 13 3 60 1 4 48 84 65 64 61 60 3 51 50 1 2 0 26 25 8 - 7 0 3 14 51 58 50 43 25 24 23 3 65 63 3 17 42 61 2 10 9 8 3 0 59 - 3 27 26 2 13 20 65 7 6 4 3 13 13 59 0 0 64 63 13 1 65 62 61 13 1 - 59 43 42 32 1 0 3 4 48 196 66 65 1 60 59 1 58 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - MDAP[1] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 14 12 2 2 22 21 11 10 4 2 15 3 1 15 0 2 0 0 3 2 21 1 12 16 15 - 35 1 0 2 4 48 84 23 0 1 0 13 12 0 14 21 16 15 14 13 10 3 2 8 22 - 11 3 1 0 11 23 22 1 12 11 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 27 24 2 25 12 3 14 12 2 2 22 21 11 10 4 2 15 3 1 15 0 2 0 0 3 - 2 21 1 12 16 15 35 1 0 2 4 48 84 26 25 1 23 0 1 2 0 13 12 0 14 - 27 26 25 24 21 16 15 14 13 10 3 2 12 22 11 3 1 0 11 23 22 1 12 11 1 - 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 14 12 2 2 22 21 11 10 4 2 15 3 1 15 0 2 30 29 28 27 24 5 13 25 0 - 0 3 2 21 1 12 16 15 35 1 0 2 4 48 84 26 25 1 23 0 1 2 0 13 12 - 0 14 30 29 28 27 26 25 24 21 16 15 14 13 10 3 2 15 22 11 3 1 0 11 23 - 22 1 12 11 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 14 12 2 2 22 21 11 10 4 2 15 3 1 15 0 2 0 0 27 24 5 1 25 3 2 - 21 1 12 16 15 35 1 0 3 4 48 84 26 25 1 23 0 1 2 0 13 12 0 14 21 - 16 14 13 2 5 22 26 3 15 10 3 3 24 11 3 1 0 11 0 0 27 26 4 1 24 - 1 4 48 196 25 24 1 23 22 1 12 11 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 45 22 2 14 21 23 48 84 37 2 23 1 2 2 28 35 1 1 41 40 39 27 21 - 20 19 18 10 9 8 0 12 1 2 3 0 0 1 35 2 0 14 0 0 43 10 6 48 196 - 35 28 0 27 9 2 41 19 18 8 4 9 20 3 6 20 0 0 40 39 10 9 4 3 27 - 1 4 48 196 28 27 1 21 20 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 12 values pushed */ - 3 0 1 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 112 values pushed */ - 0 0 60 17 29 52 22 4 37 9 42 16 21 25 48 84 42 2 29 1 25 1 4 2 1 - 56 27 23 22 21 20 12 7 1 54 3 0 31 11 10 3 54 32 3 1 48 47 46 40 39 - 0 6 32 2 3 0 0 0 33 32 14 1 54 1 4 48 84 55 54 1 0 14 0 0 50 - 10 8 48 196 48 21 20 10 4 11 22 3 56 55 54 40 39 33 32 31 27 0 10 13 11 - 8 22 47 46 12 11 3 23 22 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 9 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 83 17 17 75 15 3 48 84 17 0 3 2 1 77 67 25 11 4 0 39 3 0 65 - 63 49 41 38 31 29 1 8 39 0 3 40 39 1 64 0 1 2 0 14 0 0 87 5 13 - 81 16 21 71 5 7 48 196 77 67 65 64 63 49 41 40 39 38 31 29 25 21 13 11 7 - 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 3 0 6 1 1 1 4 48 84 2 1 1 0 14 0 0 3 2 6 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 109 values pushed */ - 0 0 71 17 55 63 17 47 45 22 2 14 21 23 48 84 37 2 23 1 2 2 28 35 1 - 1 41 40 39 27 21 20 19 18 10 9 8 0 12 1 2 3 0 0 1 55 47 1 0 1 - 35 2 0 14 0 0 75 17 51 67 17 59 43 10 6 48 196 35 28 51 51 0 2 27 9 - 3 59 59 41 19 18 8 5 9 20 3 6 20 0 0 40 39 10 9 4 3 27 1 4 48 - 196 28 27 1 21 20 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - CALL[ ] - MDAP[1] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 5 4 3 2 1 0 14 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 21 values pushed */ - 0 0 24 41 5 10 41 19 48 84 19 15 14 5 1 0 14 15 14 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 33 1 33 31 28 26 25 24 22 21 20 7 6 5 2 1 0 15 29 1 3 0 1 1 19 - 17 16 15 14 12 11 10 9 3 10 1 2 3 0 0 30 29 0 14 31 30 29 28 26 25 - 24 22 21 20 19 17 16 15 14 12 11 10 9 7 6 5 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 76 values pushed */ - 0 0 78 22 29 72 9 35 66 11 2 58 11 10 50 21 18 48 84 10 0 2 2 35 29 - 18 1 1 70 69 68 45 44 35 29 25 24 23 18 0 12 0 2 3 0 0 14 0 0 76 - 47 31 62 11 6 54 11 14 48 48 20 48 196 70 69 68 45 44 31 25 24 23 20 14 6 - 0 - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 0 0 33 29 14 27 21 22 48 84 22 2 14 1 1 7 1 2 8 1 3 0 1 1 35 - 25 10 3 1 2 3 0 0 1 24 0 2 0 9 8 1 0 14 0 0 31 10 18 48 196 - 18 9 8 7 0 0 0 35 25 24 10 9 4 4 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 9 values pushed */ - 3 2 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 3 2 1 0 14 0 0 3 2 9 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 45 values pushed */ - 56 44 43 42 41 29 22 17 16 15 14 2 1 0 14 0 0 39 24 48 19 24 10 48 196 - 56 54 48 44 43 42 41 33 29 25 22 17 16 15 14 10 4 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 56 44 43 42 41 36 29 22 17 16 15 14 2 1 0 14 0 0 39 24 48 19 24 10 48 - 196 56 54 48 44 43 42 41 36 33 29 25 22 17 16 15 14 10 4 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 0 0 4 3 14 1 1 6 5 14 1 0 2 4 48 84 2 1 1 7 0 1 2 0 14 - 7 6 3 2 4 13 4 0 0 5 4 13 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 0 0 4 3 14 1 5 2 1 14 1 0 2 4 48 84 6 5 1 7 0 1 2 0 14 - 5 4 1 0 4 13 2 0 0 3 2 13 1 6 1 4 48 196 7 6 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 17 values pushed */ - 0 0 5 20 14 48 84 14 10 9 1 0 14 10 9 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 28 values pushed */ - 7 6 5 4 3 2 1 0 14 0 0 7 6 3 2 9 3 0 1 4 48 196 5 4 1 - 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 15 values pushed */ - 0 0 0 8 48 84 8 14 0 0 4 12 48 196 12 - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 0 0 25 9 2 17 17 10 48 84 10 1 2 2 1 1 27 15 14 13 12 0 6 1 2 - 3 0 0 14 0 0 21 10 6 48 196 15 14 6 0 27 13 12 0 3 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 6 5 4 3 0 5 13 1 2 1 1 0 14 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 78 values pushed */ - 0 0 25 9 2 17 17 10 48 84 10 1 2 2 1 33 29 0 2 0 1 1 34 32 31 - 28 4 0 1 3 0 0 1 1 27 15 14 13 12 0 6 1 2 3 0 0 30 29 1 0 - 14 0 0 21 10 6 48 196 31 0 34 33 32 30 29 28 15 14 8 13 6 0 27 13 12 - 0 3 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 79 values pushed */ - 0 0 25 9 2 17 17 10 48 84 10 1 2 2 1 1 27 15 14 13 12 0 6 1 2 - 3 0 0 0 0 31 28 5 1 29 1 4 48 84 30 29 0 14 0 0 21 10 6 48 196 - 15 14 2 0 30 3 6 28 0 0 29 28 4 1 30 1 4 48 196 31 30 1 27 13 12 - 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 29 values pushed */ - 0 0 3 17 18 48 84 18 10 9 8 7 1 0 14 0 0 5 48 14 48 196 14 10 9 - 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 61 values pushed */ - 40 39 38 37 35 34 32 30 29 18 17 16 14 13 12 11 1 0 14 0 0 44 10 5 48 - 196 18 16 13 2 5 0 0 0 40 39 12 11 1 0 11 5 13 1 4 48 196 35 34 17 - 16 3 38 37 30 29 14 13 5 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 1 5 1 0 2 0 1 6 4 3 0 4 13 0 0 2 1 1 0 14 6 5 4 3 2 - 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 7 4 6 1 5 2 1 6 1 0 2 4 48 84 3 0 1 0 6 5 1 14 0 - 0 7 6 3 2 6 3 0 1 4 48 196 5 4 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 13 11 10 4 1 0 6 13 2 3 2 1 0 14 13 0 2 3 1 3 0 0 4 3 6 - 1 1 1 4 48 196 11 10 2 1 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 0 0 55 17 34 51 25 42 24 11 8 16 11 0 48 84 8 2 0 0 42 34 1 1 57 - 47 46 45 44 42 34 32 8 0 2 3 0 0 14 0 0 53 16 38 28 11 4 20 11 12 - 48 196 57 32 2 13 4 44 47 46 38 12 44 45 44 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 68 values pushed */ - 0 0 36 9 26 28 9 12 48 84 12 1 1 16 15 9 8 4 13 1 0 1 24 23 22 - 21 17 14 10 7 3 2 1 0 12 13 26 1 0 14 0 0 40 9 19 32 9 5 48 196 - 24 23 22 21 19 17 16 15 14 10 9 8 7 5 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 78 values pushed */ - 0 0 41 29 5 35 21 13 48 84 13 1 5 2 1 22 16 2 23 1 3 0 1 43 33 - 31 25 15 1 6 1 0 3 0 24 23 1 32 0 1 2 0 14 0 0 39 10 9 48 196 - 32 31 2 13 24 23 22 9 0 0 0 43 33 16 15 1 0 4 5 24 1 4 48 196 25 - 24 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 42 values pushed */ - 1 10 9 8 7 4 3 2 1 8 5 2 3 0 11 0 1 0 6 5 0 14 11 10 7 - 6 5 4 1 0 8 8 2 3 9 8 1 3 2 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 1 18 17 16 15 14 13 12 11 8 7 6 5 4 3 2 1 16 9 2 3 0 19 0 1 - 0 10 9 0 14 19 10 2 12 11 3 9 0 2 1 2 3 0 0 18 15 14 11 9 3 - 1 1 4 48 196 17 16 13 12 3 8 5 4 1 3 7 6 3 2 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 104 values pushed */ - 0 0 41 29 4 35 21 12 48 84 12 1 4 2 1 55 53 52 48 45 44 21 15 8 22 - 1 3 0 1 43 33 30 24 14 0 6 1 31 3 0 47 46 23 22 3 32 31 1 2 0 - 14 0 0 39 10 8 48 196 55 44 2 47 45 3 31 30 2 45 23 3 22 21 8 0 0 - 0 53 52 46 45 4 3 47 43 33 32 15 14 0 4 5 23 2 4 48 196 48 47 1 24 - 23 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 104 values pushed */ - 0 0 49 29 5 43 21 13 48 84 13 1 5 2 26 20 2 27 18 3 1 51 41 39 33 - 15 1 6 1 0 3 0 0 0 32 31 17 16 14 3 18 1 4 48 84 28 27 1 30 29 - 19 18 3 40 0 1 3 0 14 0 0 47 10 9 48 196 40 39 31 30 4 13 28 27 26 - 18 17 4 13 9 0 0 0 51 41 20 19 16 15 1 0 4 7 28 1 4 48 196 33 32 - 29 28 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 28 values pushed */ - 0 0 24 8 16 7 0 48 84 0 0 1 8 0 0 14 0 0 28 8 4 20 8 12 48 - 196 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 7 4 3 0 13 3 1 1 4 48 84 6 5 2 1 3 0 14 0 0 5 4 13 - 1 6 3 2 13 1 0 2 4 48 196 7 6 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 0 0 11 8 5 1 9 7 4 9 1 5 2 1 5 1 0 3 4 48 84 6 5 1 3 - 0 1 2 0 10 9 1 14 7 6 2 13 2 5 4 0 0 0 11 10 3 2 4 3 0 - 1 4 48 196 9 8 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 94 values pushed */ - 68 67 66 59 58 57 45 44 43 39 38 32 31 30 28 27 26 25 15 14 9 8 5 4 3 - 1 0 14 0 0 72 18 19 63 18 53 48 196 43 39 38 32 4 30 28 3 27 28 0 2 - 19 19 9 8 5 4 0 3 3 53 30 0 0 66 59 58 57 45 44 28 11 6 0 1 4 - 48 196 31 30 1 68 67 26 25 15 14 1 0 7 4 3 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 0 0 3 0 5 1 1 1 4 48 84 2 1 0 14 0 0 3 2 4 1 0 1 4 48 - 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 49 values pushed */ - 19 16 13 10 9 6 3 0 8 17 1 3 2 1 1 0 18 17 1 14 1 0 2 13 18 - 17 16 13 6 3 2 6 13 9 0 0 19 18 4 1 9 1 4 48 196 10 9 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 0 0 7 11 22 48 84 1 20 17 11 3 18 2 3 0 1 10 9 2 1 0 5 13 22 - 2 0 19 18 1 14 18 17 2 3 9 0 3 0 0 11 10 9 4 2 19 1 4 48 196 - 20 19 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 3 0 6 1 1 1 4 48 84 2 1 1 0 14 0 0 3 2 6 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 0 0 29 17 10 20 9 2 48 84 10 1 2 2 14 23 15 2 1 22 0 2 15 2 3 - 0 0 0 16 15 14 1 23 1 4 48 84 24 23 1 0 14 24 23 22 16 15 14 6 0 - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 0 0 38 20 47 29 17 10 20 9 2 48 84 10 1 2 2 14 23 15 2 1 22 0 2 - 15 2 3 0 1 43 42 34 33 4 13 47 1 0 0 0 16 15 14 1 23 1 4 48 84 - 24 23 1 0 14 43 42 34 33 24 23 22 16 15 14 6 0 - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 51 values pushed */ - 0 0 54 17 25 39 17 8 48 84 25 2 8 0 1 1 48 33 16 0 4 0 2 3 0 - 0 14 0 0 58 5 21 50 5 29 43 18 4 35 18 12 48 196 48 33 29 21 16 12 4 - 0 - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 10 9 6 5 2 1 5 5 0 1 4 48 84 11 8 7 4 3 0 5 0 14 0 - 0 9 8 4 1 10 7 6 4 1 4 3 2 4 1 0 3 4 48 196 11 10 1 5 4 - 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 9 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 88 values pushed */ - 0 0 46 29 21 37 11 28 48 84 21 1 55 49 48 41 26 25 17 14 8 7 1 11 15 - 0 3 40 39 32 31 30 5 13 28 0 56 0 1 0 16 15 1 14 56 55 32 3 39 16 - 3 15 14 1 0 4 13 7 0 0 41 40 39 4 2 25 49 48 17 16 4 3 7 2 4 - 48 196 26 25 1 31 30 1 8 7 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 33 values pushed */ - 0 0 7 4 9 1 5 2 1 9 1 0 2 4 48 84 6 5 1 3 0 1 2 0 14 - 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 0 0 29 17 10 20 9 2 48 84 10 1 2 2 14 23 15 2 1 22 0 2 15 2 3 - 0 0 0 16 15 14 1 23 1 4 48 84 24 23 1 0 14 24 23 22 16 15 14 6 0 - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 69 values pushed */ - 0 0 39 17 21 31 17 29 48 84 29 1 21 2 1 1 13 10 5 4 3 2 6 0 1 - 3 0 0 1 1 0 1 2 2 0 0 1 12 11 8 7 4 13 0 0 14 0 0 43 10 - 17 35 10 25 48 196 25 17 13 12 11 10 8 7 5 4 3 2 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 52 values pushed */ - 9 8 5 4 4 6 1 3 0 0 2 1 5 1 0 1 4 48 84 3 0 1 0 7 6 - 0 14 9 4 2 2 0 3 0 0 8 7 3 2 4 3 0 1 4 48 196 6 5 1 0 - 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 1 9 4 2 1 2 3 0 1 8 5 2 2 6 3 0 0 0 2 1 5 1 0 1 4 - 48 84 7 6 1 0 3 0 1 14 9 4 2 0 2 3 0 0 6 5 1 0 4 3 2 - 1 4 48 196 8 7 3 2 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 95 values pushed */ - 0 0 26 11 16 48 84 40 34 7 1 4 8 0 3 29 24 23 20 19 18 12 7 13 16 - 10 0 0 33 32 7 1 10 1 4 9 8 1 10 1 6 48 84 41 0 1 0 31 30 11 - 10 1 3 14 41 40 32 31 24 23 20 7 18 29 3 10 9 1 0 4 13 7 0 0 34 - 33 30 29 4 3 7 1 4 48 196 19 18 1 12 11 8 7 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 138 values pushed */ - 0 0 31 11 20 48 84 49 45 24 23 2 1 0 3 34 16 2 0 14 3 59 53 50 43 - 37 11 5 7 12 4 3 22 20 1 0 0 52 51 7 1 14 1 4 13 12 1 14 1 6 - 3 0 5 1 1 1 4 48 84 60 45 44 4 3 0 36 35 15 14 1 3 2 1 0 14 - 45 49 49 50 22 2 60 59 24 3 22 34 3 44 43 2 13 2 14 13 5 4 4 13 11 - 0 0 51 50 4 1 2 53 52 35 34 4 3 11 1 0 13 1 2 3 4 48 196 23 22 - 1 16 15 12 11 3 37 36 3 2 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 138 values pushed */ - 0 0 31 11 20 48 84 49 45 24 23 2 1 0 3 34 16 2 0 14 3 59 53 50 43 - 37 11 5 7 12 4 3 22 20 1 0 0 52 51 7 1 14 1 4 13 12 1 14 1 6 - 3 0 5 1 1 1 4 48 84 60 45 44 4 3 0 36 35 15 14 1 3 2 1 0 14 - 45 49 49 50 22 2 60 59 24 3 22 34 3 44 43 2 13 2 14 13 5 4 4 13 11 - 0 0 51 50 4 1 2 53 52 35 34 4 3 11 1 0 13 1 2 3 4 48 196 23 22 - 1 16 15 12 11 3 37 36 3 2 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 6 11 27 48 84 27 2 1 19 18 13 12 2 1 6 16 2 3 0 1 0 2 0 - 0 0 17 16 13 1 14 1 4 48 84 15 14 0 14 0 0 10 10 23 48 196 19 2 2 - 15 17 3 12 17 13 2 23 15 0 0 18 17 11 1 13 1 4 48 196 16 15 1 14 13 - 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 115 values pushed */ - 0 0 38 11 18 48 84 34 30 41 36 12 3 20 10 3 52 46 35 28 22 7 1 7 8 - 0 3 18 20 0 0 45 44 7 1 10 1 4 9 8 1 10 1 6 48 84 21 20 1 53 - 30 29 0 3 2 0 43 42 11 10 1 3 14 30 34 53 52 44 43 34 20 6 35 41 3 - 29 28 2 13 21 10 9 1 0 4 13 7 0 0 36 35 4 1 21 46 45 42 41 4 3 - 7 2 4 48 196 22 21 1 12 11 8 7 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 115 values pushed */ - 0 0 38 11 18 48 84 34 30 41 36 12 3 20 10 3 52 46 35 28 22 7 1 7 8 - 0 3 18 20 0 0 45 44 7 1 10 1 4 9 8 1 10 1 6 48 84 21 20 1 53 - 30 29 0 3 2 0 43 42 11 10 1 3 14 30 34 53 52 44 43 34 20 6 35 41 3 - 29 28 2 13 21 10 9 1 0 4 13 7 0 0 36 35 4 1 21 46 45 42 41 4 3 - 7 2 4 48 196 22 21 1 12 11 8 7 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 0 0 17 11 9 48 84 9 0 1 13 12 11 3 0 3 3 0 0 0 25 24 2 1 14 - 3 3 1 4 48 84 23 22 4 3 3 26 0 1 2 0 14 26 25 24 23 22 13 4 3 - 2 1 0 11 13 11 12 11 1 0 - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 25 18 2 5 0 2 16 9 2 0 17 3 28 4 3 3 13 5 0 0 27 26 6 5 19 - 3 0 1 4 48 84 8 7 1 0 3 18 17 1 2 0 14 18 25 17 16 2 6 4 3 - 3 4 0 2 26 2 1 3 13 0 0 0 28 27 25 0 13 3 4 1 4 48 196 7 6 - 1 9 8 5 4 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 10 13 8 2 23 17 7 1 4 8 0 3 27 12 11 3 13 13 0 0 16 15 9 8 46 - 3 13 1 4 48 84 26 25 14 13 3 24 0 1 2 0 14 11 12 7 2 24 23 15 14 - 4 13 12 25 10 9 1 0 5 13 7 0 0 27 26 8 7 15 3 12 1 4 48 196 17 - 16 13 12 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 9 values pushed */ - 3 2 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 9 values pushed */ - 3 2 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 0 0 61 17 41 51 17 24 47 17 13 48 84 13 1 24 1 33 32 26 24 18 17 15 5 - 0 9 1 55 3 0 1 16 1 0 41 55 67 55 1 0 14 0 0 65 30 37 57 30 45 - 53 5 20 49 5 9 48 196 67 55 45 37 33 32 28 26 20 18 17 16 15 9 5 2 0 - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 101 values pushed */ - 0 0 61 17 41 51 17 24 47 17 13 48 84 13 1 1 73 69 0 2 0 1 1 74 72 - 71 68 16 5 0 1 3 0 0 24 1 33 32 26 24 18 17 15 5 0 9 1 55 3 0 - 41 55 70 69 1 67 55 1 2 0 14 0 0 65 30 37 57 30 45 53 5 20 49 5 9 - 48 196 74 73 72 71 70 69 68 67 55 45 37 33 32 28 26 20 18 17 16 15 9 5 2 - 0 - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 121 values pushed */ - 0 0 61 17 41 51 17 24 47 17 13 48 84 13 1 1 16 70 1 2 0 24 1 33 32 - 26 24 18 17 15 5 0 9 1 55 3 0 79 77 76 72 69 68 6 13 70 41 55 71 70 - 1 67 55 1 2 0 14 0 0 65 30 37 57 30 45 53 5 20 49 5 9 48 196 79 68 - 67 33 32 26 6 69 71 3 18 17 16 15 4 13 37 20 69 55 5 0 3 13 45 28 9 - 2 4 12 71 0 0 77 76 70 69 4 3 71 1 4 48 196 72 71 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 120 values pushed */ - 0 0 61 17 41 51 17 24 47 17 13 48 84 13 1 1 16 68 1 2 0 24 1 33 32 - 26 24 18 17 15 5 0 9 1 55 3 0 1 41 2 0 0 0 71 68 5 1 69 1 4 - 48 84 67 55 1 0 70 69 0 14 0 0 65 30 37 57 30 45 53 5 20 49 5 9 48 - 196 67 33 32 26 4 70 68 3 18 17 16 15 4 13 37 20 70 55 5 0 3 13 45 28 - 9 2 4 12 68 0 0 71 70 4 1 68 1 4 48 196 69 68 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 22 11 47 6 11 69 48 84 69 2 43 42 36 33 27 26 2 1 0 9 13 47 34 - 35 34 1 0 14 0 0 20 16 51 10 24 65 48 196 15 34 33 15 3 0 26 3 2 65 - 57 51 3 12 0 36 35 42 0 0 27 26 4 1 42 1 4 48 196 1 0 1 43 42 1 - 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - MDRP[00000] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 12 values pushed */ - 1 0 2 3 2 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - NPUSHB[ ] /* 15 values pushed */ - 6 5 4 3 2 1 0 14 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 11 10 9 8 7 6 5 4 3 2 1 0 14 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 11 10 9 8 7 6 5 4 3 2 1 0 14 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 5 4 3 2 1 0 14 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 5 4 3 2 1 0 14 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 94 values pushed */ - 0 0 47 29 21 48 84 21 1 51 57 1 14 8 2 15 1 3 0 1 50 49 42 41 35 - 32 26 25 17 7 1 11 1 0 3 0 16 15 1 57 34 33 0 3 2 0 14 57 51 51 - 35 34 3 41 16 3 33 32 2 13 25 15 14 1 0 4 13 7 0 0 42 41 4 1 25 - 50 49 17 16 4 3 7 2 4 48 196 26 25 1 8 7 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 118 values pushed */ - 0 0 55 29 29 48 84 29 1 59 65 18 12 2 19 10 3 1 58 57 50 49 43 40 34 - 33 25 7 1 11 1 0 3 0 0 0 24 23 9 8 14 3 10 1 4 48 84 20 19 1 - 22 21 11 10 3 65 42 41 0 3 3 0 14 65 59 59 43 42 23 22 5 49 20 3 41 - 40 2 13 33 19 18 10 9 1 0 6 13 7 0 0 50 49 4 1 33 58 57 25 24 21 - 20 4 5 7 2 4 48 196 34 33 1 12 11 8 7 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 121 values pushed */ - 0 0 47 39 21 48 84 21 1 51 57 64 63 62 61 58 5 59 15 3 1 14 8 2 15 - 1 3 0 1 50 49 42 41 35 32 26 25 17 7 1 11 1 0 3 0 60 59 1 16 15 - 1 57 34 33 0 3 3 0 14 57 51 62 61 2 25 41 3 63 60 59 51 35 34 6 41 - 16 3 64 58 2 16 7 3 33 32 2 13 25 15 14 1 0 4 13 7 0 0 42 41 5 - 1 25 50 49 17 16 5 3 7 2 4 48 196 26 25 1 8 7 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 22 values pushed */ - 7 4 3 0 4 13 1 6 5 2 1 3 0 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 27 21 18 15 12 11 8 5 8 19 4 3 0 0 3 0 5 1 1 1 4 48 84 28 4 - 1 0 20 19 1 2 1 0 14 28 27 2 13 2 19 18 15 8 5 4 6 13 0 0 0 - 21 20 3 2 4 3 0 1 4 48 196 12 11 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 0 0 30 20 39 48 84 19 16 13 10 9 3 0 7 17 1 3 35 34 26 25 4 13 39 - 17 2 1 1 0 18 17 1 14 35 34 1 0 4 13 18 26 25 17 16 13 3 2 7 13 - 9 0 0 19 18 4 1 9 1 4 48 196 10 9 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 19 16 13 10 9 3 0 7 17 1 3 0 0 32 29 28 25 13 3 26 1 4 48 84 31 - 30 27 26 3 2 1 1 2 0 18 17 1 14 1 0 2 31 29 3 17 16 13 3 2 5 - 27 25 3 0 0 30 29 13 1 31 28 27 13 1 25 19 18 4 1 9 3 4 48 196 32 - 31 1 26 25 1 10 9 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 46 20 29 34 20 41 48 84 29 0 41 1 48 41 25 3 0 17 3 0 19 16 13 - 10 9 3 0 7 17 1 3 1 37 36 2 13 0 0 2 1 1 0 18 17 1 14 37 36 - 1 0 4 13 18 48 25 17 16 13 3 2 7 13 9 0 0 19 18 5 1 9 1 4 48 - 196 10 9 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 76 values pushed */ - 0 0 7 17 22 48 84 1 20 17 11 3 18 2 3 0 1 10 9 2 1 0 5 13 22 - 2 0 0 0 27 24 5 1 25 1 4 48 84 26 25 0 19 18 1 14 18 17 2 3 9 - 0 3 0 0 25 24 11 10 9 4 4 19 1 4 48 196 27 26 20 19 3 1 0 1 2 - 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 0 0 7 17 22 48 84 1 29 25 0 2 0 1 30 28 27 24 4 0 18 3 0 1 20 - 17 11 3 18 2 3 0 1 10 9 2 1 0 5 13 22 2 0 26 25 1 0 19 18 1 - 14 29 26 2 19 9 3 30 25 24 18 17 2 6 9 0 3 28 27 2 13 19 0 0 20 - 19 4 1 9 1 4 48 196 11 10 9 2 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 14 8 2 15 35 3 61 55 54 53 50 44 37 34 33 32 31 28 27 26 25 18 17 7 1 - 19 35 0 3 16 15 1 62 52 51 0 3 2 0 36 35 1 14 62 61 53 52 51 50 44 - 37 36 35 34 33 32 31 28 27 26 25 18 19 13 23 16 15 14 1 0 4 13 7 0 0 - 55 54 17 16 4 3 7 1 4 48 196 8 7 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 55 54 53 50 49 46 39 36 35 34 33 30 29 28 27 20 19 16 10 9 3 0 22 17 1 - 3 52 51 2 1 3 0 38 37 18 17 1 3 14 53 52 51 50 49 46 39 38 37 36 35 - 34 33 30 29 28 27 20 1 0 20 13 25 18 17 16 3 2 4 13 9 0 0 55 54 19 - 18 4 3 9 1 4 48 196 10 9 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 48 values pushed */ - 23 17 14 8 7 4 1 7 15 0 3 16 15 1 24 0 1 2 0 14 24 23 2 13 16 - 15 14 4 1 0 5 13 7 0 0 17 16 4 1 7 1 4 48 196 8 7 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 36 34 33 29 26 25 19 16 10 9 6 3 0 13 17 1 3 28 27 18 17 3 2 1 1 - 2 0 14 36 25 2 28 26 3 1 0 2 26 18 3 17 16 6 3 2 5 13 9 0 0 - 34 33 27 26 4 3 28 19 18 4 1 9 2 4 48 196 29 28 1 10 9 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 76 values pushed */ - 16 10 2 17 26 3 19 9 6 3 0 5 25 1 3 0 0 28 25 5 1 26 1 4 48 - 84 27 26 1 18 17 1 2 1 1 3 0 14 1 0 2 25 18 3 17 16 6 3 2 5 - 13 9 0 0 26 25 4 1 27 19 18 4 1 9 2 4 48 196 28 27 1 10 9 1 2 - 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - NPUSHB[ ] /* 15 values pushed */ - 6 5 4 3 2 1 0 14 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 41 values pushed */ - 7 0 1 0 0 6 5 2 1 9 3 3 1 4 48 84 4 3 1 0 14 3 2 0 0 - 0 1 0 9 1 4 1 4 48 196 7 6 5 4 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 0 0 18 38 8 48 84 37 31 28 22 4 0 29 3 21 16 15 12 11 10 4 7 13 8 - 2 0 0 1 0 8 1 2 1 4 48 84 30 29 1 0 3 2 1 14 29 28 16 15 12 - 5 10 21 3 31 30 2 1 4 13 0 0 0 22 21 5 1 0 1 4 48 196 11 10 1 - 37 4 3 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 64 values pushed */ - 31 25 24 23 22 21 18 12 11 10 9 8 7 4 1 15 19 0 3 20 19 1 32 0 1 - 2 0 14 32 31 23 22 4 13 20 19 18 10 9 4 1 0 7 13 7 0 0 25 24 21 - 20 4 3 7 1 4 48 196 12 11 8 7 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 114 values pushed */ - 0 0 79 29 21 55 29 29 48 84 29 1 21 1 88 82 81 74 73 67 64 58 57 50 49 - 43 40 34 33 25 17 14 8 7 1 21 15 0 3 89 66 65 42 41 0 5 0 16 15 1 - 14 65 64 43 42 4 49 25 3 89 88 67 66 4 73 16 3 41 40 2 13 33 15 14 1 - 0 4 13 7 0 0 50 49 4 1 33 58 57 25 4 2 73 82 81 17 16 4 3 7 3 - 4 48 196 34 33 1 74 73 1 8 7 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 9 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 18 29 41 48 84 41 2 39 36 30 27 21 20 13 10 4 3 10 11 37 3 0 37 - 1 2 38 37 1 2 1 1 2 0 29 28 12 11 1 3 14 28 27 2 20 0 3 37 36 - 2 13 29 11 10 2 0 0 39 38 21 20 4 3 29 13 12 1 0 4 3 2 2 4 48 - 196 30 29 1 4 3 2 2 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 1 11 10 9 8 7 6 5 4 3 2 1 0 12 13 1 0 14 11 10 9 8 7 6 5 - 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 47 29 21 48 84 21 1 51 57 50 49 42 41 35 32 26 25 17 14 8 7 1 13 - 15 0 3 57 34 33 0 3 0 16 15 1 14 57 51 51 35 34 3 41 16 3 33 32 2 - 13 25 15 14 1 0 4 13 7 0 0 42 41 4 1 25 50 49 17 16 4 3 7 2 4 - 48 196 26 25 1 8 7 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 116 values pushed */ - 0 0 47 29 21 48 84 21 1 51 57 69 67 66 62 59 58 6 60 15 3 50 49 42 41 - 35 32 26 25 17 14 8 7 1 13 15 0 3 61 60 1 57 34 33 0 3 2 0 16 15 - 1 14 57 51 51 35 34 3 41 16 3 15 14 1 0 4 7 61 3 69 58 2 61 59 3 - 33 32 2 13 25 0 0 62 61 4 1 59 42 41 4 1 25 50 49 17 16 4 3 7 3 - 4 48 196 67 66 60 59 3 26 25 1 8 7 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 54 values pushed */ - 0 0 39 17 4 33 17 12 29 17 20 48 84 20 2 12 0 4 1 1 24 23 22 4 0 - 5 0 2 3 0 0 14 0 0 43 10 16 37 5 8 48 196 24 0 2 13 16 22 8 22 - 23 22 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 14 13 10 9 4 13 7 27 24 23 0 4 13 1 0 0 31 30 18 17 6 5 9 5 7 - 26 25 22 21 2 1 9 5 3 2 4 48 84 16 15 12 11 8 7 5 29 28 20 19 4 - 3 5 2 0 14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 - 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 22 17 8 16 17 0 48 84 8 2 0 1 14 0 0 26 10 4 20 10 12 48 196 - 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 35 20 44 22 38 8 16 38 0 48 84 8 2 0 1 1 40 39 31 30 4 13 44 - 1 0 14 0 0 26 40 4 20 40 12 48 196 40 39 31 30 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 53 11 2 41 11 25 37 11 33 12 9 17 48 84 33 1 25 2 17 2 2 1 1 - 51 0 2 1 49 3 0 6 49 7 2 1 21 15 14 3 7 2 3 0 0 0 8 7 14 - 1 49 1 4 48 84 50 49 1 0 14 0 0 39 10 29 48 196 51 50 49 45 29 21 15 - 14 8 7 6 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 0 0 12 7 3 48 84 8 7 3 1 0 14 0 0 10 48 5 48 196 8 7 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 42 values pushed */ - 17 9 25 24 18 7 1 0 6 13 21 8 9 8 1 0 14 9 17 8 7 2 13 0 25 - 24 17 0 0 1 0 4 1 17 1 4 48 196 18 17 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 106 values pushed */ - 0 0 37 45 44 48 84 44 44 42 41 40 39 5 4 55 3 30 55 29 2 27 21 20 19 - 18 12 11 5 2 1 10 13 15 4 3 0 29 0 0 56 55 43 1 29 1 4 48 84 57 - 29 1 28 4 1 2 0 14 0 0 35 44 48 48 196 57 56 55 42 41 40 39 30 29 28 - 27 2 1 13 13 48 20 19 18 5 4 3 0 6 13 11 0 0 21 20 12 1 11 1 4 - 48 196 12 11 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 129 values pushed */ - 31 16 15 3 32 17 3 14 17 12 2 27 26 21 11 6 5 6 12 4 3 55 49 48 47 - 46 40 39 33 2 1 10 13 43 32 3 0 4 0 0 30 29 18 17 46 3 12 1 4 48 - 84 56 32 1 20 19 13 12 3 28 4 1 3 0 14 15 1 2 16 11 3 56 55 29 14 - 13 6 5 4 8 11 48 3 28 27 26 19 18 2 6 13 16 47 46 33 32 3 0 6 13 - 39 0 0 49 48 12 1 39 31 30 12 11 15 3 16 2 4 48 196 40 39 1 21 20 17 - 16 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 23 17 16 15 14 8 7 1 8 13 11 0 24 0 1 0 14 24 23 2 13 16 15 14 1 - 0 4 13 7 0 0 17 16 12 1 7 1 4 48 196 8 7 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 78 values pushed */ - 0 0 39 7 2 12 25 19 48 84 19 0 1 35 34 33 29 28 24 23 17 16 15 14 8 - 7 6 0 15 13 31 26 2 3 12 0 0 14 0 0 37 47 4 48 196 29 28 2 13 23 - 35 17 16 15 14 6 6 13 4 0 0 0 34 33 8 7 0 23 4 23 1 4 48 196 24 - 23 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 29 values pushed */ - 0 0 20 25 8 16 25 0 48 84 0 0 1 8 0 0 14 0 0 22 24 4 18 24 12 - 48 196 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 0 0 33 17 18 24 17 7 48 84 18 2 7 1 1 1 39 31 30 22 20 12 9 1 8 - 1 2 3 0 0 1 11 10 2 13 1 0 1 21 0 2 0 14 0 0 37 10 14 28 10 - 3 48 196 39 31 30 22 21 20 14 12 11 10 9 3 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 0 0 48 29 21 42 21 29 48 84 29 2 21 1 1 50 40 17 14 8 5 15 2 3 0 - 1 38 32 31 7 1 5 2 0 3 0 39 0 1 0 16 15 1 14 0 0 46 10 25 48 - 196 39 38 2 13 25 16 15 14 1 0 4 13 7 0 0 50 40 32 31 17 16 4 5 7 - 1 4 48 196 8 7 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 1 1 16 2 2 0 1 18 15 14 0 4 13 2 0 0 0 17 16 9 1 12 1 4 48 - 84 13 12 0 14 12 15 17 2 5 0 0 0 16 15 21 1 13 1 0 21 1 17 2 4 - 48 196 14 13 1 18 17 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 17 values pushed */ - 10 9 1 0 14 0 0 14 5 5 48 196 10 9 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 17 values pushed */ - 10 9 1 0 14 0 0 14 5 5 48 196 10 9 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 69 values pushed */ - 0 0 48 11 36 44 11 28 24 11 12 20 11 4 48 84 36 2 4 0 28 12 1 1 28 - 12 2 0 2 3 0 0 1 2 1 2 13 0 0 1 3 0 2 0 14 0 0 50 47 32 - 46 47 40 26 47 8 22 47 16 48 196 40 32 16 8 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 2 1 6 1 0 1 4 48 84 3 0 1 0 14 0 0 3 2 6 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 3 0 6 1 1 1 4 48 84 2 1 1 0 14 0 0 3 2 6 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 3 0 6 1 1 1 4 48 84 2 1 1 0 14 0 0 3 2 6 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 68 11 56 64 11 48 44 11 32 40 11 24 20 11 8 16 11 0 48 84 56 2 32 - 2 0 0 48 24 8 1 1 48 24 8 3 0 2 3 0 0 1 74 73 2 13 0 0 1 - 75 72 2 0 14 0 0 70 47 52 66 47 60 46 47 28 42 47 36 22 47 4 18 47 12 - 48 196 75 74 73 72 60 52 36 28 12 4 - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 55 values pushed */ - 6 5 2 13 3 11 0 1 0 0 10 9 2 1 9 3 3 1 4 48 84 8 7 4 3 - 3 0 14 9 8 2 13 6 3 2 0 0 0 11 10 7 6 9 3 0 1 4 48 196 5 - 4 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 15 4 2 5 1 3 10 9 2 13 7 0 0 14 13 6 5 9 3 7 2 1 9 1 0 - 2 4 48 84 12 11 8 7 3 3 0 1 2 0 14 13 12 3 2 4 13 10 7 6 1 - 0 4 13 4 0 0 15 14 11 10 9 3 4 1 4 48 196 9 8 5 4 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 0 0 40 29 12 34 21 20 48 84 20 1 12 2 1 42 32 8 3 22 2 3 0 1 30 - 24 7 1 4 2 0 3 0 31 0 1 0 23 22 1 14 0 0 38 10 16 48 196 31 30 - 2 13 23 1 0 16 7 0 0 42 32 22 8 7 4 4 23 1 4 48 196 24 23 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 14 11 22 48 84 22 0 1 33 20 19 18 5 5 0 4 3 0 0 0 2 1 5 - 1 0 1 4 48 84 34 4 1 3 0 1 2 0 14 0 0 10 10 26 48 196 18 0 19 - 2 26 2 0 0 34 33 3 2 4 3 0 1 4 48 196 34 33 3 2 3 20 19 1 5 - 4 1 0 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 0 0 14 11 22 48 84 22 2 1 35 20 19 18 5 5 4 2 3 0 0 0 2 1 5 - 1 0 1 4 48 84 36 4 1 3 0 0 14 0 0 10 10 26 48 196 18 19 0 2 26 - 2 0 0 5 4 1 0 4 3 2 1 4 48 196 20 19 1 36 35 3 2 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 22 values pushed */ - 7 4 3 0 4 13 1 6 5 2 1 3 0 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 27 25 24 18 15 14 13 11 10 4 1 0 12 13 2 17 16 3 2 3 0 14 13 0 2 - 3 1 3 27 14 2 17 15 3 0 0 18 17 6 1 15 11 10 2 1 6 3 3 2 4 - 48 196 25 24 16 15 3 4 3 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 27 25 24 18 15 14 13 11 10 4 1 0 12 13 2 17 16 3 2 3 0 14 27 14 2 - 15 17 3 13 0 2 1 3 3 0 0 18 17 6 1 15 11 10 2 1 6 3 3 2 4 - 48 196 25 24 16 15 3 4 3 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 27 25 24 18 15 14 13 11 10 4 1 0 12 13 2 17 16 3 2 3 0 14 13 0 2 - 3 1 3 27 14 2 17 15 3 0 0 18 17 6 1 15 11 10 2 1 6 3 3 2 4 - 48 196 25 24 16 15 3 4 3 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 13 11 10 4 1 0 6 13 2 3 2 1 0 14 13 0 2 1 3 3 0 0 11 10 2 - 1 6 3 3 1 4 48 196 4 3 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 13 11 10 4 1 0 6 13 2 3 2 1 0 14 13 0 2 3 1 3 0 0 4 3 6 - 1 1 1 4 48 196 11 10 2 1 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 13 11 10 4 1 0 6 13 2 3 2 1 0 14 13 0 2 3 1 3 0 0 4 3 6 - 1 1 1 4 48 196 11 10 2 1 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 12 values pushed */ - 3 0 1 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 68 values pushed */ - 0 0 31 13 19 48 84 19 1 40 34 33 23 22 17 14 8 7 1 10 15 0 3 21 15 - 41 0 1 0 16 15 1 14 41 40 23 3 21 16 3 15 14 1 0 4 13 7 0 0 34 - 33 17 16 4 3 7 1 4 48 196 22 21 1 8 7 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 101 values pushed */ - 0 0 24 11 8 16 11 0 48 84 8 2 0 0 75 74 70 69 68 65 62 61 50 46 45 - 41 38 33 32 15 51 39 3 52 51 1 67 66 40 39 3 2 0 14 0 0 72 18 59 28 - 11 4 20 11 12 48 196 52 32 45 2 74 70 68 67 66 65 62 61 39 38 10 13 59 4 - 32 51 50 41 40 4 13 12 45 0 0 75 69 33 32 26 3 45 1 4 48 196 46 45 1 - 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 0 0 24 17 8 16 17 0 48 84 8 0 14 0 0 28 17 4 20 17 12 48 196 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 59 values pushed */ - 0 0 26 17 19 6 17 40 48 84 40 2 19 1 1 1 24 23 22 21 2 1 0 7 1 - 2 3 0 0 14 0 0 28 16 17 8 5 36 48 196 17 24 23 17 2 4 21 0 3 36 - 21 22 21 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 91 values pushed */ - 0 0 26 17 19 6 17 40 48 84 40 2 19 1 1 47 43 0 2 0 1 1 48 46 45 - 42 4 0 1 3 0 0 1 1 24 23 22 21 2 1 0 7 1 2 3 0 0 44 43 1 - 0 14 0 0 28 16 17 8 5 36 48 196 17 48 47 44 43 24 23 17 2 8 21 0 3 - 46 45 2 13 36 21 42 0 22 21 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 41 11 31 8 11 64 48 84 31 0 1 72 66 56 35 34 33 23 2 1 0 10 13 - 64 0 0 14 0 0 74 18 21 68 47 54 45 18 27 12 18 60 48 196 27 21 72 66 56 - 35 27 23 21 2 8 33 0 3 60 54 33 34 33 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 1 4 2 2 2 0 1 13 11 10 1 0 5 13 2 0 0 0 17 14 6 1 15 1 4 - 48 84 3 2 1 0 16 15 1 14 13 0 2 3 1 3 0 0 17 16 4 3 6 3 1 - 1 4 48 196 15 14 11 10 2 1 5 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 1 4 2 2 2 0 1 13 11 10 1 0 5 13 2 0 0 0 17 14 6 1 15 1 4 - 48 84 3 2 1 0 16 15 1 14 13 0 2 3 1 3 0 0 17 16 4 3 6 3 1 - 1 4 48 196 15 14 11 10 2 1 5 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 35 values pushed */ - 7 5 3 2 0 0 4 3 28 1 5 1 4 48 84 11 0 1 0 6 5 0 14 11 7 - 6 3 0 5 13 4 5 4 1 0 - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 52 values pushed */ - 0 0 41 17 12 33 17 4 29 17 20 48 84 20 0 12 2 4 1 1 24 23 22 4 0 - 5 0 2 3 0 0 14 0 0 45 5 8 37 10 16 48 196 8 22 24 0 16 22 23 22 - 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 9 values pushed */ - 3 2 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 98 values pushed */ - 0 0 20 11 12 48 84 12 0 1 24 16 15 14 10 5 0 8 3 0 29 5 2 6 1 - 3 0 0 28 27 7 6 14 3 8 32 31 1 19 2 0 2 4 48 84 26 25 9 8 3 - 33 0 1 2 0 14 27 26 16 3 14 24 3 31 8 7 3 5 0 3 0 0 29 28 25 - 24 4 3 5 1 4 48 196 33 32 15 14 3 10 9 6 5 3 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 18 2 11 16 1 22 16 10 3 0 2 3 0 5 4 2 13 2 0 0 9 8 1 0 3 - 2 1 6 48 84 7 6 3 2 1 3 14 16 11 8 7 2 13 5 2 1 0 0 0 11 - 10 9 6 5 4 4 0 1 4 48 196 22 4 3 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 26 2 19 24 1 30 24 18 3 0 2 3 0 9 8 2 13 6 0 0 13 12 5 4 3 - 6 1 6 17 16 1 0 21 3 2 1 4 48 84 15 14 3 2 3 0 11 10 7 6 1 - 3 14 24 19 16 15 12 11 4 13 9 6 5 2 1 4 13 0 0 0 19 18 17 14 13 - 10 9 4 6 0 1 4 48 196 30 8 7 4 3 0 5 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 18 2 11 16 34 32 31 27 24 23 5 4 8 25 2 3 1 22 16 10 3 0 2 3 0 - 0 0 9 8 1 0 3 2 1 6 48 84 26 25 1 0 7 6 3 2 1 3 14 16 11 - 34 23 8 7 4 26 24 3 2 1 0 0 0 32 31 25 24 4 3 26 11 10 9 6 5 - 4 4 0 2 4 48 196 27 26 1 22 4 3 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 104 values pushed */ - 0 0 26 17 41 48 84 18 2 11 16 1 22 16 10 3 0 2 3 0 5 4 2 13 2 - 1 33 32 31 30 24 23 6 13 41 2 0 0 0 9 8 1 0 3 2 1 6 48 84 7 - 6 3 2 1 3 14 0 0 28 48 37 48 196 16 11 33 31 30 24 23 5 5 0 3 32 - 8 7 3 13 37 5 2 1 0 0 0 11 10 9 6 5 4 4 0 1 4 48 196 22 4 - 3 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 47 29 20 41 21 28 48 84 28 2 20 1 1 13 14 1 2 0 1 1 49 39 16 - 3 1 2 3 0 0 1 37 31 30 7 1 5 2 0 3 0 15 14 1 38 0 1 2 0 - 14 0 0 45 10 24 48 196 38 37 2 13 24 15 14 13 7 1 0 5 13 15 49 39 31 - 30 16 15 5 0 - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 64 values pushed */ - 0 0 23 17 34 8 17 50 48 84 50 2 34 0 1 1 42 32 31 30 19 18 17 16 2 - 1 0 11 0 2 3 0 0 14 0 0 21 5 38 12 10 46 48 196 42 30 19 18 17 16 - 2 7 13 46 38 31 32 31 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 150 values pushed */ - 0 0 53 45 61 42 45 71 48 84 14 17 12 2 27 26 21 11 6 5 6 12 4 3 65 - 59 58 57 49 48 47 46 40 39 37 36 35 34 33 32 31 16 15 2 1 21 13 71 61 17 - 3 0 4 0 0 30 29 18 17 46 3 12 1 4 48 84 20 19 13 12 3 28 4 1 2 - 0 14 0 0 51 44 63 44 44 67 48 196 15 1 2 16 11 3 28 27 26 19 18 2 6 - 13 16 65 59 58 57 49 48 47 46 40 39 37 36 35 34 33 32 29 14 13 6 5 4 3 - 0 24 13 67 63 11 0 0 31 30 12 11 15 3 16 1 4 48 196 21 20 17 16 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 0 0 21 45 29 10 45 41 48 84 41 33 29 27 26 25 17 16 15 14 8 7 5 4 3 - 2 1 0 14 0 0 19 44 31 12 44 37 48 196 37 33 31 27 26 25 17 16 15 14 8 - 7 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 0 0 21 20 4 9 20 16 48 84 4 0 1 12 11 2 13 0 0 1 23 0 16 0 0 - 14 23 12 11 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 133 values pushed */ - 36 35 32 31 26 21 20 17 16 15 14 11 10 7 6 3 2 17 0 12 3 0 0 30 29 - 23 22 9 8 1 0 14 7 4 1 4 48 84 34 33 19 18 13 12 5 0 28 27 25 24 - 5 4 0 5 14 36 27 26 25 16 5 34 17 3 24 23 20 19 4 21 5 3 12 11 8 - 7 4 5 9 3 14 13 2 1 4 0 3 3 33 32 29 28 4 13 30 0 0 35 34 23 - 1 30 22 21 9 1 17 10 9 23 1 0 3 4 48 196 31 30 1 18 17 1 6 5 1 - 15 0 1 4 3 1 5 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 64 values pushed */ - 0 0 12 17 23 48 84 23 0 1 21 20 19 3 0 35 3 0 1 35 0 2 0 0 36 - 35 13 1 0 1 4 48 84 37 0 1 0 14 0 0 10 10 25 48 196 35 19 2 36 20 - 3 25 36 1 0 20 37 36 1 21 20 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 52 values pushed */ - 0 0 8 45 15 48 84 1 28 0 2 13 12 11 10 4 13 15 28 0 0 30 0 43 1 - 28 1 4 48 84 29 28 1 0 14 0 0 6 44 19 48 196 30 29 28 19 13 12 11 10 - 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 0 0 24 29 5 48 84 5 2 42 36 33 27 26 19 16 10 9 1 10 17 0 3 43 0 - 1 0 35 34 18 17 1 3 14 34 33 2 0 18 3 43 42 2 13 35 17 16 9 0 0 - 27 26 1 0 4 3 35 19 18 4 1 9 2 4 48 196 36 35 1 10 9 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 97 values pushed */ - 0 0 49 20 58 24 29 5 48 84 5 2 42 36 33 27 26 19 16 10 9 1 10 17 0 - 3 54 53 45 44 4 13 58 17 43 0 1 0 35 34 18 17 1 3 14 54 53 2 35 0 - 3 34 33 2 0 18 3 45 44 2 18 9 3 43 42 2 13 35 17 16 9 0 0 27 26 - 1 0 4 3 35 19 18 4 1 9 2 4 48 196 36 35 1 10 9 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 12 1 1 1 4 48 84 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 0 0 68 17 52 60 17 44 24 29 5 48 84 5 2 42 36 33 27 26 19 16 10 9 1 - 10 17 0 3 52 44 17 43 0 1 0 35 34 18 17 1 3 14 0 0 72 17 48 64 17 - 56 48 196 48 48 35 0 2 34 33 2 0 18 3 56 56 18 9 2 43 42 2 13 35 17 - 16 9 0 0 27 26 1 0 4 3 35 19 18 4 1 9 2 4 48 196 36 35 1 10 9 - 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 111 values pushed */ - 0 0 65 20 48 53 20 60 24 29 5 48 84 48 0 5 2 60 1 67 60 44 3 0 17 - 3 0 42 36 33 27 26 19 16 10 9 1 10 17 0 3 1 56 55 2 13 0 0 43 0 - 1 0 35 34 18 17 1 3 14 56 55 2 35 0 3 34 33 2 0 18 3 67 44 2 18 - 9 3 43 42 2 13 35 17 16 9 0 0 27 26 1 0 4 3 35 19 18 4 1 9 2 - 4 48 196 36 35 1 10 9 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 40 values pushed */ - 1 25 22 21 15 8 7 4 7 5 2 3 0 1 30 0 2 0 24 23 6 5 1 3 14 - 30 25 24 23 22 21 19 15 11 8 7 6 5 4 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 54 values pushed */ - 1 37 30 27 26 18 17 16 15 10 9 6 11 7 2 3 0 1 38 36 35 0 4 13 2 - 0 29 28 8 7 1 3 14 38 37 36 35 30 29 28 27 26 23 18 17 16 15 12 10 9 - 8 7 6 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 1 44 40 0 2 0 1 45 43 42 39 4 0 7 3 0 1 37 30 27 26 18 17 16 15 - 10 9 6 11 7 2 3 0 1 38 36 35 0 4 13 2 0 41 40 1 0 29 28 8 7 - 1 3 14 45 44 43 42 41 40 39 38 37 36 35 30 29 28 27 26 23 18 17 16 15 12 - 10 9 8 7 6 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 75 74 65 55 54 51 45 39 36 35 29 28 16 15 12 6 1 17 13 0 3 76 53 52 0 - 3 0 38 37 14 13 1 3 14 76 75 74 71 65 58 55 54 53 52 51 45 39 38 37 36 - 35 32 29 28 19 16 15 14 13 12 6 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 1 25 22 21 15 8 7 4 7 5 2 3 0 1 0 2 30 2 0 31 30 1 0 24 23 - 6 5 1 3 14 31 30 25 24 23 22 21 19 15 11 8 7 6 5 4 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 1 37 33 0 2 0 1 38 36 35 32 4 0 5 3 0 1 25 22 21 15 8 7 4 7 - 5 2 3 0 1 0 2 30 2 0 34 33 1 31 30 1 2 0 24 23 6 5 1 3 14 - 38 37 36 35 34 33 32 31 30 25 24 23 22 21 19 15 11 8 7 6 5 4 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 119 values pushed */ - 68 61 51 60 32 29 38 35 32 29 24 19 18 17 15 12 10 13 6 3 0 0 46 45 5 - 4 14 3 6 48 47 3 2 14 3 0 2 4 48 84 44 43 7 6 3 50 49 1 0 3 - 61 60 1 3 0 37 36 14 13 0 3 14 61 68 60 51 24 19 18 17 15 14 6 43 0 - 3 49 48 45 44 38 37 36 35 8 13 27 43 13 12 6 5 2 1 6 13 21 0 0 0 - 51 50 47 46 43 4 4 0 1 4 48 196 68 7 4 3 0 4 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - MDAP[1] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 17 15 2 2 25 24 23 22 14 13 10 9 8 9 2 18 3 1 18 0 2 0 0 3 2 - 14 1 15 19 18 21 1 0 2 4 48 84 26 0 1 0 16 15 1 14 24 23 22 19 18 - 17 16 13 10 9 8 3 2 13 25 14 3 1 0 14 26 25 1 15 14 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 20 11 8 16 11 0 48 84 8 2 0 0 14 0 0 22 10 4 18 10 12 48 196 - 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. - - - Luxi Serif - - - Regular - - - Luxi Serif Regular: B&H - - - Luxi Serif Regular - - - 1.2 : October 12, 2001 - - - LuxiSerif - - - Luxi is a registered trademark of Bigelow & Holmes Inc. - - - Bigelow & Holmes Inc. - - - Kris Holmes and Charles Bigelow - - - http://www.urwpp.de - - - design@bigelowandholmes.com - - - Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. - - - Luxi Serif - - - Regular - - - Luxi Serif Regular: B&H - - - Luxi Serif Regular - - - 1.2 : October 12, 2001 - - - LuxiSerif - - - Luxi is a registered trademark of Bigelow & Holmes Inc. - - - Bigelow & Holmes Inc. - - - Kris Holmes and Charles Bigelow - - - http://www.urwpp.de - - - design@bigelowandholmes.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr-12pt-sans-hinting.txt b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr-12pt-sans-hinting.txt deleted file mode 100644 index e2761641dd..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr-12pt-sans-hinting.txt +++ /dev/null @@ -1,392 +0,0 @@ -freetype version 2.5.1 -213 21 0 192 555;21 0 1, 21 555 1, 192 555 1, 192 0 1, 171 21 1, 171 534 1, 43 534 1, 43 21 1 -0 0 0 0 0; -213 0 0 0 0; -213 0 0 0 0; -213 70 0 144 555;70 0 1, 70 74 1, 144 74 1, 144 0 1, 79 148 1, 70 444 1, 70 555 1, 144 555 1, 144 444 1, 135 148 1 -273 35 407 238 592;44 407 1, 35 592 1, 108 592 1, 99 407 1, 173 407 1, 164 592 1, 238 592 1, 229 407 1 -427 9 0 418 555;47 0 1, 89 167 1, 9 167 1, 18 213 1, 100 213 1, 133 342 1, 44 342 1, 54 389 1, 144 389 1, 186 555 1, 234 555 1, 192 389 1, 291 389 1, 332 555 1, 380 555 1, 339 389 1, 418 389 1, 409 342 1, 327 342 1, 294 213 1, 383 213 1, 374 167 1, 283 167 1, 242 0 1, 194 0 1, 235 167 1, 137 167 1, 95 0 1, 148 213 1, 247 213 1, 279 342 1, 180 342 1 -427 39 -46 353 602;187 -46 1, 187 0 1, 121 0 0, 39 31 1, 39 95 1, 123 56 0, 187 56 1, 187 255 1, 117 298 0, 88 330 1, 55 368 0, 55 422 1, 55 486 0, 103 524 1, 135 550 0, 187 555 1, 187 602 1, 224 602 1, 224 555 1, 278 555 0, 344 530 1, 344 470 1, 273 501 0, 224 504 1, 224 307 1, 228 304 1, 238 298 0, 247 293 1, 251 290 1, 299 262 0, 322 237 1, 353 205 0, 353 155 1, 353 87 0, 308 42 1, 276 12 0, 224 0 1, 224 -46 1, 224 60 1, 288 85 0, 288 144 1, 288 175 0, 270 195 1, 257 210 0, 224 233 1, 187 331 1, 187 502 1, 120 479 0, 120 425 1, 120 376 0 -683 42 -14 641 569;94 -14 1, 531 569 1, 589 569 1, 152 -14 1, 161 555 1, 216 555 0, 248 518 1, 280 480 0, 280 416 1, 280 352 0, 248 315 1, 216 278 0, 161 278 1, 106 278 0, 74 315 1, 42 353 0, 42 418 1, 42 475 0, 68 511 1, 101 555 0, 161 518 1, 134 518 0, 117 491 1, 100 462 0, 100 419 1, 100 375 0, 114 348 1, 131 315 0, 161 315 1, 189 315 0, 206 343 1, 222 371 0, 222 416 1, 222 462 0, 206 490 1, 188 518 0, 522 278 1, 577 278 0, 609 240 1, 641 203 0, 641 139 1, 641 75 0, 609 38 1, 577 0 0, 522 0 1, 467 0 0, 435 38 1, 403 75 0, 403 141 1, 403 198 0, 429 233 1, 462 278 0, 522 241 1, 494 241 0, 477 213 1, 461 185 0, 461 141 1, 461 98 0, 474 71 1, 491 37 0, 522 37 1, 549 37 0, 566 65 1, 583 93 0, 583 139 1, 583 185 0, 566 213 1, 549 241 0 -512 21 -14 485 569;384 0 1, 357 33 1, 282 -14 0, 214 -14 1, 132 -14 0, 77 37 1, 21 88 0, 21 166 1, 21 243 0, 69 290 1, 98 318 0, 152 339 1, 119 400 0, 119 445 1, 119 501 0, 153 535 1, 188 569 0, 247 569 1, 303 569 0, 336 539 1, 368 508 0, 368 457 1, 368 401 0, 325 360 1, 298 335 0, 248 312 1, 311 198 0, 373 123 1, 410 171 0, 410 265 1, 410 295 1, 483 295 1, 483 165 0, 408 83 1, 441 41 0, 485 0 1, 325 76 1, 251 160 0, 178 296 1, 141 279 0, 123 257 1, 95 225 0, 95 179 1, 95 122 0, 134 82 1, 172 42 0, 226 42 1, 268 42 0, 220 359 1, 256 374 0, 273 392 1, 299 419 0, 299 456 1, 299 513 0, 246 513 1, 191 513 0, 191 453 1, 191 416 0, 217 365 1 -147 27 389 120 592;45 389 1, 27 592 1, 120 592 1, 101 389 1 -256 49 -111 225 592;225 -60 1, 225 -111 1, 150 -58 0, 107 21 1, 49 123 0, 49 241 1, 49 364 0, 111 470 1, 154 542 0, 225 592 1, 225 541 1, 174 485 0, 152 426 1, 123 353 0, 123 241 1, 123 124 0, 154 48 1, 177 -7 0 -256 31 -111 207 592;31 541 1, 31 592 1, 106 539 0, 150 461 1, 207 359 0, 207 241 1, 207 117 0, 144 12 1, 102 -60 0, 31 -111 1, 31 -60 1, 81 -3 0, 104 56 1, 132 129 0, 132 241 1, 132 357 0, 101 433 1, 79 487 0 -299 15 282 284 555;267 483 1, 284 431 1, 180 406 1, 180 407 1, 180 411 0, 180 411 1, 180 411 1, 180 427 0, 170 437 1, 255 314 1, 210 282 1, 152 382 1, 170 384 0, 178 401 1, 88 282 1, 43 314 1, 120 401 1, 128 384 0, 147 382 1, 15 431 1, 32 483 1, 129 437 1, 118 427 0, 118 411 1, 118 411 1, 118 411 0, 118 409 1, 119 408 1, 119 407 0, 119 406 1, 122 555 1, 177 555 1, 165 440 1, 157 444 0, 149 444 1, 141 444 0, 133 440 1 -449 39 37 409 407;196 37 1, 196 194 1, 39 194 1, 39 250 1, 196 250 1, 196 407 1, 252 407 1, 252 250 1, 409 250 1, 409 194 1, 252 194 1, 252 37 1 -213 60 -120 153 93;60 -120 1, 60 -93 1, 96 -83 0, 96 -8 1, 96 0 1, 60 0 1, 60 93 1, 153 93 1, 153 12 1, 153 -110 0 -256 33 194 223 250;33 194 1, 33 250 1, 223 250 1, 223 194 1 -213 60 0 153 93;60 0 1, 60 93 1, 153 93 1, 153 0 1 -213 -22 -111 236 555;-22 -111 1, 178 555 1, 236 555 1, 36 -111 1 -427 30 -14 397 569;213 569 1, 298 569 0, 347 491 1, 397 413 0, 397 279 1, 397 142 0, 347 64 1, 298 -14 0, 211 -14 1, 137 -14 0, 90 50 1, 30 130 0, 30 278 1, 30 413 0, 80 491 1, 129 569 0, 213 513 1, 163 513 0, 136 452 1, 109 390 0, 109 278 1, 109 167 0, 136 104 1, 163 42 0, 214 42 1, 260 42 0, 285 87 1, 318 148 0, 318 279 1, 318 392 0, 291 452 1, 263 513 0 -427 86 0 383 569;86 0 1, 86 56 1, 197 56 1, 197 494 1, 86 466 1, 86 523 1, 272 569 1, 272 56 1, 383 56 1, 383 0 1 -427 38 0 353 569;38 0 1, 38 65 1, 64 125 0, 125 188 1, 165 230 1, 202 267 1, 274 341 0, 274 415 1, 274 468 0, 246 493 1, 224 514 0, 184 514 1, 132 514 0, 52 469 1, 52 534 1, 128 569 0, 194 569 1, 267 569 0, 310 527 1, 353 485 0, 353 413 1, 353 364 0, 331 326 1, 308 287 0, 247 233 1, 221 209 1, 143 139 0, 128 65 1, 350 65 1, 350 0 1 -427 57 -14 362 569;57 4 1, 57 73 1, 60 72 1, 70 68 0, 74 67 1, 115 52 0, 129 48 1, 154 42 0, 174 42 1, 230 42 0, 258 73 1, 283 100 0, 283 150 1, 283 208 0, 245 239 1, 208 270 0, 138 270 1, 109 270 1, 109 320 1, 134 320 1, 199 321 0, 234 350 1, 270 379 0, 270 430 1, 270 513 0, 180 513 1, 134 513 0, 65 482 1, 65 547 1, 133 569 0, 185 569 1, 275 569 0, 315 526 1, 344 494 0, 344 441 1, 344 381 0, 302 343 1, 277 320 0, 228 301 1, 271 290 0, 293 277 1, 362 237 0, 362 153 1, 362 77 0, 312 32 1, 263 -14 0, 181 -14 1, 137 -14 0 -427 12 0 402 555;258 0 1, 258 157 1, 12 157 1, 12 213 1, 258 555 1, 327 555 1, 327 218 1, 402 218 1, 402 157 1, 327 157 1, 327 0 1, 84 218 1, 263 218 1, 263 464 1 -427 61 -14 362 555;61 -2 1, 61 64 1, 118 42 0, 166 42 1, 221 42 0, 252 74 1, 284 107 0, 284 162 1, 284 288 0, 113 288 1, 92 288 0, 71 285 1, 71 555 1, 351 555 1, 351 491 1, 135 491 1, 135 344 1, 234 343 0, 291 304 1, 362 255 0, 362 159 1, 362 78 0, 308 32 1, 253 -14 0, 158 -14 1, 116 -14 0 -427 32 -14 385 569;112 292 1, 164 356 0, 238 356 1, 306 356 0, 346 310 1, 385 264 0, 385 182 1, 385 92 0, 339 39 1, 292 -14 0, 214 -14 1, 129 -14 0, 80 59 1, 32 132 0, 32 260 1, 32 405 0, 90 487 1, 148 569 0, 251 569 1, 298 569 0, 355 548 1, 355 484 1, 287 514 0, 249 514 1, 166 514 0, 133 431 1, 120 398 0, 115 357 1, 113 335 0, 218 303 1, 172 303 0, 143 271 1, 114 239 0, 114 183 1, 114 122 0, 144 82 1, 174 42 0, 221 42 1, 312 42 0, 312 167 1, 312 303 0 -427 51 0 407 555;83 0 1, 94 65 0, 114 112 1, 134 159 0, 185 242 1, 337 486 1, 51 486 1, 51 555 1, 407 555 1, 407 486 1, 194 171 0, 168 0 1 -427 37 -14 408 569;147 302 1, 111 329 0, 92 353 1, 66 389 0, 66 429 1, 66 491 0, 112 530 1, 158 569 0, 233 569 1, 302 569 0, 344 536 1, 386 503 0, 386 449 1, 386 400 0, 349 357 1, 326 331 0, 283 302 1, 339 273 0, 368 243 1, 408 199 0, 408 143 1, 408 74 0, 356 30 1, 303 -14 0, 219 -14 1, 137 -14 0, 87 28 1, 37 69 0, 37 138 1, 37 198 0, 78 245 1, 102 274 0, 242 326 1, 319 379 0, 319 437 1, 319 472 0, 294 492 1, 268 513 0, 225 513 1, 183 513 0, 158 494 1, 133 474 0, 133 441 1, 133 402 0, 176 368 1, 197 351 0, 188 272 1, 146 240 0, 130 216 1, 111 189 0, 111 149 1, 111 101 0, 142 71 1, 173 42 0, 223 42 1, 271 42 0, 302 67 1, 332 92 0, 332 132 1, 332 168 0, 309 192 1, 289 212 0, 240 241 1 -427 32 -14 385 569;305 263 1, 253 199 0, 179 199 1, 110 199 0, 71 245 1, 32 292 0, 32 373 1, 32 463 0, 78 516 1, 124 569 0, 202 569 1, 288 569 0, 336 496 1, 385 423 0, 385 296 1, 385 150 0, 327 68 1, 269 -14 0, 166 -14 1, 118 -14 0, 61 7 1, 61 71 1, 130 42 0, 168 42 1, 251 42 0, 284 125 1, 297 158 0, 302 198 1, 304 220 0, 196 513 1, 104 513 0, 104 389 1, 104 252 0, 198 252 1, 245 252 0, 273 284 1, 302 317 0, 302 372 1, 302 433 0, 273 473 1, 243 513 0 -213 70 0 144 407;70 0 1, 70 74 1, 144 74 1, 144 0 1, 70 333 1, 70 407 1, 144 407 1, 144 333 1 -213 70 -120 144 407;70 -120 1, 70 -93 1, 96 -79 0, 96 -9 1, 96 0 1, 70 0 1, 70 74 1, 144 74 1, 144 12 1, 143 -102 0, 70 333 1, 70 407 1, 144 407 1, 144 333 1 -449 39 37 409 407;409 37 1, 39 222 1, 409 407 1, 409 345 1, 164 222 1, 164 222 1, 409 99 1 -449 39 125 409 319;39 125 1, 39 180 1, 409 180 1, 409 125 1, 39 264 1, 39 319 1, 409 319 1, 409 264 1 -449 39 37 409 407;39 407 1, 409 222 1, 39 37 1, 39 99 1, 284 222 1, 284 222 1, 39 345 1 -427 52 0 380 569;141 0 1, 141 74 1, 215 74 1, 215 0 1, 141 148 1, 141 168 1, 141 260 0, 202 308 1, 236 334 1, 302 385 0, 302 440 1, 302 513 0, 199 513 1, 136 513 0, 52 486 1, 52 548 1, 135 569 0, 204 569 1, 281 569 0, 324 544 1, 380 512 0, 380 441 1, 380 371 0, 309 327 1, 278 308 1, 241 285 0, 228 260 1, 215 236 0, 215 189 1, 215 148 1 -780 95 -14 692 569;470 17 1, 400 -14 0, 336 -14 1, 232 -14 0, 164 51 1, 95 116 0, 95 218 1, 95 356 0, 201 462 1, 306 569 0, 445 569 1, 551 569 0, 621 501 1, 692 434 0, 692 333 1, 692 241 0, 635 176 1, 578 111 0, 498 111 1, 435 111 0, 435 154 1, 435 169 0, 443 194 1, 458 241 1, 453 241 1, 422 182 0, 393 153 1, 352 111 0, 307 111 1, 236 111 0, 236 196 1, 236 290 0, 297 366 1, 357 442 0, 434 442 1, 443 442 0, 458 441 1, 462 441 0, 467 440 1, 482 440 0, 492 440 1, 543 440 1, 496 201 1, 494 190 0, 494 178 1, 494 153 0, 522 153 1, 572 153 0, 611 206 1, 650 260 0, 650 328 1, 650 414 0, 590 471 1, 531 528 0, 440 528 1, 321 528 0, 229 434 1, 137 341 0, 137 222 1, 137 135 0, 195 82 1, 252 28 0, 342 28 1, 400 28 0, 456 55 1, 462 312 1, 477 386 1, 442 398 0, 417 398 1, 364 398 0, 329 344 1, 294 291 0, 294 213 1, 294 157 0, 324 157 1, 374 157 0 -512 7 0 503 555;7 0 1, 218 555 1, 296 555 1, 503 0 1, 419 0 1, 361 154 1, 138 154 1, 80 0 1, 161 212 1, 339 212 1, 250 450 1 -512 62 0 462 555;62 0 1, 62 555 1, 240 555 1, 349 555 0, 394 527 1, 440 498 0, 440 431 1, 440 369 0, 395 330 1, 368 307 0, 317 289 1, 382 270 0, 415 242 1, 462 202 0, 462 138 1, 462 80 0, 423 41 1, 396 13 0, 353 6 1, 318 0 0, 259 0 1, 141 59 1, 199 59 1, 309 59 0, 344 75 1, 378 92 0, 378 144 1, 378 201 0, 334 231 1, 289 261 0, 205 261 1, 141 261 1, 141 311 1, 208 311 1, 359 311 0, 359 417 1, 359 471 0, 315 485 1, 282 496 0, 213 496 1, 141 496 1 -555 44 -14 507 569;507 29 1, 421 -14 0, 323 -14 1, 186 -14 0, 115 60 1, 44 135 0, 44 277 1, 44 419 0, 116 494 1, 189 569 0, 327 569 1, 404 569 0, 506 545 1, 506 471 1, 390 510 0, 323 510 1, 228 510 0, 178 450 1, 128 390 0, 128 278 1, 128 167 0, 182 108 1, 235 48 0, 332 48 1, 414 48 0, 507 96 1 -555 62 0 520 555;62 0 1, 62 555 1, 240 555 1, 520 555 0, 520 290 1, 520 152 0, 447 76 1, 374 0 0, 241 0 1, 141 59 1, 235 59 1, 435 59 0, 435 281 1, 435 412 0, 356 466 1, 333 482 0, 301 488 1, 263 496 0, 199 496 1, 141 496 1 -512 72 0 491 555;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1 -469 72 0 449 555;72 0 1, 72 555 1, 449 555 1, 449 496 1, 150 496 1, 150 310 1, 411 310 1, 411 252 1, 150 252 1, 150 0 1 -597 35 -14 527 569;527 258 1, 527 15 1, 424 -14 0, 327 -14 1, 35 -14 0, 35 276 1, 35 417 0, 110 493 1, 186 569 0, 329 569 1, 421 569 0, 526 544 1, 526 471 1, 406 510 0, 326 510 1, 119 510 0, 119 279 1, 119 165 0, 176 105 1, 233 45 0, 338 45 1, 381 45 0, 449 59 1, 449 200 1, 356 200 1, 356 258 1 -555 62 0 492 555;62 0 1, 62 555 1, 141 555 1, 141 321 1, 414 321 1, 414 555 1, 492 555 1, 492 0 1, 414 0 1, 414 262 1, 141 262 1, 141 0 1 -213 68 0 146 555;68 0 1, 68 555 1, 146 555 1, 146 0 1 -384 18 -111 315 555;18 -87 1, 18 -19 1, 83 -48 0, 138 -48 1, 203 -48 0, 221 -18 1, 236 7 0, 236 68 1, 236 555 1, 315 555 1, 315 70 1, 315 -111 0, 135 -111 1, 74 -111 0 -512 72 0 494 555;72 0 1, 72 555 1, 146 555 1, 146 282 1, 376 555 1, 455 555 1, 232 290 1, 494 0 1, 394 0 1, 146 281 1, 146 0 1 -427 62 0 413 555;62 0 1, 62 555 1, 141 555 1, 141 59 1, 413 59 1, 413 0 1 -640 62 0 578 555;62 0 1, 62 555 1, 171 555 1, 324 126 1, 480 555 1, 578 555 1, 578 0 1, 504 0 1, 504 451 1, 353 37 1, 277 37 1, 130 453 1, 130 0 1 -555 62 0 492 555;62 0 1, 62 555 1, 139 555 1, 425 126 1, 425 555 1, 492 555 1, 492 0 1, 415 0 1, 129 429 1, 129 0 1 -597 35 -14 563 569;299 569 1, 419 569 0, 491 490 1, 563 410 0, 563 278 1, 563 144 0, 491 65 1, 419 -14 0, 295 -14 1, 189 -14 0, 121 51 1, 35 132 0, 35 278 1, 35 411 0, 107 490 1, 179 569 0, 299 510 1, 214 510 0, 167 449 1, 119 388 0, 119 278 1, 119 169 0, 167 107 1, 213 45 0, 297 45 1, 375 45 0, 421 95 1, 479 156 0, 479 278 1, 479 388 0, 431 449 1, 383 510 0 -512 63 0 494 555;63 0 1, 63 555 1, 280 555 1, 366 555 0, 403 545 1, 441 535 0, 465 507 1, 494 471 0, 494 408 1, 494 221 0, 257 221 1, 141 221 1, 141 0 1, 141 280 1, 254 280 1, 411 280 0, 411 404 1, 411 464 0, 370 481 1, 335 496 0, 255 496 1, 141 496 1 -597 35 -111 615 569;615 -48 1, 565 -111 1, 434 -68 0, 346 -10 1, 307 -14 0, 287 -14 1, 177 -14 0, 106 68 1, 35 149 0, 35 278 1, 35 410 0, 107 489 1, 178 569 0, 298 569 1, 419 569 0, 491 489 1, 563 410 0, 563 277 1, 563 160 0, 509 87 1, 488 58 0, 460 38 1, 446 27 0, 418 11 1, 510 -30 0, 297 510 1, 214 510 0, 167 448 1, 119 387 0, 119 278 1, 119 169 0, 167 107 1, 214 45 0, 297 45 1, 382 45 0, 430 106 1, 479 167 0, 479 275 1, 479 376 0, 440 436 1, 392 510 0 -555 62 0 538 555;62 0 1, 62 555 1, 294 555 1, 465 555 0, 465 417 1, 465 350 0, 423 306 1, 399 281 0, 353 260 1, 538 0 1, 441 0 1, 283 235 1, 141 235 1, 141 0 1, 141 294 1, 229 294 1, 309 294 0, 346 321 1, 384 350 0, 384 408 1, 384 456 0, 353 476 1, 323 496 0, 253 496 1, 141 496 1 -512 45 -14 466 569;45 20 1, 45 98 1, 156 45 0, 264 45 1, 385 45 0, 385 135 1, 385 181 0, 352 203 1, 326 220 0, 269 239 1, 193 264 1, 48 311 0, 48 421 1, 48 569 0, 251 569 1, 338 569 0, 432 545 1, 432 473 1, 334 510 0, 246 510 1, 124 510 0, 124 427 1, 124 394 0, 147 374 1, 171 354 0, 230 334 1, 308 309 1, 395 281 0, 431 244 1, 466 207 0, 466 146 1, 466 72 0, 411 29 1, 357 -14 0, 261 -14 1, 167 -14 0 -469 8 0 461 555;195 0 1, 195 496 1, 8 496 1, 8 555 1, 461 555 1, 461 496 1, 274 496 1, 274 0 1 -555 62 -14 492 555;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1 -512 14 0 508 555;228 0 1, 14 555 1, 95 555 1, 272 99 1, 441 555 1, 508 555 1, 302 0 1 -725 9 0 716 555;152 0 1, 9 555 1, 85 555 1, 199 117 1, 329 555 1, 405 555 1, 530 121 1, 651 555 1, 716 555 1, 560 0 1, 482 0 1, 358 428 1, 230 0 1 -512 11 0 502 555;11 0 1, 215 276 1, 20 555 1, 113 555 1, 263 339 1, 423 555 1, 498 555 1, 299 289 1, 502 0 1, 409 0 1, 251 224 1, 85 0 1 -512 11 0 501 555;210 0 1, 210 231 1, 11 555 1, 101 555 1, 259 298 1, 428 555 1, 501 555 1, 289 233 1, 289 0 1 -469 38 0 431 555;38 0 1, 38 63 1, 336 496 1, 56 496 1, 56 555 1, 431 555 1, 431 496 1, 132 63 1, 431 63 1, 431 0 1 -213 56 -111 204 592;56 -111 1, 56 592 1, 204 592 1, 204 537 1, 121 537 1, 121 -56 1, 204 -56 1, 204 -111 1 -213 -22 -111 236 555;236 -111 1, 178 -111 1, -22 555 1, 36 555 1 -213 10 -111 158 592;158 592 1, 158 -111 1, 10 -111 1, 10 -56 1, 93 -56 1, 93 537 1, 10 537 1, 10 592 1 -360 14 222 347 555;180 431 1, 75 222 1, 14 222 1, 180 555 1, 347 222 1, 284 222 1 -427 0 -56 427 0;0 -56 1, 0 0 1, 427 0 1, 427 -56 1 -256 40 481 216 602;216 481 1, 160 481 1, 40 602 1, 125 602 1 -427 36 -9 412 416;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0 -427 58 -9 395 592;132 264 1, 132 56 1, 183 46 0, 209 46 1, 315 46 0, 315 207 1, 315 275 0, 294 313 1, 273 352 0, 238 352 1, 191 352 0, 132 331 1, 153 369 0, 176 389 1, 209 416 0, 254 416 1, 317 416 0, 356 361 1, 395 306 0, 395 215 1, 395 108 0, 344 49 1, 294 -9 0, 203 -9 1, 168 -9 0, 132 0 1, 58 -5 1, 58 592 1, 132 592 1 -384 32 -9 347 416;347 12 1, 279 -9 0, 219 -9 1, 135 -9 0, 84 50 1, 32 109 0, 32 204 1, 32 303 0, 85 360 1, 137 416 0, 231 416 1, 278 416 0, 343 403 1, 343 341 1, 281 360 0, 245 360 1, 116 360 0, 116 204 1, 116 130 0, 149 90 1, 182 50 0, 242 50 1, 287 50 0, 347 76 1 -427 32 -9 369 592;295 143 1, 295 351 1, 243 361 0, 218 361 1, 112 361 0, 112 200 1, 112 133 0, 133 94 1, 154 56 0, 189 56 1, 236 56 0, 295 76 1, 274 38 0, 251 18 1, 218 -9 0, 173 -9 1, 110 -9 0, 71 46 1, 32 101 0, 32 193 1, 32 299 0, 83 358 1, 133 416 0, 224 416 1, 259 416 0, 295 407 1, 295 592 1, 369 592 1, 369 0 1, 295 0 1 -427 32 -9 383 416;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0 -213 12 0 236 602;66 0 1, 66 352 1, 12 352 1, 12 407 1, 66 407 1, 66 456 1, 66 602 0, 181 602 1, 206 602 0, 236 592 1, 236 533 1, 209 546 0, 189 546 1, 162 546 0, 151 528 1, 140 510 0, 140 464 1, 140 407 1, 213 407 1, 213 352 1, 140 352 1, 140 0 1 -427 35 -158 372 416;298 162 1, 298 351 1, 245 361 0, 222 361 1, 115 361 0, 115 215 1, 115 150 0, 136 112 1, 157 74 0, 192 74 1, 239 74 0, 298 95 1, 277 57 0, 254 37 1, 221 9 0, 176 9 1, 113 9 0, 74 64 1, 35 119 0, 35 207 1, 35 306 0, 85 361 1, 135 416 0, 226 416 1, 261 416 0, 298 407 1, 372 407 1, 372 111 1, 372 15 0, 362 -31 1, 334 -158 0, 174 -158 1, 106 -158 0, 38 -135 1, 38 -71 1, 118 -102 0, 173 -102 1, 298 -102 0, 298 31 1 -427 58 0 374 592;58 0 1, 58 592 1, 132 592 1, 132 331 1, 159 369 0, 186 388 1, 224 416 0, 270 416 1, 374 416 0, 374 293 1, 374 0 1, 300 0 1, 300 269 1, 300 318 0, 290 335 1, 279 353 0, 251 353 1, 190 353 0, 132 264 1, 132 0 1 -171 48 0 122 555;48 0 1, 48 407 1, 122 407 1, 122 0 1, 48 481 1, 48 555 1, 122 555 1, 122 481 1 -171 -58 -157 124 555;-58 -145 1, -58 -87 1, -28 -102 0, -2 -102 1, 35 -102 0, 43 -74 1, 50 -51 0, 50 0 1, 50 407 1, 124 407 1, 124 0 1, 124 -157 0, 4 -157 1, -29 -157 0, 50 481 1, 50 555 1, 124 555 1, 124 481 1 -384 58 0 377 592;58 0 1, 58 592 1, 132 592 1, 132 210 1, 268 407 1, 339 407 1, 209 215 1, 377 0 1, 287 0 1, 132 209 1, 132 0 1 -171 48 0 122 592;48 0 1, 48 592 1, 122 592 1, 122 0 1 -640 58 0 587 416;58 0 1, 58 407 1, 132 407 1, 132 331 1, 164 380 0, 185 397 1, 210 416 0, 249 416 1, 298 416 0, 329 385 1, 346 366 0, 359 331 1, 392 380 0, 413 397 1, 437 416 0, 477 416 1, 587 416 0, 587 296 1, 587 0 1, 513 0 1, 512 285 1, 512 355 0, 458 355 1, 410 355 0, 359 273 1, 359 0 1, 285 0 1, 285 285 1, 285 355 0, 231 355 1, 183 355 0, 132 273 1, 132 0 1 -427 58 0 374 416;58 0 1, 58 407 1, 132 407 1, 132 331 1, 159 369 0, 186 388 1, 224 416 0, 270 416 1, 374 416 0, 374 293 1, 374 0 1, 300 0 1, 300 269 1, 300 318 0, 290 335 1, 279 353 0, 251 353 1, 190 353 0, 132 264 1, 132 0 1 -427 32 -9 395 416;213 416 1, 297 416 0, 346 359 1, 395 303 0, 395 204 1, 395 104 0, 346 47 1, 297 -9 0, 211 -9 1, 137 -9 0, 91 38 1, 32 96 0, 32 204 1, 32 302 0, 81 359 1, 130 416 0, 213 361 1, 112 361 0, 112 204 1, 112 46 0, 213 46 1, 315 46 0, 315 205 1, 315 361 0 -427 58 -148 395 416;132 -148 1, 58 -148 1, 58 407 1, 132 407 1, 132 331 1, 153 369 0, 176 389 1, 209 416 0, 254 416 1, 317 416 0, 356 361 1, 395 306 0, 395 215 1, 395 108 0, 344 49 1, 294 -9 0, 203 -9 1, 168 -9 0, 132 0 1, 132 264 1, 132 56 1, 183 46 0, 209 46 1, 315 46 0, 315 207 1, 315 275 0, 294 313 1, 273 352 0, 238 352 1, 191 352 0 -427 32 -148 369 416;295 407 1, 369 407 1, 369 -148 1, 295 -148 1, 295 76 1, 274 38 0, 251 18 1, 218 -9 0, 173 -9 1, 110 -9 0, 71 46 1, 32 101 0, 32 193 1, 32 299 0, 83 358 1, 133 416 0, 224 416 1, 259 416 0, 295 143 1, 295 351 1, 243 361 0, 218 361 1, 112 361 0, 112 200 1, 112 133 0, 133 94 1, 154 56 0, 189 56 1, 236 56 0 -256 58 0 251 416;58 0 1, 58 407 1, 132 407 1, 132 331 1, 148 369 0, 166 389 1, 193 416 0, 230 416 1, 237 416 0, 251 414 1, 251 345 1, 231 352 0, 219 352 1, 178 352 0, 132 269 1, 132 0 1 -384 44 -9 341 416;44 14 1, 44 82 1, 118 46 0, 181 46 1, 266 46 0, 266 106 1, 266 147 0, 207 167 1, 141 189 1, 46 220 0, 46 303 1, 46 416 0, 201 416 1, 246 416 0, 309 404 1, 309 342 1, 253 361 0, 196 361 1, 119 361 0, 119 310 1, 119 273 0, 172 256 1, 231 237 1, 341 201 0, 341 113 1, 341 57 0, 297 24 1, 254 -9 0, 178 -9 1, 119 -9 0 -213 11 -9 210 488;199 -2 1, 176 -9 0, 156 -9 1, 57 -9 0, 57 113 1, 57 352 1, 11 352 1, 11 407 1, 57 407 1, 57 481 1, 131 488 1, 131 407 1, 210 407 1, 210 352 1, 131 352 1, 131 126 1, 131 78 0, 139 62 1, 147 46 0, 174 46 1, 188 46 0, 199 50 1 -427 53 -9 369 407;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1 -384 7 0 380 407;152 0 1, 7 407 1, 82 407 1, 195 90 1, 314 407 1, 380 407 1, 225 0 1 -555 4 0 549 407;102 0 1, 4 407 1, 77 407 1, 150 101 1, 244 407 1, 318 407 1, 400 99 1, 486 407 1, 549 407 1, 435 0 1, 361 0 1, 275 315 1, 177 0 1 -384 11 0 372 407;11 0 1, 143 215 1, 15 407 1, 101 407 1, 203 255 1, 294 407 1, 362 407 1, 238 202 1, 372 0 1, 287 0 1, 177 164 1, 79 0 1 -384 7 -148 380 407;152 0 1, 7 407 1, 82 407 1, 193 95 1, 314 407 1, 380 407 1, 164 -148 1, 87 -148 1 -384 28 0 356 407;28 0 1, 28 56 1, 261 352 1, 39 352 1, 39 407 1, 352 407 1, 352 352 1, 119 56 1, 356 56 1, 356 0 1 -257 9 -111 213 592;9 269 1, 32 269 1, 90 269 0, 90 330 1, 90 354 0, 84 381 1, 77 414 1, 69 447 0, 69 476 1, 69 537 0, 120 569 1, 156 591 0, 213 592 1, 213 537 1, 193 537 1, 167 537 0, 151 524 1, 134 510 0, 134 490 1, 134 482 0, 139 455 1, 145 416 1, 149 391 0, 149 361 1, 149 290 0, 94 241 1, 149 192 0, 149 120 1, 149 90 0, 145 65 1, 139 27 1, 134 -1 0, 134 -9 1, 134 -29 0, 151 -42 1, 168 -56 0, 193 -56 1, 213 -56 1, 213 -111 1, 153 -110 0, 117 -85 1, 69 -53 0, 69 6 1, 69 35 0, 77 67 1, 84 100 1, 90 127 0, 90 152 1, 90 213 0, 32 213 1, 9 213 1 -200 72 -111 128 592;72 -111 1, 72 592 1, 128 592 1, 128 -111 1 -257 44 -111 247 592;247 213 1, 224 213 1, 167 213 0, 167 152 1, 167 124 0, 173 100 1, 180 67 1, 187 36 0, 187 6 1, 187 -56 0, 135 -88 1, 100 -110 0, 44 -111 1, 44 -56 1, 63 -56 1, 89 -56 0, 105 -42 1, 122 -29 0, 122 -9 1, 122 1 0, 118 27 1, 111 65 1, 107 88 0, 107 120 1, 107 192 0, 162 241 1, 137 263 0, 125 285 1, 107 318 0, 107 361 1, 107 393 0, 111 416 1, 118 455 1, 122 480 0, 122 491 1, 122 510 0, 105 524 1, 88 537 0, 63 537 1, 44 537 1, 44 592 1, 104 591 0, 140 566 1, 187 534 0, 187 475 1, 187 445 0, 180 414 1, 173 381 1, 167 357 0, 167 329 1, 167 269 0, 224 269 1, 247 269 1 -449 39 155 409 290;95 167 1, 39 167 1, 40 206 0, 47 227 1, 69 290 0, 139 290 1, 176 290 0, 213 264 1, 255 235 1, 280 218 1, 291 210 0, 309 210 1, 352 210 0, 354 278 1, 409 278 1, 408 238 0, 401 217 1, 379 155 0, 310 155 1, 273 155 0, 235 180 1, 193 209 1, 168 227 1, 157 234 0, 140 234 1, 96 234 0 -512 7 0 503 666;7 0 1, 218 555 1, 296 555 1, 503 0 1, 419 0 1, 361 154 1, 138 154 1, 80 0 1, 161 212 1, 339 212 1, 250 450 1, 150 602 1, 150 666 1, 215 666 1, 215 602 1, 299 602 1, 299 666 1, 363 666 1, 363 602 1 -512 7 0 503 726;7 0 1, 218 555 1, 296 555 1, 503 0 1, 419 0 1, 361 154 1, 138 154 1, 80 0 1, 161 212 1, 339 212 1, 250 450 1, 257 726 1, 292 726 0, 317 701 1, 342 676 0, 342 641 1, 342 605 0, 317 580 1, 292 555 0, 256 555 1, 225 555 0, 202 576 1, 172 602 0, 172 641 1, 172 676 0, 197 701 1, 222 726 0, 257 693 1, 235 693 0, 219 678 1, 204 663 0, 204 641 1, 204 619 0, 219 603 1, 235 588 0, 256 588 1, 276 588 0, 291 600 1, 310 616 0, 310 641 1, 310 663 0, 294 678 1, 279 693 0 -555 44 -162 507 569;507 29 1, 421 -14 0, 323 -14 1, 186 -14 0, 115 60 1, 44 135 0, 44 277 1, 44 419 0, 116 494 1, 189 569 0, 327 569 1, 404 569 0, 506 545 1, 506 471 1, 390 510 0, 323 510 1, 228 510 0, 178 450 1, 128 390 0, 128 278 1, 128 167 0, 182 108 1, 235 48 0, 332 48 1, 414 48 0, 507 96 1, 288 0 1, 324 0 1, 302 -41 1, 329 -42 0, 348 -56 1, 374 -74 0, 374 -101 1, 374 -126 0, 352 -144 1, 330 -162 0, 298 -162 1, 273 -162 0, 244 -154 1, 244 -124 1, 263 -129 0, 283 -129 1, 322 -129 0, 322 -102 1, 322 -67 0, 252 -66 1 -512 72 0 491 722;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1, 224 602 1, 315 722 1, 400 722 1, 280 602 1 -555 62 0 492 689;62 0 1, 62 555 1, 139 555 1, 425 126 1, 425 555 1, 492 555 1, 492 0 1, 415 0 1, 129 429 1, 129 0 1, 162 602 1, 165 637 0, 174 656 1, 191 689 0, 232 689 1, 259 689 0, 282 675 1, 305 661 1, 326 648 0, 337 648 1, 362 648 0, 366 689 1, 412 689 1, 409 654 0, 400 635 1, 383 602 0, 342 602 1, 315 602 0, 292 616 1, 269 630 1, 249 643 0, 237 643 1, 212 643 0, 208 602 1 -597 35 -14 563 666;299 569 1, 418 569 0, 491 490 1, 563 410 0, 563 278 1, 563 144 0, 491 65 1, 418 -14 0, 295 -14 1, 189 -14 0, 120 51 1, 35 132 0, 35 278 1, 35 411 0, 107 490 1, 179 569 0, 299 510 1, 213 510 0, 166 449 1, 119 388 0, 119 278 1, 119 169 0, 166 107 1, 213 45 0, 297 45 1, 374 45 0, 420 95 1, 478 156 0, 478 278 1, 478 388 0, 431 449 1, 383 510 0, 192 602 1, 192 666 1, 257 666 1, 257 602 1, 340 602 1, 340 666 1, 405 666 1, 405 602 1 -555 62 -14 492 666;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 176 602 1, 176 666 1, 240 666 1, 240 602 1, 324 602 1, 324 666 1, 389 666 1, 389 602 1 -427 36 -9 412 602;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0, 168 481 1, 259 602 1, 344 602 1, 224 481 1 -427 36 -9 412 602;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0, 280 481 1, 224 481 1, 104 602 1, 189 602 1 -427 36 -9 412 602;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0, 61 481 1, 151 602 1, 233 602 1, 323 481 1, 268 481 1, 192 557 1, 192 557 1, 116 481 1 -427 36 -9 412 546;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0, 85 481 1, 85 546 1, 150 546 1, 150 481 1, 234 481 1, 234 546 1, 298 546 1, 298 481 1 -427 36 -9 412 569;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0, 67 481 1, 70 516 0, 79 535 1, 96 569 0, 137 569 1, 164 569 0, 187 555 1, 210 541 1, 231 528 0, 242 528 1, 267 528 0, 271 569 1, 317 569 1, 314 534 0, 305 515 1, 288 481 0, 247 481 1, 220 481 0, 197 496 1, 174 510 1, 154 522 0, 142 522 1, 117 522 0, 113 481 1 -427 36 -9 412 651;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0, 192 651 1, 227 651 0, 252 627 1, 277 602 0, 277 567 1, 277 531 0, 252 506 1, 227 481 0, 191 481 1, 160 481 0, 137 501 1, 107 527 0, 107 566 1, 107 602 0, 132 626 1, 156 651 0, 192 619 1, 170 619 0, 154 603 1, 139 588 0, 139 566 1, 139 545 0, 154 529 1, 170 513 0, 191 513 1, 211 513 0, 226 526 1, 245 542 0, 245 567 1, 245 588 0, 229 603 1, 214 619 0 -384 32 -162 347 416;347 12 1, 279 -9 0, 219 -9 1, 135 -9 0, 84 50 1, 32 109 0, 32 204 1, 32 303 0, 85 360 1, 137 416 0, 231 416 1, 278 416 0, 343 403 1, 343 341 1, 281 360 0, 245 360 1, 116 360 0, 116 204 1, 116 130 0, 149 90 1, 182 50 0, 242 50 1, 287 50 0, 347 76 1, 235 0 1, 271 0 1, 248 -41 1, 275 -42 0, 295 -56 1, 321 -74 0, 321 -101 1, 321 -126 0, 299 -144 1, 277 -162 0, 245 -162 1, 220 -162 0, 191 -154 1, 191 -124 1, 210 -129 0, 230 -129 1, 269 -129 0, 269 -102 1, 269 -67 0, 199 -66 1 -427 32 -9 383 602;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0, 168 481 1, 259 602 1, 344 602 1, 224 481 1 -427 32 -9 383 602;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0, 280 481 1, 224 481 1, 104 602 1, 189 602 1 -427 32 -9 383 602;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0, 61 481 1, 151 602 1, 233 602 1, 323 481 1, 268 481 1, 192 557 1, 192 557 1, 116 481 1 -427 32 -9 383 546;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0, 85 481 1, 85 546 1, 150 546 1, 150 481 1, 234 481 1, 234 546 1, 298 546 1, 298 481 1 -171 40 0 216 602;48 0 1, 48 407 1, 122 407 1, 122 0 1, 40 481 1, 131 602 1, 216 602 1, 96 481 1 -171 -24 0 152 602;48 0 1, 48 407 1, 122 407 1, 122 0 1, 152 481 1, 96 481 1, -24 602 1, 61 602 1 -171 -67 0 195 602;48 0 1, 48 407 1, 122 407 1, 122 0 1, -67 481 1, 23 602 1, 105 602 1, 195 481 1, 140 481 1, 64 557 1, 64 557 1, -12 481 1 -171 -21 0 192 546;48 0 1, 48 407 1, 122 407 1, 122 0 1, -21 481 1, -21 546 1, 44 546 1, 44 481 1, 127 481 1, 127 546 1, 192 546 1, 192 481 1 -427 58 0 374 569;58 0 1, 58 407 1, 132 407 1, 132 331 1, 159 369 0, 186 388 1, 224 416 0, 270 416 1, 374 416 0, 374 293 1, 374 0 1, 300 0 1, 300 269 1, 300 318 0, 290 335 1, 279 353 0, 251 353 1, 190 353 0, 132 264 1, 132 0 1, 67 481 1, 70 516 0, 79 535 1, 96 569 0, 137 569 1, 164 569 0, 187 555 1, 210 541 1, 231 528 0, 242 528 1, 267 528 0, 271 569 1, 317 569 1, 314 534 0, 305 515 1, 288 481 0, 247 481 1, 220 481 0, 197 496 1, 174 510 1, 154 522 0, 142 522 1, 117 522 0, 113 481 1 -427 32 -9 395 602;213 416 1, 297 416 0, 346 359 1, 395 303 0, 395 204 1, 395 104 0, 346 47 1, 297 -9 0, 211 -9 1, 137 -9 0, 91 38 1, 32 96 0, 32 204 1, 32 302 0, 81 359 1, 130 416 0, 213 361 1, 112 361 0, 112 204 1, 112 46 0, 213 46 1, 315 46 0, 315 205 1, 315 361 0, 168 481 1, 259 602 1, 344 602 1, 224 481 1 -427 32 -9 395 602;213 416 1, 297 416 0, 346 359 1, 395 303 0, 395 204 1, 395 104 0, 346 47 1, 297 -9 0, 211 -9 1, 137 -9 0, 91 38 1, 32 96 0, 32 204 1, 32 302 0, 81 359 1, 130 416 0, 213 361 1, 112 361 0, 112 204 1, 112 46 0, 213 46 1, 315 46 0, 315 205 1, 315 361 0, 280 481 1, 224 481 1, 104 602 1, 189 602 1 -427 32 -9 395 602;213 416 1, 297 416 0, 346 359 1, 395 303 0, 395 204 1, 395 104 0, 346 47 1, 297 -9 0, 211 -9 1, 137 -9 0, 91 38 1, 32 96 0, 32 204 1, 32 302 0, 81 359 1, 130 416 0, 213 361 1, 112 361 0, 112 204 1, 112 46 0, 213 46 1, 315 46 0, 315 205 1, 315 361 0, 61 481 1, 151 602 1, 233 602 1, 323 481 1, 268 481 1, 192 557 1, 192 557 1, 116 481 1 -427 32 -9 395 546;213 416 1, 297 416 0, 346 359 1, 395 303 0, 395 204 1, 395 104 0, 346 47 1, 297 -9 0, 211 -9 1, 137 -9 0, 91 38 1, 32 96 0, 32 204 1, 32 302 0, 81 359 1, 130 416 0, 213 361 1, 112 361 0, 112 204 1, 112 46 0, 213 46 1, 315 46 0, 315 205 1, 315 361 0, 85 481 1, 85 546 1, 150 546 1, 150 481 1, 234 481 1, 234 546 1, 298 546 1, 298 481 1 -427 32 -9 395 569;213 416 1, 297 416 0, 346 359 1, 395 303 0, 395 204 1, 395 104 0, 346 47 1, 297 -9 0, 211 -9 1, 137 -9 0, 91 38 1, 32 96 0, 32 204 1, 32 302 0, 81 359 1, 130 416 0, 213 361 1, 112 361 0, 112 204 1, 112 46 0, 213 46 1, 315 46 0, 315 205 1, 315 361 0, 67 481 1, 70 516 0, 79 535 1, 96 569 0, 137 569 1, 164 569 0, 187 555 1, 210 541 1, 231 528 0, 242 528 1, 267 528 0, 271 569 1, 317 569 1, 314 534 0, 305 515 1, 288 481 0, 247 481 1, 220 481 0, 197 496 1, 174 510 1, 154 522 0, 142 522 1, 117 522 0, 113 481 1 -427 53 -9 369 602;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 168 481 1, 259 602 1, 344 602 1, 224 481 1 -427 53 -9 369 602;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 280 481 1, 224 481 1, 104 602 1, 189 602 1 -427 53 -9 369 602;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 61 481 1, 151 602 1, 233 602 1, 323 481 1, 268 481 1, 192 557 1, 192 557 1, 116 481 1 -427 53 -9 369 546;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 85 481 1, 85 546 1, 150 546 1, 150 481 1, 234 481 1, 234 546 1, 298 546 1, 298 481 1 -427 56 -111 371 555;177 -111 1, 186 315 1, 56 305 1, 56 361 1, 186 352 1, 177 555 1, 251 555 1, 241 352 1, 371 361 1, 371 305 1, 241 315 1, 251 -111 1 -307 43 347 265 569;154 569 1, 199 569 0, 232 536 1, 265 504 0, 265 458 1, 265 412 0, 232 380 1, 199 347 0, 152 347 1, 113 347 0, 82 373 1, 43 408 0, 43 458 1, 43 504 0, 75 536 1, 108 569 0, 154 523 1, 127 523 0, 108 504 1, 89 485 0, 89 458 1, 89 432 0, 108 413 1, 127 393 0, 153 393 1, 177 393 0, 195 409 1, 219 428 0, 219 458 1, 219 485 0, 200 504 1, 180 523 0 -427 65 0 380 555;237 0 1, 237 65 1, 166 74 0, 123 120 1, 65 181 0, 65 278 1, 65 379 0, 124 435 1, 165 475 0, 237 486 1, 237 555 1, 274 555 1, 274 486 1, 324 483 0, 380 468 1, 380 406 1, 314 429 0, 274 432 1, 274 117 1, 325 117 0, 380 143 1, 380 87 1, 324 65 0, 274 65 1, 274 0 1, 237 429 1, 215 426 0, 203 420 1, 146 390 0, 146 277 1, 146 199 0, 180 158 1, 200 135 0, 237 122 1 -427 45 0 362 569;45 0 1, 45 65 1, 124 90 0, 124 183 1, 124 269 1, 57 269 1, 57 324 1, 124 324 1, 124 405 1, 124 485 0, 162 527 1, 200 569 0, 272 569 1, 310 569 0, 357 558 1, 357 495 1, 308 513 0, 269 513 1, 198 513 0, 198 427 1, 198 324 1, 279 324 1, 279 269 1, 198 269 1, 198 221 1, 198 153 0, 180 120 1, 166 92 0, 133 65 1, 362 65 1, 362 0 1 -427 48 -125 379 569;48 -98 1, 48 -30 1, 142 -69 0, 203 -69 1, 250 -69 0, 281 -51 1, 311 -32 0, 311 -1 1, 311 27 0, 288 43 1, 270 56 0, 225 75 1, 159 104 1, 50 150 0, 50 230 1, 50 284 0, 105 342 1, 52 379 0, 52 434 1, 52 494 0, 101 531 1, 149 569 0, 229 569 1, 284 569 0, 358 551 1, 358 491 1, 280 513 0, 228 513 1, 179 513 0, 149 494 1, 119 475 0, 119 445 1, 119 404 0, 185 377 1, 236 357 1, 314 325 0, 343 296 1, 373 266 0, 373 221 1, 373 168 0, 317 104 1, 379 66 0, 379 3 1, 379 -56 0, 329 -90 1, 279 -125 0, 196 -125 1, 138 -125 0, 281 128 1, 308 166 0, 308 200 1, 308 228 0, 290 245 1, 272 263 0, 226 282 1, 143 317 1, 115 282 0, 115 249 1, 115 198 0, 201 162 1 -269 30 208 239 416;135 416 1, 178 416 0, 208 386 1, 239 355 0, 239 312 1, 239 269 0, 208 239 1, 177 208 0, 133 208 1, 96 208 0, 67 233 1, 30 265 0, 30 312 1, 30 356 0, 61 386 1, 92 416 0 -413 33 -111 338 555;190 -111 1, 190 278 1, 122 284 0, 83 316 1, 33 358 0, 33 433 1, 33 499 0, 69 527 1, 105 555 0, 190 555 1, 338 555 1, 338 -111 1, 292 -111 1, 292 509 1, 237 509 1, 237 -111 1 -469 48 -9 437 602;48 0 1, 48 432 1, 48 527 0, 83 564 1, 117 602 0, 206 602 1, 349 602 0, 349 500 1, 349 451 0, 300 399 1, 261 357 0, 261 337 1, 261 312 0, 303 281 1, 372 230 1, 437 182 0, 437 111 1, 437 -9 0, 296 -9 1, 234 -9 0, 183 11 1, 183 76 1, 253 46 0, 296 46 1, 368 46 0, 368 104 1, 368 141 0, 324 174 1, 244 236 1, 195 273 0, 195 315 1, 195 351 0, 238 407 1, 275 455 0, 275 487 1, 275 546 0, 201 546 1, 157 546 0, 140 528 1, 122 509 0, 122 463 1, 122 0 1 -566 6 0 561 555;283 555 1, 398 555 0, 479 474 1, 561 393 0, 561 278 1, 561 162 0, 479 81 1, 398 0 0, 280 0 1, 179 0 0, 104 66 1, 6 152 0, 6 278 1, 6 393 0, 87 474 1, 169 555 0, 283 516 1, 185 516 0, 115 446 1, 45 376 0, 45 278 1, 45 181 0, 115 110 1, 184 40 0, 281 40 1, 370 40 0, 437 96 1, 521 168 0, 521 278 1, 521 376 0, 451 446 1, 381 516 0, 192 126 1, 192 426 1, 286 426 1, 377 426 0, 377 353 1, 377 301 0, 324 266 1, 415 126 1, 359 126 1, 278 252 1, 240 252 1, 240 126 1, 237 289 1, 251 289 1, 330 289 0, 330 347 1, 330 396 0, 264 396 1, 237 396 1 -566 6 0 561 555;283 555 1, 398 555 0, 479 474 1, 561 393 0, 561 278 1, 561 162 0, 479 81 1, 398 0 0, 280 0 1, 179 0 0, 104 66 1, 6 152 0, 6 278 1, 6 393 0, 87 474 1, 169 555 0, 283 516 1, 185 516 0, 115 446 1, 45 376 0, 45 278 1, 45 181 0, 115 110 1, 184 40 0, 281 40 1, 370 40 0, 437 96 1, 521 168 0, 521 278 1, 521 376 0, 451 446 1, 381 516 0, 384 137 1, 333 119 0, 293 119 1, 226 119 0, 183 163 1, 140 207 0, 140 276 1, 140 348 0, 182 391 1, 224 434 0, 295 434 1, 332 434 0, 375 425 1, 384 423 1, 384 379 1, 336 399 0, 298 399 1, 251 399 0, 222 365 1, 193 332 0, 193 277 1, 193 222 0, 223 191 1, 253 159 0, 303 159 1, 343 159 0, 384 181 1 -768 83 278 662 555;176 278 1, 176 509 1, 83 509 1, 83 555 1, 333 555 1, 333 509 1, 240 509 1, 240 278 1, 380 278 1, 380 555 1, 467 555 1, 525 395 1, 582 555 1, 662 555 1, 662 278 1, 597 278 1, 597 479 1, 536 301 1, 491 301 1, 430 463 1, 430 278 1 -256 40 481 216 602;40 481 1, 131 602 1, 216 602 1, 96 481 1 -256 21 481 234 546;21 481 1, 21 546 1, 86 546 1, 86 481 1, 170 481 1, 170 546 1, 234 546 1, 234 481 1 -213 0 0 0 0; -768 7 0 746 555;224 213 1, 381 213 1, 381 460 1, 7 0 1, 360 555 1, 730 555 1, 730 496 1, 459 496 1, 459 318 1, 693 318 1, 693 260 1, 459 260 1, 459 59 1, 746 59 1, 746 0 1, 381 0 1, 381 155 1, 187 155 1, 89 0 1 -597 35 -14 563 569;39 -14 1, 104 69 1, 74 107 0, 58 146 1, 35 204 0, 35 278 1, 35 410 0, 107 490 1, 179 569 0, 298 569 1, 389 569 0, 459 519 1, 498 569 1, 563 569 1, 496 484 1, 525 446 0, 541 407 1, 563 350 0, 563 277 1, 563 144 0, 491 65 1, 419 -14 0, 299 -14 1, 211 -14 0, 142 34 1, 104 -14 1, 184 88 1, 233 45 0, 299 45 1, 384 45 0, 431 106 1, 479 167 0, 479 276 1, 479 363 0, 448 423 1, 416 465 1, 366 510 0, 299 510 1, 214 510 0, 167 449 1, 119 388 0, 119 279 1, 119 190 0, 152 129 1 -213 0 0 0 0; -449 39 0 409 444;196 111 1, 196 250 1, 39 250 1, 39 305 1, 196 305 1, 196 444 1, 252 444 1, 252 305 1, 409 305 1, 409 250 1, 252 250 1, 252 111 1, 39 0 1, 39 56 1, 409 56 1, 409 0 1 -213 0 0 0 0; -213 0 0 0 0; -427 9 0 404 555;170 0 1, 170 129 1, 59 129 1, 59 176 1, 170 176 1, 170 231 1, 59 231 1, 59 278 1, 170 278 1, 9 555 1, 95 555 1, 216 346 1, 216 346 1, 338 555 1, 404 555 1, 244 278 1, 355 278 1, 355 231 1, 244 231 1, 244 176 1, 355 176 1, 355 129 1, 244 129 1, 244 0 1 -427 53 -148 369 407;53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 295 0 1, 295 76 1, 236 -7 0, 176 -7 1, 152 -7 0, 127 9 1, 127 -148 1, 53 -148 1 -213 0 0 0 0; -213 0 0 0 0; -213 0 0 0 0; -213 0 0 0 0; -213 0 0 0 0; -284 32 308 267 569;182 343 1, 144 308 0, 105 308 1, 74 308 0, 53 328 1, 32 348 0, 32 378 1, 32 464 0, 161 464 1, 179 464 1, 179 490 1, 179 531 0, 133 531 1, 97 531 0, 54 509 1, 54 551 1, 102 569 0, 144 569 1, 234 569 0, 234 492 1, 234 380 1, 234 345 0, 255 346 1, 257 346 1, 258 346 0, 261 346 1, 263 346 0, 265 347 1, 267 315 1, 248 308 0, 231 308 1, 194 308 0, 184 343 1, 179 374 1, 179 431 1, 164 431 1, 88 431 0, 88 385 1, 88 350 0, 124 350 1, 150 350 0 -281 28 308 252 569;140 569 1, 192 569 0, 222 534 1, 252 499 0, 252 439 1, 252 378 0, 222 343 1, 192 308 0, 139 308 1, 93 308 0, 64 337 1, 28 373 0, 28 439 1, 28 499 0, 58 534 1, 89 569 0, 140 531 1, 87 531 0, 87 439 1, 87 347 0, 140 347 1, 194 347 0, 194 440 1, 194 531 0 -213 0 0 0 0; -683 36 -9 638 416;288 92 1, 288 197 1, 260 198 1, 235 199 0, 207 195 1, 110 181 0, 110 114 1, 110 51 0, 184 51 1, 236 51 0, 344 369 1, 400 416 0, 472 416 1, 638 416 0, 638 215 1, 638 192 1, 360 192 1, 365 148 0, 375 125 1, 408 47 0, 512 47 1, 568 47 0, 636 72 1, 636 13 1, 559 -9 0, 494 -9 1, 423 -9 0, 374 23 1, 347 41 0, 322 77 1, 279 31 0, 248 12 1, 211 -9 0, 160 -9 1, 104 -9 0, 70 21 1, 36 53 0, 36 102 1, 36 241 0, 270 241 1, 288 241 1, 288 290 1, 288 329 0, 269 345 1, 251 361 0, 205 361 1, 141 361 0, 71 325 1, 71 386 1, 148 416 0, 218 416 1, 303 416 0, 364 248 1, 564 248 1, 563 284 0, 556 302 1, 536 361 0, 469 361 1, 422 361 0, 396 333 1, 371 308 0 -469 54 -9 416 416;131 22 1, 108 -9 1, 54 -9 1, 99 53 1, 54 116 0, 54 204 1, 54 303 0, 102 360 1, 151 416 0, 236 416 1, 296 416 0, 339 385 1, 362 416 1, 416 416 1, 371 354 1, 416 291 0, 416 203 1, 416 105 0, 367 48 1, 319 -9 0, 234 -9 1, 174 -9 0, 169 75 1, 170 75 1, 185 59 0, 198 53 1, 215 46 0, 234 46 1, 336 46 0, 336 204 1, 336 251 0, 325 291 1, 301 332 1, 300 333 1, 272 361 0, 235 361 1, 134 361 0, 134 205 1, 134 152 0, 145 116 1 -469 69 -162 398 407;309 407 1, 309 333 1, 235 333 1, 235 407 1, 309 259 1, 309 239 1, 309 147 0, 248 99 1, 214 73 1, 148 22 0, 148 -33 1, 148 -107 0, 251 -107 1, 314 -107 0, 398 -78 1, 398 -141 1, 316 -162 0, 246 -162 1, 169 -162 0, 125 -137 1, 69 -105 0, 69 -34 1, 69 36 0, 141 81 1, 171 99 1, 209 122 0, 222 147 1, 235 171 0, 235 218 1, 235 259 1 -256 91 -148 165 407;165 407 1, 165 333 1, 91 333 1, 91 407 1, 156 259 1, 165 -37 1, 165 -148 1, 91 -148 1, 91 -37 1, 100 259 1 -449 32 111 402 333;32 278 1, 32 333 1, 402 333 1, 402 111 1, 347 111 1, 347 278 1 -213 0 0 0 0; -427 18 -111 384 569;18 -111 1, 94 269 1, 32 269 1, 32 324 1, 105 324 1, 113 363 1, 154 569 0, 300 569 1, 339 569 0, 384 558 1, 373 500 1, 332 514 0, 299 514 1, 218 514 0, 195 398 1, 180 324 1, 251 324 1, 251 269 1, 169 269 1, 94 -111 1 -213 0 0 0 0; -213 0 0 0 0; -427 43 37 376 370;376 342 1, 265 204 1, 376 65 1, 339 37 1, 191 204 1, 339 370 1, 228 342 1, 117 204 1, 228 65 1, 191 37 1, 43 204 1, 191 370 1 -427 51 37 384 370;51 65 1, 162 204 1, 51 342 1, 88 370 1, 236 204 1, 88 37 1, 199 65 1, 310 204 1, 199 342 1, 236 370 1, 384 204 1, 236 37 1 -768 93 0 676 74;93 0 1, 93 74 1, 167 74 1, 167 0 1, 347 0 1, 347 74 1, 421 74 1, 421 0 1, 602 0 1, 602 74 1, 676 74 1, 676 0 1 -427 0 0 0 0; -512 7 0 503 722;7 0 1, 218 555 1, 296 555 1, 503 0 1, 419 0 1, 361 154 1, 138 154 1, 80 0 1, 161 212 1, 339 212 1, 250 450 1, 312 602 1, 257 602 1, 137 722 1, 222 722 1 -512 7 0 503 689;7 0 1, 218 555 1, 296 555 1, 503 0 1, 419 0 1, 361 154 1, 138 154 1, 80 0 1, 161 212 1, 339 212 1, 250 450 1, 132 602 1, 135 636 0, 144 656 1, 161 689 0, 202 689 1, 229 689 0, 252 675 1, 275 661 1, 296 648 0, 307 648 1, 332 648 0, 336 689 1, 382 689 1, 379 654 0, 370 635 1, 353 602 0, 312 602 1, 285 602 0, 262 616 1, 239 630 1, 219 643 0, 207 643 1, 182 643 0, 178 602 1 -597 35 -14 563 689;299 569 1, 418 569 0, 491 490 1, 563 410 0, 563 278 1, 563 144 0, 491 65 1, 418 -14 0, 295 -14 1, 189 -14 0, 120 51 1, 35 132 0, 35 278 1, 35 411 0, 107 490 1, 179 569 0, 299 510 1, 213 510 0, 166 449 1, 119 388 0, 119 278 1, 119 169 0, 166 107 1, 213 45 0, 297 45 1, 374 45 0, 420 95 1, 478 156 0, 478 278 1, 478 388 0, 431 449 1, 383 510 0, 174 602 1, 176 636 0, 186 656 1, 203 689 0, 244 689 1, 271 689 0, 294 675 1, 316 661 1, 338 648 0, 349 648 1, 373 648 0, 377 689 1, 423 689 1, 421 654 0, 411 635 1, 395 602 0, 354 602 1, 327 602 0, 303 616 1, 281 630 1, 260 643 0, 248 643 1, 224 643 0, 220 602 1 -768 35 -14 747 569;423 0 1, 423 22 1, 362 -14 0, 291 -14 1, 176 -14 0, 105 66 1, 35 147 0, 35 278 1, 35 411 0, 106 490 1, 177 569 0, 294 569 1, 363 569 0, 423 534 1, 423 555 1, 730 555 1, 730 496 1, 502 496 1, 502 318 1, 693 318 1, 693 260 1, 502 260 1, 502 59 1, 747 59 1, 747 0 1, 423 213 1, 423 342 1, 423 430 0, 393 470 1, 363 510 0, 296 510 1, 212 510 0, 165 449 1, 119 388 0, 119 278 1, 119 167 0, 165 106 1, 213 45 0, 296 45 1, 423 45 0 -725 32 -9 680 416;371 341 1, 395 375 0, 422 392 1, 461 416 0, 516 416 1, 612 416 0, 650 348 1, 678 297 0, 680 192 1, 412 192 1, 419 120 0, 447 87 1, 481 46 0, 560 46 1, 618 46 0, 680 73 1, 680 14 1, 608 -9 0, 542 -9 1, 474 -9 0, 434 12 1, 404 29 0, 373 65 1, 350 32 0, 323 15 1, 283 -9 0, 227 -9 1, 138 -9 0, 85 48 1, 32 106 0, 32 204 1, 32 302 0, 86 359 1, 138 416 0, 228 416 1, 287 416 0, 327 388 1, 350 372 0, 228 361 1, 111 361 0, 111 205 1, 111 137 0, 134 98 1, 163 46 0, 229 46 1, 337 46 0, 337 204 1, 337 276 0, 314 315 1, 288 361 0, 414 243 1, 601 243 1, 600 291 0, 588 317 1, 567 361 0, 514 361 1, 462 361 0, 437 321 1, 420 295 0 -427 38 204 390 250;38 204 1, 38 250 1, 390 250 1, 390 204 1 -768 37 204 731 241;37 204 1, 37 241 1, 731 241 1, 731 204 1 -256 21 398 225 592;225 592 1, 225 564 1, 198 551 0, 198 480 1, 198 472 1, 225 472 1, 225 398 1, 151 398 1, 151 460 1, 151 573 0, 95 592 1, 95 564 1, 69 551 0, 69 480 1, 69 472 1, 95 472 1, 95 398 1, 21 398 1, 21 460 1, 22 573 0 -256 31 398 234 592;31 398 1, 31 426 1, 57 440 0, 57 510 1, 57 518 1, 31 518 1, 31 592 1, 105 592 1, 105 530 1, 104 417 0, 160 398 1, 160 426 1, 187 440 0, 187 510 1, 187 518 1, 160 518 1, 160 592 1, 234 592 1, 234 530 1, 234 417 0 -171 35 380 127 592;127 592 1, 127 564 1, 91 554 0, 91 480 1, 91 472 1, 127 472 1, 127 380 1, 35 380 1, 35 460 1, 35 582 0 -171 44 380 136 592;44 380 1, 44 407 1, 80 417 0, 80 492 1, 80 500 1, 44 500 1, 44 592 1, 136 592 1, 136 512 1, 136 389 0 -449 39 0 409 444;39 194 1, 39 250 1, 409 250 1, 409 194 1, 178 352 1, 178 444 1, 270 444 1, 270 352 1, 178 0 1, 178 93 1, 270 93 1, 270 0 1 -213 0 0 0 0; -384 7 -148 380 546;152 0 1, 7 407 1, 82 407 1, 193 95 1, 314 407 1, 380 407 1, 164 -148 1, 87 -148 1, 85 481 1, 85 546 1, 150 546 1, 150 481 1, 234 481 1, 234 546 1, 298 546 1, 298 481 1 -512 11 0 501 666;210 0 1, 210 231 1, 11 555 1, 101 555 1, 259 298 1, 428 555 1, 501 555 1, 289 233 1, 289 0 1, 158 602 1, 158 666 1, 223 666 1, 223 602 1, 306 602 1, 306 666 1, 371 666 1, 371 602 1 -128 -165 -14 293 569;-165 -14 1, 243 569 1, 293 569 1, -114 -14 1 -427 46 110 381 446;137 168 1, 78 110 1, 46 143 1, 104 201 1, 80 240 0, 80 278 1, 80 315 0, 104 354 1, 46 413 1, 78 446 1, 137 387 1, 174 411 0, 213 411 1, 253 411 0, 290 387 1, 348 446 1, 381 413 1, 323 354 1, 347 315 0, 347 278 1, 347 240 0, 323 201 1, 381 143 1, 348 110 1, 290 168 1, 253 144 0, 213 144 1, 174 144 0, 213 365 1, 177 365 0, 152 339 1, 126 314 0, 126 277 1, 126 241 0, 152 216 1, 176 191 0, 212 191 1, 246 191 0, 270 211 1, 300 237 0, 300 278 1, 300 314 0, 275 339 1, 250 365 0 -256 28 37 213 370;213 342 1, 102 204 1, 213 65 1, 176 37 1, 28 204 1, 176 370 1 -256 43 37 228 370;43 65 1, 154 204 1, 43 342 1, 80 370 1, 228 204 1, 80 37 1 -384 12 0 336 602;66 0 1, 66 352 1, 12 352 1, 12 407 1, 66 407 1, 66 456 1, 66 602 0, 181 602 1, 206 602 0, 236 592 1, 236 533 1, 209 546 0, 189 546 1, 162 546 0, 151 528 1, 140 510 0, 140 464 1, 140 407 1, 336 407 1, 336 0 1, 262 0 1, 262 352 1, 140 352 1, 140 0 1, 262 481 1, 262 555 1, 336 555 1, 336 481 1 -384 12 0 336 602;66 0 1, 66 352 1, 12 352 1, 12 407 1, 66 407 1, 66 456 1, 66 602 0, 179 602 1, 262 592 1, 336 592 1, 336 0 1, 262 0 1, 262 537 1, 246 540 1, 214 546 0, 192 546 1, 159 546 0, 148 524 1, 140 505 0, 140 464 1, 140 407 1, 206 407 1, 206 352 1, 140 352 1, 140 0 1 -427 56 -111 371 555;177 -111 1, 186 93 1, 56 83 1, 56 139 1, 186 129 1, 186 315 1, 56 305 1, 56 361 1, 186 352 1, 177 555 1, 251 555 1, 241 352 1, 371 361 1, 371 305 1, 241 315 1, 241 129 1, 371 139 1, 371 83 1, 241 93 1, 251 -111 1 -213 60 184 153 277;60 184 1, 60 277 1, 153 277 1, 153 184 1 -171 39 -111 132 93;39 -111 1, 39 -83 1, 75 -73 0, 75 -8 1, 75 0 1, 39 0 1, 39 93 1, 132 93 1, 132 12 1, 131 -101 0 -256 26 -120 230 74;26 -120 1, 26 -93 1, 53 -79 0, 53 -9 1, 53 0 1, 26 0 1, 26 74 1, 100 74 1, 100 12 1, 100 -102 0, 156 -120 1, 156 -93 1, 182 -78 0, 182 -9 1, 182 0 1, 156 0 1, 156 74 1, 230 74 1, 230 12 1, 230 -102 0 -768 9 -14 759 569;128 555 1, 181 555 0, 213 518 1, 245 480 0, 245 417 1, 245 352 0, 213 315 1, 182 278 0, 126 278 1, 78 278 0, 48 308 1, 9 347 0, 9 416 1, 9 480 0, 41 518 1, 74 555 0, 127 518 1, 65 518 0, 65 417 1, 65 315 0, 128 315 1, 190 315 0, 190 416 1, 190 463 0, 173 491 1, 156 518 0, 377 278 1, 431 278 0, 463 240 1, 495 203 0, 495 139 1, 495 74 0, 463 37 1, 431 0 0, 376 0 1, 328 0 0, 297 30 1, 259 69 0, 259 139 1, 259 203 0, 291 240 1, 323 278 0, 377 241 1, 315 241 0, 315 139 1, 315 37 0, 377 37 1, 440 37 0, 440 138 1, 440 186 0, 423 213 1, 405 241 0, 641 278 1, 695 278 0, 727 240 1, 759 203 0, 759 140 1, 759 74 0, 727 37 1, 695 0 0, 640 0 1, 592 0 0, 561 31 1, 523 69 0, 523 139 1, 523 203 0, 555 240 1, 587 278 0, 640 241 1, 578 241 0, 578 139 1, 578 37 0, 641 37 1, 704 37 0, 704 139 1, 704 186 0, 686 213 1, 669 241 0, 23 -14 1, 431 569 1, 482 569 1, 74 -14 1 -512 7 0 503 722;7 0 1, 218 555 1, 296 555 1, 503 0 1, 419 0 1, 361 154 1, 138 154 1, 80 0 1, 161 212 1, 339 212 1, 250 450 1, 126 602 1, 216 722 1, 298 722 1, 388 602 1, 333 602 1, 257 677 1, 257 677 1, 181 602 1 -512 72 0 491 722;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1, 150 602 1, 240 722 1, 322 722 1, 412 602 1, 357 602 1, 281 677 1, 281 677 1, 205 602 1 -512 7 0 503 722;7 0 1, 218 555 1, 296 555 1, 503 0 1, 419 0 1, 361 154 1, 138 154 1, 80 0 1, 161 212 1, 339 212 1, 250 450 1, 201 602 1, 292 722 1, 377 722 1, 257 602 1 -512 72 0 491 666;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1, 169 602 1, 169 666 1, 234 666 1, 234 602 1, 317 602 1, 317 666 1, 382 666 1, 382 602 1 -512 72 0 491 722;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1, 335 602 1, 280 602 1, 159 722 1, 245 722 1 -213 51 0 227 722;68 0 1, 68 555 1, 146 555 1, 146 0 1, 51 602 1, 142 722 1, 227 722 1, 107 602 1 -213 -24 0 238 722;68 0 1, 68 555 1, 146 555 1, 146 0 1, -24 602 1, 66 722 1, 148 722 1, 238 602 1, 183 602 1, 107 677 1, 107 677 1, 31 602 1 -213 0 0 213 666;68 0 1, 68 555 1, 146 555 1, 146 0 1, 0 602 1, 0 666 1, 65 666 1, 65 602 1, 149 602 1, 149 666 1, 213 666 1, 213 602 1 -213 -14 0 162 722;68 0 1, 68 555 1, 146 555 1, 146 0 1, 162 602 1, 107 602 1, -14 722 1, 72 722 1 -597 35 -14 563 722;299 569 1, 418 569 0, 491 490 1, 563 410 0, 563 278 1, 563 144 0, 491 65 1, 418 -14 0, 295 -14 1, 189 -14 0, 120 51 1, 35 132 0, 35 278 1, 35 411 0, 107 490 1, 179 569 0, 299 510 1, 213 510 0, 166 449 1, 119 388 0, 119 278 1, 119 169 0, 166 107 1, 213 45 0, 297 45 1, 374 45 0, 420 95 1, 478 156 0, 478 278 1, 478 388 0, 431 449 1, 383 510 0, 243 602 1, 333 722 1, 419 722 1, 299 602 1 -597 35 -14 563 722;299 569 1, 418 569 0, 491 490 1, 563 410 0, 563 278 1, 563 144 0, 491 65 1, 418 -14 0, 295 -14 1, 189 -14 0, 120 51 1, 35 132 0, 35 278 1, 35 411 0, 107 490 1, 179 569 0, 299 510 1, 213 510 0, 166 449 1, 119 388 0, 119 278 1, 119 169 0, 166 107 1, 213 45 0, 297 45 1, 374 45 0, 420 95 1, 478 156 0, 478 278 1, 478 388 0, 431 449 1, 383 510 0, 167 602 1, 258 722 1, 339 722 1, 430 602 1, 374 602 1, 299 677 1, 298 677 1, 223 602 1 -427 0 -14 405 568;141 201 1, 156 141 0, 178 108 1, 218 48 0, 290 48 1, 337 48 0, 405 75 1, 405 10 1, 332 -14 0, 281 -14 1, 194 -14 0, 140 38 1, 101 74 0, 82 134 1, 75 156 0, 66 201 1, 0 201 1, 19 248 1, 61 248 1, 60 276 1, 60 277 0, 60 284 1, 61 300 0, 62 321 1, 0 321 1, 19 368 1, 69 368 1, 84 430 0, 102 462 1, 161 568 0, 293 568 1, 341 568 0, 405 552 1, 405 483 1, 342 510 0, 294 510 1, 228 510 0, 188 462 1, 166 434 0, 154 400 1, 149 386 0, 144 368 1, 356 368 1, 337 321 1, 136 321 1, 134 294 0, 134 276 1, 135 248 1, 307 248 1, 288 201 1 -597 35 -14 563 722;299 569 1, 418 569 0, 491 490 1, 563 410 0, 563 278 1, 563 144 0, 491 65 1, 418 -14 0, 295 -14 1, 189 -14 0, 120 51 1, 35 132 0, 35 278 1, 35 411 0, 107 490 1, 179 569 0, 299 510 1, 213 510 0, 166 449 1, 119 388 0, 119 278 1, 119 169 0, 166 107 1, 213 45 0, 297 45 1, 374 45 0, 420 95 1, 478 156 0, 478 278 1, 478 388 0, 431 449 1, 383 510 0, 354 602 1, 299 602 1, 178 722 1, 264 722 1 -555 62 -14 492 722;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 227 602 1, 317 722 1, 402 722 1, 282 602 1 -555 62 -14 492 722;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 151 602 1, 241 722 1, 323 722 1, 413 602 1, 358 602 1, 282 677 1, 282 677 1, 206 602 1 -555 62 -14 492 722;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 338 602 1, 282 602 1, 162 722 1, 247 722 1 -171 48 0 122 407;48 0 1, 48 407 1, 122 407 1, 122 0 1 -256 -3 481 259 602;-3 481 1, 87 602 1, 169 602 1, 259 481 1, 204 481 1, 128 557 1, 128 557 1, 52 481 1 -256 3 481 253 569;3 481 1, 6 516 0, 15 535 1, 32 569 0, 73 569 1, 100 569 0, 123 555 1, 146 541 1, 167 528 0, 178 528 1, 203 528 0, 207 569 1, 253 569 1, 250 534 0, 241 515 1, 224 481 0, 183 481 1, 156 481 0, 133 496 1, 110 510 1, 90 522 0, 78 522 1, 53 522 0, 49 481 1 -256 8 481 248 537;8 481 1, 8 537 1, 248 537 1, 248 481 1 -256 3 481 253 602;3 602 1, 49 602 1, 57 566 0, 77 551 1, 97 537 0, 128 537 1, 163 537 0, 183 555 1, 200 570 0, 207 602 1, 253 602 1, 247 551 0, 219 521 1, 184 481 0, 128 481 1, 69 481 0, 33 524 1, 9 554 0 -256 91 481 165 555;91 481 1, 91 555 1, 165 555 1, 165 481 1 -256 43 481 213 651;128 651 1, 163 651 0, 188 627 1, 213 602 0, 213 567 1, 213 531 0, 188 506 1, 163 481 0, 127 481 1, 96 481 0, 73 501 1, 43 527 0, 43 566 1, 43 602 0, 68 626 1, 92 651 0, 128 619 1, 106 619 0, 90 603 1, 75 588 0, 75 566 1, 75 545 0, 90 529 1, 106 513 0, 127 513 1, 147 513 0, 162 526 1, 181 542 0, 181 567 1, 181 588 0, 165 603 1, 150 619 0 -256 63 -162 193 0;107 0 1, 143 0 1, 120 -41 1, 147 -42 0, 167 -56 1, 193 -74 0, 193 -101 1, 193 -126 0, 171 -144 1, 149 -162 0, 117 -162 1, 92 -162 0, 63 -154 1, 63 -124 1, 82 -129 0, 102 -129 1, 141 -129 0, 141 -102 1, 141 -67 0, 71 -66 1 -256 -19 481 275 602;-19 481 1, 71 602 1, 143 602 1, 23 481 1, 113 481 1, 203 602 1, 275 602 1, 155 481 1 -256 64 -139 192 0;123 0 1, 163 0 1, 115 -30 0, 115 -67 1, 115 -103 0, 158 -103 1, 178 -103 0, 192 -98 1, 192 -128 1, 169 -139 0, 140 -139 1, 64 -139 0, 64 -80 1, 64 -34 0 -256 -3 481 259 602;259 602 1, 169 481 1, 87 481 1, -3 602 1, 52 602 1, 128 526 1, 128 526 1, 204 602 1 -427 0 -14 405 568;141 201 1, 156 141 0, 178 108 1, 218 48 0, 290 48 1, 337 48 0, 405 75 1, 405 10 1, 332 -14 0, 281 -14 1, 194 -14 0, 140 38 1, 101 74 0, 82 134 1, 75 156 0, 66 201 1, 0 201 1, 19 248 1, 61 248 1, 60 276 1, 60 277 0, 60 284 1, 61 300 0, 62 321 1, 0 321 1, 19 368 1, 69 368 1, 84 430 0, 102 462 1, 161 568 0, 293 568 1, 341 568 0, 405 552 1, 405 483 1, 342 510 0, 294 510 1, 228 510 0, 188 462 1, 166 434 0, 154 400 1, 149 386 0, 144 368 1, 356 368 1, 337 321 1, 136 321 1, 134 294 0, 134 276 1, 135 248 1, 307 248 1, 288 201 1 -213 0 0 0 0; -200 72 -111 128 592;72 -111 1, 72 167 1, 128 167 1, 128 -111 1, 72 315 1, 72 592 1, 128 592 1, 128 315 1 -256 33 194 223 250;33 194 1, 33 250 1, 223 250 1, 223 194 1 -427 37 546 390 602;37 546 1, 37 602 1, 390 602 1, 390 546 1 -256 28 222 240 564;28 222 1, 28 268 1, 53 312 0, 96 350 1, 122 373 1, 181 425 0, 181 471 1, 181 525 0, 120 525 1, 85 525 0, 36 500 1, 36 543 1, 85 564 0, 130 564 1, 179 564 0, 210 538 1, 240 513 0, 240 473 1, 240 420 0, 171 363 1, 151 346 1, 101 305 0, 92 268 1, 238 268 1, 238 222 1 -256 28 214 234 564;32 507 1, 32 549 1, 75 564 0, 117 564 1, 223 564 0, 223 486 1, 223 450 0, 197 426 1, 182 413 0, 151 402 1, 199 389 0, 218 364 1, 234 343 0, 234 312 1, 234 267 0, 201 240 1, 169 214 0, 112 214 1, 74 214 0, 28 225 1, 28 270 1, 78 251 0, 108 251 1, 175 251 0, 175 312 1, 175 381 0, 78 381 1, 59 381 1, 59 416 1, 75 416 1, 167 416 0, 167 478 1, 167 526 0, 108 526 1, 74 526 0 -213 60 184 153 277;60 184 1, 60 277 1, 153 277 1, 153 184 1 -256 46 222 176 564;120 222 1, 120 507 1, 46 488 1, 46 531 1, 176 564 1, 176 222 1 -641 44 -14 594 569;117 222 1, 117 507 1, 44 488 1, 44 531 1, 173 564 1, 173 222 1, 497 0 1, 497 91 1, 344 91 1, 344 133 1, 495 333 1, 548 333 1, 548 135 1, 594 135 1, 594 91 1, 548 91 1, 548 0 1, 393 135 1, 497 135 1, 497 271 1, 72 -14 1, 480 569 1, 530 569 1, 122 -14 1 -641 44 -14 594 569;382 0 1, 382 46 1, 406 88 0, 450 128 1, 477 151 1, 535 203 0, 535 249 1, 535 303 0, 475 303 1, 440 303 0, 390 278 1, 390 321 1, 440 341 0, 485 341 1, 534 341 0, 564 316 1, 594 291 0, 594 250 1, 594 196 0, 525 140 1, 505 124 1, 455 83 0, 447 46 1, 593 46 1, 593 0 1, 53 -14 1, 461 569 1, 512 569 1, 104 -14 1, 117 222 1, 117 507 1, 44 488 1, 44 531 1, 173 564 1, 173 222 1 -641 42 -14 599 569;46 507 1, 46 549 1, 89 564 0, 131 564 1, 237 564 0, 237 486 1, 237 450 0, 211 426 1, 195 413 0, 165 402 1, 213 389 0, 232 364 1, 248 343 0, 248 312 1, 248 267 0, 215 240 1, 183 214 0, 126 214 1, 87 214 0, 42 225 1, 42 270 1, 92 251 0, 122 251 1, 189 251 0, 189 312 1, 189 381 0, 92 381 1, 72 381 1, 72 416 1, 89 416 1, 180 416 0, 180 478 1, 180 526 0, 122 526 1, 88 526 0, 502 0 1, 502 91 1, 349 91 1, 349 133 1, 500 333 1, 552 333 1, 552 135 1, 599 135 1, 599 91 1, 552 91 1, 552 0 1, 398 135 1, 502 135 1, 502 271 1, 107 -14 1, 515 569 1, 565 569 1, 157 -14 1 -555 2 0 520 555;62 0 1, 62 255 1, 2 255 1, 2 314 1, 62 314 1, 62 555 1, 240 555 1, 520 555 0, 520 290 1, 520 152 0, 447 76 1, 374 0 0, 241 0 1, 141 59 1, 235 59 1, 435 59 0, 435 281 1, 435 412 0, 356 466 1, 333 482 0, 301 488 1, 263 496 0, 199 496 1, 141 496 1, 141 314 1, 266 314 1, 266 255 1, 141 255 1 -449 44 42 404 402;44 81 1, 185 222 1, 44 363 1, 84 402 1, 224 261 1, 365 402 1, 404 363 1, 264 222 1, 404 81 1, 365 42 1, 224 183 1, 84 42 1 -512 11 0 501 722;210 0 1, 210 231 1, 11 555 1, 101 555 1, 259 298 1, 428 555 1, 501 555 1, 289 233 1, 289 0 1, 204 602 1, 294 722 1, 380 722 1, 259 602 1 -512 63 0 494 555;63 0 1, 63 555 1, 141 555 1, 141 450 1, 280 450 1, 366 450 0, 403 440 1, 441 431 0, 465 402 1, 494 366 0, 494 304 1, 494 116 0, 257 116 1, 141 116 1, 141 0 1, 141 175 1, 254 175 1, 411 175 0, 411 299 1, 411 359 0, 370 376 1, 335 391 0, 255 391 1, 141 391 1 -427 32 -9 395 629;47 538 1, 47 594 1, 122 594 0, 183 565 1, 241 629 1, 270 596 1, 222 542 1, 269 506 0, 294 478 1, 395 366 0, 395 206 1, 395 105 0, 347 48 1, 299 -9 0, 216 -9 1, 132 -9 0, 82 48 1, 32 105 0, 32 201 1, 32 297 0, 81 352 1, 129 407 0, 214 407 1, 234 407 0, 259 402 1, 230 456 0, 177 494 1, 122 432 1, 92 465 1, 140 518 1, 102 538 0, 212 352 1, 165 352 0, 138 312 1, 111 272 0, 111 199 1, 111 46 0, 214 46 1, 316 46 0, 316 199 1, 316 352 0 -384 7 -148 380 602;152 0 1, 7 407 1, 82 407 1, 193 95 1, 314 407 1, 380 407 1, 164 -148 1, 87 -148 1, 168 481 1, 259 602 1, 344 602 1, 224 481 1 -427 58 -148 395 592;132 -148 1, 58 -148 1, 58 592 1, 132 592 1, 132 331 1, 153 369 0, 176 389 1, 209 416 0, 254 416 1, 317 416 0, 356 361 1, 395 306 0, 395 215 1, 395 108 0, 344 49 1, 294 -9 0, 203 -9 1, 168 -9 0, 132 0 1, 132 264 1, 132 56 1, 183 46 0, 209 46 1, 315 46 0, 315 207 1, 315 275 0, 294 313 1, 273 352 0, 238 352 1, 191 352 0 -514 8 0 504 657;8 0 1, 219 555 1, 297 555 1, 504 0 1, 419 0 1, 362 154 1, 139 154 1, 81 0 1, 161 212 1, 340 212 1, 251 450 1, 137 602 1, 137 657 1, 378 657 1, 378 602 1 -432 36 -9 412 537;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0, 72 481 1, 72 537 1, 312 537 1, 312 481 1 -514 8 0 504 722;8 0 1, 219 555 1, 297 555 1, 504 0 1, 419 0 1, 362 154 1, 139 154 1, 81 0 1, 161 212 1, 340 212 1, 251 450 1, 133 722 1, 179 722 1, 187 687 0, 207 672 1, 227 657 0, 258 657 1, 293 657 0, 313 675 1, 329 690 0, 336 722 1, 383 722 1, 377 672 0, 349 641 1, 314 602 0, 258 602 1, 199 602 0, 163 645 1, 139 674 0 -432 36 -9 412 602;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0, 67 602 1, 113 602 1, 121 566 0, 141 551 1, 161 537 0, 192 537 1, 227 537 0, 247 555 1, 264 570 0, 271 602 1, 317 602 1, 311 551 0, 283 521 1, 248 481 0, 192 481 1, 133 481 0, 97 524 1, 73 554 0 -512 7 -139 503 555;7 0 1, 218 555 1, 296 555 1, 503 0 1, 419 0 1, 361 154 1, 138 154 1, 80 0 1, 161 212 1, 339 212 1, 250 450 1, 419 0 1, 459 0 1, 411 -30 0, 411 -67 1, 411 -103 0, 454 -103 1, 474 -103 0, 488 -98 1, 488 -128 1, 464 -139 0, 435 -139 1, 359 -139 0, 359 -80 1, 359 -34 0 -427 36 -139 412 416;290 52 1, 221 -9 0, 155 -9 1, 102 -9 0, 69 22 1, 36 53 0, 36 102 1, 36 241 0, 262 241 1, 279 241 1, 279 290 1, 279 361 0, 201 361 1, 140 361 0, 71 325 1, 71 386 1, 148 416 0, 215 416 1, 287 416 0, 320 386 1, 353 356 0, 353 290 1, 353 105 1, 353 42 0, 392 42 1, 398 42 0, 407 44 1, 412 3 1, 384 -9 0, 357 -9 1, 332 -9 0, 315 5 1, 299 19 0, 279 92 1, 279 197 1, 255 198 1, 233 199 0, 205 195 1, 112 182 0, 112 114 1, 112 51 0, 180 51 1, 227 51 0, 315 0 1, 355 0 1, 307 -30 0, 307 -67 1, 307 -103 0, 350 -103 1, 370 -103 0, 384 -98 1, 384 -128 1, 361 -139 0, 332 -139 1, 256 -139 0, 256 -80 1, 256 -34 0 -555 44 -14 507 722;507 29 1, 421 -14 0, 323 -14 1, 186 -14 0, 115 60 1, 44 135 0, 44 277 1, 44 419 0, 116 494 1, 189 569 0, 327 569 1, 404 569 0, 506 545 1, 506 471 1, 390 510 0, 323 510 1, 228 510 0, 178 450 1, 128 390 0, 128 278 1, 128 167 0, 182 108 1, 235 48 0, 332 48 1, 414 48 0, 507 96 1, 264 602 1, 355 722 1, 440 722 1, 320 602 1 -384 32 -9 347 602;347 12 1, 279 -9 0, 219 -9 1, 135 -9 0, 84 50 1, 32 109 0, 32 204 1, 32 303 0, 85 360 1, 137 416 0, 231 416 1, 278 416 0, 343 403 1, 343 341 1, 281 360 0, 245 360 1, 116 360 0, 116 204 1, 116 130 0, 149 90 1, 182 50 0, 242 50 1, 287 50 0, 347 76 1, 168 481 1, 259 602 1, 344 602 1, 224 481 1 -555 44 -14 507 722;507 29 1, 421 -14 0, 323 -14 1, 186 -14 0, 115 60 1, 44 135 0, 44 277 1, 44 419 0, 116 494 1, 189 569 0, 327 569 1, 404 569 0, 506 545 1, 506 471 1, 390 510 0, 323 510 1, 228 510 0, 178 450 1, 128 390 0, 128 278 1, 128 167 0, 182 108 1, 235 48 0, 332 48 1, 414 48 0, 507 96 1, 189 602 1, 279 722 1, 361 722 1, 451 602 1, 396 602 1, 320 677 1, 320 677 1, 244 602 1 -384 32 -9 359 602;347 12 1, 279 -9 0, 219 -9 1, 135 -9 0, 84 50 1, 32 109 0, 32 204 1, 32 303 0, 85 360 1, 137 416 0, 231 416 1, 278 416 0, 343 403 1, 343 341 1, 281 360 0, 245 360 1, 116 360 0, 116 204 1, 116 130 0, 149 90 1, 182 50 0, 242 50 1, 287 50 0, 347 76 1, 96 481 1, 187 602 1, 269 602 1, 359 481 1, 303 481 1, 228 557 1, 227 557 1, 152 481 1 -555 44 -14 507 675;507 29 1, 421 -14 0, 323 -14 1, 186 -14 0, 115 60 1, 44 135 0, 44 277 1, 44 419 0, 116 494 1, 189 569 0, 327 569 1, 404 569 0, 506 545 1, 506 471 1, 390 510 0, 323 510 1, 228 510 0, 178 450 1, 128 390 0, 128 278 1, 128 167 0, 182 108 1, 235 48 0, 332 48 1, 414 48 0, 507 96 1, 283 602 1, 283 675 1, 357 675 1, 357 602 1 -384 32 -9 347 555;347 12 1, 279 -9 0, 219 -9 1, 135 -9 0, 84 50 1, 32 109 0, 32 204 1, 32 303 0, 85 360 1, 137 416 0, 231 416 1, 278 416 0, 343 403 1, 343 341 1, 281 360 0, 245 360 1, 116 360 0, 116 204 1, 116 130 0, 149 90 1, 182 50 0, 242 50 1, 287 50 0, 347 76 1, 191 481 1, 191 555 1, 264 555 1, 264 481 1 -555 44 -14 507 722;507 29 1, 421 -14 0, 323 -14 1, 186 -14 0, 115 60 1, 44 135 0, 44 277 1, 44 419 0, 116 494 1, 189 569 0, 327 569 1, 404 569 0, 506 545 1, 506 471 1, 390 510 0, 323 510 1, 228 510 0, 178 450 1, 128 390 0, 128 278 1, 128 167 0, 182 108 1, 235 48 0, 332 48 1, 414 48 0, 507 96 1, 451 722 1, 361 602 1, 279 602 1, 189 722 1, 244 722 1, 320 646 1, 320 646 1, 396 722 1 -384 32 -9 387 602;347 12 1, 279 -9 0, 219 -9 1, 135 -9 0, 84 50 1, 32 109 0, 32 204 1, 32 303 0, 85 360 1, 137 416 0, 231 416 1, 278 416 0, 343 403 1, 343 341 1, 281 360 0, 245 360 1, 116 360 0, 116 204 1, 116 130 0, 149 90 1, 182 50 0, 242 50 1, 287 50 0, 347 76 1, 387 602 1, 297 481 1, 215 481 1, 125 602 1, 180 602 1, 256 526 1, 256 526 1, 332 602 1 -555 62 0 520 722;62 0 1, 62 555 1, 240 555 1, 520 555 0, 520 290 1, 520 152 0, 447 76 1, 374 0 0, 241 0 1, 141 59 1, 235 59 1, 435 59 0, 435 281 1, 435 412 0, 356 466 1, 333 482 0, 301 488 1, 263 496 0, 199 496 1, 141 496 1, 387 722 1, 297 602 1, 215 602 1, 125 722 1, 180 722 1, 255 646 1, 256 646 1, 332 722 1 -472 32 -9 472 592;295 143 1, 295 351 1, 243 361 0, 218 361 1, 112 361 0, 112 200 1, 112 133 0, 133 94 1, 154 56 0, 189 56 1, 236 56 0, 295 76 1, 274 38 0, 251 18 1, 218 -9 0, 173 -9 1, 110 -9 0, 71 46 1, 32 101 0, 32 193 1, 32 299 0, 83 358 1, 133 416 0, 224 416 1, 259 416 0, 295 407 1, 295 592 1, 369 592 1, 369 0 1, 295 0 1, 398 422 1, 398 444 1, 427 452 0, 427 512 1, 427 518 1, 398 518 1, 398 592 1, 472 592 1, 472 528 1, 472 430 0 -555 2 0 520 555;62 0 1, 62 255 1, 2 255 1, 2 314 1, 62 314 1, 62 555 1, 240 555 1, 520 555 0, 520 290 1, 520 152 0, 447 76 1, 374 0 0, 241 0 1, 141 59 1, 235 59 1, 435 59 0, 435 281 1, 435 412 0, 356 466 1, 333 482 0, 301 488 1, 263 496 0, 199 496 1, 141 496 1, 141 314 1, 266 314 1, 266 255 1, 141 255 1 -427 32 -9 425 592;295 472 1, 175 472 1, 175 518 1, 295 518 1, 295 592 1, 369 592 1, 369 518 1, 425 518 1, 425 472 1, 369 472 1, 369 0 1, 295 0 1, 295 76 1, 274 38 0, 251 18 1, 218 -9 0, 173 -9 1, 110 -9 0, 71 46 1, 32 101 0, 32 193 1, 32 299 0, 83 358 1, 133 416 0, 224 416 1, 259 416 0, 295 407 1, 295 143 1, 295 351 1, 243 361 0, 218 361 1, 112 361 0, 112 200 1, 112 133 0, 133 94 1, 154 56 0, 189 56 1, 236 56 0 -512 72 0 491 657;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1, 150 602 1, 150 657 1, 391 657 1, 391 602 1 -427 32 -9 383 537;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0, 72 481 1, 72 537 1, 312 537 1, 312 481 1 -512 72 0 491 722;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1, 152 722 1, 198 722 1, 206 687 0, 226 672 1, 245 657 0, 276 657 1, 312 657 0, 332 675 1, 348 690 0, 355 722 1, 401 722 1, 395 672 0, 368 641 1, 333 602 0, 276 602 1, 218 602 0, 182 645 1, 158 674 0 -427 32 -9 383 602;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0, 89 602 1, 135 602 1, 143 567 0, 163 551 1, 182 537 0, 213 537 1, 249 537 0, 269 555 1, 285 570 0, 292 602 1, 338 602 1, 332 551 0, 305 521 1, 269 481 0, 213 481 1, 155 481 0, 119 524 1, 95 553 0 -512 72 0 491 675;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1, 238 602 1, 238 675 1, 312 675 1, 312 602 1 -427 32 -9 383 555;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0, 155 481 1, 155 555 1, 229 555 1, 229 481 1 -512 72 -139 491 555;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1, 403 0 1, 443 0 1, 395 -30 0, 395 -67 1, 395 -103 0, 438 -103 1, 458 -103 0, 472 -98 1, 472 -128 1, 449 -139 0, 420 -139 1, 344 -139 0, 344 -80 1, 344 -34 0 -427 32 -139 383 416;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0, 251 0 1, 291 0 1, 243 -30 0, 243 -67 1, 243 -103 0, 286 -103 1, 306 -103 0, 320 -98 1, 320 -128 1, 297 -139 0, 268 -139 1, 192 -139 0, 192 -80 1, 192 -34 0 -512 72 0 491 722;72 0 1, 72 555 1, 474 555 1, 474 496 1, 150 496 1, 150 318 1, 437 318 1, 437 260 1, 150 260 1, 150 59 1, 491 59 1, 491 0 1, 406 722 1, 315 602 1, 234 602 1, 143 722 1, 199 722 1, 274 646 1, 275 646 1, 350 722 1 -427 32 -9 383 602;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0, 323 602 1, 233 481 1, 151 481 1, 61 602 1, 116 602 1, 192 526 1, 192 526 1, 268 602 1 -597 35 -14 527 722;527 258 1, 527 15 1, 424 -14 0, 327 -14 1, 35 -14 0, 35 276 1, 35 417 0, 110 493 1, 186 569 0, 329 569 1, 421 569 0, 526 544 1, 526 471 1, 406 510 0, 326 510 1, 119 510 0, 119 279 1, 119 165 0, 176 105 1, 233 45 0, 338 45 1, 381 45 0, 449 59 1, 449 200 1, 356 200 1, 356 258 1, 194 602 1, 284 722 1, 366 722 1, 456 602 1, 401 602 1, 326 677 1, 325 677 1, 249 602 1 -427 35 -158 372 602;298 162 1, 298 351 1, 245 361 0, 222 361 1, 115 361 0, 115 215 1, 115 150 0, 136 112 1, 157 74 0, 192 74 1, 239 74 0, 298 95 1, 277 57 0, 254 37 1, 221 9 0, 176 9 1, 113 9 0, 74 64 1, 35 119 0, 35 207 1, 35 306 0, 85 361 1, 135 416 0, 226 416 1, 261 416 0, 298 407 1, 372 407 1, 372 111 1, 372 15 0, 362 -31 1, 334 -158 0, 174 -158 1, 106 -158 0, 38 -135 1, 38 -71 1, 118 -102 0, 173 -102 1, 298 -102 0, 298 31 1, 93 481 1, 184 602 1, 266 602 1, 356 481 1, 300 481 1, 225 557 1, 224 557 1, 149 481 1 -597 35 -14 527 722;527 258 1, 527 15 1, 424 -14 0, 327 -14 1, 35 -14 0, 35 276 1, 35 417 0, 110 493 1, 186 569 0, 329 569 1, 421 569 0, 526 544 1, 526 471 1, 406 510 0, 326 510 1, 119 510 0, 119 279 1, 119 165 0, 176 105 1, 233 45 0, 338 45 1, 381 45 0, 449 59 1, 449 200 1, 356 200 1, 356 258 1, 200 722 1, 246 722 1, 254 687 0, 275 672 1, 294 657 0, 325 657 1, 360 657 0, 381 675 1, 397 690 0, 404 722 1, 450 722 1, 444 672 0, 417 641 1, 381 602 0, 325 602 1, 266 602 0, 231 645 1, 206 674 0 -427 35 -158 381 602;298 162 1, 298 351 1, 245 361 0, 222 361 1, 115 361 0, 115 215 1, 115 150 0, 136 112 1, 157 74 0, 192 74 1, 239 74 0, 298 95 1, 277 57 0, 254 37 1, 221 9 0, 176 9 1, 113 9 0, 74 64 1, 35 119 0, 35 207 1, 35 306 0, 85 361 1, 135 416 0, 226 416 1, 261 416 0, 298 407 1, 372 407 1, 372 111 1, 372 15 0, 362 -31 1, 334 -158 0, 174 -158 1, 106 -158 0, 38 -135 1, 38 -71 1, 118 -102 0, 173 -102 1, 298 -102 0, 298 31 1, 131 602 1, 177 602 1, 185 566 0, 205 551 1, 225 537 0, 256 537 1, 291 537 0, 311 555 1, 328 570 0, 335 602 1, 381 602 1, 375 551 0, 347 521 1, 312 481 0, 256 481 1, 197 481 0, 161 524 1, 137 554 0 -597 35 -14 527 675;527 258 1, 527 15 1, 424 -14 0, 327 -14 1, 35 -14 0, 35 276 1, 35 417 0, 110 493 1, 186 569 0, 329 569 1, 421 569 0, 526 544 1, 526 471 1, 406 510 0, 326 510 1, 119 510 0, 119 279 1, 119 165 0, 176 105 1, 233 45 0, 338 45 1, 381 45 0, 449 59 1, 449 200 1, 356 200 1, 356 258 1, 288 602 1, 288 675 1, 362 675 1, 362 602 1 -427 35 -158 372 555;298 162 1, 298 351 1, 245 361 0, 222 361 1, 115 361 0, 115 215 1, 115 150 0, 136 112 1, 157 74 0, 192 74 1, 239 74 0, 298 95 1, 277 57 0, 254 37 1, 221 9 0, 176 9 1, 113 9 0, 74 64 1, 35 119 0, 35 207 1, 35 306 0, 85 361 1, 135 416 0, 226 416 1, 261 416 0, 298 407 1, 372 407 1, 372 111 1, 372 15 0, 362 -31 1, 334 -158 0, 174 -158 1, 106 -158 0, 38 -135 1, 38 -71 1, 118 -102 0, 173 -102 1, 298 -102 0, 298 31 1, 183 481 1, 183 555 1, 257 555 1, 257 481 1 -597 35 -162 527 569;527 258 1, 527 15 1, 423 -14 0, 327 -14 1, 35 -14 0, 35 276 1, 35 417 0, 110 493 1, 186 569 0, 329 569 1, 421 569 0, 526 544 1, 526 471 1, 406 510 0, 326 510 1, 119 510 0, 119 279 1, 119 165 0, 176 105 1, 233 45 0, 338 45 1, 381 45 0, 449 59 1, 449 200 1, 356 200 1, 356 258 1, 263 -158 1, 263 -126 1, 284 -129 0, 299 -129 1, 340 -129 0, 340 -104 1, 340 -77 0, 281 -71 1, 281 -42 1, 331 -43 0, 356 -54 1, 391 -69 0, 391 -105 1, 391 -162 0, 309 -162 1, 287 -162 0 -427 35 -158 372 651;298 162 1, 298 351 1, 245 361 0, 222 361 1, 115 361 0, 115 215 1, 115 150 0, 136 112 1, 157 74 0, 192 74 1, 239 74 0, 298 95 1, 277 57 0, 254 37 1, 221 9 0, 176 9 1, 113 9 0, 74 64 1, 35 119 0, 35 207 1, 35 306 0, 85 361 1, 135 416 0, 226 416 1, 261 416 0, 298 407 1, 372 407 1, 372 111 1, 372 15 0, 362 -31 1, 334 -158 0, 174 -158 1, 106 -158 0, 38 -135 1, 38 -71 1, 118 -102 0, 173 -102 1, 298 -102 0, 298 31 1, 257 651 1, 257 629 1, 228 621 0, 228 561 1, 228 555 1, 257 555 1, 257 481 1, 183 481 1, 183 545 1, 183 644 0 -555 62 0 492 722;62 0 1, 62 555 1, 141 555 1, 141 321 1, 414 321 1, 414 555 1, 492 555 1, 492 0 1, 414 0 1, 414 262 1, 141 262 1, 141 0 1, 146 602 1, 236 722 1, 318 722 1, 408 602 1, 353 602 1, 278 677 1, 277 677 1, 201 602 1 -427 58 0 374 750;58 0 1, 58 592 1, 132 592 1, 132 331 1, 159 369 0, 186 388 1, 224 416 0, 270 416 1, 374 416 0, 374 293 1, 374 0 1, 300 0 1, 300 269 1, 300 318 0, 290 335 1, 279 353 0, 251 353 1, 190 353 0, 132 264 1, 132 0 1, 86 629 1, 176 750 1, 258 750 1, 348 629 1, 293 629 1, 217 705 1, 216 705 1, 141 629 1 -555 6 0 548 555;141 321 1, 414 321 1, 414 416 1, 141 416 1, 62 0 1, 62 416 1, 6 416 1, 6 463 1, 62 463 1, 62 555 1, 141 555 1, 141 463 1, 414 463 1, 414 555 1, 492 555 1, 492 463 1, 548 463 1, 548 416 1, 492 416 1, 492 0 1, 414 0 1, 414 262 1, 141 262 1, 141 0 1 -427 2 0 374 592;58 0 1, 58 472 1, 2 472 1, 2 518 1, 58 518 1, 58 592 1, 132 592 1, 132 518 1, 243 518 1, 243 472 1, 132 472 1, 132 331 1, 159 369 0, 186 388 1, 224 416 0, 270 416 1, 374 416 0, 374 293 1, 374 0 1, 300 0 1, 300 269 1, 300 318 0, 290 335 1, 279 353 0, 251 353 1, 190 353 0, 132 264 1, 132 0 1 -213 -18 0 232 689;68 0 1, 68 555 1, 146 555 1, 146 0 1, -18 602 1, -15 636 0, -6 656 1, 11 689 0, 52 689 1, 79 689 0, 102 675 1, 125 661 1, 146 648 0, 157 648 1, 182 648 0, 186 689 1, 232 689 1, 229 654 0, 220 635 1, 203 602 0, 162 602 1, 135 602 0, 112 616 1, 89 630 1, 69 643 0, 57 643 1, 32 643 0, 28 602 1 -171 -40 0 210 569;48 0 1, 48 407 1, 122 407 1, 122 0 1, -40 481 1, -37 516 0, -28 535 1, -11 569 0, 30 569 1, 57 569 0, 80 555 1, 103 541 1, 124 528 0, 135 528 1, 160 528 0, 164 569 1, 210 569 1, 207 534 0, 198 515 1, 181 481 0, 141 481 1, 114 481 0, 90 496 1, 68 510 1, 47 522 0, 35 522 1, 11 522 0, 6 481 1 -213 -14 0 227 657;68 0 1, 68 555 1, 146 555 1, 146 0 1, -14 602 1, -14 657 1, 227 657 1, 227 602 1 -171 -56 0 184 537;48 0 1, 48 407 1, 122 407 1, 122 0 1, -56 481 1, -56 537 1, 184 537 1, 184 481 1 -213 -18 0 232 722;68 0 1, 68 555 1, 146 555 1, 146 0 1, -18 722 1, 28 722 1, 36 687 0, 56 672 1, 76 657 0, 107 657 1, 142 657 0, 162 675 1, 179 690 0, 186 722 1, 232 722 1, 226 672 0, 198 641 1, 163 602 0, 107 602 1, 48 602 0, 12 645 1, -12 674 0 -171 -40 0 210 602;48 0 1, 48 407 1, 122 407 1, 122 0 1, -40 602 1, 6 602 1, 14 566 0, 35 551 1, 54 537 0, 85 537 1, 120 537 0, 141 555 1, 157 570 0, 164 602 1, 210 602 1, 204 551 0, 177 521 1, 141 481 0, 85 481 1, 26 481 0, -9 524 1, -34 554 0 -213 45 -139 173 555;68 0 1, 68 555 1, 146 555 1, 146 0 1, 104 0 1, 144 0 1, 96 -30 0, 96 -67 1, 96 -103 0, 140 -103 1, 159 -103 0, 173 -98 1, 173 -128 1, 150 -139 0, 121 -139 1, 45 -139 0, 45 -80 1, 45 -34 0 -171 0 -139 128 555;48 0 1, 48 407 1, 122 407 1, 122 0 1, 48 481 1, 48 555 1, 122 555 1, 122 481 1, 59 0 1, 99 0 1, 51 -30 0, 51 -67 1, 51 -103 0, 94 -103 1, 114 -103 0, 128 -98 1, 128 -128 1, 105 -139 0, 76 -139 1, 0 -139 0, 0 -80 1, 0 -34 0 -213 68 0 146 675;68 0 1, 68 555 1, 146 555 1, 146 0 1, 70 602 1, 70 675 1, 144 675 1, 144 602 1 -564 68 -111 507 555;68 0 1, 68 555 1, 146 555 1, 146 0 1, 210 -87 1, 210 -19 1, 275 -48 0, 330 -48 1, 395 -48 0, 413 -18 1, 428 7 0, 428 68 1, 428 555 1, 507 555 1, 507 70 1, 507 -111 0, 327 -111 1, 266 -111 0 -341 48 -157 316 555;48 0 1, 48 407 1, 122 407 1, 122 0 1, 48 481 1, 48 555 1, 122 555 1, 122 481 1, 134 -145 1, 134 -87 1, 164 -102 0, 190 -102 1, 227 -102 0, 235 -74 1, 242 -51 0, 242 0 1, 242 407 1, 316 407 1, 316 0 1, 316 -157 0, 196 -157 1, 163 -157 0, 242 481 1, 242 555 1, 316 555 1, 316 481 1 -384 18 -111 398 722;18 -87 1, 18 -19 1, 83 -48 0, 138 -48 1, 203 -48 0, 221 -18 1, 236 7 0, 236 68 1, 236 555 1, 315 555 1, 315 70 1, 315 -111 0, 135 -111 1, 74 -111 0, 135 602 1, 226 722 1, 308 722 1, 398 602 1, 342 602 1, 267 677 1, 266 677 1, 191 602 1 -171 -58 -157 212 602;-58 -145 1, -58 -87 1, -28 -102 0, -2 -102 1, 35 -102 0, 43 -74 1, 50 -51 0, 50 0 1, 50 407 1, 124 407 1, 124 0 1, 124 -157 0, 4 -157 1, -29 -157 0, -50 481 1, 40 602 1, 122 602 1, 212 481 1, 156 481 1, 81 557 1, 80 557 1, 5 481 1 -512 72 -162 494 555;72 0 1, 72 555 1, 146 555 1, 146 282 1, 376 555 1, 455 555 1, 232 290 1, 494 0 1, 394 0 1, 146 281 1, 146 0 1, 183 -158 1, 183 -126 1, 204 -129 0, 219 -129 1, 260 -129 0, 260 -104 1, 260 -77 0, 201 -71 1, 201 -42 1, 251 -43 0, 276 -54 1, 311 -69 0, 311 -105 1, 311 -162 0, 230 -162 1, 207 -162 0 -384 58 -162 377 592;58 0 1, 58 592 1, 132 592 1, 132 210 1, 268 407 1, 339 407 1, 209 215 1, 377 0 1, 287 0 1, 132 209 1, 132 0 1, 128 -158 1, 128 -126 1, 149 -129 0, 164 -129 1, 205 -129 0, 205 -104 1, 205 -77 0, 146 -71 1, 146 -42 1, 196 -43 0, 221 -54 1, 256 -69 0, 256 -105 1, 256 -162 0, 175 -162 1, 153 -162 0 -384 58 0 377 407;58 0 1, 58 407 1, 132 407 1, 132 210 1, 268 407 1, 339 407 1, 209 215 1, 377 0 1, 287 0 1, 132 209 1, 132 0 1 -427 62 0 413 722;62 0 1, 62 555 1, 141 555 1, 141 59 1, 413 59 1, 413 0 1, 66 602 1, 157 722 1, 242 722 1, 122 602 1 -171 40 0 216 730;48 0 1, 48 592 1, 122 592 1, 122 0 1, 40 609 1, 131 730 1, 216 730 1, 96 609 1 -427 62 -162 413 555;62 0 1, 62 555 1, 141 555 1, 141 59 1, 413 59 1, 413 0 1, 168 -158 1, 168 -126 1, 190 -129 0, 205 -129 1, 246 -129 0, 246 -104 1, 246 -77 0, 187 -71 1, 187 -42 1, 237 -43 0, 262 -54 1, 297 -69 0, 297 -105 1, 297 -162 0, 215 -162 1, 193 -162 0 -171 0 -162 128 592;48 0 1, 48 592 1, 122 592 1, 122 0 1, 0 -158 1, 0 -126 1, 21 -129 0, 36 -129 1, 77 -129 0, 77 -104 1, 77 -77 0, 18 -71 1, 18 -42 1, 68 -43 0, 93 -54 1, 128 -69 0, 128 -105 1, 128 -162 0, 47 -162 1, 25 -162 0 -427 62 0 413 555;62 0 1, 62 555 1, 141 555 1, 141 59 1, 413 59 1, 413 0 1, 252 385 1, 252 407 1, 280 415 0, 280 475 1, 280 481 1, 252 481 1, 252 555 1, 326 555 1, 326 491 1, 325 393 0 -224 48 0 229 592;48 0 1, 48 592 1, 122 592 1, 122 0 1, 155 422 1, 155 444 1, 183 452 0, 183 512 1, 183 518 1, 155 518 1, 155 592 1, 229 592 1, 229 528 1, 228 430 0 -427 62 0 413 555;62 0 1, 62 555 1, 141 555 1, 141 59 1, 413 59 1, 413 0 1, 279 241 1, 279 315 1, 353 315 1, 353 241 1 -257 48 0 252 592;48 0 1, 48 592 1, 122 592 1, 122 0 1, 178 241 1, 178 315 1, 252 315 1, 252 241 1 -427 6 0 413 555;62 0 1, 62 260 1, 6 230 1, 6 293 1, 62 323 1, 62 555 1, 141 555 1, 141 366 1, 233 416 1, 233 353 1, 141 303 1, 141 59 1, 413 59 1, 413 0 1 -171 -3 0 173 592;48 0 1, 48 270 1, -3 243 1, -3 305 1, 48 333 1, 48 592 1, 123 592 1, 123 374 1, 173 399 1, 173 338 1, 123 311 1, 123 0 1 -555 62 0 492 722;62 0 1, 62 555 1, 139 555 1, 425 126 1, 425 555 1, 492 555 1, 492 0 1, 415 0 1, 129 429 1, 129 0 1, 222 602 1, 312 722 1, 398 722 1, 277 602 1 -427 58 0 374 602;58 0 1, 58 407 1, 132 407 1, 132 331 1, 159 369 0, 186 388 1, 224 416 0, 270 416 1, 374 416 0, 374 293 1, 374 0 1, 300 0 1, 300 269 1, 300 318 0, 290 335 1, 279 353 0, 251 353 1, 190 353 0, 132 264 1, 132 0 1, 168 481 1, 259 602 1, 344 602 1, 224 481 1 -555 62 -162 492 555;62 0 1, 62 555 1, 139 555 1, 425 126 1, 425 555 1, 492 555 1, 492 0 1, 415 0 1, 129 429 1, 129 0 1, 194 -158 1, 194 -126 1, 216 -129 0, 231 -129 1, 272 -129 0, 272 -104 1, 272 -77 0, 213 -71 1, 213 -42 1, 263 -43 0, 288 -54 1, 323 -69 0, 323 -105 1, 323 -162 0, 241 -162 1, 219 -162 0 -427 58 -162 374 416;58 0 1, 58 407 1, 132 407 1, 132 331 1, 159 369 0, 186 388 1, 224 416 0, 270 416 1, 374 416 0, 374 293 1, 374 0 1, 300 0 1, 300 269 1, 300 318 0, 290 335 1, 279 353 0, 251 353 1, 190 353 0, 132 264 1, 132 0 1, 128 -158 1, 128 -126 1, 149 -129 0, 164 -129 1, 205 -129 0, 205 -104 1, 205 -77 0, 146 -71 1, 146 -42 1, 196 -43 0, 221 -54 1, 256 -69 0, 256 -105 1, 256 -162 0, 175 -162 1, 153 -162 0 -555 62 0 492 722;62 0 1, 62 555 1, 139 555 1, 425 126 1, 425 555 1, 492 555 1, 492 0 1, 415 0 1, 129 429 1, 129 0 1, 408 722 1, 318 602 1, 236 602 1, 146 722 1, 201 722 1, 277 646 1, 278 646 1, 353 722 1 -427 58 0 374 602;58 0 1, 58 407 1, 132 407 1, 132 331 1, 159 369 0, 186 388 1, 224 416 0, 270 416 1, 374 416 0, 374 293 1, 374 0 1, 300 0 1, 300 269 1, 300 318 0, 290 335 1, 279 353 0, 251 353 1, 190 353 0, 132 264 1, 132 0 1, 323 602 1, 233 481 1, 151 481 1, 61 602 1, 116 602 1, 192 526 1, 192 526 1, 268 602 1 -464 0 0 411 592;95 0 1, 95 407 1, 168 407 1, 168 331 1, 196 369 0, 222 388 1, 261 416 0, 307 416 1, 411 416 0, 411 293 1, 411 0 1, 336 0 1, 336 269 1, 336 318 0, 326 335 1, 315 353 0, 287 353 1, 227 353 0, 168 264 1, 168 0 1, 0 422 1, 0 444 1, 29 452 0, 29 512 1, 29 518 1, 0 518 1, 0 592 1, 74 592 1, 74 528 1, 74 430 0 -555 62 -158 492 555;62 0 1, 62 555 1, 139 555 1, 425 126 1, 425 555 1, 492 555 1, 492 -35 1, 492 -158 0, 373 -158 1, 345 -158 0, 317 -150 1, 317 -92 1, 341 -102 0, 369 -102 1, 425 -102 0, 425 -21 1, 425 -15 1, 129 429 1, 129 0 1 -427 58 -158 374 416;58 0 1, 58 407 1, 132 407 1, 132 331 1, 159 369 0, 186 388 1, 224 416 0, 270 416 1, 374 416 0, 374 293 1, 374 -35 1, 374 -158 0, 255 -158 1, 227 -158 0, 198 -150 1, 198 -92 1, 222 -102 0, 244 -102 1, 300 -102 0, 300 -21 1, 300 269 1, 300 318 0, 290 335 1, 279 353 0, 251 353 1, 190 353 0, 132 264 1, 132 0 1 -597 35 -14 563 657;299 569 1, 419 569 0, 491 490 1, 563 410 0, 563 278 1, 563 144 0, 491 65 1, 419 -14 0, 295 -14 1, 189 -14 0, 121 51 1, 35 132 0, 35 278 1, 35 411 0, 107 490 1, 179 569 0, 299 510 1, 214 510 0, 167 449 1, 119 388 0, 119 278 1, 119 169 0, 167 107 1, 213 45 0, 297 45 1, 375 45 0, 421 95 1, 479 156 0, 479 278 1, 479 388 0, 431 449 1, 383 510 0, 179 602 1, 179 657 1, 419 657 1, 419 602 1 -427 32 -9 395 537;213 416 1, 297 416 0, 346 359 1, 395 303 0, 395 204 1, 395 104 0, 346 47 1, 297 -9 0, 211 -9 1, 137 -9 0, 91 38 1, 32 96 0, 32 204 1, 32 302 0, 81 359 1, 130 416 0, 213 361 1, 112 361 0, 112 204 1, 112 46 0, 213 46 1, 315 46 0, 315 205 1, 315 361 0, 72 481 1, 72 537 1, 312 537 1, 312 481 1 -597 35 -14 563 722;299 569 1, 419 569 0, 491 490 1, 563 410 0, 563 278 1, 563 144 0, 491 65 1, 419 -14 0, 295 -14 1, 189 -14 0, 121 51 1, 35 132 0, 35 278 1, 35 411 0, 107 490 1, 179 569 0, 299 510 1, 214 510 0, 167 449 1, 119 388 0, 119 278 1, 119 169 0, 167 107 1, 213 45 0, 297 45 1, 375 45 0, 421 95 1, 479 156 0, 479 278 1, 479 388 0, 431 449 1, 383 510 0, 174 722 1, 220 722 1, 228 687 0, 248 672 1, 268 657 0, 299 657 1, 334 657 0, 354 675 1, 371 690 0, 378 722 1, 424 722 1, 418 672 0, 390 641 1, 355 602 0, 299 602 1, 240 602 0, 204 645 1, 180 674 0 -427 32 -9 395 602;213 416 1, 297 416 0, 346 359 1, 395 303 0, 395 204 1, 395 104 0, 346 47 1, 297 -9 0, 211 -9 1, 137 -9 0, 91 38 1, 32 96 0, 32 204 1, 32 302 0, 81 359 1, 130 416 0, 213 361 1, 112 361 0, 112 204 1, 112 46 0, 213 46 1, 315 46 0, 315 205 1, 315 361 0, 89 602 1, 135 602 1, 143 567 0, 163 551 1, 182 537 0, 213 537 1, 249 537 0, 269 555 1, 285 570 0, 292 602 1, 338 602 1, 332 551 0, 305 521 1, 269 481 0, 213 481 1, 155 481 0, 119 524 1, 95 553 0 -597 35 -14 563 722;299 569 1, 419 569 0, 491 490 1, 563 410 0, 563 278 1, 563 144 0, 491 65 1, 419 -14 0, 295 -14 1, 189 -14 0, 121 51 1, 35 132 0, 35 278 1, 35 411 0, 107 490 1, 179 569 0, 299 510 1, 214 510 0, 167 449 1, 119 388 0, 119 278 1, 119 169 0, 167 107 1, 213 45 0, 297 45 1, 375 45 0, 421 95 1, 479 156 0, 479 278 1, 479 388 0, 431 449 1, 383 510 0, 212 602 1, 303 722 1, 374 722 1, 254 602 1, 344 602 1, 434 722 1, 506 722 1, 386 602 1 -427 32 -9 403 602;213 416 1, 297 416 0, 346 359 1, 395 303 0, 395 204 1, 395 104 0, 346 47 1, 297 -9 0, 211 -9 1, 137 -9 0, 91 38 1, 32 96 0, 32 204 1, 32 302 0, 81 359 1, 130 416 0, 213 361 1, 112 361 0, 112 204 1, 112 46 0, 213 46 1, 315 46 0, 315 205 1, 315 361 0, 109 481 1, 199 602 1, 271 602 1, 151 481 1, 241 481 1, 331 602 1, 403 602 1, 283 481 1 -555 62 0 538 722;62 0 1, 62 555 1, 294 555 1, 465 555 0, 465 417 1, 465 350 0, 423 306 1, 399 281 0, 353 260 1, 538 0 1, 441 0 1, 283 235 1, 141 235 1, 141 0 1, 141 294 1, 229 294 1, 309 294 0, 346 321 1, 384 350 0, 384 408 1, 384 456 0, 353 476 1, 323 496 0, 253 496 1, 141 496 1, 196 602 1, 287 722 1, 372 722 1, 252 602 1 -256 58 0 280 602;58 0 1, 58 407 1, 132 407 1, 132 331 1, 148 369 0, 166 389 1, 193 416 0, 230 416 1, 237 416 0, 251 414 1, 251 345 1, 231 352 0, 219 352 1, 178 352 0, 132 269 1, 132 0 1, 104 481 1, 195 602 1, 280 602 1, 160 481 1 -555 62 -162 538 555;62 0 1, 62 555 1, 294 555 1, 465 555 0, 465 417 1, 465 350 0, 423 306 1, 399 281 0, 353 260 1, 538 0 1, 441 0 1, 283 235 1, 141 235 1, 141 0 1, 141 294 1, 229 294 1, 309 294 0, 346 321 1, 384 350 0, 384 408 1, 384 456 0, 353 476 1, 323 496 0, 253 496 1, 141 496 1, 196 -158 1, 196 -126 1, 218 -129 0, 233 -129 1, 274 -129 0, 274 -104 1, 274 -77 0, 215 -71 1, 215 -42 1, 265 -43 0, 290 -54 1, 324 -69 0, 324 -105 1, 324 -162 0, 243 -162 1, 221 -162 0 -256 58 -162 251 416;58 0 1, 58 407 1, 132 407 1, 132 331 1, 148 369 0, 166 389 1, 193 416 0, 230 416 1, 237 416 0, 251 414 1, 251 345 1, 231 352 0, 219 352 1, 178 352 0, 132 269 1, 132 0 1, 64 -158 1, 64 -126 1, 85 -129 0, 100 -129 1, 141 -129 0, 141 -104 1, 141 -77 0, 82 -71 1, 82 -42 1, 132 -43 0, 157 -54 1, 192 -69 0, 192 -105 1, 192 -162 0, 111 -162 1, 89 -162 0 -555 62 0 538 722;62 0 1, 62 555 1, 294 555 1, 465 555 0, 465 417 1, 465 350 0, 423 306 1, 399 281 0, 353 260 1, 538 0 1, 441 0 1, 283 235 1, 141 235 1, 141 0 1, 141 294 1, 229 294 1, 309 294 0, 346 321 1, 384 350 0, 384 408 1, 384 456 0, 353 476 1, 323 496 0, 253 496 1, 141 496 1, 368 722 1, 278 602 1, 196 602 1, 106 722 1, 161 722 1, 237 646 1, 237 646 1, 313 722 1 -256 -3 0 259 602;58 0 1, 58 407 1, 132 407 1, 132 331 1, 148 369 0, 166 389 1, 193 416 0, 230 416 1, 237 416 0, 251 414 1, 251 345 1, 231 352 0, 219 352 1, 178 352 0, 132 269 1, 132 0 1, 259 602 1, 169 481 1, 87 481 1, -3 602 1, 52 602 1, 128 526 1, 128 526 1, 204 602 1 -512 45 -14 466 722;45 20 1, 45 98 1, 156 45 0, 264 45 1, 385 45 0, 385 135 1, 385 181 0, 352 203 1, 326 220 0, 269 239 1, 193 264 1, 48 311 0, 48 421 1, 48 569 0, 251 569 1, 338 569 0, 432 545 1, 432 473 1, 334 510 0, 246 510 1, 124 510 0, 124 427 1, 124 394 0, 147 374 1, 171 354 0, 230 334 1, 308 309 1, 395 281 0, 431 244 1, 466 207 0, 466 146 1, 466 72 0, 411 29 1, 357 -14 0, 261 -14 1, 167 -14 0, 196 602 1, 287 722 1, 372 722 1, 252 602 1 -384 44 -9 344 602;44 14 1, 44 82 1, 118 46 0, 181 46 1, 266 46 0, 266 106 1, 266 147 0, 207 167 1, 141 189 1, 46 220 0, 46 303 1, 46 416 0, 201 416 1, 246 416 0, 309 404 1, 309 342 1, 253 361 0, 196 361 1, 119 361 0, 119 310 1, 119 273 0, 172 256 1, 231 237 1, 341 201 0, 341 113 1, 341 57 0, 297 24 1, 254 -9 0, 178 -9 1, 119 -9 0, 168 481 1, 259 602 1, 344 602 1, 224 481 1 -512 45 -14 466 722;45 20 1, 45 98 1, 156 45 0, 264 45 1, 385 45 0, 385 135 1, 385 181 0, 352 203 1, 326 220 0, 269 239 1, 193 264 1, 48 311 0, 48 421 1, 48 569 0, 251 569 1, 338 569 0, 432 545 1, 432 473 1, 334 510 0, 246 510 1, 124 510 0, 124 427 1, 124 394 0, 147 374 1, 171 354 0, 230 334 1, 308 309 1, 395 281 0, 431 244 1, 466 207 0, 466 146 1, 466 72 0, 411 29 1, 357 -14 0, 261 -14 1, 167 -14 0, 120 602 1, 211 722 1, 293 722 1, 383 602 1, 327 602 1, 252 677 1, 251 677 1, 176 602 1 -384 44 -9 341 602;44 14 1, 44 82 1, 118 46 0, 181 46 1, 266 46 0, 266 106 1, 266 147 0, 207 167 1, 141 189 1, 46 220 0, 46 303 1, 46 416 0, 201 416 1, 246 416 0, 309 404 1, 309 342 1, 253 361 0, 196 361 1, 119 361 0, 119 310 1, 119 273 0, 172 256 1, 231 237 1, 341 201 0, 341 113 1, 341 57 0, 297 24 1, 254 -9 0, 178 -9 1, 119 -9 0, 75 481 1, 165 602 1, 247 602 1, 337 481 1, 282 481 1, 206 557 1, 206 557 1, 130 481 1 -512 45 -162 466 569;45 20 1, 45 98 1, 156 45 0, 264 45 1, 385 45 0, 385 135 1, 385 181 0, 352 203 1, 326 220 0, 269 239 1, 193 264 1, 48 311 0, 48 421 1, 48 569 0, 251 569 1, 338 569 0, 432 545 1, 432 473 1, 334 510 0, 246 510 1, 124 510 0, 124 427 1, 124 394 0, 147 374 1, 171 354 0, 230 334 1, 308 309 1, 395 281 0, 431 244 1, 466 207 0, 466 147 1, 466 72 0, 411 29 1, 357 -14 0, 261 -14 1, 167 -14 0, 225 0 1, 262 0 1, 239 -41 1, 266 -42 0, 286 -56 1, 312 -74 0, 312 -101 1, 312 -126 0, 290 -144 1, 268 -162 0, 236 -162 1, 211 -162 0, 182 -154 1, 182 -124 1, 201 -129 0, 221 -129 1, 260 -129 0, 260 -102 1, 260 -67 0, 190 -66 1 -384 44 -162 341 416;44 14 1, 44 82 1, 118 46 0, 181 46 1, 266 46 0, 266 106 1, 266 147 0, 207 167 1, 141 189 1, 46 220 0, 46 303 1, 46 416 0, 201 416 1, 246 416 0, 309 404 1, 309 342 1, 253 361 0, 196 361 1, 119 361 0, 119 310 1, 119 273 0, 172 256 1, 231 237 1, 341 201 0, 341 113 1, 341 57 0, 297 24 1, 254 -9 0, 178 -9 1, 119 -9 0, 171 0 1, 207 0 1, 184 -41 1, 211 -42 0, 231 -56 1, 257 -74 0, 257 -101 1, 257 -126 0, 235 -144 1, 213 -162 0, 181 -162 1, 156 -162 0, 127 -154 1, 127 -124 1, 146 -129 0, 166 -129 1, 205 -129 0, 205 -102 1, 205 -67 0, 135 -66 1 -512 45 -14 466 722;45 20 1, 45 98 1, 156 45 0, 264 45 1, 385 45 0, 385 135 1, 385 181 0, 352 203 1, 326 220 0, 269 239 1, 193 264 1, 48 311 0, 48 421 1, 48 569 0, 251 569 1, 338 569 0, 432 545 1, 432 473 1, 334 510 0, 246 510 1, 124 510 0, 124 427 1, 124 394 0, 147 374 1, 171 354 0, 230 334 1, 308 309 1, 395 281 0, 431 244 1, 466 207 0, 466 146 1, 466 72 0, 411 29 1, 357 -14 0, 261 -14 1, 167 -14 0, 383 722 1, 293 602 1, 211 602 1, 120 722 1, 176 722 1, 251 646 1, 252 646 1, 327 722 1 -384 44 -9 341 602;44 14 1, 44 82 1, 118 46 0, 181 46 1, 266 46 0, 266 106 1, 266 147 0, 207 167 1, 141 189 1, 46 220 0, 46 303 1, 46 416 0, 201 416 1, 246 416 0, 309 404 1, 309 342 1, 253 361 0, 196 361 1, 119 361 0, 119 310 1, 119 273 0, 172 256 1, 231 237 1, 341 201 0, 341 113 1, 341 57 0, 297 24 1, 254 -9 0, 178 -9 1, 119 -9 0, 323 602 1, 233 481 1, 151 481 1, 61 602 1, 116 602 1, 192 526 1, 192 526 1, 268 602 1 -469 8 -162 461 555;195 0 1, 195 496 1, 8 496 1, 8 555 1, 461 555 1, 461 496 1, 274 496 1, 274 0 1, 220 0 1, 256 0 1, 234 -41 1, 261 -42 0, 280 -56 1, 306 -74 0, 306 -101 1, 306 -126 0, 285 -144 1, 263 -162 0, 230 -162 1, 205 -162 0, 176 -154 1, 176 -124 1, 195 -129 0, 215 -129 1, 254 -129 0, 254 -102 1, 254 -67 0, 184 -66 1 -213 11 -162 210 488;199 -2 1, 176 -9 0, 156 -9 1, 57 -9 0, 57 113 1, 57 352 1, 11 352 1, 11 407 1, 57 407 1, 57 481 1, 131 488 1, 131 407 1, 210 407 1, 210 352 1, 131 352 1, 131 126 1, 131 78 0, 139 62 1, 147 46 0, 174 46 1, 188 46 0, 199 50 1, 112 0 1, 149 0 1, 126 -41 1, 153 -42 0, 173 -56 1, 199 -74 0, 199 -101 1, 199 -126 0, 177 -144 1, 155 -162 0, 123 -162 1, 97 -162 0, 69 -154 1, 69 -124 1, 87 -129 0, 108 -129 1, 147 -129 0, 147 -102 1, 147 -67 0, 77 -66 1 -469 8 0 461 722;195 0 1, 195 496 1, 8 496 1, 8 555 1, 461 555 1, 461 496 1, 274 496 1, 274 0 1, 366 722 1, 275 602 1, 194 602 1, 103 722 1, 159 722 1, 234 646 1, 235 646 1, 310 722 1 -288 11 -9 270 633;199 -2 1, 176 -9 0, 156 -9 1, 57 -9 0, 57 113 1, 57 352 1, 11 352 1, 11 407 1, 57 407 1, 57 481 1, 131 488 1, 131 407 1, 210 407 1, 210 352 1, 131 352 1, 131 126 1, 131 78 0, 139 62 1, 147 46 0, 174 46 1, 188 46 0, 199 50 1, 196 463 1, 196 485 1, 224 493 0, 224 553 1, 224 559 1, 196 559 1, 196 633 1, 270 633 1, 270 569 1, 269 471 0 -469 8 0 461 555;195 0 1, 195 268 1, 81 268 1, 81 324 1, 195 324 1, 195 496 1, 8 496 1, 8 555 1, 461 555 1, 461 496 1, 274 496 1, 274 324 1, 387 324 1, 387 268 1, 274 268 1, 274 0 1 -213 11 -9 210 488;57 213 1, 11 213 1, 11 259 1, 57 259 1, 57 352 1, 11 352 1, 11 407 1, 57 407 1, 57 481 1, 131 488 1, 131 407 1, 210 407 1, 210 352 1, 131 352 1, 131 259 1, 210 259 1, 210 213 1, 131 213 1, 131 126 1, 131 78 0, 139 62 1, 147 46 0, 174 46 1, 188 46 0, 199 50 1, 199 -2 1, 176 -9 0, 156 -9 1, 57 -9 0, 57 113 1 -555 62 -14 492 689;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 157 602 1, 160 636 0, 169 656 1, 186 689 0, 227 689 1, 254 689 0, 277 675 1, 300 661 1, 321 648 0, 332 648 1, 357 648 0, 361 689 1, 407 689 1, 404 654 0, 395 635 1, 378 602 0, 338 602 1, 311 602 0, 287 616 1, 264 630 1, 244 643 0, 232 643 1, 207 643 0, 203 602 1 -427 53 -9 369 569;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 86 481 1, 89 516 0, 98 535 1, 116 569 0, 156 569 1, 183 569 0, 206 555 1, 229 541 1, 250 528 0, 261 528 1, 286 528 0, 290 569 1, 336 569 1, 333 534 0, 324 515 1, 307 481 0, 267 481 1, 240 481 0, 216 496 1, 194 510 1, 173 522 0, 161 522 1, 137 522 0, 132 481 1 -555 62 -14 492 657;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 162 602 1, 162 657 1, 402 657 1, 402 602 1 -427 53 -9 369 537;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 72 481 1, 72 537 1, 312 537 1, 312 481 1 -555 62 -14 492 722;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 157 722 1, 203 722 1, 211 687 0, 231 672 1, 251 657 0, 282 657 1, 317 657 0, 338 675 1, 354 690 0, 361 722 1, 407 722 1, 401 672 0, 374 641 1, 338 602 0, 282 602 1, 223 602 0, 188 645 1, 163 674 0 -427 53 -9 369 602;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 86 602 1, 132 602 1, 140 567 0, 161 551 1, 180 537 0, 211 537 1, 246 537 0, 267 555 1, 283 570 0, 290 602 1, 336 602 1, 330 551 0, 303 521 1, 267 481 0, 211 481 1, 152 481 0, 117 524 1, 93 553 0 -555 62 -14 492 762;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 282 762 1, 317 762 0, 342 738 1, 367 713 0, 367 678 1, 367 642 0, 342 617 1, 317 592 0, 281 592 1, 250 592 0, 227 612 1, 197 638 0, 197 677 1, 197 713 0, 222 737 1, 247 762 0, 282 730 1, 260 730 0, 245 714 1, 229 699 0, 229 677 1, 229 656 0, 245 640 1, 260 624 0, 281 624 1, 302 624 0, 316 637 1, 335 653 0, 335 678 1, 335 699 0, 319 714 1, 304 730 0 -427 53 -9 369 651;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 192 651 1, 227 651 0, 252 627 1, 277 602 0, 277 567 1, 277 531 0, 252 506 1, 227 481 0, 191 481 1, 160 481 0, 137 501 1, 107 527 0, 107 566 1, 107 602 0, 132 626 1, 156 651 0, 192 619 1, 170 619 0, 154 603 1, 139 588 0, 139 566 1, 139 545 0, 154 529 1, 170 513 0, 191 513 1, 211 513 0, 226 526 1, 245 542 0, 245 567 1, 245 588 0, 229 603 1, 214 619 0 -555 62 -14 492 722;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 187 602 1, 278 722 1, 349 722 1, 229 602 1, 319 602 1, 409 722 1, 481 722 1, 361 602 1 -427 53 -9 403 602;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 109 481 1, 199 602 1, 271 602 1, 151 481 1, 241 481 1, 331 602 1, 403 602 1, 283 481 1 -555 62 -139 492 555;62 555 1, 141 555 1, 141 205 1, 141 146 0, 151 118 1, 160 90 0, 187 71 1, 225 45 0, 288 45 1, 363 45 0, 393 80 1, 423 115 0, 423 202 1, 423 555 1, 492 555 1, 492 203 1, 492 129 0, 477 91 1, 463 52 0, 423 24 1, 370 -14 0, 281 -14 1, 168 -14 0, 115 39 1, 62 91 0, 62 206 1, 300 0 1, 340 0 1, 292 -30 0, 292 -67 1, 292 -103 0, 335 -103 1, 355 -103 0, 369 -98 1, 369 -128 1, 346 -139 0, 317 -139 1, 241 -139 0, 241 -80 1, 241 -34 0 -427 53 -139 384 407;295 0 1, 295 76 1, 268 38 0, 242 19 1, 203 -9 0, 157 -9 1, 53 -9 0, 53 115 1, 53 407 1, 127 407 1, 127 139 1, 127 90 0, 137 72 1, 148 54 0, 176 54 1, 237 54 0, 295 143 1, 295 407 1, 369 407 1, 369 0 1, 315 0 1, 355 0 1, 307 -30 0, 307 -67 1, 307 -103 0, 350 -103 1, 370 -103 0, 384 -98 1, 384 -128 1, 361 -139 0, 332 -139 1, 256 -139 0, 256 -80 1, 256 -34 0 -725 9 0 716 722;152 0 1, 9 555 1, 85 555 1, 199 117 1, 329 555 1, 405 555 1, 530 121 1, 651 555 1, 716 555 1, 560 0 1, 482 0 1, 358 428 1, 230 0 1, 236 602 1, 326 722 1, 408 722 1, 498 602 1, 443 602 1, 367 677 1, 366 677 1, 291 602 1 -555 4 0 549 602;102 0 1, 4 407 1, 77 407 1, 150 101 1, 244 407 1, 318 407 1, 400 99 1, 486 407 1, 549 407 1, 435 0 1, 361 0 1, 275 315 1, 177 0 1, 149 481 1, 240 602 1, 321 602 1, 412 481 1, 356 481 1, 281 557 1, 280 557 1, 205 481 1 -512 11 0 501 722;210 0 1, 210 231 1, 11 555 1, 101 555 1, 259 298 1, 428 555 1, 501 555 1, 289 233 1, 289 0 1, 134 602 1, 224 722 1, 306 722 1, 396 602 1, 341 602 1, 265 677 1, 264 677 1, 189 602 1 -384 7 -148 380 602;152 0 1, 7 407 1, 82 407 1, 193 95 1, 314 407 1, 380 407 1, 164 -148 1, 87 -148 1, 67 481 1, 157 602 1, 239 602 1, 329 481 1, 274 481 1, 198 557 1, 198 557 1, 122 481 1 -469 38 0 431 722;38 0 1, 38 63 1, 336 496 1, 56 496 1, 56 555 1, 431 555 1, 431 496 1, 132 63 1, 431 63 1, 431 0 1, 179 602 1, 269 722 1, 355 722 1, 234 602 1 -384 28 0 356 602;28 0 1, 28 56 1, 261 352 1, 39 352 1, 39 407 1, 352 407 1, 352 352 1, 119 56 1, 356 56 1, 356 0 1, 168 481 1, 259 602 1, 344 602 1, 224 481 1 -469 38 0 431 675;38 0 1, 38 63 1, 336 496 1, 56 496 1, 56 555 1, 431 555 1, 431 496 1, 132 63 1, 431 63 1, 431 0 1, 202 602 1, 202 675 1, 276 675 1, 276 602 1 -384 28 0 356 555;28 0 1, 28 56 1, 261 352 1, 39 352 1, 39 407 1, 352 407 1, 352 352 1, 119 56 1, 356 56 1, 356 0 1, 155 481 1, 155 555 1, 229 555 1, 229 481 1 -469 38 0 431 722;38 0 1, 38 63 1, 336 496 1, 56 496 1, 56 555 1, 431 555 1, 431 496 1, 132 63 1, 431 63 1, 431 0 1, 370 722 1, 280 602 1, 198 602 1, 108 722 1, 163 722 1, 239 646 1, 239 646 1, 315 722 1 -384 28 0 356 602;28 0 1, 28 56 1, 261 352 1, 39 352 1, 39 407 1, 352 407 1, 352 352 1, 119 56 1, 356 56 1, 356 0 1, 323 602 1, 233 481 1, 151 481 1, 61 602 1, 116 602 1, 192 526 1, 192 526 1, 268 602 1 -171 3 0 192 602;54 0 1, 54 352 1, 3 352 1, 3 407 1, 54 407 1, 54 456 1, 54 525 0, 84 563 1, 114 602 0, 167 602 1, 175 602 0, 192 600 1, 192 545 1, 181 546 0, 175 546 1, 128 546 0, 128 464 1, 128 0 1 -512 45 -162 466 569;45 20 1, 45 98 1, 156 45 0, 264 45 1, 385 45 0, 385 135 1, 385 181 0, 352 203 1, 326 220 0, 269 239 1, 193 264 1, 48 311 0, 48 421 1, 48 569 0, 251 569 1, 338 569 0, 432 545 1, 432 473 1, 334 510 0, 246 510 1, 124 510 0, 124 427 1, 124 394 0, 147 374 1, 171 354 0, 230 334 1, 308 309 1, 395 281 0, 431 244 1, 466 207 0, 466 147 1, 466 72 0, 411 29 1, 357 -14 0, 261 -14 1, 167 -14 0, 197 -158 1, 197 -126 1, 218 -129 0, 233 -129 1, 274 -129 0, 274 -104 1, 274 -77 0, 215 -71 1, 215 -42 1, 265 -43 0, 290 -54 1, 325 -69 0, 325 -105 1, 325 -162 0, 243 -162 1, 221 -162 0 -384 44 -162 341 416;44 14 1, 44 82 1, 118 46 0, 181 46 1, 266 46 0, 266 106 1, 266 147 0, 207 167 1, 141 189 1, 46 220 0, 46 303 1, 46 416 0, 201 416 1, 246 416 0, 309 404 1, 309 342 1, 253 361 0, 196 361 1, 119 361 0, 119 310 1, 119 273 0, 172 256 1, 231 237 1, 341 201 0, 341 113 1, 341 57 0, 297 24 1, 254 -9 0, 178 -9 1, 119 -9 0, 128 -158 1, 128 -126 1, 149 -129 0, 164 -129 1, 205 -129 0, 205 -104 1, 205 -77 0, 146 -71 1, 146 -42 1, 196 -43 0, 221 -54 1, 256 -69 0, 256 -105 1, 256 -162 0, 175 -162 1, 153 -162 0 -469 8 -162 461 555;195 0 1, 195 496 1, 8 496 1, 8 555 1, 461 555 1, 461 496 1, 274 496 1, 274 0 1, 177 -158 1, 177 -126 1, 198 -129 0, 213 -129 1, 254 -129 0, 254 -104 1, 254 -77 0, 195 -71 1, 195 -42 1, 245 -43 0, 270 -54 1, 305 -69 0, 305 -105 1, 305 -162 0, 224 -162 1, 201 -162 0 -213 11 -162 210 488;199 -2 1, 176 -9 0, 156 -9 1, 57 -9 0, 57 113 1, 57 352 1, 11 352 1, 11 407 1, 57 407 1, 57 481 1, 131 488 1, 131 407 1, 210 407 1, 210 352 1, 131 352 1, 131 126 1, 131 78 0, 139 62 1, 147 46 0, 174 46 1, 188 46 0, 199 50 1, 64 -158 1, 64 -126 1, 85 -129 0, 100 -129 1, 141 -129 0, 141 -104 1, 141 -77 0, 82 -71 1, 82 -42 1, 132 -43 0, 157 -54 1, 192 -69 0, 192 -105 1, 192 -162 0, 111 -162 1, 89 -162 0 -256 64 -162 192 -42;64 -158 1, 64 -126 1, 85 -129 0, 100 -129 1, 141 -129 0, 141 -104 1, 141 -77 0, 82 -71 1, 82 -42 1, 132 -43 0, 157 -54 1, 192 -69 0, 192 -105 1, 192 -162 0, 111 -162 1, 89 -162 0 -213 70 -120 144 407;70 -120 1, 70 -93 1, 96 -79 0, 96 -9 1, 96 0 1, 70 0 1, 70 74 1, 144 74 1, 144 12 1, 143 -102 0, 70 333 1, 70 407 1, 144 407 1, 144 333 1 -213 60 184 153 277;60 184 1, 60 277 1, 153 277 1, 153 184 1 -256 33 194 223 250;33 194 1, 33 250 1, 223 250 1, 223 194 1 -256 33 194 223 250;33 194 1, 33 250 1, 223 250 1, 223 194 1 -427 38 204 390 250;38 204 1, 38 250 1, 390 250 1, 390 204 1 -768 37 204 731 241;37 204 1, 37 241 1, 731 241 1, 731 204 1 -213 0 0 0 0; -427 37 546 390 602;37 546 1, 37 602 1, 390 602 1, 390 546 1 -427 32 -9 383 416;307 248 1, 306 284 0, 299 303 1, 280 361 0, 215 361 1, 169 361 0, 143 334 1, 117 308 0, 111 248 1, 380 72 1, 380 13 1, 304 -9 0, 240 -9 1, 145 -9 0, 89 50 1, 32 109 0, 32 209 1, 32 304 0, 82 360 1, 132 416 0, 216 416 1, 314 416 0, 354 347 1, 383 296 0, 382 215 1, 382 192 1, 110 192 1, 114 147 0, 125 124 1, 158 47 0, 256 47 1, 312 47 0 -449 39 194 409 250;39 194 1, 39 250 1, 409 250 1, 409 194 1 -128 -165 -14 293 569;-165 -14 1, 243 569 1, 293 569 1, -114 -14 1 -213 60 184 153 277;60 184 1, 60 277 1, 153 277 1, 153 184 1 -384 12 0 336 602;66 0 1, 66 352 1, 12 352 1, 12 407 1, 66 407 1, 66 456 1, 66 602 0, 181 602 1, 206 602 0, 236 592 1, 236 533 1, 209 546 0, 189 546 1, 162 546 0, 151 528 1, 140 510 0, 140 464 1, 140 407 1, 336 407 1, 336 0 1, 262 0 1, 262 352 1, 140 352 1, 140 0 1, 262 481 1, 262 555 1, 336 555 1, 336 481 1 -384 12 0 336 602;66 0 1, 66 352 1, 12 352 1, 12 407 1, 66 407 1, 66 456 1, 66 602 0, 179 602 1, 262 592 1, 336 592 1, 336 0 1, 262 0 1, 262 537 1, 246 540 1, 214 546 0, 192 546 1, 159 546 0, 148 524 1, 140 505 0, 140 464 1, 140 407 1, 206 407 1, 206 352 1, 140 352 1, 140 0 1 -256 1 222 251 555;154 222 1, 154 313 1, 1 313 1, 1 356 1, 152 555 1, 205 555 1, 205 357 1, 251 357 1, 251 313 1, 205 313 1, 205 222 1, 50 357 1, 154 357 1, 154 493 1 -171 -58 -157 124 407;-58 -145 1, -58 -87 1, -28 -102 0, -2 -102 1, 35 -102 0, 43 -74 1, 50 -51 0, 50 0 1, 50 407 1, 124 407 1, 124 0 1, 124 -157 0, 4 -157 1, -29 -157 0 -213 0 0 0 0; diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr-12pt-with-hinting.txt b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr-12pt-with-hinting.txt deleted file mode 100644 index 9c30f6773b..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr-12pt-with-hinting.txt +++ /dev/null @@ -1,392 +0,0 @@ -freetype version 2.5.1 -192 0 0 192 576;0 0 1, 0 576 1, 192 576 1, 192 0 1, 128 64 1, 128 512 1, 64 512 1, 64 64 1 -0 0 0 0 0; -192 0 0 0 0; -192 0 0 0 0; -192 64 0 128 576;64 0 1, 64 64 1, 128 64 1, 128 0 1, 72 128 1, 64 454 1, 64 576 1, 128 576 1, 128 454 1, 120 128 1 -256 0 384 256 576;44 384 1, 35 576 1, 108 576 1, 99 384 1, 173 384 1, 164 576 1, 238 576 1, 229 384 1 -448 0 0 448 576;47 25 1, 89 192 1, 9 192 1, 18 256 1, 100 256 1, 133 320 1, 44 320 1, 54 384 1, 144 384 1, 186 551 1, 234 551 1, 192 384 1, 291 384 1, 332 551 1, 380 551 1, 339 384 1, 418 384 1, 409 320 1, 327 320 1, 294 256 1, 383 256 1, 374 192 1, 283 192 1, 242 25 1, 194 25 1, 235 192 1, 137 192 1, 95 25 1, 148 256 1, 247 256 1, 279 320 1, 180 320 1 -448 64 -64 320 640;192 -46 1, 192 0 1, 135 0 0, 64 31 1, 64 95 1, 137 56 0, 192 56 1, 192 255 1, 124 298 0, 96 331 1, 64 368 0, 64 422 1, 64 486 0, 110 524 1, 142 550 0, 192 555 1, 192 602 1, 256 602 1, 256 555 1, 285 555 0, 320 530 1, 320 470 1, 282 500 0, 256 504 1, 256 307 1, 258 304 1, 263 298 0, 267 293 1, 270 290 1, 293 262 0, 305 237 1, 320 205 0, 320 155 1, 320 87 0, 297 42 1, 282 12 0, 256 0 1, 256 -46 1, 256 60 1, 256 85 0, 256 144 1, 256 175 0, 256 195 1, 256 210 0, 256 233 1, 192 331 1, 192 502 1, 128 479 0, 128 425 1, 128 376 0 -704 64 0 640 576;94 0 1, 531 576 1, 589 576 1, 152 0 1, 160 576 1, 204 576 0, 230 542 1, 256 507 0, 256 448 1, 256 389 0, 230 355 1, 204 320 0, 160 320 1, 115 320 0, 90 355 1, 64 389 0, 64 450 1, 64 502 0, 85 535 1, 112 576 0, 160 512 1, 146 512 0, 137 495 1, 128 477 0, 128 449 1, 128 422 0, 135 405 1, 144 384 0, 160 384 1, 174 384 0, 183 402 1, 192 419 0, 192 448 1, 192 477 0, 183 494 1, 174 512 0, 512 320 1, 571 320 0, 606 277 1, 640 234 0, 640 160 1, 640 86 0, 606 43 1, 571 0 0, 512 0 1, 453 0 0, 418 43 1, 384 86 0, 384 162 1, 384 228 0, 412 269 1, 448 320 0, 512 256 1, 483 256 0, 466 230 1, 448 203 0, 448 162 1, 448 122 0, 462 96 1, 480 64 0, 512 64 1, 541 64 0, 558 91 1, 576 117 0, 576 160 1, 576 203 0, 558 229 1, 541 256 0 -512 0 0 512 576;384 0 1, 357 35 1, 277 0 0, 205 0 1, 118 0 0, 59 52 1, 0 105 0, 0 185 1, 0 264 0, 56 313 1, 89 341 0, 152 363 1, 128 420 0, 128 461 1, 128 513 0, 163 545 1, 199 576 0, 260 576 1, 317 576 0, 351 548 1, 384 519 0, 384 472 1, 384 419 0, 335 381 1, 305 358 0, 248 337 1, 311 214 0, 373 133 1, 410 185 0, 410 287 1, 410 320 1, 483 320 1, 483 179 0, 408 90 1, 441 44 0, 485 0 1, 325 82 1, 251 173 0, 178 321 1, 127 303 0, 102 281 1, 64 249 0, 64 203 1, 64 145 0, 107 104 1, 151 64 0, 212 64 1, 260 64 0, 220 383 1, 266 396 0, 288 411 1, 320 433 0, 320 464 1, 320 512 0, 258 512 1, 192 512 0, 192 461 1, 192 431 0, 217 388 1 -128 0 384 128 576;45 384 1, 27 576 1, 120 576 1, 101 384 1 -256 64 -128 256 640;225 -60 1, 225 -111 1, 156 -58 0, 117 21 1, 64 123 0, 64 241 1, 64 364 0, 121 469 1, 160 541 0, 225 592 1, 225 541 1, 177 485 0, 155 426 1, 128 353 0, 128 241 1, 128 124 0, 158 48 1, 180 -7 0 -256 0 -128 192 640;31 541 1, 31 592 1, 100 539 0, 140 460 1, 192 358 0, 192 241 1, 192 117 0, 135 12 1, 96 -60 0, 31 -111 1, 31 -60 1, 79 -3 0, 101 55 1, 128 129 0, 128 241 1, 128 357 0, 98 433 1, 77 487 0 -320 0 256 320 576;267 483 1, 284 415 1, 180 383 1, 180 384 1, 180 389 0, 192 390 1, 192 390 1, 192 411 0, 170 423 1, 255 296 1, 210 266 1, 152 360 1, 171 362 0, 178 378 1, 88 266 1, 43 296 1, 120 378 1, 128 362 0, 147 360 1, 15 415 1, 32 483 1, 129 423 1, 118 410 0, 118 389 1, 118 389 1, 118 389 0, 118 387 1, 119 386 1, 119 384 0, 119 383 1, 122 576 1, 177 576 1, 165 427 1, 157 448 0, 149 448 1, 140 448 0, 133 427 1 -448 64 64 384 384;192 64 1, 192 192 1, 64 192 1, 64 256 1, 192 256 1, 192 384 1, 256 384 1, 256 256 1, 384 256 1, 384 192 1, 256 192 1, 256 64 1 -192 64 -192 128 64;64 -149 1, 64 -121 1, 89 -111 0, 89 -36 1, 89 -29 1, 64 -29 1, 64 64 1, 128 64 1, 128 -16 1, 128 -139 0 -256 64 192 192 256;64 192 1, 64 256 1, 192 256 1, 192 192 1 -192 64 0 128 64;64 0 1, 64 64 1, 128 64 1, 128 0 1 -192 -64 -128 256 576;-22 -128 1, 178 576 1, 236 576 1, 36 -128 1 -448 0 0 384 576;192 576 1, 280 576 0, 332 499 1, 384 422 0, 384 289 1, 384 154 0, 332 77 1, 280 0 0, 190 0 1, 112 0 0, 63 63 1, 0 142 0, 0 289 1, 0 422 0, 52 499 1, 104 576 0, 192 512 1, 130 512 0, 97 454 1, 64 395 0, 64 288 1, 64 183 0, 97 123 1, 130 64 0, 192 64 1, 248 64 0, 279 107 1, 320 165 0, 320 289 1, 320 397 0, 287 454 1, 252 512 0 -448 64 0 384 640;64 0 1, 64 64 1, 192 64 1, 192 502 1, 64 474 1, 64 531 1, 256 577 1, 256 64 1, 384 64 1, 384 0 1 -448 64 0 320 576;64 0 1, 64 64 1, 85 124 0, 134 187 1, 167 228 1, 197 266 1, 256 339 0, 256 414 1, 256 466 0, 232 491 1, 213 512 0, 178 512 1, 133 512 0, 64 486 1, 64 554 1, 129 576 0, 185 576 1, 247 576 0, 283 533 1, 320 490 0, 320 418 1, 320 368 0, 301 330 1, 282 290 0, 230 234 1, 208 211 1, 142 139 0, 129 64 1, 320 64 1, 320 0 1 -448 64 0 384 576;64 4 1, 64 76 1, 67 76 1, 78 74 0, 83 74 1, 129 68 0, 146 66 1, 173 64 0, 196 64 1, 260 64 0, 292 94 1, 320 119 0, 320 167 1, 320 222 0, 272 251 1, 225 280 0, 137 280 1, 108 280 1, 108 332 1, 131 332 1, 191 333 0, 223 360 1, 256 387 0, 256 435 1, 256 512 0, 172 512 1, 129 512 0, 64 500 1, 64 568 1, 126 576 0, 174 576 1, 257 576 0, 293 534 1, 320 502 0, 320 450 1, 320 391 0, 287 353 1, 267 331 0, 228 312 1, 278 301 0, 303 288 1, 384 248 0, 384 165 1, 384 90 0, 332 45 1, 279 0 0, 194 0 1, 148 0 0 -448 0 0 384 576;256 0 1, 256 128 1, 0 128 1, 0 187 1, 256 576 1, 320 576 1, 320 192 1, 384 192 1, 384 128 1, 320 128 1, 320 0 1, 75 192 1, 256 192 1, 256 473 1 -448 64 -64 320 576;64 -2 1, 64 67 1, 113 64 0, 154 64 1, 202 64 0, 229 98 1, 256 132 0, 256 189 1, 256 320 0, 102 320 1, 83 320 0, 64 297 1, 64 576 1, 320 576 1, 320 512 1, 128 512 1, 128 359 1, 212 357 0, 259 319 1, 320 269 0, 320 173 1, 320 92 0, 274 46 1, 227 0 0, 146 0 1, 111 0 0 -448 64 0 384 576;141 303 1, 187 384 0, 253 384 1, 314 384 0, 349 336 1, 384 288 0, 384 203 1, 384 110 0, 342 55 1, 300 0 0, 229 0 1, 152 0 0, 108 72 1, 64 144 0, 64 270 1, 64 414 0, 121 495 1, 179 576 0, 281 576 1, 327 576 0, 384 569 1, 384 502 1, 316 512 0, 278 512 1, 195 512 0, 162 434 1, 149 403 0, 144 364 1, 142 344 0, 229 320 1, 184 320 0, 156 288 1, 128 257 0, 128 203 1, 128 143 0, 157 103 1, 185 64 0, 231 64 1, 320 64 0, 320 187 1, 320 320 0 -448 64 0 384 576;93 0 1, 103 68 0, 121 118 1, 139 168 0, 185 255 1, 321 512 1, 64 512 1, 64 576 1, 384 576 1, 384 512 1, 192 180 0, 169 0 1 -448 64 0 384 576;147 313 1, 110 339 0, 91 363 1, 64 398 0, 64 438 1, 64 499 0, 110 537 1, 156 576 0, 230 576 1, 299 576 0, 342 543 1, 384 511 0, 384 457 1, 384 410 0, 347 367 1, 325 341 0, 283 313 1, 328 284 0, 351 254 1, 384 211 0, 384 155 1, 384 87 0, 338 43 1, 293 0 0, 221 0 1, 150 0 0, 107 41 1, 64 82 0, 64 150 1, 64 210 0, 94 257 1, 113 285 0, 242 338 1, 320 387 0, 320 441 1, 320 473 0, 294 493 1, 267 512 0, 222 512 1, 180 512 0, 154 494 1, 128 476 0, 128 445 1, 128 409 0, 173 378 1, 195 362 0, 188 282 1, 156 252 0, 143 229 1, 128 204 0, 128 165 1, 128 120 0, 155 92 1, 181 64 0, 225 64 1, 267 64 0, 293 88 1, 320 111 0, 320 149 1, 320 183 0, 298 206 1, 280 225 0, 236 253 1 -448 64 0 384 576;308 273 1, 262 192 0, 195 192 1, 134 192 0, 99 240 1, 64 288 0, 64 373 1, 64 466 0, 106 521 1, 148 576 0, 218 576 1, 296 576 0, 340 504 1, 384 432 0, 384 306 1, 384 162 0, 327 81 1, 269 0 0, 168 0 1, 120 0 0, 64 7 1, 64 74 1, 133 64 0, 171 64 1, 254 64 0, 287 143 1, 300 173 0, 305 212 1, 307 232 0, 217 512 1, 128 512 0, 128 390 1, 128 256 0, 219 256 1, 264 256 0, 292 288 1, 320 320 0, 320 374 1, 320 433 0, 291 473 1, 262 512 0 -192 64 0 128 384;64 0 1, 64 64 1, 128 64 1, 128 0 1, 64 320 1, 64 384 1, 128 384 1, 128 320 1 -192 64 -128 128 384;64 -120 1, 64 -93 1, 87 -79 0, 87 -9 1, 87 0 1, 64 0 1, 64 64 1, 128 64 1, 128 10 1, 128 -102 0, 64 320 1, 64 384 1, 128 384 1, 128 320 1 -448 0 0 384 448;384 37 1, 14 222 1, 384 407 1, 384 345 1, 139 222 1, 139 222 1, 384 99 1 -448 64 128 384 320;64 128 1, 64 192 1, 384 192 1, 384 128 1, 64 256 1, 64 320 1, 384 320 1, 384 256 1 -448 64 0 448 448;64 407 1, 434 222 1, 64 37 1, 64 99 1, 309 222 1, 309 222 1, 64 345 1 -448 64 0 384 576;128 0 1, 128 64 1, 192 64 1, 192 0 1, 128 128 1, 128 150 1, 128 246 0, 201 297 1, 241 324 1, 320 377 0, 320 435 1, 320 512 0, 215 512 1, 150 512 0, 64 500 1, 64 568 1, 145 576 0, 213 576 1, 287 576 0, 330 550 1, 384 515 0, 384 441 1, 384 366 0, 301 319 1, 266 299 1, 222 275 0, 207 248 1, 192 222 0, 192 173 1, 192 128 1 -768 64 0 704 576;470 17 1, 394 0 0, 325 0 1, 213 0 0, 138 64 1, 64 129 0, 64 229 1, 64 365 0, 177 471 1, 291 576 0, 439 576 1, 553 576 0, 628 510 1, 704 444 0, 704 346 1, 704 255 0, 647 191 1, 591 128 0, 511 128 1, 448 128 0, 448 167 1, 448 180 0, 451 202 1, 458 245 1, 453 245 1, 424 192 0, 398 166 1, 361 128 0, 320 128 1, 256 128 0, 256 210 1, 256 301 0, 312 374 1, 368 448 0, 439 448 1, 447 448 0, 461 448 1, 465 448 0, 469 448 1, 483 448 0, 492 448 1, 543 448 1, 513 235 1, 512 225 0, 512 215 1, 512 192 0, 536 192 1, 576 192 0, 608 237 1, 640 283 0, 640 341 1, 640 415 0, 581 463 1, 521 512 0, 430 512 1, 312 512 0, 220 428 1, 128 344 0, 128 238 1, 128 160 0, 188 112 1, 247 64 0, 339 64 1, 398 64 0, 456 56 1, 462 318 1, 477 393 1, 447 384 0, 426 384 1, 380 384 0, 350 341 1, 320 298 0, 320 237 1, 320 192 0, 345 192 1, 387 192 0 -512 0 0 512 576;7 0 1, 218 576 1, 296 576 1, 503 0 1, 419 0 1, 361 128 1, 138 128 1, 80 0 1, 161 192 1, 339 192 1, 250 458 1 -512 64 0 448 576;64 0 1, 64 576 1, 227 576 1, 348 576 0, 398 546 1, 448 516 0, 448 443 1, 448 377 0, 396 336 1, 364 311 0, 304 292 1, 369 272 0, 401 244 1, 448 204 0, 448 140 1, 448 80 0, 410 41 1, 383 13 0, 340 6 1, 305 0 0, 247 0 1, 128 64 1, 186 64 1, 308 64 0, 346 80 1, 384 95 0, 384 144 1, 384 199 0, 335 227 1, 285 256 0, 192 256 1, 128 256 1, 128 320 1, 195 320 1, 384 320 0, 384 430 1, 384 486 0, 330 501 1, 288 512 0, 201 512 1, 128 512 1 -576 64 0 512 576;512 30 1, 429 0 0, 334 0 1, 202 0 0, 133 73 1, 64 147 0, 64 287 1, 64 427 0, 134 502 1, 205 576 0, 338 576 1, 413 576 0, 512 566 1, 512 489 1, 394 512 0, 326 512 1, 230 512 0, 179 454 1, 128 396 0, 128 287 1, 128 180 0, 182 122 1, 237 64 0, 335 64 1, 417 64 0, 512 100 1 -576 64 0 512 576;64 0 1, 64 576 1, 227 576 1, 512 576 0, 512 301 1, 512 158 0, 438 79 1, 364 0 0, 228 0 1, 128 64 1, 223 64 1, 448 64 0, 448 292 1, 448 426 0, 360 481 1, 335 497 0, 299 504 1, 257 512 0, 186 512 1, 128 512 1 -512 64 0 512 576;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1 -448 64 0 448 576;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 384 320 1, 384 256 1, 128 256 1, 128 0 1 -576 64 0 512 576;512 256 1, 512 14 1, 418 0 0, 330 0 1, 64 0 0, 64 286 1, 64 426 0, 133 501 1, 202 576 0, 332 576 1, 416 576 0, 512 564 1, 512 485 1, 398 512 0, 323 512 1, 128 512 0, 128 289 1, 128 180 0, 183 122 1, 238 64 0, 340 64 1, 382 64 0, 448 57 1, 448 192 1, 384 192 1, 384 256 1 -576 64 0 512 576;64 0 1, 64 576 1, 128 576 1, 128 320 1, 448 320 1, 448 576 1, 512 576 1, 512 0 1, 448 0 1, 448 256 1, 128 256 1, 128 0 1 -192 64 0 128 576;64 0 1, 64 576 1, 128 576 1, 128 0 1 -384 0 -128 320 576;0 -87 1, 0 -19 1, 75 -64 0, 141 -64 1, 216 -64 0, 238 -29 1, 256 0 0, 256 71 1, 256 576 1, 320 576 1, 320 73 1, 320 -128 0, 125 -128 1, 60 -128 0 -512 64 0 512 576;64 0 1, 64 576 1, 128 576 1, 128 293 1, 359 576 1, 438 576 1, 214 301 1, 476 0 1, 377 0 1, 128 292 1, 128 0 1 -448 64 0 384 576;64 0 1, 64 576 1, 128 576 1, 128 64 1, 384 64 1, 384 0 1 -640 64 0 576 576;64 0 1, 64 576 1, 170 576 1, 327 151 1, 487 576 1, 576 576 1, 576 0 1, 512 0 1, 512 473 1, 357 64 1, 279 64 1, 128 475 1, 128 0 1 -576 64 0 512 576;64 0 1, 64 576 1, 138 576 1, 448 131 1, 448 576 1, 512 576 1, 512 0 1, 437 0 1, 128 445 1, 128 0 1 -576 64 0 576 576;320 576 1, 436 576 0, 506 498 1, 576 419 0, 576 289 1, 576 156 0, 506 78 1, 436 0 0, 316 0 1, 214 0 0, 147 64 1, 64 145 0, 64 288 1, 64 420 0, 134 498 1, 204 576 0, 320 512 1, 229 512 0, 179 453 1, 128 394 0, 128 288 1, 128 183 0, 179 124 1, 229 64 0, 318 64 1, 401 64 0, 450 112 1, 512 171 0, 512 289 1, 512 394 0, 461 453 1, 410 512 0 -512 64 0 512 576;64 0 1, 64 576 1, 267 576 1, 365 576 0, 408 565 1, 451 553 0, 478 520 1, 512 479 0, 512 408 1, 512 192 0, 244 192 1, 128 192 1, 128 0 1, 128 256 1, 240 256 1, 448 256 0, 448 402 1, 448 473 0, 394 494 1, 348 512 0, 242 512 1, 128 512 1 -576 64 -128 640 576;615 -48 1, 565 -111 1, 434 -68 0, 346 -10 1, 311 0 0, 293 0 1, 193 0 0, 128 81 1, 64 161 0, 64 289 1, 64 419 0, 133 497 1, 203 576 0, 319 576 1, 436 576 0, 506 495 1, 576 415 0, 576 280 1, 576 162 0, 517 87 1, 494 58 0, 464 38 1, 449 27 0, 418 11 1, 510 -30 0, 318 512 1, 229 512 0, 179 452 1, 128 393 0, 128 288 1, 128 183 0, 179 124 1, 229 64 0, 318 64 1, 409 64 0, 460 123 1, 512 181 0, 512 286 1, 512 383 0, 471 441 1, 420 512 0 -576 64 0 576 576;64 0 1, 64 576 1, 281 576 1, 448 576 0, 448 439 1, 448 372 0, 408 329 1, 384 303 0, 340 283 1, 525 0 1, 428 0 1, 271 256 1, 128 256 1, 128 0 1, 128 320 1, 216 320 1, 303 320 0, 343 346 1, 384 373 0, 384 429 1, 384 474 0, 351 493 1, 318 512 0, 241 512 1, 128 512 1 -512 64 0 512 576;64 21 1, 64 102 1, 189 64 0, 311 64 1, 448 64 0, 448 152 1, 448 197 0, 410 218 1, 381 235 0, 315 253 1, 229 278 1, 64 324 0, 64 431 1, 64 576 0, 267 576 1, 355 576 0, 448 566 1, 448 491 1, 347 512 0, 255 512 1, 128 512 0, 128 431 1, 128 399 0, 154 379 1, 180 359 0, 247 340 1, 334 316 1, 432 288 0, 472 252 1, 512 216 0, 512 156 1, 512 84 0, 454 42 1, 396 0 0, 294 0 1, 193 0 0 -448 0 0 448 576;192 0 1, 192 512 1, 0 512 1, 0 576 1, 448 576 1, 448 512 1, 256 512 1, 256 0 1 -576 64 0 512 576;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1 -512 0 0 512 576;228 0 1, 14 576 1, 95 576 1, 272 103 1, 441 576 1, 508 576 1, 302 0 1 -704 0 0 768 576;152 0 1, 9 576 1, 85 576 1, 199 121 1, 329 576 1, 405 576 1, 530 125 1, 651 576 1, 716 576 1, 560 0 1, 482 0 1, 358 444 1, 230 0 1 -512 0 0 512 576;11 0 1, 215 286 1, 20 576 1, 113 576 1, 263 352 1, 423 576 1, 498 576 1, 299 300 1, 502 0 1, 409 0 1, 251 233 1, 85 0 1 -512 -64 0 512 576;192 0 1, 192 240 1, -7 576 1, 83 576 1, 232 309 1, 395 576 1, 468 576 1, 256 242 1, 256 0 1 -448 64 0 448 576;64 0 1, 64 64 1, 351 512 1, 64 512 1, 64 576 1, 448 576 1, 448 512 1, 142 64 1, 448 64 1, 448 0 1 -192 64 -128 192 576;64 -128 1, 64 576 1, 192 576 1, 192 512 1, 128 512 1, 128 -64 1, 192 -64 1, 192 -128 1 -192 -64 -128 256 576;236 -128 1, 178 -128 1, -22 576 1, 36 576 1 -192 0 -128 128 576;128 576 1, 128 -128 1, 0 -128 1, 0 -64 1, 64 -64 1, 64 512 1, 0 512 1, 0 576 1 -384 0 192 384 576;180 401 1, 75 192 1, 14 192 1, 180 525 1, 347 192 1, 284 192 1 -448 0 -64 448 0;0 -64 1, 0 0 1, 448 0 1, 448 -64 1 -256 0 512 256 576;216 512 1, 160 512 1, 40 576 1, 125 576 1 -448 0 0 448 384;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0 -448 64 -64 384 576;128 249 1, 128 53 1, 182 64 0, 209 64 1, 320 64 0, 320 199 1, 320 256 0, 298 288 1, 276 320 0, 239 320 1, 190 320 0, 128 312 1, 148 344 0, 171 361 1, 204 384 0, 247 384 1, 308 384 0, 346 334 1, 384 285 0, 384 202 1, 384 106 0, 335 53 1, 286 0 0, 197 0 1, 164 0 0, 128 0 1, 64 -5 1, 64 576 1, 128 576 1 -384 0 0 320 384;320 11 1, 251 0 0, 190 0 1, 104 0 0, 52 53 1, 0 107 0, 0 192 1, 0 282 0, 54 333 1, 108 384 0, 205 384 1, 254 384 0, 320 380 1, 320 322 1, 251 320 0, 209 320 1, 64 320 0, 64 191 1, 64 130 0, 101 97 1, 137 64 0, 203 64 1, 253 64 0, 320 72 1 -448 64 0 384 576;320 135 1, 320 331 1, 265 320 0, 239 320 1, 128 320 0, 128 185 1, 128 129 0, 150 96 1, 172 64 0, 209 64 1, 258 64 0, 320 72 1, 300 40 0, 277 23 1, 245 0 0, 201 0 1, 140 0 0, 102 50 1, 64 100 0, 64 182 1, 64 278 0, 113 331 1, 162 384 0, 251 384 1, 285 384 0, 320 384 1, 320 576 1, 384 576 1, 384 0 1, 320 0 1 -448 64 0 448 384;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0 -192 0 0 256 576;64 0 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 433 1, 64 576 0, 194 576 1, 221 576 0, 256 569 1, 256 510 1, 219 512 0, 193 512 1, 157 512 0, 142 496 1, 128 481 0, 128 441 1, 128 384 1, 192 384 1, 192 320 1, 128 320 1, 128 0 1 -448 64 -192 384 384;320 153 1, 320 331 1, 265 320 0, 240 320 1, 128 320 0, 128 190 1, 128 132 0, 150 98 1, 172 64 0, 209 64 1, 258 64 0, 320 90 1, 300 50 0, 277 29 1, 245 0 0, 202 0 1, 140 0 0, 102 52 1, 64 103 0, 64 186 1, 64 280 0, 113 332 1, 162 384 0, 250 384 1, 285 384 0, 320 384 1, 384 384 1, 384 105 1, 384 22 0, 374 -18 1, 348 -128 0, 194 -128 1, 130 -128 0, 64 -135 1, 64 -71 1, 143 -64 0, 198 -64 1, 320 -64 0, 320 29 1 -448 64 0 384 576;64 0 1, 64 576 1, 128 576 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 0 1, 320 0 1, 320 254 1, 320 293 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1 -192 64 0 128 576;64 0 1, 64 384 1, 128 384 1, 128 0 1, 64 512 1, 64 576 1, 128 576 1, 128 512 1 -192 -64 -192 128 576;-64 -145 1, -64 -87 1, -28 -64 0, 3 -64 1, 46 -64 0, 56 -47 1, 64 -32 0, 64 0 1, 64 384 1, 128 384 1, 128 0 1, 128 -128 0, 2 -128 1, -33 -128 0, 64 512 1, 64 576 1, 128 576 1, 128 512 1 -384 64 0 384 576;64 0 1, 64 576 1, 128 576 1, 128 198 1, 265 384 1, 335 384 1, 205 203 1, 374 0 1, 284 0 1, 128 197 1, 128 0 1 -192 64 0 128 576;64 0 1, 64 576 1, 128 576 1, 128 0 1 -640 64 0 576 384;64 0 1, 64 384 1, 128 384 1, 128 312 1, 156 353 0, 173 368 1, 194 384 0, 227 384 1, 268 384 0, 294 357 1, 309 342 0, 320 312 1, 357 354 0, 380 368 1, 408 384 0, 453 384 1, 576 384 0, 576 279 1, 576 0 1, 493 0 1, 493 257 1, 493 320 0, 432 320 1, 378 320 0, 320 257 1, 320 0 1, 256 0 1, 256 268 1, 256 320 0, 211 320 1, 171 320 0, 128 257 1, 128 0 1 -448 64 0 384 384;64 0 1, 64 384 1, 128 384 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 0 1, 320 0 1, 320 253 1, 320 292 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1 -448 64 0 384 384;224 384 1, 298 384 0, 341 333 1, 384 281 0, 384 193 1, 384 102 0, 341 51 1, 298 0 0, 222 0 1, 156 0 0, 116 42 1, 64 95 0, 64 192 1, 64 281 0, 107 333 1, 150 384 0, 224 320 1, 128 320 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 193 1, 320 320 0 -448 64 -128 384 384;128 -128 1, 64 -128 1, 64 384 1, 128 384 1, 128 312 1, 148 344 0, 171 361 1, 203 384 0, 247 384 1, 308 384 0, 346 334 1, 384 285 0, 384 202 1, 384 106 0, 335 53 1, 286 0 0, 197 0 1, 164 0 0, 128 0 1, 128 249 1, 128 53 1, 182 64 0, 209 64 1, 320 64 0, 320 199 1, 320 256 0, 298 288 1, 276 320 0, 239 320 1, 190 320 0 -448 64 -128 384 384;320 384 1, 384 384 1, 384 -128 1, 320 -128 1, 320 72 1, 300 40 0, 277 23 1, 245 0 0, 201 0 1, 140 0 0, 102 50 1, 64 100 0, 64 182 1, 64 278 0, 113 331 1, 162 384 0, 251 384 1, 285 384 0, 320 135 1, 320 331 1, 265 320 0, 239 320 1, 128 320 0, 128 185 1, 128 129 0, 150 96 1, 172 64 0, 209 64 1, 258 64 0 -256 64 0 256 448;64 0 1, 64 384 1, 128 384 1, 128 312 1, 145 345 0, 165 361 1, 194 384 0, 233 384 1, 241 384 0, 256 391 1, 256 326 1, 235 320 0, 222 320 1, 178 320 0, 128 253 1, 128 0 1 -384 64 0 320 384;64 13 1, 64 77 1, 128 64 0, 183 64 1, 256 64 0, 256 116 1, 256 152 0, 204 168 1, 147 187 1, 64 214 0, 64 286 1, 64 384 0, 215 384 1, 258 384 0, 320 381 1, 320 323 1, 263 320 0, 206 320 1, 128 320 0, 128 276 1, 128 244 0, 174 230 1, 225 213 1, 320 182 0, 320 106 1, 320 57 0, 283 29 1, 245 0 0, 180 0 1, 129 0 0 -192 0 -64 192 512;192 -2 1, 172 0 0, 154 0 1, 64 0 0, 64 103 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 458 1, 128 465 1, 128 384 1, 192 384 1, 192 320 1, 128 320 1, 128 115 1, 128 84 0, 136 74 1, 144 64 0, 168 64 1, 182 64 0, 192 45 1 -448 64 0 384 384;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1 -384 0 0 384 384;152 0 1, 7 384 1, 82 384 1, 195 85 1, 314 384 1, 380 384 1, 225 0 1 -576 0 0 576 384;102 0 1, 4 384 1, 77 384 1, 150 95 1, 244 384 1, 318 384 1, 400 94 1, 486 384 1, 549 384 1, 435 0 1, 361 0 1, 275 297 1, 177 0 1 -384 0 0 384 384;11 0 1, 143 203 1, 15 384 1, 101 384 1, 203 240 1, 294 384 1, 362 384 1, 238 191 1, 372 0 1, 287 0 1, 177 154 1, 79 0 1 -384 0 -128 384 384;152 0 1, 7 384 1, 82 384 1, 193 90 1, 314 384 1, 380 384 1, 164 -128 1, 87 -128 1 -384 0 0 384 384;0 0 1, 0 64 1, 291 320 1, 64 320 1, 64 384 1, 384 384 1, 384 320 1, 145 64 1, 384 64 1, 384 0 1 -256 0 -128 192 640;0 269 1, 22 269 1, 64 269 0, 64 330 1, 64 354 0, 64 382 1, 64 414 1, 64 447 0, 64 476 1, 64 537 0, 109 569 1, 141 591 0, 192 592 1, 192 537 1, 173 537 1, 153 537 0, 141 524 1, 128 510 0, 128 490 1, 128 483 0, 128 455 1, 128 417 1, 128 391 0, 128 361 1, 128 290 0, 80 241 1, 128 192 0, 128 120 1, 128 90 0, 128 65 1, 128 26 1, 128 -1 0, 128 -9 1, 128 -29 0, 141 -43 1, 154 -56 0, 173 -56 1, 192 -56 1, 192 -111 1, 139 -110 0, 106 -85 1, 64 -52 0, 64 6 1, 64 35 0, 64 67 1, 64 100 1, 64 127 0, 64 152 1, 64 213 0, 22 213 1, 0 213 1 -192 64 -128 128 576;64 -128 1, 64 576 1, 128 576 1, 128 -128 1 -256 64 -128 256 640;256 213 1, 234 213 1, 192 213 0, 192 152 1, 192 124 0, 192 100 1, 192 67 1, 192 36 0, 192 6 1, 192 -55 0, 146 -88 1, 114 -110 0, 64 -111 1, 64 -56 1, 82 -56 1, 102 -56 0, 115 -43 1, 128 -29 0, 128 -9 1, 128 1 0, 128 26 1, 128 65 1, 128 88 0, 128 120 1, 128 192 0, 176 241 1, 154 263 0, 144 285 1, 128 318 0, 128 361 1, 128 393 0, 128 417 1, 128 455 1, 128 480 0, 128 491 1, 128 510 0, 115 524 1, 102 537 0, 82 537 1, 64 537 1, 64 592 1, 117 591 0, 150 566 1, 192 534 0, 192 475 1, 192 445 0, 192 414 1, 192 382 1, 192 357 0, 192 329 1, 192 269 0, 234 269 1, 256 269 1 -448 0 192 448 256;95 192 1, 39 192 1, 40 213 0, 47 223 1, 69 256 0, 139 256 1, 176 256 0, 214 256 1, 256 256 1, 280 256 1, 291 256 0, 309 256 1, 352 256 0, 354 256 1, 409 256 1, 408 235 0, 401 225 1, 379 192 0, 310 192 1, 273 192 0, 235 192 1, 193 192 1, 168 192 1, 158 192 0, 140 192 1, 96 192 0 -512 -64 0 576 640;-15 0 1, 196 576 1, 316 576 1, 524 0 1, 439 0 1, 381 128 1, 116 128 1, 58 0 1, 138 192 1, 360 192 1, 246 458 1, 128 576 1, 128 640 1, 192 640 1, 192 576 1, 320 576 1, 320 640 1, 384 640 1, 384 576 1 -512 0 0 512 768;7 0 1, 218 576 1, 296 576 1, 503 0 1, 419 0 1, 361 128 1, 138 128 1, 80 0 1, 161 192 1, 339 192 1, 250 458 1, 256 768 1, 283 768 0, 301 740 1, 320 712 0, 320 672 1, 320 632 0, 301 604 1, 282 576 0, 255 576 1, 232 576 0, 215 599 1, 192 628 0, 192 672 1, 192 712 0, 211 740 1, 229 768 0, 256 704 1, 256 704 0, 256 695 1, 256 686 0, 256 672 1, 256 659 0, 256 650 1, 256 640 0, 256 640 1, 256 640 0, 256 648 1, 256 657 0, 256 672 1, 256 686 0, 256 695 1, 256 704 0 -576 64 -192 512 576;512 30 1, 429 0 0, 334 0 1, 202 0 0, 133 73 1, 64 147 0, 64 287 1, 64 427 0, 134 502 1, 205 576 0, 338 576 1, 413 576 0, 512 566 1, 512 489 1, 394 512 0, 326 512 1, 230 512 0, 179 454 1, 128 396 0, 128 287 1, 128 180 0, 182 122 1, 237 64 0, 335 64 1, 417 64 0, 512 100 1, 293 0 1, 330 0 1, 307 -41 1, 336 -42 0, 356 -59 1, 384 -82 0, 384 -116 1, 384 -148 0, 361 -170 1, 338 -192 0, 306 -192 1, 280 -192 0, 250 -154 1, 250 -124 1, 267 -128 0, 285 -128 1, 320 -128 0, 320 -101 1, 320 -67 0, 258 -66 1 -512 64 0 512 704;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1, 211 576 1, 311 704 1, 407 704 1, 273 576 1 -576 64 0 512 768;64 0 1, 64 576 1, 138 576 1, 448 131 1, 448 576 1, 512 576 1, 512 0 1, 437 0 1, 128 445 1, 128 0 1, 163 623 1, 166 656 0, 176 673 1, 195 704 0, 239 704 1, 268 704 0, 293 704 1, 318 704 1, 341 704 0, 353 704 1, 380 704 0, 384 710 1, 434 710 1, 431 682 0, 421 667 1, 403 640 0, 359 640 1, 329 640 0, 304 640 1, 279 640 1, 257 640 0, 244 640 1, 217 640 0, 213 623 1 -576 64 0 512 640;288 576 1, 389 576 0, 451 498 1, 512 419 0, 512 289 1, 512 156 0, 451 78 1, 389 0 0, 285 0 1, 195 0 0, 137 64 1, 64 145 0, 64 288 1, 64 420 0, 125 498 1, 186 576 0, 288 512 1, 212 512 0, 170 453 1, 128 394 0, 128 288 1, 128 183 0, 170 124 1, 212 64 0, 286 64 1, 355 64 0, 397 112 1, 448 171 0, 448 289 1, 448 394 0, 406 453 1, 363 512 0, 192 576 1, 192 640 1, 256 640 1, 256 576 1, 320 576 1, 320 640 1, 384 640 1, 384 576 1 -576 64 0 512 640;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 192 576 1, 192 640 1, 256 640 1, 256 576 1, 320 576 1, 320 640 1, 384 640 1, 384 576 1 -448 0 0 448 576;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0, 168 512 1, 259 576 1, 344 576 1, 224 512 1 -448 0 0 448 576;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0, 280 512 1, 224 512 1, 104 576 1, 189 576 1 -448 0 0 448 576;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0, 61 512 1, 151 576 1, 233 576 1, 323 512 1, 268 512 1, 192 552 1, 192 552 1, 116 512 1 -448 0 0 448 576;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0, 64 512 1, 64 576 1, 128 576 1, 128 512 1, 256 512 1, 256 576 1, 320 576 1, 320 512 1 -448 0 0 448 640;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0, 67 502 1, 70 531 0, 79 548 1, 96 576 0, 137 576 1, 164 576 0, 187 576 1, 210 576 1, 231 576 0, 242 576 1, 267 576 0, 271 590 1, 317 590 1, 314 559 0, 305 542 1, 288 512 0, 247 512 1, 220 512 0, 197 512 1, 174 512 1, 154 512 0, 142 512 1, 117 512 0, 113 502 1 -448 0 0 448 640;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0, 192 640 1, 219 640 0, 237 621 1, 256 603 0, 256 576 1, 256 549 0, 237 531 1, 219 512 0, 191 512 1, 168 512 0, 151 527 1, 128 547 0, 128 576 1, 128 603 0, 147 621 1, 165 640 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0 -384 0 -192 320 384;320 11 1, 251 0 0, 190 0 1, 104 0 0, 52 53 1, 0 107 0, 0 192 1, 0 282 0, 54 333 1, 108 384 0, 205 384 1, 254 384 0, 320 380 1, 320 322 1, 251 320 0, 209 320 1, 64 320 0, 64 191 1, 64 130 0, 101 97 1, 137 64 0, 203 64 1, 253 64 0, 320 72 1, 235 0 1, 271 0 1, 248 -41 1, 275 -42 0, 294 -59 1, 320 -82 0, 320 -116 1, 320 -148 0, 298 -170 1, 277 -192 0, 244 -192 1, 219 -192 0, 191 -154 1, 191 -124 1, 207 -128 0, 224 -128 1, 256 -128 0, 256 -101 1, 256 -67 0, 199 -66 1 -448 64 0 448 576;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0, 168 512 1, 259 576 1, 344 576 1, 224 512 1 -448 64 0 448 576;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0, 280 512 1, 224 512 1, 104 576 1, 189 576 1 -448 0 0 448 576;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0, 61 512 1, 151 576 1, 233 576 1, 323 512 1, 268 512 1, 192 552 1, 192 552 1, 116 512 1 -448 64 0 448 576;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0, 64 512 1, 64 576 1, 128 576 1, 128 512 1, 256 512 1, 256 576 1, 320 576 1, 320 512 1 -192 0 0 256 576;64 0 1, 64 384 1, 128 384 1, 128 0 1, 40 512 1, 131 576 1, 216 576 1, 96 512 1 -192 -64 0 192 576;64 0 1, 64 384 1, 128 384 1, 128 0 1, 152 512 1, 96 512 1, -24 576 1, 61 576 1 -192 -128 0 256 576;64 0 1, 64 384 1, 128 384 1, 128 0 1, -67 512 1, 23 576 1, 105 576 1, 195 512 1, 140 512 1, 64 552 1, 64 552 1, -12 512 1 -192 0 0 192 576;64 0 1, 64 384 1, 128 384 1, 128 0 1, 0 512 1, 0 576 1, 64 576 1, 64 512 1, 128 512 1, 128 576 1, 192 576 1, 192 512 1 -448 64 0 384 640;64 0 1, 64 384 1, 128 384 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 0 1, 320 0 1, 320 253 1, 320 292 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1, 67 502 1, 70 531 0, 79 548 1, 96 576 0, 137 576 1, 164 576 0, 187 576 1, 210 576 1, 231 576 0, 242 576 1, 267 576 0, 271 590 1, 317 590 1, 314 559 0, 305 542 1, 288 512 0, 247 512 1, 220 512 0, 197 512 1, 174 512 1, 154 512 0, 142 512 1, 117 512 0, 113 502 1 -448 64 0 384 576;224 384 1, 298 384 0, 341 333 1, 384 281 0, 384 193 1, 384 102 0, 341 51 1, 298 0 0, 222 0 1, 156 0 0, 116 42 1, 64 95 0, 64 192 1, 64 281 0, 107 333 1, 150 384 0, 224 320 1, 128 320 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 193 1, 320 320 0, 168 512 1, 259 576 1, 344 576 1, 224 512 1 -448 64 0 384 576;224 384 1, 298 384 0, 341 333 1, 384 281 0, 384 193 1, 384 102 0, 341 51 1, 298 0 0, 222 0 1, 156 0 0, 116 42 1, 64 95 0, 64 192 1, 64 281 0, 107 333 1, 150 384 0, 224 320 1, 128 320 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 193 1, 320 320 0, 280 512 1, 224 512 1, 104 576 1, 189 576 1 -448 0 0 384 576;224 384 1, 298 384 0, 341 333 1, 384 281 0, 384 193 1, 384 102 0, 341 51 1, 298 0 0, 222 0 1, 156 0 0, 116 42 1, 64 95 0, 64 192 1, 64 281 0, 107 333 1, 150 384 0, 224 320 1, 128 320 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 193 1, 320 320 0, 61 512 1, 151 576 1, 233 576 1, 323 512 1, 268 512 1, 192 552 1, 192 552 1, 116 512 1 -448 64 0 384 576;224 384 1, 298 384 0, 341 333 1, 384 281 0, 384 193 1, 384 102 0, 341 51 1, 298 0 0, 222 0 1, 156 0 0, 116 42 1, 64 95 0, 64 192 1, 64 281 0, 107 333 1, 150 384 0, 224 320 1, 128 320 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 193 1, 320 320 0, 64 512 1, 64 576 1, 128 576 1, 128 512 1, 256 512 1, 256 576 1, 320 576 1, 320 512 1 -448 64 0 384 640;224 384 1, 298 384 0, 341 333 1, 384 281 0, 384 193 1, 384 102 0, 341 51 1, 298 0 0, 222 0 1, 156 0 0, 116 42 1, 64 95 0, 64 192 1, 64 281 0, 107 333 1, 150 384 0, 224 320 1, 128 320 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 193 1, 320 320 0, 67 502 1, 70 531 0, 79 548 1, 96 576 0, 137 576 1, 164 576 0, 187 576 1, 210 576 1, 231 576 0, 242 576 1, 267 576 0, 271 590 1, 317 590 1, 314 559 0, 305 542 1, 288 512 0, 247 512 1, 220 512 0, 197 512 1, 174 512 1, 154 512 0, 142 512 1, 117 512 0, 113 502 1 -448 64 0 384 576;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 168 512 1, 259 576 1, 344 576 1, 224 512 1 -448 64 0 384 576;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 280 512 1, 224 512 1, 104 576 1, 189 576 1 -448 0 0 384 576;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 61 512 1, 151 576 1, 233 576 1, 323 512 1, 268 512 1, 192 552 1, 192 552 1, 116 512 1 -448 64 0 384 576;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 64 512 1, 64 576 1, 128 576 1, 128 512 1, 256 512 1, 256 576 1, 320 576 1, 320 512 1 -448 64 -128 384 576;186 -128 1, 196 327 1, 64 317 1, 64 375 1, 196 365 1, 186 576 1, 262 576 1, 252 365 1, 384 375 1, 384 317 1, 252 327 1, 262 -128 1 -320 64 384 256 576;160 576 1, 199 576 0, 228 548 1, 256 520 0, 256 480 1, 256 440 0, 228 412 1, 199 384 0, 159 384 1, 124 384 0, 98 407 1, 64 437 0, 64 480 1, 64 520 0, 92 548 1, 121 576 0, 160 512 1, 147 512 0, 137 503 1, 128 493 0, 128 480 1, 128 467 0, 137 457 1, 147 448 0, 160 448 1, 172 448 0, 181 456 1, 192 465 0, 192 480 1, 192 493 0, 183 503 1, 173 512 0 -448 0 0 384 576;192 0 1, 192 65 1, 113 74 0, 65 120 1, 0 181 0, 0 278 1, 0 379 0, 66 436 1, 112 475 0, 192 486 1, 192 555 1, 256 555 1, 256 486 1, 316 484 0, 384 468 1, 384 406 1, 304 428 0, 256 432 1, 256 117 1, 317 117 0, 384 143 1, 384 87 1, 317 65 0, 256 65 1, 256 0 1, 192 429 1, 161 426 0, 145 420 1, 64 390 0, 64 277 1, 64 199 0, 112 159 1, 140 136 0, 192 122 1 -448 64 0 384 640;64 0 1, 64 64 1, 128 88 0, 128 176 1, 128 256 1, 64 256 1, 64 320 1, 128 320 1, 128 410 1, 128 491 0, 170 533 1, 211 576 0, 291 576 1, 333 576 0, 384 579 1, 384 510 1, 325 512 0, 277 512 1, 192 512 0, 192 434 1, 192 320 1, 256 320 1, 256 256 1, 192 256 1, 192 211 1, 192 147 0, 176 116 1, 164 89 0, 136 64 1, 384 64 1, 384 0 1 -448 64 -128 384 576;64 -77 1, 64 -9 1, 155 -64 0, 214 -64 1, 260 -64 0, 290 -45 1, 320 -25 0, 320 7 1, 320 36 0, 298 52 1, 279 66 0, 235 86 1, 170 116 1, 64 164 0, 64 247 1, 64 303 0, 123 363 1, 64 398 0, 64 449 1, 64 506 0, 115 541 1, 166 576 0, 249 576 1, 306 576 0, 384 572 1, 384 512 1, 301 512 0, 245 512 1, 192 512 0, 160 494 1, 128 476 0, 128 447 1, 128 409 0, 194 383 1, 246 364 1, 324 334 0, 354 306 1, 384 278 0, 384 236 1, 384 186 0, 342 125 1, 384 83 0, 384 14 1, 384 -51 0, 335 -89 1, 287 -128 0, 207 -128 1, 151 -128 0, 304 149 1, 320 187 0, 320 221 1, 320 249 0, 303 266 1, 285 284 0, 241 303 1, 161 338 1, 128 302 0, 128 270 1, 128 219 0, 220 183 1 -256 0 192 192 384;96 384 1, 136 384 0, 164 356 1, 192 327 0, 192 287 1, 192 248 0, 164 220 1, 135 192 0, 94 192 1, 60 192 0, 34 215 1, 0 245 0, 0 288 1, 0 328 0, 28 356 1, 56 384 0 -384 64 -128 320 576;192 -111 1, 192 280 1, 136 287 0, 105 321 1, 64 366 0, 64 446 1, 64 516 0, 93 546 1, 123 576 0, 192 576 1, 320 576 1, 320 -111 1, 256 -111 1, 256 512 1, 256 512 1, 256 -111 1 -448 64 0 448 576;64 0 1, 64 432 1, 64 513 0, 100 545 1, 138 576 0, 232 576 1, 384 576 0, 384 480 1, 384 434 0, 313 385 1, 256 345 0, 256 327 1, 256 303 0, 302 274 1, 377 225 1, 448 180 0, 448 113 1, 448 0 0, 306 0 1, 244 0 0, 192 11 1, 192 76 1, 265 64 0, 310 64 1, 384 64 0, 384 115 1, 384 149 0, 336 179 1, 246 234 1, 192 267 0, 192 305 1, 192 337 0, 261 387 1, 320 430 0, 320 459 1, 320 512 0, 227 512 1, 172 512 0, 150 501 1, 128 490 0, 128 463 1, 128 0 1 -576 0 0 576 576;288 576 1, 407 576 0, 492 492 1, 576 407 0, 576 288 1, 576 168 0, 491 84 1, 407 0 0, 284 0 1, 180 0 0, 102 68 1, 0 157 0, 0 288 1, 0 407 0, 84 492 1, 169 576 0, 288 512 1, 196 512 0, 130 446 1, 64 380 0, 64 288 1, 64 197 0, 129 130 1, 195 64 0, 285 64 1, 370 64 0, 432 117 1, 512 185 0, 512 288 1, 512 381 0, 446 446 1, 380 512 0, 192 128 1, 192 448 1, 302 448 1, 384 448 0, 384 370 1, 384 315 0, 340 277 1, 431 128 1, 375 128 1, 294 262 1, 256 262 1, 256 128 1, 256 301 1, 267 301 1, 320 301 0, 320 363 1, 320 415 0, 280 415 1, 256 415 1 -576 0 0 576 576;288 576 1, 407 576 0, 492 492 1, 576 407 0, 576 288 1, 576 168 0, 491 84 1, 407 0 0, 284 0 1, 180 0 0, 102 68 1, 0 157 0, 0 288 1, 0 407 0, 84 492 1, 169 576 0, 288 512 1, 196 512 0, 130 446 1, 64 380 0, 64 288 1, 64 197 0, 129 130 1, 195 64 0, 285 64 1, 370 64 0, 432 117 1, 512 185 0, 512 288 1, 512 381 0, 446 446 1, 380 512 0, 384 142 1, 330 128 0, 288 128 1, 218 128 0, 173 173 1, 128 217 0, 128 288 1, 128 360 0, 172 404 1, 216 448 0, 291 448 1, 329 448 0, 375 441 1, 384 439 1, 384 393 1, 335 384 0, 297 384 1, 250 384 0, 221 357 1, 192 330 0, 192 287 1, 192 243 0, 222 218 1, 252 192 0, 303 192 1, 342 192 0, 384 188 1 -768 64 256 640 576;192 256 1, 192 512 1, 99 512 1, 99 576 1, 341 576 1, 341 512 1, 256 512 1, 256 256 1, 384 256 1, 384 576 1, 476 576 1, 521 372 1, 564 576 1, 640 576 1, 640 256 1, 576 256 1, 576 474 1, 529 279 1, 495 279 1, 448 454 1, 448 256 1 -256 0 512 256 576;40 512 1, 131 576 1, 216 576 1, 96 512 1 -256 0 512 256 576;0 512 1, 0 576 1, 64 576 1, 64 512 1, 192 512 1, 192 576 1, 256 576 1, 256 512 1 -192 0 0 0 0; -768 0 0 768 576;227 192 1, 384 192 1, 384 473 1, 10 0 1, 363 576 1, 704 576 1, 704 512 1, 448 512 1, 448 320 1, 704 320 1, 704 256 1, 448 256 1, 448 64 1, 768 64 1, 768 0 1, 384 0 1, 384 128 1, 190 128 1, 92 0 1 -576 0 0 576 576;39 0 1, 104 65 1, 86 104 0, 77 144 1, 64 203 0, 64 279 1, 64 414 0, 131 495 1, 198 576 0, 309 576 1, 394 576 0, 459 529 1, 498 576 1, 563 576 1, 496 484 1, 531 447 0, 550 409 1, 576 353 0, 576 283 1, 576 154 0, 502 77 1, 428 0 0, 304 0 1, 213 0 0, 142 32 1, 104 0 1, 184 83 1, 238 64 0, 312 64 1, 406 64 0, 459 119 1, 512 174 0, 512 273 1, 512 351 0, 448 405 1, 416 459 1, 367 512 0, 302 512 1, 220 512 0, 174 449 1, 128 387 0, 128 275 1, 128 184 0, 152 122 1 -192 0 0 0 0; -448 64 0 384 448;192 128 1, 192 256 1, 64 256 1, 64 320 1, 192 320 1, 192 448 1, 256 448 1, 256 320 1, 384 320 1, 384 256 1, 256 256 1, 256 128 1, 64 0 1, 64 64 1, 384 64 1, 384 0 1 -192 0 0 0 0; -192 0 0 0 0; -448 0 0 448 576;192 0 1, 192 128 1, 81 128 1, 81 192 1, 192 192 1, 192 192 1, 81 192 1, 81 256 1, 192 256 1, 31 576 1, 117 576 1, 232 335 1, 232 335 1, 350 576 1, 416 576 1, 256 256 1, 367 256 1, 367 192 1, 256 192 1, 256 192 1, 367 192 1, 367 128 1, 256 128 1, 256 0 1 -448 64 -128 384 384;64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 320 0 1, 320 72 1, 252 0 0, 184 0 1, 156 0 0, 128 9 1, 128 -128 1, 64 -128 1 -192 0 0 0 0; -192 0 0 0 0; -192 0 0 0 0; -192 0 0 0 0; -192 0 0 0 0; -256 64 320 320 576;196 364 1, 162 320 0, 129 320 1, 100 320 0, 82 341 1, 64 363 0, 64 394 1, 64 485 0, 174 485 1, 192 485 1, 192 511 1, 192 512 0, 147 512 1, 110 512 0, 68 530 1, 68 572 1, 118 576 0, 161 576 1, 256 576 0, 256 513 1, 256 401 1, 256 383 0, 276 384 1, 279 384 1, 280 384 0, 282 384 1, 284 384 0, 286 368 1, 289 336 1, 268 320 0, 250 320 1, 209 320 0, 198 364 1, 192 395 1, 192 452 1, 178 452 1, 128 452 0, 128 413 1, 128 384 0, 154 384 1, 172 384 0 -256 0 320 256 576;128 576 1, 187 576 0, 222 542 1, 256 507 0, 256 449 1, 256 389 0, 222 354 1, 187 320 0, 127 320 1, 74 320 0, 41 348 1, 0 384 0, 0 448 1, 0 507 0, 35 541 1, 69 576 0, 128 512 1, 64 512 0, 64 448 1, 64 384 0, 128 384 1, 192 384 0, 192 449 1, 192 512 0 -192 0 0 0 0; -704 0 0 704 384;320 92 1, 320 198 1, 290 199 1, 263 200 0, 233 196 1, 128 183 0, 128 121 1, 128 64 0, 208 64 1, 264 64 0, 371 353 1, 423 384 0, 489 384 1, 642 384 0, 642 218 1, 642 192 1, 387 192 1, 391 153 0, 400 133 1, 431 64 0, 526 64 1, 578 64 0, 640 72 1, 640 13 1, 569 0 0, 510 0 1, 444 0 0, 399 29 1, 374 45 0, 351 77 1, 298 36 0, 260 19 1, 215 0 0, 153 0 1, 84 0 0, 42 30 1, 0 61 0, 0 110 1, 0 248 0, 300 248 1, 320 248 1, 320 290 1, 320 307 0, 298 313 1, 277 320 0, 223 320 1, 147 320 0, 64 318 1, 64 367 1, 151 384 0, 230 384 1, 325 384 0, 390 256 1, 574 256 1, 573 276 0, 567 287 1, 549 320 0, 487 320 1, 444 320 0, 419 305 1, 396 290 0 -448 0 0 448 448;131 21 1, 108 0 1, 54 0 1, 99 50 1, 64 108 0, 64 189 1, 64 280 0, 111 332 1, 158 384 0, 240 384 1, 298 384 0, 339 363 1, 362 448 1, 416 448 1, 371 334 1, 448 276 0, 448 196 1, 448 105 0, 394 53 1, 340 0 0, 246 0 1, 180 0 0, 169 71 1, 170 71 1, 190 67 0, 207 66 1, 229 64 0, 253 64 1, 384 64 0, 384 200 1, 384 241 0, 325 275 1, 301 313 1, 300 313 1, 271 320 0, 233 320 1, 128 320 0, 128 186 1, 128 140 0, 145 109 1 -448 64 -192 384 384;320 384 1, 320 320 1, 256 320 1, 256 384 1, 320 256 1, 320 236 1, 320 139 0, 247 89 1, 207 62 1, 128 7 0, 128 -50 1, 128 -128 0, 234 -128 1, 298 -128 0, 384 -78 1, 384 -141 1, 304 -192 0, 236 -192 1, 161 -192 0, 118 -165 1, 64 -131 0, 64 -55 1, 64 21 0, 147 68 1, 182 88 1, 226 113 0, 241 139 1, 256 166 0, 256 215 1, 256 256 1 -256 64 -128 128 384;128 384 1, 128 320 1, 64 320 1, 64 384 1, 120 256 1, 128 -32 1, 128 -128 1, 64 -128 1, 64 -32 1, 72 256 1 -448 64 128 384 320;64 256 1, 64 320 1, 384 320 1, 384 128 1, 320 128 1, 320 256 1 -192 0 0 0 0; -448 0 -128 448 640;51 -128 1, 118 256 1, 64 256 1, 64 320 1, 128 320 1, 135 361 1, 174 576 0, 310 576 1, 346 576 0, 389 579 1, 378 515 1, 339 512 0, 307 512 1, 230 512 0, 208 394 1, 194 320 1, 256 320 1, 256 256 1, 184 256 1, 118 -128 1 -192 0 0 0 0; -192 0 0 0 0; -448 0 0 384 384;376 342 1, 265 204 1, 376 65 1, 339 37 1, 191 204 1, 339 370 1, 228 342 1, 117 204 1, 228 65 1, 191 37 1, 43 204 1, 191 370 1 -448 0 0 384 384;51 65 1, 162 204 1, 51 342 1, 88 370 1, 236 204 1, 88 37 1, 199 65 1, 310 204 1, 199 342 1, 236 370 1, 384 204 1, 236 37 1 -768 64 0 704 64;64 0 1, 64 64 1, 128 64 1, 128 0 1, 320 0 1, 320 64 1, 384 64 1, 384 0 1, 640 0 1, 640 64 1, 704 64 1, 704 0 1 -448 0 0 0 0; -512 0 0 512 704;7 0 1, 218 576 1, 296 576 1, 503 0 1, 419 0 1, 361 128 1, 138 128 1, 80 0 1, 161 192 1, 339 192 1, 250 458 1, 312 576 1, 257 576 1, 137 704 1, 222 704 1 -512 0 0 512 768;7 0 1, 218 576 1, 296 576 1, 503 0 1, 419 0 1, 361 128 1, 138 128 1, 80 0 1, 161 192 1, 339 192 1, 250 458 1, 132 623 1, 135 655 0, 144 673 1, 161 704 0, 202 704 1, 229 704 0, 252 704 1, 275 704 1, 296 704 0, 307 704 1, 332 704 0, 336 710 1, 382 710 1, 379 682 0, 370 667 1, 353 640 0, 312 640 1, 285 640 0, 262 640 1, 239 640 1, 219 640 0, 207 640 1, 182 640 0, 178 623 1 -576 64 0 576 768;320 576 1, 436 576 0, 506 498 1, 576 419 0, 576 289 1, 576 156 0, 506 78 1, 436 0 0, 316 0 1, 214 0 0, 147 64 1, 64 145 0, 64 288 1, 64 420 0, 134 498 1, 204 576 0, 320 512 1, 229 512 0, 179 453 1, 128 394 0, 128 288 1, 128 183 0, 179 124 1, 229 64 0, 318 64 1, 401 64 0, 450 112 1, 512 171 0, 512 289 1, 512 394 0, 461 453 1, 410 512 0, 174 623 1, 177 655 0, 186 673 1, 203 704 0, 244 704 1, 271 704 0, 294 704 1, 316 704 1, 337 704 0, 349 704 1, 373 704 0, 377 710 1, 423 710 1, 420 682 0, 411 667 1, 394 640 0, 354 640 1, 327 640 0, 303 640 1, 281 640 1, 260 640 0, 248 640 1, 224 640 0, 220 623 1 -768 64 0 768 576;448 0 1, 448 24 1, 387 0 0, 317 0 1, 203 0 0, 134 79 1, 64 159 0, 64 288 1, 64 420 0, 134 498 1, 204 576 0, 320 576 1, 388 576 0, 448 553 1, 448 576 1, 704 576 1, 704 512 1, 512 512 1, 512 320 1, 704 320 1, 704 256 1, 512 256 1, 512 64 1, 768 64 1, 768 0 1, 448 212 1, 448 345 1, 448 433 0, 416 472 1, 384 512 0, 314 512 1, 226 512 0, 177 453 1, 128 394 0, 128 288 1, 128 182 0, 177 123 1, 227 64 0, 314 64 1, 448 64 0 -704 64 0 704 384;396 332 1, 420 355 0, 447 367 1, 486 384 0, 540 384 1, 637 384 0, 675 325 1, 703 282 0, 704 192 1, 437 192 1, 444 129 0, 471 100 1, 506 64 0, 585 64 1, 643 64 0, 704 73 1, 704 14 1, 632 0 0, 566 0 1, 499 0 0, 459 19 1, 429 33 0, 398 65 1, 376 36 0, 349 22 1, 310 0 0, 255 0 1, 168 0 0, 116 52 1, 64 104 0, 64 192 1, 64 281 0, 116 332 1, 168 384 0, 256 384 1, 313 384 0, 353 364 1, 375 353 0, 261 320 1, 128 320 0, 128 193 1, 128 138 0, 154 106 1, 187 64 0, 262 64 1, 384 64 0, 384 192 1, 384 251 0, 359 283 1, 329 320 0, 439 256 1, 625 256 1, 624 282 0, 612 296 1, 592 320 0, 539 320 1, 487 320 0, 462 299 1, 445 284 0 -448 0 192 448 256;38 192 1, 38 256 1, 390 256 1, 390 192 1 -768 0 192 768 256;37 192 1, 37 256 1, 731 256 1, 731 192 1 -256 0 384 256 640;256 578 1, 256 551 1, 233 537 0, 233 467 1, 233 458 1, 256 458 1, 256 384 1, 192 384 1, 192 446 1, 192 559 0, 64 578 1, 64 551 1, 41 537 0, 41 467 1, 41 458 1, 64 458 1, 64 384 1, 0 384 1, 0 446 1, 0 559 0 -256 0 320 256 576;0 382 1, 0 409 1, 23 423 0, 23 493 1, 23 502 1, 0 502 1, 0 576 1, 64 576 1, 64 514 1, 64 401 0, 192 382 1, 192 409 1, 215 423 0, 215 493 1, 215 502 1, 192 502 1, 192 576 1, 256 576 1, 256 514 1, 256 401 0 -192 64 384 128 640;128 597 1, 128 569 1, 103 559 0, 103 484 1, 103 476 1, 128 476 1, 128 384 1, 64 384 1, 64 464 1, 64 586 0 -192 64 320 128 576;64 363 1, 64 391 1, 89 401 0, 89 476 1, 89 483 1, 64 483 1, 64 576 1, 128 576 1, 128 496 1, 128 372 0 -448 64 0 384 448;64 192 1, 64 256 1, 384 256 1, 384 192 1, 192 384 1, 192 448 1, 256 448 1, 256 384 1, 192 0 1, 192 64 1, 256 64 1, 256 0 1 -192 0 0 0 0; -384 0 -128 384 576;152 0 1, 7 384 1, 82 384 1, 193 90 1, 314 384 1, 380 384 1, 164 -128 1, 87 -128 1, 64 512 1, 64 576 1, 128 576 1, 128 512 1, 256 512 1, 256 576 1, 320 576 1, 320 512 1 -512 -64 0 576 640;192 0 1, 192 240 1, -19 576 1, 71 576 1, 227 309 1, 441 576 1, 514 576 1, 256 242 1, 256 0 1, 128 576 1, 128 640 1, 192 640 1, 192 576 1, 320 576 1, 320 640 1, 384 640 1, 384 576 1 -128 -192 -64 320 576;-165 -14 1, 243 569 1, 293 569 1, -114 -14 1 -448 0 64 384 448;137 145 1, 78 87 1, 46 120 1, 104 178 1, 64 217 0, 64 255 1, 64 292 0, 104 331 1, 46 390 1, 78 423 1, 137 364 1, 174 384 0, 214 384 1, 253 384 0, 290 364 1, 348 423 1, 381 390 1, 323 331 1, 320 292 0, 320 255 1, 320 217 0, 323 178 1, 381 120 1, 348 87 1, 290 145 1, 253 128 0, 214 128 1, 174 128 0, 192 320 1, 165 320 0, 146 302 1, 128 283 0, 128 256 1, 128 229 0, 146 211 1, 165 192 0, 191 192 1, 216 192 0, 233 207 1, 256 226 0, 256 256 1, 256 283 0, 238 302 1, 219 320 0 -256 0 0 256 384;213 342 1, 102 204 1, 213 65 1, 176 37 1, 28 204 1, 176 370 1 -256 0 0 256 384;43 65 1, 154 204 1, 43 342 1, 80 370 1, 228 204 1, 80 37 1 -384 0 0 320 640;64 0 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 468 1, 64 640 0, 194 640 1, 221 640 0, 256 613 1, 256 557 1, 219 576 0, 193 576 1, 157 576 0, 142 555 1, 128 534 0, 128 482 1, 128 384 1, 320 384 1, 320 0 1, 256 0 1, 256 320 1, 128 320 1, 128 0 1, 256 512 1, 256 576 1, 320 576 1, 320 512 1 -384 0 0 320 576;64 0 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 435 1, 64 576 0, 175 576 1, 256 576 1, 320 576 1, 320 0 1, 256 0 1, 256 518 1, 240 516 1, 206 512 0, 183 512 1, 148 512 0, 137 493 1, 128 477 0, 128 443 1, 128 384 1, 192 384 1, 192 320 1, 128 320 1, 128 0 1 -448 64 -128 384 576;183 -128 1, 192 97 1, 64 86 1, 64 144 1, 192 134 1, 192 327 1, 64 317 1, 64 375 1, 192 365 1, 183 576 1, 265 576 1, 256 365 1, 384 375 1, 384 317 1, 256 327 1, 256 134 1, 384 144 1, 384 86 1, 256 97 1, 265 -128 1 -192 64 192 128 256;64 192 1, 64 256 1, 128 256 1, 128 192 1 -192 64 -192 128 64;64 -140 1, 64 -112 1, 89 -102 0, 89 -36 1, 89 -29 1, 64 -29 1, 64 64 1, 128 64 1, 128 -16 1, 128 -130 0 -256 0 -192 256 64;0 -130 1, 0 -103 1, 23 -89 0, 23 -19 1, 23 -10 1, 0 -10 1, 0 64 1, 64 64 1, 64 2 1, 64 -111 0, 192 -130 1, 192 -103 1, 215 -89 0, 215 -19 1, 215 -10 1, 192 -10 1, 192 64 1, 256 64 1, 256 2 1, 256 -111 0 -768 0 -64 768 640;128 576 1, 186 576 0, 221 541 1, 256 507 0, 256 448 1, 256 388 0, 221 354 1, 187 320 0, 126 320 1, 75 320 0, 42 348 1, 0 384 0, 0 448 1, 0 507 0, 35 541 1, 70 576 0, 127 512 1, 64 512 0, 64 448 1, 64 384 0, 128 384 1, 192 384 0, 192 448 1, 192 477 0, 175 495 1, 157 512 0, 384 320 1, 443 320 0, 477 277 1, 512 234 0, 512 160 1, 512 86 0, 477 43 1, 443 0 0, 383 0 1, 330 0 0, 298 35 1, 256 80 0, 256 160 1, 256 234 0, 291 277 1, 326 320 0, 383 256 1, 320 256 0, 320 160 1, 320 64 0, 384 64 1, 448 64 0, 448 159 1, 448 204 0, 431 230 1, 413 256 0, 640 320 1, 699 320 0, 733 277 1, 768 234 0, 768 161 1, 768 86 0, 733 43 1, 698 0 0, 639 0 1, 587 0 0, 553 35 1, 512 80 0, 512 160 1, 512 234 0, 547 277 1, 581 320 0, 639 256 1, 576 256 0, 576 160 1, 576 64 0, 640 64 1, 704 64 0, 704 160 1, 704 204 0, 686 230 1, 669 256 0, 23 -14 1, 431 590 1, 482 590 1, 74 -14 1 -512 0 0 512 704;7 0 1, 218 576 1, 296 576 1, 503 0 1, 419 0 1, 361 128 1, 138 128 1, 80 0 1, 161 192 1, 339 192 1, 250 458 1, 126 576 1, 216 704 1, 298 704 1, 388 576 1, 333 576 1, 257 657 1, 257 657 1, 181 576 1 -512 64 0 512 704;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1, 127 576 1, 228 704 1, 319 704 1, 420 576 1, 358 576 1, 274 657 1, 273 657 1, 189 576 1 -512 0 0 512 704;7 0 1, 218 576 1, 296 576 1, 503 0 1, 419 0 1, 361 128 1, 138 128 1, 80 0 1, 161 192 1, 339 192 1, 250 458 1, 201 576 1, 292 704 1, 377 704 1, 257 576 1 -512 64 0 512 640;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1, 192 576 1, 192 640 1, 256 640 1, 256 576 1, 320 576 1, 320 640 1, 384 640 1, 384 576 1 -512 64 0 512 704;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1, 334 576 1, 273 576 1, 138 704 1, 234 704 1 -192 0 0 256 704;64 0 1, 64 576 1, 128 576 1, 128 0 1, 48 576 1, 124 704 1, 209 704 1, 96 576 1 -192 -64 0 256 704;64 0 1, 64 576 1, 128 576 1, 128 0 1, -28 576 1, 62 704 1, 130 704 1, 220 576 1, 164 576 1, 96 657 1, 96 657 1, 28 576 1 -192 0 0 192 640;64 0 1, 64 576 1, 128 576 1, 128 0 1, 0 576 1, 0 640 1, 64 640 1, 64 576 1, 128 576 1, 128 640 1, 192 640 1, 192 576 1 -192 -64 0 192 704;64 0 1, 64 576 1, 128 576 1, 128 0 1, 144 576 1, 96 576 1, -17 704 1, 68 704 1 -576 64 0 576 704;320 576 1, 436 576 0, 506 498 1, 576 419 0, 576 289 1, 576 156 0, 506 78 1, 436 0 0, 316 0 1, 214 0 0, 147 64 1, 64 145 0, 64 288 1, 64 420 0, 134 498 1, 204 576 0, 320 512 1, 229 512 0, 179 453 1, 128 394 0, 128 288 1, 128 183 0, 179 124 1, 229 64 0, 318 64 1, 401 64 0, 450 112 1, 512 171 0, 512 289 1, 512 394 0, 461 453 1, 410 512 0, 243 576 1, 333 704 1, 419 704 1, 299 576 1 -576 64 0 576 704;320 576 1, 436 576 0, 506 498 1, 576 419 0, 576 289 1, 576 156 0, 506 78 1, 436 0 0, 316 0 1, 214 0 0, 147 64 1, 64 145 0, 64 288 1, 64 420 0, 134 498 1, 204 576 0, 320 512 1, 229 512 0, 179 453 1, 128 394 0, 128 288 1, 128 183 0, 179 124 1, 229 64 0, 318 64 1, 401 64 0, 450 112 1, 512 171 0, 512 289 1, 512 394 0, 461 453 1, 410 512 0, 167 576 1, 258 704 1, 339 704 1, 430 576 1, 374 576 1, 299 657 1, 298 657 1, 223 576 1 -448 -64 0 384 576;121 192 1, 136 142 0, 158 114 1, 198 64 0, 269 64 1, 316 64 0, 384 72 1, 384 10 1, 311 0 0, 260 0 1, 173 0 0, 119 46 1, 81 78 0, 62 132 1, 55 151 0, 46 192 1, -21 192 1, -2 256 1, 40 256 1, 39 280 1, 39 282 0, 39 288 1, 40 302 0, 41 320 1, -21 320 1, -2 384 1, 48 384 1, 63 444 0, 81 474 1, 140 576 0, 273 576 1, 320 576 0, 384 573 1, 384 502 1, 321 512 0, 273 512 1, 207 512 0, 168 469 1, 145 444 0, 133 413 1, 128 401 0, 123 384 1, 336 384 1, 316 320 1, 115 320 1, 113 296 0, 113 281 1, 114 256 1, 286 256 1, 267 192 1 -576 64 0 576 704;320 576 1, 436 576 0, 506 498 1, 576 419 0, 576 289 1, 576 156 0, 506 78 1, 436 0 0, 316 0 1, 214 0 0, 147 64 1, 64 145 0, 64 288 1, 64 420 0, 134 498 1, 204 576 0, 320 512 1, 229 512 0, 179 453 1, 128 394 0, 128 288 1, 128 183 0, 179 124 1, 229 64 0, 318 64 1, 401 64 0, 450 112 1, 512 171 0, 512 289 1, 512 394 0, 461 453 1, 410 512 0, 354 576 1, 299 576 1, 178 704 1, 264 704 1 -576 64 0 512 704;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 225 576 1, 328 704 1, 425 704 1, 288 576 1 -576 64 0 512 704;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 139 576 1, 242 704 1, 334 704 1, 437 576 1, 374 576 1, 288 657 1, 288 657 1, 202 576 1 -576 64 0 512 704;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 351 576 1, 288 576 1, 151 704 1, 248 704 1 -192 64 0 128 384;64 0 1, 64 384 1, 128 384 1, 128 0 1 -256 -64 512 320 576;-3 512 1, 87 576 1, 169 576 1, 259 512 1, 204 512 1, 128 552 1, 128 552 1, 52 512 1 -256 0 448 256 640;3 502 1, 6 531 0, 15 548 1, 32 576 0, 73 576 1, 100 576 0, 123 576 1, 146 576 1, 167 576 0, 178 576 1, 203 576 0, 207 590 1, 253 590 1, 250 559 0, 241 542 1, 224 512 0, 183 512 1, 156 512 0, 133 512 1, 110 512 1, 90 512 0, 78 512 1, 53 512 0, 49 502 1 -256 0 448 256 512;0 448 1, 0 512 1, 256 512 1, 256 448 1 -256 0 512 256 640;3 602 1, 49 602 1, 57 588 0, 77 582 1, 97 576 0, 128 576 1, 163 576 0, 184 583 1, 200 589 0, 207 602 1, 253 602 1, 247 564 0, 220 542 1, 184 512 0, 128 512 1, 69 512 0, 33 544 1, 9 566 0 -256 64 512 128 576;64 512 1, 64 576 1, 128 576 1, 128 512 1 -256 64 512 192 640;128 640 1, 155 640 0, 173 621 1, 192 603 0, 192 576 1, 192 549 0, 173 531 1, 155 512 0, 127 512 1, 104 512 0, 87 527 1, 64 547 0, 64 576 1, 64 603 0, 83 621 1, 101 640 0, 128 576 1, 128 576 0, 128 576 1, 128 576 0, 128 576 1, 128 576 0, 128 576 1, 128 576 0, 128 576 1, 128 576 0, 128 576 1, 128 576 0, 128 576 1, 128 576 0, 128 576 1, 128 576 0 -256 0 -192 192 0;107 0 1, 143 0 1, 120 -41 1, 147 -42 0, 166 -59 1, 192 -82 0, 192 -116 1, 192 -148 0, 170 -170 1, 149 -192 0, 116 -192 1, 91 -192 0, 63 -154 1, 63 -124 1, 79 -128 0, 96 -128 1, 128 -128 0, 128 -101 1, 128 -67 0, 71 -66 1 -256 -64 448 320 576;-19 456 1, 71 576 1, 143 576 1, 23 456 1, 113 456 1, 203 576 1, 275 576 1, 155 456 1 -256 64 -128 192 0;123 0 1, 163 0 1, 128 -19 0, 128 -42 1, 128 -64 0, 164 -64 1, 180 -64 0, 192 -98 1, 192 -128 1, 169 -128 0, 140 -128 1, 64 -128 0, 64 -73 1, 64 -31 0 -256 -64 512 320 576;259 576 1, 169 512 1, 87 512 1, -3 576 1, 52 576 1, 128 536 1, 128 536 1, 204 576 1 -448 -64 0 384 576;121 192 1, 136 142 0, 158 114 1, 198 64 0, 269 64 1, 316 64 0, 384 72 1, 384 10 1, 311 0 0, 260 0 1, 173 0 0, 119 46 1, 81 78 0, 62 132 1, 55 151 0, 46 192 1, -21 192 1, -2 256 1, 40 256 1, 39 280 1, 39 282 0, 39 288 1, 40 302 0, 41 320 1, -21 320 1, -2 384 1, 48 384 1, 63 444 0, 81 474 1, 140 576 0, 273 576 1, 320 576 0, 384 573 1, 384 502 1, 321 512 0, 273 512 1, 207 512 0, 168 469 1, 145 444 0, 133 413 1, 128 401 0, 123 384 1, 336 384 1, 316 320 1, 115 320 1, 113 296 0, 113 281 1, 114 256 1, 286 256 1, 267 192 1 -192 0 0 0 0; -192 64 -128 128 576;64 -128 1, 64 192 1, 128 192 1, 128 -128 1, 64 320 1, 64 576 1, 128 576 1, 128 320 1 -256 64 192 192 256;64 192 1, 64 256 1, 192 256 1, 192 192 1 -448 64 512 384 576;64 512 1, 64 576 1, 384 576 1, 384 512 1 -256 0 192 256 576;28 192 1, 28 256 1, 55 300 0, 101 338 1, 129 361 1, 192 412 0, 192 458 1, 192 512 0, 127 512 1, 89 512 0, 36 488 1, 36 532 1, 89 576 0, 138 576 1, 191 576 0, 224 548 1, 256 521 0, 256 477 1, 256 421 0, 179 359 1, 157 341 1, 102 296 0, 92 256 1, 238 256 1, 238 192 1 -256 0 192 256 576;32 507 1, 32 549 1, 68 576 0, 103 576 1, 192 576 0, 192 492 1, 192 454 0, 177 429 1, 168 414 0, 151 402 1, 212 388 0, 236 360 1, 256 336 0, 256 302 1, 256 251 0, 220 222 1, 184 192 0, 121 192 1, 79 192 0, 28 225 1, 28 270 1, 84 256 0, 117 256 1, 192 256 0, 192 314 1, 192 381 0, 78 381 1, 59 381 1, 59 416 1, 75 416 1, 128 416 0, 128 470 1, 128 512 0, 86 512 1, 62 512 0 -192 64 192 128 256;64 192 1, 64 256 1, 128 256 1, 128 192 1 -256 0 192 192 576;128 192 1, 128 477 1, 54 458 1, 54 501 1, 192 534 1, 192 192 1 -640 0 -64 640 576;128 192 1, 128 494 1, 54 475 1, 54 518 1, 192 551 1, 192 192 1, 512 -27 1, 512 64 1, 361 64 1, 361 126 1, 511 320 1, 576 320 1, 576 128 1, 622 128 1, 622 64 1, 576 64 1, 576 -27 1, 409 128 1, 512 128 1, 512 249 1, 82 -41 1, 495 556 1, 554 556 1, 134 -41 1 -640 0 -64 640 576;401 0 1, 401 64 1, 428 95 0, 479 125 1, 509 143 1, 576 181 0, 576 215 1, 576 256 0, 507 256 1, 467 256 0, 410 248 1, 410 291 1, 466 320 0, 516 320 1, 572 320 0, 606 298 1, 640 276 0, 640 241 1, 640 194 0, 559 146 1, 535 132 1, 476 96 0, 466 64 1, 612 64 1, 612 0 1, 63 -14 1, 480 539 1, 531 539 1, 114 -14 1, 128 192 1, 128 477 1, 54 458 1, 54 501 1, 192 534 1, 192 192 1 -640 0 -64 640 576;56 494 1, 56 536 1, 101 576 0, 145 576 1, 256 576 0, 256 486 1, 256 444 0, 227 418 1, 209 402 0, 175 389 1, 222 376 0, 241 349 1, 256 327 0, 256 295 1, 256 247 0, 224 220 1, 192 192 0, 135 192 1, 97 192 0, 52 215 1, 52 259 1, 100 256 0, 128 256 1, 192 256 0, 192 308 1, 192 368 0, 102 368 1, 83 368 1, 83 403 1, 99 403 1, 192 403 0, 192 465 1, 192 512 0, 133 512 1, 99 512 0, 512 -27 1, 512 64 1, 359 64 1, 359 126 1, 510 320 1, 576 320 1, 576 128 1, 623 128 1, 623 64 1, 576 64 1, 576 -27 1, 408 128 1, 512 128 1, 512 260 1, 117 -41 1, 528 556 1, 589 556 1, 167 -41 1 -576 0 0 512 576;64 0 1, 64 256 1, 0 256 1, 0 320 1, 64 320 1, 64 576 1, 229 576 1, 512 576 0, 512 301 1, 512 158 0, 438 79 1, 365 0 0, 231 0 1, 128 64 1, 225 64 1, 448 64 0, 448 292 1, 448 426 0, 361 481 1, 336 497 0, 300 504 1, 258 512 0, 188 512 1, 128 512 1, 128 320 1, 256 320 1, 256 256 1, 128 256 1 -448 0 0 448 384;44 58 1, 185 199 1, 44 340 1, 84 379 1, 224 238 1, 365 379 1, 404 340 1, 264 199 1, 404 58 1, 365 19 1, 224 160 1, 84 19 1 -512 -64 0 512 704;192 0 1, 192 240 1, -7 576 1, 83 576 1, 232 309 1, 395 576 1, 468 576 1, 256 242 1, 256 0 1, 185 576 1, 261 704 1, 346 704 1, 232 576 1 -512 64 0 512 576;64 0 1, 64 576 1, 128 576 1, 128 448 1, 267 448 1, 365 448 0, 408 438 1, 451 429 0, 478 401 1, 512 367 0, 512 308 1, 512 128 0, 244 128 1, 128 128 1, 128 0 1, 128 192 1, 240 192 1, 448 192 0, 448 302 1, 448 355 0, 394 371 1, 348 384 0, 242 384 1, 128 384 1 -448 64 0 384 704;64 554 1, 64 615 1, 139 615 0, 200 586 1, 258 650 1, 287 617 1, 238 559 1, 278 523 0, 299 494 1, 384 380 0, 384 219 1, 384 116 0, 342 58 1, 299 0 0, 226 0 1, 152 0 0, 108 53 1, 64 105 0, 64 194 1, 64 283 0, 110 333 1, 155 384 0, 234 384 1, 253 384 0, 276 379 1, 247 449 0, 194 497 1, 138 416 1, 109 459 1, 157 528 1, 119 554 0, 223 320 1, 178 320 0, 153 287 1, 128 253 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 192 1, 320 320 0 -384 0 -128 384 576;152 0 1, 7 384 1, 82 384 1, 193 90 1, 314 384 1, 380 384 1, 164 -128 1, 87 -128 1, 168 512 1, 259 576 1, 344 576 1, 224 512 1 -448 64 -128 384 576;128 -128 1, 64 -128 1, 64 576 1, 128 576 1, 128 312 1, 148 344 0, 171 361 1, 203 384 0, 247 384 1, 308 384 0, 346 334 1, 384 285 0, 384 202 1, 384 106 0, 335 53 1, 286 0 0, 197 0 1, 164 0 0, 128 0 1, 128 249 1, 128 53 1, 182 64 0, 209 64 1, 320 64 0, 320 199 1, 320 256 0, 298 288 1, 276 320 0, 239 320 1, 190 320 0 -512 -64 0 512 640;-1 0 1, 215 576 1, 297 576 1, 510 0 1, 425 0 1, 366 128 1, 130 128 1, 72 0 1, 154 192 1, 343 192 1, 249 458 1, 128 576 1, 128 640 1, 384 640 1, 384 576 1 -448 0 0 448 512;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0, 64 448 1, 64 512 1, 320 512 1, 320 448 1 -512 0 0 512 768;8 0 1, 219 576 1, 297 576 1, 504 0 1, 419 0 1, 362 128 1, 139 128 1, 81 0 1, 161 192 1, 340 192 1, 251 458 1, 133 743 1, 179 743 1, 187 722 0, 207 713 1, 226 704 0, 258 704 1, 293 704 0, 313 715 1, 329 724 0, 336 743 1, 383 743 1, 377 700 0, 350 674 1, 314 640 0, 258 640 1, 199 640 0, 163 677 1, 139 702 0 -448 0 0 448 640;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0, 67 602 1, 113 602 1, 121 588 0, 141 582 1, 161 576 0, 192 576 1, 227 576 0, 248 583 1, 264 589 0, 271 602 1, 317 602 1, 311 564 0, 284 542 1, 248 512 0, 192 512 1, 133 512 0, 97 544 1, 73 566 0 -512 0 -128 512 576;7 0 1, 218 576 1, 296 576 1, 503 0 1, 419 0 1, 361 128 1, 138 128 1, 80 0 1, 161 192 1, 339 192 1, 250 458 1, 419 0 1, 459 0 1, 448 -19 0, 448 -42 1, 448 -64 0, 470 -64 1, 481 -64 0, 488 -98 1, 488 -128 1, 469 -128 0, 446 -128 1, 384 -128 0, 384 -73 1, 384 -31 0 -448 0 -128 448 384;329 49 1, 239 0 0, 155 0 1, 86 0 0, 43 28 1, 0 57 0, 0 101 1, 0 227 0, 299 227 1, 320 227 1, 320 274 1, 320 320 0, 224 320 1, 149 320 0, 64 307 1, 64 364 1, 151 384 0, 228 384 1, 309 384 0, 347 358 1, 384 331 0, 384 274 1, 384 99 1, 384 64 0, 423 64 1, 428 64 0, 437 42 1, 443 3 1, 417 0 0, 392 0 1, 368 0 0, 352 11 1, 337 23 0, 320 87 1, 320 186 1, 283 187 1, 248 188 0, 206 184 1, 64 173 0, 64 116 1, 64 64 0, 168 64 1, 240 64 0, 315 0 1, 355 0 1, 320 -19 0, 320 -42 1, 320 -64 0, 356 -64 1, 372 -64 0, 384 -98 1, 384 -128 1, 361 -128 0, 332 -128 1, 256 -128 0, 256 -73 1, 256 -31 0 -576 64 0 512 704;512 30 1, 429 0 0, 334 0 1, 202 0 0, 133 73 1, 64 147 0, 64 287 1, 64 427 0, 134 502 1, 205 576 0, 338 576 1, 413 576 0, 512 566 1, 512 489 1, 394 512 0, 326 512 1, 230 512 0, 179 454 1, 128 396 0, 128 287 1, 128 180 0, 182 122 1, 237 64 0, 335 64 1, 417 64 0, 512 100 1, 270 576 1, 360 704 1, 446 704 1, 326 576 1 -384 0 0 384 576;320 11 1, 251 0 0, 190 0 1, 104 0 0, 52 53 1, 0 107 0, 0 192 1, 0 282 0, 54 333 1, 108 384 0, 205 384 1, 254 384 0, 320 380 1, 320 322 1, 251 320 0, 209 320 1, 64 320 0, 64 191 1, 64 130 0, 101 97 1, 137 64 0, 203 64 1, 253 64 0, 320 72 1, 168 512 1, 259 576 1, 344 576 1, 224 512 1 -576 64 0 512 704;512 30 1, 429 0 0, 334 0 1, 202 0 0, 133 73 1, 64 147 0, 64 287 1, 64 427 0, 134 502 1, 205 576 0, 338 576 1, 413 576 0, 512 566 1, 512 489 1, 394 512 0, 326 512 1, 230 512 0, 179 454 1, 128 396 0, 128 287 1, 128 180 0, 182 122 1, 237 64 0, 335 64 1, 417 64 0, 512 100 1, 194 576 1, 285 704 1, 366 704 1, 457 576 1, 401 576 1, 326 657 1, 325 657 1, 250 576 1 -384 0 0 384 576;320 11 1, 251 0 0, 190 0 1, 104 0 0, 52 53 1, 0 107 0, 0 192 1, 0 282 0, 54 333 1, 108 384 0, 205 384 1, 254 384 0, 320 380 1, 320 322 1, 251 320 0, 209 320 1, 64 320 0, 64 191 1, 64 130 0, 101 97 1, 137 64 0, 203 64 1, 253 64 0, 320 72 1, 74 512 1, 164 576 1, 246 576 1, 332 512 1, 281 512 1, 205 552 1, 204 552 1, 129 512 1 -576 64 0 512 704;512 30 1, 429 0 0, 334 0 1, 202 0 0, 133 73 1, 64 147 0, 64 287 1, 64 427 0, 134 502 1, 205 576 0, 338 576 1, 413 576 0, 512 566 1, 512 489 1, 394 512 0, 326 512 1, 230 512 0, 179 454 1, 128 396 0, 128 287 1, 128 180 0, 182 122 1, 237 64 0, 335 64 1, 417 64 0, 512 100 1, 320 640 1, 320 704 1, 384 704 1, 384 640 1 -384 64 0 320 576;320 11 1, 265 0 0, 216 0 1, 148 0 0, 106 53 1, 64 107 0, 64 192 1, 64 282 0, 107 333 1, 150 384 0, 228 384 1, 267 384 0, 320 380 1, 320 322 1, 268 320 0, 237 320 1, 128 320 0, 128 191 1, 128 130 0, 156 97 1, 183 64 0, 232 64 1, 270 64 0, 320 72 1, 192 512 1, 192 576 1, 256 576 1, 256 512 1 -576 64 0 512 704;512 30 1, 429 0 0, 334 0 1, 202 0 0, 133 73 1, 64 147 0, 64 287 1, 64 427 0, 134 502 1, 205 576 0, 338 576 1, 413 576 0, 512 566 1, 512 489 1, 394 512 0, 326 512 1, 230 512 0, 179 454 1, 128 396 0, 128 287 1, 128 180 0, 182 122 1, 237 64 0, 335 64 1, 417 64 0, 512 100 1, 457 704 1, 366 576 1, 285 576 1, 194 704 1, 250 704 1, 325 623 1, 326 623 1, 401 704 1 -384 0 0 448 576;320 11 1, 251 0 0, 190 0 1, 104 0 0, 52 53 1, 0 107 0, 0 192 1, 0 282 0, 54 333 1, 108 384 0, 205 384 1, 254 384 0, 320 380 1, 320 322 1, 251 320 0, 209 320 1, 64 320 0, 64 191 1, 64 130 0, 101 97 1, 137 64 0, 203 64 1, 253 64 0, 320 72 1, 387 576 1, 297 512 1, 215 512 1, 125 576 1, 180 576 1, 256 536 1, 256 536 1, 332 576 1 -576 64 0 512 704;64 0 1, 64 576 1, 227 576 1, 512 576 0, 512 301 1, 512 158 0, 438 79 1, 364 0 0, 228 0 1, 128 64 1, 223 64 1, 448 64 0, 448 292 1, 448 426 0, 360 481 1, 335 497 0, 299 504 1, 257 512 0, 186 512 1, 128 512 1, 374 704 1, 284 576 1, 202 576 1, 115 704 1, 167 704 1, 243 623 1, 244 623 1, 319 704 1 -448 64 0 448 576;320 135 1, 320 331 1, 265 320 0, 239 320 1, 128 320 0, 128 185 1, 128 129 0, 150 96 1, 172 64 0, 209 64 1, 258 64 0, 320 72 1, 300 40 0, 277 23 1, 245 0 0, 201 0 1, 140 0 0, 102 50 1, 64 100 0, 64 182 1, 64 278 0, 113 331 1, 162 384 0, 251 384 1, 285 384 0, 320 384 1, 320 576 1, 384 576 1, 384 0 1, 320 0 1, 384 400 1, 384 422 1, 409 430 0, 409 493 1, 409 499 1, 384 499 1, 384 576 1, 448 576 1, 448 510 1, 448 408 0 -576 0 0 512 576;64 0 1, 64 256 1, 0 256 1, 0 320 1, 64 320 1, 64 576 1, 229 576 1, 512 576 0, 512 301 1, 512 158 0, 438 79 1, 365 0 0, 231 0 1, 128 64 1, 225 64 1, 448 64 0, 448 292 1, 448 426 0, 361 481 1, 336 497 0, 300 504 1, 258 512 0, 188 512 1, 128 512 1, 128 320 1, 256 320 1, 256 256 1, 128 256 1 -448 64 0 448 576;320 448 1, 200 448 1, 200 512 1, 320 512 1, 320 576 1, 384 576 1, 384 512 1, 440 512 1, 440 448 1, 384 448 1, 384 0 1, 320 0 1, 320 72 1, 300 40 0, 277 23 1, 245 0 0, 201 0 1, 140 0 0, 102 50 1, 64 100 0, 64 182 1, 64 278 0, 113 331 1, 162 384 0, 251 384 1, 285 384 0, 320 384 1, 320 135 1, 320 331 1, 265 320 0, 239 320 1, 128 320 0, 128 185 1, 128 129 0, 150 96 1, 172 64 0, 209 64 1, 258 64 0 -512 64 0 512 640;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1, 128 576 1, 128 640 1, 384 640 1, 384 576 1 -448 64 0 448 512;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0, 64 448 1, 64 512 1, 320 512 1, 320 448 1 -512 64 0 512 768;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1, 129 743 1, 181 743 1, 190 722 0, 212 713 1, 234 704 0, 269 704 1, 308 704 0, 331 715 1, 349 724 0, 357 743 1, 408 743 1, 401 700 0, 371 674 1, 331 640 0, 268 640 1, 203 640 0, 163 677 1, 136 702 0 -448 64 0 448 640;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0, 93 579 1, 139 579 1, 147 543 0, 167 527 1, 186 512 0, 218 512 1, 253 512 0, 273 531 1, 289 546 0, 296 579 1, 342 579 1, 336 524 0, 309 491 1, 273 448 0, 217 448 1, 159 448 0, 123 495 1, 99 526 0 -512 64 0 512 704;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1, 256 640 1, 256 704 1, 320 704 1, 320 640 1 -448 64 0 448 576;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0, 128 512 1, 128 576 1, 192 576 1, 192 512 1 -512 64 -128 512 576;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1, 410 0 1, 448 0 1, 384 -19 0, 384 -42 1, 384 -64 0, 420 -64 1, 436 -64 0, 448 -98 1, 448 -128 1, 425 -128 0, 396 -128 1, 320 -128 0, 320 -73 1, 320 -31 0 -448 64 -128 448 384;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0, 251 0 1, 291 0 1, 256 -19 0, 256 -42 1, 256 -64 0, 292 -64 1, 308 -64 0, 320 -98 1, 320 -128 1, 297 -128 0, 268 -128 1, 192 -128 0, 192 -73 1, 192 -31 0 -512 64 0 512 704;64 0 1, 64 576 1, 448 576 1, 448 512 1, 128 512 1, 128 320 1, 448 320 1, 448 256 1, 128 256 1, 128 64 1, 512 64 1, 512 0 1, 413 704 1, 312 576 1, 221 576 1, 122 704 1, 182 704 1, 266 623 1, 267 623 1, 351 704 1 -448 0 0 448 576;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0, 323 576 1, 233 512 1, 151 512 1, 61 576 1, 116 576 1, 192 536 1, 192 536 1, 268 576 1 -576 64 0 512 704;512 256 1, 512 14 1, 418 0 0, 330 0 1, 64 0 0, 64 286 1, 64 426 0, 133 501 1, 202 576 0, 332 576 1, 416 576 0, 512 564 1, 512 485 1, 398 512 0, 323 512 1, 128 512 0, 128 289 1, 128 180 0, 183 122 1, 238 64 0, 340 64 1, 382 64 0, 448 57 1, 448 192 1, 384 192 1, 384 256 1, 222 576 1, 312 704 1, 391 704 1, 454 576 1, 415 576 1, 354 657 1, 353 657 1, 277 576 1 -448 64 -192 384 576;320 153 1, 320 331 1, 265 320 0, 240 320 1, 128 320 0, 128 190 1, 128 132 0, 150 98 1, 172 64 0, 209 64 1, 258 64 0, 320 90 1, 300 50 0, 277 29 1, 245 0 0, 202 0 1, 140 0 0, 102 52 1, 64 103 0, 64 186 1, 64 280 0, 113 332 1, 162 384 0, 250 384 1, 285 384 0, 320 384 1, 384 384 1, 384 105 1, 384 22 0, 374 -18 1, 348 -128 0, 194 -128 1, 130 -128 0, 64 -135 1, 64 -71 1, 143 -64 0, 198 -64 1, 320 -64 0, 320 29 1, 119 512 1, 208 576 1, 288 576 1, 370 512 1, 322 512 1, 248 552 1, 248 552 1, 174 512 1 -576 64 0 512 768;512 256 1, 512 14 1, 418 0 0, 330 0 1, 64 0 0, 64 286 1, 64 426 0, 133 501 1, 202 576 0, 332 576 1, 416 576 0, 512 564 1, 512 485 1, 398 512 0, 323 512 1, 128 512 0, 128 289 1, 128 180 0, 183 122 1, 238 64 0, 340 64 1, 382 64 0, 448 57 1, 448 192 1, 384 192 1, 384 256 1, 228 743 1, 274 743 1, 281 722 0, 300 713 1, 317 704 0, 345 704 1, 378 704 0, 396 715 1, 411 724 0, 417 743 1, 449 743 1, 444 700 0, 419 674 1, 388 640 0, 339 640 1, 286 640 0, 255 677 1, 233 702 0 -448 64 -192 384 640;320 153 1, 320 331 1, 265 320 0, 240 320 1, 128 320 0, 128 190 1, 128 132 0, 150 98 1, 172 64 0, 209 64 1, 258 64 0, 320 90 1, 300 50 0, 277 29 1, 245 0 0, 202 0 1, 140 0 0, 102 52 1, 64 103 0, 64 186 1, 64 280 0, 113 332 1, 162 384 0, 250 384 1, 285 384 0, 320 384 1, 384 384 1, 384 105 1, 384 22 0, 374 -18 1, 348 -128 0, 194 -128 1, 130 -128 0, 64 -135 1, 64 -71 1, 143 -64 0, 198 -64 1, 320 -64 0, 320 29 1, 131 602 1, 177 602 1, 185 588 0, 205 582 1, 225 576 0, 256 576 1, 291 576 0, 312 583 1, 328 589 0, 335 602 1, 381 602 1, 375 564 0, 348 542 1, 312 512 0, 256 512 1, 197 512 0, 161 544 1, 137 566 0 -576 64 0 512 704;512 256 1, 512 14 1, 418 0 0, 330 0 1, 64 0 0, 64 286 1, 64 426 0, 133 501 1, 202 576 0, 332 576 1, 416 576 0, 512 564 1, 512 485 1, 398 512 0, 323 512 1, 128 512 0, 128 289 1, 128 180 0, 183 122 1, 238 64 0, 340 64 1, 382 64 0, 448 57 1, 448 192 1, 384 192 1, 384 256 1, 320 640 1, 320 704 1, 384 704 1, 384 640 1 -448 64 -192 384 576;320 153 1, 320 331 1, 265 320 0, 240 320 1, 128 320 0, 128 190 1, 128 132 0, 150 98 1, 172 64 0, 209 64 1, 258 64 0, 320 90 1, 300 50 0, 277 29 1, 245 0 0, 202 0 1, 140 0 0, 102 52 1, 64 103 0, 64 186 1, 64 280 0, 113 332 1, 162 384 0, 250 384 1, 285 384 0, 320 384 1, 384 384 1, 384 105 1, 384 22 0, 374 -18 1, 348 -128 0, 194 -128 1, 130 -128 0, 64 -135 1, 64 -71 1, 143 -64 0, 198 -64 1, 320 -64 0, 320 29 1, 192 512 1, 192 576 1, 256 576 1, 256 512 1 -576 64 -192 512 576;512 256 1, 512 14 1, 417 0 0, 330 0 1, 64 0 0, 64 286 1, 64 426 0, 133 501 1, 202 576 0, 332 576 1, 416 576 0, 512 564 1, 512 485 1, 398 512 0, 323 512 1, 128 512 0, 128 289 1, 128 180 0, 183 122 1, 238 64 0, 340 64 1, 382 64 0, 448 57 1, 448 192 1, 384 192 1, 384 256 1, 291 -158 1, 291 -126 1, 299 -128 0, 305 -128 1, 320 -128 0, 320 -104 1, 320 -77 0, 309 -71 1, 309 -42 1, 343 -43 0, 360 -57 1, 384 -77 0, 384 -121 1, 384 -192 0, 325 -192 1, 309 -192 0 -448 64 -192 384 704;320 153 1, 320 331 1, 265 320 0, 240 320 1, 128 320 0, 128 190 1, 128 132 0, 150 98 1, 172 64 0, 209 64 1, 258 64 0, 320 90 1, 300 50 0, 277 29 1, 245 0 0, 202 0 1, 140 0 0, 102 52 1, 64 103 0, 64 186 1, 64 280 0, 113 332 1, 162 384 0, 250 384 1, 285 384 0, 320 384 1, 384 384 1, 384 105 1, 384 22 0, 374 -18 1, 348 -128 0, 194 -128 1, 130 -128 0, 64 -135 1, 64 -71 1, 143 -64 0, 198 -64 1, 320 -64 0, 320 29 1, 256 682 1, 256 660 1, 231 652 0, 231 592 1, 231 586 1, 256 586 1, 256 512 1, 192 512 1, 192 576 1, 192 674 0 -576 64 0 512 704;64 0 1, 64 576 1, 128 576 1, 128 320 1, 448 320 1, 448 576 1, 512 576 1, 512 0 1, 448 0 1, 448 256 1, 128 256 1, 128 0 1, 134 576 1, 240 704 1, 336 704 1, 441 576 1, 376 576 1, 288 657 1, 287 657 1, 199 576 1 -448 64 0 384 768;64 0 1, 64 576 1, 128 576 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 0 1, 320 0 1, 320 254 1, 320 293 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1, 88 640 1, 179 768 1, 272 768 1, 362 640 1, 312 640 1, 226 721 1, 225 721 1, 139 640 1 -576 0 0 576 576;128 320 1, 448 320 1, 448 384 1, 128 384 1, 64 0 1, 64 384 1, 8 384 1, 8 448 1, 64 448 1, 64 576 1, 128 576 1, 128 448 1, 448 448 1, 448 576 1, 512 576 1, 512 448 1, 568 448 1, 568 384 1, 512 384 1, 512 0 1, 448 0 1, 448 256 1, 128 256 1, 128 0 1 -448 0 0 384 576;64 0 1, 64 448 1, 8 448 1, 8 512 1, 64 512 1, 64 576 1, 128 576 1, 128 512 1, 255 512 1, 255 448 1, 128 448 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 0 1, 320 0 1, 320 254 1, 320 293 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1 -192 -64 0 256 768;64 0 1, 64 576 1, 128 576 1, 128 0 1, -22 623 1, -20 655 0, -11 673 1, 5 704 0, 43 704 1, 68 704 0, 89 704 1, 110 704 1, 130 704 0, 141 704 1, 163 704 0, 167 710 1, 214 710 1, 212 682 0, 203 667 1, 187 640 0, 150 640 1, 125 640 0, 103 640 1, 82 640 1, 63 640 0, 51 640 1, 29 640 0, 25 623 1 -192 -64 0 256 640;64 0 1, 64 384 1, 128 384 1, 128 0 1, -24 480 1, -21 518 0, -13 539 1, 4 576 0, 43 576 1, 69 576 0, 90 576 1, 112 576 1, 132 576 0, 143 576 1, 166 576 0, 170 590 1, 216 590 1, 213 559 0, 205 542 1, 188 512 0, 150 512 1, 124 512 0, 102 512 1, 80 512 1, 61 512 0, 49 512 1, 26 512 0, 22 480 1 -192 0 0 256 640;64 0 1, 64 576 1, 128 576 1, 128 0 1, 0 576 1, 0 640 1, 256 640 1, 256 576 1 -192 -64 0 192 512;64 0 1, 64 384 1, 128 384 1, 128 0 1, -64 448 1, -64 512 1, 192 512 1, 192 448 1 -192 -64 0 256 768;64 0 1, 64 576 1, 128 576 1, 128 0 1, -22 743 1, 25 743 1, 32 722 0, 50 713 1, 68 704 0, 96 704 1, 128 704 0, 146 715 1, 161 724 0, 167 743 1, 214 743 1, 208 700 0, 182 674 1, 149 640 0, 96 640 1, 40 640 0, 7 677 1, -16 702 0 -192 -64 0 256 640;64 0 1, 64 384 1, 128 384 1, 128 0 1, -24 578 1, 22 578 1, 29 542 0, 48 527 1, 67 512 0, 96 512 1, 129 512 0, 148 531 1, 163 546 0, 170 578 1, 216 578 1, 210 524 0, 184 491 1, 150 448 0, 96 448 1, 39 448 0, 5 495 1, -18 526 0 -192 64 -128 192 576;64 0 1, 64 576 1, 128 576 1, 128 0 1, 94 0 1, 126 0 1, 128 -19 0, 128 -42 1, 128 -64 0, 143 -64 1, 150 -64 0, 155 -98 1, 155 -128 1, 139 -128 0, 118 -128 1, 64 -128 0, 64 -73 1, 64 -31 0 -192 0 -128 128 576;64 0 1, 64 384 1, 128 384 1, 128 0 1, 64 512 1, 64 576 1, 128 576 1, 128 512 1, 59 0 1, 99 0 1, 64 -19 0, 64 -42 1, 64 -64 0, 100 -64 1, 116 -64 0, 128 -98 1, 128 -128 1, 105 -128 0, 76 -128 1, 0 -128 0, 0 -73 1, 0 -31 0 -192 64 0 128 704;64 0 1, 64 576 1, 128 576 1, 128 0 1, 64 640 1, 64 704 1, 128 704 1, 128 640 1 -576 64 -128 512 576;64 0 1, 64 576 1, 128 576 1, 128 0 1, 192 -87 1, 192 -19 1, 267 -64 0, 333 -64 1, 408 -64 0, 430 -29 1, 448 0 0, 448 71 1, 448 576 1, 512 576 1, 512 73 1, 512 -128 0, 317 -128 1, 252 -128 0 -320 64 -192 320 576;64 0 1, 64 384 1, 128 384 1, 128 0 1, 64 512 1, 64 576 1, 128 576 1, 128 512 1, 128 -145 1, 128 -87 1, 164 -64 0, 195 -64 1, 238 -64 0, 248 -47 1, 256 -32 0, 256 0 1, 256 384 1, 320 384 1, 320 0 1, 320 -128 0, 194 -128 1, 159 -128 0, 256 512 1, 256 576 1, 320 576 1, 320 512 1 -384 0 -128 448 704;0 -87 1, 0 -19 1, 75 -64 0, 141 -64 1, 216 -64 0, 238 -29 1, 256 0 0, 256 71 1, 256 576 1, 320 576 1, 320 73 1, 320 -128 0, 125 -128 1, 60 -128 0, 137 576 1, 244 704 1, 314 704 1, 403 576 1, 347 576 1, 281 657 1, 280 657 1, 203 576 1 -192 -64 -192 256 576;-64 -145 1, -64 -87 1, -28 -64 0, 3 -64 1, 46 -64 0, 56 -47 1, 64 -32 0, 64 0 1, 64 384 1, 128 384 1, 128 0 1, 128 -128 0, 2 -128 1, -33 -128 0, -55 512 1, 52 576 1, 126 576 1, 216 512 1, 160 512 1, 91 552 1, 90 552 1, 11 512 1 -512 64 -192 512 576;64 0 1, 64 576 1, 128 576 1, 128 293 1, 359 576 1, 438 576 1, 214 301 1, 476 0 1, 377 0 1, 128 292 1, 128 0 1, 165 -158 1, 165 -126 1, 190 -128 0, 208 -128 1, 256 -128 0, 256 -104 1, 256 -77 0, 184 -71 1, 184 -42 1, 246 -43 0, 277 -57 1, 320 -77 0, 320 -121 1, 320 -192 0, 222 -192 1, 195 -192 0 -384 64 -192 384 576;64 0 1, 64 576 1, 128 576 1, 128 198 1, 265 384 1, 335 384 1, 205 203 1, 374 0 1, 284 0 1, 128 197 1, 128 0 1, 128 -158 1, 128 -126 1, 146 -128 0, 158 -128 1, 192 -128 0, 192 -104 1, 192 -77 0, 146 -71 1, 146 -42 1, 196 -43 0, 221 -57 1, 256 -77 0, 256 -121 1, 256 -192 0, 175 -192 1, 153 -192 0 -384 64 0 384 384;64 0 1, 64 384 1, 128 384 1, 128 198 1, 265 384 1, 335 384 1, 205 203 1, 374 0 1, 284 0 1, 128 197 1, 128 0 1 -448 64 0 384 704;64 0 1, 64 576 1, 128 576 1, 128 64 1, 384 64 1, 384 0 1, 68 576 1, 143 704 1, 224 704 1, 113 576 1 -192 0 0 256 704;64 0 1, 64 576 1, 128 576 1, 128 0 1, 40 640 1, 131 704 1, 216 704 1, 96 640 1 -448 64 -192 384 576;64 0 1, 64 576 1, 128 576 1, 128 64 1, 384 64 1, 384 0 1, 154 -158 1, 154 -126 1, 164 -128 0, 172 -128 1, 192 -128 0, 192 -104 1, 192 -77 0, 171 -71 1, 171 -42 1, 210 -43 0, 229 -57 1, 256 -77 0, 256 -121 1, 256 -192 0, 191 -192 1, 174 -192 0 -192 0 -192 128 576;64 0 1, 64 576 1, 128 576 1, 128 0 1, 0 -158 1, 0 -126 1, 18 -128 0, 30 -128 1, 64 -128 0, 64 -104 1, 64 -77 0, 18 -71 1, 18 -42 1, 68 -43 0, 93 -57 1, 128 -77 0, 128 -121 1, 128 -192 0, 47 -192 1, 25 -192 0 -448 64 0 384 576;64 0 1, 64 576 1, 128 576 1, 128 64 1, 384 64 1, 384 0 1, 256 400 1, 256 423 1, 281 431 0, 281 493 1, 281 500 1, 256 500 1, 256 576 1, 320 576 1, 320 510 1, 320 408 0 -256 64 0 256 576;64 0 1, 64 576 1, 128 576 1, 128 0 1, 192 410 1, 192 432 1, 217 440 0, 217 498 1, 217 504 1, 192 504 1, 192 576 1, 256 576 1, 256 514 1, 256 418 0 -448 64 0 384 576;64 0 1, 64 576 1, 128 576 1, 128 64 1, 384 64 1, 384 0 1, 320 256 1, 320 320 1, 384 320 1, 384 256 1 -256 64 0 256 576;64 0 1, 64 576 1, 128 576 1, 128 0 1, 192 256 1, 192 320 1, 256 320 1, 256 256 1 -448 0 0 384 576;64 0 1, 64 271 1, 0 240 1, 0 305 1, 64 337 1, 64 576 1, 128 576 1, 128 381 1, 256 433 1, 256 367 1, 128 316 1, 128 64 1, 384 64 1, 384 0 1 -192 0 0 192 576;64 0 1, 64 263 1, 0 237 1, 0 297 1, 64 324 1, 64 576 1, 128 576 1, 128 364 1, 192 388 1, 192 329 1, 128 303 1, 128 0 1 -576 64 0 512 704;64 0 1, 64 576 1, 138 576 1, 448 131 1, 448 576 1, 512 576 1, 512 0 1, 437 0 1, 128 445 1, 128 0 1, 228 576 1, 326 704 1, 418 704 1, 288 576 1 -448 64 0 384 576;64 0 1, 64 384 1, 128 384 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 0 1, 320 0 1, 320 253 1, 320 292 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1, 168 512 1, 259 576 1, 344 576 1, 224 512 1 -576 64 -192 512 576;64 0 1, 64 576 1, 138 576 1, 448 131 1, 448 576 1, 512 576 1, 512 0 1, 437 0 1, 128 445 1, 128 0 1, 198 -158 1, 198 -126 1, 214 -128 0, 225 -128 1, 256 -128 0, 256 -104 1, 256 -77 0, 218 -71 1, 218 -42 1, 265 -43 0, 288 -57 1, 320 -77 0, 320 -121 1, 320 -192 0, 243 -192 1, 222 -192 0 -448 64 -192 384 384;64 0 1, 64 384 1, 128 384 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 0 1, 320 0 1, 320 253 1, 320 292 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1, 128 -158 1, 128 -126 1, 146 -128 0, 158 -128 1, 192 -128 0, 192 -104 1, 192 -77 0, 146 -71 1, 146 -42 1, 196 -43 0, 221 -57 1, 256 -77 0, 256 -121 1, 256 -192 0, 175 -192 1, 153 -192 0 -576 64 0 512 704;64 0 1, 64 576 1, 138 576 1, 448 131 1, 448 576 1, 512 576 1, 512 0 1, 437 0 1, 128 445 1, 128 0 1, 430 704 1, 332 576 1, 244 576 1, 146 704 1, 206 704 1, 288 623 1, 288 623 1, 370 704 1 -448 0 0 384 576;64 0 1, 64 384 1, 128 384 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 0 1, 320 0 1, 320 253 1, 320 292 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1, 323 576 1, 233 512 1, 151 512 1, 61 576 1, 116 576 1, 192 536 1, 192 536 1, 268 576 1 -448 0 0 384 576;64 0 1, 64 384 1, 128 384 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 0 1, 320 0 1, 320 253 1, 320 292 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1, 0 399 1, 0 422 1, 25 430 0, 25 493 1, 25 499 1, 0 499 1, 0 576 1, 64 576 1, 64 509 1, 64 407 0 -576 64 -192 512 576;64 0 1, 64 576 1, 138 576 1, 448 131 1, 448 576 1, 512 576 1, 512 -35 1, 512 -128 0, 382 -128 1, 352 -128 0, 320 -150 1, 320 -92 1, 349 -64 0, 382 -64 1, 448 -64 0, 448 -21 1, 448 -15 1, 128 445 1, 128 0 1 -448 64 -192 384 384;64 0 1, 64 384 1, 128 384 1, 128 312 1, 157 344 0, 185 360 1, 226 384 0, 275 384 1, 384 384 0, 384 276 1, 384 -35 1, 384 -128 0, 254 -128 1, 224 -128 0, 192 -150 1, 192 -92 1, 223 -64 0, 250 -64 1, 320 -64 0, 320 -21 1, 320 253 1, 320 292 0, 308 306 1, 296 320 0, 264 320 1, 194 320 0, 128 249 1, 128 0 1 -576 64 0 576 640;320 576 1, 436 576 0, 506 498 1, 576 419 0, 576 289 1, 576 156 0, 506 78 1, 436 0 0, 316 0 1, 214 0 0, 147 64 1, 64 145 0, 64 288 1, 64 420 0, 134 498 1, 204 576 0, 320 512 1, 229 512 0, 179 453 1, 128 394 0, 128 288 1, 128 183 0, 179 124 1, 229 64 0, 318 64 1, 401 64 0, 450 112 1, 512 171 0, 512 289 1, 512 394 0, 461 453 1, 410 512 0, 192 576 1, 192 640 1, 448 640 1, 448 576 1 -448 64 0 384 512;224 384 1, 298 384 0, 341 333 1, 384 281 0, 384 193 1, 384 102 0, 341 51 1, 298 0 0, 222 0 1, 156 0 0, 116 42 1, 64 95 0, 64 192 1, 64 281 0, 107 333 1, 150 384 0, 224 320 1, 128 320 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 193 1, 320 320 0, 64 448 1, 64 512 1, 320 512 1, 320 448 1 -576 64 0 576 768;320 576 1, 436 576 0, 506 498 1, 576 419 0, 576 289 1, 576 156 0, 506 78 1, 436 0 0, 316 0 1, 214 0 0, 147 64 1, 64 145 0, 64 288 1, 64 420 0, 134 498 1, 204 576 0, 320 512 1, 229 512 0, 179 453 1, 128 394 0, 128 288 1, 128 183 0, 179 124 1, 229 64 0, 318 64 1, 401 64 0, 450 112 1, 512 171 0, 512 289 1, 512 394 0, 461 453 1, 410 512 0, 174 743 1, 220 743 1, 228 722 0, 248 713 1, 268 704 0, 299 704 1, 334 704 0, 355 715 1, 371 724 0, 378 743 1, 424 743 1, 418 700 0, 391 674 1, 355 640 0, 299 640 1, 240 640 0, 204 677 1, 180 702 0 -448 64 0 384 640;224 384 1, 298 384 0, 341 333 1, 384 281 0, 384 193 1, 384 102 0, 341 51 1, 298 0 0, 222 0 1, 156 0 0, 116 42 1, 64 95 0, 64 192 1, 64 281 0, 107 333 1, 150 384 0, 224 320 1, 128 320 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 193 1, 320 320 0, 89 579 1, 135 579 1, 143 543 0, 163 527 1, 182 512 0, 214 512 1, 249 512 0, 269 531 1, 285 546 0, 292 579 1, 338 579 1, 332 524 0, 305 491 1, 269 448 0, 213 448 1, 155 448 0, 119 495 1, 95 526 0 -576 64 0 576 704;320 576 1, 436 576 0, 506 498 1, 576 419 0, 576 289 1, 576 156 0, 506 78 1, 436 0 0, 316 0 1, 214 0 0, 147 64 1, 64 145 0, 64 288 1, 64 420 0, 134 498 1, 204 576 0, 320 512 1, 229 512 0, 179 453 1, 128 394 0, 128 288 1, 128 183 0, 179 124 1, 229 64 0, 318 64 1, 401 64 0, 450 112 1, 512 171 0, 512 289 1, 512 394 0, 461 453 1, 410 512 0, 212 612 1, 303 704 1, 374 704 1, 254 612 1, 344 612 1, 434 704 1, 506 704 1, 386 612 1 -448 64 0 448 576;224 384 1, 298 384 0, 341 333 1, 384 281 0, 384 193 1, 384 102 0, 341 51 1, 298 0 0, 222 0 1, 156 0 0, 116 42 1, 64 95 0, 64 192 1, 64 281 0, 107 333 1, 150 384 0, 224 320 1, 128 320 0, 128 192 1, 128 64 0, 224 64 1, 320 64 0, 320 193 1, 320 320 0, 109 456 1, 199 576 1, 271 576 1, 151 456 1, 241 456 1, 331 576 1, 403 576 1, 283 456 1 -576 64 0 576 704;64 0 1, 64 576 1, 281 576 1, 448 576 0, 448 439 1, 448 372 0, 408 329 1, 384 303 0, 340 283 1, 525 0 1, 428 0 1, 271 256 1, 128 256 1, 128 0 1, 128 320 1, 216 320 1, 303 320 0, 343 346 1, 384 373 0, 384 429 1, 384 474 0, 351 493 1, 318 512 0, 241 512 1, 128 512 1, 184 576 1, 274 704 1, 359 704 1, 239 576 1 -256 64 0 320 576;64 0 1, 64 384 1, 128 384 1, 128 312 1, 145 345 0, 165 361 1, 194 384 0, 233 384 1, 241 384 0, 256 391 1, 256 326 1, 235 320 0, 222 320 1, 178 320 0, 128 253 1, 128 0 1, 104 512 1, 195 576 1, 280 576 1, 160 512 1 -576 64 -192 576 576;64 0 1, 64 576 1, 281 576 1, 448 576 0, 448 439 1, 448 372 0, 408 329 1, 384 303 0, 340 283 1, 525 0 1, 428 0 1, 271 256 1, 128 256 1, 128 0 1, 128 320 1, 216 320 1, 303 320 0, 343 346 1, 384 373 0, 384 429 1, 384 474 0, 351 493 1, 318 512 0, 241 512 1, 128 512 1, 184 -158 1, 184 -126 1, 204 -128 0, 218 -128 1, 256 -128 0, 256 -104 1, 256 -77 0, 202 -71 1, 202 -42 1, 256 -43 0, 283 -57 1, 320 -77 0, 320 -121 1, 320 -192 0, 234 -192 1, 210 -192 0 -256 64 -192 256 448;64 0 1, 64 384 1, 128 384 1, 128 312 1, 145 345 0, 165 361 1, 194 384 0, 233 384 1, 241 384 0, 256 391 1, 256 326 1, 235 320 0, 222 320 1, 178 320 0, 128 253 1, 128 0 1, 64 -158 1, 64 -126 1, 82 -128 0, 94 -128 1, 128 -128 0, 128 -104 1, 128 -77 0, 82 -71 1, 82 -42 1, 132 -43 0, 157 -57 1, 192 -77 0, 192 -121 1, 192 -192 0, 111 -192 1, 89 -192 0 -576 64 0 576 704;64 0 1, 64 576 1, 281 576 1, 448 576 0, 448 439 1, 448 372 0, 408 329 1, 384 303 0, 340 283 1, 525 0 1, 428 0 1, 271 256 1, 128 256 1, 128 0 1, 128 320 1, 216 320 1, 303 320 0, 343 346 1, 384 373 0, 384 429 1, 384 474 0, 351 493 1, 318 512 0, 241 512 1, 128 512 1, 356 704 1, 265 576 1, 184 576 1, 100 704 1, 149 704 1, 224 623 1, 225 623 1, 300 704 1 -256 -64 0 320 576;64 0 1, 64 384 1, 128 384 1, 128 312 1, 145 345 0, 165 361 1, 194 384 0, 233 384 1, 241 384 0, 256 391 1, 256 326 1, 235 320 0, 222 320 1, 178 320 0, 128 253 1, 128 0 1, 259 576 1, 169 512 1, 87 512 1, -3 576 1, 52 576 1, 128 536 1, 128 536 1, 204 576 1 -512 64 0 512 704;64 21 1, 64 102 1, 189 64 0, 311 64 1, 448 64 0, 448 152 1, 448 197 0, 410 218 1, 381 235 0, 315 253 1, 229 278 1, 64 324 0, 64 431 1, 64 576 0, 267 576 1, 355 576 0, 448 566 1, 448 491 1, 347 512 0, 255 512 1, 128 512 0, 128 431 1, 128 399 0, 154 379 1, 180 359 0, 247 340 1, 334 316 1, 432 288 0, 472 252 1, 512 216 0, 512 156 1, 512 84 0, 454 42 1, 396 0 0, 294 0 1, 193 0 0, 214 576 1, 304 704 1, 389 704 1, 269 576 1 -384 64 0 384 576;64 13 1, 64 77 1, 128 64 0, 183 64 1, 256 64 0, 256 116 1, 256 152 0, 204 168 1, 147 187 1, 64 214 0, 64 286 1, 64 384 0, 215 384 1, 258 384 0, 320 381 1, 320 323 1, 263 320 0, 206 320 1, 128 320 0, 128 276 1, 128 244 0, 174 230 1, 225 213 1, 320 182 0, 320 106 1, 320 57 0, 283 29 1, 245 0 0, 180 0 1, 129 0 0, 168 512 1, 259 576 1, 344 576 1, 224 512 1 -512 64 0 512 704;64 21 1, 64 102 1, 189 64 0, 311 64 1, 448 64 0, 448 152 1, 448 197 0, 410 218 1, 381 235 0, 315 253 1, 229 278 1, 64 324 0, 64 431 1, 64 576 0, 267 576 1, 355 576 0, 448 566 1, 448 491 1, 347 512 0, 255 512 1, 128 512 0, 128 431 1, 128 399 0, 154 379 1, 180 359 0, 247 340 1, 334 316 1, 432 288 0, 472 252 1, 512 216 0, 512 156 1, 512 84 0, 454 42 1, 396 0 0, 294 0 1, 193 0 0, 139 576 1, 229 704 1, 310 704 1, 400 576 1, 344 576 1, 270 657 1, 269 657 1, 194 576 1 -384 64 0 384 576;64 13 1, 64 77 1, 128 64 0, 183 64 1, 256 64 0, 256 116 1, 256 152 0, 204 168 1, 147 187 1, 64 214 0, 64 286 1, 64 384 0, 215 384 1, 258 384 0, 320 381 1, 320 323 1, 263 320 0, 206 320 1, 128 320 0, 128 276 1, 128 244 0, 174 230 1, 225 213 1, 320 182 0, 320 106 1, 320 57 0, 283 29 1, 245 0 0, 180 0 1, 129 0 0, 94 512 1, 181 576 1, 260 576 1, 348 512 1, 293 512 1, 221 552 1, 220 552 1, 147 512 1 -512 64 -192 512 576;64 21 1, 64 102 1, 189 64 0, 311 64 1, 448 64 0, 448 152 1, 448 197 0, 410 218 1, 381 235 0, 315 253 1, 229 278 1, 64 324 0, 64 431 1, 64 576 0, 267 576 1, 355 576 0, 448 566 1, 448 491 1, 347 512 0, 255 512 1, 128 512 0, 128 431 1, 128 399 0, 154 379 1, 180 359 0, 247 340 1, 334 316 1, 432 288 0, 472 252 1, 512 216 0, 512 157 1, 512 84 0, 454 42 1, 396 0 0, 294 0 1, 193 0 0, 243 0 1, 279 0 1, 257 -41 1, 280 -42 0, 297 -59 1, 320 -82 0, 320 -116 1, 320 -148 0, 300 -170 1, 279 -192 0, 250 -192 1, 227 -192 0, 200 -154 1, 200 -124 1, 213 -128 0, 228 -128 1, 256 -128 0, 256 -101 1, 256 -67 0, 208 -66 1 -384 64 -192 320 384;64 13 1, 64 77 1, 128 64 0, 183 64 1, 256 64 0, 256 116 1, 256 152 0, 204 168 1, 147 187 1, 64 214 0, 64 286 1, 64 384 0, 215 384 1, 258 384 0, 320 381 1, 320 323 1, 263 320 0, 206 320 1, 128 320 0, 128 276 1, 128 244 0, 174 230 1, 225 213 1, 320 182 0, 320 106 1, 320 57 0, 283 29 1, 245 0 0, 180 0 1, 129 0 0, 171 0 1, 207 0 1, 184 -41 1, 211 -42 0, 230 -59 1, 256 -82 0, 256 -116 1, 256 -148 0, 234 -170 1, 213 -192 0, 180 -192 1, 155 -192 0, 127 -154 1, 127 -124 1, 143 -128 0, 160 -128 1, 192 -128 0, 192 -101 1, 192 -67 0, 135 -66 1 -512 64 0 512 704;64 21 1, 64 102 1, 189 64 0, 311 64 1, 448 64 0, 448 152 1, 448 197 0, 410 218 1, 381 235 0, 315 253 1, 229 278 1, 64 324 0, 64 431 1, 64 576 0, 267 576 1, 355 576 0, 448 566 1, 448 491 1, 347 512 0, 255 512 1, 128 512 0, 128 431 1, 128 399 0, 154 379 1, 180 359 0, 247 340 1, 334 316 1, 432 288 0, 472 252 1, 512 216 0, 512 156 1, 512 84 0, 454 42 1, 396 0 0, 294 0 1, 193 0 0, 400 704 1, 310 576 1, 229 576 1, 139 704 1, 194 704 1, 269 623 1, 270 623 1, 344 704 1 -384 0 0 384 576;64 13 1, 64 77 1, 128 64 0, 183 64 1, 256 64 0, 256 116 1, 256 152 0, 204 168 1, 147 187 1, 64 214 0, 64 286 1, 64 384 0, 215 384 1, 258 384 0, 320 381 1, 320 323 1, 263 320 0, 206 320 1, 128 320 0, 128 276 1, 128 244 0, 174 230 1, 225 213 1, 320 182 0, 320 106 1, 320 57 0, 283 29 1, 245 0 0, 180 0 1, 129 0 0, 323 576 1, 233 512 1, 151 512 1, 61 576 1, 116 576 1, 192 536 1, 192 536 1, 268 576 1 -448 0 -192 448 576;192 0 1, 192 512 1, 0 512 1, 0 576 1, 448 576 1, 448 512 1, 256 512 1, 256 0 1, 212 0 1, 242 0 1, 223 -41 1, 259 -42 0, 285 -59 1, 320 -82 0, 320 -115 1, 320 -148 0, 295 -170 1, 270 -192 0, 234 -192 1, 205 -192 0, 173 -154 1, 173 -124 1, 193 -128 0, 214 -128 1, 256 -128 0, 256 -101 1, 256 -67 0, 181 -66 1 -192 0 -192 192 512;192 -2 1, 172 0 0, 154 0 1, 64 0 0, 64 103 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 458 1, 128 465 1, 128 384 1, 192 384 1, 192 320 1, 128 320 1, 128 115 1, 128 84 0, 136 74 1, 144 64 0, 168 64 1, 182 64 0, 192 45 1, 112 0 1, 145 0 1, 124 -41 1, 149 -42 0, 167 -59 1, 192 -82 0, 192 -115 1, 192 -148 0, 172 -170 1, 152 -192 0, 123 -192 1, 100 -192 0, 74 -154 1, 74 -124 1, 87 -128 0, 101 -128 1, 128 -128 0, 128 -101 1, 128 -67 0, 81 -66 1 -448 0 0 448 704;192 0 1, 192 512 1, 0 512 1, 0 576 1, 448 576 1, 448 512 1, 256 512 1, 256 0 1, 350 704 1, 258 576 1, 190 576 1, 98 704 1, 155 704 1, 224 623 1, 224 623 1, 293 704 1 -320 0 -64 256 640;192 -2 1, 172 0 0, 154 0 1, 64 0 0, 64 103 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 468 1, 128 476 1, 128 384 1, 192 384 1, 192 320 1, 128 320 1, 128 115 1, 128 84 0, 136 74 1, 144 64 0, 168 64 1, 182 64 0, 192 45 1, 192 447 1, 192 472 1, 208 481 0, 208 549 1, 208 556 1, 192 556 1, 192 640 1, 256 640 1, 256 567 1, 256 456 0 -448 0 0 448 576;192 0 1, 192 256 1, 64 256 1, 64 320 1, 192 320 1, 192 512 1, 0 512 1, 0 576 1, 448 576 1, 448 512 1, 256 512 1, 256 320 1, 384 320 1, 384 256 1, 256 256 1, 256 0 1 -192 0 -64 192 512;64 192 1, 0 192 1, 0 256 1, 64 256 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 458 1, 128 465 1, 128 384 1, 192 384 1, 192 320 1, 128 320 1, 128 256 1, 192 256 1, 192 192 1, 128 192 1, 128 114 1, 128 84 0, 136 74 1, 144 64 0, 168 64 1, 182 64 0, 192 45 1, 192 -2 1, 172 0 0, 154 0 1, 64 0 0, 64 102 1 -576 64 0 512 768;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 146 623 1, 149 655 0, 160 673 1, 179 704 0, 226 704 1, 256 704 0, 282 704 1, 308 704 1, 332 704 0, 345 704 1, 372 704 0, 377 710 1, 430 710 1, 427 682 0, 416 667 1, 397 640 0, 351 640 1, 321 640 0, 294 640 1, 268 640 1, 245 640 0, 231 640 1, 204 640 0, 199 623 1 -448 64 0 384 640;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 93 480 1, 96 519 0, 106 539 1, 125 576 0, 169 576 1, 198 576 0, 223 576 1, 248 576 1, 271 576 0, 283 576 1, 310 576 0, 314 590 1, 355 590 1, 352 559 0, 342 542 1, 324 512 0, 280 512 1, 250 512 0, 225 512 1, 200 512 1, 178 512 0, 165 512 1, 138 512 0, 134 480 1 -576 64 0 512 640;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 192 576 1, 192 640 1, 384 640 1, 384 576 1 -448 64 0 384 512;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 64 448 1, 64 512 1, 320 512 1, 320 448 1 -576 64 0 512 768;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 146 743 1, 199 743 1, 208 722 0, 231 713 1, 253 704 0, 288 704 1, 328 704 0, 351 715 1, 369 724 0, 377 743 1, 430 743 1, 423 700 0, 392 674 1, 352 640 0, 288 640 1, 221 640 0, 181 677 1, 153 702 0 -448 64 0 384 640;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 93 578 1, 134 578 1, 143 543 0, 166 527 1, 188 512 0, 224 512 1, 264 512 0, 287 531 1, 306 546 0, 314 578 1, 355 578 1, 349 524 0, 320 491 1, 283 448 0, 224 448 1, 162 448 0, 125 495 1, 100 526 0 -576 64 0 512 768;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 288 768 1, 328 768 0, 356 749 1, 384 731 0, 384 704 1, 384 677 0, 356 659 1, 328 640 0, 287 640 1, 252 640 0, 226 655 1, 192 675 0, 192 704 1, 192 731 0, 220 749 1, 248 768 0, 288 704 1, 275 704 0, 265 704 1, 256 704 0, 256 704 1, 256 704 0, 265 704 1, 275 704 0, 288 704 1, 300 704 0, 309 704 1, 320 704 0, 320 704 1, 320 704 0, 310 704 1, 301 704 0 -448 64 0 384 640;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 192 640 1, 219 640 0, 237 621 1, 256 603 0, 256 576 1, 256 549 0, 237 531 1, 219 512 0, 191 512 1, 168 512 0, 151 527 1, 128 547 0, 128 576 1, 128 603 0, 147 621 1, 165 640 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0, 192 576 1, 192 576 0 -576 64 0 512 704;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 180 612 1, 283 704 1, 364 704 1, 228 612 1, 330 612 1, 432 704 1, 502 704 1, 377 612 1 -448 64 0 448 576;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 109 456 1, 199 576 1, 271 576 1, 151 456 1, 241 456 1, 331 576 1, 403 576 1, 283 456 1 -576 64 -128 512 576;64 576 1, 128 576 1, 128 213 1, 128 158 0, 139 132 1, 150 106 0, 180 88 1, 223 64 0, 295 64 1, 379 64 0, 414 97 1, 448 129 0, 448 210 1, 448 576 1, 512 576 1, 512 211 1, 512 139 0, 497 102 1, 482 64 0, 440 37 1, 385 0 0, 292 0 1, 174 0 0, 119 51 1, 64 102 0, 64 214 1, 308 0 1, 354 0 1, 320 -19 0, 320 -42 1, 320 -64 0, 358 -64 1, 375 -64 0, 387 -98 1, 387 -128 1, 363 -128 0, 333 -128 1, 256 -128 0, 256 -73 1, 256 -31 0 -448 64 -128 384 384;320 0 1, 320 72 1, 291 40 0, 263 24 1, 222 0 0, 174 0 1, 64 0 0, 64 108 1, 64 384 1, 128 384 1, 128 131 1, 128 92 0, 140 78 1, 152 64 0, 184 64 1, 254 64 0, 320 135 1, 320 384 1, 384 384 1, 384 0 1, 315 0 1, 355 0 1, 320 -19 0, 320 -42 1, 320 -64 0, 356 -64 1, 372 -64 0, 384 -98 1, 384 -128 1, 361 -128 0, 332 -128 1, 256 -128 0, 256 -73 1, 256 -31 0 -704 0 0 768 704;152 0 1, 9 576 1, 85 576 1, 199 121 1, 329 576 1, 405 576 1, 530 125 1, 651 576 1, 716 576 1, 560 0 1, 482 0 1, 358 444 1, 230 0 1, 236 576 1, 326 704 1, 408 704 1, 498 576 1, 443 576 1, 367 657 1, 366 657 1, 291 576 1 -576 0 0 576 576;102 0 1, 4 384 1, 77 384 1, 150 95 1, 244 384 1, 318 384 1, 400 94 1, 486 384 1, 549 384 1, 435 0 1, 361 0 1, 275 297 1, 177 0 1, 149 512 1, 240 576 1, 321 576 1, 412 512 1, 356 512 1, 281 552 1, 280 552 1, 205 512 1 -512 -64 0 512 704;192 0 1, 192 240 1, -7 576 1, 83 576 1, 232 309 1, 395 576 1, 468 576 1, 256 242 1, 256 0 1, 115 576 1, 203 704 1, 273 704 1, 363 576 1, 307 576 1, 236 657 1, 236 657 1, 171 576 1 -384 0 -128 384 576;152 0 1, 7 384 1, 82 384 1, 193 90 1, 314 384 1, 380 384 1, 164 -128 1, 87 -128 1, 67 512 1, 157 576 1, 239 576 1, 329 512 1, 274 512 1, 198 552 1, 198 552 1, 122 512 1 -448 64 0 448 704;64 0 1, 64 64 1, 351 512 1, 64 512 1, 64 576 1, 448 576 1, 448 512 1, 142 64 1, 448 64 1, 448 0 1, 190 576 1, 283 704 1, 370 704 1, 247 576 1 -384 0 0 384 576;0 0 1, 0 64 1, 291 320 1, 64 320 1, 64 384 1, 384 384 1, 384 320 1, 145 64 1, 384 64 1, 384 0 1, 168 512 1, 259 576 1, 344 576 1, 224 512 1 -448 64 0 448 704;64 0 1, 64 64 1, 331 512 1, 64 512 1, 64 576 1, 448 576 1, 448 512 1, 131 64 1, 448 64 1, 448 0 1, 192 640 1, 192 704 1, 256 704 1, 256 640 1 -384 0 0 384 576;0 0 1, 0 64 1, 291 320 1, 64 320 1, 64 384 1, 384 384 1, 384 320 1, 145 64 1, 384 64 1, 384 0 1, 128 512 1, 128 576 1, 192 576 1, 192 512 1 -448 64 0 448 704;64 0 1, 64 64 1, 351 512 1, 64 512 1, 64 576 1, 448 576 1, 448 512 1, 142 64 1, 448 64 1, 448 0 1, 386 704 1, 293 576 1, 209 576 1, 117 704 1, 174 704 1, 251 623 1, 252 623 1, 329 704 1 -384 0 0 384 576;0 0 1, 0 64 1, 291 320 1, 64 320 1, 64 384 1, 384 384 1, 384 320 1, 145 64 1, 384 64 1, 384 0 1, 323 576 1, 233 512 1, 151 512 1, 61 576 1, 116 576 1, 192 536 1, 192 536 1, 268 576 1 -192 0 0 192 640;64 0 1, 64 352 1, 0 352 1, 0 407 1, 64 407 1, 64 456 1, 64 513 0, 91 544 1, 119 576 0, 169 576 1, 176 576 0, 192 600 1, 192 545 1, 181 512 0, 175 512 1, 128 512 0, 128 464 1, 128 0 1 -512 64 -192 512 576;64 21 1, 64 102 1, 189 64 0, 311 64 1, 448 64 0, 448 152 1, 448 197 0, 410 218 1, 381 235 0, 315 253 1, 229 278 1, 64 324 0, 64 431 1, 64 576 0, 267 576 1, 355 576 0, 448 566 1, 448 491 1, 347 512 0, 255 512 1, 128 512 0, 128 431 1, 128 399 0, 154 379 1, 180 359 0, 247 340 1, 334 316 1, 432 288 0, 472 252 1, 512 216 0, 512 157 1, 512 84 0, 454 42 1, 396 0 0, 294 0 1, 193 0 0, 214 -158 1, 214 -126 1, 226 -128 0, 234 -128 1, 256 -128 0, 256 -104 1, 256 -77 0, 233 -71 1, 233 -42 1, 273 -43 0, 292 -57 1, 320 -77 0, 320 -121 1, 320 -192 0, 253 -192 1, 234 -192 0 -384 64 -192 320 384;64 13 1, 64 77 1, 128 64 0, 183 64 1, 256 64 0, 256 116 1, 256 152 0, 204 168 1, 147 187 1, 64 214 0, 64 286 1, 64 384 0, 215 384 1, 258 384 0, 320 381 1, 320 323 1, 263 320 0, 206 320 1, 128 320 0, 128 276 1, 128 244 0, 174 230 1, 225 213 1, 320 182 0, 320 106 1, 320 57 0, 283 29 1, 245 0 0, 180 0 1, 129 0 0, 128 -158 1, 128 -126 1, 146 -128 0, 158 -128 1, 192 -128 0, 192 -104 1, 192 -77 0, 146 -71 1, 146 -42 1, 196 -43 0, 221 -57 1, 256 -77 0, 256 -121 1, 256 -192 0, 175 -192 1, 153 -192 0 -448 0 -192 448 576;192 0 1, 192 512 1, 0 512 1, 0 576 1, 448 576 1, 448 512 1, 256 512 1, 256 0 1, 173 -158 1, 173 -126 1, 196 -128 0, 212 -128 1, 256 -128 0, 256 -104 1, 256 -77 0, 192 -71 1, 192 -42 1, 251 -43 0, 279 -57 1, 320 -77 0, 320 -121 1, 320 -192 0, 227 -192 1, 201 -192 0 -192 0 -192 192 512;192 -2 1, 172 0 0, 154 0 1, 64 0 0, 64 103 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 458 1, 128 465 1, 128 384 1, 192 384 1, 192 320 1, 128 320 1, 128 115 1, 128 84 0, 136 74 1, 144 64 0, 168 64 1, 182 64 0, 192 45 1, 64 -158 1, 64 -126 1, 82 -128 0, 94 -128 1, 128 -128 0, 128 -104 1, 128 -77 0, 82 -71 1, 82 -42 1, 132 -43 0, 157 -57 1, 192 -77 0, 192 -121 1, 192 -192 0, 111 -192 1, 89 -192 0 -256 64 -192 192 0;64 -158 1, 64 -126 1, 82 -128 0, 94 -128 1, 128 -128 0, 128 -104 1, 128 -77 0, 82 -71 1, 82 -42 1, 132 -43 0, 157 -57 1, 192 -77 0, 192 -121 1, 192 -192 0, 111 -192 1, 89 -192 0 -192 64 -128 128 384;64 -120 1, 64 -93 1, 87 -79 0, 87 -9 1, 87 0 1, 64 0 1, 64 64 1, 128 64 1, 128 10 1, 128 -102 0, 64 320 1, 64 384 1, 128 384 1, 128 320 1 -192 64 192 128 256;64 192 1, 64 256 1, 128 256 1, 128 192 1 -256 64 192 192 256;64 192 1, 64 256 1, 192 256 1, 192 192 1 -256 64 192 192 256;64 192 1, 64 256 1, 192 256 1, 192 192 1 -448 0 192 448 256;38 192 1, 38 256 1, 390 256 1, 390 192 1 -768 0 192 768 256;37 192 1, 37 256 1, 731 256 1, 731 192 1 -192 0 0 0 0; -448 64 512 384 576;64 512 1, 64 576 1, 384 576 1, 384 512 1 -448 64 0 448 384;311 256 1, 310 277 0, 303 287 1, 284 320 0, 219 320 1, 173 320 0, 147 305 1, 121 290 0, 115 256 1, 384 72 1, 384 13 1, 314 0 0, 256 0 1, 168 0 0, 116 53 1, 64 107 0, 64 197 1, 64 283 0, 110 333 1, 156 384 0, 234 384 1, 323 384 0, 360 325 1, 387 281 0, 386 212 1, 386 192 1, 114 192 1, 119 153 0, 129 132 1, 162 64 0, 260 64 1, 316 64 0 -448 64 192 384 256;64 192 1, 64 256 1, 384 256 1, 384 192 1 -128 -192 -64 320 576;-165 -14 1, 243 569 1, 293 569 1, -114 -14 1 -192 64 192 128 256;64 192 1, 64 256 1, 128 256 1, 128 192 1 -384 0 0 320 640;64 0 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 468 1, 64 640 0, 194 640 1, 221 640 0, 256 613 1, 256 557 1, 219 576 0, 193 576 1, 157 576 0, 142 555 1, 128 534 0, 128 482 1, 128 384 1, 320 384 1, 320 0 1, 256 0 1, 256 320 1, 128 320 1, 128 0 1, 256 512 1, 256 576 1, 320 576 1, 320 512 1 -384 0 0 320 576;64 0 1, 64 320 1, 0 320 1, 0 384 1, 64 384 1, 64 435 1, 64 576 0, 175 576 1, 256 576 1, 320 576 1, 320 0 1, 256 0 1, 256 518 1, 240 516 1, 206 512 0, 183 512 1, 148 512 0, 137 493 1, 128 477 0, 128 443 1, 128 384 1, 192 384 1, 192 320 1, 128 320 1, 128 0 1 -256 -64 192 256 576;128 229 1, 128 320 1, -25 320 1, -25 382 1, 126 576 1, 192 576 1, 192 384 1, 238 384 1, 238 320 1, 192 320 1, 192 229 1, 24 384 1, 128 384 1, 128 516 1 -192 -64 -192 128 384;-64 -145 1, -64 -87 1, -28 -64 0, 3 -64 1, 46 -64 0, 56 -47 1, 64 -32 0, 64 0 1, 64 384 1, 128 384 1, 128 0 1, 128 -128 0, 2 -128 1, -33 -128 0 -192 0 0 0 0; diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr.ttf b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/luxisr.ttf deleted file mode 100644 index c47fd20beac01131ebfe7f6b927344056487c77a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67548 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 15 values pushed */ - 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - FDEF[ ] - SLOOP[ ] - MDAP[1] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - MDAP[1] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP1[ ] - SRP2[ ] - IP[ ] - ENDF[ ] - FDEF[ ] - SRP1[ ] - SRP2[ ] - SLOOP[ ] - IP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MIRP[11101] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MIRP[10100] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MDRP[11101] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - SLOOP[ ] - MDRP[10100] - ALIGNRP[ ] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MIRP[11101] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MIRP[10100] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MDRP[11101] - ENDF[ ] - FDEF[ ] - SRP0[ ] - MDRP[10100] - ENDF[ ] - FDEF[ ] - MDRP[00100] - ENDF[ ] - FDEF[ ] - MDRP[00000] - ENDF[ ] - FDEF[ ] - SVTCA[0] - NPUSHB[ ] /* 10 values pushed */ - 1 0 0 1 1 2 2 3 3 0 - SZPS[ ] - MIAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SZPS[ ] - ENDF[ ] - - - - - - PUSHB[ ] /* 2 values pushed */ - 48 1 - PUSHW[ ] /* 1 value pushed */ - 329 - RTG[ ] - SCANCTRL[ ] - SCANTYPE[ ] - SCVTCI[ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 16 values pushed */ - 5 6 2 1 4 7 3 0 5 4 2 3 6 7 1 0 - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - SVTCA[0] - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - MDAP[1] - ALIGNRP[ ] - MDRP[11100] - ALIGNRP[ ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 40 values pushed */ - 10 1 8 2 0 0 9 8 15 1 5 1 4 48 196 6 5 1 7 4 3 0 3 2 0 - 2 1 0 14 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 2 6 8 2 0 0 7 6 15 1 4 11 10 15 1 8 13 12 15 1 3 3 4 48 196 - 9 8 1 17 16 1 18 15 14 3 3 1 0 1 4 0 5 4 0 14 18 17 4 3 0 - 5 13 1 0 0 16 15 2 1 33 3 7 1 4 48 196 14 13 1 6 5 1 10 9 1 - 12 11 8 7 3 16 15 2 1 3 5 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 10 1 8 2 0 0 9 8 15 1 5 1 4 48 196 13 12 1 14 11 1 6 5 1 7 - 4 3 0 3 4 0 2 1 0 14 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 59 values pushed */ - 0 0 16 40 25 48 196 10 1 8 2 21 20 12 11 4 13 25 1 0 0 9 8 15 1 - 5 1 4 48 196 6 5 1 7 4 3 0 3 2 0 2 1 0 14 21 20 12 11 10 9 - 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 17 16 2 12 11 3 10 1 8 2 0 0 9 8 15 1 5 1 4 48 196 13 12 1 18 - 15 14 11 3 6 5 1 7 4 3 0 3 4 0 2 1 0 14 18 17 16 15 14 13 12 - 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 93 values pushed */ - 10 1 8 2 0 0 18 15 14 11 13 3 12 9 8 15 1 5 2 4 48 196 17 16 13 - 12 3 6 5 1 7 4 3 0 3 3 0 2 1 0 14 9 5 2 17 15 3 10 2 1 - 3 15 13 3 8 13 11 2 4 3 2 13 17 7 6 0 3 13 11 0 0 16 15 13 1 - 17 14 13 13 1 11 2 4 48 196 18 17 1 12 11 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 10 1 8 2 0 0 9 8 15 1 5 1 4 48 196 14 13 1 12 11 1 6 5 1 7 - 4 3 0 3 4 0 2 1 0 14 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 64 values pushed */ - 10 1 8 2 0 0 14 11 7 1 12 9 8 15 1 5 2 4 48 196 13 12 1 6 5 - 1 7 4 3 0 3 3 0 2 1 0 14 10 9 8 6 5 2 1 7 13 11 3 4 3 - 2 13 13 7 0 11 14 13 1 12 11 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 16 21 21 48 196 10 1 8 2 19 18 21 0 0 0 9 8 15 1 5 1 4 48 - 196 6 5 1 12 11 7 4 3 0 5 2 0 2 1 0 14 0 0 14 42 23 48 196 23 - 19 18 12 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 0 0 35 44 19 27 44 11 48 196 19 0 10 1 8 2 11 1 0 0 9 8 15 1 5 - 1 4 48 196 6 5 1 7 4 3 0 3 2 0 2 1 0 14 0 0 39 32 15 31 32 - 23 48 196 23 15 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 0 0 32 6 15 20 6 27 48 196 10 1 8 2 34 23 22 11 4 13 27 15 1 0 0 - 9 8 15 1 5 1 4 48 196 6 5 1 7 4 3 0 3 2 0 2 1 0 14 34 23 - 22 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 76 values pushed */ - 10 32 30 2 0 0 40 39 15 1 1 31 30 31 1 32 22 21 15 1 0 3 4 48 196 - 33 32 1 20 0 1 2 0 2 1 0 14 0 0 35 9 6 26 26 14 48 196 39 33 30 - 22 20 10 2 7 13 14 6 21 0 0 40 32 31 21 33 3 0 1 4 48 196 1 0 1 - 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 23 29 2 15 29 10 48 196 10 0 2 2 1 1 25 13 12 0 4 0 2 3 0 - 0 14 0 0 19 26 6 48 196 6 12 25 0 1 13 12 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 0 0 23 29 2 15 29 10 48 196 10 0 2 2 1 1 25 13 12 0 4 0 2 3 0 - 0 28 27 1 29 26 1 2 0 14 0 0 19 26 6 48 196 29 28 27 26 4 13 6 12 - 25 0 1 13 12 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 23 29 2 15 29 10 48 196 10 0 2 2 32 31 2 26 27 3 1 1 25 13 12 - 0 4 0 2 3 0 0 33 30 29 26 3 28 27 1 2 0 14 0 0 19 26 6 48 196 - 33 32 31 30 29 28 27 26 8 13 6 12 25 0 1 13 12 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 41 44 36 23 29 2 15 29 10 48 196 10 0 2 2 1 1 25 13 12 0 4 0 - 2 3 0 0 1 45 39 38 28 27 26 6 13 36 2 0 14 0 0 43 42 32 19 26 6 - 48 196 45 39 38 28 27 26 6 13 32 6 12 25 0 1 13 12 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 23 29 2 15 29 10 48 196 10 0 2 2 32 31 2 27 26 3 1 1 25 13 12 - 0 4 0 2 3 0 0 28 27 1 33 30 29 26 3 2 0 14 0 0 19 26 6 48 196 - 33 32 31 30 29 28 27 26 8 13 6 12 25 0 1 13 12 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 0 0 23 29 2 15 29 10 48 196 10 0 2 2 1 1 25 13 12 0 4 0 2 3 0 - 0 0 0 29 26 5 1 27 1 4 48 196 28 27 1 0 14 0 0 19 26 6 48 196 6 - 26 0 0 27 26 4 1 28 1 4 48 196 29 28 1 25 0 1 13 12 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 54 values pushed */ - 0 0 19 18 15 1 1 10 9 15 1 0 2 4 48 196 8 0 1 0 2 1 0 14 0 - 0 12 26 4 48 196 18 10 8 2 4 13 4 9 0 0 19 9 33 1 0 1 4 48 196 - 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 26 25 2 20 21 3 0 0 19 18 15 1 1 10 9 15 1 0 2 4 48 196 27 24 23 - 20 3 22 21 1 8 0 1 3 0 2 1 0 14 0 0 12 26 4 48 196 23 9 0 2 - 27 26 25 24 22 21 20 18 10 8 2 11 13 4 9 0 0 19 9 33 1 0 1 4 48 - 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 23 22 15 1 5 27 26 2 1 15 3 3 14 13 15 1 0 3 4 48 196 25 24 - 4 3 3 12 0 1 2 0 6 5 0 14 0 0 16 26 8 48 196 22 14 12 6 4 25 - 13 3 8 25 0 0 27 24 23 13 33 3 0 1 4 48 196 26 25 1 5 4 1 0 3 - 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 0 0 4 3 15 1 1 8 7 15 1 5 10 9 15 1 0 3 4 48 196 6 5 1 11 - 0 1 2 0 2 1 0 14 0 0 9 8 5 4 33 3 0 1 4 48 196 11 10 1 3 - 2 1 7 6 1 1 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 0 0 4 3 15 1 1 8 7 15 1 5 10 9 15 1 0 3 4 48 196 14 13 1 15 - 12 1 6 5 1 11 0 1 4 0 2 1 0 14 15 14 13 12 4 6 4 3 0 0 9 - 8 5 4 33 3 0 1 4 48 196 11 10 1 3 2 1 7 6 1 1 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 0 0 17 40 26 48 196 22 21 13 12 4 13 26 1 0 0 4 3 15 1 1 8 7 15 - 1 5 10 9 15 1 0 3 4 48 196 6 5 1 11 0 1 2 0 2 1 0 14 22 21 - 13 12 4 6 4 3 0 0 9 8 5 4 33 3 0 1 4 48 196 11 10 1 3 2 1 - 7 6 1 1 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 89 values pushed */ - 18 17 2 12 13 3 0 0 4 3 15 1 1 8 7 15 1 5 10 9 15 1 0 3 4 - 48 196 19 16 15 12 3 14 13 1 6 5 1 11 0 1 4 0 2 1 0 14 19 18 17 - 16 14 13 12 7 6 4 3 15 4 0 2 0 0 9 8 5 4 33 3 0 1 4 48 196 - 11 10 1 3 2 1 7 6 1 1 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 89 values pushed */ - 18 17 2 13 12 3 0 0 4 3 15 1 1 8 7 15 1 5 10 9 15 1 0 3 4 - 48 196 14 13 1 19 16 15 12 3 6 5 1 11 0 1 4 0 2 1 0 14 19 18 17 - 16 15 14 13 7 6 4 3 12 4 0 2 0 0 9 8 5 4 33 3 0 1 4 48 196 - 11 10 1 3 2 1 7 6 1 1 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 88 values pushed */ - 0 0 19 16 15 12 13 3 13 4 3 15 1 1 8 7 15 1 5 10 9 15 1 0 4 - 4 48 196 18 17 14 13 3 6 5 1 11 0 1 3 0 2 1 0 14 0 0 17 16 13 - 1 18 15 14 13 1 12 9 8 5 4 33 3 0 3 4 48 196 19 18 1 13 12 1 11 - 10 1 3 2 1 7 6 1 1 0 1 6 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 76 values pushed */ - 0 0 15 12 5 1 13 4 3 15 1 1 8 7 15 1 5 10 9 15 1 0 4 4 48 - 196 14 13 1 6 5 1 11 0 1 3 0 2 1 0 14 0 0 15 14 4 1 12 9 8 - 5 4 33 3 0 2 4 48 196 13 12 1 11 10 1 3 2 1 7 6 1 1 0 1 5 - 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 74 values pushed */ - 0 0 4 3 15 1 1 8 7 15 1 5 10 9 15 1 0 3 4 48 196 15 14 1 13 - 12 1 6 5 1 11 0 1 4 0 2 1 0 14 15 14 13 12 4 6 4 3 0 0 9 - 8 5 4 33 3 0 1 4 48 196 11 10 1 3 2 1 7 6 1 1 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 15 12 7 1 13 4 3 15 1 1 8 7 15 1 5 10 9 15 1 0 4 4 48 - 196 14 13 1 6 5 1 11 0 1 3 0 2 1 0 14 0 0 13 12 9 8 5 4 33 - 5 0 1 4 48 196 15 14 1 13 12 9 8 5 4 5 11 10 1 3 2 1 7 6 1 - 1 0 1 6 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 0 0 13 40 8 48 196 17 3 2 1 0 3 16 15 11 10 6 5 13 8 0 18 0 1 - 0 5 4 2 1 0 3 14 2 10 17 2 0 0 16 15 4 3 24 3 5 18 17 24 1 - 0 2 4 48 196 6 5 1 11 10 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 94 values pushed */ - 0 0 17 21 22 48 196 20 19 22 0 0 0 4 3 15 1 1 8 7 15 1 5 10 9 - 15 1 0 3 4 48 196 6 5 1 13 12 11 0 3 2 0 2 1 0 14 0 0 15 42 - 24 48 196 20 19 13 3 2 6 3 24 24 12 2 6 4 3 0 0 9 8 5 4 33 3 - 0 1 4 48 196 11 10 1 3 2 1 7 6 1 1 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 23 22 15 1 5 27 26 2 1 15 3 3 14 13 15 1 0 3 4 48 196 25 24 - 4 3 3 12 0 1 2 0 6 5 0 14 0 0 16 26 8 48 196 22 14 12 6 4 25 - 13 3 8 25 0 0 27 24 23 13 33 3 0 1 4 48 196 26 25 1 5 4 1 0 3 - 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 0 0 35 35 30 4 45 9 48 196 30 0 9 2 1 33 32 2 0 25 3 0 1 7 6 - 2 0 2 3 0 0 0 44 43 24 23 6 3 25 49 16 15 0 6 3 17 2 4 48 196 - 42 41 26 25 3 48 47 18 17 3 2 0 14 49 48 47 44 43 42 41 26 25 24 23 18 - 17 16 15 0 16 13 32 7 6 1 33 32 1 2 0 - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 0 0 35 35 30 4 45 9 48 196 30 0 9 2 1 33 32 2 0 25 3 0 1 7 6 - 2 0 2 3 0 0 0 44 43 24 23 6 3 25 49 16 15 0 6 3 17 2 4 48 196 - 42 41 26 25 3 48 47 18 17 3 2 0 14 49 48 47 44 43 42 41 26 25 24 23 18 - 17 16 15 0 16 13 32 7 6 1 33 32 1 2 0 - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 52 values pushed */ - 0 0 4 3 15 1 1 8 7 15 1 5 2 4 48 196 6 5 1 9 0 1 2 0 2 - 1 0 14 0 0 9 8 5 4 33 3 0 1 4 48 196 3 2 1 7 6 1 1 0 1 - 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 20 29 3 14 29 9 48 196 9 0 3 2 1 12 11 2 0 0 3 0 1 22 1 - 2 23 2 3 0 0 0 24 23 15 1 0 1 4 48 196 25 0 1 0 14 0 0 16 26 - 5 48 196 5 24 0 0 23 22 33 1 0 1 4 48 196 1 0 1 12 11 1 25 24 1 - 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 100 values pushed */ - 0 0 31 40 40 20 29 3 14 29 9 48 196 9 0 3 2 1 12 11 2 0 0 3 0 - 1 22 1 2 23 2 3 0 1 36 35 27 26 4 13 40 0 0 0 0 24 23 15 1 0 - 1 4 48 196 25 0 1 0 14 0 0 16 26 5 48 196 36 11 22 2 35 22 24 2 27 - 26 5 24 0 0 23 22 33 1 0 1 4 48 196 1 0 1 12 11 1 25 24 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 109 values pushed */ - 0 0 20 29 3 14 29 9 48 196 9 0 3 2 32 31 2 27 26 3 1 12 11 2 0 - 0 3 0 1 22 1 2 23 2 3 0 0 0 24 23 15 1 0 1 4 48 196 28 27 1 - 33 30 29 26 3 25 0 1 3 0 14 0 0 16 26 5 48 196 29 11 22 2 30 28 2 - 22 24 3 33 32 31 27 26 5 13 5 24 0 0 23 22 33 1 0 1 4 48 196 1 0 - 1 12 11 1 25 24 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 104 values pushed */ - 0 0 29 44 40 20 29 3 14 29 9 48 196 9 0 3 2 1 12 11 2 0 0 3 0 - 1 22 1 2 23 2 3 0 1 34 33 27 26 4 13 40 2 0 0 0 24 23 15 1 0 - 1 4 48 196 25 0 1 0 14 0 0 31 42 38 16 26 5 48 196 38 38 22 24 2 34 - 33 27 26 4 13 5 24 0 0 23 22 33 1 0 1 4 48 196 1 0 1 12 11 1 25 - 24 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 94 values pushed */ - 0 0 20 29 3 14 29 9 48 196 9 0 3 2 1 12 11 2 0 0 3 0 1 22 1 - 2 23 2 3 0 0 0 29 26 5 1 27 24 23 15 1 0 2 4 48 196 28 27 1 25 - 0 1 2 0 14 0 0 16 26 5 48 196 5 26 0 0 27 26 4 1 28 23 22 33 1 - 0 2 4 48 196 29 28 1 1 0 1 12 11 1 25 24 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 10 9 15 1 3 1 4 48 196 4 3 1 11 8 7 0 3 2 0 6 5 2 1 - 0 3 14 0 0 9 8 5 4 33 3 6 11 10 3 2 33 3 0 2 4 48 196 7 6 - 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 107 values pushed */ - 0 0 18 17 6 5 3 2 6 5 7 1 4 48 196 16 15 12 11 8 7 5 22 21 1 - 23 20 19 4 3 18 17 6 5 3 2 5 1 0 1 5 0 14 13 10 9 0 3 14 17 - 16 2 13 14 7 6 4 0 0 21 20 13 12 2 1 33 5 14 23 22 11 10 3 0 33 - 5 4 2 4 48 196 19 18 15 14 3 9 8 5 4 3 21 20 13 12 2 1 5 23 22 - 11 10 3 0 5 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 18 17 2 13 12 3 0 0 10 9 15 1 3 1 4 48 196 14 13 1 19 16 15 12 3 - 4 3 1 11 8 7 0 3 4 0 6 5 2 1 0 3 14 19 18 17 16 15 14 13 12 - 8 4 2 3 0 0 9 8 5 4 33 3 6 11 10 3 2 33 3 0 2 4 48 196 7 - 6 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 23 values pushed */ - 3 0 1 0 2 1 0 14 0 0 3 2 33 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 40 values pushed */ - 6 5 1 7 4 1 3 0 1 3 0 2 1 0 14 7 5 2 2 0 3 6 2 4 0 - 0 0 3 2 33 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 0 0 9 7 18 48 196 14 13 5 4 4 13 18 1 3 0 1 0 2 1 0 14 14 13 - 2 13 2 5 4 0 0 0 3 2 9 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 10 9 2 5 4 3 6 5 1 11 8 7 4 3 3 0 1 3 0 2 1 0 14 10 9 - 2 2 0 3 8 7 6 3 13 2 11 5 4 3 13 0 0 0 3 2 33 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 59 values pushed */ - 0 0 11 8 7 4 13 3 5 1 4 48 196 10 9 6 5 3 3 0 1 2 0 2 1 - 0 14 0 0 9 8 13 1 10 7 6 13 1 4 3 2 33 1 0 3 4 48 196 11 10 - 1 5 4 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 0 0 7 4 5 1 5 1 4 48 196 6 5 1 3 0 1 2 0 2 1 0 14 0 0 - 7 6 4 1 4 3 2 33 1 0 2 4 48 196 5 4 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 40 values pushed */ - 7 6 1 5 4 1 3 0 1 3 0 2 1 0 14 7 5 2 2 0 3 4 2 6 0 - 0 0 3 2 33 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - MDRP[00000] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 45 values pushed */ - 0 0 7 4 7 1 5 1 4 48 196 6 5 1 3 0 1 2 0 2 1 0 14 0 0 - 3 2 33 1 0 1 4 48 196 7 6 1 5 4 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 9 21 14 48 196 12 11 14 0 5 4 3 0 3 0 2 1 0 14 0 0 7 42 - 16 48 196 5 4 2 2 0 3 12 11 2 13 2 16 0 0 0 3 2 33 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 0 0 25 6 8 13 6 20 48 196 27 16 15 4 4 13 20 8 1 3 0 1 0 2 1 - 0 14 16 15 2 13 2 27 4 0 0 0 3 2 9 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 3 30 12 48 196 1 10 7 2 8 2 3 0 1 1 0 12 2 0 9 8 0 14 - 0 0 8 7 33 1 9 1 4 48 196 10 9 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 79 values pushed */ - 0 0 3 30 12 48 196 20 19 2 15 14 3 1 10 7 2 8 2 3 0 1 1 0 12 - 2 0 16 15 1 21 18 17 14 3 2 0 9 8 0 14 20 19 16 3 9 7 3 21 15 - 14 3 7 0 3 18 17 2 13 9 0 0 8 7 33 1 9 1 4 48 196 10 9 1 1 - 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 45 values pushed */ - 9 6 3 3 1 0 3 10 8 7 0 3 0 5 4 2 1 0 3 14 8 7 6 5 4 - 5 13 2 0 0 10 9 3 2 4 3 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 0 0 14 44 25 48 196 9 6 3 3 1 0 3 19 18 12 11 4 13 25 0 10 8 7 - 0 3 0 5 4 2 1 0 3 14 0 0 16 42 23 48 196 19 18 12 11 8 7 6 5 - 4 9 13 23 2 0 0 10 9 3 2 4 3 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 38 values pushed */ - 0 0 4 3 15 1 0 1 4 48 196 5 0 1 0 2 1 0 14 0 0 3 2 33 1 - 0 1 4 48 196 5 4 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 0 0 4 3 15 1 0 1 4 48 196 8 7 1 9 6 1 5 0 1 3 0 2 1 0 - 14 8 7 2 4 2 3 9 6 2 2 0 3 0 0 3 2 33 1 0 1 4 48 196 5 - 4 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 14 11 10 9 7 6 6 1 3 3 0 0 4 3 15 1 0 1 4 48 196 5 0 1 0 - 13 12 2 1 0 3 14 10 9 2 13 6 3 0 0 12 11 7 6 4 3 13 3 2 33 - 1 0 2 4 48 196 14 13 1 5 4 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 9 44 20 48 196 14 13 7 6 4 13 20 0 0 0 4 3 15 1 0 1 4 48 - 196 5 0 1 0 2 1 0 14 0 0 11 42 18 48 196 18 18 14 13 7 6 5 4 2 - 3 0 0 3 2 33 1 0 1 4 48 196 5 4 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 55 values pushed */ - 0 0 9 6 5 1 7 4 3 15 1 0 2 4 48 196 8 7 1 5 0 1 2 0 2 - 1 0 14 0 0 7 6 4 1 8 3 2 33 1 0 2 4 48 196 9 8 1 5 4 1 - 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 10 9 8 7 4 3 2 1 8 5 11 3 0 0 12 11 15 1 0 1 4 48 196 13 0 - 1 0 6 5 0 14 0 0 11 10 7 6 33 3 0 1 4 48 196 13 12 1 9 8 1 - 5 4 1 0 3 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 11 8 3 3 1 9 3 10 9 1 12 7 6 0 3 2 0 5 4 2 1 0 3 14 10 - 9 4 3 2 5 7 11 3 0 0 8 7 4 1 5 12 11 24 1 0 2 4 48 196 6 - 5 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 49 values pushed */ - 8 3 2 1 0 3 9 7 6 0 3 0 5 4 2 1 0 3 14 7 2 2 3 8 3 - 0 0 4 3 24 1 5 9 8 24 1 0 2 4 48 196 6 5 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 8 3 2 1 0 3 12 11 1 13 10 1 9 7 6 0 3 3 0 5 4 2 1 0 3 - 14 13 12 11 10 7 2 6 3 8 3 0 0 4 3 24 1 5 9 8 24 1 0 2 4 - 48 196 6 5 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 16 15 2 10 11 3 8 3 2 1 0 3 17 14 13 10 3 12 11 1 9 7 6 0 3 - 3 0 5 4 2 1 0 3 14 17 16 15 14 13 12 11 10 7 2 10 3 8 3 0 0 - 4 3 24 1 5 9 8 24 1 0 2 4 48 196 6 5 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 13 44 24 48 196 8 3 2 1 0 3 18 17 11 10 4 13 24 0 9 7 6 0 - 3 0 5 4 2 1 0 3 14 0 0 15 42 22 48 196 22 22 18 17 11 10 7 2 7 - 3 8 3 0 0 4 3 24 1 5 9 8 24 1 0 2 4 48 196 6 5 1 1 0 1 - 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 0 0 31 6 14 19 6 26 48 196 8 3 2 1 0 3 33 22 21 10 4 13 26 14 1 - 9 7 6 0 3 0 5 4 2 1 0 3 14 33 22 21 10 7 2 6 3 8 3 0 0 - 4 3 24 1 5 9 8 24 1 0 2 4 48 196 6 5 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 24 29 8 16 29 0 48 196 8 2 0 0 14 0 0 28 26 4 20 26 12 48 196 - 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 0 0 38 29 3 30 29 11 48 196 11 0 3 2 13 14 16 2 26 16 18 2 25 20 22 - 2 1 22 0 2 0 0 17 16 15 1 14 21 20 15 1 18 23 22 15 1 0 3 4 48 - 196 19 18 1 24 0 1 2 0 15 14 0 14 0 0 34 26 7 48 196 7 0 0 0 26 - 25 14 13 1 0 33 5 17 1 4 48 196 24 23 1 16 15 1 20 19 1 22 21 18 17 - 3 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 39 values pushed */ - 0 0 24 29 8 16 29 0 48 196 8 2 0 0 34 33 1 35 32 1 2 0 14 0 0 - 28 26 4 20 26 12 48 196 35 34 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 37 7 46 24 35 8 16 35 0 48 196 8 2 0 0 1 42 41 33 32 4 13 46 - 0 0 14 0 0 28 36 4 20 36 12 48 196 42 41 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 51 values pushed */ - 0 0 24 29 8 16 29 0 48 196 8 2 0 0 38 37 2 33 32 3 34 33 1 39 36 - 35 32 3 2 0 14 0 0 28 26 4 20 26 12 48 196 39 38 37 36 35 34 33 32 12 - 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 0 0 24 29 8 16 29 0 48 196 8 2 0 0 0 0 39 36 35 32 13 3 33 1 4 - 48 196 38 37 34 33 3 0 14 0 0 28 26 4 20 26 12 48 196 4 38 12 32 0 0 - 37 36 13 1 38 35 34 13 1 32 2 4 48 196 39 38 1 33 32 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 39 values pushed */ - 0 0 24 29 8 16 29 0 48 196 8 2 0 0 35 34 1 33 32 1 2 0 14 0 0 - 28 26 4 20 26 12 48 196 35 34 33 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 51 values pushed */ - 0 0 24 29 8 16 29 0 48 196 8 2 0 0 1 39 36 35 32 4 33 0 3 0 38 - 37 34 33 3 0 14 0 0 28 26 4 20 26 12 48 196 39 38 37 36 35 34 33 32 12 - 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 52 values pushed */ - 0 0 24 29 8 16 29 0 48 196 8 2 0 0 0 0 35 32 7 1 33 1 4 48 196 - 34 33 1 0 14 0 0 28 26 4 20 26 12 48 196 4 34 12 32 35 34 1 33 32 1 - 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 37 29 9 28 29 22 48 196 22 2 9 0 1 1 35 34 14 11 4 0 1 3 0 - 0 1 1 43 26 24 1 4 1 2 3 0 0 13 12 1 25 0 1 2 0 14 0 0 41 - 26 5 32 26 18 48 196 43 35 34 26 25 24 18 14 13 12 11 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 48 values pushed */ - 0 0 53 6 36 41 6 48 24 29 8 16 29 0 48 196 8 2 0 0 1 55 44 43 32 - 4 13 48 36 0 0 14 0 0 28 26 4 20 26 12 48 196 55 44 43 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 0 0 21 20 15 1 1 11 10 15 1 13 2 4 48 196 14 13 1 12 0 1 2 0 2 - 1 0 14 0 0 16 26 8 48 196 20 14 10 2 4 13 8 11 0 0 21 13 12 11 33 - 3 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 0 0 33 29 5 25 29 13 48 196 13 0 5 2 1 1 23 0 2 2 0 0 1 3 1 - 0 3 13 2 0 14 0 0 37 26 17 29 26 9 48 196 23 17 9 3 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 69 values pushed */ - 8 14 11 2 0 0 24 23 15 1 1 12 11 15 1 14 2 4 48 196 15 14 1 13 10 - 9 0 3 2 0 2 1 0 14 0 0 19 9 4 48 196 23 15 11 10 9 8 2 7 13 - 4 12 0 0 24 14 13 12 33 3 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 79 values pushed */ - 8 14 11 2 0 0 24 23 15 1 1 12 11 15 1 14 2 4 48 196 27 26 1 28 25 - 1 15 14 1 13 10 9 0 3 4 0 2 1 0 14 0 0 19 9 4 48 196 28 27 26 - 25 23 15 11 10 9 8 2 11 13 4 12 0 0 24 14 13 12 33 3 0 1 4 48 196 - 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 94 values pushed */ - 31 30 2 25 26 3 8 14 11 2 0 0 24 23 15 1 1 12 11 15 1 14 2 4 48 - 196 32 29 28 25 3 27 26 1 15 14 1 13 10 9 0 3 4 0 2 1 0 14 0 0 - 19 9 4 48 196 28 12 0 2 32 31 30 29 27 26 25 23 15 11 10 9 8 2 14 13 - 4 12 0 0 24 14 13 12 33 3 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 0 0 28 44 39 48 196 8 14 11 2 33 32 26 25 4 13 39 0 0 0 24 23 15 1 - 1 12 11 15 1 14 2 4 48 196 15 14 1 13 10 9 0 3 2 0 2 1 0 14 0 - 0 30 42 37 19 9 4 48 196 33 32 26 25 23 15 11 10 9 8 2 11 13 37 4 12 - 0 0 24 14 13 12 33 3 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 52 values pushed */ - 0 0 19 29 14 3 29 34 48 196 34 2 14 0 1 1 17 16 1 0 4 0 2 3 0 - 0 14 0 0 21 43 12 5 9 30 48 196 12 12 16 0 2 30 16 17 16 1 1 0 1 - 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 19 29 14 3 29 34 48 196 34 2 14 0 1 1 17 16 1 0 4 0 2 3 0 - 0 38 37 1 39 36 1 2 0 14 0 0 21 43 12 5 9 30 48 196 12 39 38 37 36 - 12 5 16 0 3 30 16 17 16 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 19 29 14 3 29 34 48 196 34 2 14 0 42 41 2 36 37 3 1 1 17 16 1 - 0 4 0 2 3 0 0 43 40 39 36 3 38 37 1 2 0 14 0 0 21 43 12 5 9 - 30 48 196 12 43 42 41 40 39 38 37 36 12 9 16 0 3 30 16 17 16 1 1 0 1 - 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 79 values pushed */ - 0 0 51 44 46 19 29 14 3 29 34 48 196 34 2 14 0 1 1 17 16 1 0 4 0 - 2 3 0 0 1 55 49 48 38 37 36 6 13 46 2 0 14 0 0 53 42 42 21 43 12 - 5 9 30 48 196 42 12 55 49 48 42 38 37 36 12 8 16 0 3 30 16 17 16 1 1 - 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 19 29 14 3 29 34 48 196 34 2 14 0 42 41 2 37 36 3 1 1 17 16 1 - 0 4 0 2 3 0 0 38 37 1 43 40 39 36 3 2 0 14 0 0 21 43 12 5 9 - 30 48 196 12 43 42 41 40 39 38 37 36 12 9 16 0 3 30 16 17 16 1 1 0 1 - 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 0 0 39 44 50 19 29 14 3 29 34 48 196 34 2 14 0 1 1 17 16 1 0 4 0 - 2 3 0 0 1 44 43 37 36 4 13 50 2 0 14 0 0 41 42 48 21 43 12 5 9 - 30 48 196 48 12 48 44 43 37 36 12 6 16 0 3 30 16 17 16 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 6 5 2 1 15 3 3 1 4 48 196 7 0 1 0 4 3 0 14 0 0 7 6 - 33 1 0 1 4 48 196 5 4 1 1 0 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 0 0 10 9 6 5 15 3 7 14 13 2 1 7 3 3 2 4 48 196 12 11 4 3 3 - 15 0 1 2 0 8 7 0 14 0 0 15 14 11 10 33 3 0 1 4 48 196 9 8 1 - 13 12 1 5 4 1 0 3 3 2 1 7 6 1 5 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 78 values pushed */ - 14 13 2 8 9 3 0 0 6 5 2 1 15 3 3 1 4 48 196 15 12 11 8 3 10 - 9 1 7 0 1 3 0 4 3 0 14 15 9 8 3 4 6 3 14 13 2 6 0 3 12 - 11 10 3 0 2 3 0 0 7 6 33 1 0 1 4 48 196 5 4 1 1 0 1 3 2 - 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 0 0 23 44 18 48 196 27 21 20 10 4 13 18 0 0 0 6 5 2 1 15 3 3 1 - 4 48 196 9 8 7 0 3 0 4 3 0 14 0 0 25 42 14 48 196 14 14 4 6 2 - 10 9 8 3 6 0 3 27 21 20 3 0 2 3 0 0 7 6 33 1 0 1 4 48 196 - 5 4 1 1 0 1 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 78 values pushed */ - 0 0 11 32 22 48 196 16 15 9 8 4 13 22 0 0 0 6 5 2 1 37 3 3 1 - 4 48 196 7 0 1 0 4 3 0 14 0 0 13 22 20 48 196 20 20 4 6 2 9 8 - 2 0 2 3 0 0 7 6 9 1 0 1 4 48 196 5 4 1 16 15 1 0 3 3 2 - 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 68 values pushed */ - 0 0 23 22 15 1 3 16 15 15 1 12 2 4 48 196 4 3 1 13 12 1 14 0 1 - 3 0 2 1 0 14 0 0 18 26 10 48 196 22 16 12 4 4 13 10 2 0 0 3 2 - 33 1 0 23 15 14 13 33 3 0 2 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 0 0 8 29 21 48 196 21 2 1 25 15 12 2 4 0 2 3 0 14 13 1 0 0 3 - 14 0 0 13 12 24 1 14 2 1 33 1 0 2 4 48 196 15 14 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 0 0 8 29 21 48 196 21 2 1 25 15 12 2 4 0 2 3 0 28 27 1 29 26 1 - 2 0 14 13 1 0 0 3 14 29 28 27 26 4 12 1 3 0 0 13 12 24 1 14 2 - 1 33 1 0 2 4 48 196 15 14 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 69 values pushed */ - 0 0 31 7 40 8 35 21 48 196 21 2 1 25 15 12 2 4 0 2 3 0 36 35 27 - 26 4 13 40 0 14 13 1 0 0 3 14 36 35 27 26 4 12 1 3 0 0 13 12 27 - 1 14 2 1 9 1 0 2 4 48 196 15 14 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 78 values pushed */ - 0 0 8 29 21 48 196 21 2 32 31 2 27 26 3 1 25 15 12 2 4 0 2 3 0 - 28 27 1 33 30 29 26 3 2 0 14 13 1 0 0 3 14 33 32 31 30 29 28 27 26 - 8 12 1 3 0 0 13 12 24 1 14 2 1 33 1 0 2 4 48 196 15 14 1 25 0 - 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 8 29 21 48 196 21 2 1 25 15 12 2 4 0 2 3 0 0 0 33 30 29 26 - 13 3 27 1 4 48 196 32 31 28 27 3 0 14 13 1 0 0 3 14 0 0 31 30 13 - 1 32 29 28 13 1 26 13 12 24 1 14 2 1 33 1 0 4 4 48 196 33 32 1 27 - 26 1 15 14 1 25 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 0 0 8 29 21 48 196 21 2 1 25 15 12 2 4 0 2 3 0 29 28 1 27 26 1 - 2 0 14 13 1 0 0 3 14 29 28 27 26 4 12 1 3 0 0 13 12 24 1 14 2 - 1 33 1 0 2 4 48 196 15 14 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 79 values pushed */ - 0 0 8 29 21 48 196 21 2 33 30 29 26 4 27 0 3 1 25 15 12 2 4 0 2 - 3 0 32 31 28 27 3 0 14 13 1 0 0 3 14 32 14 12 2 33 31 30 29 28 27 - 26 7 12 1 3 0 0 13 12 24 1 14 2 1 33 1 0 2 4 48 196 15 14 1 25 - 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 8 29 21 48 196 21 2 1 25 15 12 2 4 0 2 3 0 0 0 29 26 7 1 - 27 1 4 48 196 28 27 1 0 14 13 1 0 0 3 14 0 0 13 12 24 1 14 2 1 - 33 1 0 2 4 48 196 29 28 1 27 26 1 15 14 1 25 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 0 0 3 44 14 48 196 14 8 7 1 0 14 0 0 5 42 12 48 196 12 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 31 21 36 8 29 21 48 196 21 2 1 25 15 12 2 4 0 2 3 0 1 34 33 - 27 26 4 13 36 2 0 14 13 1 0 0 3 14 0 0 29 42 38 48 196 38 38 34 33 - 27 26 5 12 1 3 0 0 13 12 24 1 14 2 1 33 1 0 2 4 48 196 15 14 1 - 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 50 44 34 42 44 26 8 29 21 48 196 21 2 1 25 15 12 2 4 0 2 3 0 - 34 26 0 14 13 1 0 0 3 14 0 0 54 32 30 46 32 38 48 196 38 30 38 30 2 - 12 1 3 0 0 13 12 24 1 14 2 1 33 1 0 2 4 48 196 15 14 1 25 0 1 - 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 73 values pushed */ - 0 0 47 6 30 35 6 42 8 35 21 48 196 21 2 1 25 15 12 2 4 0 2 3 0 - 49 38 37 26 4 13 42 30 0 14 13 1 0 0 3 14 49 38 37 26 4 12 1 3 0 - 0 13 12 27 1 14 2 1 9 1 0 2 4 48 196 15 14 1 25 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - NPUSHB[ ] /* 22 values pushed */ - 3 1 0 2 6 0 1 0 5 4 2 1 0 3 14 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 35 values pushed */ - 11 6 3 3 1 0 3 12 10 9 0 3 0 8 7 5 4 2 1 0 5 14 12 11 10 - 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 19 18 2 14 13 3 11 6 3 3 1 0 3 15 14 1 20 17 16 13 3 12 10 9 0 - 3 3 0 8 7 5 4 2 1 0 5 14 20 19 18 17 16 15 14 13 12 11 10 9 8 - 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 33 values pushed */ - 10 7 4 1 4 2 0 3 11 9 8 0 3 0 6 5 3 2 0 3 14 11 10 9 8 - 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 45 values pushed */ - 7 4 1 3 2 0 3 8 0 1 0 6 5 3 2 0 3 14 4 7 0 2 6 5 2 - 13 7 3 2 0 0 0 8 7 33 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 59 values pushed */ - 7 4 1 3 2 0 3 11 10 1 12 9 1 8 0 1 3 0 6 5 3 2 0 3 14 - 12 4 2 7 0 3 11 10 6 5 4 13 7 9 3 2 3 13 0 0 0 8 7 33 1 - 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 15 14 2 10 9 3 7 4 1 3 2 0 3 11 10 1 16 13 12 9 3 8 0 1 3 - 0 6 5 3 2 0 3 14 15 14 10 4 4 7 0 3 13 12 11 6 5 5 13 7 16 - 9 3 2 4 13 0 0 0 8 7 33 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 7 4 1 3 2 0 3 0 0 16 13 12 9 13 3 10 1 4 48 196 15 14 11 10 3 - 8 0 1 2 0 6 5 3 2 0 3 14 4 7 11 2 6 5 2 13 15 3 2 9 0 - 0 14 13 13 1 15 12 11 13 1 9 8 7 33 1 0 3 4 48 196 16 15 1 10 9 - 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 0 0 6 3 2 15 2 4 1 4 8 7 1 2 0 1 6 48 196 9 0 1 0 5 4 - 0 14 7 2 2 5 3 3 9 8 6 5 3 4 3 1 1 0 1 3 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 0 0 6 3 2 15 2 4 1 4 8 7 1 2 0 1 6 48 196 12 11 1 13 10 1 - 9 0 1 3 0 5 4 0 14 13 12 11 10 7 2 6 5 3 3 9 8 6 5 3 4 - 3 1 1 0 1 3 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 69 values pushed */ - 16 15 2 10 11 3 0 0 6 3 2 15 2 4 1 4 8 7 1 2 0 1 6 48 196 - 17 14 13 10 3 12 11 1 9 0 1 3 0 5 4 0 14 17 16 15 14 13 12 11 10 - 7 2 10 5 3 3 9 8 6 5 3 4 3 1 1 0 1 3 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 13 10 5 1 11 6 3 2 15 2 4 2 4 8 7 1 2 0 1 6 48 196 12 - 11 1 9 0 1 2 0 5 4 0 14 2 5 12 2 7 10 3 2 0 0 13 12 4 1 - 10 1 4 48 196 11 10 1 9 8 6 5 3 4 3 1 1 0 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 82 values pushed */ - 0 0 41 29 2 12 40 17 48 196 29 2 17 1 2 2 24 1 1 34 33 27 26 24 22 - 21 15 14 10 9 8 0 13 1 2 3 0 0 14 0 0 39 43 6 48 196 0 21 9 2 - 8 9 14 2 27 26 2 13 21 6 14 0 0 34 33 10 9 4 3 21 1 4 48 196 22 - 21 1 15 14 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 2 1 1 3 0 1 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 0 0 57 40 12 45 40 50 20 40 25 48 196 50 1 33 2 25 2 12 1 1 48 47 41 - 10 4 1 52 3 0 40 39 14 1 4 52 15 3 8 1 29 23 22 8 0 5 15 2 3 - 0 0 0 16 15 7 1 52 1 4 48 196 53 52 1 0 14 53 52 29 16 10 5 22 0 - 3 6 39 6 2 0 47 3 15 14 2 13 22 37 47 23 22 1 48 47 1 41 40 1 0 - 3 3 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[1] - CALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 11 1 1 1 4 48 196 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 54 40 17 46 40 3 48 196 17 0 3 2 1 48 38 25 11 4 0 30 3 0 36 - 33 29 27 1 5 30 0 3 31 30 1 35 0 1 2 0 14 0 0 56 41 13 52 14 21 - 42 41 7 48 196 48 38 36 35 33 31 30 29 27 25 21 13 11 7 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 3 0 8 1 1 1 4 48 196 2 1 1 0 14 0 0 3 2 8 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 18 values pushed */ - 3 0 2 13 1 5 4 2 1 3 0 14 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 24 7 5 11 7 18 48 196 5 13 18 0 14 13 1 1 0 1 2 0 14 14 13 - 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 34 1 36 34 32 24 23 21 20 19 8 1 0 11 30 1 3 0 1 1 29 18 16 15 14 - 13 11 10 9 3 2 11 1 2 3 0 0 31 30 0 14 36 32 31 30 29 24 23 21 20 - 19 18 16 15 14 13 11 10 9 8 5 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 74 6 28 68 16 34 62 16 2 54 16 10 46 16 18 48 196 10 0 2 2 34 1 - 34 0 40 2 0 28 18 1 66 65 64 28 24 23 18 0 8 40 2 3 0 41 40 1 0 - 14 0 0 72 15 30 58 17 6 50 17 14 48 196 66 65 64 44 41 40 30 24 23 20 14 - 6 0 - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - MDAP[1] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 23 2 15 1 9 3 1 1 11 9 3 1 0 5 1 2 3 0 0 1 26 25 2 0 28 - 27 1 0 14 19 5 0 0 0 28 25 11 1 0 4 4 26 1 4 48 196 27 26 1 28 - 25 11 1 0 4 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - CALL[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 12 values pushed */ - 1 0 1 0 3 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 2 1 1 3 0 1 2 0 14 0 0 3 2 7 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 55 values pushed */ - 50 49 38 37 36 25 14 13 12 1 0 14 0 0 47 15 27 32 13 42 18 13 8 3 15 - 23 48 196 42 27 23 8 49 42 36 27 25 23 14 8 1 9 12 0 3 38 37 13 12 3 - 50 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 55 values pushed */ - 52 51 40 39 38 25 14 13 12 1 0 14 0 0 49 15 29 34 13 44 18 13 8 3 15 - 23 48 196 44 29 23 8 51 44 38 29 25 23 14 8 1 9 0 12 3 52 0 1 40 39 - 13 12 3 2 0 - LOOPCALL[ ] - CALL[ ] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 0 0 4 3 7 1 1 6 5 7 1 0 2 4 48 196 2 1 1 7 0 1 2 0 14 - 0 0 5 4 13 1 0 1 4 48 196 7 6 3 2 3 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 0 0 6 5 7 1 0 4 3 7 1 1 2 4 48 196 7 0 1 2 1 1 2 0 14 - 0 0 5 4 13 1 0 1 4 48 196 1 0 1 7 6 3 2 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 17 values pushed */ - 0 0 5 40 14 48 196 14 10 9 1 0 14 10 9 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 34 values pushed */ - 6 5 1 7 4 1 2 1 1 3 0 1 4 0 14 0 0 7 6 3 2 7 3 0 1 - 4 48 196 5 4 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 15 values pushed */ - 0 0 0 8 48 196 8 14 0 0 4 12 48 196 12 - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 21 29 2 15 40 10 48 196 10 1 2 2 1 1 23 13 12 0 4 1 2 3 0 - 0 14 0 0 17 26 6 48 196 6 12 23 0 1 13 12 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 6 5 2 0 1 3 7 4 3 0 3 2 1 1 2 0 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 21 29 2 15 40 10 48 196 10 1 2 2 30 29 2 25 24 3 1 1 23 13 12 - 0 4 1 2 3 0 0 26 25 1 31 28 27 24 3 2 0 14 0 0 17 26 6 48 196 - 27 0 31 30 29 28 26 25 24 7 13 6 12 23 0 1 13 12 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 0 0 21 29 2 15 40 10 48 196 10 1 2 2 1 1 23 13 12 0 4 1 2 3 0 - 0 0 0 27 24 5 1 25 1 4 48 196 26 25 0 14 0 0 17 26 6 48 196 6 24 - 0 0 25 24 4 1 26 1 4 48 196 27 26 1 23 0 1 13 12 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 29 values pushed */ - 0 0 15 44 10 48 196 19 13 12 10 2 1 0 14 0 0 17 42 6 48 196 19 13 12 - 6 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 55 values pushed */ - 33 25 24 23 21 20 18 17 15 14 12 11 10 9 1 0 14 0 0 29 9 5 48 196 5 - 0 0 0 33 25 10 9 1 0 11 5 11 1 4 48 196 21 20 15 14 3 24 23 18 17 - 12 11 5 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 6 5 2 1 0 3 2 1 1 7 4 3 0 3 2 0 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 7 4 5 1 5 2 1 5 1 0 2 4 48 196 3 0 1 0 6 5 1 14 0 - 0 7 6 3 2 4 3 0 1 4 48 196 5 4 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 8 5 4 3 1 0 6 13 6 7 6 1 0 14 4 3 2 7 0 3 0 0 8 7 8 - 1 0 1 4 48 196 6 5 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 0 0 56 20 34 48 21 42 24 20 8 16 20 0 48 196 8 2 0 0 42 34 1 1 58 - 46 45 42 34 32 6 0 2 3 0 0 14 0 0 52 42 38 28 17 4 20 17 12 48 196 - 58 46 45 38 32 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 68 values pushed */ - 0 0 36 6 26 28 6 12 48 196 12 1 1 16 15 9 8 4 13 1 0 1 24 23 22 - 21 17 14 10 7 3 2 1 0 12 13 26 1 0 14 0 0 40 6 19 32 6 5 48 196 - 24 23 22 21 19 17 16 15 14 10 9 8 7 5 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 23 1 15 2 9 3 1 25 11 9 3 1 0 6 1 28 3 0 27 26 1 29 28 1 2 - 0 14 19 5 0 0 0 29 26 25 11 1 0 4 5 27 1 4 48 196 28 27 1 29 26 - 25 11 1 0 5 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 42 values pushed */ - 1 10 9 8 7 4 3 2 1 8 5 2 3 0 11 0 1 0 6 5 0 14 11 10 7 - 6 5 4 1 0 8 8 2 3 9 8 1 3 2 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 1 18 17 16 15 14 13 12 11 8 7 6 5 4 3 2 1 16 9 2 3 0 19 0 1 - 0 10 9 0 14 19 10 2 12 11 3 9 0 2 1 2 3 0 0 18 15 14 11 7 3 - 1 1 4 48 196 17 16 13 12 3 8 5 4 1 3 7 6 3 2 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 23 1 15 2 1 38 35 34 33 31 30 6 26 1 3 0 9 3 1 25 11 9 3 1 0 - 6 1 28 3 0 37 36 27 26 3 29 28 1 2 0 14 34 33 2 37 30 3 19 5 0 - 0 0 36 35 31 30 4 3 37 29 26 25 11 1 0 4 5 27 2 4 48 196 38 37 1 - 28 27 1 29 26 25 11 1 0 5 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 90 values pushed */ - 0 0 36 30 16 30 40 24 48 196 24 1 16 2 1 28 27 26 12 4 1 10 3 0 0 - 0 9 8 1 0 6 3 2 1 4 48 196 5 4 1 7 6 3 2 3 11 10 1 3 0 - 14 0 0 32 9 20 48 196 8 7 2 13 5 2 1 20 0 0 0 28 27 26 12 11 4 - 3 0 4 7 5 1 4 48 196 10 9 6 5 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 29 values pushed */ - 0 0 24 6 8 16 6 0 48 196 0 0 1 8 0 0 14 0 0 28 6 4 20 6 12 - 48 196 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 7 4 3 0 13 3 1 1 4 48 196 6 5 2 1 3 0 14 0 0 5 4 13 - 1 6 3 2 13 1 0 2 4 48 196 7 6 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 59 values pushed */ - 0 0 10 9 8 1 8 7 4 8 1 5 3 0 7 1 1 3 4 48 196 11 8 1 6 - 5 1 2 1 1 3 0 14 0 0 11 10 7 6 8 3 4 1 4 48 196 9 8 5 4 - 3 3 2 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 46 45 44 38 37 36 24 23 21 20 18 17 16 15 7 6 4 3 1 0 14 0 0 48 13 - 11 40 13 32 48 196 11 11 0 3 2 32 20 0 0 44 38 37 36 24 23 18 17 11 7 - 0 1 4 48 196 21 20 1 46 45 16 15 7 6 1 0 7 4 3 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 0 0 3 0 5 1 1 1 4 48 196 2 1 0 14 0 0 3 2 4 1 0 1 4 48 - 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 23 values pushed */ - 3 0 1 0 2 1 1 14 0 0 3 2 4 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 40 values pushed */ - 0 0 3 40 12 48 196 1 10 7 1 0 4 13 12 2 0 9 8 1 14 0 0 8 7 - 4 1 9 1 4 48 196 10 9 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 3 0 8 1 1 1 4 48 196 2 1 1 0 14 0 0 3 2 8 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 48 values pushed */ - 0 0 30 40 12 48 196 20 1 12 2 4 1 4 1 0 2 0 1 10 9 2 25 2 3 - 0 26 25 1 8 0 1 2 0 14 25 9 26 8 0 3 13 16 9 10 9 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 37 40 46 30 40 12 48 196 20 1 12 2 4 1 4 1 0 2 0 1 10 9 2 - 25 2 3 0 1 42 41 33 32 4 13 46 1 0 26 25 1 8 0 1 2 0 14 25 9 - 42 41 33 32 26 8 0 7 13 16 9 10 9 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 51 values pushed */ - 0 0 54 40 24 38 40 8 48 196 24 2 8 0 1 1 46 32 16 0 4 0 2 3 0 - 0 14 0 0 58 43 20 50 41 28 42 14 4 34 14 12 48 196 46 32 28 20 16 12 4 - 0 - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 10 9 6 5 2 1 5 5 0 1 4 48 196 11 8 7 4 3 0 5 0 14 0 - 0 9 8 4 1 10 7 6 4 1 4 3 2 4 1 0 3 4 48 196 11 10 1 5 4 - 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 11 1 1 1 4 48 196 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 6 1 1 1 4 48 196 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 24 30 7 17 40 12 48 196 7 1 26 20 9 3 4 1 0 3 19 15 14 10 4 - 13 12 0 27 0 1 0 2 1 1 14 0 0 20 19 4 1 9 27 26 3 2 4 3 0 - 2 4 48 196 10 9 1 15 14 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 0 0 7 4 7 1 5 2 1 7 1 0 2 4 48 196 6 5 1 3 0 1 2 0 14 - 7 6 3 2 3 5 4 1 0 3 2 0 - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 48 values pushed */ - 0 0 30 40 12 48 196 20 1 12 2 4 1 4 1 0 2 0 1 10 9 2 25 2 3 - 0 26 25 1 8 0 1 2 0 14 25 9 26 8 0 3 13 16 9 10 9 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 0 0 37 40 14 31 40 22 48 196 22 1 14 2 1 1 29 28 27 26 6 0 6 0 1 - 3 0 0 1 1 24 1 2 2 0 0 1 5 4 3 1 4 13 0 0 14 0 0 39 9 - 10 35 9 18 48 196 29 28 27 26 24 6 5 4 3 9 13 10 0 18 0 1 0 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 54 values pushed */ - 8 5 2 6 4 3 0 0 2 1 5 1 0 1 4 48 196 9 4 1 3 0 1 2 0 - 7 6 0 14 9 4 2 2 0 3 0 0 8 7 3 2 4 3 0 1 4 48 196 6 5 - 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 1 8 5 2 2 6 3 0 0 0 2 1 5 1 0 1 4 48 196 9 4 1 7 6 1 - 2 0 3 0 1 14 9 4 2 0 2 3 0 0 6 5 1 0 4 3 2 1 4 48 196 - 8 7 3 2 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 68 values pushed */ - 0 0 12 40 7 48 196 16 10 9 5 4 13 7 3 0 0 20 19 2 1 7 3 3 1 - 4 48 196 21 0 1 0 18 17 4 3 1 3 14 0 0 21 20 17 16 4 3 0 1 4 - 48 196 10 9 1 19 18 1 5 4 1 0 3 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 0 0 12 40 7 48 196 10 25 24 2 16 5 2 24 3 3 9 7 25 0 0 27 24 5 - 1 25 22 21 2 1 7 3 3 2 4 48 196 23 20 19 0 3 0 26 25 0 18 17 4 - 3 1 3 14 0 0 25 24 21 20 4 3 18 23 22 17 16 4 3 0 2 4 48 196 27 - 26 19 18 3 10 9 1 5 4 1 0 3 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 0 0 12 40 7 48 196 10 25 24 2 16 5 2 24 3 3 9 7 25 0 0 27 24 5 - 1 25 22 21 2 1 7 3 3 2 4 48 196 23 20 19 0 3 0 26 25 0 18 17 4 - 3 1 3 14 0 0 25 24 21 20 4 3 18 23 22 17 16 4 3 0 2 4 48 196 27 - 26 19 18 3 10 9 1 5 4 1 0 3 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 0 0 3 0 6 1 1 1 4 48 196 2 1 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 3 40 24 48 196 24 2 9 1 16 11 9 1 4 14 2 3 0 1 0 2 0 0 - 0 15 14 13 1 12 1 4 48 196 13 12 0 14 0 0 7 9 20 48 196 20 13 0 0 - 16 15 13 1 11 1 4 48 196 14 13 1 12 11 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 15 40 7 48 196 19 12 5 3 8 3 3 7 8 0 0 23 22 2 1 7 3 3 - 1 4 48 196 9 8 1 24 11 10 0 3 2 0 21 20 4 3 1 3 14 0 0 12 11 - 8 4 2 9 24 23 20 19 4 3 0 2 4 48 196 10 9 1 22 21 1 5 4 1 0 - 3 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 81 values pushed */ - 0 0 15 40 7 48 196 19 12 5 3 8 3 3 7 8 0 0 23 22 2 1 7 3 3 - 1 4 48 196 9 8 1 24 11 10 0 3 2 0 21 20 4 3 1 3 14 0 0 12 11 - 8 4 2 9 24 23 20 19 4 3 0 2 4 48 196 10 9 1 22 21 1 5 4 1 0 - 3 3 2 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 67 values pushed */ - 0 0 12 40 7 48 196 7 0 1 10 0 3 2 0 1 9 0 0 0 0 18 17 2 1 - 7 3 3 1 4 48 196 16 15 4 3 3 19 0 1 2 0 14 19 18 15 4 1 5 16 - 2 3 10 9 2 13 16 0 2 17 16 1 3 2 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 69 values pushed */ - 13 4 6 2 3 6 1 2 0 0 12 11 7 6 15 3 1 1 4 48 196 9 8 2 1 - 3 10 0 1 2 0 5 4 0 14 11 0 2 2 0 0 4 1 0 24 2 5 13 12 13 - 1 5 2 4 48 196 8 7 1 10 9 6 5 3 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 13 4 6 2 3 6 1 2 10 0 1 0 0 9 8 2 1 38 3 6 1 4 48 196 5 - 4 1 12 11 7 6 3 2 0 14 8 7 2 13 5 11 4 3 2 4 13 0 0 0 13 - 12 1 0 22 3 5 1 4 48 196 10 9 6 5 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 9 values pushed */ - 3 2 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 9 values pushed */ - 3 2 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 0 0 36 40 31 48 196 23 1 15 2 9 3 1 38 27 11 9 3 1 0 7 25 2 3 - 0 1 34 33 31 2 0 26 25 1 14 5 5 0 33 2 19 33 27 26 1 34 33 1 38 - 25 11 1 0 4 3 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 86 values pushed */ - 0 0 36 40 31 48 196 23 1 15 2 45 44 2 40 39 3 9 3 1 38 27 11 9 3 - 1 0 7 25 2 3 0 1 34 33 31 2 0 41 40 1 46 43 42 39 3 2 0 26 25 - 1 14 43 42 2 26 0 3 5 46 45 44 41 40 39 5 7 0 33 3 19 33 27 26 1 - 34 33 1 38 25 11 1 0 4 3 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - MDAP[1] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 92 values pushed */ - 0 0 36 40 31 48 196 23 1 15 2 9 3 1 38 27 11 9 3 1 0 7 25 2 3 - 0 47 44 43 42 40 39 6 13 45 1 34 33 31 2 0 46 45 1 0 26 25 1 14 43 - 42 2 39 46 3 5 5 46 33 2 19 33 0 0 45 44 40 39 4 3 46 1 4 48 196 - 47 46 1 27 26 1 34 33 1 38 25 11 1 0 4 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 36 40 31 48 196 23 1 15 2 9 3 1 38 27 11 9 3 1 0 7 25 2 3 - 0 1 34 33 31 2 0 0 0 42 39 5 1 40 1 4 48 196 41 40 0 26 25 1 14 - 5 5 39 33 2 19 33 0 0 42 41 4 1 39 1 4 48 196 40 39 1 27 26 1 34 - 33 1 38 25 11 1 0 4 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 0 0 36 40 5 23 40 18 48 196 18 2 40 21 20 1 4 13 5 0 41 0 1 0 14 - 0 0 34 41 7 25 14 16 11 14 30 48 196 30 16 7 3 12 20 0 0 41 40 4 1 - 0 1 4 48 196 21 20 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 3 2 1 1 0 1 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 6 5 4 3 2 1 0 14 5 4 1 3 13 0 6 3 2 0 3 0 - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 11 10 9 8 7 6 5 4 3 2 1 0 14 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 11 10 9 8 7 6 5 4 3 2 1 0 14 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 5 4 3 2 1 0 14 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 5 4 3 2 1 0 14 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 56 values pushed */ - 0 0 16 30 7 48 196 7 1 1 18 12 9 3 4 1 0 3 0 2 1 1 19 11 10 - 0 3 2 0 14 0 0 12 11 4 1 9 19 18 3 2 4 3 0 2 4 48 196 10 9 - 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 24 30 15 48 196 15 1 1 26 20 17 11 4 1 0 3 0 0 0 10 9 2 1 - 6 3 3 1 4 48 196 6 5 1 8 7 4 3 3 27 19 18 0 3 3 0 14 9 8 - 2 19 6 3 3 2 0 0 0 20 19 4 1 17 27 26 11 10 7 6 4 5 0 2 4 - 48 196 18 17 1 5 4 1 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 16 7 48 196 7 1 26 25 2 21 20 3 1 18 12 9 3 4 1 0 3 0 22 - 21 1 27 24 23 20 3 2 1 1 19 11 10 0 3 4 0 14 23 9 11 2 27 26 25 - 24 22 21 6 11 2 3 20 2 0 2 0 0 12 11 5 1 9 19 18 3 2 5 3 0 - 2 4 48 196 10 9 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 22 values pushed */ - 7 4 3 0 4 13 1 6 5 2 1 3 0 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 196 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 196 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 41 values pushed */ - 0 0 7 4 5 1 5 1 4 48 196 3 0 1 0 6 5 0 2 1 1 14 0 0 7 - 6 3 2 4 3 0 1 4 48 196 5 4 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 0 0 9 40 18 48 196 14 13 5 4 4 13 18 1 3 0 1 0 2 1 1 14 14 13 - 2 13 2 5 4 0 0 0 3 2 4 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 59 values pushed */ - 0 0 11 8 7 4 13 3 5 1 4 48 196 10 9 6 5 3 3 0 1 2 0 2 1 - 1 14 0 0 9 8 13 1 10 7 6 13 1 4 3 2 4 1 0 3 4 48 196 11 10 - 1 5 4 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 0 0 25 6 8 13 6 20 48 196 8 0 20 1 27 20 4 3 0 1 3 0 1 16 15 - 2 13 0 0 3 0 1 0 2 1 1 14 16 15 2 13 2 27 4 0 0 0 3 2 5 - 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 0 0 3 40 12 48 196 1 10 7 1 0 4 13 12 2 0 0 0 17 14 5 1 15 1 - 4 48 196 16 15 0 9 8 1 14 0 0 15 14 8 7 4 3 9 1 4 48 196 17 16 - 10 9 3 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 75 values pushed */ - 0 0 3 40 12 48 196 20 19 2 15 14 3 1 10 7 1 0 4 13 12 2 0 16 15 - 1 21 18 17 14 3 2 0 9 8 1 14 20 19 16 3 9 7 3 21 15 14 3 7 0 - 3 18 17 2 13 9 0 0 10 9 4 1 7 1 4 48 196 8 7 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 9 6 3 3 4 0 3 2 1 1 10 8 7 0 3 2 0 5 4 1 14 8 7 6 5 - 4 5 13 2 0 0 10 9 3 2 4 3 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 45 values pushed */ - 9 6 3 3 1 0 3 10 8 7 0 3 0 5 4 2 1 1 3 14 8 7 6 5 4 - 5 13 2 0 0 10 9 3 2 4 3 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 2 1 1 3 0 1 2 0 14 0 0 3 2 4 1 0 1 4 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 53 values pushed */ - 12 9 8 7 5 4 6 1 0 3 11 10 2 1 3 3 0 1 2 0 14 8 7 2 11 - 4 3 0 0 10 9 5 4 4 3 11 3 2 4 1 0 2 4 48 196 12 11 1 1 0 - 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 0 0 7 4 5 1 5 1 4 48 196 6 5 1 2 1 1 3 0 1 3 0 14 0 0 - 5 4 4 1 6 3 2 4 1 0 2 4 48 196 7 6 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - NPUSHB[ ] /* 20 values pushed */ - 6 5 4 3 2 1 0 14 5 4 1 3 13 0 6 3 2 0 3 0 - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 39 values pushed */ - 0 0 5 0 7 1 1 1 4 48 196 2 1 1 4 3 1 2 0 14 0 0 5 4 7 - 1 2 1 4 48 196 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 48 values pushed */ - 0 0 14 7 9 48 196 16 12 11 5 4 3 2 1 8 13 9 0 17 0 1 0 14 0 - 0 17 16 5 1 0 1 4 48 196 12 11 1 5 4 1 0 3 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 10 9 8 7 4 3 2 1 8 5 0 3 6 5 1 11 0 1 2 0 14 0 0 11 10 - 7 6 4 3 0 1 4 48 196 9 8 1 5 4 1 0 3 3 2 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 70 values pushed */ - 0 0 29 29 7 22 29 15 48 196 15 1 7 1 31 27 24 17 11 3 6 1 0 3 32 - 26 25 19 18 0 5 0 2 1 1 14 19 17 11 2 0 0 25 24 11 4 2 26 32 31 - 3 2 4 3 0 2 4 48 196 18 17 1 27 26 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 196 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 196 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 196 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 60 values pushed */ - 0 0 6 29 15 48 196 15 2 17 13 8 2 4 0 11 3 12 11 1 19 18 1 2 0 - 10 9 1 0 1 3 14 0 0 13 12 9 8 4 3 10 18 17 2 1 4 3 0 2 4 - 48 196 11 10 1 19 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 1 11 10 9 8 7 6 5 4 3 2 1 0 12 13 1 0 14 11 10 9 8 7 6 5 - 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 53 values pushed */ - 0 0 16 30 7 48 196 7 1 18 12 9 3 4 1 0 3 19 11 10 0 3 0 2 1 - 1 14 0 0 12 11 4 1 9 19 18 3 2 4 3 0 2 4 48 196 10 9 1 1 0 - 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 0 0 16 30 7 48 196 7 1 28 25 24 23 21 20 6 26 1 3 18 12 9 3 4 1 - 0 3 27 26 1 19 11 10 0 3 2 0 2 1 1 14 24 23 2 27 20 3 0 0 28 - 27 4 1 20 12 11 4 1 9 19 18 3 2 4 3 0 3 4 48 196 26 25 21 20 3 - 10 9 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 196 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 0 0 33 40 2 29 40 10 23 40 18 48 196 18 2 10 0 2 1 1 21 20 2 0 4 - 0 2 3 0 0 14 0 0 37 26 14 31 41 6 48 196 0 14 20 6 20 21 20 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - MDRP[00000] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 14 13 10 9 4 13 7 27 24 23 0 4 13 1 0 0 31 30 18 17 6 5 6 5 7 - 29 28 20 19 4 3 6 5 1 2 4 48 196 16 15 12 11 8 7 5 26 25 22 21 2 - 1 5 2 0 14 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 - 11 10 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 20 40 8 16 40 0 48 196 8 2 0 1 14 0 0 22 9 4 18 9 12 48 196 - 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 44 values pushed */ - 0 0 29 7 38 20 7 8 16 7 0 48 196 8 2 0 1 1 34 33 25 24 4 13 38 - 1 0 14 0 0 22 9 4 18 9 12 48 196 34 33 25 24 12 4 - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 55 40 4 44 40 26 38 40 34 13 40 18 48 196 34 1 26 2 18 2 4 1 1 - 0 1 50 2 0 1 22 16 15 3 8 2 3 0 0 0 9 8 31 1 50 1 4 48 196 - 51 50 1 0 14 0 0 40 43 30 48 196 51 50 22 9 0 5 13 46 30 8 16 15 8 - 2 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 0 0 5 21 10 48 196 10 8 7 1 0 14 0 0 3 42 12 48 196 12 8 7 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 49 values pushed */ - 6 5 4 3 4 13 1 0 0 8 7 2 1 7 3 0 1 4 48 196 9 0 1 0 14 - 0 0 7 6 4 1 2 1 4 48 196 9 8 1 3 2 1 5 4 1 0 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 85 values pushed */ - 0 0 8 11 13 48 196 33 32 31 30 27 26 11 10 8 13 13 29 28 25 0 0 0 23 - 22 1 38 2 0 1 4 48 196 34 29 1 24 0 1 2 0 14 0 0 6 37 17 48 196 - 27 26 24 23 22 11 10 1 0 9 13 17 33 32 31 28 25 4 13 29 0 0 34 33 7 - 1 29 1 4 48 196 30 29 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 107 values pushed */ - 19 10 0 2 9 12 7 2 22 21 4 3 2 1 6 13 10 23 20 16 6 4 13 7 0 - 0 18 17 13 12 38 3 7 1 4 48 196 11 10 1 15 14 8 7 3 5 0 1 3 0 - 14 22 11 6 2 21 17 10 9 8 5 6 4 3 23 4 0 2 14 13 2 13 11 20 3 - 2 3 13 0 0 0 19 18 7 6 22 3 11 5 4 7 1 0 2 4 48 196 16 15 12 - 11 3 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 4 3 2 1 4 13 0 5 0 1 0 14 3 2 0 0 0 1 0 7 1 4 1 4 48 - 196 5 4 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 80 values pushed */ - 0 0 39 16 2 12 20 17 48 196 17 0 1 35 34 33 32 28 27 20 19 15 14 10 9 - 8 0 14 13 30 22 2 3 12 0 0 14 0 0 37 7 6 48 196 32 0 2 19 9 3 - 28 27 2 13 19 35 15 14 8 4 13 6 9 0 0 34 33 10 9 7 3 19 1 4 48 - 196 20 19 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 29 values pushed */ - 0 0 20 20 8 16 20 0 48 196 0 0 1 8 0 0 14 0 0 22 15 4 18 15 12 - 48 196 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 63 values pushed */ - 0 0 35 40 9 27 40 20 48 196 20 2 9 1 1 1 39 32 31 22 14 11 3 0 8 - 1 2 3 0 0 13 12 1 2 1 1 2 0 14 0 0 37 9 5 29 9 16 48 196 39 - 32 31 22 16 14 13 12 11 5 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 28 30 8 22 40 16 48 196 16 2 8 1 1 20 19 4 3 2 2 3 0 1 18 - 2 0 2 0 1 0 1 0 3 2 1 14 0 0 24 9 12 48 196 12 0 0 0 20 19 - 18 4 3 0 4 5 1 1 4 48 196 2 1 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 57 values pushed */ - 1 1 13 2 2 0 1 15 12 11 0 4 13 2 0 0 0 14 13 6 1 9 1 4 48 - 196 10 9 0 14 5 0 0 0 13 12 19 1 10 9 1 0 19 2 14 2 4 48 196 11 - 10 1 15 14 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 17 values pushed */ - 10 9 1 0 14 0 0 14 41 5 48 196 10 9 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 17 values pushed */ - 10 9 1 0 14 0 0 14 41 5 48 196 10 9 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 60 21 44 52 21 36 28 21 12 20 21 4 48 196 44 2 4 0 36 12 1 1 36 - 12 2 0 2 3 0 0 2 1 1 3 0 1 2 0 14 0 0 64 15 40 56 15 48 32 - 15 8 24 15 16 48 196 48 40 16 8 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 2 1 8 1 0 1 4 48 196 3 0 1 0 14 0 0 3 2 8 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 3 0 8 1 1 1 4 48 196 2 1 1 0 14 0 0 3 2 8 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 0 0 3 0 8 1 1 1 4 48 196 2 1 1 0 14 0 0 3 2 8 1 0 1 4 - 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 87 values pushed */ - 0 0 72 21 60 68 21 52 46 21 34 42 21 26 20 21 8 16 21 0 48 196 60 2 34 - 2 0 0 52 26 8 1 1 52 26 8 3 0 2 3 0 0 1 80 79 2 13 0 0 1 - 81 78 2 0 14 0 0 74 7 56 70 7 64 48 7 30 44 7 38 22 7 4 18 7 12 - 48 196 81 80 79 78 64 56 38 30 12 4 - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MDAP[1] - MDAP[1] - MIAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 53 values pushed */ - 0 0 10 9 2 1 7 3 3 1 4 48 196 8 7 4 3 3 11 0 1 2 0 6 5 - 1 14 0 0 11 10 7 6 7 3 0 1 4 48 196 9 8 1 5 4 1 0 3 3 2 - 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 14 13 7 1 12 10 9 2 1 7 3 3 2 4 48 196 15 12 1 6 5 1 8 - 7 4 3 3 11 0 1 4 0 14 0 0 11 10 7 6 7 3 0 1 4 48 196 15 14 - 9 8 3 5 4 1 0 3 13 12 3 2 3 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 0 0 27 30 8 21 40 16 48 196 16 1 8 2 1 19 18 4 3 0 2 3 0 3 2 - 1 0 1 0 1 14 0 0 23 9 12 48 196 12 0 0 0 19 18 4 3 0 4 4 1 - 1 4 48 196 2 1 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 71 values pushed */ - 0 0 12 40 17 48 196 17 0 1 28 15 14 5 4 0 4 3 0 0 0 2 1 5 1 - 0 1 4 48 196 29 4 1 3 0 1 2 0 14 0 0 10 9 21 48 196 21 2 0 0 - 29 28 3 2 4 3 0 1 4 48 196 15 14 1 5 4 1 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 72 values pushed */ - 0 0 12 40 17 48 196 1 28 5 2 4 2 3 0 1 15 14 17 2 0 0 0 2 1 - 5 1 0 1 4 48 196 29 4 1 0 3 0 1 14 0 0 10 9 21 48 196 21 2 0 - 0 29 28 3 2 4 3 0 1 4 48 196 15 14 1 5 4 1 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 21 values pushed */ - 6 5 2 1 3 0 7 4 3 0 1 3 14 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 18 15 14 13 11 10 8 5 4 3 1 0 12 13 6 17 16 7 6 3 0 14 14 13 2 - 17 10 3 4 3 2 7 0 3 0 0 16 15 11 10 4 3 17 8 7 4 1 0 2 4 - 48 196 18 17 1 6 5 1 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 18 15 14 13 11 10 8 5 4 3 1 0 12 13 6 17 16 7 6 3 0 14 4 3 2 - 0 7 3 14 13 2 10 17 3 0 0 16 15 11 10 4 3 17 8 7 4 1 0 2 4 - 48 196 18 17 1 6 5 1 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 18 15 14 13 11 10 8 5 4 3 1 0 12 13 6 17 16 7 6 3 0 14 14 13 2 - 17 10 3 4 3 2 7 0 3 0 0 16 15 11 10 4 3 17 8 7 4 1 0 2 4 - 48 196 18 17 1 6 5 1 0 3 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 8 5 4 3 1 0 6 13 6 7 6 1 0 14 4 3 2 0 7 3 0 0 6 5 1 - 0 8 3 7 1 4 48 196 8 7 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 8 5 4 3 1 0 6 13 6 7 6 1 0 14 4 3 2 7 0 3 0 0 8 7 8 - 1 0 1 4 48 196 6 5 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 37 values pushed */ - 8 5 4 3 1 0 6 13 6 7 6 1 0 14 4 3 2 7 0 3 0 0 8 7 8 - 1 0 1 4 48 196 6 5 1 0 3 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SRP0[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 13 values pushed */ - 2 1 1 3 0 1 2 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - LOOPCALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 47 values pushed */ - 0 0 12 30 7 48 196 7 1 14 10 3 3 1 0 3 9 1 15 0 1 0 2 1 1 - 14 0 0 15 14 3 2 4 3 0 1 4 48 196 10 9 1 1 0 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00000] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 196 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 83 values pushed */ - 0 0 24 20 8 16 20 0 48 196 8 2 0 0 50 49 45 44 42 41 38 7 33 32 3 - 34 33 1 43 40 39 32 3 2 0 14 0 0 47 6 36 28 17 4 20 17 12 48 196 49 - 45 41 40 39 38 34 7 13 36 4 42 12 32 0 0 43 42 18 1 32 50 44 19 1 32 - 2 4 48 196 33 32 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 25 values pushed */ - 0 0 24 44 8 16 44 0 48 196 8 0 14 0 0 28 32 4 20 32 12 48 196 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 52 values pushed */ - 0 0 17 40 12 3 40 28 48 196 28 2 12 1 1 1 15 14 1 0 4 1 2 3 0 - 0 14 0 0 19 41 10 5 41 24 48 196 10 10 14 0 2 24 14 15 14 1 1 0 1 - 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 77 values pushed */ - 0 0 17 40 12 3 40 28 48 196 28 2 12 1 36 35 2 31 30 3 1 1 15 14 1 - 0 4 1 2 3 0 0 32 31 1 37 34 33 30 3 2 0 14 0 0 19 41 10 5 41 - 24 48 196 10 37 36 35 34 32 31 30 10 8 14 0 3 33 24 14 15 14 1 1 0 1 - 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 66 values pushed */ - 0 0 27 40 22 3 40 46 48 196 22 0 1 55 48 40 25 24 16 1 0 8 13 46 0 - 0 14 0 0 57 13 14 50 13 38 31 14 18 7 14 42 48 196 18 14 55 48 40 18 16 - 14 6 24 0 3 42 38 24 25 24 1 1 0 1 2 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - CALL[ ] - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 1 8 6 2 2 0 1 5 4 3 1 0 5 13 2 0 0 0 13 10 5 1 11 1 4 - 48 196 7 6 1 0 12 11 1 14 4 3 2 7 0 3 0 0 13 12 8 7 4 3 0 - 1 4 48 196 11 10 6 5 1 0 5 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 62 values pushed */ - 1 8 6 2 2 0 1 5 4 3 1 0 5 13 2 0 0 0 13 10 5 1 11 1 4 - 48 196 7 6 1 0 12 11 1 14 4 3 2 7 0 3 0 0 13 12 8 7 4 3 0 - 1 4 48 196 11 10 6 5 1 0 5 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 35 values pushed */ - 0 0 9 6 5 27 2 7 1 4 48 196 11 0 1 0 8 7 0 14 11 5 0 3 8 - 6 3 9 8 1 7 6 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 196 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 50 values pushed */ - 0 0 37 40 10 29 40 2 23 40 18 48 196 18 0 10 2 2 1 1 21 20 2 0 4 - 0 2 3 0 0 14 0 0 39 41 6 33 26 14 48 196 6 20 0 14 20 21 20 1 0 - CALL[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - NPUSHB[ ] /* 12 values pushed */ - 3 0 1 0 2 1 0 14 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 97 values pushed */ - 0 0 17 40 12 48 196 12 0 1 19 15 8 3 0 6 3 0 24 3 2 4 1 3 1 - 14 0 0 0 0 23 22 5 4 7 3 6 29 28 1 13 2 0 2 4 48 196 21 20 7 - 6 3 30 0 1 2 0 14 28 19 3 2 0 0 24 23 20 19 4 3 3 1 4 48 196 - 30 29 1 15 14 1 22 21 1 8 7 4 3 3 6 5 1 1 0 1 6 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 76 values pushed */ - 0 0 19 40 2 48 196 2 2 1 21 15 4 3 5 2 3 0 10 9 2 13 7 1 0 - 2 0 0 0 14 13 6 5 7 3 7 1 4 48 196 12 11 8 7 1 3 14 0 0 15 - 14 11 10 4 3 4 1 4 48 196 13 12 1 21 0 1 9 8 5 4 3 7 6 1 4 - 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 97 values pushed */ - 0 0 22 40 27 48 196 27 2 1 29 24 18 3 0 2 3 0 9 8 2 13 6 1 25 - 2 0 0 0 13 12 5 4 7 3 6 17 16 1 0 6 3 2 2 4 48 196 15 14 3 - 2 3 0 11 10 7 6 1 3 14 0 0 18 17 14 13 10 9 4 5 0 1 4 48 196 - 16 15 12 11 3 25 24 1 29 8 7 4 3 0 5 6 5 2 1 3 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 103 values pushed */ - 0 0 19 40 2 48 196 2 2 30 27 26 25 23 22 10 9 8 28 7 3 1 21 15 4 - 3 5 2 3 0 1 0 2 0 0 0 14 13 6 5 7 3 7 1 4 48 196 29 28 1 - 0 12 11 8 7 1 3 14 26 25 2 29 12 3 0 0 28 27 23 22 4 3 29 15 14 - 11 10 4 3 4 2 4 48 196 30 29 1 13 12 1 21 0 1 9 8 5 4 3 7 6 - 1 5 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00000] - SZP0[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 109 values pushed */ - 0 0 37 44 32 19 40 2 48 196 2 2 1 21 15 4 3 5 2 3 0 10 9 2 13 - 7 1 41 35 34 24 23 22 0 7 13 32 2 0 0 0 14 13 6 5 7 3 7 1 4 - 48 196 12 11 8 7 1 3 14 0 0 39 42 28 48 196 23 0 10 2 41 35 34 24 22 - 5 10 4 3 0 0 15 14 11 10 4 3 4 1 4 48 196 13 12 1 28 21 0 2 9 - 8 5 4 3 7 6 1 4 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 68 values pushed */ - 0 0 28 30 8 22 40 16 48 196 16 2 8 1 1 1 20 19 4 3 1 2 3 0 0 - 1 18 2 0 2 0 3 2 1 1 0 1 2 0 14 0 0 24 9 12 48 196 12 0 0 - 0 20 19 18 4 3 0 4 5 1 1 4 48 196 2 1 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 65 values pushed */ - 0 0 25 40 30 8 40 46 48 196 46 2 30 0 1 1 38 28 27 18 17 16 1 0 8 - 0 2 3 0 0 14 0 0 23 41 34 12 9 42 48 196 38 18 17 16 4 13 42 34 27 - 0 0 28 27 23 1 0 1 5 48 196 1 0 1 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - CALL[ ] - SZP0[ ] - SZP1[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 126 values pushed */ - 0 0 33 11 3 22 11 17 48 196 17 48 20 19 17 4 39 41 3 38 41 36 2 51 50 - 29 28 27 26 9 1 0 9 13 3 39 52 49 45 35 4 13 36 0 0 47 46 42 41 38 - 3 36 1 4 48 196 40 39 1 44 43 37 36 3 2 0 14 0 0 31 39 5 24 37 13 - 48 196 50 40 35 2 51 43 42 3 13 40 52 49 46 39 38 37 29 28 27 26 20 19 9 - 1 0 15 13 13 5 35 0 0 48 47 36 35 22 3 40 1 4 48 196 45 44 41 40 3 - 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - MDRP[00100] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 43 values pushed */ - 0 0 33 11 3 22 11 17 48 196 29 28 27 26 20 19 17 9 3 1 0 14 0 0 31 - 39 5 24 37 13 48 196 29 28 27 26 20 19 13 9 5 1 0 - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 30 values pushed */ - 0 0 21 6 4 9 6 16 48 196 4 0 1 12 11 2 13 0 0 1 23 0 16 0 0 - 14 23 12 11 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SZP0[ ] - SRP0[ ] - MDRP[00100] - MDRP[00000] - MDRP[00000] - SZP0[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 97 values pushed */ - 1 19 16 2 1 1 3 0 1 18 17 11 3 1 0 3 0 0 0 6 5 2 1 6 3 - 3 1 4 48 196 20 15 14 8 7 0 5 0 13 12 10 9 4 3 0 5 14 18 17 12 - 11 10 5 15 19 3 5 4 2 8 6 3 3 2 0 0 0 16 15 13 1 13 9 8 18 - 1 19 7 6 13 1 0 3 4 48 196 14 13 1 20 19 1 1 0 1 3 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00000] - MDRP[00000] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 0 0 11 40 16 48 196 16 0 1 14 13 2 0 1 3 0 0 0 28 27 1 13 2 0 - 1 4 48 196 29 0 1 0 14 0 0 7 9 20 48 196 27 28 13 2 20 28 29 28 1 - 14 13 1 1 0 1 3 0 - LOOPCALL[ ] - SRP0[ ] - MDRP[00100] - CALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 45 values pushed */ - 0 0 8 11 13 48 196 11 10 2 13 13 1 0 0 24 0 38 1 1 1 4 48 196 23 - 22 1 2 0 14 0 0 6 37 17 48 196 24 23 22 17 11 10 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[1] - MDAP[0] - MDAP[0] - MDAP[0] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 54 values pushed */ - 0 0 14 30 5 48 196 5 2 16 10 7 1 4 8 0 3 19 0 1 0 18 17 9 8 - 1 3 14 0 0 17 16 1 0 4 3 18 10 9 4 1 7 2 4 48 196 19 18 1 8 - 7 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 79 values pushed */ - 0 0 25 40 34 14 30 5 48 196 5 2 16 10 7 1 4 8 0 3 30 29 21 20 4 - 13 34 8 19 0 1 0 18 17 9 8 1 3 14 30 18 0 2 29 21 2 0 9 3 20 - 9 7 2 0 0 17 16 1 0 4 3 18 10 9 4 1 7 2 4 48 196 19 18 1 8 - 7 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SRP0[ ] - MDRP[00100] - LOOPCALL[ ] - CALL[ ] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 24 values pushed */ - 0 0 3 0 7 1 1 1 4 48 196 2 1 1 0 14 3 2 1 1 0 1 2 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 93 values pushed */ - 0 0 41 6 24 29 6 36 14 30 5 48 196 24 0 5 2 36 1 43 36 20 3 0 8 - 3 0 16 10 7 1 4 8 0 3 1 32 31 2 13 0 0 19 0 1 0 18 17 9 8 - 1 3 14 32 18 0 2 43 31 2 0 9 3 20 9 7 2 0 0 17 16 1 0 4 3 - 18 10 9 4 1 7 2 4 48 196 19 18 1 8 7 1 2 0 - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - CALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP0[ ] - SRP0[ ] - LOOPCALL[ ] - SZP0[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - MDAP[1] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - NPUSHB[ ] /* 22 values pushed */ - 3 1 0 2 6 0 1 0 5 4 2 1 1 3 14 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 35 values pushed */ - 11 6 3 3 1 0 3 12 10 9 0 3 0 8 7 5 4 2 1 1 5 14 12 11 10 - 9 8 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 58 values pushed */ - 19 18 2 14 13 3 11 6 3 3 1 0 3 15 14 1 20 17 16 13 3 12 10 9 0 - 3 3 0 8 7 5 4 2 1 1 5 14 20 19 18 17 16 15 14 13 12 11 10 9 8 - 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 33 values pushed */ - 10 7 4 1 4 2 0 3 11 9 8 0 3 0 6 5 3 2 1 3 14 11 10 9 8 - 7 6 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - NPUSHB[ ] /* 31 values pushed */ - 1 3 1 2 2 0 1 0 2 6 2 0 7 6 1 0 5 4 2 1 1 3 14 7 6 - 5 4 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 54 values pushed */ - 14 13 2 9 8 3 1 3 1 2 2 0 1 0 2 6 2 0 10 9 1 15 12 11 8 - 3 7 6 1 3 0 5 4 2 1 1 3 14 15 14 13 12 11 10 9 8 7 6 5 4 - 3 2 1 0 - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - MDAP[0] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SZP1[ ] - CALL[ ] - SZP1[ ] - SZP0[ ] - CALL[ ] - SZP0[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 93 values pushed */ - 12 11 2 9 7 3 0 0 18 17 6 5 6 3 7 20 19 4 3 6 3 1 2 4 48 - 196 16 15 8 7 3 22 21 2 1 3 23 0 1 3 0 14 13 10 9 0 3 14 12 11 - 2 15 0 3 21 20 17 16 14 13 6 13 15 10 9 7 6 3 2 6 13 0 0 0 23 - 22 19 18 15 4 4 0 1 4 48 196 8 5 4 1 0 4 0 - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - SRP0[ ] - LOOPCALL[ ] - SRP0[ ] - LOOPCALL[ ] - CALL[ ] - CALL[ ] - SLOOP[ ] - MIAP[1] - ALIGNRP[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - CALL[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 46 values pushed */ - 0 0 6 3 2 7 2 4 8 7 1 7 2 0 2 4 48 196 9 0 1 0 5 4 1 - 14 7 2 2 5 3 3 9 8 1 6 5 1 4 3 1 1 0 1 4 0 - LOOPCALL[ ] - CALL[ ] - CALL[ ] - MIAP[1] - ALIGNRP[ ] - CALL[ ] - SSW[ ] - SSWCI[ ] - LOOPCALL[ ] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NPUSHB[ ] /* 27 values pushed */ - 0 0 24 40 8 16 40 0 48 196 8 2 0 0 14 0 0 28 43 4 20 9 12 48 196 - 12 4 - MDAP[1] - MDAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - CALL[ ] - MIAP[1] - MIAP[1] - SSW[ ] - SSWCI[ ] - SRP0[ ] - MIRP[01101] - SRP0[ ] - MIRP[01101] - SSW[ ] - SSWCI[ ] - IUP[1] - IUP[0] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. - - - Luxi Sans - - - Regular - - - Luxi Sans Regular: B&H - - - Luxi Sans Regular - - - 1.2 : October 12, 2001 - - - LuxiSans - - - Luxi is a registered trademark of Bigelow & Holmes Inc. - - - Bigelow & Holmes Inc. - - - Kris Holmes and Charles Bigelow - - - http://www.urwpp.de - - - design@bigelowandholmes.com - - - Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. - - - Luxi Sans - - - Regular - - - Luxi Sans Regular: B&H - - - Luxi Sans Regular - - - 1.2 : October 12, 2001 - - - LuxiSans - - - Luxi is a registered trademark of Bigelow & Holmes Inc. - - - Bigelow & Holmes Inc. - - - Kris Holmes and Charles Bigelow - - - http://www.urwpp.de - - - design@bigelowandholmes.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/make-other-hinting-txts.sh b/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/make-other-hinting-txts.sh deleted file mode 100755 index afee131e8b..0000000000 --- a/Godeps/_workspace/src/code.google.com/p/freetype-go/testdata/make-other-hinting-txts.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -# -# This script creates the optional x-*-hinting.txt files from fonts that are -# not checked in for copyright or file size reasons. -# -# Run it from this directory (testdata). -# -# It has only been tested on an Ubuntu 14.04 system. - -set -e - -: ${FONTDIR:=/usr/share/fonts/truetype} - -ln -sf $FONTDIR/droid/DroidSansJapanese.ttf x-droid-sans-japanese.ttf -ln -sf $FONTDIR/msttcorefonts/Arial_Bold.ttf x-arial-bold.ttf -ln -sf $FONTDIR/msttcorefonts/Times_New_Roman.ttf x-times-new-roman.ttf -ln -sf $FONTDIR/ttf-dejavu/DejaVuSans-Oblique.ttf x-deja-vu-sans-oblique.ttf - -${CC:=gcc} ../cmd/print-glyph-points/main.c $(pkg-config --cflags --libs freetype2) -o print-glyph-points - -# Uncomment these lines to also recreate the luxisr-*-hinting.txt files. -# ./print-glyph-points 12 luxisr.ttf sans_hinting > luxisr-12pt-sans-hinting.txt -# ./print-glyph-points 12 luxisr.ttf with_hinting > luxisr-12pt-with-hinting.txt - -./print-glyph-points 9 x-droid-sans-japanese.ttf sans_hinting > x-droid-sans-japanese-9pt-sans-hinting.txt -./print-glyph-points 9 x-droid-sans-japanese.ttf with_hinting > x-droid-sans-japanese-9pt-with-hinting.txt -./print-glyph-points 11 x-arial-bold.ttf sans_hinting > x-arial-bold-11pt-sans-hinting.txt -./print-glyph-points 11 x-arial-bold.ttf with_hinting > x-arial-bold-11pt-with-hinting.txt -./print-glyph-points 13 x-times-new-roman.ttf sans_hinting > x-times-new-roman-13pt-sans-hinting.txt -./print-glyph-points 13 x-times-new-roman.ttf with_hinting > x-times-new-roman-13pt-with-hinting.txt -./print-glyph-points 17 x-deja-vu-sans-oblique.ttf sans_hinting > x-deja-vu-sans-oblique-17pt-sans-hinting.txt -./print-glyph-points 17 x-deja-vu-sans-oblique.ttf with_hinting > x-deja-vu-sans-oblique-17pt-with-hinting.txt - -rm print-glyph-points diff --git a/Godeps/_workspace/src/code.google.com/p/log4go/examples/ConsoleLogWriter_Manual.go b/Godeps/_workspace/src/code.google.com/p/log4go/examples/ConsoleLogWriter_Manual.go index 394ca83806..d5ab3fa6c2 100644 --- a/Godeps/_workspace/src/code.google.com/p/log4go/examples/ConsoleLogWriter_Manual.go +++ b/Godeps/_workspace/src/code.google.com/p/log4go/examples/ConsoleLogWriter_Manual.go @@ -4,7 +4,7 @@ import ( "time" ) -import l4g "code.google.com/p/log4go" +import l4g "github.com/mattermost/platform/Godeps/_workspace/src/code.google.com/p/log4go" func main() { log := l4g.NewLogger() diff --git a/Godeps/_workspace/src/code.google.com/p/log4go/examples/FileLogWriter_Manual.go b/Godeps/_workspace/src/code.google.com/p/log4go/examples/FileLogWriter_Manual.go index efd596aa6e..2f73bf3ee8 100644 --- a/Godeps/_workspace/src/code.google.com/p/log4go/examples/FileLogWriter_Manual.go +++ b/Godeps/_workspace/src/code.google.com/p/log4go/examples/FileLogWriter_Manual.go @@ -8,7 +8,7 @@ import ( "time" ) -import l4g "code.google.com/p/log4go" +import l4g "github.com/mattermost/platform/Godeps/_workspace/src/code.google.com/p/log4go" const ( filename = "flw.log" diff --git a/Godeps/_workspace/src/code.google.com/p/log4go/examples/SocketLogWriter_Manual.go b/Godeps/_workspace/src/code.google.com/p/log4go/examples/SocketLogWriter_Manual.go index 400b698ca1..6371d59336 100644 --- a/Godeps/_workspace/src/code.google.com/p/log4go/examples/SocketLogWriter_Manual.go +++ b/Godeps/_workspace/src/code.google.com/p/log4go/examples/SocketLogWriter_Manual.go @@ -4,7 +4,7 @@ import ( "time" ) -import l4g "code.google.com/p/log4go" +import l4g "github.com/mattermost/platform/Godeps/_workspace/src/code.google.com/p/log4go" func main() { log := l4g.NewLogger() diff --git a/Godeps/_workspace/src/code.google.com/p/log4go/examples/XMLConfigurationExample.go b/Godeps/_workspace/src/code.google.com/p/log4go/examples/XMLConfigurationExample.go index 164c2add4f..5297f07284 100644 --- a/Godeps/_workspace/src/code.google.com/p/log4go/examples/XMLConfigurationExample.go +++ b/Godeps/_workspace/src/code.google.com/p/log4go/examples/XMLConfigurationExample.go @@ -1,6 +1,6 @@ package main -import l4g "code.google.com/p/log4go" +import l4g "github.com/mattermost/platform/Godeps/_workspace/src/code.google.com/p/log4go" func main() { // Load the configuration (isn't this easy?) diff --git a/Godeps/_workspace/src/github.com/anachronistic/apns/client_mock.go b/Godeps/_workspace/src/github.com/anachronistic/apns/client_mock.go index 29a1f4b237..f2271475ec 100644 --- a/Godeps/_workspace/src/github.com/anachronistic/apns/client_mock.go +++ b/Godeps/_workspace/src/github.com/anachronistic/apns/client_mock.go @@ -1,6 +1,6 @@ package apns -import "github.com/stretchr/testify/mock" +import "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/mock" type MockClient struct { mock.Mock diff --git a/Godeps/_workspace/src/github.com/anachronistic/apns/client_mock_test.go b/Godeps/_workspace/src/github.com/anachronistic/apns/client_mock_test.go index 86e997b5ae..84bbcf8e8a 100644 --- a/Godeps/_workspace/src/github.com/anachronistic/apns/client_mock_test.go +++ b/Godeps/_workspace/src/github.com/anachronistic/apns/client_mock_test.go @@ -4,7 +4,7 @@ import ( "errors" "testing" - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" ) func TestMockClientConnectAndWrite(t *testing.T) { diff --git a/Godeps/_workspace/src/github.com/braintree/manners/README.md b/Godeps/_workspace/src/github.com/braintree/manners/README.md index 8c9a239b48..09f6f9693b 100644 --- a/Godeps/_workspace/src/github.com/braintree/manners/README.md +++ b/Godeps/_workspace/src/github.com/braintree/manners/README.md @@ -7,23 +7,26 @@ Manners allows you to shut your Go webserver down gracefully, without dropping a ```go func main() { handler := MyHTTPHandler() - server := manners.NewServer() - server.ListenAndServe(":7000", handler) + manners.ListenAndServe(":7000", handler) } ``` Then, when you want to shut the server down: ```go -server.Shutdown <- true +manners.Close() ``` -(Note that this does not block until all the requests are finished. Rather, the call to server.ListenAndServe will stop blocking when all the requests are finished.) +(Note that this does not block until all the requests are finished. Rather, the call to manners.ListenAndServe will stop blocking when all the requests are finished.) Manners ensures that all requests are served by incrementing a WaitGroup when a request comes in and decrementing it when the request finishes. If your request handler spawns Goroutines that are not guaranteed to finish with the request, you can ensure they are also completed with the `StartRoutine` and `FinishRoutine` functions on the server. +### Known Issues + +Manners does not correctly shut down long-lived keepalive connections when issued a shutdown command. Clients on an idle keepalive connection may see a connection reset error rather than a close. See https://github.com/braintree/manners/issues/13 for details. + ### Compatability Manners 0.3.0 and above uses standard library functionality introduced in Go 1.3. diff --git a/Godeps/_workspace/src/github.com/braintree/manners/helper_test.go b/Godeps/_workspace/src/github.com/braintree/manners/helper_test.go deleted file mode 100644 index ea721a1800..0000000000 --- a/Godeps/_workspace/src/github.com/braintree/manners/helper_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package manners - -import ( - "net/http" - "time" -) - -// A response handler that blocks until it receives a signal; simulates an -// arbitrarily long web request. The "ready" channel is to prevent a race -// condition in the test where the test moves on before the server is ready -// to handle the request. -func newBlockingHandler(ready, done chan bool) *blockingHandler { - return &blockingHandler{ready, done} -} - -type blockingHandler struct { - ready chan bool - done chan bool -} - -func (h *blockingHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { - h.ready <- true - time.Sleep(1e2) - h.done <- true -} - -// A response handler that does nothing. -func newTestHandler() testHandler { - return testHandler{} -} - -type testHandler struct{} - -func (h testHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {} diff --git a/Godeps/_workspace/src/github.com/braintree/manners/helpers_test.go b/Godeps/_workspace/src/github.com/braintree/manners/helpers_test.go new file mode 100644 index 0000000000..dd9a8ba18c --- /dev/null +++ b/Godeps/_workspace/src/github.com/braintree/manners/helpers_test.go @@ -0,0 +1,123 @@ +package manners + +import ( + "bufio" + "crypto/tls" + "io/ioutil" + "net" + "net/http" + "testing" +) + +func newServer() *GracefulServer { + return NewWithServer(new(http.Server)) +} + +// a simple step-controllable http client +type client struct { + tls bool + addr net.Addr + connected chan error + sendrequest chan bool + response chan *rawResponse + closed chan bool +} + +type rawResponse struct { + body []string + err error +} + +func (c *client) Run() { + go func() { + var err error + conn, err := net.Dial(c.addr.Network(), c.addr.String()) + if err != nil { + c.connected <- err + return + } + if c.tls { + conn = tls.Client(conn, &tls.Config{InsecureSkipVerify: true}) + } + c.connected <- nil + for <-c.sendrequest { + _, err = conn.Write([]byte("GET / HTTP/1.1\nHost: localhost:8000\n\n")) + if err != nil { + c.response <- &rawResponse{err: err} + } + // Read response; no content + scanner := bufio.NewScanner(conn) + var lines []string + for scanner.Scan() { + // our null handler doesn't send a body, so we know the request is + // done when we reach the blank line after the headers + line := scanner.Text() + if line == "" { + break + } + lines = append(lines, line) + } + c.response <- &rawResponse{lines, scanner.Err()} + } + conn.Close() + ioutil.ReadAll(conn) + c.closed <- true + }() +} + +func newClient(addr net.Addr, tls bool) *client { + return &client{ + addr: addr, + tls: tls, + connected: make(chan error), + sendrequest: make(chan bool), + response: make(chan *rawResponse), + closed: make(chan bool), + } +} + +// a handler that returns 200 ok with no body +var nullHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {}) + +func startGenericServer(t *testing.T, server *GracefulServer, statechanged chan http.ConnState, runner func() error) (l net.Listener, errc chan error) { + server.Addr = "localhost:0" + server.Handler = nullHandler + if statechanged != nil { + // Wrap the ConnState handler with something that will notify + // the statechanged channel when a state change happens + server.ConnState = func(conn net.Conn, newState http.ConnState) { + statechanged <- newState + } + } + + server.up = make(chan net.Listener) + exitchan := make(chan error) + + go func() { + exitchan <- runner() + }() + + // wait for server socket to be bound + select { + case l = <-server.up: + // all good + + case err := <-exitchan: + // all bad + t.Fatal("Server failed to start", err) + } + return l, exitchan +} + +func startServer(t *testing.T, server *GracefulServer, statechanged chan http.ConnState) ( + l net.Listener, errc chan error) { + return startGenericServer(t, server, statechanged, server.ListenAndServe) +} + +func startTLSServer(t *testing.T, server *GracefulServer, certFile, keyFile string, statechanged chan http.ConnState) (l net.Listener, errc chan error) { + runner := func() error { + return server.ListenAndServeTLS(certFile, keyFile) + } + + return startGenericServer(t, server, statechanged, runner) +} diff --git a/Godeps/_workspace/src/github.com/braintree/manners/interfaces.go b/Godeps/_workspace/src/github.com/braintree/manners/interfaces.go new file mode 100644 index 0000000000..fd0732857e --- /dev/null +++ b/Godeps/_workspace/src/github.com/braintree/manners/interfaces.go @@ -0,0 +1,7 @@ +package manners + +type waitGroup interface { + Add(int) + Done() + Wait() +} diff --git a/Godeps/_workspace/src/github.com/braintree/manners/listener.go b/Godeps/_workspace/src/github.com/braintree/manners/listener.go deleted file mode 100644 index dd84e4a2e5..0000000000 --- a/Godeps/_workspace/src/github.com/braintree/manners/listener.go +++ /dev/null @@ -1,49 +0,0 @@ -package manners - -import ( - "net" - "sync" -) - -func NewListener(l net.Listener, s *GracefulServer) *GracefulListener { - return &GracefulListener{l, true, s, sync.RWMutex{}} -} - -// A GracefulListener differs from a standard net.Listener in one way: if -// Accept() is called after it is gracefully closed, it returns a -// listenerAlreadyClosed error. The GracefulServer will ignore this -// error. -type GracefulListener struct { - net.Listener - open bool - server *GracefulServer - rw sync.RWMutex -} - -func (l *GracefulListener) Accept() (net.Conn, error) { - conn, err := l.Listener.Accept() - if err != nil { - l.rw.RLock() - defer l.rw.RUnlock() - if !l.open { - err = listenerAlreadyClosed{err} - } - return nil, err - } - return conn, nil -} - -func (l *GracefulListener) Close() error { - l.rw.Lock() - defer l.rw.Unlock() - if !l.open { - return nil - } - l.open = false - err := l.Listener.Close() - return err -} - -type listenerAlreadyClosed struct { - error -} diff --git a/Godeps/_workspace/src/github.com/braintree/manners/server.go b/Godeps/_workspace/src/github.com/braintree/manners/server.go index a792466689..e45f5c64b1 100644 --- a/Godeps/_workspace/src/github.com/braintree/manners/server.go +++ b/Godeps/_workspace/src/github.com/braintree/manners/server.go @@ -1,83 +1,272 @@ +/* +Package manners provides a wrapper for a standard net/http server that +ensures all active HTTP client have completed their current request +before the server shuts down. + +It can be used a drop-in replacement for the standard http package, +or can wrap a pre-configured Server. + +eg. + + http.Handle("/hello", func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("Hello\n")) + }) + + log.Fatal(manners.ListenAndServe(":8080", nil)) + +or for a customized server: + + s := manners.NewWithServer(&http.Server{ + Addr: ":8080", + Handler: myHandler, + ReadTimeout: 10 * time.Second, + WriteTimeout: 10 * time.Second, + MaxHeaderBytes: 1 << 20, + }) + log.Fatal(s.ListenAndServe()) + +The server will shut down cleanly when the Close() method is called: + + go func() { + sigchan := make(chan os.Signal, 1) + signal.Notify(sigchan, os.Interrupt, os.Kill) + <-sigchan + log.Info("Shutting down...") + manners.Close() + }() + + http.Handle("/hello", myHandler) + log.Fatal(manners.ListenAndServe(":8080", nil)) +*/ package manners import ( + "crypto/tls" "net" "net/http" "sync" + "sync/atomic" ) -// Creates a new GracefulServer. The server will begin shutting down when -// a value is passed to the Shutdown channel. -func NewServer() *GracefulServer { - return &GracefulServer{ - Shutdown: make(chan bool), - } -} - // A GracefulServer maintains a WaitGroup that counts how many in-flight // requests the server is handling. When it receives a shutdown signal, // it stops accepting new requests but does not actually shut down until // all in-flight requests terminate. +// +// GracefulServer embeds the underlying net/http.Server making its non-override +// methods and properties avaiable. +// +// It must be initialized by calling NewWithServer. type GracefulServer struct { - Shutdown chan bool - wg sync.WaitGroup - shutdownHandler func() - InnerServer http.Server + *http.Server + + shutdown chan bool + shutdownFinished chan bool + wg waitGroup + + lcsmu sync.RWMutex + connections map[net.Conn]bool + + up chan net.Listener // Only used by test code. } -// A helper function that emulates the functionality of http.ListenAndServe. -func (s *GracefulServer) ListenAndServe(addr string, handler http.Handler) error { - oldListener, err := net.Listen("tcp", addr) +// NewWithServer wraps an existing http.Server object and returns a +// GracefulServer that supports all of the original Server operations. +func NewWithServer(s *http.Server) *GracefulServer { + return &GracefulServer{ + Server: s, + shutdown: make(chan bool), + shutdownFinished: make(chan bool, 1), + wg: new(sync.WaitGroup), + connections: make(map[net.Conn]bool), + } +} + +// Close stops the server from accepting new requets and begins shutting down. +// It returns true if it's the first time Close is called. +func (s *GracefulServer) Close() bool { + return <-s.shutdown +} + +// BlockingClose is similar to Close, except that it blocks until the last +// connection has been closed. +func (s *GracefulServer) BlockingClose() bool { + result := s.Close() + <-s.shutdownFinished + return result +} + +// ListenAndServe provides a graceful equivalent of net/http.Serve.ListenAndServe. +func (s *GracefulServer) ListenAndServe() error { + addr := s.Addr + if addr == "" { + addr = ":http" + } + listener, err := net.Listen("tcp", addr) if err != nil { return err } - listener := NewListener(oldListener, s) - err = s.Serve(listener, handler) - return err + return s.Serve(listener) } -// Similar to http.Serve. The listener passed must wrap a GracefulListener. -func (s *GracefulServer) Serve(listener net.Listener, handler http.Handler) error { - s.shutdownHandler = func() { listener.Close() } - s.listenForShutdown() - s.InnerServer.Handler = handler - s.InnerServer.ConnState = func(conn net.Conn, newState http.ConnState) { +// ListenAndServeTLS provides a graceful equivalent of net/http.Serve.ListenAndServeTLS. +func (s *GracefulServer) ListenAndServeTLS(certFile, keyFile string) error { + // direct lift from net/http/server.go + addr := s.Addr + if addr == "" { + addr = ":https" + } + config := &tls.Config{} + if s.TLSConfig != nil { + *config = *s.TLSConfig + } + if config.NextProtos == nil { + config.NextProtos = []string{"http/1.1"} + } + + var err error + config.Certificates = make([]tls.Certificate, 1) + config.Certificates[0], err = tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return err + } + + ln, err := net.Listen("tcp", addr) + if err != nil { + return err + } + + return s.Serve(tls.NewListener(ln, config)) +} + +// Serve provides a graceful equivalent net/http.Server.Serve. +func (s *GracefulServer) Serve(listener net.Listener) error { + // Wrap the server HTTP handler into graceful one, that will close kept + // alive connections if a new request is received after shutdown. + gracefulHandler := newGracefulHandler(s.Server.Handler) + s.Server.Handler = gracefulHandler + + // Start a goroutine that waits for a shutdown signal and will stop the + // listener when it receives the signal. That in turn will result in + // unblocking of the http.Serve call. + go func() { + s.shutdown <- true + close(s.shutdown) + gracefulHandler.Close() + s.Server.SetKeepAlivesEnabled(false) + listener.Close() + }() + + originalConnState := s.Server.ConnState + + // s.ConnState is invoked by the net/http.Server every time a connection + // changes state. It keeps track of each connection's state over time, + // enabling manners to handle persisted connections correctly. + s.ConnState = func(conn net.Conn, newState http.ConnState) { + s.lcsmu.RLock() + protected := s.connections[conn] + s.lcsmu.RUnlock() + switch newState { + case http.StateNew: + // New connection -> StateNew + protected = true s.StartRoutine() - case http.StateClosed, http.StateHijacked: - s.FinishRoutine() + + case http.StateActive: + // (StateNew, StateIdle) -> StateActive + if gracefulHandler.IsClosed() { + conn.Close() + break + } + + if !protected { + protected = true + s.StartRoutine() + } + + default: + // (StateNew, StateActive) -> (StateIdle, StateClosed, StateHiJacked) + if protected { + s.FinishRoutine() + protected = false + } + } + + s.lcsmu.Lock() + if newState == http.StateClosed || newState == http.StateHijacked { + delete(s.connections, conn) + } else { + s.connections[conn] = protected + } + s.lcsmu.Unlock() + + if originalConnState != nil { + originalConnState(conn, newState) } } - err := s.InnerServer.Serve(listener) - // This block is reached when the server has received a shut down command. - if err == nil { - s.wg.Wait() - return nil - } else if _, ok := err.(listenerAlreadyClosed); ok { - s.wg.Wait() - return nil + // A hook to allow the server to notify others when it is ready to receive + // requests; only used by tests. + if s.up != nil { + s.up <- listener } + + err := s.Server.Serve(listener) + // An error returned on shutdown is not worth reporting. + if err != nil && gracefulHandler.IsClosed() { + err = nil + } + + // Wait for pending requests to complete regardless the Serve result. + s.wg.Wait() + s.shutdownFinished <- true return err } -// Increments the server's WaitGroup. Use this if a web request starts more -// goroutines and these goroutines are not guaranteed to finish before the -// request. +// StartRoutine increments the server's WaitGroup. Use this if a web request +// starts more goroutines and these goroutines are not guaranteed to finish +// before the request. func (s *GracefulServer) StartRoutine() { s.wg.Add(1) } -// Decrement the server's WaitGroup. Used this to complement StartRoutine(). +// FinishRoutine decrements the server's WaitGroup. Use this to complement +// StartRoutine(). func (s *GracefulServer) FinishRoutine() { s.wg.Done() } -func (s *GracefulServer) listenForShutdown() { - go func() { - <-s.Shutdown - s.shutdownHandler() - }() +// gracefulHandler is used by GracefulServer to prevent calling ServeHTTP on +// to be closed kept-alive connections during the server shutdown. +type gracefulHandler struct { + closed int32 // accessed atomically. + wrapped http.Handler +} + +func newGracefulHandler(wrapped http.Handler) *gracefulHandler { + return &gracefulHandler{ + wrapped: wrapped, + } +} + +func (gh *gracefulHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if atomic.LoadInt32(&gh.closed) == 0 { + gh.wrapped.ServeHTTP(w, r) + return + } + r.Body.Close() + // Server is shutting down at this moment, and the connection that this + // handler is being called on is about to be closed. So we do not need to + // actually execute the handler logic. +} + +func (gh *gracefulHandler) Close() { + atomic.StoreInt32(&gh.closed, 1) +} + +func (gh *gracefulHandler) IsClosed() bool { + return atomic.LoadInt32(&gh.closed) == 1 } diff --git a/Godeps/_workspace/src/github.com/braintree/manners/server_test.go b/Godeps/_workspace/src/github.com/braintree/manners/server_test.go index 0da015566c..e73613aa8f 100644 --- a/Godeps/_workspace/src/github.com/braintree/manners/server_test.go +++ b/Godeps/_workspace/src/github.com/braintree/manners/server_test.go @@ -1,71 +1,254 @@ package manners import ( + helpers "github.com/mattermost/platform/Godeps/_workspace/src/github.com/braintree/manners/test_helpers" + "net" "net/http" "testing" + "time" ) -// Tests that the server allows in-flight requests to complete before shutting -// down. +type httpInterface interface { + ListenAndServe() error + ListenAndServeTLS(certFile, keyFile string) error + Serve(listener net.Listener) error +} + +// Test that the method signatures of the methods we override from net/http/Server match those of the original. +func TestInterface(t *testing.T) { + var original, ours interface{} + original = &http.Server{} + ours = &GracefulServer{} + if _, ok := original.(httpInterface); !ok { + t.Errorf("httpInterface definition does not match the canonical server!") + } + if _, ok := ours.(httpInterface); !ok { + t.Errorf("GracefulServer does not implement httpInterface") + } +} + +// Tests that the server allows in-flight requests to complete +// before shutting down. func TestGracefulness(t *testing.T) { - ready := make(chan bool) - done := make(chan bool) + server := newServer() + wg := helpers.NewWaitGroup() + server.wg = wg + statechanged := make(chan http.ConnState) + listener, exitchan := startServer(t, server, statechanged) - exited := false + client := newClient(listener.Addr(), false) + client.Run() - handler := newBlockingHandler(ready, done) - server := NewServer() + // wait for client to connect, but don't let it send the request yet + if err := <-client.connected; err != nil { + t.Fatal("Client failed to connect to server", err) + } + // Even though the client is connected, the server ConnState handler may + // not know about that yet. So wait until it is called. + waitForState(t, statechanged, http.StateNew, "Request not received") - go func() { - err := server.ListenAndServe(":7000", handler) - if err != nil { - t.Error(err) - } + server.Close() - exited = true - }() + waiting := <-wg.WaitCalled + if waiting < 1 { + t.Errorf("Expected the waitgroup to equal 1 at shutdown; actually %d", waiting) + } - go func() { - _, err := http.Get("http://localhost:7000") - if err != nil { - t.Error(err) - } - }() - - // This will block until the server is inside the handler function. - <-ready - - server.Shutdown <- true - <-done - - if exited { - t.Fatal("The request did not complete before server exited") - } else { - // The handler is being allowed to run to completion; test passes. + // allow the client to finish sending the request and make sure the server exits after + // (client will be in connected but idle state at that point) + client.sendrequest <- true + close(client.sendrequest) + if err := <-exitchan; err != nil { + t.Error("Unexpected error during shutdown", err) } } // Tests that the server begins to shut down when told to and does not accept -// new requests +// new requests once shutdown has begun func TestShutdown(t *testing.T) { - handler := newTestHandler() - server := NewServer() - exited := make(chan bool) + server := newServer() + wg := helpers.NewWaitGroup() + server.wg = wg + statechanged := make(chan http.ConnState) + listener, exitchan := startServer(t, server, statechanged) - go func() { - err := server.ListenAndServe(":7100", handler) - if err != nil { - t.Error(err) - } - exited <- true - }() + client1 := newClient(listener.Addr(), false) + client1.Run() - server.Shutdown <- true + // wait for client1 to connect + if err := <-client1.connected; err != nil { + t.Fatal("Client failed to connect to server", err) + } + // Even though the client is connected, the server ConnState handler may + // not know about that yet. So wait until it is called. + waitForState(t, statechanged, http.StateNew, "Request not received") - <-exited - _, err := http.Get("http://localhost:7100") + // start the shutdown; once it hits waitgroup.Wait() + // the listener should of been closed, though client1 is still connected + if server.Close() != true { + t.Fatal("first call to Close returned false") + } + if server.Close() != false { + t.Fatal("second call to Close returned true") + } - if err == nil { - t.Fatal("Did not receive an error when trying to connect to server.") + waiting := <-wg.WaitCalled + if waiting != 1 { + t.Errorf("Waitcount should be one, got %d", waiting) + } + + // should get connection refused at this point + client2 := newClient(listener.Addr(), false) + client2.Run() + + if err := <-client2.connected; err == nil { + t.Fatal("client2 connected when it should of received connection refused") + } + + // let client1 finish so the server can exit + close(client1.sendrequest) // don't bother sending an actual request + + <-exitchan +} + +// If a request is sent to a closed server via a kept alive connection then +// the server closes the connection upon receiving the request. +func TestRequestAfterClose(t *testing.T) { + // Given + server := newServer() + srvStateChangedCh := make(chan http.ConnState, 100) + listener, srvClosedCh := startServer(t, server, srvStateChangedCh) + + client := newClient(listener.Addr(), false) + client.Run() + <-client.connected + client.sendrequest <- true + <-client.response + + server.Close() + if err := <-srvClosedCh; err != nil { + t.Error("Unexpected error during shutdown", err) + } + + // When + client.sendrequest <- true + rr := <-client.response + + // Then + if rr.body != nil || rr.err != nil { + t.Errorf("Request should be rejected, body=%v, err=%v", rr.body, rr.err) + } +} + +func waitForState(t *testing.T, waiter chan http.ConnState, state http.ConnState, errmsg string) { + for { + select { + case ns := <-waiter: + if ns == state { + return + } + case <-time.After(time.Second): + t.Fatal(errmsg) + } + } +} + +// Test that a request moving from active->idle->active using an actual +// network connection still results in a corect shutdown +func TestStateTransitionActiveIdleActive(t *testing.T) { + server := newServer() + wg := helpers.NewWaitGroup() + statechanged := make(chan http.ConnState) + server.wg = wg + listener, exitchan := startServer(t, server, statechanged) + + client := newClient(listener.Addr(), false) + client.Run() + + // wait for client to connect, but don't let it send the request + if err := <-client.connected; err != nil { + t.Fatal("Client failed to connect to server", err) + } + + for i := 0; i < 2; i++ { + client.sendrequest <- true + waitForState(t, statechanged, http.StateActive, "Client failed to reach active state") + <-client.response + waitForState(t, statechanged, http.StateIdle, "Client failed to reach idle state") + } + + // client is now in an idle state + + server.Close() + waiting := <-wg.WaitCalled + if waiting != 0 { + t.Errorf("Waitcount should be zero, got %d", waiting) + } + + if err := <-exitchan; err != nil { + t.Error("Unexpected error during shutdown", err) + } +} + +// Test state transitions from new->active->-idle->closed using an actual +// network connection and make sure the waitgroup count is correct at the end. +func TestStateTransitionActiveIdleClosed(t *testing.T) { + var ( + listener net.Listener + exitchan chan error + ) + + keyFile, err1 := helpers.NewTempFile(helpers.Key) + certFile, err2 := helpers.NewTempFile(helpers.Cert) + defer keyFile.Unlink() + defer certFile.Unlink() + + if err1 != nil || err2 != nil { + t.Fatal("Failed to create temporary files", err1, err2) + } + + for _, withTLS := range []bool{false, true} { + server := newServer() + wg := helpers.NewWaitGroup() + statechanged := make(chan http.ConnState) + server.wg = wg + if withTLS { + listener, exitchan = startTLSServer(t, server, certFile.Name(), keyFile.Name(), statechanged) + } else { + listener, exitchan = startServer(t, server, statechanged) + } + + client := newClient(listener.Addr(), withTLS) + client.Run() + + // wait for client to connect, but don't let it send the request + if err := <-client.connected; err != nil { + t.Fatal("Client failed to connect to server", err) + } + + client.sendrequest <- true + waitForState(t, statechanged, http.StateActive, "Client failed to reach active state") + + rr := <-client.response + if rr.err != nil { + t.Fatalf("tls=%t unexpected error from client %s", withTLS, rr.err) + } + + waitForState(t, statechanged, http.StateIdle, "Client failed to reach idle state") + + // client is now in an idle state + close(client.sendrequest) + <-client.closed + waitForState(t, statechanged, http.StateClosed, "Client failed to reach closed state") + + server.Close() + waiting := <-wg.WaitCalled + if waiting != 0 { + t.Errorf("Waitcount should be zero, got %d", waiting) + } + + if err := <-exitchan; err != nil { + t.Error("Unexpected error during shutdown", err) + } } } diff --git a/Godeps/_workspace/src/github.com/braintree/manners/static.go b/Godeps/_workspace/src/github.com/braintree/manners/static.go new file mode 100644 index 0000000000..2a74b094b9 --- /dev/null +++ b/Godeps/_workspace/src/github.com/braintree/manners/static.go @@ -0,0 +1,35 @@ +package manners + +import ( + "net" + "net/http" +) + +var defaultServer *GracefulServer + +// ListenAndServe provides a graceful version of the function provided by the +// net/http package. Call Close() to stop the server. +func ListenAndServe(addr string, handler http.Handler) error { + defaultServer = NewWithServer(&http.Server{Addr: addr, Handler: handler}) + return defaultServer.ListenAndServe() +} + +// ListenAndServeTLS provides a graceful version of the function provided by the +// net/http package. Call Close() to stop the server. +func ListenAndServeTLS(addr string, certFile string, keyFile string, handler http.Handler) error { + defaultServer = NewWithServer(&http.Server{Addr: addr, Handler: handler}) + return defaultServer.ListenAndServeTLS(certFile, keyFile) +} + +// Serve provides a graceful version of the function provided by the net/http +// package. Call Close() to stop the server. +func Serve(l net.Listener, handler http.Handler) error { + defaultServer = NewWithServer(&http.Server{Handler: handler}) + return defaultServer.Serve(l) +} + +// Shuts down the default server used by ListenAndServe, ListenAndServeTLS and +// Serve. It returns true if it's the first time Close is called. +func Close() bool { + return defaultServer.Close() +} diff --git a/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/certs.go b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/certs.go new file mode 100644 index 0000000000..ede248b3d8 --- /dev/null +++ b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/certs.go @@ -0,0 +1,29 @@ +package test_helpers + +// A PEM-encoded TLS cert with SAN IPs "127.0.0.1" and "[::1]", expiring at the +// last second of 2049 (the end of ASN.1 time). + +// generated from src/pkg/crypto/tls: +// go run generate_cert.go --rsa-bits 512 --host 127.0.0.1,::1,example.com --ca --start-date "Jan 1 00:00:00 1970" --duration=1000000h +var ( + Cert = []byte(`-----BEGIN CERTIFICATE----- +MIIBdzCCASOgAwIBAgIBADALBgkqhkiG9w0BAQUwEjEQMA4GA1UEChMHQWNtZSBD +bzAeFw03MDAxMDEwMDAwMDBaFw00OTEyMzEyMzU5NTlaMBIxEDAOBgNVBAoTB0Fj +bWUgQ28wWjALBgkqhkiG9w0BAQEDSwAwSAJBAN55NcYKZeInyTuhcCwFMhDHCmwa +IUSdtXdcbItRB/yfXGBhiex00IaLXQnSU+QZPRZWYqeTEbFSgihqi1PUDy8CAwEA +AaNoMGYwDgYDVR0PAQH/BAQDAgCkMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA8GA1Ud +EwEB/wQFMAMBAf8wLgYDVR0RBCcwJYILZXhhbXBsZS5jb22HBH8AAAGHEAAAAAAA +AAAAAAAAAAAAAAEwCwYJKoZIhvcNAQEFA0EAAoQn/ytgqpiLcZu9XKbCJsJcvkgk +Se6AbGXgSlq+ZCEVo0qIwSgeBqmsJxUu7NCSOwVJLYNEBO2DtIxoYVk+MA== +-----END CERTIFICATE-----`) + + Key = []byte(`-----BEGIN RSA PRIVATE KEY----- +MIIBPAIBAAJBAN55NcYKZeInyTuhcCwFMhDHCmwaIUSdtXdcbItRB/yfXGBhiex0 +0IaLXQnSU+QZPRZWYqeTEbFSgihqi1PUDy8CAwEAAQJBAQdUx66rfh8sYsgfdcvV +NoafYpnEcB5s4m/vSVe6SU7dCK6eYec9f9wpT353ljhDUHq3EbmE4foNzJngh35d +AekCIQDhRQG5Li0Wj8TM4obOnnXUXf1jRv0UkzE9AHWLG5q3AwIhAPzSjpYUDjVW +MCUXgckTpKCuGwbJk7424Nb8bLzf3kllAiA5mUBgjfr/WtFSJdWcPQ4Zt9KTMNKD +EUO0ukpTwEIl6wIhAMbGqZK3zAAFdq8DD2jPx+UJXnh0rnOkZBzDtJ6/iN69AiEA +1Aq8MJgTaYsDQWyU/hDq5YkDJc9e9DSCvUIzqxQWMQE= +-----END RSA PRIVATE KEY-----`) +) diff --git a/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/conn.go b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/conn.go new file mode 100644 index 0000000000..8c610f58ec --- /dev/null +++ b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/conn.go @@ -0,0 +1,13 @@ +package test_helpers + +import "net" + +type Conn struct { + net.Conn + CloseCalled bool +} + +func (c *Conn) Close() error { + c.CloseCalled = true + return nil +} diff --git a/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/listener.go b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/listener.go new file mode 100644 index 0000000000..e3af35a6e1 --- /dev/null +++ b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/listener.go @@ -0,0 +1,34 @@ +package test_helpers + +import ( + "errors" + "net" +) + +type Listener struct { + AcceptRelease chan bool + CloseCalled chan bool +} + +func NewListener() *Listener { + return &Listener{ + make(chan bool, 1), + make(chan bool, 1), + } +} + +func (l *Listener) Addr() net.Addr { + addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:8080") + return addr +} + +func (l *Listener) Close() error { + l.CloseCalled <- true + l.AcceptRelease <- true + return nil +} + +func (l *Listener) Accept() (net.Conn, error) { + <-l.AcceptRelease + return nil, errors.New("connection closed") +} diff --git a/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/temp_file.go b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/temp_file.go new file mode 100644 index 0000000000..c4aa263a07 --- /dev/null +++ b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/temp_file.go @@ -0,0 +1,27 @@ +package test_helpers + +import ( + "io/ioutil" + "os" +) + +type TempFile struct { + *os.File +} + +func NewTempFile(content []byte) (*TempFile, error) { + f, err := ioutil.TempFile("", "graceful-test") + if err != nil { + return nil, err + } + + f.Write(content) + return &TempFile{f}, nil +} + +func (tf *TempFile) Unlink() { + if tf.File != nil { + os.Remove(tf.Name()) + tf.File = nil + } +} diff --git a/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/wait_group.go b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/wait_group.go new file mode 100644 index 0000000000..1df590db70 --- /dev/null +++ b/Godeps/_workspace/src/github.com/braintree/manners/test_helpers/wait_group.go @@ -0,0 +1,33 @@ +package test_helpers + +import "sync" + +type WaitGroup struct { + sync.Mutex + Count int + WaitCalled chan int +} + +func NewWaitGroup() *WaitGroup { + return &WaitGroup{ + WaitCalled: make(chan int, 1), + } +} + +func (wg *WaitGroup) Add(delta int) { + wg.Lock() + wg.Count++ + wg.Unlock() +} + +func (wg *WaitGroup) Done() { + wg.Lock() + wg.Count-- + wg.Unlock() +} + +func (wg *WaitGroup) Wait() { + wg.Lock() + wg.WaitCalled <- wg.Count + wg.Unlock() +} diff --git a/Godeps/_workspace/src/github.com/braintree/manners/transition_test.go b/Godeps/_workspace/src/github.com/braintree/manners/transition_test.go new file mode 100644 index 0000000000..303ff1e98f --- /dev/null +++ b/Godeps/_workspace/src/github.com/braintree/manners/transition_test.go @@ -0,0 +1,54 @@ +package manners + +import ( + helpers "github.com/mattermost/platform/Godeps/_workspace/src/github.com/braintree/manners/test_helpers" + "net/http" + "strings" + "testing" +) + +func TestStateTransitions(t *testing.T) { + tests := []transitionTest{ + transitionTest{[]http.ConnState{http.StateNew, http.StateActive}, 1}, + transitionTest{[]http.ConnState{http.StateNew, http.StateClosed}, 0}, + transitionTest{[]http.ConnState{http.StateNew, http.StateActive, http.StateClosed}, 0}, + transitionTest{[]http.ConnState{http.StateNew, http.StateActive, http.StateHijacked}, 0}, + transitionTest{[]http.ConnState{http.StateNew, http.StateActive, http.StateIdle}, 0}, + transitionTest{[]http.ConnState{http.StateNew, http.StateActive, http.StateIdle, http.StateActive}, 1}, + transitionTest{[]http.ConnState{http.StateNew, http.StateActive, http.StateIdle, http.StateActive, http.StateIdle}, 0}, + transitionTest{[]http.ConnState{http.StateNew, http.StateActive, http.StateIdle, http.StateActive, http.StateClosed}, 0}, + transitionTest{[]http.ConnState{http.StateNew, http.StateActive, http.StateIdle, http.StateActive, http.StateIdle, http.StateClosed}, 0}, + } + + for _, test := range tests { + testStateTransition(t, test) + } +} + +type transitionTest struct { + states []http.ConnState + expectedWgCount int +} + +func testStateTransition(t *testing.T, test transitionTest) { + server := newServer() + wg := helpers.NewWaitGroup() + server.wg = wg + startServer(t, server, nil) + + conn := &helpers.Conn{} + for _, newState := range test.states { + server.ConnState(conn, newState) + } + + server.Close() + waiting := <-wg.WaitCalled + if waiting != test.expectedWgCount { + names := make([]string, len(test.states)) + for i, s := range test.states { + names[i] = s.String() + } + transitions := strings.Join(names, " -> ") + t.Errorf("%s - Waitcount should be %d, got %d", transitions, test.expectedWgCount, waiting) + } +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypass.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypass.go new file mode 100644 index 0000000000..565bf5899f --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypass.go @@ -0,0 +1,151 @@ +// Copyright (c) 2015 Dave Collins +// +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// NOTE: Due to the following build constraints, this file will only be compiled +// when the code is not running on Google App Engine and "-tags disableunsafe" +// is not added to the go build command line. +// +build !appengine,!disableunsafe + +package spew + +import ( + "reflect" + "unsafe" +) + +const ( + // UnsafeDisabled is a build-time constant which specifies whether or + // not access to the unsafe package is available. + UnsafeDisabled = false + + // ptrSize is the size of a pointer on the current arch. + ptrSize = unsafe.Sizeof((*byte)(nil)) +) + +var ( + // offsetPtr, offsetScalar, and offsetFlag are the offsets for the + // internal reflect.Value fields. These values are valid before golang + // commit ecccf07e7f9d which changed the format. The are also valid + // after commit 82f48826c6c7 which changed the format again to mirror + // the original format. Code in the init function updates these offsets + // as necessary. + offsetPtr = uintptr(ptrSize) + offsetScalar = uintptr(0) + offsetFlag = uintptr(ptrSize * 2) + + // flagKindWidth and flagKindShift indicate various bits that the + // reflect package uses internally to track kind information. + // + // flagRO indicates whether or not the value field of a reflect.Value is + // read-only. + // + // flagIndir indicates whether the value field of a reflect.Value is + // the actual data or a pointer to the data. + // + // These values are valid before golang commit 90a7c3c86944 which + // changed their positions. Code in the init function updates these + // flags as necessary. + flagKindWidth = uintptr(5) + flagKindShift = uintptr(flagKindWidth - 1) + flagRO = uintptr(1 << 0) + flagIndir = uintptr(1 << 1) +) + +func init() { + // Older versions of reflect.Value stored small integers directly in the + // ptr field (which is named val in the older versions). Versions + // between commits ecccf07e7f9d and 82f48826c6c7 added a new field named + // scalar for this purpose which unfortunately came before the flag + // field, so the offset of the flag field is different for those + // versions. + // + // This code constructs a new reflect.Value from a known small integer + // and checks if the size of the reflect.Value struct indicates it has + // the scalar field. When it does, the offsets are updated accordingly. + vv := reflect.ValueOf(0xf00) + if unsafe.Sizeof(vv) == (ptrSize * 4) { + offsetScalar = ptrSize * 2 + offsetFlag = ptrSize * 3 + } + + // Commit 90a7c3c86944 changed the flag positions such that the low + // order bits are the kind. This code extracts the kind from the flags + // field and ensures it's the correct type. When it's not, the flag + // order has been changed to the newer format, so the flags are updated + // accordingly. + upf := unsafe.Pointer(uintptr(unsafe.Pointer(&vv)) + offsetFlag) + upfv := *(*uintptr)(upf) + flagKindMask := uintptr((1<>flagKindShift != uintptr(reflect.Int) { + flagKindShift = 0 + flagRO = 1 << 5 + flagIndir = 1 << 6 + + // Commit adf9b30e5594 modified the flags to separate the + // flagRO flag into two bits which specifies whether or not the + // field is embedded. This causes flagIndir to move over a bit + // and means that flagRO is the combination of either of the + // original flagRO bit and the new bit. + // + // This code detects the change by extracting what used to be + // the indirect bit to ensure it's set. When it's not, the flag + // order has been changed to the newer format, so the flags are + // updated accordingly. + if upfv&flagIndir == 0 { + flagRO = 3 << 5 + flagIndir = 1 << 7 + } + } +} + +// unsafeReflectValue converts the passed reflect.Value into a one that bypasses +// the typical safety restrictions preventing access to unaddressable and +// unexported data. It works by digging the raw pointer to the underlying +// value out of the protected value and generating a new unprotected (unsafe) +// reflect.Value to it. +// +// This allows us to check for implementations of the Stringer and error +// interfaces to be used for pretty printing ordinarily unaddressable and +// inaccessible values such as unexported struct fields. +func unsafeReflectValue(v reflect.Value) (rv reflect.Value) { + indirects := 1 + vt := v.Type() + upv := unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + offsetPtr) + rvf := *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + offsetFlag)) + if rvf&flagIndir != 0 { + vt = reflect.PtrTo(v.Type()) + indirects++ + } else if offsetScalar != 0 { + // The value is in the scalar field when it's not one of the + // reference types. + switch vt.Kind() { + case reflect.Uintptr: + case reflect.Chan: + case reflect.Func: + case reflect.Map: + case reflect.Ptr: + case reflect.UnsafePointer: + default: + upv = unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + + offsetScalar) + } + } + + pv := reflect.NewAt(vt, upv) + rv = pv + for i := 0; i < indirects; i++ { + rv = rv.Elem() + } + return rv +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypasssafe.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypasssafe.go new file mode 100644 index 0000000000..457e41235e --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/bypasssafe.go @@ -0,0 +1,37 @@ +// Copyright (c) 2015 Dave Collins +// +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// NOTE: Due to the following build constraints, this file will only be compiled +// when either the code is running on Google App Engine or "-tags disableunsafe" +// is added to the go build command line. +// +build appengine disableunsafe + +package spew + +import "reflect" + +const ( + // UnsafeDisabled is a build-time constant which specifies whether or + // not access to the unsafe package is available. + UnsafeDisabled = true +) + +// unsafeReflectValue typically converts the passed reflect.Value into a one +// that bypasses the typical safety restrictions preventing access to +// unaddressable and unexported data. However, doing this relies on access to +// the unsafe package. This is a stub version which simply returns the passed +// reflect.Value when the unsafe package is not available. +func unsafeReflectValue(v reflect.Value) reflect.Value { + return v +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/common.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/common.go new file mode 100644 index 0000000000..14f02dc15b --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/common.go @@ -0,0 +1,341 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package spew + +import ( + "bytes" + "fmt" + "io" + "reflect" + "sort" + "strconv" +) + +// Some constants in the form of bytes to avoid string overhead. This mirrors +// the technique used in the fmt package. +var ( + panicBytes = []byte("(PANIC=") + plusBytes = []byte("+") + iBytes = []byte("i") + trueBytes = []byte("true") + falseBytes = []byte("false") + interfaceBytes = []byte("(interface {})") + commaNewlineBytes = []byte(",\n") + newlineBytes = []byte("\n") + openBraceBytes = []byte("{") + openBraceNewlineBytes = []byte("{\n") + closeBraceBytes = []byte("}") + asteriskBytes = []byte("*") + colonBytes = []byte(":") + colonSpaceBytes = []byte(": ") + openParenBytes = []byte("(") + closeParenBytes = []byte(")") + spaceBytes = []byte(" ") + pointerChainBytes = []byte("->") + nilAngleBytes = []byte("") + maxNewlineBytes = []byte("\n") + maxShortBytes = []byte("") + circularBytes = []byte("") + circularShortBytes = []byte("") + invalidAngleBytes = []byte("") + openBracketBytes = []byte("[") + closeBracketBytes = []byte("]") + percentBytes = []byte("%") + precisionBytes = []byte(".") + openAngleBytes = []byte("<") + closeAngleBytes = []byte(">") + openMapBytes = []byte("map[") + closeMapBytes = []byte("]") + lenEqualsBytes = []byte("len=") + capEqualsBytes = []byte("cap=") +) + +// hexDigits is used to map a decimal value to a hex digit. +var hexDigits = "0123456789abcdef" + +// catchPanic handles any panics that might occur during the handleMethods +// calls. +func catchPanic(w io.Writer, v reflect.Value) { + if err := recover(); err != nil { + w.Write(panicBytes) + fmt.Fprintf(w, "%v", err) + w.Write(closeParenBytes) + } +} + +// handleMethods attempts to call the Error and String methods on the underlying +// type the passed reflect.Value represents and outputes the result to Writer w. +// +// It handles panics in any called methods by catching and displaying the error +// as the formatted value. +func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool) { + // We need an interface to check if the type implements the error or + // Stringer interface. However, the reflect package won't give us an + // interface on certain things like unexported struct fields in order + // to enforce visibility rules. We use unsafe, when it's available, + // to bypass these restrictions since this package does not mutate the + // values. + if !v.CanInterface() { + if UnsafeDisabled { + return false + } + + v = unsafeReflectValue(v) + } + + // Choose whether or not to do error and Stringer interface lookups against + // the base type or a pointer to the base type depending on settings. + // Technically calling one of these methods with a pointer receiver can + // mutate the value, however, types which choose to satisify an error or + // Stringer interface with a pointer receiver should not be mutating their + // state inside these interface methods. + if !cs.DisablePointerMethods && !UnsafeDisabled && !v.CanAddr() { + v = unsafeReflectValue(v) + } + if v.CanAddr() { + v = v.Addr() + } + + // Is it an error or Stringer? + switch iface := v.Interface().(type) { + case error: + defer catchPanic(w, v) + if cs.ContinueOnMethod { + w.Write(openParenBytes) + w.Write([]byte(iface.Error())) + w.Write(closeParenBytes) + w.Write(spaceBytes) + return false + } + + w.Write([]byte(iface.Error())) + return true + + case fmt.Stringer: + defer catchPanic(w, v) + if cs.ContinueOnMethod { + w.Write(openParenBytes) + w.Write([]byte(iface.String())) + w.Write(closeParenBytes) + w.Write(spaceBytes) + return false + } + w.Write([]byte(iface.String())) + return true + } + return false +} + +// printBool outputs a boolean value as true or false to Writer w. +func printBool(w io.Writer, val bool) { + if val { + w.Write(trueBytes) + } else { + w.Write(falseBytes) + } +} + +// printInt outputs a signed integer value to Writer w. +func printInt(w io.Writer, val int64, base int) { + w.Write([]byte(strconv.FormatInt(val, base))) +} + +// printUint outputs an unsigned integer value to Writer w. +func printUint(w io.Writer, val uint64, base int) { + w.Write([]byte(strconv.FormatUint(val, base))) +} + +// printFloat outputs a floating point value using the specified precision, +// which is expected to be 32 or 64bit, to Writer w. +func printFloat(w io.Writer, val float64, precision int) { + w.Write([]byte(strconv.FormatFloat(val, 'g', -1, precision))) +} + +// printComplex outputs a complex value using the specified float precision +// for the real and imaginary parts to Writer w. +func printComplex(w io.Writer, c complex128, floatPrecision int) { + r := real(c) + w.Write(openParenBytes) + w.Write([]byte(strconv.FormatFloat(r, 'g', -1, floatPrecision))) + i := imag(c) + if i >= 0 { + w.Write(plusBytes) + } + w.Write([]byte(strconv.FormatFloat(i, 'g', -1, floatPrecision))) + w.Write(iBytes) + w.Write(closeParenBytes) +} + +// printHexPtr outputs a uintptr formatted as hexidecimal with a leading '0x' +// prefix to Writer w. +func printHexPtr(w io.Writer, p uintptr) { + // Null pointer. + num := uint64(p) + if num == 0 { + w.Write(nilAngleBytes) + return + } + + // Max uint64 is 16 bytes in hex + 2 bytes for '0x' prefix + buf := make([]byte, 18) + + // It's simpler to construct the hex string right to left. + base := uint64(16) + i := len(buf) - 1 + for num >= base { + buf[i] = hexDigits[num%base] + num /= base + i-- + } + buf[i] = hexDigits[num] + + // Add '0x' prefix. + i-- + buf[i] = 'x' + i-- + buf[i] = '0' + + // Strip unused leading bytes. + buf = buf[i:] + w.Write(buf) +} + +// valuesSorter implements sort.Interface to allow a slice of reflect.Value +// elements to be sorted. +type valuesSorter struct { + values []reflect.Value + strings []string // either nil or same len and values + cs *ConfigState +} + +// newValuesSorter initializes a valuesSorter instance, which holds a set of +// surrogate keys on which the data should be sorted. It uses flags in +// ConfigState to decide if and how to populate those surrogate keys. +func newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Interface { + vs := &valuesSorter{values: values, cs: cs} + if canSortSimply(vs.values[0].Kind()) { + return vs + } + if !cs.DisableMethods { + vs.strings = make([]string, len(values)) + for i := range vs.values { + b := bytes.Buffer{} + if !handleMethods(cs, &b, vs.values[i]) { + vs.strings = nil + break + } + vs.strings[i] = b.String() + } + } + if vs.strings == nil && cs.SpewKeys { + vs.strings = make([]string, len(values)) + for i := range vs.values { + vs.strings[i] = Sprintf("%#v", vs.values[i].Interface()) + } + } + return vs +} + +// canSortSimply tests whether a reflect.Kind is a primitive that can be sorted +// directly, or whether it should be considered for sorting by surrogate keys +// (if the ConfigState allows it). +func canSortSimply(kind reflect.Kind) bool { + // This switch parallels valueSortLess, except for the default case. + switch kind { + case reflect.Bool: + return true + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + return true + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + return true + case reflect.Float32, reflect.Float64: + return true + case reflect.String: + return true + case reflect.Uintptr: + return true + case reflect.Array: + return true + } + return false +} + +// Len returns the number of values in the slice. It is part of the +// sort.Interface implementation. +func (s *valuesSorter) Len() int { + return len(s.values) +} + +// Swap swaps the values at the passed indices. It is part of the +// sort.Interface implementation. +func (s *valuesSorter) Swap(i, j int) { + s.values[i], s.values[j] = s.values[j], s.values[i] + if s.strings != nil { + s.strings[i], s.strings[j] = s.strings[j], s.strings[i] + } +} + +// valueSortLess returns whether the first value should sort before the second +// value. It is used by valueSorter.Less as part of the sort.Interface +// implementation. +func valueSortLess(a, b reflect.Value) bool { + switch a.Kind() { + case reflect.Bool: + return !a.Bool() && b.Bool() + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + return a.Int() < b.Int() + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + return a.Uint() < b.Uint() + case reflect.Float32, reflect.Float64: + return a.Float() < b.Float() + case reflect.String: + return a.String() < b.String() + case reflect.Uintptr: + return a.Uint() < b.Uint() + case reflect.Array: + // Compare the contents of both arrays. + l := a.Len() + for i := 0; i < l; i++ { + av := a.Index(i) + bv := b.Index(i) + if av.Interface() == bv.Interface() { + continue + } + return valueSortLess(av, bv) + } + } + return a.String() < b.String() +} + +// Less returns whether the value at index i should sort before the +// value at index j. It is part of the sort.Interface implementation. +func (s *valuesSorter) Less(i, j int) bool { + if s.strings == nil { + return valueSortLess(s.values[i], s.values[j]) + } + return s.strings[i] < s.strings[j] +} + +// sortValues is a sort function that handles both native types and any type that +// can be converted to error or Stringer. Other inputs are sorted according to +// their Value.String() value to ensure display stability. +func sortValues(values []reflect.Value, cs *ConfigState) { + if len(values) == 0 { + return + } + sort.Sort(newValuesSorter(values, cs)) +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/common_test.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/common_test.go new file mode 100644 index 0000000000..a25252cc19 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/common_test.go @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package spew_test + +import ( + "fmt" + "reflect" + "testing" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/davecgh/go-spew/spew" +) + +// custom type to test Stinger interface on non-pointer receiver. +type stringer string + +// String implements the Stringer interface for testing invocation of custom +// stringers on types with non-pointer receivers. +func (s stringer) String() string { + return "stringer " + string(s) +} + +// custom type to test Stinger interface on pointer receiver. +type pstringer string + +// String implements the Stringer interface for testing invocation of custom +// stringers on types with only pointer receivers. +func (s *pstringer) String() string { + return "stringer " + string(*s) +} + +// xref1 and xref2 are cross referencing structs for testing circular reference +// detection. +type xref1 struct { + ps2 *xref2 +} +type xref2 struct { + ps1 *xref1 +} + +// indirCir1, indirCir2, and indirCir3 are used to generate an indirect circular +// reference for testing detection. +type indirCir1 struct { + ps2 *indirCir2 +} +type indirCir2 struct { + ps3 *indirCir3 +} +type indirCir3 struct { + ps1 *indirCir1 +} + +// embed is used to test embedded structures. +type embed struct { + a string +} + +// embedwrap is used to test embedded structures. +type embedwrap struct { + *embed + e *embed +} + +// panicer is used to intentionally cause a panic for testing spew properly +// handles them +type panicer int + +func (p panicer) String() string { + panic("test panic") +} + +// customError is used to test custom error interface invocation. +type customError int + +func (e customError) Error() string { + return fmt.Sprintf("error: %d", int(e)) +} + +// stringizeWants converts a slice of wanted test output into a format suitable +// for a test error message. +func stringizeWants(wants []string) string { + s := "" + for i, want := range wants { + if i > 0 { + s += fmt.Sprintf("want%d: %s", i+1, want) + } else { + s += "want: " + want + } + } + return s +} + +// testFailed returns whether or not a test failed by checking if the result +// of the test is in the slice of wanted strings. +func testFailed(result string, wants []string) bool { + for _, want := range wants { + if result == want { + return false + } + } + return true +} + +type sortableStruct struct { + x int +} + +func (ss sortableStruct) String() string { + return fmt.Sprintf("ss.%d", ss.x) +} + +type unsortableStruct struct { + x int +} + +type sortTestCase struct { + input []reflect.Value + expected []reflect.Value +} + +func helpTestSortValues(tests []sortTestCase, cs *spew.ConfigState, t *testing.T) { + getInterfaces := func(values []reflect.Value) []interface{} { + interfaces := []interface{}{} + for _, v := range values { + interfaces = append(interfaces, v.Interface()) + } + return interfaces + } + + for _, test := range tests { + spew.SortValues(test.input, cs) + // reflect.DeepEqual cannot really make sense of reflect.Value, + // probably because of all the pointer tricks. For instance, + // v(2.0) != v(2.0) on a 32-bits system. Turn them into interface{} + // instead. + input := getInterfaces(test.input) + expected := getInterfaces(test.expected) + if !reflect.DeepEqual(input, expected) { + t.Errorf("Sort mismatch:\n %v != %v", input, expected) + } + } +} + +// TestSortValues ensures the sort functionality for relect.Value based sorting +// works as intended. +func TestSortValues(t *testing.T) { + v := reflect.ValueOf + + a := v("a") + b := v("b") + c := v("c") + embedA := v(embed{"a"}) + embedB := v(embed{"b"}) + embedC := v(embed{"c"}) + tests := []sortTestCase{ + // No values. + { + []reflect.Value{}, + []reflect.Value{}, + }, + // Bools. + { + []reflect.Value{v(false), v(true), v(false)}, + []reflect.Value{v(false), v(false), v(true)}, + }, + // Ints. + { + []reflect.Value{v(2), v(1), v(3)}, + []reflect.Value{v(1), v(2), v(3)}, + }, + // Uints. + { + []reflect.Value{v(uint8(2)), v(uint8(1)), v(uint8(3))}, + []reflect.Value{v(uint8(1)), v(uint8(2)), v(uint8(3))}, + }, + // Floats. + { + []reflect.Value{v(2.0), v(1.0), v(3.0)}, + []reflect.Value{v(1.0), v(2.0), v(3.0)}, + }, + // Strings. + { + []reflect.Value{b, a, c}, + []reflect.Value{a, b, c}, + }, + // Array + { + []reflect.Value{v([3]int{3, 2, 1}), v([3]int{1, 3, 2}), v([3]int{1, 2, 3})}, + []reflect.Value{v([3]int{1, 2, 3}), v([3]int{1, 3, 2}), v([3]int{3, 2, 1})}, + }, + // Uintptrs. + { + []reflect.Value{v(uintptr(2)), v(uintptr(1)), v(uintptr(3))}, + []reflect.Value{v(uintptr(1)), v(uintptr(2)), v(uintptr(3))}, + }, + // SortableStructs. + { + // Note: not sorted - DisableMethods is set. + []reflect.Value{v(sortableStruct{2}), v(sortableStruct{1}), v(sortableStruct{3})}, + []reflect.Value{v(sortableStruct{2}), v(sortableStruct{1}), v(sortableStruct{3})}, + }, + // UnsortableStructs. + { + // Note: not sorted - SpewKeys is false. + []reflect.Value{v(unsortableStruct{2}), v(unsortableStruct{1}), v(unsortableStruct{3})}, + []reflect.Value{v(unsortableStruct{2}), v(unsortableStruct{1}), v(unsortableStruct{3})}, + }, + // Invalid. + { + []reflect.Value{embedB, embedA, embedC}, + []reflect.Value{embedB, embedA, embedC}, + }, + } + cs := spew.ConfigState{DisableMethods: true, SpewKeys: false} + helpTestSortValues(tests, &cs, t) +} + +// TestSortValuesWithMethods ensures the sort functionality for relect.Value +// based sorting works as intended when using string methods. +func TestSortValuesWithMethods(t *testing.T) { + v := reflect.ValueOf + + a := v("a") + b := v("b") + c := v("c") + tests := []sortTestCase{ + // Ints. + { + []reflect.Value{v(2), v(1), v(3)}, + []reflect.Value{v(1), v(2), v(3)}, + }, + // Strings. + { + []reflect.Value{b, a, c}, + []reflect.Value{a, b, c}, + }, + // SortableStructs. + { + []reflect.Value{v(sortableStruct{2}), v(sortableStruct{1}), v(sortableStruct{3})}, + []reflect.Value{v(sortableStruct{1}), v(sortableStruct{2}), v(sortableStruct{3})}, + }, + // UnsortableStructs. + { + // Note: not sorted - SpewKeys is false. + []reflect.Value{v(unsortableStruct{2}), v(unsortableStruct{1}), v(unsortableStruct{3})}, + []reflect.Value{v(unsortableStruct{2}), v(unsortableStruct{1}), v(unsortableStruct{3})}, + }, + } + cs := spew.ConfigState{DisableMethods: false, SpewKeys: false} + helpTestSortValues(tests, &cs, t) +} + +// TestSortValuesWithSpew ensures the sort functionality for relect.Value +// based sorting works as intended when using spew to stringify keys. +func TestSortValuesWithSpew(t *testing.T) { + v := reflect.ValueOf + + a := v("a") + b := v("b") + c := v("c") + tests := []sortTestCase{ + // Ints. + { + []reflect.Value{v(2), v(1), v(3)}, + []reflect.Value{v(1), v(2), v(3)}, + }, + // Strings. + { + []reflect.Value{b, a, c}, + []reflect.Value{a, b, c}, + }, + // SortableStructs. + { + []reflect.Value{v(sortableStruct{2}), v(sortableStruct{1}), v(sortableStruct{3})}, + []reflect.Value{v(sortableStruct{1}), v(sortableStruct{2}), v(sortableStruct{3})}, + }, + // UnsortableStructs. + { + []reflect.Value{v(unsortableStruct{2}), v(unsortableStruct{1}), v(unsortableStruct{3})}, + []reflect.Value{v(unsortableStruct{1}), v(unsortableStruct{2}), v(unsortableStruct{3})}, + }, + } + cs := spew.ConfigState{DisableMethods: true, SpewKeys: true} + helpTestSortValues(tests, &cs, t) +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/config.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/config.go new file mode 100644 index 0000000000..ee1ab07b3f --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/config.go @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package spew + +import ( + "bytes" + "fmt" + "io" + "os" +) + +// ConfigState houses the configuration options used by spew to format and +// display values. There is a global instance, Config, that is used to control +// all top-level Formatter and Dump functionality. Each ConfigState instance +// provides methods equivalent to the top-level functions. +// +// The zero value for ConfigState provides no indentation. You would typically +// want to set it to a space or a tab. +// +// Alternatively, you can use NewDefaultConfig to get a ConfigState instance +// with default settings. See the documentation of NewDefaultConfig for default +// values. +type ConfigState struct { + // Indent specifies the string to use for each indentation level. The + // global config instance that all top-level functions use set this to a + // single space by default. If you would like more indentation, you might + // set this to a tab with "\t" or perhaps two spaces with " ". + Indent string + + // MaxDepth controls the maximum number of levels to descend into nested + // data structures. The default, 0, means there is no limit. + // + // NOTE: Circular data structures are properly detected, so it is not + // necessary to set this value unless you specifically want to limit deeply + // nested data structures. + MaxDepth int + + // DisableMethods specifies whether or not error and Stringer interfaces are + // invoked for types that implement them. + DisableMethods bool + + // DisablePointerMethods specifies whether or not to check for and invoke + // error and Stringer interfaces on types which only accept a pointer + // receiver when the current type is not a pointer. + // + // NOTE: This might be an unsafe action since calling one of these methods + // with a pointer receiver could technically mutate the value, however, + // in practice, types which choose to satisify an error or Stringer + // interface with a pointer receiver should not be mutating their state + // inside these interface methods. As a result, this option relies on + // access to the unsafe package, so it will not have any effect when + // running in environments without access to the unsafe package such as + // Google App Engine or with the "disableunsafe" build tag specified. + DisablePointerMethods bool + + // ContinueOnMethod specifies whether or not recursion should continue once + // a custom error or Stringer interface is invoked. The default, false, + // means it will print the results of invoking the custom error or Stringer + // interface and return immediately instead of continuing to recurse into + // the internals of the data type. + // + // NOTE: This flag does not have any effect if method invocation is disabled + // via the DisableMethods or DisablePointerMethods options. + ContinueOnMethod bool + + // SortKeys specifies map keys should be sorted before being printed. Use + // this to have a more deterministic, diffable output. Note that only + // native types (bool, int, uint, floats, uintptr and string) and types + // that support the error or Stringer interfaces (if methods are + // enabled) are supported, with other types sorted according to the + // reflect.Value.String() output which guarantees display stability. + SortKeys bool + + // SpewKeys specifies that, as a last resort attempt, map keys should + // be spewed to strings and sorted by those strings. This is only + // considered if SortKeys is true. + SpewKeys bool +} + +// Config is the active configuration of the top-level functions. +// The configuration can be changed by modifying the contents of spew.Config. +var Config = ConfigState{Indent: " "} + +// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the formatted string as a value that satisfies error. See NewFormatter +// for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Errorf(format, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Errorf(format string, a ...interface{}) (err error) { + return fmt.Errorf(format, c.convertArgs(a)...) +} + +// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprint(w, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprint(w, c.convertArgs(a)...) +} + +// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprintf(w, format, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { + return fmt.Fprintf(w, format, c.convertArgs(a)...) +} + +// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it +// passed with a Formatter interface returned by c.NewFormatter. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprintln(w, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprintln(w, c.convertArgs(a)...) +} + +// Print is a wrapper for fmt.Print that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Print(c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Print(a ...interface{}) (n int, err error) { + return fmt.Print(c.convertArgs(a)...) +} + +// Printf is a wrapper for fmt.Printf that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Printf(format, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Printf(format string, a ...interface{}) (n int, err error) { + return fmt.Printf(format, c.convertArgs(a)...) +} + +// Println is a wrapper for fmt.Println that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Println(c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Println(a ...interface{}) (n int, err error) { + return fmt.Println(c.convertArgs(a)...) +} + +// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprint(c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Sprint(a ...interface{}) string { + return fmt.Sprint(c.convertArgs(a)...) +} + +// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were +// passed with a Formatter interface returned by c.NewFormatter. It returns +// the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprintf(format, c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Sprintf(format string, a ...interface{}) string { + return fmt.Sprintf(format, c.convertArgs(a)...) +} + +// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it +// were passed with a Formatter interface returned by c.NewFormatter. It +// returns the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprintln(c.NewFormatter(a), c.NewFormatter(b)) +func (c *ConfigState) Sprintln(a ...interface{}) string { + return fmt.Sprintln(c.convertArgs(a)...) +} + +/* +NewFormatter returns a custom formatter that satisfies the fmt.Formatter +interface. As a result, it integrates cleanly with standard fmt package +printing functions. The formatter is useful for inline printing of smaller data +types similar to the standard %v format specifier. + +The custom formatter only responds to the %v (most compact), %+v (adds pointer +addresses), %#v (adds types), and %#+v (adds types and pointer addresses) verb +combinations. Any other verbs such as %x and %q will be sent to the the +standard fmt package for formatting. In addition, the custom formatter ignores +the width and precision arguments (however they will still work on the format +specifiers not handled by the custom formatter). + +Typically this function shouldn't be called directly. It is much easier to make +use of the custom formatter by calling one of the convenience functions such as +c.Printf, c.Println, or c.Printf. +*/ +func (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter { + return newFormatter(c, v) +} + +// Fdump formats and displays the passed arguments to io.Writer w. It formats +// exactly the same as Dump. +func (c *ConfigState) Fdump(w io.Writer, a ...interface{}) { + fdump(c, w, a...) +} + +/* +Dump displays the passed parameters to standard out with newlines, customizable +indentation, and additional debug information such as complete types and all +pointer addresses used to indirect to the final value. It provides the +following features over the built-in printing facilities provided by the fmt +package: + + * Pointers are dereferenced and followed + * Circular data structures are detected and handled properly + * Custom Stringer/error interfaces are optionally invoked, including + on unexported types + * Custom types which only implement the Stringer/error interfaces via + a pointer receiver are optionally invoked when passing non-pointer + variables + * Byte arrays and slices are dumped like the hexdump -C command which + includes offsets, byte values in hex, and ASCII output + +The configuration options are controlled by modifying the public members +of c. See ConfigState for options documentation. + +See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to +get the formatted result as a string. +*/ +func (c *ConfigState) Dump(a ...interface{}) { + fdump(c, os.Stdout, a...) +} + +// Sdump returns a string with the passed arguments formatted exactly the same +// as Dump. +func (c *ConfigState) Sdump(a ...interface{}) string { + var buf bytes.Buffer + fdump(c, &buf, a...) + return buf.String() +} + +// convertArgs accepts a slice of arguments and returns a slice of the same +// length with each argument converted to a spew Formatter interface using +// the ConfigState associated with s. +func (c *ConfigState) convertArgs(args []interface{}) (formatters []interface{}) { + formatters = make([]interface{}, len(args)) + for index, arg := range args { + formatters[index] = newFormatter(c, arg) + } + return formatters +} + +// NewDefaultConfig returns a ConfigState with the following default settings. +// +// Indent: " " +// MaxDepth: 0 +// DisableMethods: false +// DisablePointerMethods: false +// ContinueOnMethod: false +// SortKeys: false +func NewDefaultConfig() *ConfigState { + return &ConfigState{Indent: " "} +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/doc.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/doc.go new file mode 100644 index 0000000000..5be0c40609 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/doc.go @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* +Package spew implements a deep pretty printer for Go data structures to aid in +debugging. + +A quick overview of the additional features spew provides over the built-in +printing facilities for Go data types are as follows: + + * Pointers are dereferenced and followed + * Circular data structures are detected and handled properly + * Custom Stringer/error interfaces are optionally invoked, including + on unexported types + * Custom types which only implement the Stringer/error interfaces via + a pointer receiver are optionally invoked when passing non-pointer + variables + * Byte arrays and slices are dumped like the hexdump -C command which + includes offsets, byte values in hex, and ASCII output (only when using + Dump style) + +There are two different approaches spew allows for dumping Go data structures: + + * Dump style which prints with newlines, customizable indentation, + and additional debug information such as types and all pointer addresses + used to indirect to the final value + * A custom Formatter interface that integrates cleanly with the standard fmt + package and replaces %v, %+v, %#v, and %#+v to provide inline printing + similar to the default %v while providing the additional functionality + outlined above and passing unsupported format verbs such as %x and %q + along to fmt + +Quick Start + +This section demonstrates how to quickly get started with spew. See the +sections below for further details on formatting and configuration options. + +To dump a variable with full newlines, indentation, type, and pointer +information use Dump, Fdump, or Sdump: + spew.Dump(myVar1, myVar2, ...) + spew.Fdump(someWriter, myVar1, myVar2, ...) + str := spew.Sdump(myVar1, myVar2, ...) + +Alternatively, if you would prefer to use format strings with a compacted inline +printing style, use the convenience wrappers Printf, Fprintf, etc with +%v (most compact), %+v (adds pointer addresses), %#v (adds types), or +%#+v (adds types and pointer addresses): + spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2) + spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) + spew.Fprintf(someWriter, "myVar1: %v -- myVar2: %+v", myVar1, myVar2) + spew.Fprintf(someWriter, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) + +Configuration Options + +Configuration of spew is handled by fields in the ConfigState type. For +convenience, all of the top-level functions use a global state available +via the spew.Config global. + +It is also possible to create a ConfigState instance that provides methods +equivalent to the top-level functions. This allows concurrent configuration +options. See the ConfigState documentation for more details. + +The following configuration options are available: + * Indent + String to use for each indentation level for Dump functions. + It is a single space by default. A popular alternative is "\t". + + * MaxDepth + Maximum number of levels to descend into nested data structures. + There is no limit by default. + + * DisableMethods + Disables invocation of error and Stringer interface methods. + Method invocation is enabled by default. + + * DisablePointerMethods + Disables invocation of error and Stringer interface methods on types + which only accept pointer receivers from non-pointer variables. + Pointer method invocation is enabled by default. + + * ContinueOnMethod + Enables recursion into types after invoking error and Stringer interface + methods. Recursion after method invocation is disabled by default. + + * SortKeys + Specifies map keys should be sorted before being printed. Use + this to have a more deterministic, diffable output. Note that + only native types (bool, int, uint, floats, uintptr and string) + and types which implement error or Stringer interfaces are + supported with other types sorted according to the + reflect.Value.String() output which guarantees display + stability. Natural map order is used by default. + + * SpewKeys + Specifies that, as a last resort attempt, map keys should be + spewed to strings and sorted by those strings. This is only + considered if SortKeys is true. + +Dump Usage + +Simply call spew.Dump with a list of variables you want to dump: + + spew.Dump(myVar1, myVar2, ...) + +You may also call spew.Fdump if you would prefer to output to an arbitrary +io.Writer. For example, to dump to standard error: + + spew.Fdump(os.Stderr, myVar1, myVar2, ...) + +A third option is to call spew.Sdump to get the formatted output as a string: + + str := spew.Sdump(myVar1, myVar2, ...) + +Sample Dump Output + +See the Dump example for details on the setup of the types and variables being +shown here. + + (main.Foo) { + unexportedField: (*main.Bar)(0xf84002e210)({ + flag: (main.Flag) flagTwo, + data: (uintptr) + }), + ExportedField: (map[interface {}]interface {}) (len=1) { + (string) (len=3) "one": (bool) true + } + } + +Byte (and uint8) arrays and slices are displayed uniquely like the hexdump -C +command as shown. + ([]uint8) (len=32 cap=32) { + 00000000 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 |............... | + 00000010 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 |!"#$%&'()*+,-./0| + 00000020 31 32 |12| + } + +Custom Formatter + +Spew provides a custom formatter that implements the fmt.Formatter interface +so that it integrates cleanly with standard fmt package printing functions. The +formatter is useful for inline printing of smaller data types similar to the +standard %v format specifier. + +The custom formatter only responds to the %v (most compact), %+v (adds pointer +addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb +combinations. Any other verbs such as %x and %q will be sent to the the +standard fmt package for formatting. In addition, the custom formatter ignores +the width and precision arguments (however they will still work on the format +specifiers not handled by the custom formatter). + +Custom Formatter Usage + +The simplest way to make use of the spew custom formatter is to call one of the +convenience functions such as spew.Printf, spew.Println, or spew.Printf. The +functions have syntax you are most likely already familiar with: + + spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2) + spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) + spew.Println(myVar, myVar2) + spew.Fprintf(os.Stderr, "myVar1: %v -- myVar2: %+v", myVar1, myVar2) + spew.Fprintf(os.Stderr, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) + +See the Index for the full list convenience functions. + +Sample Formatter Output + +Double pointer to a uint8: + %v: <**>5 + %+v: <**>(0xf8400420d0->0xf8400420c8)5 + %#v: (**uint8)5 + %#+v: (**uint8)(0xf8400420d0->0xf8400420c8)5 + +Pointer to circular struct with a uint8 field and a pointer to itself: + %v: <*>{1 <*>} + %+v: <*>(0xf84003e260){ui8:1 c:<*>(0xf84003e260)} + %#v: (*main.circular){ui8:(uint8)1 c:(*main.circular)} + %#+v: (*main.circular)(0xf84003e260){ui8:(uint8)1 c:(*main.circular)(0xf84003e260)} + +See the Printf example for details on the setup of variables being shown +here. + +Errors + +Since it is possible for custom Stringer/error interfaces to panic, spew +detects them and handles them internally by printing the panic information +inline with the output. Since spew is intended to provide deep pretty printing +capabilities on structures, it intentionally does not return any errors. +*/ +package spew diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dump.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dump.go new file mode 100644 index 0000000000..a0ff95e27e --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dump.go @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package spew + +import ( + "bytes" + "encoding/hex" + "fmt" + "io" + "os" + "reflect" + "regexp" + "strconv" + "strings" +) + +var ( + // uint8Type is a reflect.Type representing a uint8. It is used to + // convert cgo types to uint8 slices for hexdumping. + uint8Type = reflect.TypeOf(uint8(0)) + + // cCharRE is a regular expression that matches a cgo char. + // It is used to detect character arrays to hexdump them. + cCharRE = regexp.MustCompile("^.*\\._Ctype_char$") + + // cUnsignedCharRE is a regular expression that matches a cgo unsigned + // char. It is used to detect unsigned character arrays to hexdump + // them. + cUnsignedCharRE = regexp.MustCompile("^.*\\._Ctype_unsignedchar$") + + // cUint8tCharRE is a regular expression that matches a cgo uint8_t. + // It is used to detect uint8_t arrays to hexdump them. + cUint8tCharRE = regexp.MustCompile("^.*\\._Ctype_uint8_t$") +) + +// dumpState contains information about the state of a dump operation. +type dumpState struct { + w io.Writer + depth int + pointers map[uintptr]int + ignoreNextType bool + ignoreNextIndent bool + cs *ConfigState +} + +// indent performs indentation according to the depth level and cs.Indent +// option. +func (d *dumpState) indent() { + if d.ignoreNextIndent { + d.ignoreNextIndent = false + return + } + d.w.Write(bytes.Repeat([]byte(d.cs.Indent), d.depth)) +} + +// unpackValue returns values inside of non-nil interfaces when possible. +// This is useful for data types like structs, arrays, slices, and maps which +// can contain varying types packed inside an interface. +func (d *dumpState) unpackValue(v reflect.Value) reflect.Value { + if v.Kind() == reflect.Interface && !v.IsNil() { + v = v.Elem() + } + return v +} + +// dumpPtr handles formatting of pointers by indirecting them as necessary. +func (d *dumpState) dumpPtr(v reflect.Value) { + // Remove pointers at or below the current depth from map used to detect + // circular refs. + for k, depth := range d.pointers { + if depth >= d.depth { + delete(d.pointers, k) + } + } + + // Keep list of all dereferenced pointers to show later. + pointerChain := make([]uintptr, 0) + + // Figure out how many levels of indirection there are by dereferencing + // pointers and unpacking interfaces down the chain while detecting circular + // references. + nilFound := false + cycleFound := false + indirects := 0 + ve := v + for ve.Kind() == reflect.Ptr { + if ve.IsNil() { + nilFound = true + break + } + indirects++ + addr := ve.Pointer() + pointerChain = append(pointerChain, addr) + if pd, ok := d.pointers[addr]; ok && pd < d.depth { + cycleFound = true + indirects-- + break + } + d.pointers[addr] = d.depth + + ve = ve.Elem() + if ve.Kind() == reflect.Interface { + if ve.IsNil() { + nilFound = true + break + } + ve = ve.Elem() + } + } + + // Display type information. + d.w.Write(openParenBytes) + d.w.Write(bytes.Repeat(asteriskBytes, indirects)) + d.w.Write([]byte(ve.Type().String())) + d.w.Write(closeParenBytes) + + // Display pointer information. + if len(pointerChain) > 0 { + d.w.Write(openParenBytes) + for i, addr := range pointerChain { + if i > 0 { + d.w.Write(pointerChainBytes) + } + printHexPtr(d.w, addr) + } + d.w.Write(closeParenBytes) + } + + // Display dereferenced value. + d.w.Write(openParenBytes) + switch { + case nilFound == true: + d.w.Write(nilAngleBytes) + + case cycleFound == true: + d.w.Write(circularBytes) + + default: + d.ignoreNextType = true + d.dump(ve) + } + d.w.Write(closeParenBytes) +} + +// dumpSlice handles formatting of arrays and slices. Byte (uint8 under +// reflection) arrays and slices are dumped in hexdump -C fashion. +func (d *dumpState) dumpSlice(v reflect.Value) { + // Determine whether this type should be hex dumped or not. Also, + // for types which should be hexdumped, try to use the underlying data + // first, then fall back to trying to convert them to a uint8 slice. + var buf []uint8 + doConvert := false + doHexDump := false + numEntries := v.Len() + if numEntries > 0 { + vt := v.Index(0).Type() + vts := vt.String() + switch { + // C types that need to be converted. + case cCharRE.MatchString(vts): + fallthrough + case cUnsignedCharRE.MatchString(vts): + fallthrough + case cUint8tCharRE.MatchString(vts): + doConvert = true + + // Try to use existing uint8 slices and fall back to converting + // and copying if that fails. + case vt.Kind() == reflect.Uint8: + // We need an addressable interface to convert the type + // to a byte slice. However, the reflect package won't + // give us an interface on certain things like + // unexported struct fields in order to enforce + // visibility rules. We use unsafe, when available, to + // bypass these restrictions since this package does not + // mutate the values. + vs := v + if !vs.CanInterface() || !vs.CanAddr() { + vs = unsafeReflectValue(vs) + } + if !UnsafeDisabled { + vs = vs.Slice(0, numEntries) + + // Use the existing uint8 slice if it can be + // type asserted. + iface := vs.Interface() + if slice, ok := iface.([]uint8); ok { + buf = slice + doHexDump = true + break + } + } + + // The underlying data needs to be converted if it can't + // be type asserted to a uint8 slice. + doConvert = true + } + + // Copy and convert the underlying type if needed. + if doConvert && vt.ConvertibleTo(uint8Type) { + // Convert and copy each element into a uint8 byte + // slice. + buf = make([]uint8, numEntries) + for i := 0; i < numEntries; i++ { + vv := v.Index(i) + buf[i] = uint8(vv.Convert(uint8Type).Uint()) + } + doHexDump = true + } + } + + // Hexdump the entire slice as needed. + if doHexDump { + indent := strings.Repeat(d.cs.Indent, d.depth) + str := indent + hex.Dump(buf) + str = strings.Replace(str, "\n", "\n"+indent, -1) + str = strings.TrimRight(str, d.cs.Indent) + d.w.Write([]byte(str)) + return + } + + // Recursively call dump for each item. + for i := 0; i < numEntries; i++ { + d.dump(d.unpackValue(v.Index(i))) + if i < (numEntries - 1) { + d.w.Write(commaNewlineBytes) + } else { + d.w.Write(newlineBytes) + } + } +} + +// dump is the main workhorse for dumping a value. It uses the passed reflect +// value to figure out what kind of object we are dealing with and formats it +// appropriately. It is a recursive function, however circular data structures +// are detected and handled properly. +func (d *dumpState) dump(v reflect.Value) { + // Handle invalid reflect values immediately. + kind := v.Kind() + if kind == reflect.Invalid { + d.w.Write(invalidAngleBytes) + return + } + + // Handle pointers specially. + if kind == reflect.Ptr { + d.indent() + d.dumpPtr(v) + return + } + + // Print type information unless already handled elsewhere. + if !d.ignoreNextType { + d.indent() + d.w.Write(openParenBytes) + d.w.Write([]byte(v.Type().String())) + d.w.Write(closeParenBytes) + d.w.Write(spaceBytes) + } + d.ignoreNextType = false + + // Display length and capacity if the built-in len and cap functions + // work with the value's kind and the len/cap itself is non-zero. + valueLen, valueCap := 0, 0 + switch v.Kind() { + case reflect.Array, reflect.Slice, reflect.Chan: + valueLen, valueCap = v.Len(), v.Cap() + case reflect.Map, reflect.String: + valueLen = v.Len() + } + if valueLen != 0 || valueCap != 0 { + d.w.Write(openParenBytes) + if valueLen != 0 { + d.w.Write(lenEqualsBytes) + printInt(d.w, int64(valueLen), 10) + } + if valueCap != 0 { + if valueLen != 0 { + d.w.Write(spaceBytes) + } + d.w.Write(capEqualsBytes) + printInt(d.w, int64(valueCap), 10) + } + d.w.Write(closeParenBytes) + d.w.Write(spaceBytes) + } + + // Call Stringer/error interfaces if they exist and the handle methods flag + // is enabled + if !d.cs.DisableMethods { + if (kind != reflect.Invalid) && (kind != reflect.Interface) { + if handled := handleMethods(d.cs, d.w, v); handled { + return + } + } + } + + switch kind { + case reflect.Invalid: + // Do nothing. We should never get here since invalid has already + // been handled above. + + case reflect.Bool: + printBool(d.w, v.Bool()) + + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + printInt(d.w, v.Int(), 10) + + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + printUint(d.w, v.Uint(), 10) + + case reflect.Float32: + printFloat(d.w, v.Float(), 32) + + case reflect.Float64: + printFloat(d.w, v.Float(), 64) + + case reflect.Complex64: + printComplex(d.w, v.Complex(), 32) + + case reflect.Complex128: + printComplex(d.w, v.Complex(), 64) + + case reflect.Slice: + if v.IsNil() { + d.w.Write(nilAngleBytes) + break + } + fallthrough + + case reflect.Array: + d.w.Write(openBraceNewlineBytes) + d.depth++ + if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { + d.indent() + d.w.Write(maxNewlineBytes) + } else { + d.dumpSlice(v) + } + d.depth-- + d.indent() + d.w.Write(closeBraceBytes) + + case reflect.String: + d.w.Write([]byte(strconv.Quote(v.String()))) + + case reflect.Interface: + // The only time we should get here is for nil interfaces due to + // unpackValue calls. + if v.IsNil() { + d.w.Write(nilAngleBytes) + } + + case reflect.Ptr: + // Do nothing. We should never get here since pointers have already + // been handled above. + + case reflect.Map: + // nil maps should be indicated as different than empty maps + if v.IsNil() { + d.w.Write(nilAngleBytes) + break + } + + d.w.Write(openBraceNewlineBytes) + d.depth++ + if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { + d.indent() + d.w.Write(maxNewlineBytes) + } else { + numEntries := v.Len() + keys := v.MapKeys() + if d.cs.SortKeys { + sortValues(keys, d.cs) + } + for i, key := range keys { + d.dump(d.unpackValue(key)) + d.w.Write(colonSpaceBytes) + d.ignoreNextIndent = true + d.dump(d.unpackValue(v.MapIndex(key))) + if i < (numEntries - 1) { + d.w.Write(commaNewlineBytes) + } else { + d.w.Write(newlineBytes) + } + } + } + d.depth-- + d.indent() + d.w.Write(closeBraceBytes) + + case reflect.Struct: + d.w.Write(openBraceNewlineBytes) + d.depth++ + if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { + d.indent() + d.w.Write(maxNewlineBytes) + } else { + vt := v.Type() + numFields := v.NumField() + for i := 0; i < numFields; i++ { + d.indent() + vtf := vt.Field(i) + d.w.Write([]byte(vtf.Name)) + d.w.Write(colonSpaceBytes) + d.ignoreNextIndent = true + d.dump(d.unpackValue(v.Field(i))) + if i < (numFields - 1) { + d.w.Write(commaNewlineBytes) + } else { + d.w.Write(newlineBytes) + } + } + } + d.depth-- + d.indent() + d.w.Write(closeBraceBytes) + + case reflect.Uintptr: + printHexPtr(d.w, uintptr(v.Uint())) + + case reflect.UnsafePointer, reflect.Chan, reflect.Func: + printHexPtr(d.w, v.Pointer()) + + // There were not any other types at the time this code was written, but + // fall back to letting the default fmt package handle it in case any new + // types are added. + default: + if v.CanInterface() { + fmt.Fprintf(d.w, "%v", v.Interface()) + } else { + fmt.Fprintf(d.w, "%v", v.String()) + } + } +} + +// fdump is a helper function to consolidate the logic from the various public +// methods which take varying writers and config states. +func fdump(cs *ConfigState, w io.Writer, a ...interface{}) { + for _, arg := range a { + if arg == nil { + w.Write(interfaceBytes) + w.Write(spaceBytes) + w.Write(nilAngleBytes) + w.Write(newlineBytes) + continue + } + + d := dumpState{w: w, cs: cs} + d.pointers = make(map[uintptr]int) + d.dump(reflect.ValueOf(arg)) + d.w.Write(newlineBytes) + } +} + +// Fdump formats and displays the passed arguments to io.Writer w. It formats +// exactly the same as Dump. +func Fdump(w io.Writer, a ...interface{}) { + fdump(&Config, w, a...) +} + +// Sdump returns a string with the passed arguments formatted exactly the same +// as Dump. +func Sdump(a ...interface{}) string { + var buf bytes.Buffer + fdump(&Config, &buf, a...) + return buf.String() +} + +/* +Dump displays the passed parameters to standard out with newlines, customizable +indentation, and additional debug information such as complete types and all +pointer addresses used to indirect to the final value. It provides the +following features over the built-in printing facilities provided by the fmt +package: + + * Pointers are dereferenced and followed + * Circular data structures are detected and handled properly + * Custom Stringer/error interfaces are optionally invoked, including + on unexported types + * Custom types which only implement the Stringer/error interfaces via + a pointer receiver are optionally invoked when passing non-pointer + variables + * Byte arrays and slices are dumped like the hexdump -C command which + includes offsets, byte values in hex, and ASCII output + +The configuration options are controlled by an exported package global, +spew.Config. See ConfigState for options documentation. + +See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to +get the formatted result as a string. +*/ +func Dump(a ...interface{}) { + fdump(&Config, os.Stdout, a...) +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dump_test.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dump_test.go new file mode 100644 index 0000000000..0762e59ae0 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dump_test.go @@ -0,0 +1,1042 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* +Test Summary: +NOTE: For each test, a nil pointer, a single pointer and double pointer to the +base test element are also tested to ensure proper indirection across all types. + +- Max int8, int16, int32, int64, int +- Max uint8, uint16, uint32, uint64, uint +- Boolean true and false +- Standard complex64 and complex128 +- Array containing standard ints +- Array containing type with custom formatter on pointer receiver only +- Array containing interfaces +- Array containing bytes +- Slice containing standard float32 values +- Slice containing type with custom formatter on pointer receiver only +- Slice containing interfaces +- Slice containing bytes +- Nil slice +- Standard string +- Nil interface +- Sub-interface +- Map with string keys and int vals +- Map with custom formatter type on pointer receiver only keys and vals +- Map with interface keys and values +- Map with nil interface value +- Struct with primitives +- Struct that contains another struct +- Struct that contains custom type with Stringer pointer interface via both + exported and unexported fields +- Struct that contains embedded struct and field to same struct +- Uintptr to 0 (null pointer) +- Uintptr address of real variable +- Unsafe.Pointer to 0 (null pointer) +- Unsafe.Pointer to address of real variable +- Nil channel +- Standard int channel +- Function with no params and no returns +- Function with param and no returns +- Function with multiple params and multiple returns +- Struct that is circular through self referencing +- Structs that are circular through cross referencing +- Structs that are indirectly circular +- Type that panics in its Stringer interface +*/ + +package spew_test + +import ( + "bytes" + "fmt" + "testing" + "unsafe" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/davecgh/go-spew/spew" +) + +// dumpTest is used to describe a test to be perfomed against the Dump method. +type dumpTest struct { + in interface{} + wants []string +} + +// dumpTests houses all of the tests to be performed against the Dump method. +var dumpTests = make([]dumpTest, 0) + +// addDumpTest is a helper method to append the passed input and desired result +// to dumpTests +func addDumpTest(in interface{}, wants ...string) { + test := dumpTest{in, wants} + dumpTests = append(dumpTests, test) +} + +func addIntDumpTests() { + // Max int8. + v := int8(127) + nv := (*int8)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "int8" + vs := "127" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Max int16. + v2 := int16(32767) + nv2 := (*int16)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "int16" + v2s := "32767" + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") + addDumpTest(nv2, "(*"+v2t+")()\n") + + // Max int32. + v3 := int32(2147483647) + nv3 := (*int32)(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "int32" + v3s := "2147483647" + addDumpTest(v3, "("+v3t+") "+v3s+"\n") + addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3s+")\n") + addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3s+")\n") + addDumpTest(nv3, "(*"+v3t+")()\n") + + // Max int64. + v4 := int64(9223372036854775807) + nv4 := (*int64)(nil) + pv4 := &v4 + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "int64" + v4s := "9223372036854775807" + addDumpTest(v4, "("+v4t+") "+v4s+"\n") + addDumpTest(pv4, "(*"+v4t+")("+v4Addr+")("+v4s+")\n") + addDumpTest(&pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")("+v4s+")\n") + addDumpTest(nv4, "(*"+v4t+")()\n") + + // Max int. + v5 := int(2147483647) + nv5 := (*int)(nil) + pv5 := &v5 + v5Addr := fmt.Sprintf("%p", pv5) + pv5Addr := fmt.Sprintf("%p", &pv5) + v5t := "int" + v5s := "2147483647" + addDumpTest(v5, "("+v5t+") "+v5s+"\n") + addDumpTest(pv5, "(*"+v5t+")("+v5Addr+")("+v5s+")\n") + addDumpTest(&pv5, "(**"+v5t+")("+pv5Addr+"->"+v5Addr+")("+v5s+")\n") + addDumpTest(nv5, "(*"+v5t+")()\n") +} + +func addUintDumpTests() { + // Max uint8. + v := uint8(255) + nv := (*uint8)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "uint8" + vs := "255" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Max uint16. + v2 := uint16(65535) + nv2 := (*uint16)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "uint16" + v2s := "65535" + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") + addDumpTest(nv2, "(*"+v2t+")()\n") + + // Max uint32. + v3 := uint32(4294967295) + nv3 := (*uint32)(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "uint32" + v3s := "4294967295" + addDumpTest(v3, "("+v3t+") "+v3s+"\n") + addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3s+")\n") + addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3s+")\n") + addDumpTest(nv3, "(*"+v3t+")()\n") + + // Max uint64. + v4 := uint64(18446744073709551615) + nv4 := (*uint64)(nil) + pv4 := &v4 + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "uint64" + v4s := "18446744073709551615" + addDumpTest(v4, "("+v4t+") "+v4s+"\n") + addDumpTest(pv4, "(*"+v4t+")("+v4Addr+")("+v4s+")\n") + addDumpTest(&pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")("+v4s+")\n") + addDumpTest(nv4, "(*"+v4t+")()\n") + + // Max uint. + v5 := uint(4294967295) + nv5 := (*uint)(nil) + pv5 := &v5 + v5Addr := fmt.Sprintf("%p", pv5) + pv5Addr := fmt.Sprintf("%p", &pv5) + v5t := "uint" + v5s := "4294967295" + addDumpTest(v5, "("+v5t+") "+v5s+"\n") + addDumpTest(pv5, "(*"+v5t+")("+v5Addr+")("+v5s+")\n") + addDumpTest(&pv5, "(**"+v5t+")("+pv5Addr+"->"+v5Addr+")("+v5s+")\n") + addDumpTest(nv5, "(*"+v5t+")()\n") +} + +func addBoolDumpTests() { + // Boolean true. + v := bool(true) + nv := (*bool)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "bool" + vs := "true" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Boolean false. + v2 := bool(false) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "bool" + v2s := "false" + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") +} + +func addFloatDumpTests() { + // Standard float32. + v := float32(3.1415) + nv := (*float32)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "float32" + vs := "3.1415" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Standard float64. + v2 := float64(3.1415926) + nv2 := (*float64)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "float64" + v2s := "3.1415926" + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") + addDumpTest(nv2, "(*"+v2t+")()\n") +} + +func addComplexDumpTests() { + // Standard complex64. + v := complex(float32(6), -2) + nv := (*complex64)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "complex64" + vs := "(6-2i)" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Standard complex128. + v2 := complex(float64(-6), 2) + nv2 := (*complex128)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "complex128" + v2s := "(-6+2i)" + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") + addDumpTest(nv2, "(*"+v2t+")()\n") +} + +func addArrayDumpTests() { + // Array containing standard ints. + v := [3]int{1, 2, 3} + vLen := fmt.Sprintf("%d", len(v)) + vCap := fmt.Sprintf("%d", cap(v)) + nv := (*[3]int)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "int" + vs := "(len=" + vLen + " cap=" + vCap + ") {\n (" + vt + ") 1,\n (" + + vt + ") 2,\n (" + vt + ") 3\n}" + addDumpTest(v, "([3]"+vt+") "+vs+"\n") + addDumpTest(pv, "(*[3]"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**[3]"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*[3]"+vt+")()\n") + + // Array containing type with custom formatter on pointer receiver only. + v2i0 := pstringer("1") + v2i1 := pstringer("2") + v2i2 := pstringer("3") + v2 := [3]pstringer{v2i0, v2i1, v2i2} + v2i0Len := fmt.Sprintf("%d", len(v2i0)) + v2i1Len := fmt.Sprintf("%d", len(v2i1)) + v2i2Len := fmt.Sprintf("%d", len(v2i2)) + v2Len := fmt.Sprintf("%d", len(v2)) + v2Cap := fmt.Sprintf("%d", cap(v2)) + nv2 := (*[3]pstringer)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "spew_test.pstringer" + v2sp := "(len=" + v2Len + " cap=" + v2Cap + ") {\n (" + v2t + + ") (len=" + v2i0Len + ") stringer 1,\n (" + v2t + + ") (len=" + v2i1Len + ") stringer 2,\n (" + v2t + + ") (len=" + v2i2Len + ") " + "stringer 3\n}" + v2s := v2sp + if spew.UnsafeDisabled { + v2s = "(len=" + v2Len + " cap=" + v2Cap + ") {\n (" + v2t + + ") (len=" + v2i0Len + ") \"1\",\n (" + v2t + ") (len=" + + v2i1Len + ") \"2\",\n (" + v2t + ") (len=" + v2i2Len + + ") " + "\"3\"\n}" + } + addDumpTest(v2, "([3]"+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*[3]"+v2t+")("+v2Addr+")("+v2sp+")\n") + addDumpTest(&pv2, "(**[3]"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2sp+")\n") + addDumpTest(nv2, "(*[3]"+v2t+")()\n") + + // Array containing interfaces. + v3i0 := "one" + v3 := [3]interface{}{v3i0, int(2), uint(3)} + v3i0Len := fmt.Sprintf("%d", len(v3i0)) + v3Len := fmt.Sprintf("%d", len(v3)) + v3Cap := fmt.Sprintf("%d", cap(v3)) + nv3 := (*[3]interface{})(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "[3]interface {}" + v3t2 := "string" + v3t3 := "int" + v3t4 := "uint" + v3s := "(len=" + v3Len + " cap=" + v3Cap + ") {\n (" + v3t2 + ") " + + "(len=" + v3i0Len + ") \"one\",\n (" + v3t3 + ") 2,\n (" + + v3t4 + ") 3\n}" + addDumpTest(v3, "("+v3t+") "+v3s+"\n") + addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3s+")\n") + addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3s+")\n") + addDumpTest(nv3, "(*"+v3t+")()\n") + + // Array containing bytes. + v4 := [34]byte{ + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, + } + v4Len := fmt.Sprintf("%d", len(v4)) + v4Cap := fmt.Sprintf("%d", cap(v4)) + nv4 := (*[34]byte)(nil) + pv4 := &v4 + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "[34]uint8" + v4s := "(len=" + v4Len + " cap=" + v4Cap + ") " + + "{\n 00000000 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20" + + " |............... |\n" + + " 00000010 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30" + + " |!\"#$%&'()*+,-./0|\n" + + " 00000020 31 32 " + + " |12|\n}" + addDumpTest(v4, "("+v4t+") "+v4s+"\n") + addDumpTest(pv4, "(*"+v4t+")("+v4Addr+")("+v4s+")\n") + addDumpTest(&pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")("+v4s+")\n") + addDumpTest(nv4, "(*"+v4t+")()\n") +} + +func addSliceDumpTests() { + // Slice containing standard float32 values. + v := []float32{3.14, 6.28, 12.56} + vLen := fmt.Sprintf("%d", len(v)) + vCap := fmt.Sprintf("%d", cap(v)) + nv := (*[]float32)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "float32" + vs := "(len=" + vLen + " cap=" + vCap + ") {\n (" + vt + ") 3.14,\n (" + + vt + ") 6.28,\n (" + vt + ") 12.56\n}" + addDumpTest(v, "([]"+vt+") "+vs+"\n") + addDumpTest(pv, "(*[]"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**[]"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*[]"+vt+")()\n") + + // Slice containing type with custom formatter on pointer receiver only. + v2i0 := pstringer("1") + v2i1 := pstringer("2") + v2i2 := pstringer("3") + v2 := []pstringer{v2i0, v2i1, v2i2} + v2i0Len := fmt.Sprintf("%d", len(v2i0)) + v2i1Len := fmt.Sprintf("%d", len(v2i1)) + v2i2Len := fmt.Sprintf("%d", len(v2i2)) + v2Len := fmt.Sprintf("%d", len(v2)) + v2Cap := fmt.Sprintf("%d", cap(v2)) + nv2 := (*[]pstringer)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "spew_test.pstringer" + v2s := "(len=" + v2Len + " cap=" + v2Cap + ") {\n (" + v2t + ") (len=" + + v2i0Len + ") stringer 1,\n (" + v2t + ") (len=" + v2i1Len + + ") stringer 2,\n (" + v2t + ") (len=" + v2i2Len + ") " + + "stringer 3\n}" + addDumpTest(v2, "([]"+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*[]"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**[]"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") + addDumpTest(nv2, "(*[]"+v2t+")()\n") + + // Slice containing interfaces. + v3i0 := "one" + v3 := []interface{}{v3i0, int(2), uint(3), nil} + v3i0Len := fmt.Sprintf("%d", len(v3i0)) + v3Len := fmt.Sprintf("%d", len(v3)) + v3Cap := fmt.Sprintf("%d", cap(v3)) + nv3 := (*[]interface{})(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "[]interface {}" + v3t2 := "string" + v3t3 := "int" + v3t4 := "uint" + v3t5 := "interface {}" + v3s := "(len=" + v3Len + " cap=" + v3Cap + ") {\n (" + v3t2 + ") " + + "(len=" + v3i0Len + ") \"one\",\n (" + v3t3 + ") 2,\n (" + + v3t4 + ") 3,\n (" + v3t5 + ") \n}" + addDumpTest(v3, "("+v3t+") "+v3s+"\n") + addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3s+")\n") + addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3s+")\n") + addDumpTest(nv3, "(*"+v3t+")()\n") + + // Slice containing bytes. + v4 := []byte{ + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, + } + v4Len := fmt.Sprintf("%d", len(v4)) + v4Cap := fmt.Sprintf("%d", cap(v4)) + nv4 := (*[]byte)(nil) + pv4 := &v4 + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "[]uint8" + v4s := "(len=" + v4Len + " cap=" + v4Cap + ") " + + "{\n 00000000 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20" + + " |............... |\n" + + " 00000010 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30" + + " |!\"#$%&'()*+,-./0|\n" + + " 00000020 31 32 " + + " |12|\n}" + addDumpTest(v4, "("+v4t+") "+v4s+"\n") + addDumpTest(pv4, "(*"+v4t+")("+v4Addr+")("+v4s+")\n") + addDumpTest(&pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")("+v4s+")\n") + addDumpTest(nv4, "(*"+v4t+")()\n") + + // Nil slice. + v5 := []int(nil) + nv5 := (*[]int)(nil) + pv5 := &v5 + v5Addr := fmt.Sprintf("%p", pv5) + pv5Addr := fmt.Sprintf("%p", &pv5) + v5t := "[]int" + v5s := "" + addDumpTest(v5, "("+v5t+") "+v5s+"\n") + addDumpTest(pv5, "(*"+v5t+")("+v5Addr+")("+v5s+")\n") + addDumpTest(&pv5, "(**"+v5t+")("+pv5Addr+"->"+v5Addr+")("+v5s+")\n") + addDumpTest(nv5, "(*"+v5t+")()\n") +} + +func addStringDumpTests() { + // Standard string. + v := "test" + vLen := fmt.Sprintf("%d", len(v)) + nv := (*string)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "string" + vs := "(len=" + vLen + ") \"test\"" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") +} + +func addInterfaceDumpTests() { + // Nil interface. + var v interface{} + nv := (*interface{})(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "interface {}" + vs := "" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Sub-interface. + v2 := interface{}(uint16(65535)) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "uint16" + v2s := "65535" + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") +} + +func addMapDumpTests() { + // Map with string keys and int vals. + k := "one" + kk := "two" + m := map[string]int{k: 1, kk: 2} + klen := fmt.Sprintf("%d", len(k)) // not kLen to shut golint up + kkLen := fmt.Sprintf("%d", len(kk)) + mLen := fmt.Sprintf("%d", len(m)) + nilMap := map[string]int(nil) + nm := (*map[string]int)(nil) + pm := &m + mAddr := fmt.Sprintf("%p", pm) + pmAddr := fmt.Sprintf("%p", &pm) + mt := "map[string]int" + mt1 := "string" + mt2 := "int" + ms := "(len=" + mLen + ") {\n (" + mt1 + ") (len=" + klen + ") " + + "\"one\": (" + mt2 + ") 1,\n (" + mt1 + ") (len=" + kkLen + + ") \"two\": (" + mt2 + ") 2\n}" + ms2 := "(len=" + mLen + ") {\n (" + mt1 + ") (len=" + kkLen + ") " + + "\"two\": (" + mt2 + ") 2,\n (" + mt1 + ") (len=" + klen + + ") \"one\": (" + mt2 + ") 1\n}" + addDumpTest(m, "("+mt+") "+ms+"\n", "("+mt+") "+ms2+"\n") + addDumpTest(pm, "(*"+mt+")("+mAddr+")("+ms+")\n", + "(*"+mt+")("+mAddr+")("+ms2+")\n") + addDumpTest(&pm, "(**"+mt+")("+pmAddr+"->"+mAddr+")("+ms+")\n", + "(**"+mt+")("+pmAddr+"->"+mAddr+")("+ms2+")\n") + addDumpTest(nm, "(*"+mt+")()\n") + addDumpTest(nilMap, "("+mt+") \n") + + // Map with custom formatter type on pointer receiver only keys and vals. + k2 := pstringer("one") + v2 := pstringer("1") + m2 := map[pstringer]pstringer{k2: v2} + k2Len := fmt.Sprintf("%d", len(k2)) + v2Len := fmt.Sprintf("%d", len(v2)) + m2Len := fmt.Sprintf("%d", len(m2)) + nilMap2 := map[pstringer]pstringer(nil) + nm2 := (*map[pstringer]pstringer)(nil) + pm2 := &m2 + m2Addr := fmt.Sprintf("%p", pm2) + pm2Addr := fmt.Sprintf("%p", &pm2) + m2t := "map[spew_test.pstringer]spew_test.pstringer" + m2t1 := "spew_test.pstringer" + m2t2 := "spew_test.pstringer" + m2s := "(len=" + m2Len + ") {\n (" + m2t1 + ") (len=" + k2Len + ") " + + "stringer one: (" + m2t2 + ") (len=" + v2Len + ") stringer 1\n}" + if spew.UnsafeDisabled { + m2s = "(len=" + m2Len + ") {\n (" + m2t1 + ") (len=" + k2Len + + ") " + "\"one\": (" + m2t2 + ") (len=" + v2Len + + ") \"1\"\n}" + } + addDumpTest(m2, "("+m2t+") "+m2s+"\n") + addDumpTest(pm2, "(*"+m2t+")("+m2Addr+")("+m2s+")\n") + addDumpTest(&pm2, "(**"+m2t+")("+pm2Addr+"->"+m2Addr+")("+m2s+")\n") + addDumpTest(nm2, "(*"+m2t+")()\n") + addDumpTest(nilMap2, "("+m2t+") \n") + + // Map with interface keys and values. + k3 := "one" + k3Len := fmt.Sprintf("%d", len(k3)) + m3 := map[interface{}]interface{}{k3: 1} + m3Len := fmt.Sprintf("%d", len(m3)) + nilMap3 := map[interface{}]interface{}(nil) + nm3 := (*map[interface{}]interface{})(nil) + pm3 := &m3 + m3Addr := fmt.Sprintf("%p", pm3) + pm3Addr := fmt.Sprintf("%p", &pm3) + m3t := "map[interface {}]interface {}" + m3t1 := "string" + m3t2 := "int" + m3s := "(len=" + m3Len + ") {\n (" + m3t1 + ") (len=" + k3Len + ") " + + "\"one\": (" + m3t2 + ") 1\n}" + addDumpTest(m3, "("+m3t+") "+m3s+"\n") + addDumpTest(pm3, "(*"+m3t+")("+m3Addr+")("+m3s+")\n") + addDumpTest(&pm3, "(**"+m3t+")("+pm3Addr+"->"+m3Addr+")("+m3s+")\n") + addDumpTest(nm3, "(*"+m3t+")()\n") + addDumpTest(nilMap3, "("+m3t+") \n") + + // Map with nil interface value. + k4 := "nil" + k4Len := fmt.Sprintf("%d", len(k4)) + m4 := map[string]interface{}{k4: nil} + m4Len := fmt.Sprintf("%d", len(m4)) + nilMap4 := map[string]interface{}(nil) + nm4 := (*map[string]interface{})(nil) + pm4 := &m4 + m4Addr := fmt.Sprintf("%p", pm4) + pm4Addr := fmt.Sprintf("%p", &pm4) + m4t := "map[string]interface {}" + m4t1 := "string" + m4t2 := "interface {}" + m4s := "(len=" + m4Len + ") {\n (" + m4t1 + ") (len=" + k4Len + ")" + + " \"nil\": (" + m4t2 + ") \n}" + addDumpTest(m4, "("+m4t+") "+m4s+"\n") + addDumpTest(pm4, "(*"+m4t+")("+m4Addr+")("+m4s+")\n") + addDumpTest(&pm4, "(**"+m4t+")("+pm4Addr+"->"+m4Addr+")("+m4s+")\n") + addDumpTest(nm4, "(*"+m4t+")()\n") + addDumpTest(nilMap4, "("+m4t+") \n") +} + +func addStructDumpTests() { + // Struct with primitives. + type s1 struct { + a int8 + b uint8 + } + v := s1{127, 255} + nv := (*s1)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "spew_test.s1" + vt2 := "int8" + vt3 := "uint8" + vs := "{\n a: (" + vt2 + ") 127,\n b: (" + vt3 + ") 255\n}" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Struct that contains another struct. + type s2 struct { + s1 s1 + b bool + } + v2 := s2{s1{127, 255}, true} + nv2 := (*s2)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "spew_test.s2" + v2t2 := "spew_test.s1" + v2t3 := "int8" + v2t4 := "uint8" + v2t5 := "bool" + v2s := "{\n s1: (" + v2t2 + ") {\n a: (" + v2t3 + ") 127,\n b: (" + + v2t4 + ") 255\n },\n b: (" + v2t5 + ") true\n}" + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") + addDumpTest(nv2, "(*"+v2t+")()\n") + + // Struct that contains custom type with Stringer pointer interface via both + // exported and unexported fields. + type s3 struct { + s pstringer + S pstringer + } + v3 := s3{"test", "test2"} + nv3 := (*s3)(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "spew_test.s3" + v3t2 := "spew_test.pstringer" + v3s := "{\n s: (" + v3t2 + ") (len=4) stringer test,\n S: (" + v3t2 + + ") (len=5) stringer test2\n}" + v3sp := v3s + if spew.UnsafeDisabled { + v3s = "{\n s: (" + v3t2 + ") (len=4) \"test\",\n S: (" + + v3t2 + ") (len=5) \"test2\"\n}" + v3sp = "{\n s: (" + v3t2 + ") (len=4) \"test\",\n S: (" + + v3t2 + ") (len=5) stringer test2\n}" + } + addDumpTest(v3, "("+v3t+") "+v3s+"\n") + addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3sp+")\n") + addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3sp+")\n") + addDumpTest(nv3, "(*"+v3t+")()\n") + + // Struct that contains embedded struct and field to same struct. + e := embed{"embedstr"} + eLen := fmt.Sprintf("%d", len("embedstr")) + v4 := embedwrap{embed: &e, e: &e} + nv4 := (*embedwrap)(nil) + pv4 := &v4 + eAddr := fmt.Sprintf("%p", &e) + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "spew_test.embedwrap" + v4t2 := "spew_test.embed" + v4t3 := "string" + v4s := "{\n embed: (*" + v4t2 + ")(" + eAddr + ")({\n a: (" + v4t3 + + ") (len=" + eLen + ") \"embedstr\"\n }),\n e: (*" + v4t2 + + ")(" + eAddr + ")({\n a: (" + v4t3 + ") (len=" + eLen + ")" + + " \"embedstr\"\n })\n}" + addDumpTest(v4, "("+v4t+") "+v4s+"\n") + addDumpTest(pv4, "(*"+v4t+")("+v4Addr+")("+v4s+")\n") + addDumpTest(&pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")("+v4s+")\n") + addDumpTest(nv4, "(*"+v4t+")()\n") +} + +func addUintptrDumpTests() { + // Null pointer. + v := uintptr(0) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "uintptr" + vs := "" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + + // Address of real variable. + i := 1 + v2 := uintptr(unsafe.Pointer(&i)) + nv2 := (*uintptr)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "uintptr" + v2s := fmt.Sprintf("%p", &i) + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") + addDumpTest(nv2, "(*"+v2t+")()\n") +} + +func addUnsafePointerDumpTests() { + // Null pointer. + v := unsafe.Pointer(uintptr(0)) + nv := (*unsafe.Pointer)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "unsafe.Pointer" + vs := "" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Address of real variable. + i := 1 + v2 := unsafe.Pointer(&i) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "unsafe.Pointer" + v2s := fmt.Sprintf("%p", &i) + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") + addDumpTest(nv, "(*"+vt+")()\n") +} + +func addChanDumpTests() { + // Nil channel. + var v chan int + pv := &v + nv := (*chan int)(nil) + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "chan int" + vs := "" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Real channel. + v2 := make(chan int) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "chan int" + v2s := fmt.Sprintf("%p", v2) + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") +} + +func addFuncDumpTests() { + // Function with no params and no returns. + v := addIntDumpTests + nv := (*func())(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "func()" + vs := fmt.Sprintf("%p", v) + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") + + // Function with param and no returns. + v2 := TestDump + nv2 := (*func(*testing.T))(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "func(*testing.T)" + v2s := fmt.Sprintf("%p", v2) + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s+")\n") + addDumpTest(nv2, "(*"+v2t+")()\n") + + // Function with multiple params and multiple returns. + var v3 = func(i int, s string) (b bool, err error) { + return true, nil + } + nv3 := (*func(int, string) (bool, error))(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "func(int, string) (bool, error)" + v3s := fmt.Sprintf("%p", v3) + addDumpTest(v3, "("+v3t+") "+v3s+"\n") + addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3s+")\n") + addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3s+")\n") + addDumpTest(nv3, "(*"+v3t+")()\n") +} + +func addCircularDumpTests() { + // Struct that is circular through self referencing. + type circular struct { + c *circular + } + v := circular{nil} + v.c = &v + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "spew_test.circular" + vs := "{\n c: (*" + vt + ")(" + vAddr + ")({\n c: (*" + vt + ")(" + + vAddr + ")()\n })\n}" + vs2 := "{\n c: (*" + vt + ")(" + vAddr + ")()\n}" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs2+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs2+")\n") + + // Structs that are circular through cross referencing. + v2 := xref1{nil} + ts2 := xref2{&v2} + v2.ps2 = &ts2 + pv2 := &v2 + ts2Addr := fmt.Sprintf("%p", &ts2) + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "spew_test.xref1" + v2t2 := "spew_test.xref2" + v2s := "{\n ps2: (*" + v2t2 + ")(" + ts2Addr + ")({\n ps1: (*" + v2t + + ")(" + v2Addr + ")({\n ps2: (*" + v2t2 + ")(" + ts2Addr + + ")()\n })\n })\n}" + v2s2 := "{\n ps2: (*" + v2t2 + ")(" + ts2Addr + ")({\n ps1: (*" + v2t + + ")(" + v2Addr + ")()\n })\n}" + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + addDumpTest(pv2, "(*"+v2t+")("+v2Addr+")("+v2s2+")\n") + addDumpTest(&pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")("+v2s2+")\n") + + // Structs that are indirectly circular. + v3 := indirCir1{nil} + tic2 := indirCir2{nil} + tic3 := indirCir3{&v3} + tic2.ps3 = &tic3 + v3.ps2 = &tic2 + pv3 := &v3 + tic2Addr := fmt.Sprintf("%p", &tic2) + tic3Addr := fmt.Sprintf("%p", &tic3) + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "spew_test.indirCir1" + v3t2 := "spew_test.indirCir2" + v3t3 := "spew_test.indirCir3" + v3s := "{\n ps2: (*" + v3t2 + ")(" + tic2Addr + ")({\n ps3: (*" + v3t3 + + ")(" + tic3Addr + ")({\n ps1: (*" + v3t + ")(" + v3Addr + + ")({\n ps2: (*" + v3t2 + ")(" + tic2Addr + + ")()\n })\n })\n })\n}" + v3s2 := "{\n ps2: (*" + v3t2 + ")(" + tic2Addr + ")({\n ps3: (*" + v3t3 + + ")(" + tic3Addr + ")({\n ps1: (*" + v3t + ")(" + v3Addr + + ")()\n })\n })\n}" + addDumpTest(v3, "("+v3t+") "+v3s+"\n") + addDumpTest(pv3, "(*"+v3t+")("+v3Addr+")("+v3s2+")\n") + addDumpTest(&pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")("+v3s2+")\n") +} + +func addPanicDumpTests() { + // Type that panics in its Stringer interface. + v := panicer(127) + nv := (*panicer)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "spew_test.panicer" + vs := "(PANIC=test panic)127" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") +} + +func addErrorDumpTests() { + // Type that has a custom Error interface. + v := customError(127) + nv := (*customError)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "spew_test.customError" + vs := "error: 127" + addDumpTest(v, "("+vt+") "+vs+"\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")("+vs+")\n") + addDumpTest(nv, "(*"+vt+")()\n") +} + +// TestDump executes all of the tests described by dumpTests. +func TestDump(t *testing.T) { + // Setup tests. + addIntDumpTests() + addUintDumpTests() + addBoolDumpTests() + addFloatDumpTests() + addComplexDumpTests() + addArrayDumpTests() + addSliceDumpTests() + addStringDumpTests() + addInterfaceDumpTests() + addMapDumpTests() + addStructDumpTests() + addUintptrDumpTests() + addUnsafePointerDumpTests() + addChanDumpTests() + addFuncDumpTests() + addCircularDumpTests() + addPanicDumpTests() + addErrorDumpTests() + addCgoDumpTests() + + t.Logf("Running %d tests", len(dumpTests)) + for i, test := range dumpTests { + buf := new(bytes.Buffer) + spew.Fdump(buf, test.in) + s := buf.String() + if testFailed(s, test.wants) { + t.Errorf("Dump #%d\n got: %s %s", i, s, stringizeWants(test.wants)) + continue + } + } +} + +func TestDumpSortedKeys(t *testing.T) { + cfg := spew.ConfigState{SortKeys: true} + s := cfg.Sdump(map[int]string{1: "1", 3: "3", 2: "2"}) + expected := "(map[int]string) (len=3) {\n(int) 1: (string) (len=1) " + + "\"1\",\n(int) 2: (string) (len=1) \"2\",\n(int) 3: (string) " + + "(len=1) \"3\"\n" + + "}\n" + if s != expected { + t.Errorf("Sorted keys mismatch:\n %v %v", s, expected) + } + + s = cfg.Sdump(map[stringer]int{"1": 1, "3": 3, "2": 2}) + expected = "(map[spew_test.stringer]int) (len=3) {\n" + + "(spew_test.stringer) (len=1) stringer 1: (int) 1,\n" + + "(spew_test.stringer) (len=1) stringer 2: (int) 2,\n" + + "(spew_test.stringer) (len=1) stringer 3: (int) 3\n" + + "}\n" + if s != expected { + t.Errorf("Sorted keys mismatch:\n %v %v", s, expected) + } + + s = cfg.Sdump(map[pstringer]int{pstringer("1"): 1, pstringer("3"): 3, pstringer("2"): 2}) + expected = "(map[spew_test.pstringer]int) (len=3) {\n" + + "(spew_test.pstringer) (len=1) stringer 1: (int) 1,\n" + + "(spew_test.pstringer) (len=1) stringer 2: (int) 2,\n" + + "(spew_test.pstringer) (len=1) stringer 3: (int) 3\n" + + "}\n" + if spew.UnsafeDisabled { + expected = "(map[spew_test.pstringer]int) (len=3) {\n" + + "(spew_test.pstringer) (len=1) \"1\": (int) 1,\n" + + "(spew_test.pstringer) (len=1) \"2\": (int) 2,\n" + + "(spew_test.pstringer) (len=1) \"3\": (int) 3\n" + + "}\n" + } + if s != expected { + t.Errorf("Sorted keys mismatch:\n %v %v", s, expected) + } + + s = cfg.Sdump(map[customError]int{customError(1): 1, customError(3): 3, customError(2): 2}) + expected = "(map[spew_test.customError]int) (len=3) {\n" + + "(spew_test.customError) error: 1: (int) 1,\n" + + "(spew_test.customError) error: 2: (int) 2,\n" + + "(spew_test.customError) error: 3: (int) 3\n" + + "}\n" + if s != expected { + t.Errorf("Sorted keys mismatch:\n %v %v", s, expected) + } + +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dumpcgo_test.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dumpcgo_test.go new file mode 100644 index 0000000000..01f5217942 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dumpcgo_test.go @@ -0,0 +1,98 @@ +// Copyright (c) 2013 Dave Collins +// +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// NOTE: Due to the following build constraints, this file will only be compiled +// when both cgo is supported and "-tags testcgo" is added to the go test +// command line. This means the cgo tests are only added (and hence run) when +// specifially requested. This configuration is used because spew itself +// does not require cgo to run even though it does handle certain cgo types +// specially. Rather than forcing all clients to require cgo and an external +// C compiler just to run the tests, this scheme makes them optional. +// +build cgo,testcgo + +package spew_test + +import ( + "fmt" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/testdata" +) + +func addCgoDumpTests() { + // C char pointer. + v := testdata.GetCgoCharPointer() + nv := testdata.GetCgoNullCharPointer() + pv := &v + vcAddr := fmt.Sprintf("%p", v) + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "*testdata._Ctype_char" + vs := "116" + addDumpTest(v, "("+vt+")("+vcAddr+")("+vs+")\n") + addDumpTest(pv, "(*"+vt+")("+vAddr+"->"+vcAddr+")("+vs+")\n") + addDumpTest(&pv, "(**"+vt+")("+pvAddr+"->"+vAddr+"->"+vcAddr+")("+vs+")\n") + addDumpTest(nv, "("+vt+")()\n") + + // C char array. + v2, v2l, v2c := testdata.GetCgoCharArray() + v2Len := fmt.Sprintf("%d", v2l) + v2Cap := fmt.Sprintf("%d", v2c) + v2t := "[6]testdata._Ctype_char" + v2s := "(len=" + v2Len + " cap=" + v2Cap + ") " + + "{\n 00000000 74 65 73 74 32 00 " + + " |test2.|\n}" + addDumpTest(v2, "("+v2t+") "+v2s+"\n") + + // C unsigned char array. + v3, v3l, v3c := testdata.GetCgoUnsignedCharArray() + v3Len := fmt.Sprintf("%d", v3l) + v3Cap := fmt.Sprintf("%d", v3c) + v3t := "[6]testdata._Ctype_unsignedchar" + v3s := "(len=" + v3Len + " cap=" + v3Cap + ") " + + "{\n 00000000 74 65 73 74 33 00 " + + " |test3.|\n}" + addDumpTest(v3, "("+v3t+") "+v3s+"\n") + + // C signed char array. + v4, v4l, v4c := testdata.GetCgoSignedCharArray() + v4Len := fmt.Sprintf("%d", v4l) + v4Cap := fmt.Sprintf("%d", v4c) + v4t := "[6]testdata._Ctype_schar" + v4t2 := "testdata._Ctype_schar" + v4s := "(len=" + v4Len + " cap=" + v4Cap + ") " + + "{\n (" + v4t2 + ") 116,\n (" + v4t2 + ") 101,\n (" + v4t2 + + ") 115,\n (" + v4t2 + ") 116,\n (" + v4t2 + ") 52,\n (" + v4t2 + + ") 0\n}" + addDumpTest(v4, "("+v4t+") "+v4s+"\n") + + // C uint8_t array. + v5, v5l, v5c := testdata.GetCgoUint8tArray() + v5Len := fmt.Sprintf("%d", v5l) + v5Cap := fmt.Sprintf("%d", v5c) + v5t := "[6]testdata._Ctype_uint8_t" + v5s := "(len=" + v5Len + " cap=" + v5Cap + ") " + + "{\n 00000000 74 65 73 74 35 00 " + + " |test5.|\n}" + addDumpTest(v5, "("+v5t+") "+v5s+"\n") + + // C typedefed unsigned char array. + v6, v6l, v6c := testdata.GetCgoTypdefedUnsignedCharArray() + v6Len := fmt.Sprintf("%d", v6l) + v6Cap := fmt.Sprintf("%d", v6c) + v6t := "[6]testdata._Ctype_custom_uchar_t" + v6s := "(len=" + v6Len + " cap=" + v6Cap + ") " + + "{\n 00000000 74 65 73 74 36 00 " + + " |test6.|\n}" + addDumpTest(v6, "("+v6t+") "+v6s+"\n") +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dumpnocgo_test.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dumpnocgo_test.go new file mode 100644 index 0000000000..52a0971fb3 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/dumpnocgo_test.go @@ -0,0 +1,26 @@ +// Copyright (c) 2013 Dave Collins +// +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// NOTE: Due to the following build constraints, this file will only be compiled +// when either cgo is not supported or "-tags testcgo" is not added to the go +// test command line. This file intentionally does not setup any cgo tests in +// this scenario. +// +build !cgo !testcgo + +package spew_test + +func addCgoDumpTests() { + // Don't add any tests for cgo since this file is only compiled when + // there should not be any cgo tests. +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/example_test.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/example_test.go new file mode 100644 index 0000000000..2f739f2785 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/example_test.go @@ -0,0 +1,226 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package spew_test + +import ( + "fmt" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/davecgh/go-spew/spew" +) + +type Flag int + +const ( + flagOne Flag = iota + flagTwo +) + +var flagStrings = map[Flag]string{ + flagOne: "flagOne", + flagTwo: "flagTwo", +} + +func (f Flag) String() string { + if s, ok := flagStrings[f]; ok { + return s + } + return fmt.Sprintf("Unknown flag (%d)", int(f)) +} + +type Bar struct { + data uintptr +} + +type Foo struct { + unexportedField Bar + ExportedField map[interface{}]interface{} +} + +// This example demonstrates how to use Dump to dump variables to stdout. +func ExampleDump() { + // The following package level declarations are assumed for this example: + /* + type Flag int + + const ( + flagOne Flag = iota + flagTwo + ) + + var flagStrings = map[Flag]string{ + flagOne: "flagOne", + flagTwo: "flagTwo", + } + + func (f Flag) String() string { + if s, ok := flagStrings[f]; ok { + return s + } + return fmt.Sprintf("Unknown flag (%d)", int(f)) + } + + type Bar struct { + data uintptr + } + + type Foo struct { + unexportedField Bar + ExportedField map[interface{}]interface{} + } + */ + + // Setup some sample data structures for the example. + bar := Bar{uintptr(0)} + s1 := Foo{bar, map[interface{}]interface{}{"one": true}} + f := Flag(5) + b := []byte{ + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, + } + + // Dump! + spew.Dump(s1, f, b) + + // Output: + // (spew_test.Foo) { + // unexportedField: (spew_test.Bar) { + // data: (uintptr) + // }, + // ExportedField: (map[interface {}]interface {}) (len=1) { + // (string) (len=3) "one": (bool) true + // } + // } + // (spew_test.Flag) Unknown flag (5) + // ([]uint8) (len=34 cap=34) { + // 00000000 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 |............... | + // 00000010 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 |!"#$%&'()*+,-./0| + // 00000020 31 32 |12| + // } + // +} + +// This example demonstrates how to use Printf to display a variable with a +// format string and inline formatting. +func ExamplePrintf() { + // Create a double pointer to a uint 8. + ui8 := uint8(5) + pui8 := &ui8 + ppui8 := &pui8 + + // Create a circular data type. + type circular struct { + ui8 uint8 + c *circular + } + c := circular{ui8: 1} + c.c = &c + + // Print! + spew.Printf("ppui8: %v\n", ppui8) + spew.Printf("circular: %v\n", c) + + // Output: + // ppui8: <**>5 + // circular: {1 <*>{1 <*>}} +} + +// This example demonstrates how to use a ConfigState. +func ExampleConfigState() { + // Modify the indent level of the ConfigState only. The global + // configuration is not modified. + scs := spew.ConfigState{Indent: "\t"} + + // Output using the ConfigState instance. + v := map[string]int{"one": 1} + scs.Printf("v: %v\n", v) + scs.Dump(v) + + // Output: + // v: map[one:1] + // (map[string]int) (len=1) { + // (string) (len=3) "one": (int) 1 + // } +} + +// This example demonstrates how to use ConfigState.Dump to dump variables to +// stdout +func ExampleConfigState_Dump() { + // See the top-level Dump example for details on the types used in this + // example. + + // Create two ConfigState instances with different indentation. + scs := spew.ConfigState{Indent: "\t"} + scs2 := spew.ConfigState{Indent: " "} + + // Setup some sample data structures for the example. + bar := Bar{uintptr(0)} + s1 := Foo{bar, map[interface{}]interface{}{"one": true}} + + // Dump using the ConfigState instances. + scs.Dump(s1) + scs2.Dump(s1) + + // Output: + // (spew_test.Foo) { + // unexportedField: (spew_test.Bar) { + // data: (uintptr) + // }, + // ExportedField: (map[interface {}]interface {}) (len=1) { + // (string) (len=3) "one": (bool) true + // } + // } + // (spew_test.Foo) { + // unexportedField: (spew_test.Bar) { + // data: (uintptr) + // }, + // ExportedField: (map[interface {}]interface {}) (len=1) { + // (string) (len=3) "one": (bool) true + // } + // } + // +} + +// This example demonstrates how to use ConfigState.Printf to display a variable +// with a format string and inline formatting. +func ExampleConfigState_Printf() { + // See the top-level Dump example for details on the types used in this + // example. + + // Create two ConfigState instances and modify the method handling of the + // first ConfigState only. + scs := spew.NewDefaultConfig() + scs2 := spew.NewDefaultConfig() + scs.DisableMethods = true + + // Alternatively + // scs := spew.ConfigState{Indent: " ", DisableMethods: true} + // scs2 := spew.ConfigState{Indent: " "} + + // This is of type Flag which implements a Stringer and has raw value 1. + f := flagTwo + + // Dump using the ConfigState instances. + scs.Printf("f: %v\n", f) + scs2.Printf("f: %v\n", f) + + // Output: + // f: 1 + // f: flagTwo +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/format.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/format.go new file mode 100644 index 0000000000..ecf3b80e24 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/format.go @@ -0,0 +1,419 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package spew + +import ( + "bytes" + "fmt" + "reflect" + "strconv" + "strings" +) + +// supportedFlags is a list of all the character flags supported by fmt package. +const supportedFlags = "0-+# " + +// formatState implements the fmt.Formatter interface and contains information +// about the state of a formatting operation. The NewFormatter function can +// be used to get a new Formatter which can be used directly as arguments +// in standard fmt package printing calls. +type formatState struct { + value interface{} + fs fmt.State + depth int + pointers map[uintptr]int + ignoreNextType bool + cs *ConfigState +} + +// buildDefaultFormat recreates the original format string without precision +// and width information to pass in to fmt.Sprintf in the case of an +// unrecognized type. Unless new types are added to the language, this +// function won't ever be called. +func (f *formatState) buildDefaultFormat() (format string) { + buf := bytes.NewBuffer(percentBytes) + + for _, flag := range supportedFlags { + if f.fs.Flag(int(flag)) { + buf.WriteRune(flag) + } + } + + buf.WriteRune('v') + + format = buf.String() + return format +} + +// constructOrigFormat recreates the original format string including precision +// and width information to pass along to the standard fmt package. This allows +// automatic deferral of all format strings this package doesn't support. +func (f *formatState) constructOrigFormat(verb rune) (format string) { + buf := bytes.NewBuffer(percentBytes) + + for _, flag := range supportedFlags { + if f.fs.Flag(int(flag)) { + buf.WriteRune(flag) + } + } + + if width, ok := f.fs.Width(); ok { + buf.WriteString(strconv.Itoa(width)) + } + + if precision, ok := f.fs.Precision(); ok { + buf.Write(precisionBytes) + buf.WriteString(strconv.Itoa(precision)) + } + + buf.WriteRune(verb) + + format = buf.String() + return format +} + +// unpackValue returns values inside of non-nil interfaces when possible and +// ensures that types for values which have been unpacked from an interface +// are displayed when the show types flag is also set. +// This is useful for data types like structs, arrays, slices, and maps which +// can contain varying types packed inside an interface. +func (f *formatState) unpackValue(v reflect.Value) reflect.Value { + if v.Kind() == reflect.Interface { + f.ignoreNextType = false + if !v.IsNil() { + v = v.Elem() + } + } + return v +} + +// formatPtr handles formatting of pointers by indirecting them as necessary. +func (f *formatState) formatPtr(v reflect.Value) { + // Display nil if top level pointer is nil. + showTypes := f.fs.Flag('#') + if v.IsNil() && (!showTypes || f.ignoreNextType) { + f.fs.Write(nilAngleBytes) + return + } + + // Remove pointers at or below the current depth from map used to detect + // circular refs. + for k, depth := range f.pointers { + if depth >= f.depth { + delete(f.pointers, k) + } + } + + // Keep list of all dereferenced pointers to possibly show later. + pointerChain := make([]uintptr, 0) + + // Figure out how many levels of indirection there are by derferencing + // pointers and unpacking interfaces down the chain while detecting circular + // references. + nilFound := false + cycleFound := false + indirects := 0 + ve := v + for ve.Kind() == reflect.Ptr { + if ve.IsNil() { + nilFound = true + break + } + indirects++ + addr := ve.Pointer() + pointerChain = append(pointerChain, addr) + if pd, ok := f.pointers[addr]; ok && pd < f.depth { + cycleFound = true + indirects-- + break + } + f.pointers[addr] = f.depth + + ve = ve.Elem() + if ve.Kind() == reflect.Interface { + if ve.IsNil() { + nilFound = true + break + } + ve = ve.Elem() + } + } + + // Display type or indirection level depending on flags. + if showTypes && !f.ignoreNextType { + f.fs.Write(openParenBytes) + f.fs.Write(bytes.Repeat(asteriskBytes, indirects)) + f.fs.Write([]byte(ve.Type().String())) + f.fs.Write(closeParenBytes) + } else { + if nilFound || cycleFound { + indirects += strings.Count(ve.Type().String(), "*") + } + f.fs.Write(openAngleBytes) + f.fs.Write([]byte(strings.Repeat("*", indirects))) + f.fs.Write(closeAngleBytes) + } + + // Display pointer information depending on flags. + if f.fs.Flag('+') && (len(pointerChain) > 0) { + f.fs.Write(openParenBytes) + for i, addr := range pointerChain { + if i > 0 { + f.fs.Write(pointerChainBytes) + } + printHexPtr(f.fs, addr) + } + f.fs.Write(closeParenBytes) + } + + // Display dereferenced value. + switch { + case nilFound == true: + f.fs.Write(nilAngleBytes) + + case cycleFound == true: + f.fs.Write(circularShortBytes) + + default: + f.ignoreNextType = true + f.format(ve) + } +} + +// format is the main workhorse for providing the Formatter interface. It +// uses the passed reflect value to figure out what kind of object we are +// dealing with and formats it appropriately. It is a recursive function, +// however circular data structures are detected and handled properly. +func (f *formatState) format(v reflect.Value) { + // Handle invalid reflect values immediately. + kind := v.Kind() + if kind == reflect.Invalid { + f.fs.Write(invalidAngleBytes) + return + } + + // Handle pointers specially. + if kind == reflect.Ptr { + f.formatPtr(v) + return + } + + // Print type information unless already handled elsewhere. + if !f.ignoreNextType && f.fs.Flag('#') { + f.fs.Write(openParenBytes) + f.fs.Write([]byte(v.Type().String())) + f.fs.Write(closeParenBytes) + } + f.ignoreNextType = false + + // Call Stringer/error interfaces if they exist and the handle methods + // flag is enabled. + if !f.cs.DisableMethods { + if (kind != reflect.Invalid) && (kind != reflect.Interface) { + if handled := handleMethods(f.cs, f.fs, v); handled { + return + } + } + } + + switch kind { + case reflect.Invalid: + // Do nothing. We should never get here since invalid has already + // been handled above. + + case reflect.Bool: + printBool(f.fs, v.Bool()) + + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + printInt(f.fs, v.Int(), 10) + + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + printUint(f.fs, v.Uint(), 10) + + case reflect.Float32: + printFloat(f.fs, v.Float(), 32) + + case reflect.Float64: + printFloat(f.fs, v.Float(), 64) + + case reflect.Complex64: + printComplex(f.fs, v.Complex(), 32) + + case reflect.Complex128: + printComplex(f.fs, v.Complex(), 64) + + case reflect.Slice: + if v.IsNil() { + f.fs.Write(nilAngleBytes) + break + } + fallthrough + + case reflect.Array: + f.fs.Write(openBracketBytes) + f.depth++ + if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { + f.fs.Write(maxShortBytes) + } else { + numEntries := v.Len() + for i := 0; i < numEntries; i++ { + if i > 0 { + f.fs.Write(spaceBytes) + } + f.ignoreNextType = true + f.format(f.unpackValue(v.Index(i))) + } + } + f.depth-- + f.fs.Write(closeBracketBytes) + + case reflect.String: + f.fs.Write([]byte(v.String())) + + case reflect.Interface: + // The only time we should get here is for nil interfaces due to + // unpackValue calls. + if v.IsNil() { + f.fs.Write(nilAngleBytes) + } + + case reflect.Ptr: + // Do nothing. We should never get here since pointers have already + // been handled above. + + case reflect.Map: + // nil maps should be indicated as different than empty maps + if v.IsNil() { + f.fs.Write(nilAngleBytes) + break + } + + f.fs.Write(openMapBytes) + f.depth++ + if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { + f.fs.Write(maxShortBytes) + } else { + keys := v.MapKeys() + if f.cs.SortKeys { + sortValues(keys, f.cs) + } + for i, key := range keys { + if i > 0 { + f.fs.Write(spaceBytes) + } + f.ignoreNextType = true + f.format(f.unpackValue(key)) + f.fs.Write(colonBytes) + f.ignoreNextType = true + f.format(f.unpackValue(v.MapIndex(key))) + } + } + f.depth-- + f.fs.Write(closeMapBytes) + + case reflect.Struct: + numFields := v.NumField() + f.fs.Write(openBraceBytes) + f.depth++ + if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { + f.fs.Write(maxShortBytes) + } else { + vt := v.Type() + for i := 0; i < numFields; i++ { + if i > 0 { + f.fs.Write(spaceBytes) + } + vtf := vt.Field(i) + if f.fs.Flag('+') || f.fs.Flag('#') { + f.fs.Write([]byte(vtf.Name)) + f.fs.Write(colonBytes) + } + f.format(f.unpackValue(v.Field(i))) + } + } + f.depth-- + f.fs.Write(closeBraceBytes) + + case reflect.Uintptr: + printHexPtr(f.fs, uintptr(v.Uint())) + + case reflect.UnsafePointer, reflect.Chan, reflect.Func: + printHexPtr(f.fs, v.Pointer()) + + // There were not any other types at the time this code was written, but + // fall back to letting the default fmt package handle it if any get added. + default: + format := f.buildDefaultFormat() + if v.CanInterface() { + fmt.Fprintf(f.fs, format, v.Interface()) + } else { + fmt.Fprintf(f.fs, format, v.String()) + } + } +} + +// Format satisfies the fmt.Formatter interface. See NewFormatter for usage +// details. +func (f *formatState) Format(fs fmt.State, verb rune) { + f.fs = fs + + // Use standard formatting for verbs that are not v. + if verb != 'v' { + format := f.constructOrigFormat(verb) + fmt.Fprintf(fs, format, f.value) + return + } + + if f.value == nil { + if fs.Flag('#') { + fs.Write(interfaceBytes) + } + fs.Write(nilAngleBytes) + return + } + + f.format(reflect.ValueOf(f.value)) +} + +// newFormatter is a helper function to consolidate the logic from the various +// public methods which take varying config states. +func newFormatter(cs *ConfigState, v interface{}) fmt.Formatter { + fs := &formatState{value: v, cs: cs} + fs.pointers = make(map[uintptr]int) + return fs +} + +/* +NewFormatter returns a custom formatter that satisfies the fmt.Formatter +interface. As a result, it integrates cleanly with standard fmt package +printing functions. The formatter is useful for inline printing of smaller data +types similar to the standard %v format specifier. + +The custom formatter only responds to the %v (most compact), %+v (adds pointer +addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb +combinations. Any other verbs such as %x and %q will be sent to the the +standard fmt package for formatting. In addition, the custom formatter ignores +the width and precision arguments (however they will still work on the format +specifiers not handled by the custom formatter). + +Typically this function shouldn't be called directly. It is much easier to make +use of the custom formatter by calling one of the convenience functions such as +Printf, Println, or Fprintf. +*/ +func NewFormatter(v interface{}) fmt.Formatter { + return newFormatter(&Config, v) +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/format_test.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/format_test.go new file mode 100644 index 0000000000..793f9fb882 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/format_test.go @@ -0,0 +1,1558 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* +Test Summary: +NOTE: For each test, a nil pointer, a single pointer and double pointer to the +base test element are also tested to ensure proper indirection across all types. + +- Max int8, int16, int32, int64, int +- Max uint8, uint16, uint32, uint64, uint +- Boolean true and false +- Standard complex64 and complex128 +- Array containing standard ints +- Array containing type with custom formatter on pointer receiver only +- Array containing interfaces +- Slice containing standard float32 values +- Slice containing type with custom formatter on pointer receiver only +- Slice containing interfaces +- Nil slice +- Standard string +- Nil interface +- Sub-interface +- Map with string keys and int vals +- Map with custom formatter type on pointer receiver only keys and vals +- Map with interface keys and values +- Map with nil interface value +- Struct with primitives +- Struct that contains another struct +- Struct that contains custom type with Stringer pointer interface via both + exported and unexported fields +- Struct that contains embedded struct and field to same struct +- Uintptr to 0 (null pointer) +- Uintptr address of real variable +- Unsafe.Pointer to 0 (null pointer) +- Unsafe.Pointer to address of real variable +- Nil channel +- Standard int channel +- Function with no params and no returns +- Function with param and no returns +- Function with multiple params and multiple returns +- Struct that is circular through self referencing +- Structs that are circular through cross referencing +- Structs that are indirectly circular +- Type that panics in its Stringer interface +- Type that has a custom Error interface +- %x passthrough with uint +- %#x passthrough with uint +- %f passthrough with precision +- %f passthrough with width and precision +- %d passthrough with width +- %q passthrough with string +*/ + +package spew_test + +import ( + "bytes" + "fmt" + "testing" + "unsafe" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/davecgh/go-spew/spew" +) + +// formatterTest is used to describe a test to be perfomed against NewFormatter. +type formatterTest struct { + format string + in interface{} + wants []string +} + +// formatterTests houses all of the tests to be performed against NewFormatter. +var formatterTests = make([]formatterTest, 0) + +// addFormatterTest is a helper method to append the passed input and desired +// result to formatterTests. +func addFormatterTest(format string, in interface{}, wants ...string) { + test := formatterTest{format, in, wants} + formatterTests = append(formatterTests, test) +} + +func addIntFormatterTests() { + // Max int8. + v := int8(127) + nv := (*int8)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "int8" + vs := "127" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Max int16. + v2 := int16(32767) + nv2 := (*int16)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "int16" + v2s := "32767" + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%v", nv2, "") + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#v", nv2, "(*"+v2t+")"+"") + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"") + + // Max int32. + v3 := int32(2147483647) + nv3 := (*int32)(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "int32" + v3s := "2147483647" + addFormatterTest("%v", v3, v3s) + addFormatterTest("%v", pv3, "<*>"+v3s) + addFormatterTest("%v", &pv3, "<**>"+v3s) + addFormatterTest("%v", nv3, "") + addFormatterTest("%+v", v3, v3s) + addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s) + addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%#v", v3, "("+v3t+")"+v3s) + addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s) + addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s) + addFormatterTest("%#v", nv3, "(*"+v3t+")"+"") + addFormatterTest("%#+v", v3, "("+v3t+")"+v3s) + addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s) + addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s) + addFormatterTest("%#v", nv3, "(*"+v3t+")"+"") + + // Max int64. + v4 := int64(9223372036854775807) + nv4 := (*int64)(nil) + pv4 := &v4 + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "int64" + v4s := "9223372036854775807" + addFormatterTest("%v", v4, v4s) + addFormatterTest("%v", pv4, "<*>"+v4s) + addFormatterTest("%v", &pv4, "<**>"+v4s) + addFormatterTest("%v", nv4, "") + addFormatterTest("%+v", v4, v4s) + addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s) + addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s) + addFormatterTest("%+v", nv4, "") + addFormatterTest("%#v", v4, "("+v4t+")"+v4s) + addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s) + addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s) + addFormatterTest("%#v", nv4, "(*"+v4t+")"+"") + addFormatterTest("%#+v", v4, "("+v4t+")"+v4s) + addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s) + addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s) + addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"") + + // Max int. + v5 := int(2147483647) + nv5 := (*int)(nil) + pv5 := &v5 + v5Addr := fmt.Sprintf("%p", pv5) + pv5Addr := fmt.Sprintf("%p", &pv5) + v5t := "int" + v5s := "2147483647" + addFormatterTest("%v", v5, v5s) + addFormatterTest("%v", pv5, "<*>"+v5s) + addFormatterTest("%v", &pv5, "<**>"+v5s) + addFormatterTest("%v", nv5, "") + addFormatterTest("%+v", v5, v5s) + addFormatterTest("%+v", pv5, "<*>("+v5Addr+")"+v5s) + addFormatterTest("%+v", &pv5, "<**>("+pv5Addr+"->"+v5Addr+")"+v5s) + addFormatterTest("%+v", nv5, "") + addFormatterTest("%#v", v5, "("+v5t+")"+v5s) + addFormatterTest("%#v", pv5, "(*"+v5t+")"+v5s) + addFormatterTest("%#v", &pv5, "(**"+v5t+")"+v5s) + addFormatterTest("%#v", nv5, "(*"+v5t+")"+"") + addFormatterTest("%#+v", v5, "("+v5t+")"+v5s) + addFormatterTest("%#+v", pv5, "(*"+v5t+")("+v5Addr+")"+v5s) + addFormatterTest("%#+v", &pv5, "(**"+v5t+")("+pv5Addr+"->"+v5Addr+")"+v5s) + addFormatterTest("%#+v", nv5, "(*"+v5t+")"+"") +} + +func addUintFormatterTests() { + // Max uint8. + v := uint8(255) + nv := (*uint8)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "uint8" + vs := "255" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Max uint16. + v2 := uint16(65535) + nv2 := (*uint16)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "uint16" + v2s := "65535" + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%v", nv2, "") + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#v", nv2, "(*"+v2t+")"+"") + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"") + + // Max uint32. + v3 := uint32(4294967295) + nv3 := (*uint32)(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "uint32" + v3s := "4294967295" + addFormatterTest("%v", v3, v3s) + addFormatterTest("%v", pv3, "<*>"+v3s) + addFormatterTest("%v", &pv3, "<**>"+v3s) + addFormatterTest("%v", nv3, "") + addFormatterTest("%+v", v3, v3s) + addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s) + addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%#v", v3, "("+v3t+")"+v3s) + addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s) + addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s) + addFormatterTest("%#v", nv3, "(*"+v3t+")"+"") + addFormatterTest("%#+v", v3, "("+v3t+")"+v3s) + addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s) + addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s) + addFormatterTest("%#v", nv3, "(*"+v3t+")"+"") + + // Max uint64. + v4 := uint64(18446744073709551615) + nv4 := (*uint64)(nil) + pv4 := &v4 + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "uint64" + v4s := "18446744073709551615" + addFormatterTest("%v", v4, v4s) + addFormatterTest("%v", pv4, "<*>"+v4s) + addFormatterTest("%v", &pv4, "<**>"+v4s) + addFormatterTest("%v", nv4, "") + addFormatterTest("%+v", v4, v4s) + addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s) + addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s) + addFormatterTest("%+v", nv4, "") + addFormatterTest("%#v", v4, "("+v4t+")"+v4s) + addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s) + addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s) + addFormatterTest("%#v", nv4, "(*"+v4t+")"+"") + addFormatterTest("%#+v", v4, "("+v4t+")"+v4s) + addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s) + addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s) + addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"") + + // Max uint. + v5 := uint(4294967295) + nv5 := (*uint)(nil) + pv5 := &v5 + v5Addr := fmt.Sprintf("%p", pv5) + pv5Addr := fmt.Sprintf("%p", &pv5) + v5t := "uint" + v5s := "4294967295" + addFormatterTest("%v", v5, v5s) + addFormatterTest("%v", pv5, "<*>"+v5s) + addFormatterTest("%v", &pv5, "<**>"+v5s) + addFormatterTest("%v", nv5, "") + addFormatterTest("%+v", v5, v5s) + addFormatterTest("%+v", pv5, "<*>("+v5Addr+")"+v5s) + addFormatterTest("%+v", &pv5, "<**>("+pv5Addr+"->"+v5Addr+")"+v5s) + addFormatterTest("%+v", nv5, "") + addFormatterTest("%#v", v5, "("+v5t+")"+v5s) + addFormatterTest("%#v", pv5, "(*"+v5t+")"+v5s) + addFormatterTest("%#v", &pv5, "(**"+v5t+")"+v5s) + addFormatterTest("%#v", nv5, "(*"+v5t+")"+"") + addFormatterTest("%#+v", v5, "("+v5t+")"+v5s) + addFormatterTest("%#+v", pv5, "(*"+v5t+")("+v5Addr+")"+v5s) + addFormatterTest("%#+v", &pv5, "(**"+v5t+")("+pv5Addr+"->"+v5Addr+")"+v5s) + addFormatterTest("%#v", nv5, "(*"+v5t+")"+"") +} + +func addBoolFormatterTests() { + // Boolean true. + v := bool(true) + nv := (*bool)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "bool" + vs := "true" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Boolean false. + v2 := bool(false) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "bool" + v2s := "false" + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) +} + +func addFloatFormatterTests() { + // Standard float32. + v := float32(3.1415) + nv := (*float32)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "float32" + vs := "3.1415" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Standard float64. + v2 := float64(3.1415926) + nv2 := (*float64)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "float64" + v2s := "3.1415926" + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#v", nv2, "(*"+v2t+")"+"") + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"") +} + +func addComplexFormatterTests() { + // Standard complex64. + v := complex(float32(6), -2) + nv := (*complex64)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "complex64" + vs := "(6-2i)" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Standard complex128. + v2 := complex(float64(-6), 2) + nv2 := (*complex128)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "complex128" + v2s := "(-6+2i)" + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#v", nv2, "(*"+v2t+")"+"") + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"") +} + +func addArrayFormatterTests() { + // Array containing standard ints. + v := [3]int{1, 2, 3} + nv := (*[3]int)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "[3]int" + vs := "[1 2 3]" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Array containing type with custom formatter on pointer receiver only. + v2 := [3]pstringer{"1", "2", "3"} + nv2 := (*[3]pstringer)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "[3]spew_test.pstringer" + v2sp := "[stringer 1 stringer 2 stringer 3]" + v2s := v2sp + if spew.UnsafeDisabled { + v2s = "[1 2 3]" + } + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2sp) + addFormatterTest("%v", &pv2, "<**>"+v2sp) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2sp) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2sp) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2sp) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2sp) + addFormatterTest("%#v", nv2, "(*"+v2t+")"+"") + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2sp) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2sp) + addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"") + + // Array containing interfaces. + v3 := [3]interface{}{"one", int(2), uint(3)} + nv3 := (*[3]interface{})(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "[3]interface {}" + v3t2 := "string" + v3t3 := "int" + v3t4 := "uint" + v3s := "[one 2 3]" + v3s2 := "[(" + v3t2 + ")one (" + v3t3 + ")2 (" + v3t4 + ")3]" + addFormatterTest("%v", v3, v3s) + addFormatterTest("%v", pv3, "<*>"+v3s) + addFormatterTest("%v", &pv3, "<**>"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%+v", v3, v3s) + addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s) + addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%#v", v3, "("+v3t+")"+v3s2) + addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s2) + addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s2) + addFormatterTest("%#v", nv3, "(*"+v3t+")"+"") + addFormatterTest("%#+v", v3, "("+v3t+")"+v3s2) + addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s2) + addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s2) + addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"") +} + +func addSliceFormatterTests() { + // Slice containing standard float32 values. + v := []float32{3.14, 6.28, 12.56} + nv := (*[]float32)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "[]float32" + vs := "[3.14 6.28 12.56]" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Slice containing type with custom formatter on pointer receiver only. + v2 := []pstringer{"1", "2", "3"} + nv2 := (*[]pstringer)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "[]spew_test.pstringer" + v2s := "[stringer 1 stringer 2 stringer 3]" + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#v", nv2, "(*"+v2t+")"+"") + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"") + + // Slice containing interfaces. + v3 := []interface{}{"one", int(2), uint(3), nil} + nv3 := (*[]interface{})(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "[]interface {}" + v3t2 := "string" + v3t3 := "int" + v3t4 := "uint" + v3t5 := "interface {}" + v3s := "[one 2 3 ]" + v3s2 := "[(" + v3t2 + ")one (" + v3t3 + ")2 (" + v3t4 + ")3 (" + v3t5 + + ")]" + addFormatterTest("%v", v3, v3s) + addFormatterTest("%v", pv3, "<*>"+v3s) + addFormatterTest("%v", &pv3, "<**>"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%+v", v3, v3s) + addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s) + addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%#v", v3, "("+v3t+")"+v3s2) + addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s2) + addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s2) + addFormatterTest("%#v", nv3, "(*"+v3t+")"+"") + addFormatterTest("%#+v", v3, "("+v3t+")"+v3s2) + addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s2) + addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s2) + addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"") + + // Nil slice. + var v4 []int + nv4 := (*[]int)(nil) + pv4 := &v4 + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "[]int" + v4s := "" + addFormatterTest("%v", v4, v4s) + addFormatterTest("%v", pv4, "<*>"+v4s) + addFormatterTest("%v", &pv4, "<**>"+v4s) + addFormatterTest("%+v", nv4, "") + addFormatterTest("%+v", v4, v4s) + addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s) + addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s) + addFormatterTest("%+v", nv4, "") + addFormatterTest("%#v", v4, "("+v4t+")"+v4s) + addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s) + addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s) + addFormatterTest("%#v", nv4, "(*"+v4t+")"+"") + addFormatterTest("%#+v", v4, "("+v4t+")"+v4s) + addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s) + addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s) + addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"") +} + +func addStringFormatterTests() { + // Standard string. + v := "test" + nv := (*string)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "string" + vs := "test" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") +} + +func addInterfaceFormatterTests() { + // Nil interface. + var v interface{} + nv := (*interface{})(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "interface {}" + vs := "" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Sub-interface. + v2 := interface{}(uint16(65535)) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "uint16" + v2s := "65535" + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) +} + +func addMapFormatterTests() { + // Map with string keys and int vals. + v := map[string]int{"one": 1, "two": 2} + nilMap := map[string]int(nil) + nv := (*map[string]int)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "map[string]int" + vs := "map[one:1 two:2]" + vs2 := "map[two:2 one:1]" + addFormatterTest("%v", v, vs, vs2) + addFormatterTest("%v", pv, "<*>"+vs, "<*>"+vs2) + addFormatterTest("%v", &pv, "<**>"+vs, "<**>"+vs2) + addFormatterTest("%+v", nilMap, "") + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs, vs2) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs, "<*>("+vAddr+")"+vs2) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs, + "<**>("+pvAddr+"->"+vAddr+")"+vs2) + addFormatterTest("%+v", nilMap, "") + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs, "("+vt+")"+vs2) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs, "(*"+vt+")"+vs2) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs, "(**"+vt+")"+vs2) + addFormatterTest("%#v", nilMap, "("+vt+")"+"") + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs, "("+vt+")"+vs2) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs, + "(*"+vt+")("+vAddr+")"+vs2) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs, + "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs2) + addFormatterTest("%#+v", nilMap, "("+vt+")"+"") + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Map with custom formatter type on pointer receiver only keys and vals. + v2 := map[pstringer]pstringer{"one": "1"} + nv2 := (*map[pstringer]pstringer)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "map[spew_test.pstringer]spew_test.pstringer" + v2s := "map[stringer one:stringer 1]" + if spew.UnsafeDisabled { + v2s = "map[one:1]" + } + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#v", nv2, "(*"+v2t+")"+"") + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"") + + // Map with interface keys and values. + v3 := map[interface{}]interface{}{"one": 1} + nv3 := (*map[interface{}]interface{})(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "map[interface {}]interface {}" + v3t1 := "string" + v3t2 := "int" + v3s := "map[one:1]" + v3s2 := "map[(" + v3t1 + ")one:(" + v3t2 + ")1]" + addFormatterTest("%v", v3, v3s) + addFormatterTest("%v", pv3, "<*>"+v3s) + addFormatterTest("%v", &pv3, "<**>"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%+v", v3, v3s) + addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s) + addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%#v", v3, "("+v3t+")"+v3s2) + addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s2) + addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s2) + addFormatterTest("%#v", nv3, "(*"+v3t+")"+"") + addFormatterTest("%#+v", v3, "("+v3t+")"+v3s2) + addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s2) + addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s2) + addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"") + + // Map with nil interface value + v4 := map[string]interface{}{"nil": nil} + nv4 := (*map[string]interface{})(nil) + pv4 := &v4 + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "map[string]interface {}" + v4t1 := "interface {}" + v4s := "map[nil:]" + v4s2 := "map[nil:(" + v4t1 + ")]" + addFormatterTest("%v", v4, v4s) + addFormatterTest("%v", pv4, "<*>"+v4s) + addFormatterTest("%v", &pv4, "<**>"+v4s) + addFormatterTest("%+v", nv4, "") + addFormatterTest("%+v", v4, v4s) + addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s) + addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s) + addFormatterTest("%+v", nv4, "") + addFormatterTest("%#v", v4, "("+v4t+")"+v4s2) + addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s2) + addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s2) + addFormatterTest("%#v", nv4, "(*"+v4t+")"+"") + addFormatterTest("%#+v", v4, "("+v4t+")"+v4s2) + addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s2) + addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s2) + addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"") +} + +func addStructFormatterTests() { + // Struct with primitives. + type s1 struct { + a int8 + b uint8 + } + v := s1{127, 255} + nv := (*s1)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "spew_test.s1" + vt2 := "int8" + vt3 := "uint8" + vs := "{127 255}" + vs2 := "{a:127 b:255}" + vs3 := "{a:(" + vt2 + ")127 b:(" + vt3 + ")255}" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs2) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs2) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs2) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs3) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs3) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs3) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs3) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs3) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs3) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Struct that contains another struct. + type s2 struct { + s1 s1 + b bool + } + v2 := s2{s1{127, 255}, true} + nv2 := (*s2)(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "spew_test.s2" + v2t2 := "spew_test.s1" + v2t3 := "int8" + v2t4 := "uint8" + v2t5 := "bool" + v2s := "{{127 255} true}" + v2s2 := "{s1:{a:127 b:255} b:true}" + v2s3 := "{s1:(" + v2t2 + "){a:(" + v2t3 + ")127 b:(" + v2t4 + ")255} b:(" + + v2t5 + ")true}" + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%+v", v2, v2s2) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s2) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s2) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%#v", v2, "("+v2t+")"+v2s3) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s3) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s3) + addFormatterTest("%#v", nv2, "(*"+v2t+")"+"") + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s3) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s3) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s3) + addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"") + + // Struct that contains custom type with Stringer pointer interface via both + // exported and unexported fields. + type s3 struct { + s pstringer + S pstringer + } + v3 := s3{"test", "test2"} + nv3 := (*s3)(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "spew_test.s3" + v3t2 := "spew_test.pstringer" + v3s := "{stringer test stringer test2}" + v3sp := v3s + v3s2 := "{s:stringer test S:stringer test2}" + v3s2p := v3s2 + v3s3 := "{s:(" + v3t2 + ")stringer test S:(" + v3t2 + ")stringer test2}" + v3s3p := v3s3 + if spew.UnsafeDisabled { + v3s = "{test test2}" + v3sp = "{test stringer test2}" + v3s2 = "{s:test S:test2}" + v3s2p = "{s:test S:stringer test2}" + v3s3 = "{s:(" + v3t2 + ")test S:(" + v3t2 + ")test2}" + v3s3p = "{s:(" + v3t2 + ")test S:(" + v3t2 + ")stringer test2}" + } + addFormatterTest("%v", v3, v3s) + addFormatterTest("%v", pv3, "<*>"+v3sp) + addFormatterTest("%v", &pv3, "<**>"+v3sp) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%+v", v3, v3s2) + addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s2p) + addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s2p) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%#v", v3, "("+v3t+")"+v3s3) + addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s3p) + addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s3p) + addFormatterTest("%#v", nv3, "(*"+v3t+")"+"") + addFormatterTest("%#+v", v3, "("+v3t+")"+v3s3) + addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s3p) + addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s3p) + addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"") + + // Struct that contains embedded struct and field to same struct. + e := embed{"embedstr"} + v4 := embedwrap{embed: &e, e: &e} + nv4 := (*embedwrap)(nil) + pv4 := &v4 + eAddr := fmt.Sprintf("%p", &e) + v4Addr := fmt.Sprintf("%p", pv4) + pv4Addr := fmt.Sprintf("%p", &pv4) + v4t := "spew_test.embedwrap" + v4t2 := "spew_test.embed" + v4t3 := "string" + v4s := "{<*>{embedstr} <*>{embedstr}}" + v4s2 := "{embed:<*>(" + eAddr + "){a:embedstr} e:<*>(" + eAddr + + "){a:embedstr}}" + v4s3 := "{embed:(*" + v4t2 + "){a:(" + v4t3 + ")embedstr} e:(*" + v4t2 + + "){a:(" + v4t3 + ")embedstr}}" + v4s4 := "{embed:(*" + v4t2 + ")(" + eAddr + "){a:(" + v4t3 + + ")embedstr} e:(*" + v4t2 + ")(" + eAddr + "){a:(" + v4t3 + ")embedstr}}" + addFormatterTest("%v", v4, v4s) + addFormatterTest("%v", pv4, "<*>"+v4s) + addFormatterTest("%v", &pv4, "<**>"+v4s) + addFormatterTest("%+v", nv4, "") + addFormatterTest("%+v", v4, v4s2) + addFormatterTest("%+v", pv4, "<*>("+v4Addr+")"+v4s2) + addFormatterTest("%+v", &pv4, "<**>("+pv4Addr+"->"+v4Addr+")"+v4s2) + addFormatterTest("%+v", nv4, "") + addFormatterTest("%#v", v4, "("+v4t+")"+v4s3) + addFormatterTest("%#v", pv4, "(*"+v4t+")"+v4s3) + addFormatterTest("%#v", &pv4, "(**"+v4t+")"+v4s3) + addFormatterTest("%#v", nv4, "(*"+v4t+")"+"") + addFormatterTest("%#+v", v4, "("+v4t+")"+v4s4) + addFormatterTest("%#+v", pv4, "(*"+v4t+")("+v4Addr+")"+v4s4) + addFormatterTest("%#+v", &pv4, "(**"+v4t+")("+pv4Addr+"->"+v4Addr+")"+v4s4) + addFormatterTest("%#+v", nv4, "(*"+v4t+")"+"") +} + +func addUintptrFormatterTests() { + // Null pointer. + v := uintptr(0) + nv := (*uintptr)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "uintptr" + vs := "" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Address of real variable. + i := 1 + v2 := uintptr(unsafe.Pointer(&i)) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "uintptr" + v2s := fmt.Sprintf("%p", &i) + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) +} + +func addUnsafePointerFormatterTests() { + // Null pointer. + v := unsafe.Pointer(uintptr(0)) + nv := (*unsafe.Pointer)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "unsafe.Pointer" + vs := "" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Address of real variable. + i := 1 + v2 := unsafe.Pointer(&i) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "unsafe.Pointer" + v2s := fmt.Sprintf("%p", &i) + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) +} + +func addChanFormatterTests() { + // Nil channel. + var v chan int + pv := &v + nv := (*chan int)(nil) + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "chan int" + vs := "" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Real channel. + v2 := make(chan int) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "chan int" + v2s := fmt.Sprintf("%p", v2) + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) +} + +func addFuncFormatterTests() { + // Function with no params and no returns. + v := addIntFormatterTests + nv := (*func())(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "func()" + vs := fmt.Sprintf("%p", v) + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") + + // Function with param and no returns. + v2 := TestFormatter + nv2 := (*func(*testing.T))(nil) + pv2 := &v2 + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "func(*testing.T)" + v2s := fmt.Sprintf("%p", v2) + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s) + addFormatterTest("%v", &pv2, "<**>"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%+v", v2, v2s) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%+v", nv2, "") + addFormatterTest("%#v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s) + addFormatterTest("%#v", nv2, "(*"+v2t+")"+"") + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s) + addFormatterTest("%#+v", nv2, "(*"+v2t+")"+"") + + // Function with multiple params and multiple returns. + var v3 = func(i int, s string) (b bool, err error) { + return true, nil + } + nv3 := (*func(int, string) (bool, error))(nil) + pv3 := &v3 + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "func(int, string) (bool, error)" + v3s := fmt.Sprintf("%p", v3) + addFormatterTest("%v", v3, v3s) + addFormatterTest("%v", pv3, "<*>"+v3s) + addFormatterTest("%v", &pv3, "<**>"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%+v", v3, v3s) + addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s) + addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s) + addFormatterTest("%+v", nv3, "") + addFormatterTest("%#v", v3, "("+v3t+")"+v3s) + addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s) + addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s) + addFormatterTest("%#v", nv3, "(*"+v3t+")"+"") + addFormatterTest("%#+v", v3, "("+v3t+")"+v3s) + addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s) + addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s) + addFormatterTest("%#+v", nv3, "(*"+v3t+")"+"") +} + +func addCircularFormatterTests() { + // Struct that is circular through self referencing. + type circular struct { + c *circular + } + v := circular{nil} + v.c = &v + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "spew_test.circular" + vs := "{<*>{<*>}}" + vs2 := "{<*>}" + vs3 := "{c:<*>(" + vAddr + "){c:<*>(" + vAddr + ")}}" + vs4 := "{c:<*>(" + vAddr + ")}" + vs5 := "{c:(*" + vt + "){c:(*" + vt + ")}}" + vs6 := "{c:(*" + vt + ")}" + vs7 := "{c:(*" + vt + ")(" + vAddr + "){c:(*" + vt + ")(" + vAddr + + ")}}" + vs8 := "{c:(*" + vt + ")(" + vAddr + ")}" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs2) + addFormatterTest("%v", &pv, "<**>"+vs2) + addFormatterTest("%+v", v, vs3) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs4) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs4) + addFormatterTest("%#v", v, "("+vt+")"+vs5) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs6) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs6) + addFormatterTest("%#+v", v, "("+vt+")"+vs7) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs8) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs8) + + // Structs that are circular through cross referencing. + v2 := xref1{nil} + ts2 := xref2{&v2} + v2.ps2 = &ts2 + pv2 := &v2 + ts2Addr := fmt.Sprintf("%p", &ts2) + v2Addr := fmt.Sprintf("%p", pv2) + pv2Addr := fmt.Sprintf("%p", &pv2) + v2t := "spew_test.xref1" + v2t2 := "spew_test.xref2" + v2s := "{<*>{<*>{<*>}}}" + v2s2 := "{<*>{<*>}}" + v2s3 := "{ps2:<*>(" + ts2Addr + "){ps1:<*>(" + v2Addr + "){ps2:<*>(" + + ts2Addr + ")}}}" + v2s4 := "{ps2:<*>(" + ts2Addr + "){ps1:<*>(" + v2Addr + ")}}" + v2s5 := "{ps2:(*" + v2t2 + "){ps1:(*" + v2t + "){ps2:(*" + v2t2 + + ")}}}" + v2s6 := "{ps2:(*" + v2t2 + "){ps1:(*" + v2t + ")}}" + v2s7 := "{ps2:(*" + v2t2 + ")(" + ts2Addr + "){ps1:(*" + v2t + + ")(" + v2Addr + "){ps2:(*" + v2t2 + ")(" + ts2Addr + + ")}}}" + v2s8 := "{ps2:(*" + v2t2 + ")(" + ts2Addr + "){ps1:(*" + v2t + + ")(" + v2Addr + ")}}" + addFormatterTest("%v", v2, v2s) + addFormatterTest("%v", pv2, "<*>"+v2s2) + addFormatterTest("%v", &pv2, "<**>"+v2s2) + addFormatterTest("%+v", v2, v2s3) + addFormatterTest("%+v", pv2, "<*>("+v2Addr+")"+v2s4) + addFormatterTest("%+v", &pv2, "<**>("+pv2Addr+"->"+v2Addr+")"+v2s4) + addFormatterTest("%#v", v2, "("+v2t+")"+v2s5) + addFormatterTest("%#v", pv2, "(*"+v2t+")"+v2s6) + addFormatterTest("%#v", &pv2, "(**"+v2t+")"+v2s6) + addFormatterTest("%#+v", v2, "("+v2t+")"+v2s7) + addFormatterTest("%#+v", pv2, "(*"+v2t+")("+v2Addr+")"+v2s8) + addFormatterTest("%#+v", &pv2, "(**"+v2t+")("+pv2Addr+"->"+v2Addr+")"+v2s8) + + // Structs that are indirectly circular. + v3 := indirCir1{nil} + tic2 := indirCir2{nil} + tic3 := indirCir3{&v3} + tic2.ps3 = &tic3 + v3.ps2 = &tic2 + pv3 := &v3 + tic2Addr := fmt.Sprintf("%p", &tic2) + tic3Addr := fmt.Sprintf("%p", &tic3) + v3Addr := fmt.Sprintf("%p", pv3) + pv3Addr := fmt.Sprintf("%p", &pv3) + v3t := "spew_test.indirCir1" + v3t2 := "spew_test.indirCir2" + v3t3 := "spew_test.indirCir3" + v3s := "{<*>{<*>{<*>{<*>}}}}" + v3s2 := "{<*>{<*>{<*>}}}" + v3s3 := "{ps2:<*>(" + tic2Addr + "){ps3:<*>(" + tic3Addr + "){ps1:<*>(" + + v3Addr + "){ps2:<*>(" + tic2Addr + ")}}}}" + v3s4 := "{ps2:<*>(" + tic2Addr + "){ps3:<*>(" + tic3Addr + "){ps1:<*>(" + + v3Addr + ")}}}" + v3s5 := "{ps2:(*" + v3t2 + "){ps3:(*" + v3t3 + "){ps1:(*" + v3t + + "){ps2:(*" + v3t2 + ")}}}}" + v3s6 := "{ps2:(*" + v3t2 + "){ps3:(*" + v3t3 + "){ps1:(*" + v3t + + ")}}}" + v3s7 := "{ps2:(*" + v3t2 + ")(" + tic2Addr + "){ps3:(*" + v3t3 + ")(" + + tic3Addr + "){ps1:(*" + v3t + ")(" + v3Addr + "){ps2:(*" + v3t2 + + ")(" + tic2Addr + ")}}}}" + v3s8 := "{ps2:(*" + v3t2 + ")(" + tic2Addr + "){ps3:(*" + v3t3 + ")(" + + tic3Addr + "){ps1:(*" + v3t + ")(" + v3Addr + ")}}}" + addFormatterTest("%v", v3, v3s) + addFormatterTest("%v", pv3, "<*>"+v3s2) + addFormatterTest("%v", &pv3, "<**>"+v3s2) + addFormatterTest("%+v", v3, v3s3) + addFormatterTest("%+v", pv3, "<*>("+v3Addr+")"+v3s4) + addFormatterTest("%+v", &pv3, "<**>("+pv3Addr+"->"+v3Addr+")"+v3s4) + addFormatterTest("%#v", v3, "("+v3t+")"+v3s5) + addFormatterTest("%#v", pv3, "(*"+v3t+")"+v3s6) + addFormatterTest("%#v", &pv3, "(**"+v3t+")"+v3s6) + addFormatterTest("%#+v", v3, "("+v3t+")"+v3s7) + addFormatterTest("%#+v", pv3, "(*"+v3t+")("+v3Addr+")"+v3s8) + addFormatterTest("%#+v", &pv3, "(**"+v3t+")("+pv3Addr+"->"+v3Addr+")"+v3s8) +} + +func addPanicFormatterTests() { + // Type that panics in its Stringer interface. + v := panicer(127) + nv := (*panicer)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "spew_test.panicer" + vs := "(PANIC=test panic)127" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") +} + +func addErrorFormatterTests() { + // Type that has a custom Error interface. + v := customError(127) + nv := (*customError)(nil) + pv := &v + vAddr := fmt.Sprintf("%p", pv) + pvAddr := fmt.Sprintf("%p", &pv) + vt := "spew_test.customError" + vs := "error: 127" + addFormatterTest("%v", v, vs) + addFormatterTest("%v", pv, "<*>"+vs) + addFormatterTest("%v", &pv, "<**>"+vs) + addFormatterTest("%v", nv, "") + addFormatterTest("%+v", v, vs) + addFormatterTest("%+v", pv, "<*>("+vAddr+")"+vs) + addFormatterTest("%+v", &pv, "<**>("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%+v", nv, "") + addFormatterTest("%#v", v, "("+vt+")"+vs) + addFormatterTest("%#v", pv, "(*"+vt+")"+vs) + addFormatterTest("%#v", &pv, "(**"+vt+")"+vs) + addFormatterTest("%#v", nv, "(*"+vt+")"+"") + addFormatterTest("%#+v", v, "("+vt+")"+vs) + addFormatterTest("%#+v", pv, "(*"+vt+")("+vAddr+")"+vs) + addFormatterTest("%#+v", &pv, "(**"+vt+")("+pvAddr+"->"+vAddr+")"+vs) + addFormatterTest("%#+v", nv, "(*"+vt+")"+"") +} + +func addPassthroughFormatterTests() { + // %x passthrough with uint. + v := uint(4294967295) + pv := &v + vAddr := fmt.Sprintf("%x", pv) + pvAddr := fmt.Sprintf("%x", &pv) + vs := "ffffffff" + addFormatterTest("%x", v, vs) + addFormatterTest("%x", pv, vAddr) + addFormatterTest("%x", &pv, pvAddr) + + // %#x passthrough with uint. + v2 := int(2147483647) + pv2 := &v2 + v2Addr := fmt.Sprintf("%#x", pv2) + pv2Addr := fmt.Sprintf("%#x", &pv2) + v2s := "0x7fffffff" + addFormatterTest("%#x", v2, v2s) + addFormatterTest("%#x", pv2, v2Addr) + addFormatterTest("%#x", &pv2, pv2Addr) + + // %f passthrough with precision. + addFormatterTest("%.2f", 3.1415, "3.14") + addFormatterTest("%.3f", 3.1415, "3.142") + addFormatterTest("%.4f", 3.1415, "3.1415") + + // %f passthrough with width and precision. + addFormatterTest("%5.2f", 3.1415, " 3.14") + addFormatterTest("%6.3f", 3.1415, " 3.142") + addFormatterTest("%7.4f", 3.1415, " 3.1415") + + // %d passthrough with width. + addFormatterTest("%3d", 127, "127") + addFormatterTest("%4d", 127, " 127") + addFormatterTest("%5d", 127, " 127") + + // %q passthrough with string. + addFormatterTest("%q", "test", "\"test\"") +} + +// TestFormatter executes all of the tests described by formatterTests. +func TestFormatter(t *testing.T) { + // Setup tests. + addIntFormatterTests() + addUintFormatterTests() + addBoolFormatterTests() + addFloatFormatterTests() + addComplexFormatterTests() + addArrayFormatterTests() + addSliceFormatterTests() + addStringFormatterTests() + addInterfaceFormatterTests() + addMapFormatterTests() + addStructFormatterTests() + addUintptrFormatterTests() + addUnsafePointerFormatterTests() + addChanFormatterTests() + addFuncFormatterTests() + addCircularFormatterTests() + addPanicFormatterTests() + addErrorFormatterTests() + addPassthroughFormatterTests() + + t.Logf("Running %d tests", len(formatterTests)) + for i, test := range formatterTests { + buf := new(bytes.Buffer) + spew.Fprintf(buf, test.format, test.in) + s := buf.String() + if testFailed(s, test.wants) { + t.Errorf("Formatter #%d format: %s got: %s %s", i, test.format, s, + stringizeWants(test.wants)) + continue + } + } +} + +type testStruct struct { + x int +} + +func (ts testStruct) String() string { + return fmt.Sprintf("ts.%d", ts.x) +} + +type testStructP struct { + x int +} + +func (ts *testStructP) String() string { + return fmt.Sprintf("ts.%d", ts.x) +} + +func TestPrintSortedKeys(t *testing.T) { + cfg := spew.ConfigState{SortKeys: true} + s := cfg.Sprint(map[int]string{1: "1", 3: "3", 2: "2"}) + expected := "map[1:1 2:2 3:3]" + if s != expected { + t.Errorf("Sorted keys mismatch 1:\n %v %v", s, expected) + } + + s = cfg.Sprint(map[stringer]int{"1": 1, "3": 3, "2": 2}) + expected = "map[stringer 1:1 stringer 2:2 stringer 3:3]" + if s != expected { + t.Errorf("Sorted keys mismatch 2:\n %v %v", s, expected) + } + + s = cfg.Sprint(map[pstringer]int{pstringer("1"): 1, pstringer("3"): 3, pstringer("2"): 2}) + expected = "map[stringer 1:1 stringer 2:2 stringer 3:3]" + if spew.UnsafeDisabled { + expected = "map[1:1 2:2 3:3]" + } + if s != expected { + t.Errorf("Sorted keys mismatch 3:\n %v %v", s, expected) + } + + s = cfg.Sprint(map[testStruct]int{testStruct{1}: 1, testStruct{3}: 3, testStruct{2}: 2}) + expected = "map[ts.1:1 ts.2:2 ts.3:3]" + if s != expected { + t.Errorf("Sorted keys mismatch 4:\n %v %v", s, expected) + } + + if !spew.UnsafeDisabled { + s = cfg.Sprint(map[testStructP]int{testStructP{1}: 1, testStructP{3}: 3, testStructP{2}: 2}) + expected = "map[ts.1:1 ts.2:2 ts.3:3]" + if s != expected { + t.Errorf("Sorted keys mismatch 5:\n %v %v", s, expected) + } + } + + s = cfg.Sprint(map[customError]int{customError(1): 1, customError(3): 3, customError(2): 2}) + expected = "map[error: 1:1 error: 2:2 error: 3:3]" + if s != expected { + t.Errorf("Sorted keys mismatch 6:\n %v %v", s, expected) + } +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/internal_test.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/internal_test.go new file mode 100644 index 0000000000..1069ee21c1 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/internal_test.go @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* +This test file is part of the spew package rather than than the spew_test +package because it needs access to internals to properly test certain cases +which are not possible via the public interface since they should never happen. +*/ + +package spew + +import ( + "bytes" + "reflect" + "testing" +) + +// dummyFmtState implements a fake fmt.State to use for testing invalid +// reflect.Value handling. This is necessary because the fmt package catches +// invalid values before invoking the formatter on them. +type dummyFmtState struct { + bytes.Buffer +} + +func (dfs *dummyFmtState) Flag(f int) bool { + if f == int('+') { + return true + } + return false +} + +func (dfs *dummyFmtState) Precision() (int, bool) { + return 0, false +} + +func (dfs *dummyFmtState) Width() (int, bool) { + return 0, false +} + +// TestInvalidReflectValue ensures the dump and formatter code handles an +// invalid reflect value properly. This needs access to internal state since it +// should never happen in real code and therefore can't be tested via the public +// API. +func TestInvalidReflectValue(t *testing.T) { + i := 1 + + // Dump invalid reflect value. + v := new(reflect.Value) + buf := new(bytes.Buffer) + d := dumpState{w: buf, cs: &Config} + d.dump(*v) + s := buf.String() + want := "" + if s != want { + t.Errorf("InvalidReflectValue #%d\n got: %s want: %s", i, s, want) + } + i++ + + // Formatter invalid reflect value. + buf2 := new(dummyFmtState) + f := formatState{value: *v, cs: &Config, fs: buf2} + f.format(*v) + s = buf2.String() + want = "" + if s != want { + t.Errorf("InvalidReflectValue #%d got: %s want: %s", i, s, want) + } +} + +// SortValues makes the internal sortValues function available to the test +// package. +func SortValues(values []reflect.Value, cs *ConfigState) { + sortValues(values, cs) +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/internalunsafe_test.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/internalunsafe_test.go new file mode 100644 index 0000000000..83e070e9a8 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/internalunsafe_test.go @@ -0,0 +1,101 @@ +// Copyright (c) 2013-2015 Dave Collins + +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. + +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// NOTE: Due to the following build constraints, this file will only be compiled +// when the code is not running on Google App Engine and "-tags disableunsafe" +// is not added to the go build command line. +// +build !appengine,!disableunsafe + +/* +This test file is part of the spew package rather than than the spew_test +package because it needs access to internals to properly test certain cases +which are not possible via the public interface since they should never happen. +*/ + +package spew + +import ( + "bytes" + "reflect" + "testing" + "unsafe" +) + +// changeKind uses unsafe to intentionally change the kind of a reflect.Value to +// the maximum kind value which does not exist. This is needed to test the +// fallback code which punts to the standard fmt library for new types that +// might get added to the language. +func changeKind(v *reflect.Value, readOnly bool) { + rvf := (*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(v)) + offsetFlag)) + *rvf = *rvf | ((1< + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package spew + +import ( + "fmt" + "io" +) + +// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the formatted string as a value that satisfies error. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Errorf(format, spew.NewFormatter(a), spew.NewFormatter(b)) +func Errorf(format string, a ...interface{}) (err error) { + return fmt.Errorf(format, convertArgs(a)...) +} + +// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprint(w, spew.NewFormatter(a), spew.NewFormatter(b)) +func Fprint(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprint(w, convertArgs(a)...) +} + +// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprintf(w, format, spew.NewFormatter(a), spew.NewFormatter(b)) +func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { + return fmt.Fprintf(w, format, convertArgs(a)...) +} + +// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it +// passed with a default Formatter interface returned by NewFormatter. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Fprintln(w, spew.NewFormatter(a), spew.NewFormatter(b)) +func Fprintln(w io.Writer, a ...interface{}) (n int, err error) { + return fmt.Fprintln(w, convertArgs(a)...) +} + +// Print is a wrapper for fmt.Print that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Print(spew.NewFormatter(a), spew.NewFormatter(b)) +func Print(a ...interface{}) (n int, err error) { + return fmt.Print(convertArgs(a)...) +} + +// Printf is a wrapper for fmt.Printf that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Printf(format, spew.NewFormatter(a), spew.NewFormatter(b)) +func Printf(format string, a ...interface{}) (n int, err error) { + return fmt.Printf(format, convertArgs(a)...) +} + +// Println is a wrapper for fmt.Println that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the number of bytes written and any write error encountered. See +// NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Println(spew.NewFormatter(a), spew.NewFormatter(b)) +func Println(a ...interface{}) (n int, err error) { + return fmt.Println(convertArgs(a)...) +} + +// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprint(spew.NewFormatter(a), spew.NewFormatter(b)) +func Sprint(a ...interface{}) string { + return fmt.Sprint(convertArgs(a)...) +} + +// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were +// passed with a default Formatter interface returned by NewFormatter. It +// returns the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprintf(format, spew.NewFormatter(a), spew.NewFormatter(b)) +func Sprintf(format string, a ...interface{}) string { + return fmt.Sprintf(format, convertArgs(a)...) +} + +// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it +// were passed with a default Formatter interface returned by NewFormatter. It +// returns the resulting string. See NewFormatter for formatting details. +// +// This function is shorthand for the following syntax: +// +// fmt.Sprintln(spew.NewFormatter(a), spew.NewFormatter(b)) +func Sprintln(a ...interface{}) string { + return fmt.Sprintln(convertArgs(a)...) +} + +// convertArgs accepts a slice of arguments and returns a slice of the same +// length with each argument converted to a default spew Formatter interface. +func convertArgs(args []interface{}) (formatters []interface{}) { + formatters = make([]interface{}, len(args)) + for index, arg := range args { + formatters[index] = NewFormatter(arg) + } + return formatters +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/spew_test.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/spew_test.go new file mode 100644 index 0000000000..ada4256b05 --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/spew_test.go @@ -0,0 +1,309 @@ +/* + * Copyright (c) 2013 Dave Collins + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package spew_test + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + "testing" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/davecgh/go-spew/spew" +) + +// spewFunc is used to identify which public function of the spew package or +// ConfigState a test applies to. +type spewFunc int + +const ( + fCSFdump spewFunc = iota + fCSFprint + fCSFprintf + fCSFprintln + fCSPrint + fCSPrintln + fCSSdump + fCSSprint + fCSSprintf + fCSSprintln + fCSErrorf + fCSNewFormatter + fErrorf + fFprint + fFprintln + fPrint + fPrintln + fSdump + fSprint + fSprintf + fSprintln +) + +// Map of spewFunc values to names for pretty printing. +var spewFuncStrings = map[spewFunc]string{ + fCSFdump: "ConfigState.Fdump", + fCSFprint: "ConfigState.Fprint", + fCSFprintf: "ConfigState.Fprintf", + fCSFprintln: "ConfigState.Fprintln", + fCSSdump: "ConfigState.Sdump", + fCSPrint: "ConfigState.Print", + fCSPrintln: "ConfigState.Println", + fCSSprint: "ConfigState.Sprint", + fCSSprintf: "ConfigState.Sprintf", + fCSSprintln: "ConfigState.Sprintln", + fCSErrorf: "ConfigState.Errorf", + fCSNewFormatter: "ConfigState.NewFormatter", + fErrorf: "spew.Errorf", + fFprint: "spew.Fprint", + fFprintln: "spew.Fprintln", + fPrint: "spew.Print", + fPrintln: "spew.Println", + fSdump: "spew.Sdump", + fSprint: "spew.Sprint", + fSprintf: "spew.Sprintf", + fSprintln: "spew.Sprintln", +} + +func (f spewFunc) String() string { + if s, ok := spewFuncStrings[f]; ok { + return s + } + return fmt.Sprintf("Unknown spewFunc (%d)", int(f)) +} + +// spewTest is used to describe a test to be performed against the public +// functions of the spew package or ConfigState. +type spewTest struct { + cs *spew.ConfigState + f spewFunc + format string + in interface{} + want string +} + +// spewTests houses the tests to be performed against the public functions of +// the spew package and ConfigState. +// +// These tests are only intended to ensure the public functions are exercised +// and are intentionally not exhaustive of types. The exhaustive type +// tests are handled in the dump and format tests. +var spewTests []spewTest + +// redirStdout is a helper function to return the standard output from f as a +// byte slice. +func redirStdout(f func()) ([]byte, error) { + tempFile, err := ioutil.TempFile("", "ss-test") + if err != nil { + return nil, err + } + fileName := tempFile.Name() + defer os.Remove(fileName) // Ignore error + + origStdout := os.Stdout + os.Stdout = tempFile + f() + os.Stdout = origStdout + tempFile.Close() + + return ioutil.ReadFile(fileName) +} + +func initSpewTests() { + // Config states with various settings. + scsDefault := spew.NewDefaultConfig() + scsNoMethods := &spew.ConfigState{Indent: " ", DisableMethods: true} + scsNoPmethods := &spew.ConfigState{Indent: " ", DisablePointerMethods: true} + scsMaxDepth := &spew.ConfigState{Indent: " ", MaxDepth: 1} + scsContinue := &spew.ConfigState{Indent: " ", ContinueOnMethod: true} + + // Variables for tests on types which implement Stringer interface with and + // without a pointer receiver. + ts := stringer("test") + tps := pstringer("test") + + // depthTester is used to test max depth handling for structs, array, slices + // and maps. + type depthTester struct { + ic indirCir1 + arr [1]string + slice []string + m map[string]int + } + dt := depthTester{indirCir1{nil}, [1]string{"arr"}, []string{"slice"}, + map[string]int{"one": 1}} + + // Variable for tests on types which implement error interface. + te := customError(10) + + spewTests = []spewTest{ + {scsDefault, fCSFdump, "", int8(127), "(int8) 127\n"}, + {scsDefault, fCSFprint, "", int16(32767), "32767"}, + {scsDefault, fCSFprintf, "%v", int32(2147483647), "2147483647"}, + {scsDefault, fCSFprintln, "", int(2147483647), "2147483647\n"}, + {scsDefault, fCSPrint, "", int64(9223372036854775807), "9223372036854775807"}, + {scsDefault, fCSPrintln, "", uint8(255), "255\n"}, + {scsDefault, fCSSdump, "", uint8(64), "(uint8) 64\n"}, + {scsDefault, fCSSprint, "", complex(1, 2), "(1+2i)"}, + {scsDefault, fCSSprintf, "%v", complex(float32(3), 4), "(3+4i)"}, + {scsDefault, fCSSprintln, "", complex(float64(5), 6), "(5+6i)\n"}, + {scsDefault, fCSErrorf, "%#v", uint16(65535), "(uint16)65535"}, + {scsDefault, fCSNewFormatter, "%v", uint32(4294967295), "4294967295"}, + {scsDefault, fErrorf, "%v", uint64(18446744073709551615), "18446744073709551615"}, + {scsDefault, fFprint, "", float32(3.14), "3.14"}, + {scsDefault, fFprintln, "", float64(6.28), "6.28\n"}, + {scsDefault, fPrint, "", true, "true"}, + {scsDefault, fPrintln, "", false, "false\n"}, + {scsDefault, fSdump, "", complex(-10, -20), "(complex128) (-10-20i)\n"}, + {scsDefault, fSprint, "", complex(-1, -2), "(-1-2i)"}, + {scsDefault, fSprintf, "%v", complex(float32(-3), -4), "(-3-4i)"}, + {scsDefault, fSprintln, "", complex(float64(-5), -6), "(-5-6i)\n"}, + {scsNoMethods, fCSFprint, "", ts, "test"}, + {scsNoMethods, fCSFprint, "", &ts, "<*>test"}, + {scsNoMethods, fCSFprint, "", tps, "test"}, + {scsNoMethods, fCSFprint, "", &tps, "<*>test"}, + {scsNoPmethods, fCSFprint, "", ts, "stringer test"}, + {scsNoPmethods, fCSFprint, "", &ts, "<*>stringer test"}, + {scsNoPmethods, fCSFprint, "", tps, "test"}, + {scsNoPmethods, fCSFprint, "", &tps, "<*>stringer test"}, + {scsMaxDepth, fCSFprint, "", dt, "{{} [] [] map[]}"}, + {scsMaxDepth, fCSFdump, "", dt, "(spew_test.depthTester) {\n" + + " ic: (spew_test.indirCir1) {\n \n },\n" + + " arr: ([1]string) (len=1 cap=1) {\n \n },\n" + + " slice: ([]string) (len=1 cap=1) {\n \n },\n" + + " m: (map[string]int) (len=1) {\n \n }\n}\n"}, + {scsContinue, fCSFprint, "", ts, "(stringer test) test"}, + {scsContinue, fCSFdump, "", ts, "(spew_test.stringer) " + + "(len=4) (stringer test) \"test\"\n"}, + {scsContinue, fCSFprint, "", te, "(error: 10) 10"}, + {scsContinue, fCSFdump, "", te, "(spew_test.customError) " + + "(error: 10) 10\n"}, + } +} + +// TestSpew executes all of the tests described by spewTests. +func TestSpew(t *testing.T) { + initSpewTests() + + t.Logf("Running %d tests", len(spewTests)) + for i, test := range spewTests { + buf := new(bytes.Buffer) + switch test.f { + case fCSFdump: + test.cs.Fdump(buf, test.in) + + case fCSFprint: + test.cs.Fprint(buf, test.in) + + case fCSFprintf: + test.cs.Fprintf(buf, test.format, test.in) + + case fCSFprintln: + test.cs.Fprintln(buf, test.in) + + case fCSPrint: + b, err := redirStdout(func() { test.cs.Print(test.in) }) + if err != nil { + t.Errorf("%v #%d %v", test.f, i, err) + continue + } + buf.Write(b) + + case fCSPrintln: + b, err := redirStdout(func() { test.cs.Println(test.in) }) + if err != nil { + t.Errorf("%v #%d %v", test.f, i, err) + continue + } + buf.Write(b) + + case fCSSdump: + str := test.cs.Sdump(test.in) + buf.WriteString(str) + + case fCSSprint: + str := test.cs.Sprint(test.in) + buf.WriteString(str) + + case fCSSprintf: + str := test.cs.Sprintf(test.format, test.in) + buf.WriteString(str) + + case fCSSprintln: + str := test.cs.Sprintln(test.in) + buf.WriteString(str) + + case fCSErrorf: + err := test.cs.Errorf(test.format, test.in) + buf.WriteString(err.Error()) + + case fCSNewFormatter: + fmt.Fprintf(buf, test.format, test.cs.NewFormatter(test.in)) + + case fErrorf: + err := spew.Errorf(test.format, test.in) + buf.WriteString(err.Error()) + + case fFprint: + spew.Fprint(buf, test.in) + + case fFprintln: + spew.Fprintln(buf, test.in) + + case fPrint: + b, err := redirStdout(func() { spew.Print(test.in) }) + if err != nil { + t.Errorf("%v #%d %v", test.f, i, err) + continue + } + buf.Write(b) + + case fPrintln: + b, err := redirStdout(func() { spew.Println(test.in) }) + if err != nil { + t.Errorf("%v #%d %v", test.f, i, err) + continue + } + buf.Write(b) + + case fSdump: + str := spew.Sdump(test.in) + buf.WriteString(str) + + case fSprint: + str := spew.Sprint(test.in) + buf.WriteString(str) + + case fSprintf: + str := spew.Sprintf(test.format, test.in) + buf.WriteString(str) + + case fSprintln: + str := spew.Sprintln(test.in) + buf.WriteString(str) + + default: + t.Errorf("%v #%d unrecognized function", test.f, i) + continue + } + s := buf.String() + if test.want != s { + t.Errorf("ConfigState #%d\n got: %s want: %s", i, s, test.want) + continue + } + } +} diff --git a/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/testdata/dumpcgo.go b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/testdata/dumpcgo.go new file mode 100644 index 0000000000..5c87dd456e --- /dev/null +++ b/Godeps/_workspace/src/github.com/davecgh/go-spew/spew/testdata/dumpcgo.go @@ -0,0 +1,82 @@ +// Copyright (c) 2013 Dave Collins +// +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// NOTE: Due to the following build constraints, this file will only be compiled +// when both cgo is supported and "-tags testcgo" is added to the go test +// command line. This code should really only be in the dumpcgo_test.go file, +// but unfortunately Go will not allow cgo in test files, so this is a +// workaround to allow cgo types to be tested. This configuration is used +// because spew itself does not require cgo to run even though it does handle +// certain cgo types specially. Rather than forcing all clients to require cgo +// and an external C compiler just to run the tests, this scheme makes them +// optional. +// +build cgo,testcgo + +package testdata + +/* +#include +typedef unsigned char custom_uchar_t; + +char *ncp = 0; +char *cp = "test"; +char ca[6] = {'t', 'e', 's', 't', '2', '\0'}; +unsigned char uca[6] = {'t', 'e', 's', 't', '3', '\0'}; +signed char sca[6] = {'t', 'e', 's', 't', '4', '\0'}; +uint8_t ui8ta[6] = {'t', 'e', 's', 't', '5', '\0'}; +custom_uchar_t tuca[6] = {'t', 'e', 's', 't', '6', '\0'}; +*/ +import "C" + +// GetCgoNullCharPointer returns a null char pointer via cgo. This is only +// used for tests. +func GetCgoNullCharPointer() interface{} { + return C.ncp +} + +// GetCgoCharPointer returns a char pointer via cgo. This is only used for +// tests. +func GetCgoCharPointer() interface{} { + return C.cp +} + +// GetCgoCharArray returns a char array via cgo and the array's len and cap. +// This is only used for tests. +func GetCgoCharArray() (interface{}, int, int) { + return C.ca, len(C.ca), cap(C.ca) +} + +// GetCgoUnsignedCharArray returns an unsigned char array via cgo and the +// array's len and cap. This is only used for tests. +func GetCgoUnsignedCharArray() (interface{}, int, int) { + return C.uca, len(C.uca), cap(C.uca) +} + +// GetCgoSignedCharArray returns a signed char array via cgo and the array's len +// and cap. This is only used for tests. +func GetCgoSignedCharArray() (interface{}, int, int) { + return C.sca, len(C.sca), cap(C.sca) +} + +// GetCgoUint8tArray returns a uint8_t array via cgo and the array's len and +// cap. This is only used for tests. +func GetCgoUint8tArray() (interface{}, int, int) { + return C.ui8ta, len(C.ui8ta), cap(C.ui8ta) +} + +// GetCgoTypdefedUnsignedCharArray returns a typedefed unsigned char array via +// cgo and the array's len and cap. This is only used for tests. +func GetCgoTypdefedUnsignedCharArray() (interface{}, int, int) { + return C.tuca, len(C.tuca), cap(C.tuca) +} diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/README.md b/Godeps/_workspace/src/github.com/disintegration/imaging/README.md index 16ac8cf6c4..25d836cef8 100644 --- a/Godeps/_workspace/src/github.com/disintegration/imaging/README.md +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/README.md @@ -32,8 +32,8 @@ dstImage800 := imaging.Resize(srcImage, 800, 0, imaging.Lanczos) // scale down srcImage to fit the 800x600px bounding box dstImageFit := imaging.Fit(srcImage, 800, 600, imaging.Lanczos) -// resize and crop the srcImage to make a 100x100px thumbnail -dstImageThumb := imaging.Thumbnail(srcImage, 100, 100, imaging.Lanczos) +// resize and crop the srcImage to fill the 100x100px area +dstImageFill := imaging.Fill(srcImage, 100, 100, imaging.Center, imaging.Lanczos) ``` Imaging supports image resizing using various resampling filters. The most notable ones: @@ -63,6 +63,40 @@ Filter | Resize result `imaging.Gaussian` | ![dstImage](http://disintegration.github.io/imaging/out_resize_down_gaussian.png) `imaging.Lanczos` | ![dstImage](http://disintegration.github.io/imaging/out_resize_down_lanczos.png) +**Resize functions comparison** + +Original image: + +![srcImage](http://disintegration.github.io/imaging/in.jpg) + +Resize the image to width=100px and height=100px: + +```go +dstImage := imaging.Resize(srcImage, 100, 100, imaging.Lanczos) +``` +![dstImage](http://disintegration.github.io/imaging/out-comp-resize.jpg) + +Resize the image to width=100px preserving the aspect ratio: + +```go +dstImage := imaging.Resize(srcImage, 100, 0, imaging.Lanczos) +``` +![dstImage](http://disintegration.github.io/imaging/out-comp-fit.jpg) + +Resize the image to fit the 100x100px boundng box preserving the aspect ratio: + +```go +dstImage := imaging.Fit(srcImage, 100, 100, imaging.Lanczos) +``` +![dstImage](http://disintegration.github.io/imaging/out-comp-fit.jpg) + +Resize and crop the image with a center anchor point to fill the 100x100px area: + +```go +dstImage := imaging.Fill(srcImage, 100, 100, imaging.Center, imaging.Lanczos) +``` +![dstImage](http://disintegration.github.io/imaging/out-comp-fill.jpg) + ### Gaussian Blur ```go dstImage := imaging.Blur(srcImage, 0.5) diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/adjust_test.go b/Godeps/_workspace/src/github.com/disintegration/imaging/adjust_test.go new file mode 100644 index 0000000000..99898b0dcf --- /dev/null +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/adjust_test.go @@ -0,0 +1,504 @@ +package imaging + +import ( + "image" + "testing" +) + +func TestGrayscale(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "Grayscale 3x3", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0x3d, 0x3d, 0x3d, 0x01, 0x78, 0x78, 0x78, 0x02, 0x17, 0x17, 0x17, 0x03, + 0x1f, 0x1f, 0x1f, 0xff, 0x25, 0x25, 0x25, 0xff, 0x66, 0x66, 0x66, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + } + for _, d := range td { + got := Grayscale(d.src) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestInvert(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "Invert 3x3", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0x33, 0xff, 0xff, 0x01, 0xff, 0x33, 0xff, 0x02, 0xff, 0xff, 0x33, 0x03, + 0xee, 0xdd, 0xcc, 0xff, 0xcc, 0xdd, 0xee, 0xff, 0x55, 0xcc, 0x44, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0x00, 0x00, 0x00, 0xff, + }, + }, + }, + } + for _, d := range td { + got := Invert(d.src) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestAdjustContrast(t *testing.T) { + td := []struct { + desc string + src image.Image + p float64 + want *image.NRGBA + }{ + { + "AdjustContrast 3x3 10", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 10, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xd5, 0x00, 0x00, 0x01, 0x00, 0xd5, 0x00, 0x02, 0x00, 0x00, 0xd5, 0x03, + 0x05, 0x18, 0x2b, 0xff, 0x2b, 0x18, 0x05, 0xff, 0xaf, 0x2b, 0xc2, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + { + "AdjustContrast 3x3 100", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 100, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xff, 0x00, 0x00, 0x01, 0x00, 0xff, 0x00, 0x02, 0x00, 0x00, 0xff, 0x03, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + { + "AdjustContrast 3x3 -10", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + -10, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xc4, 0x0d, 0x0d, 0x01, 0x0d, 0xc4, 0x0d, 0x02, 0x0d, 0x0d, 0xc4, 0x03, + 0x1c, 0x2b, 0x3b, 0xff, 0x3b, 0x2b, 0x1c, 0xff, 0xa6, 0x3b, 0xb5, 0xff, + 0x0d, 0x0d, 0x0d, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0xf2, 0xf2, 0xf2, 0xff, + }, + }, + }, + { + "AdjustContrast 3x3 -100", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + -100, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0x80, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0x02, 0x80, 0x80, 0x80, 0x03, + 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0xff, + 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0xff, + }, + }, + }, + { + "AdjustContrast 3x3 0", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 0, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + } + for _, d := range td { + got := AdjustContrast(d.src, d.p) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestAdjustBrightness(t *testing.T) { + td := []struct { + desc string + src image.Image + p float64 + want *image.NRGBA + }{ + { + "AdjustBrightness 3x3 10", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 10, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xe6, 0x1a, 0x1a, 0x01, 0x1a, 0xe6, 0x1a, 0x02, 0x1a, 0x1a, 0xe6, 0x03, + 0x2b, 0x3c, 0x4d, 0xff, 0x4d, 0x3c, 0x2b, 0xff, 0xc4, 0x4d, 0xd5, 0xff, + 0x1a, 0x1a, 0x1a, 0xff, 0x4d, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + { + "AdjustBrightness 3x3 100", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 100, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff, 0x03, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + { + "AdjustBrightness 3x3 -10", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + -10, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xb3, 0x00, 0x00, 0x01, 0x00, 0xb3, 0x00, 0x02, 0x00, 0x00, 0xb3, 0x03, + 0x00, 0x09, 0x1a, 0xff, 0x1a, 0x09, 0x00, 0xff, 0x91, 0x1a, 0xa2, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x1a, 0x1a, 0x1a, 0xff, 0xe6, 0xe6, 0xe6, 0xff, + }, + }, + }, + { + "AdjustBrightness 3x3 -100", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + -100, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, + }, + }, + }, + { + "AdjustBrightness 3x3 0", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 0, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + } + for _, d := range td { + got := AdjustBrightness(d.src, d.p) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestAdjustGamma(t *testing.T) { + td := []struct { + desc string + src image.Image + p float64 + want *image.NRGBA + }{ + { + "AdjustGamma 3x3 0.75", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 0.75, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xbd, 0x00, 0x00, 0x01, 0x00, 0xbd, 0x00, 0x02, 0x00, 0x00, 0xbd, 0x03, + 0x07, 0x11, 0x1e, 0xff, 0x1e, 0x11, 0x07, 0xff, 0x95, 0x1e, 0xa9, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x1e, 0x1e, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + { + "AdjustGamma 3x3 1.5", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 1.5, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xdc, 0x00, 0x00, 0x01, 0x00, 0xdc, 0x00, 0x02, 0x00, 0x00, 0xdc, 0x03, + 0x2a, 0x43, 0x57, 0xff, 0x57, 0x43, 0x2a, 0xff, 0xc3, 0x57, 0xcf, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x57, 0x57, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + { + "AdjustGamma 3x3 1.0", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 1.0, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + } + for _, d := range td { + got := AdjustGamma(d.src, d.p) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestAdjustSigmoid(t *testing.T) { + td := []struct { + desc string + src image.Image + m float64 + p float64 + want *image.NRGBA + }{ + { + "AdjustSigmoid 3x3 0.5 3.0", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 0.5, + 3.0, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xd4, 0x00, 0x00, 0x01, 0x00, 0xd4, 0x00, 0x02, 0x00, 0x00, 0xd4, 0x03, + 0x0d, 0x1b, 0x2b, 0xff, 0x2b, 0x1b, 0x0d, 0xff, 0xb1, 0x2b, 0xc3, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + { + "AdjustSigmoid 3x3 0.5 -3.0", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 0.5, + -3.0, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xc4, 0x00, 0x00, 0x01, 0x00, 0xc4, 0x00, 0x02, 0x00, 0x00, 0xc4, 0x03, + 0x16, 0x2a, 0x3b, 0xff, 0x3b, 0x2a, 0x16, 0xff, 0xa4, 0x3b, 0xb3, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + { + "AdjustSigmoid 3x3 0.5 0.0", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 0.5, + 0.0, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0x00, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x00, 0xcc, 0x03, + 0x11, 0x22, 0x33, 0xff, 0x33, 0x22, 0x11, 0xff, 0xaa, 0x33, 0xbb, 0xff, + 0x00, 0x00, 0x00, 0xff, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + }, + } + for _, d := range td { + got := AdjustSigmoid(d.src, d.m, d.p) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/effects_test.go b/Godeps/_workspace/src/github.com/disintegration/imaging/effects_test.go new file mode 100644 index 0000000000..b7de0974cc --- /dev/null +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/effects_test.go @@ -0,0 +1,128 @@ +package imaging + +import ( + "image" + "testing" +) + +func TestBlur(t *testing.T) { + td := []struct { + desc string + src image.Image + sigma float64 + want *image.NRGBA + }{ + { + "Blur 3x3 0.5", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0xaa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + }, + 0.5, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0x01, 0x02, 0x04, 0x04, 0x0a, 0x10, 0x18, 0x18, 0x01, 0x02, 0x04, 0x04, + 0x09, 0x10, 0x18, 0x18, 0x3f, 0x69, 0x9e, 0x9e, 0x09, 0x10, 0x18, 0x18, + 0x01, 0x02, 0x04, 0x04, 0x0a, 0x10, 0x18, 0x18, 0x01, 0x02, 0x04, 0x04, + }, + }, + }, + { + + "Blur 3x3 10", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0xaa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + }, + 10, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0x0b, 0x13, 0x1c, 0x1c, 0x0b, 0x13, 0x1c, 0x1c, 0x0b, 0x13, 0x1c, 0x1c, + 0x0b, 0x13, 0x1c, 0x1c, 0x0b, 0x13, 0x1c, 0x1c, 0x0b, 0x13, 0x1c, 0x1c, + 0x0b, 0x13, 0x1c, 0x1c, 0x0b, 0x13, 0x1c, 0x1c, 0x0b, 0x13, 0x1c, 0x1c, + }, + }, + }, + } + for _, d := range td { + got := Blur(d.src, d.sigma) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestSharpen(t *testing.T) { + td := []struct { + desc string + src image.Image + sigma float64 + want *image.NRGBA + }{ + { + "Sharpen 3x3 0.5", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + }, + }, + 0.5, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0x66, 0x66, 0x66, 0x66, 0x64, 0x64, 0x64, 0x64, 0x66, 0x66, 0x66, 0x66, + 0x64, 0x64, 0x64, 0x64, 0x7e, 0x7e, 0x7e, 0x7e, 0x64, 0x64, 0x64, 0x64, + 0x66, 0x66, 0x66, 0x66, 0x64, 0x64, 0x64, 0x64, 0x66, 0x66, 0x66, 0x66}, + }, + }, + { + + "Sharpen 3x3 10", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}, + }, + 100, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 3), + Stride: 3 * 4, + Pix: []uint8{ + 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, + 0x64, 0x64, 0x64, 0x64, 0x86, 0x86, 0x86, 0x86, 0x64, 0x64, 0x64, 0x64, + 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, + }, + }, + }, + } + for _, d := range td { + got := Sharpen(d.src, d.sigma) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/helpers.go b/Godeps/_workspace/src/github.com/disintegration/imaging/helpers.go index 983b64d718..247962f2d8 100644 --- a/Godeps/_workspace/src/github.com/disintegration/imaging/helpers.go +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/helpers.go @@ -20,8 +20,8 @@ import ( "path/filepath" "strings" - "golang.org/x/image/bmp" - "golang.org/x/image/tiff" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/bmp" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/tiff" ) type Format int @@ -226,9 +226,13 @@ func Clone(img image.Image) *image.NRGBA { dst.Pix[di+1] = src.Pix[si+1] dst.Pix[di+2] = src.Pix[si+2] default: - dst.Pix[di+0] = uint8(uint16(src.Pix[si+0]) * 0xff / uint16(a)) - dst.Pix[di+1] = uint8(uint16(src.Pix[si+1]) * 0xff / uint16(a)) - dst.Pix[di+2] = uint8(uint16(src.Pix[si+2]) * 0xff / uint16(a)) + var tmp uint16 + tmp = uint16(src.Pix[si+0]) * 0xff / uint16(a) + dst.Pix[di+0] = uint8(tmp) + tmp = uint16(src.Pix[si+1]) * 0xff / uint16(a) + dst.Pix[di+1] = uint8(tmp) + tmp = uint16(src.Pix[si+2]) * 0xff / uint16(a) + dst.Pix[di+2] = uint8(tmp) } di += 4 @@ -257,9 +261,13 @@ func Clone(img image.Image) *image.NRGBA { dst.Pix[di+1] = src.Pix[si+2] dst.Pix[di+2] = src.Pix[si+4] default: - dst.Pix[di+0] = uint8(uint16(src.Pix[si+0]) * 0xff / uint16(a)) - dst.Pix[di+1] = uint8(uint16(src.Pix[si+2]) * 0xff / uint16(a)) - dst.Pix[di+2] = uint8(uint16(src.Pix[si+4]) * 0xff / uint16(a)) + var tmp uint16 + tmp = uint16(src.Pix[si+0]) * 0xff / uint16(a) + dst.Pix[di+0] = uint8(tmp) + tmp = uint16(src.Pix[si+2]) * 0xff / uint16(a) + dst.Pix[di+1] = uint8(tmp) + tmp = uint16(src.Pix[si+4]) * 0xff / uint16(a) + dst.Pix[di+2] = uint8(tmp) } di += 4 diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/helpers_test.go b/Godeps/_workspace/src/github.com/disintegration/imaging/helpers_test.go new file mode 100644 index 0000000000..2d611a0081 --- /dev/null +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/helpers_test.go @@ -0,0 +1,361 @@ +package imaging + +import ( + "bytes" + "image" + "image/color" + "testing" +) + +func compareNRGBA(img1, img2 *image.NRGBA, delta int) bool { + if !img1.Rect.Eq(img2.Rect) { + return false + } + + if len(img1.Pix) != len(img2.Pix) { + return false + } + + for i := 0; i < len(img1.Pix); i++ { + if absint(int(img1.Pix[i])-int(img2.Pix[i])) > delta { + return false + } + } + + return true +} + +func TestEncodeDecode(t *testing.T) { + imgWithAlpha := image.NewNRGBA(image.Rect(0, 0, 3, 3)) + imgWithAlpha.Pix = []uint8{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 244, 245, 246, 247, 248, 249, 250, 252, 252, 253, 254, 255, + } + + imgWithoutAlpha := image.NewNRGBA(image.Rect(0, 0, 3, 3)) + imgWithoutAlpha.Pix = []uint8{ + 0, 1, 2, 255, 4, 5, 6, 255, 8, 9, 10, 255, + 127, 128, 129, 255, 131, 132, 133, 255, 135, 136, 137, 255, + 244, 245, 246, 255, 248, 249, 250, 255, 252, 253, 254, 255, + } + + for _, format := range []Format{JPEG, PNG, GIF, BMP, TIFF} { + img := imgWithoutAlpha + if format == PNG { + img = imgWithAlpha + } + + buf := &bytes.Buffer{} + err := Encode(buf, img, format) + if err != nil { + t.Errorf("fail encoding format %s", format) + continue + } + + img2, err := Decode(buf) + if err != nil { + t.Errorf("fail decoding format %s", format) + continue + } + img2cloned := Clone(img2) + + delta := 0 + if format == JPEG { + delta = 3 + } else if format == GIF { + delta = 16 + } + + if !compareNRGBA(img, img2cloned, delta) { + t.Errorf("test [DecodeEncode %s] failed: %#v %#v", format, img, img2cloned) + continue + } + } + + buf := &bytes.Buffer{} + err := Encode(buf, imgWithAlpha, Format(100)) + if err != ErrUnsupportedFormat { + t.Errorf("expected ErrUnsupportedFormat") + } +} + +func TestNew(t *testing.T) { + td := []struct { + desc string + w, h int + c color.Color + dstBounds image.Rectangle + dstPix []uint8 + }{ + { + "New 1x1 black", + 1, 1, + color.NRGBA{0, 0, 0, 0}, + image.Rect(0, 0, 1, 1), + []uint8{0x00, 0x00, 0x00, 0x00}, + }, + { + "New 1x2 red", + 1, 2, + color.NRGBA{255, 0, 0, 255}, + image.Rect(0, 0, 1, 2), + []uint8{0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff}, + }, + { + "New 2x1 white", + 2, 1, + color.NRGBA{255, 255, 255, 255}, + image.Rect(0, 0, 2, 1), + []uint8{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, + }, + } + + for _, d := range td { + got := New(d.w, d.h, d.c) + want := image.NewNRGBA(d.dstBounds) + want.Pix = d.dstPix + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestClone(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "Clone NRGBA", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 0, 1), + Stride: 1 * 4, + Pix: []uint8{0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff}, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 2), + Stride: 1 * 4, + Pix: []uint8{0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff}, + }, + }, + { + "Clone NRGBA64", + &image.NRGBA64{ + Rect: image.Rect(-1, -1, 0, 1), + Stride: 1 * 8, + Pix: []uint8{ + 0x00, 0x00, 0x11, 0x11, 0x22, 0x22, 0x33, 0x33, + 0xcc, 0xcc, 0xdd, 0xdd, 0xee, 0xee, 0xff, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 2), + Stride: 1 * 4, + Pix: []uint8{0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff}, + }, + }, + { + "Clone RGBA", + &image.RGBA{ + Rect: image.Rect(-1, -1, 0, 1), + Stride: 1 * 4, + Pix: []uint8{0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff}, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 2), + Stride: 1 * 4, + Pix: []uint8{0x00, 0x55, 0xaa, 0x33, 0xcc, 0xdd, 0xee, 0xff}, + }, + }, + { + "Clone RGBA64", + &image.RGBA64{ + Rect: image.Rect(-1, -1, 0, 1), + Stride: 1 * 8, + Pix: []uint8{ + 0x00, 0x00, 0x11, 0x11, 0x22, 0x22, 0x33, 0x33, + 0xcc, 0xcc, 0xdd, 0xdd, 0xee, 0xee, 0xff, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 2), + Stride: 1 * 4, + Pix: []uint8{0x00, 0x55, 0xaa, 0x33, 0xcc, 0xdd, 0xee, 0xff}, + }, + }, + { + "Clone Gray", + &image.Gray{ + Rect: image.Rect(-1, -1, 0, 1), + Stride: 1 * 1, + Pix: []uint8{0x11, 0xee}, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 2), + Stride: 1 * 4, + Pix: []uint8{0x11, 0x11, 0x11, 0xff, 0xee, 0xee, 0xee, 0xff}, + }, + }, + { + "Clone Gray16", + &image.Gray16{ + Rect: image.Rect(-1, -1, 0, 1), + Stride: 1 * 2, + Pix: []uint8{0x11, 0x11, 0xee, 0xee}, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 2), + Stride: 1 * 4, + Pix: []uint8{0x11, 0x11, 0x11, 0xff, 0xee, 0xee, 0xee, 0xff}, + }, + }, + { + "Clone Alpha", + &image.Alpha{ + Rect: image.Rect(-1, -1, 0, 1), + Stride: 1 * 1, + Pix: []uint8{0x11, 0xee}, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 2), + Stride: 1 * 4, + Pix: []uint8{0xff, 0xff, 0xff, 0x11, 0xff, 0xff, 0xff, 0xee}, + }, + }, + { + "Clone YCbCr", + &image.YCbCr{ + Rect: image.Rect(-1, -1, 5, 0), + SubsampleRatio: image.YCbCrSubsampleRatio444, + YStride: 6, + CStride: 6, + Y: []uint8{0x00, 0xff, 0x7f, 0x26, 0x4b, 0x0e}, + Cb: []uint8{0x80, 0x80, 0x80, 0x6b, 0x56, 0xc0}, + Cr: []uint8{0x80, 0x80, 0x80, 0xc0, 0x4b, 0x76}, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 6, 1), + Stride: 6 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x7f, 0x7f, 0xff, + 0x7f, 0x00, 0x00, 0xff, + 0x00, 0x7f, 0x00, 0xff, + 0x00, 0x00, 0x7f, 0xff, + }, + }, + }, + { + "Clone YCbCr 444", + &image.YCbCr{ + Y: []uint8{0x4c, 0x69, 0x1d, 0xb1, 0x96, 0xe2, 0x26, 0x34, 0xe, 0x59, 0x4b, 0x71, 0x0, 0x4c, 0x99, 0xff}, + Cb: []uint8{0x55, 0xd4, 0xff, 0x8e, 0x2c, 0x01, 0x6b, 0xaa, 0xc0, 0x95, 0x56, 0x40, 0x80, 0x80, 0x80, 0x80}, + Cr: []uint8{0xff, 0xeb, 0x6b, 0x36, 0x15, 0x95, 0xc0, 0xb5, 0x76, 0x41, 0x4b, 0x8c, 0x80, 0x80, 0x80, 0x80}, + YStride: 4, + CStride: 4, + SubsampleRatio: image.YCbCrSubsampleRatio444, + Rect: image.Rectangle{Min: image.Point{X: 0, Y: 0}, Max: image.Point{X: 4, Y: 4}}, + }, + &image.NRGBA{ + Pix: []uint8{0xff, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0x49, 0xe1, 0xca, 0xff, 0x0, 0xff, 0x0, 0xff, 0xff, 0xff, 0x0, 0xff, 0x7f, 0x0, 0x0, 0xff, 0x7f, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x7f, 0x7f, 0xff, 0x0, 0x7f, 0x0, 0xff, 0x82, 0x7f, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x99, 0x99, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff}, + Stride: 16, + Rect: image.Rectangle{Min: image.Point{X: 0, Y: 0}, Max: image.Point{X: 4, Y: 4}}, + }, + }, + { + "Clone YCbCr 440", + &image.YCbCr{ + Y: []uint8{0x4c, 0x69, 0x1d, 0xb1, 0x96, 0xe2, 0x26, 0x34, 0xe, 0x59, 0x4b, 0x71, 0x0, 0x4c, 0x99, 0xff}, + Cb: []uint8{0x2c, 0x01, 0x6b, 0xaa, 0x80, 0x80, 0x80, 0x80}, + Cr: []uint8{0x15, 0x95, 0xc0, 0xb5, 0x80, 0x80, 0x80, 0x80}, + YStride: 4, + CStride: 4, + SubsampleRatio: image.YCbCrSubsampleRatio440, + Rect: image.Rectangle{Min: image.Point{X: 0, Y: 0}, Max: image.Point{X: 4, Y: 4}}, + }, + &image.NRGBA{ + Pix: []uint8{0x0, 0xb5, 0x0, 0xff, 0x86, 0x86, 0x0, 0xff, 0x77, 0x0, 0x0, 0xff, 0xfb, 0x7d, 0xfb, 0xff, 0x0, 0xff, 0x1, 0xff, 0xff, 0xff, 0x1, 0xff, 0x80, 0x0, 0x1, 0xff, 0x7e, 0x0, 0x7e, 0xff, 0xe, 0xe, 0xe, 0xff, 0x59, 0x59, 0x59, 0xff, 0x4b, 0x4b, 0x4b, 0xff, 0x71, 0x71, 0x71, 0xff, 0x0, 0x0, 0x0, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x99, 0x99, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff}, + Stride: 16, + Rect: image.Rectangle{Min: image.Point{X: 0, Y: 0}, Max: image.Point{X: 4, Y: 4}}, + }, + }, + { + "Clone YCbCr 422", + &image.YCbCr{ + Y: []uint8{0x4c, 0x69, 0x1d, 0xb1, 0x96, 0xe2, 0x26, 0x34, 0xe, 0x59, 0x4b, 0x71, 0x0, 0x4c, 0x99, 0xff}, + Cb: []uint8{0xd4, 0x8e, 0x01, 0xaa, 0x95, 0x40, 0x80, 0x80}, + Cr: []uint8{0xeb, 0x36, 0x95, 0xb5, 0x41, 0x8c, 0x80, 0x80}, + YStride: 4, + CStride: 2, + SubsampleRatio: image.YCbCrSubsampleRatio422, + Rect: image.Rectangle{Min: image.Point{X: 0, Y: 0}, Max: image.Point{X: 4, Y: 4}}, + }, + &image.NRGBA{ + Pix: []uint8{0xe2, 0x0, 0xe1, 0xff, 0xff, 0x0, 0xfe, 0xff, 0x0, 0x4d, 0x36, 0xff, 0x49, 0xe1, 0xca, 0xff, 0xb3, 0xb3, 0x0, 0xff, 0xff, 0xff, 0x1, 0xff, 0x70, 0x0, 0x70, 0xff, 0x7e, 0x0, 0x7e, 0xff, 0x0, 0x34, 0x33, 0xff, 0x1, 0x7f, 0x7e, 0xff, 0x5c, 0x58, 0x0, 0xff, 0x82, 0x7e, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x99, 0x99, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff}, + Stride: 16, + Rect: image.Rectangle{Min: image.Point{X: 0, Y: 0}, Max: image.Point{X: 4, Y: 4}}, + }, + }, + { + "Clone YCbCr 420", + &image.YCbCr{ + Y: []uint8{0x4c, 0x69, 0x1d, 0xb1, 0x96, 0xe2, 0x26, 0x34, 0xe, 0x59, 0x4b, 0x71, 0x0, 0x4c, 0x99, 0xff}, + Cb: []uint8{0x01, 0xaa, 0x80, 0x80}, + Cr: []uint8{0x95, 0xb5, 0x80, 0x80}, + YStride: 4, CStride: 2, + SubsampleRatio: image.YCbCrSubsampleRatio420, + Rect: image.Rectangle{Min: image.Point{X: 0, Y: 0}, Max: image.Point{X: 4, Y: 4}}, + }, + &image.NRGBA{ + Pix: []uint8{0x69, 0x69, 0x0, 0xff, 0x86, 0x86, 0x0, 0xff, 0x67, 0x0, 0x67, 0xff, 0xfb, 0x7d, 0xfb, 0xff, 0xb3, 0xb3, 0x0, 0xff, 0xff, 0xff, 0x1, 0xff, 0x70, 0x0, 0x70, 0xff, 0x7e, 0x0, 0x7e, 0xff, 0xe, 0xe, 0xe, 0xff, 0x59, 0x59, 0x59, 0xff, 0x4b, 0x4b, 0x4b, 0xff, 0x71, 0x71, 0x71, 0xff, 0x0, 0x0, 0x0, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x99, 0x99, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff}, + Stride: 16, + Rect: image.Rectangle{Min: image.Point{X: 0, Y: 0}, Max: image.Point{X: 4, Y: 4}}, + }, + }, + { + "Clone Paletted", + &image.Paletted{ + Rect: image.Rect(-1, -1, 5, 0), + Stride: 6 * 1, + Palette: color.Palette{ + color.NRGBA{R: 0x00, G: 0x00, B: 0x00, A: 0xff}, + color.NRGBA{R: 0xff, G: 0xff, B: 0xff, A: 0xff}, + color.NRGBA{R: 0x7f, G: 0x7f, B: 0x7f, A: 0xff}, + color.NRGBA{R: 0x7f, G: 0x00, B: 0x00, A: 0xff}, + color.NRGBA{R: 0x00, G: 0x7f, B: 0x00, A: 0xff}, + color.NRGBA{R: 0x00, G: 0x00, B: 0x7f, A: 0xff}, + }, + Pix: []uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5}, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 6, 1), + Stride: 6 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x7f, 0x7f, 0xff, + 0x7f, 0x00, 0x00, 0xff, + 0x00, 0x7f, 0x00, 0xff, + 0x00, 0x00, 0x7f, 0xff, + }, + }, + }, + } + + for _, d := range td { + got := Clone(d.src) + want := d.want + + delta := 0 + if _, ok := d.src.(*image.YCbCr); ok { + delta = 1 + } + + if !compareNRGBA(got, want, delta) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/resize.go b/Godeps/_workspace/src/github.com/disintegration/imaging/resize.go index d2efd5c837..3c792e9041 100644 --- a/Godeps/_workspace/src/github.com/disintegration/imaging/resize.go +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/resize.go @@ -267,20 +267,21 @@ func Fit(img image.Image, width, height int, filter ResampleFilter) *image.NRGBA return Resize(img, newW, newH, filter) } -// Thumbnail scales the image up or down using the specified resample filter, crops it -// to the specified width and hight and returns the transformed image. +// Fill scales the image to the smallest possible size that will cover the specified dimensions, +// crops the resized image to the specified dimensions using the given anchor point and returns +// the transformed image. // // Supported resample filters: NearestNeighbor, Box, Linear, Hermite, MitchellNetravali, // CatmullRom, BSpline, Gaussian, Lanczos, Hann, Hamming, Blackman, Bartlett, Welch, Cosine. // // Usage example: // -// dstImage := imaging.Thumbnail(srcImage, 100, 100, imaging.Lanczos) +// dstImage := imaging.Fill(srcImage, 800, 600, imaging.Center, imaging.Lanczos) // -func Thumbnail(img image.Image, width, height int, filter ResampleFilter) *image.NRGBA { - thumbW, thumbH := width, height +func Fill(img image.Image, width, height int, anchor Anchor, filter ResampleFilter) *image.NRGBA { + minW, minH := width, height - if thumbW <= 0 || thumbH <= 0 { + if minW <= 0 || minH <= 0 { return &image.NRGBA{} } @@ -292,17 +293,35 @@ func Thumbnail(img image.Image, width, height int, filter ResampleFilter) *image return &image.NRGBA{} } - srcAspectRatio := float64(srcW) / float64(srcH) - thumbAspectRatio := float64(thumbW) / float64(thumbH) - - var tmp image.Image - if srcAspectRatio > thumbAspectRatio { - tmp = Resize(img, 0, thumbH, filter) - } else { - tmp = Resize(img, thumbW, 0, filter) + if srcW == minW && srcH == minH { + return Clone(img) } - return CropCenter(tmp, thumbW, thumbH) + srcAspectRatio := float64(srcW) / float64(srcH) + minAspectRatio := float64(minW) / float64(minH) + + var tmp *image.NRGBA + if srcAspectRatio < minAspectRatio { + tmp = Resize(img, minW, 0, filter) + } else { + tmp = Resize(img, 0, minH, filter) + } + + return CropAnchor(tmp, minW, minH, anchor) +} + +// Thumbnail scales the image up or down using the specified resample filter, crops it +// to the specified width and hight and returns the transformed image. +// +// Supported resample filters: NearestNeighbor, Box, Linear, Hermite, MitchellNetravali, +// CatmullRom, BSpline, Gaussian, Lanczos, Hann, Hamming, Blackman, Bartlett, Welch, Cosine. +// +// Usage example: +// +// dstImage := imaging.Thumbnail(srcImage, 100, 100, imaging.Lanczos) +// +func Thumbnail(img image.Image, width, height int, filter ResampleFilter) *image.NRGBA { + return Fill(img, width, height, Center, filter) } // Resample filter struct. It can be used to make custom filters. diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/resize_test.go b/Godeps/_workspace/src/github.com/disintegration/imaging/resize_test.go new file mode 100644 index 0000000000..bc575dcbfd --- /dev/null +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/resize_test.go @@ -0,0 +1,455 @@ +package imaging + +import ( + "image" + "testing" +) + +func TestResize(t *testing.T) { + td := []struct { + desc string + src image.Image + w, h int + f ResampleFilter + want *image.NRGBA + }{ + { + "Resize 2x2 1x1 box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + 1, 1, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 1), + Stride: 1 * 4, + Pix: []uint8{0x40, 0x40, 0x40, 0xc0}, + }, + }, + { + "Resize 2x2 2x2 box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + 2, 2, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + }, + { + "Resize 3x1 1x1 nearest", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 2, 0), + Stride: 3 * 4, + Pix: []uint8{ + 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + 1, 1, + NearestNeighbor, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 1), + Stride: 1 * 4, + Pix: []uint8{0x00, 0xff, 0x00, 0xff}, + }, + }, + { + "Resize 2x2 0x4 box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + 0, 4, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 4, 4), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + }, + { + "Resize 2x2 4x0 linear", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + 4, 0, + Linear, + &image.NRGBA{ + Rect: image.Rect(0, 0, 4, 4), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0xbf, 0x00, 0x00, 0xbf, 0xff, 0x00, 0x00, 0xff, + 0x00, 0x40, 0x00, 0x40, 0x30, 0x30, 0x10, 0x70, 0x8f, 0x10, 0x30, 0xcf, 0xbf, 0x00, 0x40, 0xff, + 0x00, 0xbf, 0x00, 0xbf, 0x10, 0x8f, 0x30, 0xcf, 0x30, 0x30, 0x8f, 0xef, 0x40, 0x00, 0xbf, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0xbf, 0x40, 0xff, 0x00, 0x40, 0xbf, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + }, + } + for _, d := range td { + got := Resize(d.src, d.w, d.h, d.f) + want := d.want + if !compareNRGBA(got, want, 1) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestFit(t *testing.T) { + td := []struct { + desc string + src image.Image + w, h int + f ResampleFilter + want *image.NRGBA + }{ + { + "Fit 2x2 1x10 box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + 1, 10, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 1), + Stride: 1 * 4, + Pix: []uint8{0x40, 0x40, 0x40, 0xc0}, + }, + }, + { + "Fit 2x2 10x1 box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + 10, 1, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 1), + Stride: 1 * 4, + Pix: []uint8{0x40, 0x40, 0x40, 0xc0}, + }, + }, + { + "Fit 2x2 10x10 box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + 10, 10, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + }, + }, + }, + } + for _, d := range td { + got := Fit(d.src, d.w, d.h, d.f) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestFill(t *testing.T) { + td := []struct { + desc string + src image.Image + w, h int + a Anchor + f ResampleFilter + want *image.NRGBA + }{ + { + "Fill 4x4 2x2 Center Nearest", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + Center, + NearestNeighbor, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x14, 0x15, 0x16, 0x17, 0x1c, 0x1d, 0x1e, 0x1f, + 0x34, 0x35, 0x36, 0x37, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + }, + { + "Fill 4x4 1x4 TopLeft Nearest", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 1, 4, + TopLeft, + NearestNeighbor, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 4), + Stride: 1 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, + 0x10, 0x11, 0x12, 0x13, + 0x20, 0x21, 0x22, 0x23, + 0x30, 0x31, 0x32, 0x33, + }, + }, + }, + { + "Fill 4x4 8x2 Bottom Nearest", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 8, 2, + Bottom, + NearestNeighbor, + &image.NRGBA{ + Rect: image.Rect(0, 0, 8, 2), + Stride: 8 * 4, + Pix: []uint8{ + 0x30, 0x31, 0x32, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x3c, 0x3d, 0x3e, 0x3f, + 0x30, 0x31, 0x32, 0x33, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + }, + { + "Fill 4x4 2x8 Top Nearest", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 8, + Top, + NearestNeighbor, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 8), + Stride: 2 * 4, + Pix: []uint8{ + 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, + 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + }, + }, + }, + { + "Fill 4x4 4x4 TopRight Box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 4, 4, + TopRight, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 4, 4), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + }, + { + "Fill 4x4 0x4 Left Box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 0, 4, + Left, + Box, + &image.NRGBA{}, + }, + { + "Fill 0x0 4x4 Right Box", + &image.NRGBA{}, + 4, 4, + Right, + Box, + &image.NRGBA{}, + }, + } + for _, d := range td { + got := Fill(d.src, d.w, d.h, d.a, d.f) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestThumbnail(t *testing.T) { + td := []struct { + desc string + src image.Image + w, h int + f ResampleFilter + want *image.NRGBA + }{ + { + "Thumbnail 6x2 1x1 box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 5, 1), + Stride: 6 * 4, + Pix: []uint8{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 1, 1, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 1), + Stride: 1 * 4, + Pix: []uint8{0x40, 0x40, 0x40, 0xc0}, + }, + }, + { + "Thumbnail 2x6 1x1 box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 5), + Stride: 2 * 4, + Pix: []uint8{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + }, + 1, 1, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 1), + Stride: 1 * 4, + Pix: []uint8{0x40, 0x40, 0x40, 0xc0}, + }, + }, + { + "Thumbnail 1x3 2x2 box", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 0, 2), + Stride: 1 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, + }, + }, + 2, 2, + Box, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, + 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, + }, + }, + }, + } + for _, d := range td { + got := Thumbnail(d.src, d.w, d.h, d.f) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/tools_test.go b/Godeps/_workspace/src/github.com/disintegration/imaging/tools_test.go new file mode 100644 index 0000000000..2dace62990 --- /dev/null +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/tools_test.go @@ -0,0 +1,605 @@ +package imaging + +import ( + "image" + "testing" +) + +func TestCrop(t *testing.T) { + td := []struct { + desc string + src image.Image + r image.Rectangle + want *image.NRGBA + }{ + { + "Crop 2x3 2x1", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + image.Rect(-1, 0, 1, 1), + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + }, + }, + }, + } + for _, d := range td { + got := Crop(d.src, d.r) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestCropCenter(t *testing.T) { + td := []struct { + desc string + src image.Image + w, h int + want *image.NRGBA + }{ + { + "CropCenter 2x3 2x1", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + 2, 1, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + }, + }, + }, + { + "CropCenter 2x3 0x1", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + 0, 1, + &image.NRGBA{ + Rect: image.Rect(0, 0, 0, 0), + Stride: 0, + Pix: []uint8{}, + }, + }, + { + "CropCenter 2x3 5x5", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + 5, 5, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 3), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + }, + } + for _, d := range td { + got := CropCenter(d.src, d.w, d.h) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestCropAnchor(t *testing.T) { + td := []struct { + desc string + src image.Image + w, h int + anchor Anchor + want *image.NRGBA + }{ + { + "CropAnchor 4x4 2x2 TopLeft", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + TopLeft, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + }, + }, + }, + { + "CropAnchor 4x4 2x2 Top", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + Top, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, + }, + }, + }, + { + "CropAnchor 4x4 2x2 TopRight", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + TopRight, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + }, + }, + }, + { + "CropAnchor 4x4 2x2 Left", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + Left, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + }, + }, + }, + { + "CropAnchor 4x4 2x2 Center", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + Center, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + }, + }, + }, + { + "CropAnchor 4x4 2x2 Right", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + Right, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + }, + }, + }, + { + "CropAnchor 4x4 2x2 BottomLeft", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + BottomLeft, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + }, + }, + }, + { + "CropAnchor 4x4 2x2 Bottom", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + Bottom, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, + }, + }, + }, + { + "CropAnchor 4x4 2x2 BottomRight", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 2, 2, + BottomRight, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + }, + { + "CropAnchor 4x4 0x0 BottomRight", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 0, 0, + BottomRight, + &image.NRGBA{ + Rect: image.Rect(0, 0, 0, 0), + Stride: 0, + Pix: []uint8{}, + }, + }, + { + "CropAnchor 4x4 100x100 BottomRight", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 100, 100, + BottomRight, + &image.NRGBA{ + Rect: image.Rect(0, 0, 4, 4), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + }, + { + "CropAnchor 4x4 1x100 BottomRight", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 1, 100, + BottomRight, + &image.NRGBA{ + Rect: image.Rect(0, 0, 1, 4), + Stride: 1 * 4, + Pix: []uint8{ + 0x0c, 0x0d, 0x0e, 0x0f, + 0x1c, 0x1d, 0x1e, 0x1f, + 0x2c, 0x2d, 0x2e, 0x2f, + 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + }, + { + "CropAnchor 4x4 0x100 BottomRight", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 3, 3), + Stride: 4 * 4, + Pix: []uint8{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }, + }, + 0, 100, + BottomRight, + &image.NRGBA{ + Rect: image.Rect(0, 0, 0, 0), + Stride: 0, + Pix: []uint8{}, + }, + }, + } + for _, d := range td { + got := CropAnchor(d.src, d.w, d.h, d.anchor) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestPaste(t *testing.T) { + td := []struct { + desc string + src1 image.Image + src2 image.Image + p image.Point + want *image.NRGBA + }{ + { + "Paste 2x3 2x1", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(1, 1, 3, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + }, + }, + image.Pt(-1, 0), + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 3), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + }, + } + for _, d := range td { + got := Paste(d.src1, d.src2, d.p) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestPasteCenter(t *testing.T) { + td := []struct { + desc string + src1 image.Image + src2 image.Image + want *image.NRGBA + }{ + { + "PasteCenter 2x3 2x1", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(1, 1, 3, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 3), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + }, + } + for _, d := range td { + got := PasteCenter(d.src1, d.src2) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestOverlay(t *testing.T) { + td := []struct { + desc string + src1 image.Image + src2 image.Image + p image.Point + a float64 + want *image.NRGBA + }{ + { + "Overlay 2x3 2x1 1.0", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0x60, 0x00, 0x90, 0xff, 0xff, 0x00, 0x99, 0x7f, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(1, 1, 3, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x20, 0x40, 0x80, 0x7f, 0xaa, 0xbb, 0xcc, 0xff, + }, + }, + image.Pt(-1, 0), + 1.0, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 3), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0x40, 0x1f, 0x88, 0xff, 0xaa, 0xbb, 0xcc, 0xff, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + }, + { + "Overlay 2x2 2x2 0.5", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0x00, 0x00, 0xff, 0xff, 0x20, 0x20, 0x20, 0x00, + }, + }, + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 1), + Stride: 2 * 4, + Pix: []uint8{ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0xff, 0x20, 0x20, 0x20, 0xff, + }, + }, + image.Pt(-1, -1), + 0.5, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0xff, 0x7f, 0x7f, 0xff, 0x00, 0xff, 0x00, 0xff, + 0x7f, 0x7f, 0x7f, 0xff, 0x20, 0x20, 0x20, 0x7f, + }, + }, + }, + } + for _, d := range td { + got := Overlay(d.src1, d.src2, d.p, d.a) + want := d.want + if !compareNRGBA(got, want, 1) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/transform_test.go b/Godeps/_workspace/src/github.com/disintegration/imaging/transform_test.go new file mode 100644 index 0000000000..6e64082f49 --- /dev/null +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/transform_test.go @@ -0,0 +1,261 @@ +package imaging + +import ( + "image" + "testing" +) + +func TestRotate90(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "Rotate90 2x3", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0xcc, 0xdd, 0xee, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x11, 0x22, 0x33, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + }, + }, + }, + } + for _, d := range td { + got := Rotate90(d.src) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestRotate180(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "Rotate180 2x3", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 3), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, + 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33, + }, + }, + }, + } + for _, d := range td { + got := Rotate180(d.src) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestRotate270(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "Rotate270 2x3", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x33, + 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xcc, 0xdd, 0xee, 0xff, + }, + }, + }, + } + for _, d := range td { + got := Rotate270(d.src) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestFlipV(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "FlipV 2x3", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 3), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + }, + }, + }, + } + for _, d := range td { + got := FlipV(d.src) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestFlipH(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "FlipH 2x3", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 2, 3), + Stride: 2 * 4, + Pix: []uint8{ + 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33, + 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, + }, + }, + }, + } + for _, d := range td { + got := FlipH(d.src) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestTranspose(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "Transpose 2x3", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0xcc, 0xdd, 0xee, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + }, + } + for _, d := range td { + got := Transpose(d.src) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} + +func TestTransverse(t *testing.T) { + td := []struct { + desc string + src image.Image + want *image.NRGBA + }{ + { + "Transverse 2x3", + &image.NRGBA{ + Rect: image.Rect(-1, -1, 1, 2), + Stride: 2 * 4, + Pix: []uint8{ + 0x00, 0x11, 0x22, 0x33, 0xcc, 0xdd, 0xee, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, + }, + }, + &image.NRGBA{ + Rect: image.Rect(0, 0, 3, 2), + Stride: 3 * 4, + Pix: []uint8{ + 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xcc, 0xdd, 0xee, 0xff, + 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x33, + }, + }, + }, + } + for _, d := range td { + got := Transverse(d.src) + want := d.want + if !compareNRGBA(got, want, 0) { + t.Errorf("test [%s] failed: %#v", d.desc, got) + } + } +} diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/utils_test.go b/Godeps/_workspace/src/github.com/disintegration/imaging/utils_test.go new file mode 100644 index 0000000000..c2384586b2 --- /dev/null +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/utils_test.go @@ -0,0 +1,61 @@ +package imaging + +import ( + "runtime" + "testing" +) + +func testParallelN(enabled bool, n, procs int) bool { + data := make([]bool, n) + before := runtime.GOMAXPROCS(0) + runtime.GOMAXPROCS(procs) + parallel(n, func(start, end int) { + for i := start; i < end; i++ { + data[i] = true + } + }) + for i := 0; i < n; i++ { + if data[i] != true { + return false + } + } + runtime.GOMAXPROCS(before) + return true +} + +func TestParallel(t *testing.T) { + for _, e := range []bool{true, false} { + for _, n := range []int{1, 10, 100, 1000} { + for _, p := range []int{1, 2, 4, 8, 16, 100} { + if testParallelN(e, n, p) != true { + t.Errorf("test [parallel %v %d %d] failed", e, n, p) + } + } + } + } +} + +func TestClamp(t *testing.T) { + td := []struct { + f float64 + u uint8 + }{ + {0, 0}, + {255, 255}, + {128, 128}, + {0.49, 0}, + {0.50, 1}, + {254.9, 255}, + {254.0, 254}, + {256, 255}, + {2500, 255}, + {-10, 0}, + {127.6, 128}, + } + + for _, d := range td { + if clamp(d.f) != d.u { + t.Errorf("test [clamp %v %v] failed: %v", d.f, d.u, clamp(d.f)) + } + } +} diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/internal/redistest/testdb.go b/Godeps/_workspace/src/github.com/garyburd/redigo/internal/redistest/testdb.go index 5f955c4244..3eb4bcd770 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/internal/redistest/testdb.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/internal/redistest/testdb.go @@ -19,7 +19,7 @@ import ( "errors" "time" - "github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" ) type testConn struct { @@ -49,15 +49,18 @@ func Dial() (redis.Conn, error) { _, err = c.Do("SELECT", "9") if err != nil { + c.Close() return nil, err } n, err := redis.Int(c.Do("DBSIZE")) if err != nil { + c.Close() return nil, err } if n != 0 { + c.Close() return nil, errors.New("database #9 is not empty, test can not continue") } diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/conn.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/conn.go index ac0e971c4e..6a3819f1d2 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/conn.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/conn.go @@ -21,6 +21,8 @@ import ( "fmt" "io" "net" + "net/url" + "regexp" "strconv" "sync" "time" @@ -51,56 +53,164 @@ type conn struct { numScratch [40]byte } -// Dial connects to the Redis server at the given network and address. -func Dial(network, address string) (Conn, error) { - dialer := xDialer{} - return dialer.Dial(network, address) -} - // DialTimeout acts like Dial but takes timeouts for establishing the // connection to the server, writing a command and reading a reply. +// +// Deprecated: Use Dial with options instead. func DialTimeout(network, address string, connectTimeout, readTimeout, writeTimeout time.Duration) (Conn, error) { - netDialer := net.Dialer{Timeout: connectTimeout} - dialer := xDialer{ - NetDial: netDialer.Dial, - ReadTimeout: readTimeout, - WriteTimeout: writeTimeout, - } - return dialer.Dial(network, address) + return Dial(network, address, + DialConnectTimeout(connectTimeout), + DialReadTimeout(readTimeout), + DialWriteTimeout(writeTimeout)) } -// A Dialer specifies options for connecting to a Redis server. -type xDialer struct { - // NetDial specifies the dial function for creating TCP connections. If - // NetDial is nil, then net.Dial is used. - NetDial func(network, addr string) (net.Conn, error) - - // ReadTimeout specifies the timeout for reading a single command - // reply. If ReadTimeout is zero, then no timeout is used. - ReadTimeout time.Duration - - // WriteTimeout specifies the timeout for writing a single command. If - // WriteTimeout is zero, then no timeout is used. - WriteTimeout time.Duration +// DialOption specifies an option for dialing a Redis server. +type DialOption struct { + f func(*dialOptions) } -// Dial connects to the Redis server at address on the named network. -func (d *xDialer) Dial(network, address string) (Conn, error) { - dial := d.NetDial - if dial == nil { - dial = net.Dial +type dialOptions struct { + readTimeout time.Duration + writeTimeout time.Duration + dial func(network, addr string) (net.Conn, error) + db int + password string +} + +// DialReadTimeout specifies the timeout for reading a single command reply. +func DialReadTimeout(d time.Duration) DialOption { + return DialOption{func(do *dialOptions) { + do.readTimeout = d + }} +} + +// DialWriteTimeout specifies the timeout for writing a single command. +func DialWriteTimeout(d time.Duration) DialOption { + return DialOption{func(do *dialOptions) { + do.writeTimeout = d + }} +} + +// DialConnectTimeout specifies the timeout for connecting to the Redis server. +func DialConnectTimeout(d time.Duration) DialOption { + return DialOption{func(do *dialOptions) { + dialer := net.Dialer{Timeout: d} + do.dial = dialer.Dial + }} +} + +// DialNetDial specifies a custom dial function for creating TCP +// connections. If this option is left out, then net.Dial is +// used. DialNetDial overrides DialConnectTimeout. +func DialNetDial(dial func(network, addr string) (net.Conn, error)) DialOption { + return DialOption{func(do *dialOptions) { + do.dial = dial + }} +} + +// DialDatabase specifies the database to select when dialing a connection. +func DialDatabase(db int) DialOption { + return DialOption{func(do *dialOptions) { + do.db = db + }} +} + +// DialPassword specifies the password to use when connecting to +// the Redis server. +func DialPassword(password string) DialOption { + return DialOption{func(do *dialOptions) { + do.password = password + }} +} + +// Dial connects to the Redis server at the given network and +// address using the specified options. +func Dial(network, address string, options ...DialOption) (Conn, error) { + do := dialOptions{ + dial: net.Dial, } - netConn, err := dial(network, address) + for _, option := range options { + option.f(&do) + } + + netConn, err := do.dial(network, address) if err != nil { return nil, err } - return &conn{ + c := &conn{ conn: netConn, bw: bufio.NewWriter(netConn), br: bufio.NewReader(netConn), - readTimeout: d.ReadTimeout, - writeTimeout: d.WriteTimeout, - }, nil + readTimeout: do.readTimeout, + writeTimeout: do.writeTimeout, + } + + if do.password != "" { + if _, err := c.Do("AUTH", do.password); err != nil { + netConn.Close() + return nil, err + } + } + + if do.db != 0 { + if _, err := c.Do("SELECT", do.db); err != nil { + netConn.Close() + return nil, err + } + } + + return c, nil +} + +var pathDBRegexp = regexp.MustCompile(`/(\d+)\z`) + +// DialURL connects to a Redis server at the given URL using the Redis +// URI scheme. URLs should follow the draft IANA specification for the +// scheme (https://www.iana.org/assignments/uri-schemes/prov/redis). +func DialURL(rawurl string, options ...DialOption) (Conn, error) { + u, err := url.Parse(rawurl) + if err != nil { + return nil, err + } + + if u.Scheme != "redis" { + return nil, fmt.Errorf("invalid redis URL scheme: %s", u.Scheme) + } + + // As per the IANA draft spec, the host defaults to localhost and + // the port defaults to 6379. + host, port, err := net.SplitHostPort(u.Host) + if err != nil { + // assume port is missing + host = u.Host + port = "6379" + } + if host == "" { + host = "localhost" + } + address := net.JoinHostPort(host, port) + + if u.User != nil { + password, isSet := u.User.Password() + if isSet { + options = append(options, DialPassword(password)) + } + } + + match := pathDBRegexp.FindStringSubmatch(u.Path) + if len(match) == 2 { + db, err := strconv.Atoi(match[1]) + if err != nil { + return nil, fmt.Errorf("invalid database: %s", u.Path[1:]) + } + if db != 0 { + options = append(options, DialDatabase(db)) + } + } else if u.Path != "" { + return nil, fmt.Errorf("invalid database: %s", u.Path[1:]) + } + + return Dial("tcp", address, options...) } // NewConn returns a new Redigo connection for the given net connection. @@ -417,7 +527,9 @@ func (c *conn) Do(cmd string, args ...interface{}) (interface{}, error) { } if cmd != "" { - c.writeCommand(cmd, args) + if err := c.writeCommand(cmd, args); err != nil { + return nil, c.fatal(err) + } } if err := c.bw.Flush(); err != nil { diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/conn_test.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/conn_test.go index 800370136e..06a2c8fa7e 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/conn_test.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/conn_test.go @@ -15,19 +15,37 @@ package redis_test import ( - "bufio" "bytes" + "io" "math" "net" + "os" "reflect" "strings" "testing" "time" - "github.com/garyburd/redigo/internal/redistest" - "github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" ) +type testConn struct { + io.Reader + io.Writer +} + +func (*testConn) Close() error { return nil } +func (*testConn) LocalAddr() net.Addr { return nil } +func (*testConn) RemoteAddr() net.Addr { return nil } +func (*testConn) SetDeadline(t time.Time) error { return nil } +func (*testConn) SetReadDeadline(t time.Time) error { return nil } +func (*testConn) SetWriteDeadline(t time.Time) error { return nil } + +func dialTestConn(r io.Reader, w io.Writer) redis.DialOption { + return redis.DialNetDial(func(net, addr string) (net.Conn, error) { + return &testConn{Reader: r, Writer: w}, nil + }) +} + var writeTests = []struct { args []interface{} expected string @@ -73,14 +91,13 @@ var writeTests = []struct { func TestWrite(t *testing.T) { for _, tt := range writeTests { var buf bytes.Buffer - rw := bufio.ReadWriter{Writer: bufio.NewWriter(&buf)} - c := redis.NewConnBufio(rw) + c, _ := redis.Dial("", "", dialTestConn(nil, &buf)) err := c.Send(tt.args[0].(string), tt.args[1:]...) if err != nil { t.Errorf("Send(%v) returned error %v", tt.args, err) continue } - rw.Flush() + c.Flush() actual := buf.String() if actual != tt.expected { t.Errorf("Send(%v) = %q, want %q", tt.args, actual, tt.expected) @@ -173,11 +190,7 @@ var readTests = []struct { func TestRead(t *testing.T) { for _, tt := range readTests { - rw := bufio.ReadWriter{ - Reader: bufio.NewReader(strings.NewReader(tt.reply)), - Writer: bufio.NewWriter(nil), // writer need to support Flush - } - c := redis.NewConnBufio(rw) + c, _ := redis.Dial("", "", dialTestConn(strings.NewReader(tt.reply), nil)) actual, err := c.Receive() if tt.expected == errorSentinel { if err == nil { @@ -257,7 +270,7 @@ var testCommands = []struct { } func TestDoCommands(t *testing.T) { - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { t.Fatalf("error connection to database, %v", err) } @@ -276,7 +289,7 @@ func TestDoCommands(t *testing.T) { } func TestPipelineCommands(t *testing.T) { - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { t.Fatalf("error connection to database, %v", err) } @@ -302,7 +315,7 @@ func TestPipelineCommands(t *testing.T) { } func TestBlankCommmand(t *testing.T) { - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { t.Fatalf("error connection to database, %v", err) } @@ -329,7 +342,7 @@ func TestBlankCommmand(t *testing.T) { } func TestRecvBeforeSend(t *testing.T) { - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { t.Fatalf("error connection to database, %v", err) } @@ -350,7 +363,7 @@ func TestRecvBeforeSend(t *testing.T) { } func TestError(t *testing.T) { - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { t.Fatalf("error connection to database, %v", err) } @@ -370,7 +383,7 @@ func TestError(t *testing.T) { } } -func TestReadDeadline(t *testing.T) { +func TestReadTimeout(t *testing.T) { l, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatalf("net.Listen returned %v", err) @@ -391,7 +404,9 @@ func TestReadDeadline(t *testing.T) { } }() - c1, err := redis.DialTimeout(l.Addr().Network(), l.Addr().String(), 0, time.Millisecond, 0) + // Do + + c1, err := redis.Dial(l.Addr().Network(), l.Addr().String(), redis.DialReadTimeout(time.Millisecond)) if err != nil { t.Fatalf("redis.Dial returned %v", err) } @@ -405,7 +420,9 @@ func TestReadDeadline(t *testing.T) { t.Fatalf("c1.Err() = nil, expect error") } - c2, err := redis.DialTimeout(l.Addr().Network(), l.Addr().String(), 0, time.Millisecond, 0) + // Send/Flush/Receive + + c2, err := redis.Dial(l.Addr().Network(), l.Addr().String(), redis.DialReadTimeout(time.Millisecond)) if err != nil { t.Fatalf("redis.Dial returned %v", err) } @@ -422,6 +439,95 @@ func TestReadDeadline(t *testing.T) { } } +var dialErrors = []struct { + rawurl string + expectedError string +}{ + { + "localhost", + "invalid redis URL scheme", + }, + // The error message for invalid hosts is diffferent in different + // versions of Go, so just check that there is an error message. + { + "redis://weird url", + "", + }, + { + "redis://foo:bar:baz", + "", + }, + { + "http://www.google.com", + "invalid redis URL scheme: http", + }, + { + "redis://localhost:6379/abc123", + "invalid database: abc123", + }, +} + +func TestDialURLErrors(t *testing.T) { + for _, d := range dialErrors { + _, err := redis.DialURL(d.rawurl) + if err == nil || !strings.Contains(err.Error(), d.expectedError) { + t.Errorf("DialURL did not return expected error (expected %v to contain %s)", err, d.expectedError) + } + } +} + +func TestDialURLPort(t *testing.T) { + checkPort := func(network, address string) (net.Conn, error) { + if address != "localhost:6379" { + t.Errorf("DialURL did not set port to 6379 by default (got %v)", address) + } + return nil, nil + } + _, err := redis.DialURL("redis://localhost", redis.DialNetDial(checkPort)) + if err != nil { + t.Error("dial error:", err) + } +} + +func TestDialURLHost(t *testing.T) { + checkHost := func(network, address string) (net.Conn, error) { + if address != "localhost:6379" { + t.Errorf("DialURL did not set host to localhost by default (got %v)", address) + } + return nil, nil + } + _, err := redis.DialURL("redis://:6379", redis.DialNetDial(checkHost)) + if err != nil { + t.Error("dial error:", err) + } +} + +func TestDialURLPassword(t *testing.T) { + var buf bytes.Buffer + _, err := redis.DialURL("redis://x:abc123@localhost", dialTestConn(strings.NewReader("+OK\r\n"), &buf)) + if err != nil { + t.Error("dial error:", err) + } + expected := "*2\r\n$4\r\nAUTH\r\n$6\r\nabc123\r\n" + actual := buf.String() + if actual != expected { + t.Errorf("commands = %q, want %q", actual, expected) + } +} + +func TestDialURLDatabase(t *testing.T) { + var buf bytes.Buffer + _, err := redis.DialURL("redis://localhost/3", dialTestConn(strings.NewReader("+OK\r\n"), &buf)) + if err != nil { + t.Error("dial error:", err) + } + expected := "*2\r\n$6\r\nSELECT\r\n$1\r\n3\r\n" + actual := buf.String() + if actual != expected { + t.Errorf("commands = %q, want %q", actual, expected) + } +} + // Connect to local instance of Redis running on the default port. func ExampleDial(x int) { c, err := redis.Dial("tcp", ":6379") @@ -431,11 +537,20 @@ func ExampleDial(x int) { defer c.Close() } +// Connect to remote instance of Redis using a URL. +func ExampleDialURL() { + c, err := redis.DialURL(os.Getenv("REDIS_URL")) + if err != nil { + // handle connection error + } + defer c.Close() +} + // TextExecError tests handling of errors in a transaction. See // http://redis.io/topics/transactions for information on how Redis handles // errors in a transaction. func TestExecError(t *testing.T) { - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { t.Fatalf("error connection to database, %v", err) } @@ -443,6 +558,7 @@ func TestExecError(t *testing.T) { // Execute commands that fail before EXEC is called. + c.Do("DEL", "k0") c.Do("ZADD", "k0", 0, 0) c.Send("MULTI") c.Send("NOTACOMMAND", "k0", 0, 0) @@ -455,6 +571,7 @@ func TestExecError(t *testing.T) { // Execute commands that fail after EXEC is called. The first command // returns an error. + c.Do("DEL", "k1") c.Do("ZADD", "k1", 0, 0) c.Send("MULTI") c.Send("HSET", "k1", 0, 0) @@ -478,7 +595,7 @@ func TestExecError(t *testing.T) { } if _, ok := vs[1].([]byte); !ok { - t.Fatalf("second result is type %T, expected []byte", vs[2]) + t.Fatalf("second result is type %T, expected []byte", vs[1]) } // Execute commands that fail after EXEC is called. The second command @@ -513,7 +630,7 @@ func TestExecError(t *testing.T) { func BenchmarkDoEmpty(b *testing.B) { b.StopTimer() - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { b.Fatal(err) } @@ -528,7 +645,7 @@ func BenchmarkDoEmpty(b *testing.B) { func BenchmarkDoPing(b *testing.B) { b.StopTimer() - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { b.Fatal(err) } diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pool.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pool.go index 9daf2e33ff..c29b35f81a 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pool.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pool.go @@ -25,7 +25,7 @@ import ( "sync" "time" - "github.com/garyburd/redigo/internal" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/internal" ) var nowFunc = time.Now // for testing @@ -94,7 +94,10 @@ var ( type Pool struct { // Dial is an application supplied function for creating and configuring a - // connection + // connection. + // + // The connection returned from Dial must not be in a special state + // (subscribed to pubsub channel, transaction started, ...). Dial func() (Conn, error) // TestOnBorrow is an optional application supplied function for checking @@ -116,7 +119,7 @@ type Pool struct { // the timeout to a value less than the server's timeout. IdleTimeout time.Duration - // If Wait is true and the pool is at the MaxIdle limit, then Get() waits + // If Wait is true and the pool is at the MaxActive limit, then Get() waits // for a connection to be returned to the pool before returning. Wait bool @@ -135,8 +138,9 @@ type idleConn struct { t time.Time } -// NewPool creates a new pool. This function is deprecated. Applications should -// initialize the Pool fields directly as shown in example. +// NewPool creates a new pool. +// +// Deprecated: Initialize the Pool directory as shown in the example. func NewPool(newFn func() (Conn, error), maxIdle int) *Pool { return &Pool{Dial: newFn, MaxIdle: maxIdle} } diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pool_test.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pool_test.go index 1fe305f168..89e46e08dc 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pool_test.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pool_test.go @@ -22,8 +22,7 @@ import ( "testing" "time" - "github.com/garyburd/redigo/internal/redistest" - "github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" ) type poolTestConn struct { @@ -32,10 +31,16 @@ type poolTestConn struct { redis.Conn } -func (c *poolTestConn) Close() error { c.d.open -= 1; return nil } -func (c *poolTestConn) Err() error { return c.err } +func (c *poolTestConn) Close() error { + c.d.mu.Lock() + c.d.open -= 1 + c.d.mu.Unlock() + return c.Conn.Close() +} -func (c *poolTestConn) Do(commandName string, args ...interface{}) (reply interface{}, err error) { +func (c *poolTestConn) Err() error { return c.err } + +func (c *poolTestConn) Do(commandName string, args ...interface{}) (interface{}, error) { if commandName == "ERR" { c.err = args[0].(error) commandName = "PING" @@ -52,6 +57,7 @@ func (c *poolTestConn) Send(commandName string, args ...interface{}) error { } type poolDialer struct { + mu sync.Mutex t *testing.T dialed int open int @@ -60,19 +66,25 @@ type poolDialer struct { } func (d *poolDialer) dial() (redis.Conn, error) { + d.mu.Lock() d.dialed += 1 - if d.dialErr != nil { + dialErr := d.dialErr + d.mu.Unlock() + if dialErr != nil { return nil, d.dialErr } - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { return nil, err } + d.mu.Lock() d.open += 1 + d.mu.Unlock() return &poolTestConn{d: d, Conn: c}, nil } func (d *poolDialer) check(message string, p *redis.Pool, dialed, open int) { + d.mu.Lock() if d.dialed != dialed { d.t.Errorf("%s: dialed=%d, want %d", message, d.dialed, dialed) } @@ -82,6 +94,7 @@ func (d *poolDialer) check(message string, p *redis.Pool, dialed, open int) { if active := p.ActiveCount(); active != open { d.t.Errorf("%s: active=%d, want %d", message, active, open) } + d.mu.Unlock() } func TestPoolReuse(t *testing.T) { @@ -111,6 +124,8 @@ func TestPoolMaxIdle(t *testing.T) { MaxIdle: 2, Dial: d.dial, } + defer p.Close() + for i := 0; i < 10; i++ { c1 := p.Get() c1.Do("PING") @@ -133,6 +148,7 @@ func TestPoolError(t *testing.T) { MaxIdle: 2, Dial: d.dial, } + defer p.Close() c := p.Get() c.Do("ERR", io.EOF) @@ -154,6 +170,7 @@ func TestPoolClose(t *testing.T) { MaxIdle: 2, Dial: d.dial, } + defer p.Close() c1 := p.Get() c1.Do("PING") @@ -195,6 +212,7 @@ func TestPoolTimeout(t *testing.T) { IdleTimeout: 300 * time.Second, Dial: d.dial, } + defer p.Close() now := time.Now() redis.SetNowFunc(func() time.Time { return now }) @@ -213,14 +231,14 @@ func TestPoolTimeout(t *testing.T) { c.Close() d.check("2", p, 2, 1) - - p.Close() } func TestPoolConcurrenSendReceive(t *testing.T) { p := &redis.Pool{ - Dial: redistest.Dial, + Dial: redis.DialDefaultServer, } + defer p.Close() + c := p.Get() done := make(chan error, 1) go func() { @@ -238,7 +256,6 @@ func TestPoolConcurrenSendReceive(t *testing.T) { t.Fatalf("Do() returned error %v", err) } c.Close() - p.Close() } func TestPoolBorrowCheck(t *testing.T) { @@ -248,6 +265,7 @@ func TestPoolBorrowCheck(t *testing.T) { Dial: d.dial, TestOnBorrow: func(redis.Conn, time.Time) error { return redis.Error("BLAH") }, } + defer p.Close() for i := 0; i < 10; i++ { c := p.Get() @@ -255,7 +273,6 @@ func TestPoolBorrowCheck(t *testing.T) { c.Close() } d.check("1", p, 10, 1) - p.Close() } func TestPoolMaxActive(t *testing.T) { @@ -265,6 +282,8 @@ func TestPoolMaxActive(t *testing.T) { MaxActive: 2, Dial: d.dial, } + defer p.Close() + c1 := p.Get() c1.Do("PING") c2 := p.Get() @@ -289,7 +308,6 @@ func TestPoolMaxActive(t *testing.T) { c3.Close() d.check("4", p, 2, 2) - p.Close() } func TestPoolMonitorCleanup(t *testing.T) { @@ -299,12 +317,13 @@ func TestPoolMonitorCleanup(t *testing.T) { MaxActive: 2, Dial: d.dial, } + defer p.Close() + c := p.Get() c.Send("MONITOR") c.Close() d.check("", p, 1, 0) - p.Close() } func TestPoolPubSubCleanup(t *testing.T) { @@ -314,6 +333,7 @@ func TestPoolPubSubCleanup(t *testing.T) { MaxActive: 2, Dial: d.dial, } + defer p.Close() c := p.Get() c.Send("SUBSCRIBE", "x") @@ -334,8 +354,6 @@ func TestPoolPubSubCleanup(t *testing.T) { t.Errorf("got commands %v, want %v", d.commands, want) } d.commands = nil - - p.Close() } func TestPoolTransactionCleanup(t *testing.T) { @@ -345,6 +363,7 @@ func TestPoolTransactionCleanup(t *testing.T) { MaxActive: 2, Dial: d.dial, } + defer p.Close() c := p.Get() c.Do("WATCH", "key") @@ -406,8 +425,6 @@ func TestPoolTransactionCleanup(t *testing.T) { t.Errorf("got commands %v, want %v", d.commands, want) } d.commands = nil - - p.Close() } func startGoroutines(p *redis.Pool, cmd string, args ...interface{}) chan error { @@ -436,6 +453,7 @@ func TestWaitPool(t *testing.T) { Wait: true, } defer p.Close() + c := p.Get() errs := startGoroutines(p, "PING") d.check("before close", p, 1, 1) @@ -462,6 +480,8 @@ func TestWaitPoolClose(t *testing.T) { Dial: d.dial, Wait: true, } + defer p.Close() + c := p.Get() if _, err := c.Do("PING"); err != nil { t.Fatal(err) @@ -497,6 +517,7 @@ func TestWaitPoolCommandError(t *testing.T) { Wait: true, } defer p.Close() + c := p.Get() errs := startGoroutines(p, "ERR", testErr) d.check("before close", p, 1, 1) @@ -525,6 +546,7 @@ func TestWaitPoolDialError(t *testing.T) { Wait: true, } defer p.Close() + c := p.Get() errs := startGoroutines(p, "ERR", testErr) d.check("before close", p, 1, 1) @@ -565,7 +587,7 @@ func TestWaitPoolDialError(t *testing.T) { // test ensures that iteration will work correctly if multiple threads are // iterating simultaneously. func TestLocking_TestOnBorrowFails_PoolDoesntCrash(t *testing.T) { - count := 100 + const count = 100 // First we'll Create a pool where the pilfering of idle connections fails. d := poolDialer{t: t} @@ -580,29 +602,17 @@ func TestLocking_TestOnBorrowFails_PoolDoesntCrash(t *testing.T) { defer p.Close() // Fill the pool with idle connections. - b1 := sync.WaitGroup{} - b1.Add(count) - b2 := sync.WaitGroup{} - b2.Add(count) - for i := 0; i < count; i++ { - go func() { - c := p.Get() - if c.Err() != nil { - t.Errorf("pool get failed: %v", c.Err()) - } - b1.Done() - b1.Wait() - c.Close() - b2.Done() - }() + conns := make([]redis.Conn, count) + for i := range conns { + conns[i] = p.Get() } - b2.Wait() - if d.dialed != count { - t.Errorf("Expected %d dials, got %d", count, d.dialed) + for i := range conns { + conns[i].Close() } // Spawn a bunch of goroutines to thrash the pool. - b2.Add(count) + var wg sync.WaitGroup + wg.Add(count) for i := 0; i < count; i++ { go func() { c := p.Get() @@ -610,10 +620,10 @@ func TestLocking_TestOnBorrowFails_PoolDoesntCrash(t *testing.T) { t.Errorf("pool get failed: %v", c.Err()) } c.Close() - b2.Done() + wg.Done() }() } - b2.Wait() + wg.Wait() if d.dialed != count*2 { t.Errorf("Expected %d dials, got %d", count*2, d.dialed) } @@ -621,7 +631,7 @@ func TestLocking_TestOnBorrowFails_PoolDoesntCrash(t *testing.T) { func BenchmarkPoolGet(b *testing.B) { b.StopTimer() - p := redis.Pool{Dial: redistest.Dial, MaxIdle: 2} + p := redis.Pool{Dial: redis.DialDefaultServer, MaxIdle: 2} c := p.Get() if err := c.Err(); err != nil { b.Fatal(err) @@ -637,7 +647,7 @@ func BenchmarkPoolGet(b *testing.B) { func BenchmarkPoolGetErr(b *testing.B) { b.StopTimer() - p := redis.Pool{Dial: redistest.Dial, MaxIdle: 2} + p := redis.Pool{Dial: redis.DialDefaultServer, MaxIdle: 2} c := p.Get() if err := c.Err(); err != nil { b.Fatal(err) @@ -656,7 +666,7 @@ func BenchmarkPoolGetErr(b *testing.B) { func BenchmarkPoolGetPing(b *testing.B) { b.StopTimer() - p := redis.Pool{Dial: redistest.Dial, MaxIdle: 2} + p := redis.Pool{Dial: redis.DialDefaultServer, MaxIdle: 2} c := p.Get() if err := c.Err(); err != nil { b.Fatal(err) diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pubsub_test.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pubsub_test.go index 365a588219..05e60763c7 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pubsub_test.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/pubsub_test.go @@ -16,20 +16,18 @@ package redis_test import ( "fmt" - "net" "reflect" "sync" "testing" - "time" - "github.com/garyburd/redigo/internal/redistest" - "github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" ) func publish(channel, value interface{}) { c, err := dial() if err != nil { - panic(err) + fmt.Println(err) + return } defer c.Close() c.Do("PUBLISH", channel, value) @@ -39,7 +37,8 @@ func publish(channel, value interface{}) { func ExamplePubSubConn() { c, err := dial() if err != nil { - panic(err) + fmt.Println(err) + return } defer c.Close() var wg sync.WaitGroup @@ -111,20 +110,19 @@ func expectPushed(t *testing.T, c redis.PubSubConn, message string, expected int } func TestPushed(t *testing.T) { - pc, err := redistest.Dial() + pc, err := redis.DialDefaultServer() if err != nil { t.Fatalf("error connection to database, %v", err) } defer pc.Close() - nc, err := net.Dial("tcp", ":6379") + sc, err := redis.DialDefaultServer() if err != nil { - t.Fatal(err) + t.Fatalf("error connection to database, %v", err) } - defer nc.Close() - nc.SetReadDeadline(time.Now().Add(4 * time.Second)) + defer sc.Close() - c := redis.PubSubConn{Conn: redis.NewConn(nc, 0, 0)} + c := redis.PubSubConn{Conn: sc} c.Subscribe("c1") expectPushed(t, c, "Subscribe(c1)", redis.Subscription{Kind: "subscribe", Channel: "c1", Count: 1}) diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/reply.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/reply.go index 5af29bf511..57896147f7 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/reply.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/reply.go @@ -215,7 +215,9 @@ func Bool(reply interface{}, err error) (bool, error) { return false, fmt.Errorf("redigo: unexpected type for Bool, got type %T", reply) } -// MultiBulk is deprecated. Use Values. +// MultiBulk is a helper that converts an array command reply to a []interface{}. +// +// Deprecated: Use Values instead. func MultiBulk(reply interface{}, err error) ([]interface{}, error) { return Values(reply, err) } // Values is a helper that converts an array command reply to a []interface{}. @@ -271,13 +273,40 @@ func Strings(reply interface{}, err error) ([]string, error) { return nil, fmt.Errorf("redigo: unexpected type for Strings, got type %T", reply) } +// ByteSlices is a helper that converts an array command reply to a [][]byte. +// If err is not equal to nil, then ByteSlices returns nil, err. Nil array +// items are stay nil. ByteSlices returns an error if an array item is not a +// bulk string or nil. +func ByteSlices(reply interface{}, err error) ([][]byte, error) { + if err != nil { + return nil, err + } + switch reply := reply.(type) { + case []interface{}: + result := make([][]byte, len(reply)) + for i := range reply { + if reply[i] == nil { + continue + } + p, ok := reply[i].([]byte) + if !ok { + return nil, fmt.Errorf("redigo: unexpected element type for ByteSlices, got type %T", reply[i]) + } + result[i] = p + } + return result, nil + case nil: + return nil, ErrNil + case Error: + return nil, reply + } + return nil, fmt.Errorf("redigo: unexpected type for ByteSlices, got type %T", reply) +} + // Ints is a helper that converts an array command reply to a []int. If // err is not equal to nil, then Ints returns nil, err. func Ints(reply interface{}, err error) ([]int, error) { var ints []int - if reply == nil { - return ints, ErrNil - } values, err := Values(reply, err) if err != nil { return ints, err diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/reply_test.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/reply_test.go index 92744c590b..83c0c7b983 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/reply_test.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/reply_test.go @@ -19,8 +19,7 @@ import ( "reflect" "testing" - "github.com/garyburd/redigo/internal/redistest" - "github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" ) type valueError struct { @@ -57,6 +56,16 @@ var replyTests = []struct { ve(redis.Strings(nil, nil)), ve([]string(nil), redis.ErrNil), }, + { + "byteslices([v1, v2])", + ve(redis.ByteSlices([]interface{}{[]byte("v1"), []byte("v2")}, nil)), + ve([][]byte{[]byte("v1"), []byte("v2")}, nil), + }, + { + "byteslices(nil)", + ve(redis.ByteSlices(nil, nil)), + ve([][]byte(nil), redis.ErrNil), + }, { "values([v1, v2])", ve(redis.Values([]interface{}{[]byte("v1"), []byte("v2")}, nil)), @@ -101,15 +110,16 @@ func TestReply(t *testing.T) { } } -// dial wraps DialTestDB() with a more suitable function name for examples. +// dial wraps DialDefaultServer() with a more suitable function name for examples. func dial() (redis.Conn, error) { - return redistest.Dial() + return redis.DialDefaultServer() } func ExampleBool() { c, err := dial() if err != nil { - panic(err) + fmt.Println(err) + return } defer c.Close() @@ -123,7 +133,8 @@ func ExampleBool() { func ExampleInt() { c, err := dial() if err != nil { - panic(err) + fmt.Println(err) + return } defer c.Close() @@ -140,7 +151,8 @@ func ExampleInt() { func ExampleInts() { c, err := dial() if err != nil { - panic(err) + fmt.Println(err) + return } defer c.Close() @@ -154,7 +166,8 @@ func ExampleInts() { func ExampleString() { c, err := dial() if err != nil { - panic(err) + fmt.Println(err) + return } defer c.Close() diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/scan.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/scan.go index 8c9cfa18d4..962e94bcc1 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/scan.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/scan.go @@ -32,11 +32,25 @@ func ensureLen(d reflect.Value, n int) { } func cannotConvert(d reflect.Value, s interface{}) error { - return fmt.Errorf("redigo: Scan cannot convert from %s to %s", - reflect.TypeOf(s), d.Type()) + var sname string + switch s.(type) { + case string: + sname = "Redis simple string" + case Error: + sname = "Redis error" + case int64: + sname = "Redis integer" + case []byte: + sname = "Redis bulk string" + case []interface{}: + sname = "Redis array" + default: + sname = reflect.TypeOf(s).String() + } + return fmt.Errorf("cannot convert from %s to %s", sname, d.Type()) } -func convertAssignBytes(d reflect.Value, s []byte) (err error) { +func convertAssignBulkString(d reflect.Value, s []byte) (err error) { switch d.Type().Kind() { case reflect.Float32, reflect.Float64: var x float64 @@ -98,7 +112,7 @@ func convertAssignInt(d reflect.Value, s int64) (err error) { func convertAssignValue(d reflect.Value, s interface{}) (err error) { switch s := s.(type) { case []byte: - err = convertAssignBytes(d, s) + err = convertAssignBulkString(d, s) case int64: err = convertAssignInt(d, s) default: @@ -107,7 +121,7 @@ func convertAssignValue(d reflect.Value, s interface{}) (err error) { return err } -func convertAssignValues(d reflect.Value, s []interface{}) error { +func convertAssignArray(d reflect.Value, s []interface{}) error { if d.Type().Kind() != reflect.Slice { return cannotConvert(d, s) } @@ -144,7 +158,7 @@ func convertAssign(d interface{}, s interface{}) (err error) { if d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr { err = cannotConvert(d, s) } else { - err = convertAssignBytes(d.Elem(), s) + err = convertAssignBulkString(d.Elem(), s) } } case int64: @@ -169,6 +183,13 @@ func convertAssign(d interface{}, s interface{}) (err error) { err = convertAssignInt(d.Elem(), s) } } + case string: + switch d := d.(type) { + case *string: + *d = string(s) + default: + err = cannotConvert(reflect.ValueOf(d), s) + } case []interface{}: switch d := d.(type) { case *[]interface{}: @@ -181,7 +202,7 @@ func convertAssign(d interface{}, s interface{}) (err error) { if d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr { err = cannotConvert(d, s) } else { - err = convertAssignValues(d.Elem(), s) + err = convertAssignArray(d.Elem(), s) } } case Error: @@ -206,12 +227,13 @@ func convertAssign(d interface{}, s interface{}) (err error) { // following the copied values. func Scan(src []interface{}, dest ...interface{}) ([]interface{}, error) { if len(src) < len(dest) { - return nil, errors.New("redigo: Scan array short") + return nil, errors.New("redigo.Scan: array short") } var err error for i, d := range dest { err = convertAssign(d, src[i]) if err != nil { + err = fmt.Errorf("redigo.Scan: cannot assign to dest %d: %v", i, err) break } } @@ -219,9 +241,9 @@ func Scan(src []interface{}, dest ...interface{}) ([]interface{}, error) { } type fieldSpec struct { - name string - index []int - //omitEmpty bool + name string + index []int + omitEmpty bool } type structSpec struct { @@ -237,7 +259,7 @@ func compileStructSpec(t reflect.Type, depth map[string]int, index []int, ss *st for i := 0; i < t.NumField(); i++ { f := t.Field(i) switch { - case f.PkgPath != "": + case f.PkgPath != "" && !f.Anonymous: // Ignore unexported fields. case f.Anonymous: // TODO: Handle pointers. Requires change to decoder and @@ -258,10 +280,10 @@ func compileStructSpec(t reflect.Type, depth map[string]int, index []int, ss *st } for _, s := range p[1:] { switch s { - //case "omitempty": - // fs.omitempty = true + case "omitempty": + fs.omitEmpty = true default: - panic(errors.New("redigo: unknown field flag " + s + " for type " + t.Name())) + panic(fmt.Errorf("redigo: unknown field tag %s for type %s", s, t.Name())) } } } @@ -321,7 +343,7 @@ func structSpecForType(t reflect.Type) *structSpec { return ss } -var errScanStructValue = errors.New("redigo: ScanStruct value must be non-nil pointer to a struct") +var errScanStructValue = errors.New("redigo.ScanStruct: value must be non-nil pointer to a struct") // ScanStruct scans alternating names and values from src to a struct. The // HGETALL and CONFIG GET commands return replies in this format. @@ -350,7 +372,7 @@ func ScanStruct(src []interface{}, dest interface{}) error { ss := structSpecForType(d.Type()) if len(src)%2 != 0 { - return errors.New("redigo: ScanStruct expects even number of values in values") + return errors.New("redigo.ScanStruct: number of values not a multiple of 2") } for i := 0; i < len(src); i += 2 { @@ -360,21 +382,21 @@ func ScanStruct(src []interface{}, dest interface{}) error { } name, ok := src[i].([]byte) if !ok { - return errors.New("redigo: ScanStruct key not a bulk string value") + return fmt.Errorf("redigo.ScanStruct: key %d not a bulk string value", i) } fs := ss.fieldSpec(name) if fs == nil { continue } if err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil { - return err + return fmt.Errorf("redigo.ScanStruct: cannot assign field %s: %v", fs.name, err) } } return nil } var ( - errScanSliceValue = errors.New("redigo: ScanSlice dest must be non-nil pointer to a struct") + errScanSliceValue = errors.New("redigo.ScanSlice: dest must be non-nil pointer to a struct") ) // ScanSlice scans src to the slice pointed to by dest. The elements the dest @@ -407,7 +429,7 @@ func ScanSlice(src []interface{}, dest interface{}, fieldNames ...string) error continue } if err := convertAssignValue(d.Index(i), s); err != nil { - return err + return fmt.Errorf("redigo.ScanSlice: cannot assign element %d: %v", i, err) } } return nil @@ -420,18 +442,18 @@ func ScanSlice(src []interface{}, dest interface{}, fieldNames ...string) error for i, name := range fieldNames { fss[i] = ss.m[name] if fss[i] == nil { - return errors.New("redigo: ScanSlice bad field name " + name) + return fmt.Errorf("redigo.ScanSlice: ScanSlice bad field name %s", name) } } } if len(fss) == 0 { - return errors.New("redigo: ScanSlice no struct fields") + return errors.New("redigo.ScanSlice: no struct fields") } n := len(src) / len(fss) if n*len(fss) != len(src) { - return errors.New("redigo: ScanSlice length not a multiple of struct field count") + return errors.New("redigo.ScanSlice: length not a multiple of struct field count") } ensureLen(d, n) @@ -449,7 +471,7 @@ func ScanSlice(src []interface{}, dest interface{}, fieldNames ...string) error continue } if err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil { - return err + return fmt.Errorf("redigo.ScanSlice: cannot assign element %d to field %s: %v", i*len(fss)+j, fs.name, err) } } } @@ -507,6 +529,26 @@ func flattenStruct(args Args, v reflect.Value) Args { ss := structSpecForType(v.Type()) for _, fs := range ss.l { fv := v.FieldByIndex(fs.index) + if fs.omitEmpty { + var empty = false + switch fv.Kind() { + case reflect.Array, reflect.Map, reflect.Slice, reflect.String: + empty = fv.Len() == 0 + case reflect.Bool: + empty = !fv.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + empty = fv.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + empty = fv.Uint() == 0 + case reflect.Float32, reflect.Float64: + empty = fv.Float() == 0 + case reflect.Interface, reflect.Ptr: + empty = fv.IsNil() + } + if empty { + continue + } + } args = append(args, fs.name, fv.Interface()) } return args diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/scan_test.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/scan_test.go index b57dd89695..af1f2c2daa 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/scan_test.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/scan_test.go @@ -16,10 +16,11 @@ package redis_test import ( "fmt" - "github.com/garyburd/redigo/redis" "math" "reflect" "testing" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" ) var scanConversionTests = []struct { @@ -46,6 +47,7 @@ var scanConversionTests = []struct { {[]byte("1"), true}, {int64(1), true}, {[]byte("t"), true}, + {"hello", "hello"}, {[]byte("hello"), "hello"}, {[]byte("world"), []byte("world")}, {[]interface{}{[]byte("foo")}, []interface{}{[]byte("foo")}}, @@ -100,7 +102,8 @@ func TestScanConversionError(t *testing.T) { func ExampleScan() { c, err := dial() if err != nil { - panic(err) + fmt.Println(err) + return } defer c.Close() @@ -115,7 +118,8 @@ func ExampleScan() { "GET", "album:*->title", "GET", "album:*->rating")) if err != nil { - panic(err) + fmt.Println(err) + return } for len(values) > 0 { @@ -123,7 +127,8 @@ func ExampleScan() { rating := -1 // initialize to illegal value to detect nil. values, err = redis.Scan(values, &title, &rating) if err != nil { - panic(err) + fmt.Println(err) + return } if rating == -1 { fmt.Println(title, "not-rated") @@ -295,7 +300,8 @@ func TestScanSlice(t *testing.T) { func ExampleScanSlice() { c, err := dial() if err != nil { - panic(err) + fmt.Println(err) + return } defer c.Close() @@ -310,7 +316,8 @@ func ExampleScanSlice() { "GET", "album:*->title", "GET", "album:*->rating")) if err != nil { - panic(err) + fmt.Println(err) + return } var albums []struct { @@ -318,7 +325,8 @@ func ExampleScanSlice() { Rating int } if err := redis.ScanSlice(values, &albums); err != nil { - panic(err) + fmt.Println(err) + return } fmt.Printf("%v\n", albums) // Output: @@ -332,16 +340,17 @@ var argsTests = []struct { }{ {"struct ptr", redis.Args{}.AddFlat(&struct { - I int `redis:"i"` - U uint `redis:"u"` - S string `redis:"s"` - P []byte `redis:"p"` + I int `redis:"i"` + U uint `redis:"u"` + S string `redis:"s"` + P []byte `redis:"p"` + M map[string]string `redis:"m"` Bt bool Bf bool }{ - -1234, 5678, "hello", []byte("world"), true, false, + -1234, 5678, "hello", []byte("world"), map[string]string{"hello": "world"}, true, false, }), - redis.Args{"i", int(-1234), "u", uint(5678), "s", "hello", "p", []byte("world"), "Bt", true, "Bf", false}, + redis.Args{"i", int(-1234), "u", uint(5678), "s", "hello", "p", []byte("world"), "m", map[string]string{"hello": "world"}, "Bt", true, "Bf", false}, }, {"struct", redis.Args{}.AddFlat(struct{ I int }{123}), @@ -351,6 +360,20 @@ var argsTests = []struct { redis.Args{}.Add(1).AddFlat([]string{"a", "b", "c"}).Add(2), redis.Args{1, "a", "b", "c", 2}, }, + {"struct omitempty", + redis.Args{}.AddFlat(&struct { + I int `redis:"i,omitempty"` + U uint `redis:"u,omitempty"` + S string `redis:"s,omitempty"` + P []byte `redis:"p,omitempty"` + M map[string]string `redis:"m,omitempty"` + Bt bool `redis:"Bt,omitempty"` + Bf bool `redis:"Bf,omitempty"` + }{ + 0, 0, "", []byte{}, map[string]string{}, true, false, + }), + redis.Args{"Bt", true}, + }, } func TestArgs(t *testing.T) { @@ -364,7 +387,8 @@ func TestArgs(t *testing.T) { func ExampleArgs() { c, err := dial() if err != nil { - panic(err) + fmt.Println(err) + return } defer c.Close() @@ -379,7 +403,8 @@ func ExampleArgs() { p1.Body = "Hello" if _, err := c.Do("HMSET", redis.Args{}.Add("id1").AddFlat(&p1)...); err != nil { - panic(err) + fmt.Println(err) + return } m := map[string]string{ @@ -389,18 +414,21 @@ func ExampleArgs() { } if _, err := c.Do("HMSET", redis.Args{}.Add("id2").AddFlat(m)...); err != nil { - panic(err) + fmt.Println(err) + return } for _, id := range []string{"id1", "id2"} { v, err := redis.Values(c.Do("HGETALL", id)) if err != nil { - panic(err) + fmt.Println(err) + return } if err := redis.ScanStruct(v, &p2); err != nil { - panic(err) + fmt.Println(err) + return } fmt.Printf("%+v\n", p2) diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/script_test.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/script_test.go index c9635bf08e..5d414ea597 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/script_test.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/script_test.go @@ -20,8 +20,7 @@ import ( "testing" "time" - "github.com/garyburd/redigo/internal/redistest" - "github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" ) func ExampleScript(c redis.Conn, reply interface{}, err error) { @@ -35,7 +34,7 @@ func ExampleScript(c redis.Conn, reply interface{}, err error) { } func TestScript(t *testing.T) { - c, err := redistest.Dial() + c, err := redis.DialDefaultServer() if err != nil { t.Fatalf("error connection to database, %v", err) } diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/test_test.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/test_test.go index b959a11f4f..7240fa1f35 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/test_test.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/test_test.go @@ -16,7 +16,17 @@ package redis import ( "bufio" - "net" + "errors" + "flag" + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + "strconv" + "strings" + "sync" + "testing" "time" ) @@ -24,15 +34,144 @@ func SetNowFunc(f func() time.Time) { nowFunc = f } -type nopCloser struct{ net.Conn } - -func (nopCloser) Close() error { return nil } - -// NewConnBufio is a hook for tests. -func NewConnBufio(rw bufio.ReadWriter) Conn { - return &conn{br: rw.Reader, bw: rw.Writer, conn: nopCloser{}} -} - var ( ErrNegativeInt = errNegativeInt + + serverPath = flag.String("redis-server", "redis-server", "Path to redis server binary") + serverBasePort = flag.Int("redis-port", 16379, "Beginning of port range for test servers") + serverLogName = flag.String("redis-log", "", "Write Redis server logs to `filename`") + serverLog = ioutil.Discard + + defaultServerMu sync.Mutex + defaultServer *Server + defaultServerErr error ) + +type Server struct { + name string + cmd *exec.Cmd + done chan struct{} +} + +func NewServer(name string, args ...string) (*Server, error) { + s := &Server{ + name: name, + cmd: exec.Command(*serverPath, args...), + done: make(chan struct{}), + } + + r, err := s.cmd.StdoutPipe() + if err != nil { + return nil, err + } + + err = s.cmd.Start() + if err != nil { + return nil, err + } + + ready := make(chan error, 1) + go s.watch(r, ready) + + select { + case err = <-ready: + case <-time.After(time.Second * 10): + err = errors.New("timeout waiting for server to start") + } + + if err != nil { + s.Stop() + return nil, err + } + + return s, nil +} + +func (s *Server) watch(r io.Reader, ready chan error) { + fmt.Fprintf(serverLog, "%d START %s \n", s.cmd.Process.Pid, s.name) + var listening bool + var text string + scn := bufio.NewScanner(r) + for scn.Scan() { + text = scn.Text() + fmt.Fprintf(serverLog, "%s\n", text) + if !listening { + if strings.Contains(text, "The server is now ready to accept connections on port") { + listening = true + ready <- nil + } + } + } + if !listening { + ready <- fmt.Errorf("server exited: %s", text) + } + s.cmd.Wait() + fmt.Fprintf(serverLog, "%d STOP %s \n", s.cmd.Process.Pid, s.name) + close(s.done) +} + +func (s *Server) Stop() { + s.cmd.Process.Signal(os.Interrupt) + <-s.done +} + +// stopDefaultServer stops the server created by DialDefaultServer. +func stopDefaultServer() { + defaultServerMu.Lock() + defer defaultServerMu.Unlock() + if defaultServer != nil { + defaultServer.Stop() + defaultServer = nil + } +} + +// startDefaultServer starts the default server if not already running. +func startDefaultServer() error { + defaultServerMu.Lock() + defer defaultServerMu.Unlock() + if defaultServer != nil || defaultServerErr != nil { + return defaultServerErr + } + defaultServer, defaultServerErr = NewServer( + "default", + "--port", strconv.Itoa(*serverBasePort), + "--save", "", + "--appendonly", "no") + return defaultServerErr +} + +// DialDefaultServer starts the test server if not already started and dials a +// connection to the server. +func DialDefaultServer() (Conn, error) { + if err := startDefaultServer(); err != nil { + return nil, err + } + c, err := Dial("tcp", fmt.Sprintf(":%d", *serverBasePort), DialReadTimeout(1*time.Second), DialWriteTimeout(1*time.Second)) + if err != nil { + return nil, err + } + c.Do("FLUSHDB") + return c, nil +} + +func TestMain(m *testing.M) { + os.Exit(func() int { + flag.Parse() + + var f *os.File + if *serverLogName != "" { + var err error + f, err = os.OpenFile(*serverLogName, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0600) + if err != nil { + fmt.Fprintf(os.Stderr, "Error opening redis-log: %v\n", err) + return 1 + } + defer f.Close() + serverLog = f + } + + defer stopDefaultServer() + + return m.Run() + }()) +} diff --git a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/zpop_example_test.go b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/zpop_example_test.go index 1d86ee6ce8..3e4bca4189 100644 --- a/Godeps/_workspace/src/github.com/garyburd/redigo/redis/zpop_example_test.go +++ b/Godeps/_workspace/src/github.com/garyburd/redigo/redis/zpop_example_test.go @@ -16,7 +16,7 @@ package redis_test import ( "fmt" - "github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" ) // zpop pops a value from the ZSET key using WATCH/MULTI/EXEC commands. diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/.travis.yml b/Godeps/_workspace/src/github.com/go-gorp/gorp/.travis.yml index 6df5edf1cb..ce46028841 100644 --- a/Godeps/_workspace/src/github.com/go-gorp/gorp/.travis.yml +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/.travis.yml @@ -1,23 +1,28 @@ language: go go: - - 1.2 - - 1.3 - - 1.4 - - tip +- 1.3 +- 1.4 +- tip services: - - mysql - - postgres - - sqlite3 +- mysql +- postgres +- sqlite3 + +env: + global: + - secure: RriLxF6+2yMl67hdVv8ImXlu0h62mhcpqjaOgYNU+IEbUQ7hx96CKY6gkpYubW3BgApvF5RH6j3+HKvh2kGp0XhDOYOQCODfBSaSipZ5Aa5RKjsEYLtuVIobvJ80awR9hUeql69+WXs0/s72WThG0qTbOUY4pqHWfteeY235hWM= before_script: - - mysql -e "CREATE DATABASE gorptest;" - - mysql -u root -e "GRANT ALL ON gorptest.* TO gorptest@localhost IDENTIFIED BY 'gorptest'" - - psql -c "CREATE DATABASE gorptest;" -U postgres - - psql -c "CREATE USER "gorptest" WITH SUPERUSER PASSWORD 'gorptest';" -U postgres - - go get github.com/lib/pq - - go get github.com/mattn/go-sqlite3 - - go get github.com/ziutek/mymysql/godrv - - go get github.com/go-sql-driver/mysql +- mysql -e "CREATE DATABASE gorptest;" +- mysql -u root -e "GRANT ALL ON gorptest.* TO gorptest@localhost IDENTIFIED BY 'gorptest'" +- psql -c "CREATE DATABASE gorptest;" -U postgres +- psql -c "CREATE USER "gorptest" WITH SUPERUSER PASSWORD 'gorptest';" -U postgres +- go get github.com/lib/pq +- go get github.com/mattn/go-sqlite3 +- go get github.com/ziutek/mymysql/godrv +- go get github.com/go-sql-driver/mysql +- go get golang.org/x/tools/cmd/cover +- go get github.com/mattn/goveralls script: ./test_all.sh diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/Makefile b/Godeps/_workspace/src/github.com/go-gorp/gorp/Makefile deleted file mode 100644 index 3a27ae194b..0000000000 --- a/Godeps/_workspace/src/github.com/go-gorp/gorp/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include $(GOROOT)/src/Make.inc - -TARG = github.com/go-gorp/gorp -GOFILES = gorp.go dialect.go - -include $(GOROOT)/src/Make.pkg \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/README.md b/Godeps/_workspace/src/github.com/go-gorp/gorp/README.md index d2de8c2b63..3f0652bc76 100644 --- a/Godeps/_workspace/src/github.com/go-gorp/gorp/README.md +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/README.md @@ -1,19 +1,26 @@ # Go Relational Persistence -[![build status](https://secure.travis-ci.org/go-gorp/gorp.png)](http://travis-ci.org/go-gorp/gorp) +[![build status](https://img.shields.io/travis/go-gorp/gorp.svg)](http://travis-ci.org/go-gorp/gorp) +[![code coverage](https://img.shields.io/coveralls/go-gorp/gorp.svg)](https://coveralls.io/r/go-gorp/gorp) +[![issues](https://img.shields.io/github/issues/go-gorp/gorp.svg)](https://github.com/go-gorp/gorp/issues) +[![godoc v1](https://img.shields.io/badge/godoc-v1-375EAB.svg)](https://godoc.org/gopkg.in/gorp.v1) +[![godoc bleeding edge](https://img.shields.io/badge/godoc-bleeding--edge-375EAB.svg)](https://godoc.org/github.com/go-gorp/gorp) -I hesitate to call gorp an ORM. Go doesn't really have objects, at least -not in the classic Smalltalk/Java sense. There goes the "O". gorp doesn't -know anything about the relationships between your structs (at least not -yet). So the "R" is questionable too (but I use it in the name because, -well, it seemed more clever). +### Update 2015-07-01 Cleanup & feature freeze ([#270](https://github.com/go-gorp/gorp/issues/270)) -The "M" is alive and well. Given some Go structs and a database, gorp -should remove a fair amount of boilerplate busy-work from your code. +We are currently cleaning up the backlog of issues and PR's. When this is done the codebase will be split into separate files and there will be breaking changes to the API's. We're also adding better tests and documentation. As a result of these changes the `master` branch will be unstable. Please use `gopkg.in/gorp.v1`. When the cleanup and changes are done, we will release `v2.0`. -I hope that gorp saves you time, minimizes the drudgery of getting data -in and out of your database, and helps your code focus on algorithms, -not infrastructure. +At this time we won't accept new feature-related pull-requests because of changes to the codebase. Please create an issue for your feature and wait until `v2.0` has been released. + +For more information, please read [#270](https://github.com/go-gorp/gorp/issues/270). + +## Introduction + +I hesitate to call gorp an ORM. Go doesn't really have objects, at least not in the classic Smalltalk/Java sense. There goes the "O". gorp doesn't know anything about the relationships between your structs (at least not yet). So the "R" is questionable too (but I use it in the name because, well, it seemed more clever). + +The "M" is alive and well. Given some Go structs and a database, gorp should remove a fair amount of boilerplate busy-work from your code. + +I hope that gorp saves you time, minimizes the drudgery of getting data in and out of your database, and helps your code focus on algorithms, not infrastructure. * Bind struct fields to table columns via API or tag * Support for embedded structs @@ -34,7 +41,7 @@ not infrastructure. # install the library: go get gopkg.in/gorp.v1 - + // use in your .go code: import ( "gopkg.in/gorp.v1" @@ -143,10 +150,10 @@ func main() { type Post struct { // db tag lets you specify the column name if it differs from the struct field - Id int64 `db:"post_id"` + Id int64 `db:"post_id"` Created int64 - Title string - Body string + Title string `db:",size:50"` // Column size set to 50 + Body string `db:"article_body,size:1024"` // Set both column name and size } func newPost(title, body string) Post { @@ -201,7 +208,7 @@ type Invoice struct { } type Person struct { - Id int64 + Id int64 Created int64 Updated int64 FName string @@ -221,8 +228,10 @@ type Person struct { // table.ColMap("Price").Rename("unit_price") // table.ColMap("IgnoreMe").SetTransient(true) // +// You can optionally declare the field to be a primary key and/or autoincrement +// type Product struct { - Id int64 `db:"product_id"` + Id int64 `db:"product_id, primarykey, autoincrement"` Price int64 `db:"unit_price"` IgnoreMe string `db:"-"` } @@ -239,7 +248,7 @@ db, err := sql.Open("mymysql", "tcp:localhost:3306*mydb/myuser/mypassword") dbmap := &gorp.DbMap{Db: db, Dialect: gorp.MySQLDialect{"InnoDB", "UTF8"}} // register the structs you wish to use with gorp -// you can also use the shorter dbmap.AddTable() if you +// you can also use the shorter dbmap.AddTable() if you // don't want to override the table name // // SetKeys(true) means we have a auto increment primary key, which @@ -296,13 +305,13 @@ I recommend enabling this initially while you're getting the feel for what gorp is doing on your behalf. Gorp defines a `GorpLogger` interface that Go's built in `log.Logger` satisfies. -However, you can write your own `GorpLogger` implementation, or use a package such +However, you can write your own `GorpLogger` implementation, or use a package such as `glog` if you want more control over how statements are logged. ```go // Will log all SQL statements + args as they are run // The first arg is a string prefix to prepend to all log messages -dbmap.TraceOn("[gorp]", log.New(os.Stdout, "myapp:", log.Lmicroseconds)) +dbmap.TraceOn("[gorp]", log.New(os.Stdout, "myapp:", log.Lmicroseconds)) // Turn off tracing dbmap.TraceOff() @@ -435,7 +444,7 @@ only supported in SELECT queries. ```go _, err := dbm.Select(&dest, "select * from Foo where name = :name and age = :age", map[string]interface{}{ - "name": "Rob", + "name": "Rob", "age": 31, }) ``` @@ -509,11 +518,11 @@ Full list of hooks that you can implement: PostUpdate PreDelete PostDelete - + All have the same signature. for example: - + func (p *MyStruct) PostUpdate(s gorp.SqlExecutor) error - + ### Optimistic Locking #### Note that this behaviour has changed in v2. See [Migration Guide](#migration-guide). @@ -536,7 +545,7 @@ type Person struct { Updated int64 FName string LName string - + // automatically used as the Version col // use table.SetVersionCol("columnName") to map a different // struct field as the version field @@ -558,7 +567,7 @@ count, err := dbmap.Update(p1) _, ok := err.(gorp.OptimisticLockError) if ok { // should reach this statement - + // in a real app you might reload the row and retry, or // you might propegate this to the user, depending on the desired // semantics @@ -568,6 +577,49 @@ if ok { fmt.Printf("Unknown db err: %v\n", err) } ``` +### Adding INDEX(es) on column(s) beyond the primary key ### + +Indexes are frequently critical for performance. Here is how to add them to your tables. + +NB: SqlServer and Oracle need testing and possible adjustment to the +CreateIndexSuffix() and DropIndexSuffix() methods to make AddIndex() +work for them. + +In the example below we put an index both on the Id field, and on the AcctId field. + +``` +type Account struct { + Id int64 + AcctId string // e.g. this might be a long uuid for portability +} + +// indexType (the 2nd param to AddIndex call) is "Btree" or "Hash" for MySQL. +// demonstrate adding a second index on AcctId, and constrain that field to have unique values. +dbm.AddTable(iptab.Account{}).SetKeys(true, "Id").AddIndex("AcctIdIndex", "Btree", []string{"AcctId"}).SetUnique(true) + +err = dbm.CreateTablesIfNotExists() +checkErr(err, "CreateTablesIfNotExists failed") + +err = dbm.CreateIndex() +checkErr(err, "CreateIndex failed") + +``` +Check the effect of the CreateIndex() call in mysql: +``` +$ mysql + +MariaDB [test]> show create table Account; ++---------+--------------------------+ +| Account | CREATE TABLE `Account` ( + `Id` bigint(20) NOT NULL AUTO_INCREMENT, + `AcctId` varchar(255) DEFAULT NULL, + PRIMARY KEY (`Id`), + UNIQUE KEY `AcctIdIndex` (`AcctId`) USING BTREE <<<--- yes! index added. +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ++---------+--------------------------+ + +``` + ## Database Drivers @@ -582,13 +634,13 @@ implemented per database vendor. Dialects are provided for: * PostgreSQL * sqlite3 -Each of these three databases pass the test suite. See `gorp_test.go` for example +Each of these three databases pass the test suite. See `gorp_test.go` for example DSNs for these three databases. Support is also provided for: * Oracle (contributed by @klaidliadon) -* SQL Server (contributed by @qrawl) - use driver: github.com/denisenkom/go-mssqldb +* SQL Server (contributed by @qrawl) - use driver: github.com/denisenkom/go-mssqldb Note that these databases are not covered by CI and I (@coopernurse) have no good way to test them locally. So please try them and send patches as needed, but expect a bit more @@ -598,7 +650,7 @@ unpredicability. ### SQL placeholder portability -Different databases use different strings to indicate variable placeholders in +Different databases use different strings to indicate variable placeholders in prepared SQL statements. Unlike some database abstraction layers (such as JDBC), Go's `database/sql` does not standardize this. @@ -617,13 +669,18 @@ In `Select` and `SelectOne` you can use named parameters to work around this. The following is portable: ```go -err := dbmap.SelectOne(&val, "select * from foo where id = :id", +err := dbmap.SelectOne(&val, "select * from foo where id = :id", map[string]interface{} { "id": 30}) ``` +Additionally, when using Postgres as your database, you should utilize `$1` instead +of `?` placeholders as utilizing `?` placeholders when querying Postgres will result +in `pq: operator does not exist` errors. Alternatively, use +`dbMap.Dialect.BindVar(varIdx)` to get the proper variable binding for your dialect. + ### time.Time and time zones -gorp will pass `time.Time` fields through to the `database/sql` driver, but note that +gorp will pass `time.Time` fields through to the `database/sql` driver, but note that the behavior of this type varies across database drivers. MySQL users should be especially cautious. See: https://github.com/ziutek/mymysql/pull/77 diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/column.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/column.go new file mode 100644 index 0000000000..99d4fd555b --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/column.go @@ -0,0 +1,83 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import "reflect" + +// ColumnMap represents a mapping between a Go struct field and a single +// column in a table. +// Unique and MaxSize only inform the +// CreateTables() function and are not used by Insert/Update/Delete/Get. +type ColumnMap struct { + // Column name in db table + ColumnName string + + // If true, this column is skipped in generated SQL statements + Transient bool + + // If true, " unique" is added to create table statements. + // Not used elsewhere + Unique bool + + // Query used for getting generated id after insert + GeneratedIdQuery string + + // Passed to Dialect.ToSqlType() to assist in informing the + // correct column type to map to in CreateTables() + MaxSize int + + DefaultValue string + + fieldName string + gotype reflect.Type + isPK bool + isAutoIncr bool + isNotNull bool +} + +// Rename allows you to specify the column name in the table +// +// Example: table.ColMap("Updated").Rename("date_updated") +// +func (c *ColumnMap) Rename(colname string) *ColumnMap { + c.ColumnName = colname + return c +} + +// SetTransient allows you to mark the column as transient. If true +// this column will be skipped when SQL statements are generated +func (c *ColumnMap) SetTransient(b bool) *ColumnMap { + c.Transient = b + return c +} + +// SetUnique adds "unique" to the create table statements for this +// column, if b is true. +func (c *ColumnMap) SetUnique(b bool) *ColumnMap { + c.Unique = b + return c +} + +// SetNotNull adds "not null" to the create table statements for this +// column, if nn is true. +func (c *ColumnMap) SetNotNull(nn bool) *ColumnMap { + c.isNotNull = nn + return c +} + +// SetMaxSize specifies the max length of values of this column. This is +// passed to the dialect.ToSqlType() function, which can use the value +// to alter the generated type for "create table" statements +func (c *ColumnMap) SetMaxSize(size int) *ColumnMap { + c.MaxSize = size + return c +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/db.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/db.go new file mode 100644 index 0000000000..8bba07cf68 --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/db.go @@ -0,0 +1,619 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "bytes" + "database/sql" + "database/sql/driver" + "errors" + "fmt" + "reflect" + "strconv" + "strings" + "time" +) + +// DbMap is the root gorp mapping object. Create one of these for each +// database schema you wish to map. Each DbMap contains a list of +// mapped tables. +// +// Example: +// +// dialect := gorp.MySQLDialect{"InnoDB", "UTF8"} +// dbmap := &gorp.DbMap{Db: db, Dialect: dialect} +// +type DbMap struct { + // Db handle to use with this map + Db *sql.DB + + // Dialect implementation to use with this map + Dialect Dialect + + TypeConverter TypeConverter + + tables []*TableMap + logger GorpLogger + logPrefix string +} + +func (m *DbMap) CreateIndex() error { + + var err error + dialect := reflect.TypeOf(m.Dialect) + for _, table := range m.tables { + for _, index := range table.indexes { + + s := bytes.Buffer{} + s.WriteString("create") + if index.Unique { + s.WriteString(" unique") + } + s.WriteString(" index") + s.WriteString(fmt.Sprintf(" %s on %s", index.IndexName, table.TableName)) + if dname := dialect.Name(); dname == "PostgresDialect" && index.IndexType != "" { + s.WriteString(fmt.Sprintf(" %s %s", m.Dialect.CreateIndexSuffix(), index.IndexType)) + } + s.WriteString(" (") + for x, col := range index.columns { + if x > 0 { + s.WriteString(", ") + } + s.WriteString(m.Dialect.QuoteField(col)) + } + s.WriteString(")") + + if dname := dialect.Name(); dname == "MySQLDialect" && index.IndexType != "" { + s.WriteString(fmt.Sprintf(" %s %s", m.Dialect.CreateIndexSuffix(), index.IndexType)) + } + s.WriteString(";") + _, err = m.Exec(s.String()) + if err != nil { + break + } + } + } + return err +} + +func (t *TableMap) DropIndex(name string) error { + + var err error + dialect := reflect.TypeOf(t.dbmap.Dialect) + for _, idx := range t.indexes { + if idx.IndexName == name { + s := bytes.Buffer{} + s.WriteString(fmt.Sprintf("DROP INDEX %s", idx.IndexName)) + + if dname := dialect.Name(); dname == "MySQLDialect" { + s.WriteString(fmt.Sprintf(" %s %s", t.dbmap.Dialect.DropIndexSuffix(), t.TableName)) + } + s.WriteString(";") + _, e := t.dbmap.Exec(s.String()) + if e != nil { + err = e + } + break + } + } + t.ResetSql() + return err +} + +// AddTable registers the given interface type with gorp. The table name +// will be given the name of the TypeOf(i). You must call this function, +// or AddTableWithName, for any struct type you wish to persist with +// the given DbMap. +// +// This operation is idempotent. If i's type is already mapped, the +// existing *TableMap is returned +func (m *DbMap) AddTable(i interface{}) *TableMap { + return m.AddTableWithName(i, "") +} + +// AddTableWithName has the same behavior as AddTable, but sets +// table.TableName to name. +func (m *DbMap) AddTableWithName(i interface{}, name string) *TableMap { + return m.AddTableWithNameAndSchema(i, "", name) +} + +// AddTableWithNameAndSchema has the same behavior as AddTable, but sets +// table.TableName to name. +func (m *DbMap) AddTableWithNameAndSchema(i interface{}, schema string, name string) *TableMap { + t := reflect.TypeOf(i) + if name == "" { + name = t.Name() + } + + // check if we have a table for this type already + // if so, update the name and return the existing pointer + for i := range m.tables { + table := m.tables[i] + if table.gotype == t { + table.TableName = name + return table + } + } + + tmap := &TableMap{gotype: t, TableName: name, SchemaName: schema, dbmap: m} + var primaryKey []*ColumnMap + tmap.Columns, primaryKey = m.readStructColumns(t) + m.tables = append(m.tables, tmap) + if len(primaryKey) > 0 { + tmap.keys = append(tmap.keys, primaryKey...) + } + + return tmap +} + +func (m *DbMap) readStructColumns(t reflect.Type) (cols []*ColumnMap, primaryKey []*ColumnMap) { + primaryKey = make([]*ColumnMap, 0) + n := t.NumField() + for i := 0; i < n; i++ { + f := t.Field(i) + if f.Anonymous && f.Type.Kind() == reflect.Struct { + // Recursively add nested fields in embedded structs. + subcols, subpk := m.readStructColumns(f.Type) + // Don't append nested fields that have the same field + // name as an already-mapped field. + for _, subcol := range subcols { + shouldAppend := true + for _, col := range cols { + if !subcol.Transient && subcol.fieldName == col.fieldName { + shouldAppend = false + break + } + } + if shouldAppend { + cols = append(cols, subcol) + } + } + if subpk != nil { + primaryKey = append(primaryKey, subpk...) + } + } else { + // Tag = Name { ',' Option } + // Option = OptionKey [ ':' OptionValue ] + cArguments := strings.Split(f.Tag.Get("db"), ",") + columnName := cArguments[0] + var maxSize int + var defaultValue string + var isAuto bool + var isPK bool + for _, argString := range cArguments[1:] { + argString = strings.TrimSpace(argString) + arg := strings.SplitN(argString, ":", 2) + + // check mandatory/unexpected option values + switch arg[0] { + case "size", "default": + // options requiring value + if len(arg) == 1 { + panic(fmt.Sprintf("missing option value for option %v on field %v", arg[0], f.Name)) + } + default: + // options where value is invalid (currently all other options) + if len(arg) == 2 { + panic(fmt.Sprintf("unexpected option value for option %v on field %v", arg[0], f.Name)) + } + } + + switch arg[0] { + case "size": + maxSize, _ = strconv.Atoi(arg[1]) + case "default": + defaultValue = arg[1] + case "primarykey": + isPK = true + case "autoincrement": + isAuto = true + default: + panic(fmt.Sprintf("Unrecognized tag option for field %v: %v", f.Name, arg)) + } + } + if columnName == "" { + columnName = f.Name + } + + gotype := f.Type + value := reflect.New(gotype).Interface() + if m.TypeConverter != nil { + // Make a new pointer to a value of type gotype and + // pass it to the TypeConverter's FromDb method to see + // if a different type should be used for the column + // type during table creation. + scanner, useHolder := m.TypeConverter.FromDb(value) + if useHolder { + value = scanner.Holder + gotype = reflect.TypeOf(value) + } + } + if typer, ok := value.(SqlTyper); ok { + gotype = reflect.TypeOf(typer.SqlType()) + } else if valuer, ok := value.(driver.Valuer); ok { + // Only check for driver.Valuer if SqlTyper wasn't + // found. + v, err := valuer.Value() + if err == nil && v != nil { + gotype = reflect.TypeOf(v) + } + } + cm := &ColumnMap{ + ColumnName: columnName, + DefaultValue: defaultValue, + Transient: columnName == "-", + fieldName: f.Name, + gotype: gotype, + isPK: isPK, + isAutoIncr: isAuto, + MaxSize: maxSize, + } + if isPK { + primaryKey = append(primaryKey, cm) + } + // Check for nested fields of the same field name and + // override them. + shouldAppend := true + for index, col := range cols { + if !col.Transient && col.fieldName == cm.fieldName { + cols[index] = cm + shouldAppend = false + break + } + } + if shouldAppend { + cols = append(cols, cm) + } + } + + } + return +} + +// CreateTables iterates through TableMaps registered to this DbMap and +// executes "create table" statements against the database for each. +// +// This is particularly useful in unit tests where you want to create +// and destroy the schema automatically. +func (m *DbMap) CreateTables() error { + return m.createTables(false) +} + +// CreateTablesIfNotExists is similar to CreateTables, but starts +// each statement with "create table if not exists" so that existing +// tables do not raise errors +func (m *DbMap) CreateTablesIfNotExists() error { + return m.createTables(true) +} + +func (m *DbMap) createTables(ifNotExists bool) error { + var err error + for i := range m.tables { + table := m.tables[i] + sql := table.SqlForCreate(ifNotExists) + _, err = m.Exec(sql) + if err != nil { + break + } + } + return err +} + +// DropTable drops an individual table. +// Returns an error when the table does not exist. +func (m *DbMap) DropTable(table interface{}) error { + t := reflect.TypeOf(table) + return m.dropTable(t, false) +} + +// DropTableIfExists drops an individual table when the table exists. +func (m *DbMap) DropTableIfExists(table interface{}) error { + t := reflect.TypeOf(table) + return m.dropTable(t, true) +} + +// DropTables iterates through TableMaps registered to this DbMap and +// executes "drop table" statements against the database for each. +func (m *DbMap) DropTables() error { + return m.dropTables(false) +} + +// DropTablesIfExists is the same as DropTables, but uses the "if exists" clause to +// avoid errors for tables that do not exist. +func (m *DbMap) DropTablesIfExists() error { + return m.dropTables(true) +} + +// Goes through all the registered tables, dropping them one by one. +// If an error is encountered, then it is returned and the rest of +// the tables are not dropped. +func (m *DbMap) dropTables(addIfExists bool) (err error) { + for _, table := range m.tables { + err = m.dropTableImpl(table, addIfExists) + if err != nil { + return err + } + } + return err +} + +// Implementation of dropping a single table. +func (m *DbMap) dropTable(t reflect.Type, addIfExists bool) error { + table := tableOrNil(m, t) + if table == nil { + return fmt.Errorf("table %s was not registered", table.TableName) + } + + return m.dropTableImpl(table, addIfExists) +} + +func (m *DbMap) dropTableImpl(table *TableMap, ifExists bool) (err error) { + tableDrop := "drop table" + if ifExists { + tableDrop = m.Dialect.IfTableExists(tableDrop, table.SchemaName, table.TableName) + } + _, err = m.Exec(fmt.Sprintf("%s %s;", tableDrop, m.Dialect.QuotedTableForQuery(table.SchemaName, table.TableName))) + return err +} + +// TruncateTables iterates through TableMaps registered to this DbMap and +// executes "truncate table" statements against the database for each, or in the case of +// sqlite, a "delete from" with no "where" clause, which uses the truncate optimization +// (http://www.sqlite.org/lang_delete.html) +func (m *DbMap) TruncateTables() error { + var err error + for i := range m.tables { + table := m.tables[i] + _, e := m.Exec(fmt.Sprintf("%s %s;", m.Dialect.TruncateClause(), m.Dialect.QuotedTableForQuery(table.SchemaName, table.TableName))) + if e != nil { + err = e + } + } + return err +} + +// Insert runs a SQL INSERT statement for each element in list. List +// items must be pointers. +// +// Any interface whose TableMap has an auto-increment primary key will +// have its last insert id bound to the PK field on the struct. +// +// The hook functions PreInsert() and/or PostInsert() will be executed +// before/after the INSERT statement if the interface defines them. +// +// Panics if any interface in the list has not been registered with AddTable +func (m *DbMap) Insert(list ...interface{}) error { + return insert(m, m, list...) +} + +// Update runs a SQL UPDATE statement for each element in list. List +// items must be pointers. +// +// The hook functions PreUpdate() and/or PostUpdate() will be executed +// before/after the UPDATE statement if the interface defines them. +// +// Returns the number of rows updated. +// +// Returns an error if SetKeys has not been called on the TableMap +// Panics if any interface in the list has not been registered with AddTable +func (m *DbMap) Update(list ...interface{}) (int64, error) { + return update(m, m, nil, list...) +} + +// UpdateColumns runs a SQL UPDATE statement for each element in list. List +// items must be pointers. +// +// Only the columns accepted by filter are included in the UPDATE. +// +// The hook functions PreUpdate() and/or PostUpdate() will be executed +// before/after the UPDATE statement if the interface defines them. +// +// Returns the number of rows updated. +// +// Returns an error if SetKeys has not been called on the TableMap +// Panics if any interface in the list has not been registered with AddTable +func (m *DbMap) UpdateColumns(filter ColumnFilter, list ...interface{}) (int64, error) { + return update(m, m, filter, list...) +} + +// Delete runs a SQL DELETE statement for each element in list. List +// items must be pointers. +// +// The hook functions PreDelete() and/or PostDelete() will be executed +// before/after the DELETE statement if the interface defines them. +// +// Returns the number of rows deleted. +// +// Returns an error if SetKeys has not been called on the TableMap +// Panics if any interface in the list has not been registered with AddTable +func (m *DbMap) Delete(list ...interface{}) (int64, error) { + return delete(m, m, list...) +} + +// Get runs a SQL SELECT to fetch a single row from the table based on the +// primary key(s) +// +// i should be an empty value for the struct to load. keys should be +// the primary key value(s) for the row to load. If multiple keys +// exist on the table, the order should match the column order +// specified in SetKeys() when the table mapping was defined. +// +// The hook function PostGet() will be executed after the SELECT +// statement if the interface defines them. +// +// Returns a pointer to a struct that matches or nil if no row is found. +// +// Returns an error if SetKeys has not been called on the TableMap +// Panics if any interface in the list has not been registered with AddTable +func (m *DbMap) Get(i interface{}, keys ...interface{}) (interface{}, error) { + return get(m, m, i, keys...) +} + +// Select runs an arbitrary SQL query, binding the columns in the result +// to fields on the struct specified by i. args represent the bind +// parameters for the SQL statement. +// +// Column names on the SELECT statement should be aliased to the field names +// on the struct i. Returns an error if one or more columns in the result +// do not match. It is OK if fields on i are not part of the SQL +// statement. +// +// The hook function PostGet() will be executed after the SELECT +// statement if the interface defines them. +// +// Values are returned in one of two ways: +// 1. If i is a struct or a pointer to a struct, returns a slice of pointers to +// matching rows of type i. +// 2. If i is a pointer to a slice, the results will be appended to that slice +// and nil returned. +// +// i does NOT need to be registered with AddTable() +func (m *DbMap) Select(i interface{}, query string, args ...interface{}) ([]interface{}, error) { + return hookedselect(m, m, i, query, args...) +} + +// Exec runs an arbitrary SQL statement. args represent the bind parameters. +// This is equivalent to running: Exec() using database/sql +func (m *DbMap) Exec(query string, args ...interface{}) (sql.Result, error) { + if m.logger != nil { + now := time.Now() + defer m.trace(now, query, args...) + } + return exec(m, query, args...) +} + +// SelectInt is a convenience wrapper around the gorp.SelectInt function +func (m *DbMap) SelectInt(query string, args ...interface{}) (int64, error) { + return SelectInt(m, query, args...) +} + +// SelectNullInt is a convenience wrapper around the gorp.SelectNullInt function +func (m *DbMap) SelectNullInt(query string, args ...interface{}) (sql.NullInt64, error) { + return SelectNullInt(m, query, args...) +} + +// SelectFloat is a convenience wrapper around the gorp.SelectFloat function +func (m *DbMap) SelectFloat(query string, args ...interface{}) (float64, error) { + return SelectFloat(m, query, args...) +} + +// SelectNullFloat is a convenience wrapper around the gorp.SelectNullFloat function +func (m *DbMap) SelectNullFloat(query string, args ...interface{}) (sql.NullFloat64, error) { + return SelectNullFloat(m, query, args...) +} + +// SelectStr is a convenience wrapper around the gorp.SelectStr function +func (m *DbMap) SelectStr(query string, args ...interface{}) (string, error) { + return SelectStr(m, query, args...) +} + +// SelectNullStr is a convenience wrapper around the gorp.SelectNullStr function +func (m *DbMap) SelectNullStr(query string, args ...interface{}) (sql.NullString, error) { + return SelectNullStr(m, query, args...) +} + +// SelectOne is a convenience wrapper around the gorp.SelectOne function +func (m *DbMap) SelectOne(holder interface{}, query string, args ...interface{}) error { + return SelectOne(m, m, holder, query, args...) +} + +// Begin starts a gorp Transaction +func (m *DbMap) Begin() (*Transaction, error) { + if m.logger != nil { + now := time.Now() + defer m.trace(now, "begin;") + } + tx, err := m.Db.Begin() + if err != nil { + return nil, err + } + return &Transaction{m, tx, false}, nil +} + +// TableFor returns the *TableMap corresponding to the given Go Type +// If no table is mapped to that type an error is returned. +// If checkPK is true and the mapped table has no registered PKs, an error is returned. +func (m *DbMap) TableFor(t reflect.Type, checkPK bool) (*TableMap, error) { + table := tableOrNil(m, t) + if table == nil { + return nil, fmt.Errorf("no table found for type: %v", t.Name()) + } + + if checkPK && len(table.keys) < 1 { + e := fmt.Sprintf("gorp: no keys defined for table: %s", + table.TableName) + return nil, errors.New(e) + } + + return table, nil +} + +// Prepare creates a prepared statement for later queries or executions. +// Multiple queries or executions may be run concurrently from the returned statement. +// This is equivalent to running: Prepare() using database/sql +func (m *DbMap) Prepare(query string) (*sql.Stmt, error) { + if m.logger != nil { + now := time.Now() + defer m.trace(now, query, nil) + } + return m.Db.Prepare(query) +} + +func tableOrNil(m *DbMap, t reflect.Type) *TableMap { + for i := range m.tables { + table := m.tables[i] + if table.gotype == t { + return table + } + } + return nil +} + +func (m *DbMap) tableForPointer(ptr interface{}, checkPK bool) (*TableMap, reflect.Value, error) { + ptrv := reflect.ValueOf(ptr) + if ptrv.Kind() != reflect.Ptr { + e := fmt.Sprintf("gorp: passed non-pointer: %v (kind=%v)", ptr, + ptrv.Kind()) + return nil, reflect.Value{}, errors.New(e) + } + elem := ptrv.Elem() + etype := reflect.TypeOf(elem.Interface()) + t, err := m.TableFor(etype, checkPK) + if err != nil { + return nil, reflect.Value{}, err + } + + return t, elem, nil +} + +func (m *DbMap) queryRow(query string, args ...interface{}) *sql.Row { + if m.logger != nil { + now := time.Now() + defer m.trace(now, query, args...) + } + return m.Db.QueryRow(query, args...) +} + +func (m *DbMap) query(query string, args ...interface{}) (*sql.Rows, error) { + if m.logger != nil { + now := time.Now() + defer m.trace(now, query, args...) + } + return m.Db.Query(query, args...) +} + +func (m *DbMap) trace(started time.Time, query string, args ...interface{}) { + if m.logger != nil { + var margs = argsString(args...) + m.logger.Printf("%s%s [%s] (%v)", m.logPrefix, query, margs, (time.Now().Sub(started))) + } +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect.go index 8277a965e1..203bc62b50 100644 --- a/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect.go +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect.go @@ -1,11 +1,17 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + package gorp -import ( - "errors" - "fmt" - "reflect" - "strings" -) +import "reflect" // The Dialect interface encapsulates behaviors that differ across // SQL databases. At present the Dialect is only used by CreateTables() @@ -34,6 +40,12 @@ type Dialect interface { // table attributes CreateTableSuffix() string + // string to append to "create index" statement + CreateIndexSuffix() string + + // string to append to "drop index" statement + DropIndexSuffix() string + // string to truncate tables TruncateClause() string @@ -80,6 +92,16 @@ type TargetedAutoIncrInserter interface { InsertAutoIncrToTarget(exec SqlExecutor, insertSql string, target interface{}, params ...interface{}) error } +// TargetQueryInserter is implemented by dialects that can perform +// assignment of integer primary key type by executing a query +// like "select sequence.currval from dual". +type TargetQueryInserter interface { + // TargetQueryInserter runs an insert operation and assigns the + // automatically generated primary key retrived by the query + // extracted from the GeneratedIdQuery field of the id column. + InsertQueryToTarget(exec SqlExecutor, insertSql, idSql string, target interface{}, params ...interface{}) error +} + func standardInsertAutoIncr(exec SqlExecutor, insertSql string, params ...interface{}) (int64, error) { res, err := exec.Exec(insertSql, params...) if err != nil { @@ -87,610 +109,3 @@ func standardInsertAutoIncr(exec SqlExecutor, insertSql string, params ...interf } return res.LastInsertId() } - -/////////////////////////////////////////////////////// -// sqlite3 // -///////////// - -type SqliteDialect struct { - suffix string -} - -func (d SqliteDialect) QuerySuffix() string { return ";" } - -func (d SqliteDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { - switch val.Kind() { - case reflect.Ptr: - return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) - case reflect.Bool: - return "integer" - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return "integer" - case reflect.Float64, reflect.Float32: - return "real" - case reflect.Slice: - if val.Elem().Kind() == reflect.Uint8 { - return "blob" - } - } - - switch val.Name() { - case "NullInt64": - return "integer" - case "NullFloat64": - return "real" - case "NullBool": - return "integer" - case "Time": - return "datetime" - } - - if maxsize < 1 { - maxsize = 255 - } - return fmt.Sprintf("varchar(%d)", maxsize) -} - -// Returns autoincrement -func (d SqliteDialect) AutoIncrStr() string { - return "autoincrement" -} - -func (d SqliteDialect) AutoIncrBindValue() string { - return "null" -} - -func (d SqliteDialect) AutoIncrInsertSuffix(col *ColumnMap) string { - return "" -} - -// Returns suffix -func (d SqliteDialect) CreateTableSuffix() string { - return d.suffix -} - -// With sqlite, there technically isn't a TRUNCATE statement, -// but a DELETE FROM uses a truncate optimization: -// http://www.sqlite.org/lang_delete.html -func (d SqliteDialect) TruncateClause() string { - return "delete from" -} - -// Returns "?" -func (d SqliteDialect) BindVar(i int) string { - return "?" -} - -func (d SqliteDialect) InsertAutoIncr(exec SqlExecutor, insertSql string, params ...interface{}) (int64, error) { - return standardInsertAutoIncr(exec, insertSql, params...) -} - -func (d SqliteDialect) QuoteField(f string) string { - return `"` + f + `"` -} - -// sqlite does not have schemas like PostgreSQL does, so just escape it like normal -func (d SqliteDialect) QuotedTableForQuery(schema string, table string) string { - return d.QuoteField(table) -} - -func (d SqliteDialect) IfSchemaNotExists(command, schema string) string { - return fmt.Sprintf("%s if not exists", command) -} - -func (d SqliteDialect) IfTableExists(command, schema, table string) string { - return fmt.Sprintf("%s if exists", command) -} - -func (d SqliteDialect) IfTableNotExists(command, schema, table string) string { - return fmt.Sprintf("%s if not exists", command) -} - -/////////////////////////////////////////////////////// -// PostgreSQL // -//////////////// - -type PostgresDialect struct { - suffix string -} - -func (d PostgresDialect) QuerySuffix() string { return ";" } - -func (d PostgresDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { - switch val.Kind() { - case reflect.Ptr: - return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) - case reflect.Bool: - return "boolean" - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint8, reflect.Uint16, reflect.Uint32: - if isAutoIncr { - return "serial" - } - return "integer" - case reflect.Int64, reflect.Uint64: - if isAutoIncr { - return "bigserial" - } - return "bigint" - case reflect.Float64: - return "double precision" - case reflect.Float32: - return "real" - case reflect.Slice: - if val.Elem().Kind() == reflect.Uint8 { - return "bytea" - } - } - - switch val.Name() { - case "NullInt64": - return "bigint" - case "NullFloat64": - return "double precision" - case "NullBool": - return "boolean" - case "Time", "NullTime": - return "timestamp with time zone" - } - - if maxsize > 0 { - return fmt.Sprintf("varchar(%d)", maxsize) - } else { - return "text" - } - -} - -// Returns empty string -func (d PostgresDialect) AutoIncrStr() string { - return "" -} - -func (d PostgresDialect) AutoIncrBindValue() string { - return "default" -} - -func (d PostgresDialect) AutoIncrInsertSuffix(col *ColumnMap) string { - return " returning " + col.ColumnName -} - -// Returns suffix -func (d PostgresDialect) CreateTableSuffix() string { - return d.suffix -} - -func (d PostgresDialect) TruncateClause() string { - return "truncate" -} - -// Returns "$(i+1)" -func (d PostgresDialect) BindVar(i int) string { - return fmt.Sprintf("$%d", i+1) -} - -func (d PostgresDialect) InsertAutoIncrToTarget(exec SqlExecutor, insertSql string, target interface{}, params ...interface{}) error { - rows, err := exec.query(insertSql, params...) - if err != nil { - return err - } - defer rows.Close() - - if !rows.Next() { - return fmt.Errorf("No serial value returned for insert: %s Encountered error: %s", insertSql, rows.Err()) - } - if err := rows.Scan(target); err != nil { - return err - } - if rows.Next() { - return fmt.Errorf("more than two serial value returned for insert: %s", insertSql) - } - return rows.Err() -} - -func (d PostgresDialect) QuoteField(f string) string { - return `"` + strings.ToLower(f) + `"` -} - -func (d PostgresDialect) QuotedTableForQuery(schema string, table string) string { - if strings.TrimSpace(schema) == "" { - return d.QuoteField(table) - } - - return schema + "." + d.QuoteField(table) -} - -func (d PostgresDialect) IfSchemaNotExists(command, schema string) string { - return fmt.Sprintf("%s if not exists", command) -} - -func (d PostgresDialect) IfTableExists(command, schema, table string) string { - return fmt.Sprintf("%s if exists", command) -} - -func (d PostgresDialect) IfTableNotExists(command, schema, table string) string { - return fmt.Sprintf("%s if not exists", command) -} - -/////////////////////////////////////////////////////// -// MySQL // -/////////// - -// Implementation of Dialect for MySQL databases. -type MySQLDialect struct { - - // Engine is the storage engine to use "InnoDB" vs "MyISAM" for example - Engine string - - // Encoding is the character encoding to use for created tables - Encoding string -} - -func (d MySQLDialect) QuerySuffix() string { return ";" } - -func (d MySQLDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { - switch val.Kind() { - case reflect.Ptr: - return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) - case reflect.Bool: - return "boolean" - case reflect.Int8: - return "tinyint" - case reflect.Uint8: - return "tinyint unsigned" - case reflect.Int16: - return "smallint" - case reflect.Uint16: - return "smallint unsigned" - case reflect.Int, reflect.Int32: - return "int" - case reflect.Uint, reflect.Uint32: - return "int unsigned" - case reflect.Int64: - return "bigint" - case reflect.Uint64: - return "bigint unsigned" - case reflect.Float64, reflect.Float32: - return "double" - case reflect.Slice: - if val.Elem().Kind() == reflect.Uint8 { - return "mediumblob" - } - } - - switch val.Name() { - case "NullInt64": - return "bigint" - case "NullFloat64": - return "double" - case "NullBool": - return "tinyint" - case "Time": - return "datetime" - } - - if maxsize < 1 { - maxsize = 255 - } - return fmt.Sprintf("varchar(%d)", maxsize) -} - -// Returns auto_increment -func (d MySQLDialect) AutoIncrStr() string { - return "auto_increment" -} - -func (d MySQLDialect) AutoIncrBindValue() string { - return "null" -} - -func (d MySQLDialect) AutoIncrInsertSuffix(col *ColumnMap) string { - return "" -} - -// Returns engine=%s charset=%s based on values stored on struct -func (d MySQLDialect) CreateTableSuffix() string { - if d.Engine == "" || d.Encoding == "" { - msg := "gorp - undefined" - - if d.Engine == "" { - msg += " MySQLDialect.Engine" - } - if d.Engine == "" && d.Encoding == "" { - msg += "," - } - if d.Encoding == "" { - msg += " MySQLDialect.Encoding" - } - msg += ". Check that your MySQLDialect was correctly initialized when declared." - panic(msg) - } - - return fmt.Sprintf(" engine=%s charset=%s", d.Engine, d.Encoding) -} - -func (d MySQLDialect) TruncateClause() string { - return "truncate" -} - -// Returns "?" -func (d MySQLDialect) BindVar(i int) string { - return "?" -} - -func (d MySQLDialect) InsertAutoIncr(exec SqlExecutor, insertSql string, params ...interface{}) (int64, error) { - return standardInsertAutoIncr(exec, insertSql, params...) -} - -func (d MySQLDialect) QuoteField(f string) string { - return "`" + f + "`" -} - -func (d MySQLDialect) QuotedTableForQuery(schema string, table string) string { - if strings.TrimSpace(schema) == "" { - return d.QuoteField(table) - } - - return schema + "." + d.QuoteField(table) -} - -func (d MySQLDialect) IfSchemaNotExists(command, schema string) string { - return fmt.Sprintf("%s if not exists", command) -} - -func (d MySQLDialect) IfTableExists(command, schema, table string) string { - return fmt.Sprintf("%s if exists", command) -} - -func (d MySQLDialect) IfTableNotExists(command, schema, table string) string { - return fmt.Sprintf("%s if not exists", command) -} - -/////////////////////////////////////////////////////// -// Sql Server // -//////////////// - -// Implementation of Dialect for Microsoft SQL Server databases. -// Tested on SQL Server 2008 with driver: github.com/denisenkom/go-mssqldb - -type SqlServerDialect struct { - suffix string -} - -func (d SqlServerDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { - switch val.Kind() { - case reflect.Ptr: - return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) - case reflect.Bool: - return "bit" - case reflect.Int8: - return "tinyint" - case reflect.Uint8: - return "smallint" - case reflect.Int16: - return "smallint" - case reflect.Uint16: - return "int" - case reflect.Int, reflect.Int32: - return "int" - case reflect.Uint, reflect.Uint32: - return "bigint" - case reflect.Int64: - return "bigint" - case reflect.Uint64: - return "bigint" - case reflect.Float32: - return "real" - case reflect.Float64: - return "float(53)" - case reflect.Slice: - if val.Elem().Kind() == reflect.Uint8 { - return "varbinary" - } - } - - switch val.Name() { - case "NullInt64": - return "bigint" - case "NullFloat64": - return "float(53)" - case "NullBool": - return "tinyint" - case "Time": - return "datetime" - } - - if maxsize < 1 { - maxsize = 255 - } - return fmt.Sprintf("varchar(%d)", maxsize) -} - -// Returns auto_increment -func (d SqlServerDialect) AutoIncrStr() string { - return "identity(0,1)" -} - -// Empty string removes autoincrement columns from the INSERT statements. -func (d SqlServerDialect) AutoIncrBindValue() string { - return "" -} - -func (d SqlServerDialect) AutoIncrInsertSuffix(col *ColumnMap) string { - return "" -} - -// Returns suffix -func (d SqlServerDialect) CreateTableSuffix() string { - - return d.suffix -} - -func (d SqlServerDialect) TruncateClause() string { - return "delete from" -} - -// Returns "?" -func (d SqlServerDialect) BindVar(i int) string { - return "?" -} - -func (d SqlServerDialect) InsertAutoIncr(exec SqlExecutor, insertSql string, params ...interface{}) (int64, error) { - return standardInsertAutoIncr(exec, insertSql, params...) -} - -func (d SqlServerDialect) QuoteField(f string) string { - return `"` + f + `"` -} - -func (d SqlServerDialect) QuotedTableForQuery(schema string, table string) string { - if strings.TrimSpace(schema) == "" { - return table - } - return schema + "." + table -} - -func (d SqlServerDialect) QuerySuffix() string { return ";" } - -func (d SqlServerDialect) IfSchemaNotExists(command, schema string) string { - s := fmt.Sprintf("if not exists (select name from sys.schemas where name = '%s') %s", schema, command) - return s -} - -func (d SqlServerDialect) IfTableExists(command, schema, table string) string { - var schema_clause string - if strings.TrimSpace(schema) != "" { - schema_clause = fmt.Sprintf("table_schema = '%s' and ", schema) - } - s := fmt.Sprintf("if exists (select * from information_schema.tables where %stable_name = '%s') %s", schema_clause, table, command) - return s -} - -func (d SqlServerDialect) IfTableNotExists(command, schema, table string) string { - var schema_clause string - if strings.TrimSpace(schema) != "" { - schema_clause = fmt.Sprintf("table_schema = '%s' and ", schema) - } - s := fmt.Sprintf("if not exists (select * from information_schema.tables where %stable_name = '%s') %s", schema_clause, table, command) - return s -} - -/////////////////////////////////////////////////////// -// Oracle // -/////////// - -// Implementation of Dialect for Oracle databases. -type OracleDialect struct{} - -func (d OracleDialect) QuerySuffix() string { return "" } - -func (d OracleDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { - switch val.Kind() { - case reflect.Ptr: - return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) - case reflect.Bool: - return "boolean" - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint8, reflect.Uint16, reflect.Uint32: - if isAutoIncr { - return "serial" - } - return "integer" - case reflect.Int64, reflect.Uint64: - if isAutoIncr { - return "bigserial" - } - return "bigint" - case reflect.Float64: - return "double precision" - case reflect.Float32: - return "real" - case reflect.Slice: - if val.Elem().Kind() == reflect.Uint8 { - return "bytea" - } - } - - switch val.Name() { - case "NullInt64": - return "bigint" - case "NullFloat64": - return "double precision" - case "NullBool": - return "boolean" - case "NullTime", "Time": - return "timestamp with time zone" - } - - if maxsize > 0 { - return fmt.Sprintf("varchar(%d)", maxsize) - } else { - return "text" - } - -} - -// Returns empty string -func (d OracleDialect) AutoIncrStr() string { - return "" -} - -func (d OracleDialect) AutoIncrBindValue() string { - return "default" -} - -func (d OracleDialect) AutoIncrInsertSuffix(col *ColumnMap) string { - return " returning " + col.ColumnName -} - -// Returns suffix -func (d OracleDialect) CreateTableSuffix() string { - return "" -} - -func (d OracleDialect) TruncateClause() string { - return "truncate" -} - -// Returns "$(i+1)" -func (d OracleDialect) BindVar(i int) string { - return fmt.Sprintf(":%d", i+1) -} - -func (d OracleDialect) InsertAutoIncr(exec SqlExecutor, insertSql string, params ...interface{}) (int64, error) { - rows, err := exec.query(insertSql, params...) - if err != nil { - return 0, err - } - defer rows.Close() - - if rows.Next() { - var id int64 - err := rows.Scan(&id) - return id, err - } - - return 0, errors.New("No serial value returned for insert: " + insertSql + " Encountered error: " + rows.Err().Error()) -} - -func (d OracleDialect) QuoteField(f string) string { - return `"` + strings.ToUpper(f) + `"` -} - -func (d OracleDialect) QuotedTableForQuery(schema string, table string) string { - if strings.TrimSpace(schema) == "" { - return d.QuoteField(table) - } - - return schema + "." + d.QuoteField(table) -} - -func (d OracleDialect) IfSchemaNotExists(command, schema string) string { - return fmt.Sprintf("%s if not exists", command) -} - -func (d OracleDialect) IfTableExists(command, schema, table string) string { - return fmt.Sprintf("%s if exists", command) -} - -func (d OracleDialect) IfTableNotExists(command, schema, table string) string { - return fmt.Sprintf("%s if not exists", command) -} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_mysql.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_mysql.go new file mode 100644 index 0000000000..3d7d340276 --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_mysql.go @@ -0,0 +1,171 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "fmt" + "reflect" + "strings" +) + +// Implementation of Dialect for MySQL databases. +type MySQLDialect struct { + + // Engine is the storage engine to use "InnoDB" vs "MyISAM" for example + Engine string + + // Encoding is the character encoding to use for created tables + Encoding string +} + +func (d MySQLDialect) QuerySuffix() string { return ";" } + +func (d MySQLDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { + switch val.Kind() { + case reflect.Ptr: + return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) + case reflect.Bool: + return "boolean" + case reflect.Int8: + return "tinyint" + case reflect.Uint8: + return "tinyint unsigned" + case reflect.Int16: + return "smallint" + case reflect.Uint16: + return "smallint unsigned" + case reflect.Int, reflect.Int32: + return "int" + case reflect.Uint, reflect.Uint32: + return "int unsigned" + case reflect.Int64: + return "bigint" + case reflect.Uint64: + return "bigint unsigned" + case reflect.Float64, reflect.Float32: + return "double" + case reflect.Slice: + if val.Elem().Kind() == reflect.Uint8 { + return "mediumblob" + } + } + + switch val.Name() { + case "NullInt64": + return "bigint" + case "NullFloat64": + return "double" + case "NullBool": + return "tinyint" + case "Time": + return "datetime" + } + + if maxsize < 1 { + maxsize = 255 + } + + /* == About varchar(N) == + * N is number of characters. + * A varchar column can store up to 65535 bytes. + * Remember that 1 character is 3 bytes in utf-8 charset. + * Also remember that each row can store up to 65535 bytes, + * and you have some overheads, so it's not possible for a + * varchar column to have 65535/3 characters really. + * So it would be better to use 'text' type in stead of + * large varchar type. + */ + if maxsize < 256 { + return fmt.Sprintf("varchar(%d)", maxsize) + } else { + return "text" + } +} + +// Returns auto_increment +func (d MySQLDialect) AutoIncrStr() string { + return "auto_increment" +} + +func (d MySQLDialect) AutoIncrBindValue() string { + return "null" +} + +func (d MySQLDialect) AutoIncrInsertSuffix(col *ColumnMap) string { + return "" +} + +// Returns engine=%s charset=%s based on values stored on struct +func (d MySQLDialect) CreateTableSuffix() string { + if d.Engine == "" || d.Encoding == "" { + msg := "gorp - undefined" + + if d.Engine == "" { + msg += " MySQLDialect.Engine" + } + if d.Engine == "" && d.Encoding == "" { + msg += "," + } + if d.Encoding == "" { + msg += " MySQLDialect.Encoding" + } + msg += ". Check that your MySQLDialect was correctly initialized when declared." + panic(msg) + } + + return fmt.Sprintf(" engine=%s charset=%s", d.Engine, d.Encoding) +} + +func (m MySQLDialect) CreateIndexSuffix() string { + return "using" +} + +func (m MySQLDialect) DropIndexSuffix() string { + return "on" +} + +func (m MySQLDialect) TruncateClause() string { + return "truncate" +} + +// Returns "?" +func (d MySQLDialect) BindVar(i int) string { + return "?" +} + +func (d MySQLDialect) InsertAutoIncr(exec SqlExecutor, insertSql string, params ...interface{}) (int64, error) { + return standardInsertAutoIncr(exec, insertSql, params...) +} + +func (d MySQLDialect) QuoteField(f string) string { + return "`" + f + "`" +} + +func (d MySQLDialect) QuotedTableForQuery(schema string, table string) string { + if strings.TrimSpace(schema) == "" { + return d.QuoteField(table) + } + + return schema + "." + d.QuoteField(table) +} + +func (d MySQLDialect) IfSchemaNotExists(command, schema string) string { + return fmt.Sprintf("%s if not exists", command) +} + +func (d MySQLDialect) IfTableExists(command, schema, table string) string { + return fmt.Sprintf("%s if exists", command) +} + +func (d MySQLDialect) IfTableNotExists(command, schema, table string) string { + return fmt.Sprintf("%s if not exists", command) +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_oracle.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_oracle.go new file mode 100644 index 0000000000..c381380f9c --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_oracle.go @@ -0,0 +1,146 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "fmt" + "reflect" + "strings" +) + +// Implementation of Dialect for Oracle databases. +type OracleDialect struct{} + +func (d OracleDialect) QuerySuffix() string { return "" } + +func (d OracleDialect) CreateIndexSuffix() string { return "" } + +func (d OracleDialect) DropIndexSuffix() string { return "" } + +func (d OracleDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { + switch val.Kind() { + case reflect.Ptr: + return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) + case reflect.Bool: + return "boolean" + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: + if isAutoIncr { + return "serial" + } + return "integer" + case reflect.Int64, reflect.Uint64: + if isAutoIncr { + return "bigserial" + } + return "bigint" + case reflect.Float64: + return "double precision" + case reflect.Float32: + return "real" + case reflect.Slice: + if val.Elem().Kind() == reflect.Uint8 { + return "bytea" + } + } + + switch val.Name() { + case "NullInt64": + return "bigint" + case "NullFloat64": + return "double precision" + case "NullBool": + return "boolean" + case "NullTime", "Time": + return "timestamp with time zone" + } + + if maxsize > 0 { + return fmt.Sprintf("varchar(%d)", maxsize) + } else { + return "text" + } + +} + +// Returns empty string +func (d OracleDialect) AutoIncrStr() string { + return "" +} + +func (d OracleDialect) AutoIncrBindValue() string { + return "NULL" +} + +func (d OracleDialect) AutoIncrInsertSuffix(col *ColumnMap) string { + return "" +} + +// Returns suffix +func (d OracleDialect) CreateTableSuffix() string { + return "" +} + +func (d OracleDialect) TruncateClause() string { + return "truncate" +} + +// Returns "$(i+1)" +func (d OracleDialect) BindVar(i int) string { + return fmt.Sprintf(":%d", i+1) +} + +// After executing the insert uses the ColMap IdQuery to get the generated id +func (d OracleDialect) InsertQueryToTarget(exec SqlExecutor, insertSql, idSql string, target interface{}, params ...interface{}) error { + _, err := exec.Exec(insertSql, params...) + if err != nil { + return err + } + id, err := exec.SelectInt(idSql) + if err != nil { + return err + } + switch target.(type) { + case *int64: + *(target.(*int64)) = id + case *int32: + *(target.(*int32)) = int32(id) + case int: + *(target.(*int)) = int(id) + default: + return fmt.Errorf("Id field can be int, int32 or int64") + } + return nil +} + +func (d OracleDialect) QuoteField(f string) string { + return `"` + strings.ToUpper(f) + `"` +} + +func (d OracleDialect) QuotedTableForQuery(schema string, table string) string { + if strings.TrimSpace(schema) == "" { + return d.QuoteField(table) + } + + return schema + "." + d.QuoteField(table) +} + +func (d OracleDialect) IfSchemaNotExists(command, schema string) string { + return fmt.Sprintf("%s if not exists", command) +} + +func (d OracleDialect) IfTableExists(command, schema, table string) string { + return fmt.Sprintf("%s if exists", command) +} + +func (d OracleDialect) IfTableNotExists(command, schema, table string) string { + return fmt.Sprintf("%s if not exists", command) +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_postgres.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_postgres.go new file mode 100644 index 0000000000..a086381a89 --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_postgres.go @@ -0,0 +1,147 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "fmt" + "reflect" + "strings" +) + +type PostgresDialect struct { + suffix string +} + +func (d PostgresDialect) QuerySuffix() string { return ";" } + +func (d PostgresDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { + switch val.Kind() { + case reflect.Ptr: + return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) + case reflect.Bool: + return "boolean" + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: + if isAutoIncr { + return "serial" + } + return "integer" + case reflect.Int64, reflect.Uint64: + if isAutoIncr { + return "bigserial" + } + return "bigint" + case reflect.Float64: + return "double precision" + case reflect.Float32: + return "real" + case reflect.Slice: + if val.Elem().Kind() == reflect.Uint8 { + return "bytea" + } + } + + switch val.Name() { + case "NullInt64": + return "bigint" + case "NullFloat64": + return "double precision" + case "NullBool": + return "boolean" + case "Time", "NullTime": + return "timestamp with time zone" + } + + if maxsize > 0 { + return fmt.Sprintf("varchar(%d)", maxsize) + } else { + return "text" + } + +} + +// Returns empty string +func (d PostgresDialect) AutoIncrStr() string { + return "" +} + +func (d PostgresDialect) AutoIncrBindValue() string { + return "default" +} + +func (d PostgresDialect) AutoIncrInsertSuffix(col *ColumnMap) string { + return " returning " + col.ColumnName +} + +// Returns suffix +func (d PostgresDialect) CreateTableSuffix() string { + return d.suffix +} + +func (d PostgresDialect) CreateIndexSuffix() string { + return "using" +} + +func (d PostgresDialect) DropIndexSuffix() string { + return "" +} + +func (d PostgresDialect) TruncateClause() string { + return "truncate" +} + +// Returns "$(i+1)" +func (d PostgresDialect) BindVar(i int) string { + return fmt.Sprintf("$%d", i+1) +} + +func (d PostgresDialect) InsertAutoIncrToTarget(exec SqlExecutor, insertSql string, target interface{}, params ...interface{}) error { + rows, err := exec.query(insertSql, params...) + if err != nil { + return err + } + defer rows.Close() + + if !rows.Next() { + return fmt.Errorf("No serial value returned for insert: %s Encountered error: %s", insertSql, rows.Err()) + } + if err := rows.Scan(target); err != nil { + return err + } + if rows.Next() { + return fmt.Errorf("more than two serial value returned for insert: %s", insertSql) + } + return rows.Err() +} + +func (d PostgresDialect) QuoteField(f string) string { + return `"` + strings.ToLower(f) + `"` +} + +func (d PostgresDialect) QuotedTableForQuery(schema string, table string) string { + if strings.TrimSpace(schema) == "" { + return d.QuoteField(table) + } + + return schema + "." + d.QuoteField(table) +} + +func (d PostgresDialect) IfSchemaNotExists(command, schema string) string { + return fmt.Sprintf("%s if not exists", command) +} + +func (d PostgresDialect) IfTableExists(command, schema, table string) string { + return fmt.Sprintf("%s if exists", command) +} + +func (d PostgresDialect) IfTableNotExists(command, schema, table string) string { + return fmt.Sprintf("%s if not exists", command) +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_sqlite.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_sqlite.go new file mode 100644 index 0000000000..7d9b297575 --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_sqlite.go @@ -0,0 +1,119 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "fmt" + "reflect" +) + +type SqliteDialect struct { + suffix string +} + +func (d SqliteDialect) QuerySuffix() string { return ";" } + +func (d SqliteDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { + switch val.Kind() { + case reflect.Ptr: + return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) + case reflect.Bool: + return "integer" + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return "integer" + case reflect.Float64, reflect.Float32: + return "real" + case reflect.Slice: + if val.Elem().Kind() == reflect.Uint8 { + return "blob" + } + } + + switch val.Name() { + case "NullInt64": + return "integer" + case "NullFloat64": + return "real" + case "NullBool": + return "integer" + case "Time": + return "datetime" + } + + if maxsize < 1 { + maxsize = 255 + } + return fmt.Sprintf("varchar(%d)", maxsize) +} + +// Returns autoincrement +func (d SqliteDialect) AutoIncrStr() string { + return "autoincrement" +} + +func (d SqliteDialect) AutoIncrBindValue() string { + return "null" +} + +func (d SqliteDialect) AutoIncrInsertSuffix(col *ColumnMap) string { + return "" +} + +// Returns suffix +func (d SqliteDialect) CreateTableSuffix() string { + return d.suffix +} + +func (d SqliteDialect) CreateIndexSuffix() string { + return "" +} + +func (d SqliteDialect) DropIndexSuffix() string { + return "" +} + +// With sqlite, there technically isn't a TRUNCATE statement, +// but a DELETE FROM uses a truncate optimization: +// http://www.sqlite.org/lang_delete.html +func (d SqliteDialect) TruncateClause() string { + return "delete from" +} + +// Returns "?" +func (d SqliteDialect) BindVar(i int) string { + return "?" +} + +func (d SqliteDialect) InsertAutoIncr(exec SqlExecutor, insertSql string, params ...interface{}) (int64, error) { + return standardInsertAutoIncr(exec, insertSql, params...) +} + +func (d SqliteDialect) QuoteField(f string) string { + return `"` + f + `"` +} + +// sqlite does not have schemas like PostgreSQL does, so just escape it like normal +func (d SqliteDialect) QuotedTableForQuery(schema string, table string) string { + return d.QuoteField(table) +} + +func (d SqliteDialect) IfSchemaNotExists(command, schema string) string { + return fmt.Sprintf("%s if not exists", command) +} + +func (d SqliteDialect) IfTableExists(command, schema, table string) string { + return fmt.Sprintf("%s if exists", command) +} + +func (d SqliteDialect) IfTableNotExists(command, schema, table string) string { + return fmt.Sprintf("%s if not exists", command) +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_sqlserver.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_sqlserver.go new file mode 100644 index 0000000000..8808af5981 --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/dialect_sqlserver.go @@ -0,0 +1,152 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "fmt" + "reflect" + "strings" +) + +// Implementation of Dialect for Microsoft SQL Server databases. +// Use gorp.SqlServerDialect{"2005"} for legacy datatypes. +// Tested with driver: github.com/denisenkom/go-mssqldb + +type SqlServerDialect struct { + + // If set to "2005" legacy datatypes will be used + Version string +} + +func (d SqlServerDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) string { + switch val.Kind() { + case reflect.Ptr: + return d.ToSqlType(val.Elem(), maxsize, isAutoIncr) + case reflect.Bool: + return "bit" + case reflect.Int8: + return "tinyint" + case reflect.Uint8: + return "smallint" + case reflect.Int16: + return "smallint" + case reflect.Uint16: + return "int" + case reflect.Int, reflect.Int32: + return "int" + case reflect.Uint, reflect.Uint32: + return "bigint" + case reflect.Int64: + return "bigint" + case reflect.Uint64: + return "numeric(20,0)" + case reflect.Float32: + return "float(24)" + case reflect.Float64: + return "float(53)" + case reflect.Slice: + if val.Elem().Kind() == reflect.Uint8 { + return "varbinary" + } + } + + switch val.Name() { + case "NullInt64": + return "bigint" + case "NullFloat64": + return "float(53)" + case "NullBool": + return "bit" + case "NullTime", "Time": + if d.Version == "2005" { + return "datetime" + } + return "datetime2" + } + + if maxsize < 1 { + if d.Version == "2005" { + maxsize = 255 + } else { + return fmt.Sprintf("nvarchar(max)") + } + } + return fmt.Sprintf("nvarchar(%d)", maxsize) +} + +// Returns auto_increment +func (d SqlServerDialect) AutoIncrStr() string { + return "identity(0,1)" +} + +// Empty string removes autoincrement columns from the INSERT statements. +func (d SqlServerDialect) AutoIncrBindValue() string { + return "" +} + +func (d SqlServerDialect) AutoIncrInsertSuffix(col *ColumnMap) string { + return "" +} + +func (d SqlServerDialect) CreateTableSuffix() string { return ";" } + +func (d SqlServerDialect) TruncateClause() string { + return "truncate table" +} + +// Returns "?" +func (d SqlServerDialect) BindVar(i int) string { + return "?" +} + +func (d SqlServerDialect) InsertAutoIncr(exec SqlExecutor, insertSql string, params ...interface{}) (int64, error) { + return standardInsertAutoIncr(exec, insertSql, params...) +} + +func (d SqlServerDialect) QuoteField(f string) string { + return "[" + strings.Replace(f, "]", "]]", -1) + "]" +} + +func (d SqlServerDialect) QuotedTableForQuery(schema string, table string) string { + if strings.TrimSpace(schema) == "" { + return d.QuoteField(table) + } + return d.QuoteField(schema) + "." + d.QuoteField(table) +} + +func (d SqlServerDialect) QuerySuffix() string { return ";" } + +func (d SqlServerDialect) IfSchemaNotExists(command, schema string) string { + s := fmt.Sprintf("if schema_id(N'%s') is null %s", schema, command) + return s +} + +func (d SqlServerDialect) IfTableExists(command, schema, table string) string { + var schema_clause string + if strings.TrimSpace(schema) != "" { + schema_clause = fmt.Sprintf("%s.", d.QuoteField(schema)) + } + s := fmt.Sprintf("if object_id('%s%s') is not null %s", schema_clause, d.QuoteField(table), command) + return s +} + +func (d SqlServerDialect) IfTableNotExists(command, schema, table string) string { + var schema_clause string + if strings.TrimSpace(schema) != "" { + schema_clause = fmt.Sprintf("%s.", schema) + } + s := fmt.Sprintf("if object_id('%s%s') is null %s", schema_clause, table, command) + return s +} + +func (d SqlServerDialect) CreateIndexSuffix() string { return "" } +func (d SqlServerDialect) DropIndexSuffix() string { return "" } diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/errors.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/errors.go index 356d684757..d13f03fc3c 100644 --- a/Godeps/_workspace/src/github.com/go-gorp/gorp/errors.go +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/errors.go @@ -1,3 +1,14 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + package gorp import ( @@ -6,13 +17,14 @@ import ( // A non-fatal error, when a select query returns columns that do not exist // as fields in the struct it is being mapped to +// TODO: discuss wether this needs an error. encoding/json silently ignores missing fields type NoFieldInTypeError struct { TypeName string MissingColNames []string } func (err *NoFieldInTypeError) Error() string { - return fmt.Sprintf("gorp: No fields %+v in type %s", err.MissingColNames, err.TypeName) + return fmt.Sprintf("gorp: no fields %+v in type %s", err.MissingColNames, err.TypeName) } // returns true if the error is non-fatal (ie, we shouldn't immediately return) diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/gorp.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/gorp.go index 4c91b6f781..1f32283f54 100644 --- a/Godeps/_workspace/src/github.com/go-gorp/gorp/gorp.go +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/gorp.go @@ -12,10 +12,8 @@ package gorp import ( - "bytes" "database/sql" "database/sql/driver" - "errors" "fmt" "reflect" "regexp" @@ -23,7 +21,8 @@ import ( "time" ) -// Oracle String (empty string is null) +// OracleString (empty string is null) +// TODO: move to dialect/oracle?, rename to String? type OracleString struct { sql.NullString } @@ -46,80 +45,25 @@ func (os OracleString) Value() (driver.Value, error) { return os.String, nil } -// A nullable Time value -type NullTime struct { - Time time.Time - Valid bool // Valid is true if Time is not NULL +// SqlTyper is a type that returns its database type. Most of the +// time, the type can just use "database/sql/driver".Valuer; but when +// it returns nil for its empty value, it needs to implement SqlTyper +// to have its column type detected properly during table creation. +type SqlTyper interface { + SqlType() driver.Valuer } +// for fields that exists in DB table, but not exists in struct +type dummyField struct{} + // Scan implements the Scanner interface. -func (nt *NullTime) Scan(value interface{}) error { - switch t := value.(type) { - case time.Time: - nt.Time, nt.Valid = t, true - case []byte: - nt.Valid = false - for _, dtfmt := range []string{ - "2006-01-02 15:04:05.999999999", - "2006-01-02T15:04:05.999999999", - "2006-01-02 15:04:05", - "2006-01-02T15:04:05", - "2006-01-02 15:04", - "2006-01-02T15:04", - "2006-01-02", - "2006-01-02 15:04:05-07:00", - } { - var err error - if nt.Time, err = time.Parse(dtfmt, string(t)); err == nil { - nt.Valid = true - break - } - } - } +func (nt *dummyField) Scan(value interface{}) error { return nil } -// Value implements the driver Valuer interface. -func (nt NullTime) Value() (driver.Value, error) { - if !nt.Valid { - return nil, nil - } - return nt.Time, nil -} - var zeroVal reflect.Value var versFieldConst = "[gorp_ver_field]" -// OptimisticLockError is returned by Update() or Delete() if the -// struct being modified has a Version field and the value is not equal to -// the current value in the database -type OptimisticLockError struct { - // Table name where the lock error occurred - TableName string - - // Primary key values of the row being updated/deleted - Keys []interface{} - - // true if a row was found with those keys, indicating the - // LocalVersion is stale. false if no value was found with those - // keys, suggesting the row has been deleted since loaded, or - // was never inserted to begin with - RowExists bool - - // Version value on the struct passed to Update/Delete. This value is - // out of sync with the database. - LocalVersion int64 -} - -// Error returns a description of the cause of the lock error -func (e OptimisticLockError) Error() string { - if e.RowExists { - return fmt.Sprintf("gorp: OptimisticLockError table=%s keys=%v out of date version=%d", e.TableName, e.Keys, e.LocalVersion) - } - - return fmt.Sprintf("gorp: OptimisticLockError no row found for table=%s keys=%v", e.TableName, e.Keys) -} - // The TypeConverter interface provides a way to map a value of one // type to another type when persisting to, or loading from, a database. // @@ -139,502 +83,6 @@ type TypeConverter interface { FromDb(target interface{}) (CustomScanner, bool) } -// CustomScanner binds a database column value to a Go type -type CustomScanner struct { - // After a row is scanned, Holder will contain the value from the database column. - // Initialize the CustomScanner with the concrete Go type you wish the database - // driver to scan the raw column into. - Holder interface{} - // Target typically holds a pointer to the target struct field to bind the Holder - // value to. - Target interface{} - // Binder is a custom function that converts the holder value to the target type - // and sets target accordingly. This function should return error if a problem - // occurs converting the holder to the target. - Binder func(holder interface{}, target interface{}) error -} - -// Bind is called automatically by gorp after Scan() -func (me CustomScanner) Bind() error { - return me.Binder(me.Holder, me.Target) -} - -// DbMap is the root gorp mapping object. Create one of these for each -// database schema you wish to map. Each DbMap contains a list of -// mapped tables. -// -// Example: -// -// dialect := gorp.MySQLDialect{"InnoDB", "UTF8"} -// dbmap := &gorp.DbMap{Db: db, Dialect: dialect} -// -type DbMap struct { - // Db handle to use with this map - Db *sql.DB - - // Dialect implementation to use with this map - Dialect Dialect - - TypeConverter TypeConverter - - tables []*TableMap - logger GorpLogger - logPrefix string -} - -// TableMap represents a mapping between a Go struct and a database table -// Use dbmap.AddTable() or dbmap.AddTableWithName() to create these -type TableMap struct { - // Name of database table. - TableName string - SchemaName string - gotype reflect.Type - Columns []*ColumnMap - keys []*ColumnMap - uniqueTogether [][]string - version *ColumnMap - insertPlan bindPlan - updatePlan bindPlan - deletePlan bindPlan - getPlan bindPlan - dbmap *DbMap -} - -// ResetSql removes cached insert/update/select/delete SQL strings -// associated with this TableMap. Call this if you've modified -// any column names or the table name itself. -func (t *TableMap) ResetSql() { - t.insertPlan = bindPlan{} - t.updatePlan = bindPlan{} - t.deletePlan = bindPlan{} - t.getPlan = bindPlan{} -} - -// SetKeys lets you specify the fields on a struct that map to primary -// key columns on the table. If isAutoIncr is set, result.LastInsertId() -// will be used after INSERT to bind the generated id to the Go struct. -// -// Automatically calls ResetSql() to ensure SQL statements are regenerated. -// -// Panics if isAutoIncr is true, and fieldNames length != 1 -// -func (t *TableMap) SetKeys(isAutoIncr bool, fieldNames ...string) *TableMap { - if isAutoIncr && len(fieldNames) != 1 { - panic(fmt.Sprintf( - "gorp: SetKeys: fieldNames length must be 1 if key is auto-increment. (Saw %v fieldNames)", - len(fieldNames))) - } - t.keys = make([]*ColumnMap, 0) - for _, name := range fieldNames { - colmap := t.ColMap(name) - colmap.isPK = true - colmap.isAutoIncr = isAutoIncr - t.keys = append(t.keys, colmap) - } - t.ResetSql() - - return t -} - -// SetUniqueTogether lets you specify uniqueness constraints across multiple -// columns on the table. Each call adds an additional constraint for the -// specified columns. -// -// Automatically calls ResetSql() to ensure SQL statements are regenerated. -// -// Panics if fieldNames length < 2. -// -func (t *TableMap) SetUniqueTogether(fieldNames ...string) *TableMap { - if len(fieldNames) < 2 { - panic(fmt.Sprintf( - "gorp: SetUniqueTogether: must provide at least two fieldNames to set uniqueness constraint.")) - } - - columns := make([]string, 0) - for _, name := range fieldNames { - columns = append(columns, name) - } - t.uniqueTogether = append(t.uniqueTogether, columns) - t.ResetSql() - - return t -} - -// ColMap returns the ColumnMap pointer matching the given struct field -// name. It panics if the struct does not contain a field matching this -// name. -func (t *TableMap) ColMap(field string) *ColumnMap { - col := colMapOrNil(t, field) - if col == nil { - e := fmt.Sprintf("No ColumnMap in table %s type %s with field %s", - t.TableName, t.gotype.Name(), field) - - panic(e) - } - return col -} - -func colMapOrNil(t *TableMap, field string) *ColumnMap { - for _, col := range t.Columns { - if col.fieldName == field || col.ColumnName == field { - return col - } - } - return nil -} - -// SetVersionCol sets the column to use as the Version field. By default -// the "Version" field is used. Returns the column found, or panics -// if the struct does not contain a field matching this name. -// -// Automatically calls ResetSql() to ensure SQL statements are regenerated. -func (t *TableMap) SetVersionCol(field string) *ColumnMap { - c := t.ColMap(field) - t.version = c - t.ResetSql() - return c -} - -type bindPlan struct { - query string - argFields []string - keyFields []string - versField string - autoIncrIdx int - autoIncrFieldName string -} - -func (plan bindPlan) createBindInstance(elem reflect.Value, conv TypeConverter) (bindInstance, error) { - bi := bindInstance{query: plan.query, autoIncrIdx: plan.autoIncrIdx, autoIncrFieldName: plan.autoIncrFieldName, versField: plan.versField} - if plan.versField != "" { - bi.existingVersion = elem.FieldByName(plan.versField).Int() - } - - var err error - - for i := 0; i < len(plan.argFields); i++ { - k := plan.argFields[i] - if k == versFieldConst { - newVer := bi.existingVersion + 1 - bi.args = append(bi.args, newVer) - if bi.existingVersion == 0 { - elem.FieldByName(plan.versField).SetInt(int64(newVer)) - } - } else { - val := elem.FieldByName(k).Interface() - if conv != nil { - val, err = conv.ToDb(val) - if err != nil { - return bindInstance{}, err - } - } - bi.args = append(bi.args, val) - } - } - - for i := 0; i < len(plan.keyFields); i++ { - k := plan.keyFields[i] - val := elem.FieldByName(k).Interface() - if conv != nil { - val, err = conv.ToDb(val) - if err != nil { - return bindInstance{}, err - } - } - bi.keys = append(bi.keys, val) - } - - return bi, nil -} - -type bindInstance struct { - query string - args []interface{} - keys []interface{} - existingVersion int64 - versField string - autoIncrIdx int - autoIncrFieldName string -} - -func (t *TableMap) bindInsert(elem reflect.Value) (bindInstance, error) { - plan := t.insertPlan - if plan.query == "" { - plan.autoIncrIdx = -1 - - s := bytes.Buffer{} - s2 := bytes.Buffer{} - s.WriteString(fmt.Sprintf("insert into %s (", t.dbmap.Dialect.QuotedTableForQuery(t.SchemaName, t.TableName))) - - x := 0 - first := true - for y := range t.Columns { - col := t.Columns[y] - if !(col.isAutoIncr && t.dbmap.Dialect.AutoIncrBindValue() == "") { - if !col.Transient { - if !first { - s.WriteString(",") - s2.WriteString(",") - } - s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) - - if col.isAutoIncr { - s2.WriteString(t.dbmap.Dialect.AutoIncrBindValue()) - plan.autoIncrIdx = y - plan.autoIncrFieldName = col.fieldName - } else { - s2.WriteString(t.dbmap.Dialect.BindVar(x)) - if col == t.version { - plan.versField = col.fieldName - plan.argFields = append(plan.argFields, versFieldConst) - } else { - plan.argFields = append(plan.argFields, col.fieldName) - } - - x++ - } - first = false - } - } else { - plan.autoIncrIdx = y - plan.autoIncrFieldName = col.fieldName - } - } - s.WriteString(") values (") - s.WriteString(s2.String()) - s.WriteString(")") - if plan.autoIncrIdx > -1 { - s.WriteString(t.dbmap.Dialect.AutoIncrInsertSuffix(t.Columns[plan.autoIncrIdx])) - } - s.WriteString(t.dbmap.Dialect.QuerySuffix()) - - plan.query = s.String() - t.insertPlan = plan - } - - return plan.createBindInstance(elem, t.dbmap.TypeConverter) -} - -func (t *TableMap) bindUpdate(elem reflect.Value) (bindInstance, error) { - plan := t.updatePlan - if plan.query == "" { - - s := bytes.Buffer{} - s.WriteString(fmt.Sprintf("update %s set ", t.dbmap.Dialect.QuotedTableForQuery(t.SchemaName, t.TableName))) - x := 0 - - for y := range t.Columns { - col := t.Columns[y] - if !col.isAutoIncr && !col.Transient { - if x > 0 { - s.WriteString(", ") - } - s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) - s.WriteString("=") - s.WriteString(t.dbmap.Dialect.BindVar(x)) - - if col == t.version { - plan.versField = col.fieldName - plan.argFields = append(plan.argFields, versFieldConst) - } else { - plan.argFields = append(plan.argFields, col.fieldName) - } - x++ - } - } - - s.WriteString(" where ") - for y := range t.keys { - col := t.keys[y] - if y > 0 { - s.WriteString(" and ") - } - s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) - s.WriteString("=") - s.WriteString(t.dbmap.Dialect.BindVar(x)) - - plan.argFields = append(plan.argFields, col.fieldName) - plan.keyFields = append(plan.keyFields, col.fieldName) - x++ - } - if plan.versField != "" { - s.WriteString(" and ") - s.WriteString(t.dbmap.Dialect.QuoteField(t.version.ColumnName)) - s.WriteString("=") - s.WriteString(t.dbmap.Dialect.BindVar(x)) - plan.argFields = append(plan.argFields, plan.versField) - } - s.WriteString(t.dbmap.Dialect.QuerySuffix()) - - plan.query = s.String() - t.updatePlan = plan - } - - return plan.createBindInstance(elem, t.dbmap.TypeConverter) -} - -func (t *TableMap) bindDelete(elem reflect.Value) (bindInstance, error) { - plan := t.deletePlan - if plan.query == "" { - - s := bytes.Buffer{} - s.WriteString(fmt.Sprintf("delete from %s", t.dbmap.Dialect.QuotedTableForQuery(t.SchemaName, t.TableName))) - - for y := range t.Columns { - col := t.Columns[y] - if !col.Transient { - if col == t.version { - plan.versField = col.fieldName - } - } - } - - s.WriteString(" where ") - for x := range t.keys { - k := t.keys[x] - if x > 0 { - s.WriteString(" and ") - } - s.WriteString(t.dbmap.Dialect.QuoteField(k.ColumnName)) - s.WriteString("=") - s.WriteString(t.dbmap.Dialect.BindVar(x)) - - plan.keyFields = append(plan.keyFields, k.fieldName) - plan.argFields = append(plan.argFields, k.fieldName) - } - if plan.versField != "" { - s.WriteString(" and ") - s.WriteString(t.dbmap.Dialect.QuoteField(t.version.ColumnName)) - s.WriteString("=") - s.WriteString(t.dbmap.Dialect.BindVar(len(plan.argFields))) - - plan.argFields = append(plan.argFields, plan.versField) - } - s.WriteString(t.dbmap.Dialect.QuerySuffix()) - - plan.query = s.String() - t.deletePlan = plan - } - - return plan.createBindInstance(elem, t.dbmap.TypeConverter) -} - -func (t *TableMap) bindGet() bindPlan { - plan := t.getPlan - if plan.query == "" { - - s := bytes.Buffer{} - s.WriteString("select ") - - x := 0 - for _, col := range t.Columns { - if !col.Transient { - if x > 0 { - s.WriteString(",") - } - s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) - plan.argFields = append(plan.argFields, col.fieldName) - x++ - } - } - s.WriteString(" from ") - s.WriteString(t.dbmap.Dialect.QuotedTableForQuery(t.SchemaName, t.TableName)) - s.WriteString(" where ") - for x := range t.keys { - col := t.keys[x] - if x > 0 { - s.WriteString(" and ") - } - s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) - s.WriteString("=") - s.WriteString(t.dbmap.Dialect.BindVar(x)) - - plan.keyFields = append(plan.keyFields, col.fieldName) - } - s.WriteString(t.dbmap.Dialect.QuerySuffix()) - - plan.query = s.String() - t.getPlan = plan - } - - return plan -} - -// ColumnMap represents a mapping between a Go struct field and a single -// column in a table. -// Unique and MaxSize only inform the -// CreateTables() function and are not used by Insert/Update/Delete/Get. -type ColumnMap struct { - // Column name in db table - ColumnName string - - // If true, this column is skipped in generated SQL statements - Transient bool - - // If true, " unique" is added to create table statements. - // Not used elsewhere - Unique bool - - // Passed to Dialect.ToSqlType() to assist in informing the - // correct column type to map to in CreateTables() - // Not used elsewhere - MaxSize int - - fieldName string - gotype reflect.Type - isPK bool - isAutoIncr bool - isNotNull bool -} - -// Rename allows you to specify the column name in the table -// -// Example: table.ColMap("Updated").Rename("date_updated") -// -func (c *ColumnMap) Rename(colname string) *ColumnMap { - c.ColumnName = colname - return c -} - -// SetTransient allows you to mark the column as transient. If true -// this column will be skipped when SQL statements are generated -func (c *ColumnMap) SetTransient(b bool) *ColumnMap { - c.Transient = b - return c -} - -// SetUnique adds "unique" to the create table statements for this -// column, if b is true. -func (c *ColumnMap) SetUnique(b bool) *ColumnMap { - c.Unique = b - return c -} - -// SetNotNull adds "not null" to the create table statements for this -// column, if nn is true. -func (c *ColumnMap) SetNotNull(nn bool) *ColumnMap { - c.isNotNull = nn - return c -} - -// SetMaxSize specifies the max length of values of this column. This is -// passed to the dialect.ToSqlType() function, which can use the value -// to alter the generated type for "create table" statements -func (c *ColumnMap) SetMaxSize(size int) *ColumnMap { - c.MaxSize = size - return c -} - -// Transaction represents a database transaction. -// Insert/Update/Delete/Get/Exec operations will be run in the context -// of that transaction. Transactions should be terminated with -// a call to Commit() or Rollback() -type Transaction struct { - dbmap *DbMap - tx *sql.Tx - closed bool -} - // Executor exposes the sql.DB and sql.Tx Exec function so that it can be used // on internal functions that convert named parameters for the Exec function. type executor interface { @@ -670,534 +118,6 @@ type SqlExecutor interface { // interface. var _, _ SqlExecutor = &DbMap{}, &Transaction{} -type GorpLogger interface { - Printf(format string, v ...interface{}) -} - -// TraceOn turns on SQL statement logging for this DbMap. After this is -// called, all SQL statements will be sent to the logger. If prefix is -// a non-empty string, it will be written to the front of all logged -// strings, which can aid in filtering log lines. -// -// Use TraceOn if you want to spy on the SQL statements that gorp -// generates. -// -// Note that the base log.Logger type satisfies GorpLogger, but adapters can -// easily be written for other logging packages (e.g., the golang-sanctioned -// glog framework). -func (m *DbMap) TraceOn(prefix string, logger GorpLogger) { - m.logger = logger - if prefix == "" { - m.logPrefix = prefix - } else { - m.logPrefix = fmt.Sprintf("%s ", prefix) - } -} - -// TraceOff turns off tracing. It is idempotent. -func (m *DbMap) TraceOff() { - m.logger = nil - m.logPrefix = "" -} - -// AddTable registers the given interface type with gorp. The table name -// will be given the name of the TypeOf(i). You must call this function, -// or AddTableWithName, for any struct type you wish to persist with -// the given DbMap. -// -// This operation is idempotent. If i's type is already mapped, the -// existing *TableMap is returned -func (m *DbMap) AddTable(i interface{}) *TableMap { - return m.AddTableWithName(i, "") -} - -// AddTableWithName has the same behavior as AddTable, but sets -// table.TableName to name. -func (m *DbMap) AddTableWithName(i interface{}, name string) *TableMap { - return m.AddTableWithNameAndSchema(i, "", name) -} - -// AddTableWithNameAndSchema has the same behavior as AddTable, but sets -// table.TableName to name. -func (m *DbMap) AddTableWithNameAndSchema(i interface{}, schema string, name string) *TableMap { - t := reflect.TypeOf(i) - if name == "" { - name = t.Name() - } - - // check if we have a table for this type already - // if so, update the name and return the existing pointer - for i := range m.tables { - table := m.tables[i] - if table.gotype == t { - table.TableName = name - return table - } - } - - tmap := &TableMap{gotype: t, TableName: name, SchemaName: schema, dbmap: m} - tmap.Columns = m.readStructColumns(t) - m.tables = append(m.tables, tmap) - - return tmap -} - -func (m *DbMap) readStructColumns(t reflect.Type) (cols []*ColumnMap) { - n := t.NumField() - for i := 0; i < n; i++ { - f := t.Field(i) - if f.Anonymous && f.Type.Kind() == reflect.Struct { - // Recursively add nested fields in embedded structs. - subcols := m.readStructColumns(f.Type) - // Don't append nested fields that have the same field - // name as an already-mapped field. - for _, subcol := range subcols { - shouldAppend := true - for _, col := range cols { - if !subcol.Transient && subcol.fieldName == col.fieldName { - shouldAppend = false - break - } - } - if shouldAppend { - cols = append(cols, subcol) - } - } - } else { - columnName := f.Tag.Get("db") - if columnName == "" { - columnName = f.Name - } - gotype := f.Type - if m.TypeConverter != nil { - // Make a new pointer to a value of type gotype and - // pass it to the TypeConverter's FromDb method to see - // if a different type should be used for the column - // type during table creation. - value := reflect.New(gotype).Interface() - scanner, useHolder := m.TypeConverter.FromDb(value) - if useHolder { - gotype = reflect.TypeOf(scanner.Holder) - } - } - cm := &ColumnMap{ - ColumnName: columnName, - Transient: columnName == "-", - fieldName: f.Name, - gotype: gotype, - } - // Check for nested fields of the same field name and - // override them. - shouldAppend := true - for index, col := range cols { - if !col.Transient && col.fieldName == cm.fieldName { - cols[index] = cm - shouldAppend = false - break - } - } - if shouldAppend { - cols = append(cols, cm) - } - } - } - return -} - -// CreateTables iterates through TableMaps registered to this DbMap and -// executes "create table" statements against the database for each. -// -// This is particularly useful in unit tests where you want to create -// and destroy the schema automatically. -func (m *DbMap) CreateTables() error { - return m.createTables(false) -} - -// CreateTablesIfNotExists is similar to CreateTables, but starts -// each statement with "create table if not exists" so that existing -// tables do not raise errors -func (m *DbMap) CreateTablesIfNotExists() error { - return m.createTables(true) -} - -func (m *DbMap) createTables(ifNotExists bool) error { - var err error - for i := range m.tables { - table := m.tables[i] - - s := bytes.Buffer{} - - if strings.TrimSpace(table.SchemaName) != "" { - schemaCreate := "create schema" - if ifNotExists { - s.WriteString(m.Dialect.IfSchemaNotExists(schemaCreate, table.SchemaName)) - } else { - s.WriteString(schemaCreate) - } - s.WriteString(fmt.Sprintf(" %s;", table.SchemaName)) - } - - tableCreate := "create table" - if ifNotExists { - s.WriteString(m.Dialect.IfTableNotExists(tableCreate, table.SchemaName, table.TableName)) - } else { - s.WriteString(tableCreate) - } - s.WriteString(fmt.Sprintf(" %s (", m.Dialect.QuotedTableForQuery(table.SchemaName, table.TableName))) - - x := 0 - for _, col := range table.Columns { - if !col.Transient { - if x > 0 { - s.WriteString(", ") - } - stype := m.Dialect.ToSqlType(col.gotype, col.MaxSize, col.isAutoIncr) - s.WriteString(fmt.Sprintf("%s %s", m.Dialect.QuoteField(col.ColumnName), stype)) - - if col.isPK || col.isNotNull { - s.WriteString(" not null") - } - if col.isPK && len(table.keys) == 1 { - s.WriteString(" primary key") - } - if col.Unique { - s.WriteString(" unique") - } - if col.isAutoIncr { - s.WriteString(fmt.Sprintf(" %s", m.Dialect.AutoIncrStr())) - } - - x++ - } - } - if len(table.keys) > 1 { - s.WriteString(", primary key (") - for x := range table.keys { - if x > 0 { - s.WriteString(", ") - } - s.WriteString(m.Dialect.QuoteField(table.keys[x].ColumnName)) - } - s.WriteString(")") - } - if len(table.uniqueTogether) > 0 { - for _, columns := range table.uniqueTogether { - s.WriteString(", unique (") - for i, column := range columns { - if i > 0 { - s.WriteString(", ") - } - s.WriteString(m.Dialect.QuoteField(column)) - } - s.WriteString(")") - } - } - s.WriteString(") ") - s.WriteString(m.Dialect.CreateTableSuffix()) - s.WriteString(m.Dialect.QuerySuffix()) - _, err = m.Exec(s.String()) - if err != nil { - break - } - } - return err -} - -// DropTable drops an individual table. Will throw an error -// if the table does not exist. -func (m *DbMap) DropTable(table interface{}) error { - t := reflect.TypeOf(table) - return m.dropTable(t, false) -} - -// DropTable drops an individual table. Will NOT throw an error -// if the table does not exist. -func (m *DbMap) DropTableIfExists(table interface{}) error { - t := reflect.TypeOf(table) - return m.dropTable(t, true) -} - -// DropTables iterates through TableMaps registered to this DbMap and -// executes "drop table" statements against the database for each. -func (m *DbMap) DropTables() error { - return m.dropTables(false) -} - -// DropTablesIfExists is the same as DropTables, but uses the "if exists" clause to -// avoid errors for tables that do not exist. -func (m *DbMap) DropTablesIfExists() error { - return m.dropTables(true) -} - -// Goes through all the registered tables, dropping them one by one. -// If an error is encountered, then it is returned and the rest of -// the tables are not dropped. -func (m *DbMap) dropTables(addIfExists bool) (err error) { - for _, table := range m.tables { - err = m.dropTableImpl(table, addIfExists) - if err != nil { - return - } - } - return err -} - -// Implementation of dropping a single table. -func (m *DbMap) dropTable(t reflect.Type, addIfExists bool) error { - table := tableOrNil(m, t) - if table == nil { - return errors.New(fmt.Sprintf("table %s was not registered!", table.TableName)) - } - - return m.dropTableImpl(table, addIfExists) -} - -func (m *DbMap) dropTableImpl(table *TableMap, ifExists bool) (err error) { - tableDrop := "drop table" - if ifExists { - tableDrop = m.Dialect.IfTableExists(tableDrop, table.SchemaName, table.TableName) - } - _, err = m.Exec(fmt.Sprintf("%s %s;", tableDrop, m.Dialect.QuotedTableForQuery(table.SchemaName, table.TableName))) - return err -} - -// TruncateTables iterates through TableMaps registered to this DbMap and -// executes "truncate table" statements against the database for each, or in the case of -// sqlite, a "delete from" with no "where" clause, which uses the truncate optimization -// (http://www.sqlite.org/lang_delete.html) -func (m *DbMap) TruncateTables() error { - var err error - for i := range m.tables { - table := m.tables[i] - _, e := m.Exec(fmt.Sprintf("%s %s;", m.Dialect.TruncateClause(), m.Dialect.QuotedTableForQuery(table.SchemaName, table.TableName))) - if e != nil { - err = e - } - } - return err -} - -// Insert runs a SQL INSERT statement for each element in list. List -// items must be pointers. -// -// Any interface whose TableMap has an auto-increment primary key will -// have its last insert id bound to the PK field on the struct. -// -// The hook functions PreInsert() and/or PostInsert() will be executed -// before/after the INSERT statement if the interface defines them. -// -// Panics if any interface in the list has not been registered with AddTable -func (m *DbMap) Insert(list ...interface{}) error { - return insert(m, m, list...) -} - -// Update runs a SQL UPDATE statement for each element in list. List -// items must be pointers. -// -// The hook functions PreUpdate() and/or PostUpdate() will be executed -// before/after the UPDATE statement if the interface defines them. -// -// Returns the number of rows updated. -// -// Returns an error if SetKeys has not been called on the TableMap -// Panics if any interface in the list has not been registered with AddTable -func (m *DbMap) Update(list ...interface{}) (int64, error) { - return update(m, m, list...) -} - -// Delete runs a SQL DELETE statement for each element in list. List -// items must be pointers. -// -// The hook functions PreDelete() and/or PostDelete() will be executed -// before/after the DELETE statement if the interface defines them. -// -// Returns the number of rows deleted. -// -// Returns an error if SetKeys has not been called on the TableMap -// Panics if any interface in the list has not been registered with AddTable -func (m *DbMap) Delete(list ...interface{}) (int64, error) { - return delete(m, m, list...) -} - -// Get runs a SQL SELECT to fetch a single row from the table based on the -// primary key(s) -// -// i should be an empty value for the struct to load. keys should be -// the primary key value(s) for the row to load. If multiple keys -// exist on the table, the order should match the column order -// specified in SetKeys() when the table mapping was defined. -// -// The hook function PostGet() will be executed after the SELECT -// statement if the interface defines them. -// -// Returns a pointer to a struct that matches or nil if no row is found. -// -// Returns an error if SetKeys has not been called on the TableMap -// Panics if any interface in the list has not been registered with AddTable -func (m *DbMap) Get(i interface{}, keys ...interface{}) (interface{}, error) { - return get(m, m, i, keys...) -} - -// Select runs an arbitrary SQL query, binding the columns in the result -// to fields on the struct specified by i. args represent the bind -// parameters for the SQL statement. -// -// Column names on the SELECT statement should be aliased to the field names -// on the struct i. Returns an error if one or more columns in the result -// do not match. It is OK if fields on i are not part of the SQL -// statement. -// -// The hook function PostGet() will be executed after the SELECT -// statement if the interface defines them. -// -// Values are returned in one of two ways: -// 1. If i is a struct or a pointer to a struct, returns a slice of pointers to -// matching rows of type i. -// 2. If i is a pointer to a slice, the results will be appended to that slice -// and nil returned. -// -// i does NOT need to be registered with AddTable() -func (m *DbMap) Select(i interface{}, query string, args ...interface{}) ([]interface{}, error) { - return hookedselect(m, m, i, query, args...) -} - -// Exec runs an arbitrary SQL statement. args represent the bind parameters. -// This is equivalent to running: Exec() using database/sql -func (m *DbMap) Exec(query string, args ...interface{}) (sql.Result, error) { - if m.logger != nil { - now := time.Now() - defer m.trace(now, query, args...) - } - return exec(m, query, args...) -} - -// SelectInt is a convenience wrapper around the gorp.SelectInt function -func (m *DbMap) SelectInt(query string, args ...interface{}) (int64, error) { - return SelectInt(m, query, args...) -} - -// SelectNullInt is a convenience wrapper around the gorp.SelectNullInt function -func (m *DbMap) SelectNullInt(query string, args ...interface{}) (sql.NullInt64, error) { - return SelectNullInt(m, query, args...) -} - -// SelectFloat is a convenience wrapper around the gorp.SelectFlot function -func (m *DbMap) SelectFloat(query string, args ...interface{}) (float64, error) { - return SelectFloat(m, query, args...) -} - -// SelectNullFloat is a convenience wrapper around the gorp.SelectNullFloat function -func (m *DbMap) SelectNullFloat(query string, args ...interface{}) (sql.NullFloat64, error) { - return SelectNullFloat(m, query, args...) -} - -// SelectStr is a convenience wrapper around the gorp.SelectStr function -func (m *DbMap) SelectStr(query string, args ...interface{}) (string, error) { - return SelectStr(m, query, args...) -} - -// SelectNullStr is a convenience wrapper around the gorp.SelectNullStr function -func (m *DbMap) SelectNullStr(query string, args ...interface{}) (sql.NullString, error) { - return SelectNullStr(m, query, args...) -} - -// SelectOne is a convenience wrapper around the gorp.SelectOne function -func (m *DbMap) SelectOne(holder interface{}, query string, args ...interface{}) error { - return SelectOne(m, m, holder, query, args...) -} - -// Begin starts a gorp Transaction -func (m *DbMap) Begin() (*Transaction, error) { - if m.logger != nil { - now := time.Now() - defer m.trace(now, "begin;") - } - tx, err := m.Db.Begin() - if err != nil { - return nil, err - } - return &Transaction{m, tx, false}, nil -} - -// TableFor returns the *TableMap corresponding to the given Go Type -// If no table is mapped to that type an error is returned. -// If checkPK is true and the mapped table has no registered PKs, an error is returned. -func (m *DbMap) TableFor(t reflect.Type, checkPK bool) (*TableMap, error) { - table := tableOrNil(m, t) - if table == nil { - return nil, errors.New(fmt.Sprintf("No table found for type: %v", t.Name())) - } - - if checkPK && len(table.keys) < 1 { - e := fmt.Sprintf("gorp: No keys defined for table: %s", - table.TableName) - return nil, errors.New(e) - } - - return table, nil -} - -// Prepare creates a prepared statement for later queries or executions. -// Multiple queries or executions may be run concurrently from the returned statement. -// This is equivalent to running: Prepare() using database/sql -func (m *DbMap) Prepare(query string) (*sql.Stmt, error) { - if m.logger != nil { - now := time.Now() - defer m.trace(now, query, nil) - } - return m.Db.Prepare(query) -} - -func tableOrNil(m *DbMap, t reflect.Type) *TableMap { - for i := range m.tables { - table := m.tables[i] - if table.gotype == t { - return table - } - } - return nil -} - -func (m *DbMap) tableForPointer(ptr interface{}, checkPK bool) (*TableMap, reflect.Value, error) { - ptrv := reflect.ValueOf(ptr) - if ptrv.Kind() != reflect.Ptr { - e := fmt.Sprintf("gorp: passed non-pointer: %v (kind=%v)", ptr, - ptrv.Kind()) - return nil, reflect.Value{}, errors.New(e) - } - elem := ptrv.Elem() - etype := reflect.TypeOf(elem.Interface()) - t, err := m.TableFor(etype, checkPK) - if err != nil { - return nil, reflect.Value{}, err - } - - return t, elem, nil -} - -func (m *DbMap) queryRow(query string, args ...interface{}) *sql.Row { - if m.logger != nil { - now := time.Now() - defer m.trace(now, query, args...) - } - return m.Db.QueryRow(query, args...) -} - -func (m *DbMap) query(query string, args ...interface{}) (*sql.Rows, error) { - if m.logger != nil { - now := time.Now() - defer m.trace(now, query, args...) - } - return m.Db.Query(query, args...) -} - -func (m *DbMap) trace(started time.Time, query string, args ...interface{}) { - if m.logger != nil { - var margs = argsString(args...) - m.logger.Printf("%s%s [%s] (%v)", m.logPrefix, query, margs, (time.Now().Sub(started))) - } -} - func argsString(args ...interface{}) string { var margs string for i, a := range args { @@ -1222,505 +142,6 @@ func argsString(args ...interface{}) string { return margs } -/////////////// - -// Insert has the same behavior as DbMap.Insert(), but runs in a transaction. -func (t *Transaction) Insert(list ...interface{}) error { - return insert(t.dbmap, t, list...) -} - -// Update had the same behavior as DbMap.Update(), but runs in a transaction. -func (t *Transaction) Update(list ...interface{}) (int64, error) { - return update(t.dbmap, t, list...) -} - -// Delete has the same behavior as DbMap.Delete(), but runs in a transaction. -func (t *Transaction) Delete(list ...interface{}) (int64, error) { - return delete(t.dbmap, t, list...) -} - -// Get has the same behavior as DbMap.Get(), but runs in a transaction. -func (t *Transaction) Get(i interface{}, keys ...interface{}) (interface{}, error) { - return get(t.dbmap, t, i, keys...) -} - -// Select has the same behavior as DbMap.Select(), but runs in a transaction. -func (t *Transaction) Select(i interface{}, query string, args ...interface{}) ([]interface{}, error) { - return hookedselect(t.dbmap, t, i, query, args...) -} - -// Exec has the same behavior as DbMap.Exec(), but runs in a transaction. -func (t *Transaction) Exec(query string, args ...interface{}) (sql.Result, error) { - if t.dbmap.logger != nil { - now := time.Now() - defer t.dbmap.trace(now, query, args...) - } - return exec(t, query, args...) -} - -// SelectInt is a convenience wrapper around the gorp.SelectInt function. -func (t *Transaction) SelectInt(query string, args ...interface{}) (int64, error) { - return SelectInt(t, query, args...) -} - -// SelectNullInt is a convenience wrapper around the gorp.SelectNullInt function. -func (t *Transaction) SelectNullInt(query string, args ...interface{}) (sql.NullInt64, error) { - return SelectNullInt(t, query, args...) -} - -// SelectFloat is a convenience wrapper around the gorp.SelectFloat function. -func (t *Transaction) SelectFloat(query string, args ...interface{}) (float64, error) { - return SelectFloat(t, query, args...) -} - -// SelectNullFloat is a convenience wrapper around the gorp.SelectNullFloat function. -func (t *Transaction) SelectNullFloat(query string, args ...interface{}) (sql.NullFloat64, error) { - return SelectNullFloat(t, query, args...) -} - -// SelectStr is a convenience wrapper around the gorp.SelectStr function. -func (t *Transaction) SelectStr(query string, args ...interface{}) (string, error) { - return SelectStr(t, query, args...) -} - -// SelectNullStr is a convenience wrapper around the gorp.SelectNullStr function. -func (t *Transaction) SelectNullStr(query string, args ...interface{}) (sql.NullString, error) { - return SelectNullStr(t, query, args...) -} - -// SelectOne is a convenience wrapper around the gorp.SelectOne function. -func (t *Transaction) SelectOne(holder interface{}, query string, args ...interface{}) error { - return SelectOne(t.dbmap, t, holder, query, args...) -} - -// Commit commits the underlying database transaction. -func (t *Transaction) Commit() error { - if !t.closed { - t.closed = true - if t.dbmap.logger != nil { - now := time.Now() - defer t.dbmap.trace(now, "commit;") - } - return t.tx.Commit() - } - - return sql.ErrTxDone -} - -// Rollback rolls back the underlying database transaction. -func (t *Transaction) Rollback() error { - if !t.closed { - t.closed = true - if t.dbmap.logger != nil { - now := time.Now() - defer t.dbmap.trace(now, "rollback;") - } - return t.tx.Rollback() - } - - return sql.ErrTxDone -} - -// Savepoint creates a savepoint with the given name. The name is interpolated -// directly into the SQL SAVEPOINT statement, so you must sanitize it if it is -// derived from user input. -func (t *Transaction) Savepoint(name string) error { - query := "savepoint " + t.dbmap.Dialect.QuoteField(name) - if t.dbmap.logger != nil { - now := time.Now() - defer t.dbmap.trace(now, query, nil) - } - _, err := t.tx.Exec(query) - return err -} - -// RollbackToSavepoint rolls back to the savepoint with the given name. The -// name is interpolated directly into the SQL SAVEPOINT statement, so you must -// sanitize it if it is derived from user input. -func (t *Transaction) RollbackToSavepoint(savepoint string) error { - query := "rollback to savepoint " + t.dbmap.Dialect.QuoteField(savepoint) - if t.dbmap.logger != nil { - now := time.Now() - defer t.dbmap.trace(now, query, nil) - } - _, err := t.tx.Exec(query) - return err -} - -// ReleaseSavepint releases the savepoint with the given name. The name is -// interpolated directly into the SQL SAVEPOINT statement, so you must sanitize -// it if it is derived from user input. -func (t *Transaction) ReleaseSavepoint(savepoint string) error { - query := "release savepoint " + t.dbmap.Dialect.QuoteField(savepoint) - if t.dbmap.logger != nil { - now := time.Now() - defer t.dbmap.trace(now, query, nil) - } - _, err := t.tx.Exec(query) - return err -} - -// Prepare has the same behavior as DbMap.Prepare(), but runs in a transaction. -func (t *Transaction) Prepare(query string) (*sql.Stmt, error) { - if t.dbmap.logger != nil { - now := time.Now() - defer t.dbmap.trace(now, query, nil) - } - return t.tx.Prepare(query) -} - -func (t *Transaction) queryRow(query string, args ...interface{}) *sql.Row { - if t.dbmap.logger != nil { - now := time.Now() - defer t.dbmap.trace(now, query, args...) - } - return t.tx.QueryRow(query, args...) -} - -func (t *Transaction) query(query string, args ...interface{}) (*sql.Rows, error) { - if t.dbmap.logger != nil { - now := time.Now() - defer t.dbmap.trace(now, query, args...) - } - return t.tx.Query(query, args...) -} - -/////////////// - -// SelectInt executes the given query, which should be a SELECT statement for a single -// integer column, and returns the value of the first row returned. If no rows are -// found, zero is returned. -func SelectInt(e SqlExecutor, query string, args ...interface{}) (int64, error) { - var h int64 - err := selectVal(e, &h, query, args...) - if err != nil && err != sql.ErrNoRows { - return 0, err - } - return h, nil -} - -// SelectNullInt executes the given query, which should be a SELECT statement for a single -// integer column, and returns the value of the first row returned. If no rows are -// found, the empty sql.NullInt64 value is returned. -func SelectNullInt(e SqlExecutor, query string, args ...interface{}) (sql.NullInt64, error) { - var h sql.NullInt64 - err := selectVal(e, &h, query, args...) - if err != nil && err != sql.ErrNoRows { - return h, err - } - return h, nil -} - -// SelectFloat executes the given query, which should be a SELECT statement for a single -// float column, and returns the value of the first row returned. If no rows are -// found, zero is returned. -func SelectFloat(e SqlExecutor, query string, args ...interface{}) (float64, error) { - var h float64 - err := selectVal(e, &h, query, args...) - if err != nil && err != sql.ErrNoRows { - return 0, err - } - return h, nil -} - -// SelectNullFloat executes the given query, which should be a SELECT statement for a single -// float column, and returns the value of the first row returned. If no rows are -// found, the empty sql.NullInt64 value is returned. -func SelectNullFloat(e SqlExecutor, query string, args ...interface{}) (sql.NullFloat64, error) { - var h sql.NullFloat64 - err := selectVal(e, &h, query, args...) - if err != nil && err != sql.ErrNoRows { - return h, err - } - return h, nil -} - -// SelectStr executes the given query, which should be a SELECT statement for a single -// char/varchar column, and returns the value of the first row returned. If no rows are -// found, an empty string is returned. -func SelectStr(e SqlExecutor, query string, args ...interface{}) (string, error) { - var h string - err := selectVal(e, &h, query, args...) - if err != nil && err != sql.ErrNoRows { - return "", err - } - return h, nil -} - -// SelectNullStr executes the given query, which should be a SELECT -// statement for a single char/varchar column, and returns the value -// of the first row returned. If no rows are found, the empty -// sql.NullString is returned. -func SelectNullStr(e SqlExecutor, query string, args ...interface{}) (sql.NullString, error) { - var h sql.NullString - err := selectVal(e, &h, query, args...) - if err != nil && err != sql.ErrNoRows { - return h, err - } - return h, nil -} - -// SelectOne executes the given query (which should be a SELECT statement) -// and binds the result to holder, which must be a pointer. -// -// If no row is found, an error (sql.ErrNoRows specifically) will be returned -// -// If more than one row is found, an error will be returned. -// -func SelectOne(m *DbMap, e SqlExecutor, holder interface{}, query string, args ...interface{}) error { - t := reflect.TypeOf(holder) - if t.Kind() == reflect.Ptr { - t = t.Elem() - } else { - return fmt.Errorf("gorp: SelectOne holder must be a pointer, but got: %t", holder) - } - - // Handle pointer to pointer - isptr := false - if t.Kind() == reflect.Ptr { - isptr = true - t = t.Elem() - } - - if t.Kind() == reflect.Struct { - var nonFatalErr error - - list, err := hookedselect(m, e, holder, query, args...) - if err != nil { - if !NonFatalError(err) { - return err - } - nonFatalErr = err - } - - dest := reflect.ValueOf(holder) - if isptr { - dest = dest.Elem() - } - - if list != nil && len(list) > 0 { - // check for multiple rows - if len(list) > 1 { - return fmt.Errorf("gorp: multiple rows returned for: %s - %v", query, args) - } - - // Initialize if nil - if dest.IsNil() { - dest.Set(reflect.New(t)) - } - - // only one row found - src := reflect.ValueOf(list[0]) - dest.Elem().Set(src.Elem()) - } else { - // No rows found, return a proper error. - return sql.ErrNoRows - } - - return nonFatalErr - } - - return selectVal(e, holder, query, args...) -} - -func selectVal(e SqlExecutor, holder interface{}, query string, args ...interface{}) error { - if len(args) == 1 { - switch m := e.(type) { - case *DbMap: - query, args = maybeExpandNamedQuery(m, query, args) - case *Transaction: - query, args = maybeExpandNamedQuery(m.dbmap, query, args) - } - } - rows, err := e.query(query, args...) - if err != nil { - return err - } - defer rows.Close() - - if !rows.Next() { - return sql.ErrNoRows - } - - return rows.Scan(holder) -} - -/////////////// - -func hookedselect(m *DbMap, exec SqlExecutor, i interface{}, query string, - args ...interface{}) ([]interface{}, error) { - - var nonFatalErr error - - list, err := rawselect(m, exec, i, query, args...) - if err != nil { - if !NonFatalError(err) { - return nil, err - } - nonFatalErr = err - } - - // Determine where the results are: written to i, or returned in list - if t, _ := toSliceType(i); t == nil { - for _, v := range list { - if v, ok := v.(HasPostGet); ok { - err := v.PostGet(exec) - if err != nil { - return nil, err - } - } - } - } else { - resultsValue := reflect.Indirect(reflect.ValueOf(i)) - for i := 0; i < resultsValue.Len(); i++ { - if v, ok := resultsValue.Index(i).Interface().(HasPostGet); ok { - err := v.PostGet(exec) - if err != nil { - return nil, err - } - } - } - } - return list, nonFatalErr -} - -func rawselect(m *DbMap, exec SqlExecutor, i interface{}, query string, - args ...interface{}) ([]interface{}, error) { - var ( - appendToSlice = false // Write results to i directly? - intoStruct = true // Selecting into a struct? - pointerElements = true // Are the slice elements pointers (vs values)? - ) - - var nonFatalErr error - - // get type for i, verifying it's a supported destination - t, err := toType(i) - if err != nil { - var err2 error - if t, err2 = toSliceType(i); t == nil { - if err2 != nil { - return nil, err2 - } - return nil, err - } - pointerElements = t.Kind() == reflect.Ptr - if pointerElements { - t = t.Elem() - } - appendToSlice = true - intoStruct = t.Kind() == reflect.Struct - } - - // If the caller supplied a single struct/map argument, assume a "named - // parameter" query. Extract the named arguments from the struct/map, create - // the flat arg slice, and rewrite the query to use the dialect's placeholder. - if len(args) == 1 { - query, args = maybeExpandNamedQuery(m, query, args) - } - - // Run the query - rows, err := exec.query(query, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - // Fetch the column names as returned from db - cols, err := rows.Columns() - if err != nil { - return nil, err - } - - if !intoStruct && len(cols) > 1 { - return nil, fmt.Errorf("gorp: select into non-struct slice requires 1 column, got %d", len(cols)) - } - - var colToFieldIndex [][]int - if intoStruct { - if colToFieldIndex, err = columnToFieldIndex(m, t, cols); err != nil { - if !NonFatalError(err) { - return nil, err - } - nonFatalErr = err - } - } - - conv := m.TypeConverter - - // Add results to one of these two slices. - var ( - list = make([]interface{}, 0) - sliceValue = reflect.Indirect(reflect.ValueOf(i)) - ) - - for { - if !rows.Next() { - // if error occured return rawselect - if rows.Err() != nil { - return nil, rows.Err() - } - // time to exit from outer "for" loop - break - } - v := reflect.New(t) - dest := make([]interface{}, len(cols)) - - custScan := make([]CustomScanner, 0) - - for x := range cols { - f := v.Elem() - if intoStruct { - index := colToFieldIndex[x] - if index == nil { - // this field is not present in the struct, so create a dummy - // value for rows.Scan to scan into - var dummy sql.RawBytes - dest[x] = &dummy - continue - } - f = f.FieldByIndex(index) - } - target := f.Addr().Interface() - if conv != nil { - scanner, ok := conv.FromDb(target) - if ok { - target = scanner.Holder - custScan = append(custScan, scanner) - } - } - dest[x] = target - } - - err = rows.Scan(dest...) - if err != nil { - return nil, err - } - - for _, c := range custScan { - err = c.Bind() - if err != nil { - return nil, err - } - } - - if appendToSlice { - if !pointerElements { - v = v.Elem() - } - sliceValue.Set(reflect.Append(sliceValue, v)) - } else { - list = append(list, v.Interface()) - } - } - - if appendToSlice && sliceValue.IsNil() { - sliceValue.Set(reflect.MakeSlice(sliceValue.Type(), 0, 0)) - } - - return list, nonFatalErr -} - // Calls the Exec function on the executor, but attempts to expand any eligible named // query arguments first. func exec(e SqlExecutor, query string, args ...interface{}) (sql.Result, error) { @@ -1818,7 +239,8 @@ func columnToFieldIndex(m *DbMap, t reflect.Type, cols []string) ([][]int, error colName := strings.ToLower(cols[x]) field, found := t.FieldByNameFunc(func(fieldName string) bool { field, _ := t.FieldByName(fieldName) - fieldName = field.Tag.Get("db") + cArguments := strings.Split(field.Tag.Get("db"), ",") + fieldName = cArguments[0] if fieldName == "-" { return false @@ -1881,7 +303,7 @@ func toSliceType(i interface{}) (reflect.Type, error) { if t.Kind() != reflect.Ptr { // If it's a slice, return a more helpful error message if t.Kind() == reflect.Slice { - return nil, fmt.Errorf("gorp: Cannot SELECT into a non-pointer slice: %v", t) + return nil, fmt.Errorf("gorp: cannot SELECT into a non-pointer slice: %v", t) } return nil, nil } @@ -1900,7 +322,7 @@ func toType(i interface{}) (reflect.Type, error) { } if t.Kind() != reflect.Struct { - return nil, fmt.Errorf("gorp: Cannot SELECT into this type: %v", reflect.TypeOf(i)) + return nil, fmt.Errorf("gorp: cannot SELECT into this type: %v", reflect.TypeOf(i)) } return t, nil } @@ -2013,7 +435,7 @@ func delete(m *DbMap, exec SqlExecutor, list ...interface{}) (int64, error) { return count, nil } -func update(m *DbMap, exec SqlExecutor, list ...interface{}) (int64, error) { +func update(m *DbMap, exec SqlExecutor, colFilter ColumnFilter, list ...interface{}) (int64, error) { count := int64(0) for _, ptr := range list { table, elem, err := m.tableForPointer(ptr, true) @@ -2029,7 +451,7 @@ func update(m *DbMap, exec SqlExecutor, list ...interface{}) (int64, error) { } } - bi, err := table.bindUpdate(elem) + bi, err := table.bindUpdate(elem, colFilter) if err != nil { return -1, err } @@ -2099,15 +521,24 @@ func insert(m *DbMap, exec SqlExecutor, list ...interface{}) error { } else if (k == reflect.Uint) || (k == reflect.Uint16) || (k == reflect.Uint32) || (k == reflect.Uint64) { f.SetUint(uint64(id)) } else { - return fmt.Errorf("gorp: Cannot set autoincrement value on non-Int field. SQL=%s autoIncrIdx=%d autoIncrFieldName=%s", bi.query, bi.autoIncrIdx, bi.autoIncrFieldName) + return fmt.Errorf("gorp: cannot set autoincrement value on non-Int field. SQL=%s autoIncrIdx=%d autoIncrFieldName=%s", bi.query, bi.autoIncrIdx, bi.autoIncrFieldName) } case TargetedAutoIncrInserter: err := inserter.InsertAutoIncrToTarget(exec, bi.query, f.Addr().Interface(), bi.args...) if err != nil { return err } + case TargetQueryInserter: + var idQuery = table.ColMap(bi.autoIncrFieldName).GeneratedIdQuery + if idQuery == "" { + return fmt.Errorf("gorp: cannot set %s value if its ColumnMap.GeneratedIdQuery is empty", bi.autoIncrFieldName) + } + err := inserter.InsertQueryToTarget(exec, bi.query, idQuery, f.Addr().Interface(), bi.args...) + if err != nil { + return err + } default: - return fmt.Errorf("gorp: Cannot use autoincrement fields on dialects that do not implement an autoincrementing interface") + return fmt.Errorf("gorp: cannot use autoincrement fields on dialects that do not implement an autoincrementing interface") } } else { _, err := exec.Exec(bi.query, bi.args...) @@ -2125,54 +556,3 @@ func insert(m *DbMap, exec SqlExecutor, list ...interface{}) error { } return nil } - -func lockError(m *DbMap, exec SqlExecutor, tableName string, - existingVer int64, elem reflect.Value, - keys ...interface{}) (int64, error) { - - existing, err := get(m, exec, elem.Interface(), keys...) - if err != nil { - return -1, err - } - - ole := OptimisticLockError{tableName, keys, true, existingVer} - if existing == nil { - ole.RowExists = false - } - return -1, ole -} - -// PostUpdate() will be executed after the GET statement. -type HasPostGet interface { - PostGet(SqlExecutor) error -} - -// PostUpdate() will be executed after the DELETE statement -type HasPostDelete interface { - PostDelete(SqlExecutor) error -} - -// PostUpdate() will be executed after the UPDATE statement -type HasPostUpdate interface { - PostUpdate(SqlExecutor) error -} - -// PostInsert() will be executed after the INSERT statement -type HasPostInsert interface { - PostInsert(SqlExecutor) error -} - -// PreDelete() will be executed before the DELETE statement. -type HasPreDelete interface { - PreDelete(SqlExecutor) error -} - -// PreUpdate() will be executed before UPDATE statement. -type HasPreUpdate interface { - PreUpdate(SqlExecutor) error -} - -// PreInsert() will be executed before INSERT statement. -type HasPreInsert interface { - PreInsert(SqlExecutor) error -} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/gorp_test.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/gorp_test.go index 6e5618c1f8..f6739e82d9 100644 --- a/Godeps/_workspace/src/github.com/go-gorp/gorp/gorp_test.go +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/gorp_test.go @@ -1,31 +1,56 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + package gorp import ( "bytes" "database/sql" + "database/sql/driver" "encoding/json" "errors" + "flag" "fmt" "log" "math/rand" "os" "reflect" + "strconv" "strings" "testing" "time" - _ "github.com/go-sql-driver/mysql" - _ "github.com/lib/pq" + _ "github.com/mattermost/platform/Godeps/_workspace/src/github.com/go-sql-driver/mysql" + _ "github.com/mattermost/platform/Godeps/_workspace/src/github.com/lib/pq" _ "github.com/mattn/go-sqlite3" _ "github.com/ziutek/mymysql/godrv" ) -// verify interface compliance -var _ Dialect = SqliteDialect{} -var _ Dialect = PostgresDialect{} -var _ Dialect = MySQLDialect{} -var _ Dialect = SqlServerDialect{} -var _ Dialect = OracleDialect{} +var ( + // verify interface compliance + _ = []Dialect{ + SqliteDialect{}, + PostgresDialect{}, + MySQLDialect{}, + SqlServerDialect{}, + OracleDialect{}, + } + + debug bool +) + +func init() { + flag.BoolVar(&debug, "trace", true, "Turn on or off database tracing (DbMap.TraceOn)") + flag.Parse() +} type testable interface { GetId() int64 @@ -41,6 +66,15 @@ type Invoice struct { IsPaid bool } +type InvoiceWithValuer struct { + Id int64 + Created int64 + Updated int64 + Memo string + Person PersonValuerScanner `db:"personid"` + IsPaid bool +} + func (me *Invoice) GetId() int64 { return me.Id } func (me *Invoice) Rand() { me.Memo = fmt.Sprintf("random %d", rand.Int63()) @@ -49,7 +83,7 @@ func (me *Invoice) Rand() { } type InvoiceTag struct { - Id int64 `db:"myid"` + Id int64 `db:"myid, primarykey, autoincrement"` Created int64 `db:"myCreated"` Updated int64 `db:"date_updated"` Memo string @@ -90,6 +124,34 @@ type Person struct { Version int64 } +type PersonValuerScanner struct { + Person +} + +func (p PersonValuerScanner) Value() (driver.Value, error) { + return p.Id, nil +} + +// FIXME: this Scan is never actually used in the tests? +// Also: if the comments below on the mysql driver are true, then that should be fixed by the dialect when scanning values into structs. +func (p *PersonValuerScanner) Scan(value interface{}) (err error) { + switch src := value.(type) { + case []byte: + // The mysql driver seems to return a []byte, even though the + // type in the database is bigint. Note that this case is + // *only* used by the mysql driver. + p.Id, err = strconv.ParseInt(string(src), 10, 64) + case int64: + // postgres, gomysql, and sqlite drivers all return an int64, + // as you'd expect. + p.Id = src + default: + typ := reflect.TypeOf(value) + return fmt.Errorf("Expected person value to be convertible to int64, got %v (type %s)", value, typ) + } + return +} + type FNameOnly struct { FName string } @@ -160,6 +222,17 @@ type WithEmbeddedStruct struct { Names } +type WithEmbeddedStructConflictingEmbeddedMemberNames struct { + Id int64 + Names + NamesConflict +} + +type WithEmbeddedStructSameMemberName struct { + Id int64 + SameName +} + type WithEmbeddedStructBeforeAutoincrField struct { Names Id int64 @@ -175,6 +248,15 @@ type Names struct { LastName string } +type NamesConflict struct { + FirstName string + Surname string +} + +type SameName struct { + SameName string +} + type UniqueColumns struct { FirstName string LastName string @@ -353,7 +435,6 @@ func TestTruncateTables(t *testing.T) { func TestCustomDateType(t *testing.T) { dbmap := newDbMap() dbmap.TypeConverter = testTypeConverter{} - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) dbmap.AddTable(WithCustomDate{}).SetKeys(true, "Id") err := dbmap.CreateTables() if err != nil { @@ -389,7 +470,6 @@ func TestCustomDateType(t *testing.T) { func TestUIntPrimaryKey(t *testing.T) { dbmap := newDbMap() - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) dbmap.AddTable(PersonUInt64{}).SetKeys(true, "Id") dbmap.AddTable(PersonUInt32{}).SetKeys(true, "Id") dbmap.AddTable(PersonUInt16{}).SetKeys(true, "Id") @@ -419,7 +499,6 @@ func TestUIntPrimaryKey(t *testing.T) { func TestSetUniqueTogether(t *testing.T) { dbmap := newDbMap() - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) dbmap.AddTable(UniqueColumns{}).SetUniqueTogether("FirstName", "LastName").SetUniqueTogether("City", "ZipCode") err := dbmap.CreateTablesIfNotExists() if err != nil { @@ -468,7 +547,6 @@ func TestSetUniqueTogether(t *testing.T) { func TestPersistentUser(t *testing.T) { dbmap := newDbMap() dbmap.Exec("drop table if exists PersistentUser") - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) table := dbmap.AddTable(PersistentUser{}).SetKeys(false, "Key") table.ColMap("Key").Rename("mykey") err := dbmap.CreateTablesIfNotExists() @@ -581,7 +659,6 @@ func TestPersistentUser(t *testing.T) { func TestNamedQueryMap(t *testing.T) { dbmap := newDbMap() dbmap.Exec("drop table if exists PersistentUser") - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) table := dbmap.AddTable(PersistentUser{}).SetKeys(false, "Key") table.ColMap("Key").Rename("mykey") err := dbmap.CreateTablesIfNotExists() @@ -679,7 +756,6 @@ select * from PersistentUser func TestNamedQueryStruct(t *testing.T) { dbmap := newDbMap() dbmap.Exec("drop table if exists PersistentUser") - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) table := dbmap.AddTable(PersistentUser{}).SetKeys(false, "Key") table.ColMap("Key").Rename("mykey") err := dbmap.CreateTablesIfNotExists() @@ -859,9 +935,48 @@ func TestNullValues(t *testing.T) { } } +func TestScannerValuer(t *testing.T) { + dbmap := newDbMap() + dbmap.AddTableWithName(PersonValuerScanner{}, "person_test").SetKeys(true, "Id") + dbmap.AddTableWithName(InvoiceWithValuer{}, "invoice_test").SetKeys(true, "Id") + err := dbmap.CreateTables() + if err != nil { + panic(err) + } + defer dropAndClose(dbmap) + + pv := PersonValuerScanner{} + pv.FName = "foo" + pv.LName = "bar" + err = dbmap.Insert(&pv) + if err != nil { + t.Errorf("Could not insert PersonValuerScanner using Person table: %v", err) + t.FailNow() + } + + inv := InvoiceWithValuer{} + inv.Memo = "foo" + inv.Person = pv + err = dbmap.Insert(&inv) + if err != nil { + t.Errorf("Could not insert InvoiceWithValuer using Invoice table: %v", err) + t.FailNow() + } + + res, err := dbmap.Get(InvoiceWithValuer{}, inv.Id) + if err != nil { + t.Errorf("Could not get InvoiceWithValuer: %v", err) + t.FailNow() + } + dbInv := res.(*InvoiceWithValuer) + + if dbInv.Person.Id != pv.Id { + t.Errorf("InvoiceWithValuer got wrong person ID: %d (expected) != %d (actual)", pv.Id, dbInv.Person.Id) + } +} + func TestColumnProps(t *testing.T) { dbmap := newDbMap() - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) t1 := dbmap.AddTable(Invoice{}).SetKeys(true, "Id") t1.ColMap("Created").Rename("date_created") t1.ColMap("Updated").SetTransient(true) @@ -1161,6 +1276,29 @@ func TestWithIgnoredColumn(t *testing.T) { } } +func TestColumnFilter(t *testing.T) { + dbmap := initDbMap() + defer dropAndClose(dbmap) + + inv1 := &Invoice{0, 100, 200, "a", 0, false} + _insert(dbmap, inv1) + + inv1.Memo = "c" + inv1.IsPaid = true + _updateColumns(dbmap, func(col *ColumnMap) bool { + return col.ColumnName == "Memo" + }, inv1) + + inv2 := &Invoice{} + inv2 = _get(dbmap, inv2, inv1.Id).(*Invoice) + if inv2.Memo != "c" { + t.Errorf("Expected column to be updated (%#v)", inv2) + } + if inv2.IsPaid { + t.Error("IsPaid shouldn't have been updated") + } +} + func TestTypeConversionExample(t *testing.T) { dbmap := initDbMap() defer dropAndClose(dbmap) @@ -1217,6 +1355,60 @@ func TestWithEmbeddedStruct(t *testing.T) { } } +/* +func TestWithEmbeddedStructConflictingEmbeddedMemberNames(t *testing.T) { + dbmap := initDbMap() + defer dropAndClose(dbmap) + + es := &WithEmbeddedStructConflictingEmbeddedMemberNames{-1, Names{FirstName: "Alice", LastName: "Smith"}, NamesConflict{FirstName: "Andrew", Surname: "Wiggin"}} + _insert(dbmap, es) + expected := &WithEmbeddedStructConflictingEmbeddedMemberNames{-1, Names{FirstName: "Alice", LastName: "Smith"}, NamesConflict{FirstName: "Andrew", Surname: "Wiggin"}} + es2 := _get(dbmap, WithEmbeddedStructConflictingEmbeddedMemberNames{}, es.Id).(*WithEmbeddedStructConflictingEmbeddedMemberNames) + if !reflect.DeepEqual(expected, es2) { + t.Errorf("%v != %v", expected, es2) + } + + es2.Names.FirstName = "Bob" + expected.Names.FirstName = "Bob" + _update(dbmap, es2) + es2 = _get(dbmap, WithEmbeddedStructConflictingEmbeddedMemberNames{}, es.Id).(*WithEmbeddedStructConflictingEmbeddedMemberNames) + if !reflect.DeepEqual(expected, es2) { + t.Errorf("%v != %v", expected, es2) + } + + ess := _rawselect(dbmap, WithEmbeddedStructConflictingEmbeddedMemberNames{}, "select * from embedded_struct_conflict_name_test") + if !reflect.DeepEqual(es2, ess[0]) { + t.Errorf("%v != %v", es2, ess[0]) + } +} + +func TestWithEmbeddedStructSameMemberName(t *testing.T) { + dbmap := initDbMap() + defer dropAndClose(dbmap) + + es := &WithEmbeddedStructSameMemberName{-1, SameName{SameName: "Alice"}} + _insert(dbmap, es) + expected := &WithEmbeddedStructSameMemberName{-1, SameName{SameName: "Alice"}} + es2 := _get(dbmap, WithEmbeddedStructSameMemberName{}, es.Id).(*WithEmbeddedStructSameMemberName) + if !reflect.DeepEqual(expected, es2) { + t.Errorf("%v != %v", expected, es2) + } + + es2.SameName = SameName{"Bob"} + expected.SameName = SameName{"Bob"} + _update(dbmap, es2) + es2 = _get(dbmap, WithEmbeddedStructSameMemberName{}, es.Id).(*WithEmbeddedStructSameMemberName) + if !reflect.DeepEqual(expected, es2) { + t.Errorf("%v != %v", expected, es2) + } + + ess := _rawselect(dbmap, WithEmbeddedStructSameMemberName{}, "select * from embedded_struct_same_member_name_test") + if !reflect.DeepEqual(es2, ess[0]) { + t.Errorf("%v != %v", es2, ess[0]) + } +} +//*/ + func TestWithEmbeddedStructBeforeAutoincr(t *testing.T) { dbmap := initDbMap() defer dropAndClose(dbmap) @@ -1359,7 +1551,6 @@ func TestVersionMultipleRows(t *testing.T) { func TestWithStringPk(t *testing.T) { dbmap := newDbMap() - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) dbmap.AddTableWithName(WithStringPk{}, "string_pk_test").SetKeys(true, "Id") _, err := dbmap.Exec("create table string_pk_test (Id varchar(255), Name varchar(255));") if err != nil { @@ -1491,7 +1682,6 @@ func testWithTime(t *testing.T) { // See: https://github.com/go-gorp/gorp/issues/86 func testEmbeddedTime(t *testing.T) { dbmap := newDbMap() - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) dbmap.AddTable(EmbeddedTime{}).SetKeys(false, "Id") defer dropAndClose(dbmap) err := dbmap.CreateTables() @@ -1987,7 +2177,7 @@ func initDbMapBench() *DbMap { func initDbMap() *DbMap { dbmap := newDbMap() dbmap.AddTableWithName(Invoice{}, "invoice_test").SetKeys(true, "Id") - dbmap.AddTableWithName(InvoiceTag{}, "invoice_tag_test").SetKeys(true, "myid") + dbmap.AddTableWithName(InvoiceTag{}, "invoice_tag_test") //key is set via primarykey attribute dbmap.AddTableWithName(AliasTransientField{}, "alias_trans_field_test").SetKeys(true, "id") dbmap.AddTableWithName(OverriddenInvoice{}, "invoice_override_test").SetKeys(false, "Id") dbmap.AddTableWithName(Person{}, "person_test").SetKeys(true, "Id").SetVersionCol("Version") @@ -1995,6 +2185,8 @@ func initDbMap() *DbMap { dbmap.AddTableWithName(IdCreated{}, "id_created_test").SetKeys(true, "Id") dbmap.AddTableWithName(TypeConversionExample{}, "type_conv_test").SetKeys(true, "Id") dbmap.AddTableWithName(WithEmbeddedStruct{}, "embedded_struct_test").SetKeys(true, "Id") + //dbmap.AddTableWithName(WithEmbeddedStructConflictingEmbeddedMemberNames{}, "embedded_struct_conflict_name_test").SetKeys(true, "Id") + //dbmap.AddTableWithName(WithEmbeddedStructSameMemberName{}, "embedded_struct_same_member_name_test").SetKeys(true, "Id") dbmap.AddTableWithName(WithEmbeddedStructBeforeAutoincrField{}, "embedded_struct_before_autoincr_test").SetKeys(true, "Id") dbmap.AddTableWithName(WithEmbeddedAutoincr{}, "embedded_autoincr_test").SetKeys(true, "Id") dbmap.AddTableWithName(WithTime{}, "time_test").SetKeys(true, "Id") @@ -2018,7 +2210,6 @@ func initDbMap() *DbMap { func initDbMapNulls() *DbMap { dbmap := newDbMap() - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) dbmap.AddTable(TableWithNull{}).SetKeys(false, "Id") err := dbmap.CreateTables() if err != nil { @@ -2030,7 +2221,9 @@ func initDbMapNulls() *DbMap { func newDbMap() *DbMap { dialect, driver := dialectAndDriver() dbmap := &DbMap{Db: connect(driver), Dialect: dialect} - dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) + if debug { + dbmap.TraceOn("", log.New(os.Stdout, "gorptest: ", log.Lmicroseconds)) + } return dbmap } @@ -2081,6 +2274,14 @@ func _update(dbmap *DbMap, list ...interface{}) int64 { return count } +func _updateColumns(dbmap *DbMap, filter ColumnFilter, list ...interface{}) int64 { + count, err := dbmap.UpdateColumns(filter, list...) + if err != nil { + panic(err) + } + return count +} + func _del(dbmap *DbMap, list ...interface{}) int64 { count, err := dbmap.Delete(list...) if err != nil { diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/hooks.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/hooks.go new file mode 100644 index 0000000000..192b51f00a --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/hooks.go @@ -0,0 +1,49 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +//++ TODO v2-phase3: HasPostGet => PostGetter, HasPostDelete => PostDeleter, etc. + +// PostUpdate() will be executed after the GET statement. +type HasPostGet interface { + PostGet(SqlExecutor) error +} + +// PostUpdate() will be executed after the DELETE statement +type HasPostDelete interface { + PostDelete(SqlExecutor) error +} + +// PostUpdate() will be executed after the UPDATE statement +type HasPostUpdate interface { + PostUpdate(SqlExecutor) error +} + +// PostInsert() will be executed after the INSERT statement +type HasPostInsert interface { + PostInsert(SqlExecutor) error +} + +// PreDelete() will be executed before the DELETE statement. +type HasPreDelete interface { + PreDelete(SqlExecutor) error +} + +// PreUpdate() will be executed before UPDATE statement. +type HasPreUpdate interface { + PreUpdate(SqlExecutor) error +} + +// PreInsert() will be executed before INSERT statement. +type HasPreInsert interface { + PreInsert(SqlExecutor) error +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/index.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/index.go new file mode 100644 index 0000000000..01ecd9ecaa --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/index.go @@ -0,0 +1,56 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +// IndexMap represents a mapping between a Go struct field and a single +// index in a table. +// Unique and MaxSize only inform the +// CreateTables() function and are not used by Insert/Update/Delete/Get. +type IndexMap struct { + // Index name in db table + IndexName string + + // If true, " unique" is added to create index statements. + // Not used elsewhere + Unique bool + + // Index type supported by Dialect + // Postgres: B-tree, Hash, GiST and GIN. + // Mysql: Btree, Hash. + // Sqlite: nil. + IndexType string + + // Columns name for single and multiple indexes + columns []string +} + +// Rename allows you to specify the index name in the table +// +// Example: table.IndMap("customer_test_idx").Rename("customer_idx") +// +func (idx *IndexMap) Rename(indname string) *IndexMap { + idx.IndexName = indname + return idx +} + +// SetUnique adds "unique" to the create index statements for this +// index, if b is true. +func (idx *IndexMap) SetUnique(b bool) *IndexMap { + idx.Unique = b + return idx +} + +// SetIndexType specifies the index type supported by chousen SQL Dialect +func (idx *IndexMap) SetIndexType(indtype string) *IndexMap { + idx.IndexType = indtype + return idx +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/lockerror.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/lockerror.go new file mode 100644 index 0000000000..07b3047aef --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/lockerror.go @@ -0,0 +1,63 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "fmt" + "reflect" +) + +// OptimisticLockError is returned by Update() or Delete() if the +// struct being modified has a Version field and the value is not equal to +// the current value in the database +type OptimisticLockError struct { + // Table name where the lock error occurred + TableName string + + // Primary key values of the row being updated/deleted + Keys []interface{} + + // true if a row was found with those keys, indicating the + // LocalVersion is stale. false if no value was found with those + // keys, suggesting the row has been deleted since loaded, or + // was never inserted to begin with + RowExists bool + + // Version value on the struct passed to Update/Delete. This value is + // out of sync with the database. + LocalVersion int64 +} + +// Error returns a description of the cause of the lock error +func (e OptimisticLockError) Error() string { + if e.RowExists { + return fmt.Sprintf("gorp: OptimisticLockError table=%s keys=%v out of date version=%d", e.TableName, e.Keys, e.LocalVersion) + } + + return fmt.Sprintf("gorp: OptimisticLockError no row found for table=%s keys=%v", e.TableName, e.Keys) +} + +func lockError(m *DbMap, exec SqlExecutor, tableName string, + existingVer int64, elem reflect.Value, + keys ...interface{}) (int64, error) { + + existing, err := get(m, exec, elem.Interface(), keys...) + if err != nil { + return -1, err + } + + ole := OptimisticLockError{tableName, keys, true, existingVer} + if existing == nil { + ole.RowExists = false + } + return -1, ole +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/logging.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/logging.go new file mode 100644 index 0000000000..89d6c0e79e --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/logging.go @@ -0,0 +1,44 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import "fmt" + +type GorpLogger interface { + Printf(format string, v ...interface{}) +} + +// TraceOn turns on SQL statement logging for this DbMap. After this is +// called, all SQL statements will be sent to the logger. If prefix is +// a non-empty string, it will be written to the front of all logged +// strings, which can aid in filtering log lines. +// +// Use TraceOn if you want to spy on the SQL statements that gorp +// generates. +// +// Note that the base log.Logger type satisfies GorpLogger, but adapters can +// easily be written for other logging packages (e.g., the golang-sanctioned +// glog framework). +func (m *DbMap) TraceOn(prefix string, logger GorpLogger) { + m.logger = logger + if prefix == "" { + m.logPrefix = prefix + } else { + m.logPrefix = fmt.Sprintf("%s ", prefix) + } +} + +// TraceOff turns off tracing. It is idempotent. +func (m *DbMap) TraceOff() { + m.logger = nil + m.logPrefix = "" +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/nulltypes.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/nulltypes.go new file mode 100644 index 0000000000..8707703727 --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/nulltypes.go @@ -0,0 +1,58 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "database/sql/driver" + "time" +) + +// A nullable Time value +type NullTime struct { + Time time.Time + Valid bool // Valid is true if Time is not NULL +} + +// Scan implements the Scanner interface. +func (nt *NullTime) Scan(value interface{}) error { + switch t := value.(type) { + case time.Time: + nt.Time, nt.Valid = t, true + case []byte: + nt.Valid = false + for _, dtfmt := range []string{ + "2006-01-02 15:04:05.999999999", + "2006-01-02T15:04:05.999999999", + "2006-01-02 15:04:05", + "2006-01-02T15:04:05", + "2006-01-02 15:04", + "2006-01-02T15:04", + "2006-01-02", + "2006-01-02 15:04:05-07:00", + } { + var err error + if nt.Time, err = time.Parse(dtfmt, string(t)); err == nil { + nt.Valid = true + break + } + } + } + return nil +} + +// Value implements the driver Valuer interface. +func (nt NullTime) Value() (driver.Value, error) { + if !nt.Valid { + return nil, nil + } + return nt.Time, nil +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/select.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/select.go new file mode 100644 index 0000000000..d6ff92ee30 --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/select.go @@ -0,0 +1,351 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "database/sql" + "fmt" + "reflect" +) + +// SelectInt executes the given query, which should be a SELECT statement for a single +// integer column, and returns the value of the first row returned. If no rows are +// found, zero is returned. +func SelectInt(e SqlExecutor, query string, args ...interface{}) (int64, error) { + var h int64 + err := selectVal(e, &h, query, args...) + if err != nil && err != sql.ErrNoRows { + return 0, err + } + return h, nil +} + +// SelectNullInt executes the given query, which should be a SELECT statement for a single +// integer column, and returns the value of the first row returned. If no rows are +// found, the empty sql.NullInt64 value is returned. +func SelectNullInt(e SqlExecutor, query string, args ...interface{}) (sql.NullInt64, error) { + var h sql.NullInt64 + err := selectVal(e, &h, query, args...) + if err != nil && err != sql.ErrNoRows { + return h, err + } + return h, nil +} + +// SelectFloat executes the given query, which should be a SELECT statement for a single +// float column, and returns the value of the first row returned. If no rows are +// found, zero is returned. +func SelectFloat(e SqlExecutor, query string, args ...interface{}) (float64, error) { + var h float64 + err := selectVal(e, &h, query, args...) + if err != nil && err != sql.ErrNoRows { + return 0, err + } + return h, nil +} + +// SelectNullFloat executes the given query, which should be a SELECT statement for a single +// float column, and returns the value of the first row returned. If no rows are +// found, the empty sql.NullInt64 value is returned. +func SelectNullFloat(e SqlExecutor, query string, args ...interface{}) (sql.NullFloat64, error) { + var h sql.NullFloat64 + err := selectVal(e, &h, query, args...) + if err != nil && err != sql.ErrNoRows { + return h, err + } + return h, nil +} + +// SelectStr executes the given query, which should be a SELECT statement for a single +// char/varchar column, and returns the value of the first row returned. If no rows are +// found, an empty string is returned. +func SelectStr(e SqlExecutor, query string, args ...interface{}) (string, error) { + var h string + err := selectVal(e, &h, query, args...) + if err != nil && err != sql.ErrNoRows { + return "", err + } + return h, nil +} + +// SelectNullStr executes the given query, which should be a SELECT +// statement for a single char/varchar column, and returns the value +// of the first row returned. If no rows are found, the empty +// sql.NullString is returned. +func SelectNullStr(e SqlExecutor, query string, args ...interface{}) (sql.NullString, error) { + var h sql.NullString + err := selectVal(e, &h, query, args...) + if err != nil && err != sql.ErrNoRows { + return h, err + } + return h, nil +} + +// SelectOne executes the given query (which should be a SELECT statement) +// and binds the result to holder, which must be a pointer. +// +// If no row is found, an error (sql.ErrNoRows specifically) will be returned +// +// If more than one row is found, an error will be returned. +// +func SelectOne(m *DbMap, e SqlExecutor, holder interface{}, query string, args ...interface{}) error { + t := reflect.TypeOf(holder) + if t.Kind() == reflect.Ptr { + t = t.Elem() + } else { + return fmt.Errorf("gorp: SelectOne holder must be a pointer, but got: %t", holder) + } + + // Handle pointer to pointer + isptr := false + if t.Kind() == reflect.Ptr { + isptr = true + t = t.Elem() + } + + if t.Kind() == reflect.Struct { + var nonFatalErr error + + list, err := hookedselect(m, e, holder, query, args...) + if err != nil { + if !NonFatalError(err) { // FIXME: double negative, rename NonFatalError to FatalError + return err + } + nonFatalErr = err + } + + dest := reflect.ValueOf(holder) + if isptr { + dest = dest.Elem() + } + + if list != nil && len(list) > 0 { // FIXME: invert if/else + // check for multiple rows + if len(list) > 1 { + return fmt.Errorf("gorp: multiple rows returned for: %s - %v", query, args) + } + + // Initialize if nil + if dest.IsNil() { + dest.Set(reflect.New(t)) + } + + // only one row found + src := reflect.ValueOf(list[0]) + dest.Elem().Set(src.Elem()) + } else { + // No rows found, return a proper error. + return sql.ErrNoRows + } + + return nonFatalErr + } + + return selectVal(e, holder, query, args...) +} + +func selectVal(e SqlExecutor, holder interface{}, query string, args ...interface{}) error { + if len(args) == 1 { + switch m := e.(type) { + case *DbMap: + query, args = maybeExpandNamedQuery(m, query, args) + case *Transaction: + query, args = maybeExpandNamedQuery(m.dbmap, query, args) + } + } + rows, err := e.query(query, args...) + if err != nil { + return err + } + defer rows.Close() + + if !rows.Next() { + return sql.ErrNoRows + } + + return rows.Scan(holder) +} + +func hookedselect(m *DbMap, exec SqlExecutor, i interface{}, query string, + args ...interface{}) ([]interface{}, error) { + + var nonFatalErr error + + list, err := rawselect(m, exec, i, query, args...) + if err != nil { + if !NonFatalError(err) { + return nil, err + } + nonFatalErr = err + } + + // Determine where the results are: written to i, or returned in list + if t, _ := toSliceType(i); t == nil { + for _, v := range list { + if v, ok := v.(HasPostGet); ok { + err := v.PostGet(exec) + if err != nil { + return nil, err + } + } + } + } else { + resultsValue := reflect.Indirect(reflect.ValueOf(i)) + for i := 0; i < resultsValue.Len(); i++ { + if v, ok := resultsValue.Index(i).Interface().(HasPostGet); ok { + err := v.PostGet(exec) + if err != nil { + return nil, err + } + } + } + } + return list, nonFatalErr +} + +func rawselect(m *DbMap, exec SqlExecutor, i interface{}, query string, + args ...interface{}) ([]interface{}, error) { + var ( + appendToSlice = false // Write results to i directly? + intoStruct = true // Selecting into a struct? + pointerElements = true // Are the slice elements pointers (vs values)? + ) + + var nonFatalErr error + + // get type for i, verifying it's a supported destination + t, err := toType(i) + if err != nil { + var err2 error + if t, err2 = toSliceType(i); t == nil { + if err2 != nil { + return nil, err2 + } + return nil, err + } + pointerElements = t.Kind() == reflect.Ptr + if pointerElements { + t = t.Elem() + } + appendToSlice = true + intoStruct = t.Kind() == reflect.Struct + } + + // If the caller supplied a single struct/map argument, assume a "named + // parameter" query. Extract the named arguments from the struct/map, create + // the flat arg slice, and rewrite the query to use the dialect's placeholder. + if len(args) == 1 { + query, args = maybeExpandNamedQuery(m, query, args) + } + + // Run the query + rows, err := exec.query(query, args...) + if err != nil { + return nil, err + } + defer rows.Close() + + // Fetch the column names as returned from db + cols, err := rows.Columns() + if err != nil { + return nil, err + } + + if !intoStruct && len(cols) > 1 { + return nil, fmt.Errorf("gorp: select into non-struct slice requires 1 column, got %d", len(cols)) + } + + var colToFieldIndex [][]int + if intoStruct { + colToFieldIndex, err = columnToFieldIndex(m, t, cols) + if err != nil { + if !NonFatalError(err) { + return nil, err + } + nonFatalErr = err + } + } + + conv := m.TypeConverter + + // Add results to one of these two slices. + var ( + list = make([]interface{}, 0) + sliceValue = reflect.Indirect(reflect.ValueOf(i)) + ) + + for { + if !rows.Next() { + // if error occured return rawselect + if rows.Err() != nil { + return nil, rows.Err() + } + // time to exit from outer "for" loop + break + } + v := reflect.New(t) + dest := make([]interface{}, len(cols)) + + custScan := make([]CustomScanner, 0) + + for x := range cols { + f := v.Elem() + if intoStruct { + index := colToFieldIndex[x] + if index == nil { + // this field is not present in the struct, so create a dummy + // value for rows.Scan to scan into + var dummy dummyField + dest[x] = &dummy + continue + } + f = f.FieldByIndex(index) + } + target := f.Addr().Interface() + if conv != nil { + scanner, ok := conv.FromDb(target) + if ok { + target = scanner.Holder + custScan = append(custScan, scanner) + } + } + dest[x] = target + } + + err = rows.Scan(dest...) + if err != nil { + return nil, err + } + + for _, c := range custScan { + err = c.Bind() + if err != nil { + return nil, err + } + } + + if appendToSlice { + if !pointerElements { + v = v.Elem() + } + sliceValue.Set(reflect.Append(sliceValue, v)) + } else { + list = append(list, v.Interface()) + } + } + + if appendToSlice && sliceValue.IsNil() { + sliceValue.Set(reflect.MakeSlice(sliceValue.Type(), 0, 0)) + } + + return list, nonFatalErr +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/table.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/table.go new file mode 100644 index 0000000000..5c513909a5 --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/table.go @@ -0,0 +1,247 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "bytes" + "fmt" + "reflect" + "strings" +) + +// TableMap represents a mapping between a Go struct and a database table +// Use dbmap.AddTable() or dbmap.AddTableWithName() to create these +type TableMap struct { + // Name of database table. + TableName string + SchemaName string + gotype reflect.Type + Columns []*ColumnMap + keys []*ColumnMap + indexes []*IndexMap + uniqueTogether [][]string + version *ColumnMap + insertPlan bindPlan + updatePlan bindPlan + deletePlan bindPlan + getPlan bindPlan + dbmap *DbMap +} + +// ResetSql removes cached insert/update/select/delete SQL strings +// associated with this TableMap. Call this if you've modified +// any column names or the table name itself. +func (t *TableMap) ResetSql() { + t.insertPlan = bindPlan{} + t.updatePlan = bindPlan{} + t.deletePlan = bindPlan{} + t.getPlan = bindPlan{} +} + +// SetKeys lets you specify the fields on a struct that map to primary +// key columns on the table. If isAutoIncr is set, result.LastInsertId() +// will be used after INSERT to bind the generated id to the Go struct. +// +// Automatically calls ResetSql() to ensure SQL statements are regenerated. +// +// Panics if isAutoIncr is true, and fieldNames length != 1 +// +func (t *TableMap) SetKeys(isAutoIncr bool, fieldNames ...string) *TableMap { + if isAutoIncr && len(fieldNames) != 1 { + panic(fmt.Sprintf( + "gorp: SetKeys: fieldNames length must be 1 if key is auto-increment. (Saw %v fieldNames)", + len(fieldNames))) + } + t.keys = make([]*ColumnMap, 0) + for _, name := range fieldNames { + colmap := t.ColMap(name) + colmap.isPK = true + colmap.isAutoIncr = isAutoIncr + t.keys = append(t.keys, colmap) + } + t.ResetSql() + + return t +} + +// SetUniqueTogether lets you specify uniqueness constraints across multiple +// columns on the table. Each call adds an additional constraint for the +// specified columns. +// +// Automatically calls ResetSql() to ensure SQL statements are regenerated. +// +// Panics if fieldNames length < 2. +// +func (t *TableMap) SetUniqueTogether(fieldNames ...string) *TableMap { + if len(fieldNames) < 2 { + panic(fmt.Sprintf( + "gorp: SetUniqueTogether: must provide at least two fieldNames to set uniqueness constraint.")) + } + + columns := make([]string, 0) + for _, name := range fieldNames { + columns = append(columns, name) + } + t.uniqueTogether = append(t.uniqueTogether, columns) + t.ResetSql() + + return t +} + +// ColMap returns the ColumnMap pointer matching the given struct field +// name. It panics if the struct does not contain a field matching this +// name. +func (t *TableMap) ColMap(field string) *ColumnMap { + col := colMapOrNil(t, field) + if col == nil { + e := fmt.Sprintf("No ColumnMap in table %s type %s with field %s", + t.TableName, t.gotype.Name(), field) + + panic(e) + } + return col +} + +func colMapOrNil(t *TableMap, field string) *ColumnMap { + for _, col := range t.Columns { + if col.fieldName == field || col.ColumnName == field { + return col + } + } + return nil +} + +// IdxMap returns the IndexMap pointer matching the given index name. +func (t *TableMap) IdxMap(field string) *IndexMap { + for _, idx := range t.indexes { + if idx.IndexName == field { + return idx + } + } + return nil +} + +// AddIndex registers the index with gorp for specified table with given parameters. +// This operation is idempotent. If index is already mapped, the +// existing *IndexMap is returned +// Function will panic if one of the given for index columns does not exists +// +// Automatically calls ResetSql() to ensure SQL statements are regenerated. +// +func (t *TableMap) AddIndex(name string, idxtype string, columns []string) *IndexMap { + // check if we have a index with this name already + for _, idx := range t.indexes { + if idx.IndexName == name { + return idx + } + } + for _, icol := range columns { + if res := t.ColMap(icol); res == nil { + e := fmt.Sprintf("No ColumnName in table %s to create index on", t.TableName) + panic(e) + } + } + + idx := &IndexMap{IndexName: name, Unique: false, IndexType: idxtype, columns: columns} + t.indexes = append(t.indexes, idx) + t.ResetSql() + return idx +} + +// SetVersionCol sets the column to use as the Version field. By default +// the "Version" field is used. Returns the column found, or panics +// if the struct does not contain a field matching this name. +// +// Automatically calls ResetSql() to ensure SQL statements are regenerated. +func (t *TableMap) SetVersionCol(field string) *ColumnMap { + c := t.ColMap(field) + t.version = c + t.ResetSql() + return c +} + +// SqlForCreateTable gets a sequence of SQL commands that will create +// the specified table and any associated schema +func (t *TableMap) SqlForCreate(ifNotExists bool) string { + s := bytes.Buffer{} + dialect := t.dbmap.Dialect + + if strings.TrimSpace(t.SchemaName) != "" { + schemaCreate := "create schema" + if ifNotExists { + s.WriteString(dialect.IfSchemaNotExists(schemaCreate, t.SchemaName)) + } else { + s.WriteString(schemaCreate) + } + s.WriteString(fmt.Sprintf(" %s;", t.SchemaName)) + } + + tableCreate := "create table" + if ifNotExists { + s.WriteString(dialect.IfTableNotExists(tableCreate, t.SchemaName, t.TableName)) + } else { + s.WriteString(tableCreate) + } + s.WriteString(fmt.Sprintf(" %s (", dialect.QuotedTableForQuery(t.SchemaName, t.TableName))) + + x := 0 + for _, col := range t.Columns { + if !col.Transient { + if x > 0 { + s.WriteString(", ") + } + stype := dialect.ToSqlType(col.gotype, col.MaxSize, col.isAutoIncr) + s.WriteString(fmt.Sprintf("%s %s", dialect.QuoteField(col.ColumnName), stype)) + + if col.isPK || col.isNotNull { + s.WriteString(" not null") + } + if col.isPK && len(t.keys) == 1 { + s.WriteString(" primary key") + } + if col.Unique { + s.WriteString(" unique") + } + if col.isAutoIncr { + s.WriteString(fmt.Sprintf(" %s", dialect.AutoIncrStr())) + } + + x++ + } + } + if len(t.keys) > 1 { + s.WriteString(", primary key (") + for x := range t.keys { + if x > 0 { + s.WriteString(", ") + } + s.WriteString(dialect.QuoteField(t.keys[x].ColumnName)) + } + s.WriteString(")") + } + if len(t.uniqueTogether) > 0 { + for _, columns := range t.uniqueTogether { + s.WriteString(", unique (") + for i, column := range columns { + if i > 0 { + s.WriteString(", ") + } + s.WriteString(dialect.QuoteField(column)) + } + s.WriteString(")") + } + } + s.WriteString(") ") + s.WriteString(dialect.CreateTableSuffix()) + s.WriteString(dialect.QuerySuffix()) + return s.String() +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/table_bindings.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/table_bindings.go new file mode 100644 index 0000000000..1727d0d09f --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/table_bindings.go @@ -0,0 +1,317 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "bytes" + "fmt" + "reflect" +) + +// CustomScanner binds a database column value to a Go type +type CustomScanner struct { + // After a row is scanned, Holder will contain the value from the database column. + // Initialize the CustomScanner with the concrete Go type you wish the database + // driver to scan the raw column into. + Holder interface{} + // Target typically holds a pointer to the target struct field to bind the Holder + // value to. + Target interface{} + // Binder is a custom function that converts the holder value to the target type + // and sets target accordingly. This function should return error if a problem + // occurs converting the holder to the target. + Binder func(holder interface{}, target interface{}) error +} + +// Used to filter columns when selectively updating +type ColumnFilter func(*ColumnMap) bool + +func acceptAllFilter(col *ColumnMap) bool { + return true +} + +// Bind is called automatically by gorp after Scan() +func (me CustomScanner) Bind() error { + return me.Binder(me.Holder, me.Target) +} + +type bindPlan struct { + query string + argFields []string + keyFields []string + versField string + autoIncrIdx int + autoIncrFieldName string +} + +func (plan bindPlan) createBindInstance(elem reflect.Value, conv TypeConverter) (bindInstance, error) { + bi := bindInstance{query: plan.query, autoIncrIdx: plan.autoIncrIdx, autoIncrFieldName: plan.autoIncrFieldName, versField: plan.versField} + if plan.versField != "" { + bi.existingVersion = elem.FieldByName(plan.versField).Int() + } + + var err error + + for i := 0; i < len(plan.argFields); i++ { + k := plan.argFields[i] + if k == versFieldConst { + newVer := bi.existingVersion + 1 + bi.args = append(bi.args, newVer) + if bi.existingVersion == 0 { + elem.FieldByName(plan.versField).SetInt(int64(newVer)) + } + } else { + val := elem.FieldByName(k).Interface() + if conv != nil { + val, err = conv.ToDb(val) + if err != nil { + return bindInstance{}, err + } + } + bi.args = append(bi.args, val) + } + } + + for i := 0; i < len(plan.keyFields); i++ { + k := plan.keyFields[i] + val := elem.FieldByName(k).Interface() + if conv != nil { + val, err = conv.ToDb(val) + if err != nil { + return bindInstance{}, err + } + } + bi.keys = append(bi.keys, val) + } + + return bi, nil +} + +type bindInstance struct { + query string + args []interface{} + keys []interface{} + existingVersion int64 + versField string + autoIncrIdx int + autoIncrFieldName string +} + +func (t *TableMap) bindInsert(elem reflect.Value) (bindInstance, error) { + plan := t.insertPlan + if plan.query == "" { + plan.autoIncrIdx = -1 + + s := bytes.Buffer{} + s2 := bytes.Buffer{} + s.WriteString(fmt.Sprintf("insert into %s (", t.dbmap.Dialect.QuotedTableForQuery(t.SchemaName, t.TableName))) + + x := 0 + first := true + for y := range t.Columns { + col := t.Columns[y] + if !(col.isAutoIncr && t.dbmap.Dialect.AutoIncrBindValue() == "") { + if !col.Transient { + if !first { + s.WriteString(",") + s2.WriteString(",") + } + s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) + + if col.isAutoIncr { + s2.WriteString(t.dbmap.Dialect.AutoIncrBindValue()) + plan.autoIncrIdx = y + plan.autoIncrFieldName = col.fieldName + } else { + if col.DefaultValue == "" { + s2.WriteString(t.dbmap.Dialect.BindVar(x)) + if col == t.version { + plan.versField = col.fieldName + plan.argFields = append(plan.argFields, versFieldConst) + } else { + plan.argFields = append(plan.argFields, col.fieldName) + } + x++ + } else { + s2.WriteString(col.DefaultValue) + } + } + first = false + } + } else { + plan.autoIncrIdx = y + plan.autoIncrFieldName = col.fieldName + } + } + s.WriteString(") values (") + s.WriteString(s2.String()) + s.WriteString(")") + if plan.autoIncrIdx > -1 { + s.WriteString(t.dbmap.Dialect.AutoIncrInsertSuffix(t.Columns[plan.autoIncrIdx])) + } + s.WriteString(t.dbmap.Dialect.QuerySuffix()) + + plan.query = s.String() + t.insertPlan = plan + } + + return plan.createBindInstance(elem, t.dbmap.TypeConverter) +} + +func (t *TableMap) bindUpdate(elem reflect.Value, colFilter ColumnFilter) (bindInstance, error) { + if colFilter == nil { + colFilter = acceptAllFilter + } + + plan := t.updatePlan + if plan.query == "" { + + s := bytes.Buffer{} + s.WriteString(fmt.Sprintf("update %s set ", t.dbmap.Dialect.QuotedTableForQuery(t.SchemaName, t.TableName))) + x := 0 + + for y := range t.Columns { + col := t.Columns[y] + if !col.isAutoIncr && !col.Transient && colFilter(col) { + if x > 0 { + s.WriteString(", ") + } + s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) + s.WriteString("=") + s.WriteString(t.dbmap.Dialect.BindVar(x)) + + if col == t.version { + plan.versField = col.fieldName + plan.argFields = append(plan.argFields, versFieldConst) + } else { + plan.argFields = append(plan.argFields, col.fieldName) + } + x++ + } + } + + s.WriteString(" where ") + for y := range t.keys { + col := t.keys[y] + if y > 0 { + s.WriteString(" and ") + } + s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) + s.WriteString("=") + s.WriteString(t.dbmap.Dialect.BindVar(x)) + + plan.argFields = append(plan.argFields, col.fieldName) + plan.keyFields = append(plan.keyFields, col.fieldName) + x++ + } + if plan.versField != "" { + s.WriteString(" and ") + s.WriteString(t.dbmap.Dialect.QuoteField(t.version.ColumnName)) + s.WriteString("=") + s.WriteString(t.dbmap.Dialect.BindVar(x)) + plan.argFields = append(plan.argFields, plan.versField) + } + s.WriteString(t.dbmap.Dialect.QuerySuffix()) + + plan.query = s.String() + t.updatePlan = plan + } + + return plan.createBindInstance(elem, t.dbmap.TypeConverter) +} + +func (t *TableMap) bindDelete(elem reflect.Value) (bindInstance, error) { + plan := t.deletePlan + if plan.query == "" { + + s := bytes.Buffer{} + s.WriteString(fmt.Sprintf("delete from %s", t.dbmap.Dialect.QuotedTableForQuery(t.SchemaName, t.TableName))) + + for y := range t.Columns { + col := t.Columns[y] + if !col.Transient { + if col == t.version { + plan.versField = col.fieldName + } + } + } + + s.WriteString(" where ") + for x := range t.keys { + k := t.keys[x] + if x > 0 { + s.WriteString(" and ") + } + s.WriteString(t.dbmap.Dialect.QuoteField(k.ColumnName)) + s.WriteString("=") + s.WriteString(t.dbmap.Dialect.BindVar(x)) + + plan.keyFields = append(plan.keyFields, k.fieldName) + plan.argFields = append(plan.argFields, k.fieldName) + } + if plan.versField != "" { + s.WriteString(" and ") + s.WriteString(t.dbmap.Dialect.QuoteField(t.version.ColumnName)) + s.WriteString("=") + s.WriteString(t.dbmap.Dialect.BindVar(len(plan.argFields))) + + plan.argFields = append(plan.argFields, plan.versField) + } + s.WriteString(t.dbmap.Dialect.QuerySuffix()) + + plan.query = s.String() + t.deletePlan = plan + } + + return plan.createBindInstance(elem, t.dbmap.TypeConverter) +} + +func (t *TableMap) bindGet() bindPlan { + plan := t.getPlan + if plan.query == "" { + + s := bytes.Buffer{} + s.WriteString("select ") + + x := 0 + for _, col := range t.Columns { + if !col.Transient { + if x > 0 { + s.WriteString(",") + } + s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) + plan.argFields = append(plan.argFields, col.fieldName) + x++ + } + } + s.WriteString(" from ") + s.WriteString(t.dbmap.Dialect.QuotedTableForQuery(t.SchemaName, t.TableName)) + s.WriteString(" where ") + for x := range t.keys { + col := t.keys[x] + if x > 0 { + s.WriteString(" and ") + } + s.WriteString(t.dbmap.Dialect.QuoteField(col.ColumnName)) + s.WriteString("=") + s.WriteString(t.dbmap.Dialect.BindVar(x)) + + plan.keyFields = append(plan.keyFields, col.fieldName) + } + s.WriteString(t.dbmap.Dialect.QuerySuffix()) + + plan.query = s.String() + t.getPlan = plan + } + + return plan +} diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/test_all.sh b/Godeps/_workspace/src/github.com/go-gorp/gorp/test_all.sh index f870b39a39..f2d16961a2 100644 --- a/Godeps/_workspace/src/github.com/go-gorp/gorp/test_all.sh +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/test_all.sh @@ -1,22 +1,38 @@ -#!/bin/sh +#!/bin/bash -e # on macs, you may need to: # export GOBUILDFLAG=-ldflags -linkmode=external -set -e +coveralls_testflags="-v -covermode=count -coverprofile=coverage.out" +echo "Testing against mysql" export GORP_TEST_DSN=gorptest/gorptest/gorptest export GORP_TEST_DIALECT=mysql -go test $GOBUILDFLAG . +go test $coveralls_testflags $GOBUILDFLAG $@ . +echo "Testing against gomysql" export GORP_TEST_DSN=gorptest:gorptest@/gorptest export GORP_TEST_DIALECT=gomysql -go test $GOBUILDFLAG . +go test $coveralls_testflags $GOBUILDFLAG $@ . +echo "Testing against postgres" export GORP_TEST_DSN="user=gorptest password=gorptest dbname=gorptest sslmode=disable" export GORP_TEST_DIALECT=postgres -go test $GOBUILDFLAG . +go test $coveralls_testflags $GOBUILDFLAG $@ . +echo "Testing against sqlite" export GORP_TEST_DSN=/tmp/gorptest.bin export GORP_TEST_DIALECT=sqlite -go test $GOBUILDFLAG . +go test $coveralls_testflags $GOBUILDFLAG $@ . +rm -f /tmp/gorptest.bin + +case $(go version) in + *go1.4*) + if [ "$(type -p goveralls)" != "" ]; then + goveralls -covermode=count -coverprofile=coverage.out -service=travis-ci + elif [ -x $HOME/gopath/bin/goveralls ]; then + $HOME/gopath/bin/goveralls -covermode=count -coverprofile=coverage.out -service=travis-ci + fi + ;; + *) ;; +esac diff --git a/Godeps/_workspace/src/github.com/go-gorp/gorp/transaction.go b/Godeps/_workspace/src/github.com/go-gorp/gorp/transaction.go new file mode 100644 index 0000000000..6430f24f1c --- /dev/null +++ b/Godeps/_workspace/src/github.com/go-gorp/gorp/transaction.go @@ -0,0 +1,193 @@ +// Copyright 2012 James Cooper. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package gorp provides a simple way to marshal Go structs to and from +// SQL databases. It uses the database/sql package, and should work with any +// compliant database/sql driver. +// +// Source code and project home: +// https://github.com/go-gorp/gorp + +package gorp + +import ( + "database/sql" + "time" +) + +// Transaction represents a database transaction. +// Insert/Update/Delete/Get/Exec operations will be run in the context +// of that transaction. Transactions should be terminated with +// a call to Commit() or Rollback() +type Transaction struct { + dbmap *DbMap + tx *sql.Tx + closed bool +} + +// Insert has the same behavior as DbMap.Insert(), but runs in a transaction. +func (t *Transaction) Insert(list ...interface{}) error { + return insert(t.dbmap, t, list...) +} + +// Update had the same behavior as DbMap.Update(), but runs in a transaction. +func (t *Transaction) Update(list ...interface{}) (int64, error) { + return update(t.dbmap, t, nil, list...) +} + +// UpdateColumns had the same behavior as DbMap.UpdateColumns(), but runs in a transaction. +func (t *Transaction) UpdateColumns(filter ColumnFilter, list ...interface{}) (int64, error) { + return update(t.dbmap, t, filter, list...) +} + +// Delete has the same behavior as DbMap.Delete(), but runs in a transaction. +func (t *Transaction) Delete(list ...interface{}) (int64, error) { + return delete(t.dbmap, t, list...) +} + +// Get has the same behavior as DbMap.Get(), but runs in a transaction. +func (t *Transaction) Get(i interface{}, keys ...interface{}) (interface{}, error) { + return get(t.dbmap, t, i, keys...) +} + +// Select has the same behavior as DbMap.Select(), but runs in a transaction. +func (t *Transaction) Select(i interface{}, query string, args ...interface{}) ([]interface{}, error) { + return hookedselect(t.dbmap, t, i, query, args...) +} + +// Exec has the same behavior as DbMap.Exec(), but runs in a transaction. +func (t *Transaction) Exec(query string, args ...interface{}) (sql.Result, error) { + if t.dbmap.logger != nil { + now := time.Now() + defer t.dbmap.trace(now, query, args...) + } + return exec(t, query, args...) +} + +// SelectInt is a convenience wrapper around the gorp.SelectInt function. +func (t *Transaction) SelectInt(query string, args ...interface{}) (int64, error) { + return SelectInt(t, query, args...) +} + +// SelectNullInt is a convenience wrapper around the gorp.SelectNullInt function. +func (t *Transaction) SelectNullInt(query string, args ...interface{}) (sql.NullInt64, error) { + return SelectNullInt(t, query, args...) +} + +// SelectFloat is a convenience wrapper around the gorp.SelectFloat function. +func (t *Transaction) SelectFloat(query string, args ...interface{}) (float64, error) { + return SelectFloat(t, query, args...) +} + +// SelectNullFloat is a convenience wrapper around the gorp.SelectNullFloat function. +func (t *Transaction) SelectNullFloat(query string, args ...interface{}) (sql.NullFloat64, error) { + return SelectNullFloat(t, query, args...) +} + +// SelectStr is a convenience wrapper around the gorp.SelectStr function. +func (t *Transaction) SelectStr(query string, args ...interface{}) (string, error) { + return SelectStr(t, query, args...) +} + +// SelectNullStr is a convenience wrapper around the gorp.SelectNullStr function. +func (t *Transaction) SelectNullStr(query string, args ...interface{}) (sql.NullString, error) { + return SelectNullStr(t, query, args...) +} + +// SelectOne is a convenience wrapper around the gorp.SelectOne function. +func (t *Transaction) SelectOne(holder interface{}, query string, args ...interface{}) error { + return SelectOne(t.dbmap, t, holder, query, args...) +} + +// Commit commits the underlying database transaction. +func (t *Transaction) Commit() error { + if !t.closed { + t.closed = true + if t.dbmap.logger != nil { + now := time.Now() + defer t.dbmap.trace(now, "commit;") + } + return t.tx.Commit() + } + + return sql.ErrTxDone +} + +// Rollback rolls back the underlying database transaction. +func (t *Transaction) Rollback() error { + if !t.closed { + t.closed = true + if t.dbmap.logger != nil { + now := time.Now() + defer t.dbmap.trace(now, "rollback;") + } + return t.tx.Rollback() + } + + return sql.ErrTxDone +} + +// Savepoint creates a savepoint with the given name. The name is interpolated +// directly into the SQL SAVEPOINT statement, so you must sanitize it if it is +// derived from user input. +func (t *Transaction) Savepoint(name string) error { + query := "savepoint " + t.dbmap.Dialect.QuoteField(name) + if t.dbmap.logger != nil { + now := time.Now() + defer t.dbmap.trace(now, query, nil) + } + _, err := t.tx.Exec(query) + return err +} + +// RollbackToSavepoint rolls back to the savepoint with the given name. The +// name is interpolated directly into the SQL SAVEPOINT statement, so you must +// sanitize it if it is derived from user input. +func (t *Transaction) RollbackToSavepoint(savepoint string) error { + query := "rollback to savepoint " + t.dbmap.Dialect.QuoteField(savepoint) + if t.dbmap.logger != nil { + now := time.Now() + defer t.dbmap.trace(now, query, nil) + } + _, err := t.tx.Exec(query) + return err +} + +// ReleaseSavepint releases the savepoint with the given name. The name is +// interpolated directly into the SQL SAVEPOINT statement, so you must sanitize +// it if it is derived from user input. +func (t *Transaction) ReleaseSavepoint(savepoint string) error { + query := "release savepoint " + t.dbmap.Dialect.QuoteField(savepoint) + if t.dbmap.logger != nil { + now := time.Now() + defer t.dbmap.trace(now, query, nil) + } + _, err := t.tx.Exec(query) + return err +} + +// Prepare has the same behavior as DbMap.Prepare(), but runs in a transaction. +func (t *Transaction) Prepare(query string) (*sql.Stmt, error) { + if t.dbmap.logger != nil { + now := time.Now() + defer t.dbmap.trace(now, query, nil) + } + return t.tx.Prepare(query) +} + +func (t *Transaction) queryRow(query string, args ...interface{}) *sql.Row { + if t.dbmap.logger != nil { + now := time.Now() + defer t.dbmap.trace(now, query, args...) + } + return t.tx.QueryRow(query, args...) +} + +func (t *Transaction) query(query string, args ...interface{}) (*sql.Rows, error) { + if t.dbmap.logger != nil { + now := time.Now() + defer t.dbmap.trace(now, query, args...) + } + return t.tx.Query(query, args...) +} diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/AUTHORS b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/AUTHORS index 4b65bf3633..6dd0167f37 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/AUTHORS +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/AUTHORS @@ -20,9 +20,11 @@ Frederick Mayle Gustavo Kristic Hanno Braun Henri Yandell +Hirotaka Yamamoto INADA Naoki James Harr Jian Zhen +Joshua Prunier Julien Schmidt Kamil Dziedzic Leonardo YongUk Kim @@ -32,8 +34,10 @@ Michael Woolnough Nicola Peduzzi Runrioter Wung Soroush Pour +Stan Putrya Xiaobing Jiang Xiuming Chen +Julien Lefevre # Organizations diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/README.md b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/README.md index 9edb7628b3..706b7ef2ec 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/README.md +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/README.md @@ -30,7 +30,7 @@ A MySQL-Driver for Go's [database/sql](http://golang.org/pkg/database/sql) packa ## Features * Lightweight and [fast](https://github.com/go-sql-driver/sql-benchmark "golang MySQL-Driver performance") * Native Go implementation. No C-bindings, just pure Go - * Connections over TCP/IPv4, TCP/IPv6 or Unix domain sockets + * Connections over TCP/IPv4, TCP/IPv6, Unix domain sockets or [custom protocols](http://godoc.org/github.com/go-sql-driver/mysql#DialFunc) * Automatic handling of broken connections * Automatic Connection Pooling *(by database/sql package)* * Supports queries larger than 16MB @@ -123,6 +123,16 @@ Default: false `allowAllFiles=true` disables the file Whitelist for `LOAD DATA LOCAL INFILE` and allows *all* files. [*Might be insecure!*](http://dev.mysql.com/doc/refman/5.7/en/load-data-local.html) +##### `allowCleartextPasswords` + +``` +Type: bool +Valid Values: true, false +Default: false +``` + +`allowCleartextPasswords=true` allows using the [cleartext client side plugin](http://dev.mysql.com/doc/en/cleartext-authentication-plugin.html) if required by an account, such as one defined with the [PAM authentication plugin](http://dev.mysql.com/doc/en/pam-authentication-plugin.html). Sending passwords in clear text may be a security problem in some configurations. To avoid problems if there is any possibility that the password would be intercepted, clients should connect to MySQL Server using a method that protects the password. Possibilities include [TLS / SSL](#tls), IPsec, or a private network. + ##### `allowOldPasswords` ``` @@ -321,7 +331,7 @@ import "github.com/go-sql-driver/mysql" Files must be whitelisted by registering them with `mysql.RegisterLocalFile(filepath)` (recommended) or the Whitelist check must be deactivated by using the DSN parameter `allowAllFiles=true` ([*Might be insecure!*](http://dev.mysql.com/doc/refman/5.7/en/load-data-local.html)). -To use a `io.Reader` a handler function must be registered with `mysql.RegisterReaderHandler(name, handler)` which returns a `io.Reader` or `io.ReadCloser`. The Reader is available with the filepath `Reader::` then. +To use a `io.Reader` a handler function must be registered with `mysql.RegisterReaderHandler(name, handler)` which returns a `io.Reader` or `io.ReadCloser`. The Reader is available with the filepath `Reader::` then. Choose different names for different handlers and `DeregisterReaderHandler` when you don't need it anymore. See the [godoc of Go-MySQL-Driver](http://godoc.org/github.com/go-sql-driver/mysql "golang mysql driver documentation") for details. diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/connection.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/connection.go index a6d39bec95..72ed09d693 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/connection.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/connection.go @@ -34,21 +34,22 @@ type mysqlConn struct { } type config struct { - user string - passwd string - net string - addr string - dbname string - params map[string]string - loc *time.Location - tls *tls.Config - timeout time.Duration - collation uint8 - allowAllFiles bool - allowOldPasswords bool - clientFoundRows bool - columnsWithAlias bool - interpolateParams bool + user string + passwd string + net string + addr string + dbname string + params map[string]string + loc *time.Location + tls *tls.Config + timeout time.Duration + collation uint8 + allowAllFiles bool + allowOldPasswords bool + allowCleartextPasswords bool + clientFoundRows bool + columnsWithAlias bool + interpolateParams bool } // Handles parameters set in DSN after the connection is established @@ -252,7 +253,7 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin if v == nil { buf = append(buf, "NULL"...) } else { - buf = append(buf, '\'') + buf = append(buf, "_binary'"...) if mc.status&statusNoBackslashEscapes == 0 { buf = escapeBytesBackslash(buf, v) } else { diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/driver.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/driver.go index 3cbbe6031c..d310624ad1 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/driver.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/driver.go @@ -107,6 +107,15 @@ func (d MySQLDriver) Open(dsn string) (driver.Conn, error) { mc.Close() return nil, err } + } else if mc.cfg != nil && mc.cfg.allowCleartextPasswords && err == ErrCleartextPassword { + if err = mc.writeClearAuthPacket(); err != nil { + mc.Close() + return nil, err + } + if err = mc.readResultOK(); err != nil { + mc.Close() + return nil, err + } } else { mc.Close() return nil, err diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/driver_test.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/driver_test.go index cb0d5f5ec8..f9da416ec3 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/driver_test.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/driver_test.go @@ -1246,6 +1246,30 @@ func TestCollation(t *testing.T) { } } +func TestColumnsWithAlias(t *testing.T) { + runTests(t, dsn+"&columnsWithAlias=true", func(dbt *DBTest) { + rows := dbt.mustQuery("SELECT 1 AS A") + defer rows.Close() + cols, _ := rows.Columns() + if len(cols) != 1 { + t.Fatalf("expected 1 column, got %d", len(cols)) + } + if cols[0] != "A" { + t.Fatalf("expected column name \"A\", got \"%s\"", cols[0]) + } + rows.Close() + + rows = dbt.mustQuery("SELECT * FROM (SELECT 1 AS one) AS A") + cols, _ = rows.Columns() + if len(cols) != 1 { + t.Fatalf("expected 1 column, got %d", len(cols)) + } + if cols[0] != "A.one" { + t.Fatalf("expected column name \"A.one\", got \"%s\"", cols[0]) + } + }) +} + func TestRawBytesResultExceedsBuffer(t *testing.T) { runTests(t, dsn, func(dbt *DBTest) { // defaultBufSize from buffer.go diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/errors.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/errors.go index 97d7b39962..44cf30db60 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/errors.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/errors.go @@ -19,15 +19,17 @@ import ( // Various errors the driver might return. Can change between driver versions. var ( - ErrInvalidConn = errors.New("Invalid Connection") - ErrMalformPkt = errors.New("Malformed Packet") - ErrNoTLS = errors.New("TLS encryption requested but server does not support TLS") - ErrOldPassword = errors.New("This server only supports the insecure old password authentication. If you still want to use it, please add 'allowOldPasswords=1' to your DSN. See also https://github.com/go-sql-driver/mysql/wiki/old_passwords") - ErrOldProtocol = errors.New("MySQL-Server does not support required Protocol 41+") - ErrPktSync = errors.New("Commands out of sync. You can't run this command now") - ErrPktSyncMul = errors.New("Commands out of sync. Did you run multiple statements at once?") - ErrPktTooLarge = errors.New("Packet for query is too large. You can change this value on the server by adjusting the 'max_allowed_packet' variable.") - ErrBusyBuffer = errors.New("Busy buffer") + ErrInvalidConn = errors.New("Invalid Connection") + ErrMalformPkt = errors.New("Malformed Packet") + ErrNoTLS = errors.New("TLS encryption requested but server does not support TLS") + ErrOldPassword = errors.New("This user requires old password authentication. If you still want to use it, please add 'allowOldPasswords=1' to your DSN. See also https://github.com/go-sql-driver/mysql/wiki/old_passwords") + ErrCleartextPassword = errors.New("This user requires clear text authentication. If you still want to use it, please add 'allowCleartextPasswords=1' to your DSN.") + ErrUnknownPlugin = errors.New("The authentication plugin is not supported.") + ErrOldProtocol = errors.New("MySQL-Server does not support required Protocol 41+") + ErrPktSync = errors.New("Commands out of sync. You can't run this command now") + ErrPktSyncMul = errors.New("Commands out of sync. Did you run multiple statements at once?") + ErrPktTooLarge = errors.New("Packet for query is too large. You can change this value on the server by adjusting the 'max_allowed_packet' variable.") + ErrBusyBuffer = errors.New("Busy buffer") ) var errLog Logger = log.New(os.Stderr, "[MySQL] ", log.Ldate|log.Ltime|log.Lshortfile) diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/infile.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/infile.go index 121a04c712..84c53a99ce 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/infile.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/infile.go @@ -13,11 +13,14 @@ import ( "io" "os" "strings" + "sync" ) var ( - fileRegister map[string]bool - readerRegister map[string]func() io.Reader + fileRegister map[string]bool + fileRegisterLock sync.RWMutex + readerRegister map[string]func() io.Reader + readerRegisterLock sync.RWMutex ) // RegisterLocalFile adds the given file to the file whitelist, @@ -32,17 +35,21 @@ var ( // ... // func RegisterLocalFile(filePath string) { + fileRegisterLock.Lock() // lazy map init if fileRegister == nil { fileRegister = make(map[string]bool) } fileRegister[strings.Trim(filePath, `"`)] = true + fileRegisterLock.Unlock() } // DeregisterLocalFile removes the given filepath from the whitelist. func DeregisterLocalFile(filePath string) { + fileRegisterLock.Lock() delete(fileRegister, strings.Trim(filePath, `"`)) + fileRegisterLock.Unlock() } // RegisterReaderHandler registers a handler function which is used @@ -61,18 +68,22 @@ func DeregisterLocalFile(filePath string) { // ... // func RegisterReaderHandler(name string, handler func() io.Reader) { + readerRegisterLock.Lock() // lazy map init if readerRegister == nil { readerRegister = make(map[string]func() io.Reader) } readerRegister[name] = handler + readerRegisterLock.Unlock() } // DeregisterReaderHandler removes the ReaderHandler function with // the given name from the registry. func DeregisterReaderHandler(name string) { + readerRegisterLock.Lock() delete(readerRegister, name) + readerRegisterLock.Unlock() } func deferredClose(err *error, closer io.Closer) { @@ -86,9 +97,15 @@ func (mc *mysqlConn) handleInFileRequest(name string) (err error) { var rdr io.Reader var data []byte - if strings.HasPrefix(name, "Reader::") { // io.Reader - name = name[8:] - if handler, inMap := readerRegister[name]; inMap { + if idx := strings.Index(name, "Reader::"); idx == 0 || (idx > 0 && name[idx-1] == '/') { // io.Reader + // The server might return an an absolute path. See issue #355. + name = name[idx+8:] + + readerRegisterLock.RLock() + handler, inMap := readerRegister[name] + readerRegisterLock.RUnlock() + + if inMap { rdr = handler() if rdr != nil { data = make([]byte, 4+mc.maxWriteSize) @@ -104,7 +121,10 @@ func (mc *mysqlConn) handleInFileRequest(name string) (err error) { } } else { // File name = strings.Trim(name, `"`) - if mc.cfg.allowAllFiles || fileRegister[name] { + fileRegisterLock.RLock() + fr := fileRegister[name] + fileRegisterLock.RUnlock() + if mc.cfg.allowAllFiles || fr { var file *os.File var fi os.FileInfo diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/packets.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/packets.go index 290a3887a7..76cb7c84e2 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/packets.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/packets.go @@ -196,7 +196,11 @@ func (mc *mysqlConn) readInitPacket() ([]byte, error) { // return //} //return ErrMalformPkt - return cipher, nil + + // make a memory safe copy of the cipher slice + var b [20]byte + copy(b[:], cipher) + return b[:], nil } // make a memory safe copy of the cipher slice @@ -214,6 +218,7 @@ func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { clientLongPassword | clientTransactions | clientLocalFiles | + clientPluginAuth | mc.flags&clientLongFlag if mc.cfg.clientFoundRows { @@ -228,7 +233,7 @@ func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { // User Password scrambleBuff := scramblePassword(cipher, []byte(mc.cfg.passwd)) - pktLen := 4 + 4 + 1 + 23 + len(mc.cfg.user) + 1 + 1 + len(scrambleBuff) + pktLen := 4 + 4 + 1 + 23 + len(mc.cfg.user) + 1 + 1 + len(scrambleBuff) + 21 + 1 // To specify a db name if n := len(mc.cfg.dbname); n > 0 { @@ -277,7 +282,10 @@ func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { } // Filler [23 bytes] (all 0x00) - pos := 13 + 23 + pos := 13 + for ; pos < 13+23; pos++ { + data[pos] = 0 + } // User [null terminated string] if len(mc.cfg.user) > 0 { @@ -294,8 +302,13 @@ func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { if len(mc.cfg.dbname) > 0 { pos += copy(data[pos:], mc.cfg.dbname) data[pos] = 0x00 + pos++ } + // Assume native client during response + pos += copy(data[pos:], "mysql_native_password") + data[pos] = 0x00 + // Send Auth packet return mc.writePacket(data) } @@ -306,7 +319,7 @@ func (mc *mysqlConn) writeOldAuthPacket(cipher []byte) error { // User password scrambleBuff := scrambleOldPassword(cipher, []byte(mc.cfg.passwd)) - // Calculate the packet lenght and add a tailing 0 + // Calculate the packet length and add a tailing 0 pktLen := len(scrambleBuff) + 1 data := mc.buf.takeSmallBuffer(4 + pktLen) if data == nil { @@ -322,6 +335,25 @@ func (mc *mysqlConn) writeOldAuthPacket(cipher []byte) error { return mc.writePacket(data) } +// Client clear text authentication packet +// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse +func (mc *mysqlConn) writeClearAuthPacket() error { + // Calculate the packet length and add a tailing 0 + pktLen := len(mc.cfg.passwd) + 1 + data := mc.buf.takeSmallBuffer(4 + pktLen) + if data == nil { + // can not take the buffer. Something must be wrong with the connection + errLog.Print(ErrBusyBuffer) + return driver.ErrBadConn + } + + // Add the clear password [null terminated string] + copy(data[4:], mc.cfg.passwd) + data[4+pktLen-1] = 0x00 + + return mc.writePacket(data) +} + /****************************************************************************** * Command Packets * ******************************************************************************/ @@ -405,8 +437,20 @@ func (mc *mysqlConn) readResultOK() error { return mc.handleOkPacket(data) case iEOF: - // someone is using old_passwords - return ErrOldPassword + if len(data) > 1 { + plugin := string(data[1:bytes.IndexByte(data, 0x00)]) + if plugin == "mysql_old_password" { + // using old_passwords + return ErrOldPassword + } else if plugin == "mysql_clear_password" { + // using clear text password + return ErrCleartextPassword + } else { + return ErrUnknownPlugin + } + } else { + return ErrOldPassword + } default: // Error otherwise return mc.handleErrorPacket(data) diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/rows.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/rows.go index 9d97d6d4f1..ba606e1462 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/rows.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/rows.go @@ -40,7 +40,11 @@ func (rows *mysqlRows) Columns() []string { columns := make([]string, len(rows.columns)) if rows.mc.cfg.columnsWithAlias { for i := range columns { - columns[i] = rows.columns[i].tableName + "." + rows.columns[i].name + if tableName := rows.columns[i].tableName; len(tableName) > 0 { + columns[i] = tableName + "." + rows.columns[i].name + } else { + columns[i] = rows.columns[i].name + } } } else { for i := range columns { diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/statement.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/statement.go index f9dae03fab..6e869b3405 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/statement.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/statement.go @@ -12,6 +12,7 @@ import ( "database/sql/driver" "fmt" "reflect" + "strconv" ) type mysqlStmt struct { @@ -119,7 +120,7 @@ func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) { type converter struct{} -func (converter) ConvertValue(v interface{}) (driver.Value, error) { +func (c converter) ConvertValue(v interface{}) (driver.Value, error) { if driver.IsValue(v) { return v, nil } @@ -131,7 +132,7 @@ func (converter) ConvertValue(v interface{}) (driver.Value, error) { if rv.IsNil() { return nil, nil } - return driver.DefaultParameterConverter.ConvertValue(rv.Elem().Interface()) + return c.ConvertValue(rv.Elem().Interface()) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return rv.Int(), nil case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: @@ -139,7 +140,7 @@ func (converter) ConvertValue(v interface{}) (driver.Value, error) { case reflect.Uint64: u64 := rv.Uint() if u64 >= 1<<63 { - return fmt.Sprintf("%d", u64), nil + return strconv.FormatUint(u64, 10), nil } return int64(u64), nil case reflect.Float32, reflect.Float64: diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/utils.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/utils.go index 6693d29709..6a26ad129c 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/utils.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/utils.go @@ -80,8 +80,6 @@ func parseDSN(dsn string) (cfg *config, err error) { collation: defaultCollation, } - // TODO: use strings.IndexByte when we can depend on Go 1.2 - // [user[:password]@][net[(addr)]]/dbname[?param1=value1¶mN=valueN] // Find the last '/' (since the password or the net addr might contain a '/') foundSlash := false @@ -201,6 +199,14 @@ func parseDSNParams(cfg *config, params string) (err error) { return fmt.Errorf("Invalid Bool value: %s", value) } + // Use cleartext authentication mode (MySQL 5.5.10+) + case "allowCleartextPasswords": + var isBool bool + cfg.allowCleartextPasswords, isBool = readBool(value) + if !isBool { + return fmt.Errorf("Invalid Bool value: %s", value) + } + // Use old authentication mode (pre MySQL 4.1) case "allowOldPasswords": var isBool bool @@ -771,6 +777,10 @@ func skipLengthEncodedString(b []byte) (int, error) { // returns the number read, whether the value is NULL and the number of bytes read func readLengthEncodedInteger(b []byte) (uint64, bool, int) { + // See issue #349 + if len(b) == 0 { + return 0, true, 1 + } switch b[0] { // 251: NULL diff --git a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/utils_test.go b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/utils_test.go index adb8dcbd1b..79fbdd1eb3 100644 --- a/Godeps/_workspace/src/github.com/go-sql-driver/mysql/utils_test.go +++ b/Godeps/_workspace/src/github.com/go-sql-driver/mysql/utils_test.go @@ -22,19 +22,19 @@ var testDSNs = []struct { out string loc *time.Location }{ - {"username:password@protocol(address)/dbname?param=value", "&{user:username passwd:password net:protocol addr:address dbname:dbname params:map[param:value] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"username:password@protocol(address)/dbname?param=value&columnsWithAlias=true", "&{user:username passwd:password net:protocol addr:address dbname:dbname params:map[param:value] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:true interpolateParams:false}", time.UTC}, - {"user@unix(/path/to/socket)/dbname?charset=utf8", "&{user:user passwd: net:unix addr:/path/to/socket dbname:dbname params:map[charset:utf8] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"user:password@tcp(localhost:5555)/dbname?charset=utf8&tls=true", "&{user:user passwd:password net:tcp addr:localhost:5555 dbname:dbname params:map[charset:utf8] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"user:password@tcp(localhost:5555)/dbname?charset=utf8mb4,utf8&tls=skip-verify", "&{user:user passwd:password net:tcp addr:localhost:5555 dbname:dbname params:map[charset:utf8mb4,utf8] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"user:password@/dbname?loc=UTC&timeout=30s&allowAllFiles=1&clientFoundRows=true&allowOldPasswords=TRUE&collation=utf8mb4_unicode_ci", "&{user:user passwd:password net:tcp addr:127.0.0.1:3306 dbname:dbname params:map[] loc:%p tls: timeout:30000000000 collation:224 allowAllFiles:true allowOldPasswords:true clientFoundRows:true columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"user:p@ss(word)@tcp([de:ad:be:ef::ca:fe]:80)/dbname?loc=Local", "&{user:user passwd:p@ss(word) net:tcp addr:[de:ad:be:ef::ca:fe]:80 dbname:dbname params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.Local}, - {"/dbname", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname:dbname params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"@/", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"/", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"user:p@/ssword@/", "&{user:user passwd:p@/ssword net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, - {"unix/?arg=%2Fsome%2Fpath.ext", "&{user: passwd: net:unix addr:/tmp/mysql.sock dbname: params:map[arg:/some/path.ext] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"username:password@protocol(address)/dbname?param=value", "&{user:username passwd:password net:protocol addr:address dbname:dbname params:map[param:value] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"username:password@protocol(address)/dbname?param=value&columnsWithAlias=true", "&{user:username passwd:password net:protocol addr:address dbname:dbname params:map[param:value] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:true interpolateParams:false}", time.UTC}, + {"user@unix(/path/to/socket)/dbname?charset=utf8", "&{user:user passwd: net:unix addr:/path/to/socket dbname:dbname params:map[charset:utf8] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"user:password@tcp(localhost:5555)/dbname?charset=utf8&tls=true", "&{user:user passwd:password net:tcp addr:localhost:5555 dbname:dbname params:map[charset:utf8] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"user:password@tcp(localhost:5555)/dbname?charset=utf8mb4,utf8&tls=skip-verify", "&{user:user passwd:password net:tcp addr:localhost:5555 dbname:dbname params:map[charset:utf8mb4,utf8] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"user:password@/dbname?loc=UTC&timeout=30s&allowAllFiles=1&clientFoundRows=true&allowOldPasswords=TRUE&collation=utf8mb4_unicode_ci", "&{user:user passwd:password net:tcp addr:127.0.0.1:3306 dbname:dbname params:map[] loc:%p tls: timeout:30000000000 collation:224 allowAllFiles:true allowOldPasswords:true allowCleartextPasswords:false clientFoundRows:true columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"user:p@ss(word)@tcp([de:ad:be:ef::ca:fe]:80)/dbname?loc=Local", "&{user:user passwd:p@ss(word) net:tcp addr:[de:ad:be:ef::ca:fe]:80 dbname:dbname params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.Local}, + {"/dbname", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname:dbname params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"@/", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"/", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"user:p@/ssword@/", "&{user:user passwd:p@/ssword net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, + {"unix/?arg=%2Fsome%2Fpath.ext", "&{user: passwd: net:unix addr:/tmp/mysql.sock dbname: params:map[arg:/some/path.ext] loc:%p tls: timeout:0 collation:33 allowAllFiles:false allowOldPasswords:false allowCleartextPasswords:false clientFoundRows:false columnsWithAlias:false interpolateParams:false}", time.UTC}, } func TestDSNParser(t *testing.T) { diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/aws/attempt_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/aws/attempt_test.go index 8ba4977158..2f60dca6d8 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/aws/attempt_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/aws/attempt_test.go @@ -3,7 +3,7 @@ package aws_test import ( "time" - "github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" . "gopkg.in/check.v1" ) diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws.go b/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws.go index cec40be7d2..9680072ba2 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws.go @@ -20,7 +20,7 @@ import ( "os" "time" - "github.com/vaughan0/go-ini" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/vaughan0/go-ini" ) // Defines the valid signers @@ -41,25 +41,26 @@ type ServiceInfo struct { // // See http://goo.gl/d8BP1 for more details. type Region struct { - Name string // the canonical name of this region. - EC2Endpoint string - S3Endpoint string - S3BucketEndpoint string // Not needed by AWS S3. Use ${bucket} for bucket name. - S3LocationConstraint bool // true if this region requires a LocationConstraint declaration. - S3LowercaseBucket bool // true if the region requires bucket names to be lower case. - SDBEndpoint string - SESEndpoint string - SNSEndpoint string - SQSEndpoint string - IAMEndpoint string - ELBEndpoint string - DynamoDBEndpoint string - CloudWatchServicepoint ServiceInfo - AutoScalingEndpoint string - RDSEndpoint ServiceInfo - STSEndpoint string - CloudFormationEndpoint string - ECSEndpoint string + Name string // the canonical name of this region. + EC2Endpoint string + S3Endpoint string + S3BucketEndpoint string // Not needed by AWS S3. Use ${bucket} for bucket name. + S3LocationConstraint bool // true if this region requires a LocationConstraint declaration. + S3LowercaseBucket bool // true if the region requires bucket names to be lower case. + SDBEndpoint string + SESEndpoint string + SNSEndpoint string + SQSEndpoint string + IAMEndpoint string + ELBEndpoint string + DynamoDBEndpoint string + CloudWatchServicepoint ServiceInfo + AutoScalingEndpoint string + RDSEndpoint ServiceInfo + STSEndpoint string + CloudFormationEndpoint string + ECSEndpoint string + DynamoDBStreamsEndpoint string } var Regions = map[string]Region{ diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws_test.go index 0c74a79052..80e93dee50 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/aws/aws_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" . "gopkg.in/check.v1" ) diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/aws/client_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/aws/client_test.go index c66a863334..2298f43dd8 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/aws/client_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/aws/client_test.go @@ -2,7 +2,7 @@ package aws_test import ( "fmt" - "github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" "io/ioutil" "net/http" "net/http/httptest" diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/aws/regions.go b/Godeps/_workspace/src/github.com/goamz/goamz/aws/regions.go index 508231e7da..5e18f023d7 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/aws/regions.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/aws/regions.go @@ -20,6 +20,7 @@ var USGovWest = Region{ "https://sts.amazonaws.com", "https://cloudformation.us-gov-west-1.amazonaws.com", "https://ecs.us-gov-west-1.amazonaws.com", + "https://streams.dynamodb.us-gov-west-1.amazonaws.com", } var USEast = Region{ @@ -42,6 +43,7 @@ var USEast = Region{ "https://sts.amazonaws.com", "https://cloudformation.us-east-1.amazonaws.com", "https://ecs.us-east-1.amazonaws.com", + "https://streams.dynamodb.us-east-1.amazonaws.com", } var USWest = Region{ @@ -64,6 +66,7 @@ var USWest = Region{ "https://sts.amazonaws.com", "https://cloudformation.us-west-1.amazonaws.com", "https://ecs.us-west-1.amazonaws.com", + "https://streams.dynamodb.us-west-1.amazonaws.com", } var USWest2 = Region{ @@ -86,6 +89,7 @@ var USWest2 = Region{ "https://sts.amazonaws.com", "https://cloudformation.us-west-2.amazonaws.com", "https://ecs.us-west-2.amazonaws.com", + "https://streams.dynamodb.us-west-2.amazonaws.com", } var EUWest = Region{ @@ -108,6 +112,7 @@ var EUWest = Region{ "https://sts.amazonaws.com", "https://cloudformation.eu-west-1.amazonaws.com", "https://ecs.eu-west-1.amazonaws.com", + "https://streams.dynamodb.eu-west-1.amazonaws.com", } var EUCentral = Region{ @@ -130,6 +135,7 @@ var EUCentral = Region{ "https://sts.amazonaws.com", "https://cloudformation.eu-central-1.amazonaws.com", "https://ecs.eu-central-1.amazonaws.com", + "https://streams.dynamodb.eu-central-1.amazonaws.com", } var APSoutheast = Region{ @@ -152,6 +158,7 @@ var APSoutheast = Region{ "https://sts.amazonaws.com", "https://cloudformation.ap-southeast-1.amazonaws.com", "https://ecs.ap-southeast-1.amazonaws.com", + "https://streams.dynamodb.ap-southeast-1.amazonaws.com", } var APSoutheast2 = Region{ @@ -174,6 +181,7 @@ var APSoutheast2 = Region{ "https://sts.amazonaws.com", "https://cloudformation.ap-southeast-2.amazonaws.com", "https://ecs.ap-southeast-2.amazonaws.com", + "https://streams.dynamodb.ap-southeast-2.amazonaws.com", } var APNortheast = Region{ @@ -196,6 +204,7 @@ var APNortheast = Region{ "https://sts.amazonaws.com", "https://cloudformation.ap-northeast-1.amazonaws.com", "https://ecs.ap-northeast-1.amazonaws.com", + "https://streams.dynamodb.ap-northeast-1.amazonaws.com", } var SAEast = Region{ @@ -218,6 +227,7 @@ var SAEast = Region{ "https://sts.amazonaws.com", "https://cloudformation.sa-east-1.amazonaws.com", "https://ecs.sa-east-1.amazonaws.com", + "https://streams.dynamodb.sa-east-1.amazonaws.com", } var CNNorth = Region{ @@ -240,4 +250,5 @@ var CNNorth = Region{ "https://sts.cn-north-1.amazonaws.com.cn", "https://cloudformation.cn-north-1.amazonaws.com.cn", "https://ecs.cn-north-1.amazonaws.com.cn", + "https://streams.dynamodb.cn-north-1.amazonaws.com.cn", } diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/aws/sign_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/aws/sign_test.go index c6b685e20b..aa1bbede10 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/aws/sign_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/aws/sign_test.go @@ -6,7 +6,7 @@ import ( "strings" "time" - "github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" . "gopkg.in/check.v1" ) diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/export_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/export_test.go index 4ff913cde0..dc468e5109 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/export_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/export_test.go @@ -1,7 +1,7 @@ package s3 import ( - "github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" ) func Sign(auth aws.Auth, method, path string, params, headers map[string][]string) { diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi.go index 1533bda9d3..348ead300a 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi.go @@ -339,9 +339,23 @@ func (p completeParts) Len() int { return len(p) } func (p completeParts) Less(i, j int) bool { return p[i].PartNumber < p[j].PartNumber } func (p completeParts) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +type completeResponse struct { + // The element name: should be either CompleteMultipartUploadResult or Error. + XMLName xml.Name + // If the element was error, then it should have the following: + Code string + Message string + RequestId string + HostId string +} + // Complete assembles the given previously uploaded parts into the // final object. This operation may take several minutes. // +// The complete call to AMZ may still fail after returning HTTP 200, +// so even though it's unusued, the body of the reply must be demarshalled +// and checked to see whether or not the complete succeeded. +// // See http://goo.gl/2Z7Tw for details. func (m *Multi) Complete(parts []Part) error { params := map[string][]string{ @@ -356,6 +370,8 @@ func (m *Multi) Complete(parts []Part) error { if err != nil { return err } + + // Setting Content-Length prevents breakage on DreamObjects for attempt := m.Bucket.S3.AttemptStrategy.Start(); attempt.Next(); { req := &request{ method: "POST", @@ -363,11 +379,25 @@ func (m *Multi) Complete(parts []Part) error { path: m.Key, params: params, payload: bytes.NewReader(data), + headers: map[string][]string{ + "Content-Length": []string{strconv.Itoa(len(data))}, + }, } - err := m.Bucket.S3.query(req, nil) + + resp := &completeResponse{} + err := m.Bucket.S3.query(req, resp) if shouldRetry(err) && attempt.HasNext() { continue } + if err == nil && resp.XMLName.Local == "Error" { + err = &Error{ + StatusCode: 200, + Code: resp.Code, + Message: resp.Message, + RequestId: resp.RequestId, + HostId: resp.HostId, + } + } return err } panic("unreachable") diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi_test.go index efab302d6a..8813276d7a 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/multi_test.go @@ -6,7 +6,7 @@ import ( "io/ioutil" "strings" - "github.com/goamz/goamz/s3" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/s3" . "gopkg.in/check.v1" ) @@ -300,7 +300,9 @@ func (s *S) TestMultiComplete(c *C) { c.Assert(err, IsNil) err = multi.Complete([]s3.Part{{2, `"ETag2"`, 32}, {1, `"ETag1"`, 64}}) - c.Assert(err, IsNil) + // returns InternalErrorDump in the payload, which should manifest as + // an error. + c.Assert(err, NotNil) testServer.WaitRequest() req := testServer.WaitRequest() diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3.go index 88ef975d1c..9b135f3ce5 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3.go @@ -18,7 +18,7 @@ import ( "encoding/base64" "encoding/xml" "fmt" - "github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" "io" "io/ioutil" "log" @@ -1101,10 +1101,14 @@ func shouldRetry(err error) bool { } case *Error: switch e.Code { - case "InternalError", "NoSuchUpload", "NoSuchBucket": + case "InternalError", "NoSuchUpload", "NoSuchBucket", "RequestTimeout": return true } + // let's handle tls handshake timeout issues and similar temporary errors + case net.Error: + return e.Temporary() } + return false } diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3_test.go index 24d4dfcc0b..8073442589 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3_test.go @@ -7,9 +7,9 @@ import ( "testing" "time" - "github.com/goamz/goamz/aws" - "github.com/goamz/goamz/s3" "github.com/goamz/goamz/testutil" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/s3" . "gopkg.in/check.v1" ) diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3i_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3i_test.go index 1b898efc46..01344256a2 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3i_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3i_test.go @@ -11,9 +11,9 @@ import ( "strings" "time" - "github.com/goamz/goamz/aws" - "github.com/goamz/goamz/s3" "github.com/goamz/goamz/testutil" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/s3" . "gopkg.in/check.v1" ) diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3t_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3t_test.go index e98c50b293..e9e216f00e 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3t_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3t_test.go @@ -1,9 +1,9 @@ package s3_test import ( - "github.com/goamz/goamz/aws" - "github.com/goamz/goamz/s3" - "github.com/goamz/goamz/s3/s3test" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/s3" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3test" . "gopkg.in/check.v1" ) diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3test/server.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3test/server.go index 10d36924f4..6a1866167d 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3test/server.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/s3test/server.go @@ -7,7 +7,7 @@ import ( "encoding/hex" "encoding/xml" "fmt" - "github.com/goamz/goamz/s3" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/s3" "io" "io/ioutil" "log" @@ -594,6 +594,10 @@ func (objr objectResource) put(a *action) interface{} { obj.checksum = gotHash obj.mtime = time.Now() objr.bucket.objects[objr.name] = obj + + h := a.w.Header() + h.Set("ETag", fmt.Sprintf(`"%s"`, hex.EncodeToString(obj.checksum))) + return nil } diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign.go index c8e57a2f70..715f2d8d38 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign.go @@ -4,7 +4,7 @@ import ( "crypto/hmac" "crypto/sha1" "encoding/base64" - "github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" "log" "sort" "strings" @@ -39,10 +39,37 @@ var s3ParamsToSign = map[string]bool{ "delete": true, } +type keySortableTupleList []keySortableTuple + +type keySortableTuple struct { + Key string + TupleString string +} + +func (l keySortableTupleList) StringSlice() []string { + slice := make([]string, len(l)) + for i, v := range l { + slice[i] = v.TupleString + } + return slice +} + +func (l keySortableTupleList) Len() int { + return len(l) +} + +func (l keySortableTupleList) Less(i, j int) bool { + return l[i].Key < l[j].Key +} + +func (l keySortableTupleList) Swap(i, j int) { + l[i], l[j] = l[j], l[i] +} + func sign(auth aws.Auth, method, canonicalPath string, params, headers map[string][]string) { var md5, ctype, date, xamz string var xamzDate bool - var sarray []string + var sarray keySortableTupleList for k, v := range headers { k = strings.ToLower(k) switch k { @@ -57,7 +84,7 @@ func sign(auth aws.Auth, method, canonicalPath string, params, headers map[strin default: if strings.HasPrefix(k, "x-amz-") { vall := strings.Join(v, ",") - sarray = append(sarray, k+":"+vall) + sarray = append(sarray, keySortableTuple{k, k + ":" + vall}) if k == "x-amz-date" { xamzDate = true date = "" @@ -66,8 +93,8 @@ func sign(auth aws.Auth, method, canonicalPath string, params, headers map[strin } } if len(sarray) > 0 { - sort.StringSlice(sarray).Sort() - xamz = strings.Join(sarray, "\n") + "\n" + sort.Sort(sarray) + xamz = strings.Join(sarray.StringSlice(), "\n") + "\n" } expires := false @@ -83,17 +110,17 @@ func sign(auth aws.Auth, method, canonicalPath string, params, headers map[strin if s3ParamsToSign[k] { for _, vi := range v { if vi == "" { - sarray = append(sarray, k) + sarray = append(sarray, keySortableTuple{k, k}) } else { // "When signing you do not encode these values." - sarray = append(sarray, k+"="+vi) + sarray = append(sarray, keySortableTuple{k, k + "=" + vi}) } } } } if len(sarray) > 0 { - sort.StringSlice(sarray).Sort() - canonicalPath = canonicalPath + "?" + strings.Join(sarray, "&") + sort.Sort(sarray) + canonicalPath = canonicalPath + "?" + strings.Join(sarray.StringSlice(), "&") } payload := method + "\n" + md5 + "\n" + ctype + "\n" + date + "\n" + xamz + canonicalPath diff --git a/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign_test.go b/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign_test.go index 112e1ca3ee..32c478ed72 100644 --- a/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign_test.go +++ b/Godeps/_workspace/src/github.com/goamz/goamz/s3/sign_test.go @@ -1,8 +1,8 @@ package s3_test import ( - "github.com/goamz/goamz/aws" - "github.com/goamz/goamz/s3" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/aws" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/goamz/goamz/s3" . "gopkg.in/check.v1" ) diff --git a/Godeps/_workspace/src/github.com/golang/freetype/AUTHORS b/Godeps/_workspace/src/github.com/golang/freetype/AUTHORS index 5d8b8a6b70..7b70f7768f 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/AUTHORS +++ b/Godeps/_workspace/src/github.com/golang/freetype/AUTHORS @@ -15,3 +15,4 @@ Google Inc. Jeff R. Allen Rémy Oudompheng Roger Peppe +Steven Edwards diff --git a/Godeps/_workspace/src/github.com/golang/freetype/CONTRIBUTORS b/Godeps/_workspace/src/github.com/golang/freetype/CONTRIBUTORS index 32cb6753b7..7494b12c36 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/CONTRIBUTORS +++ b/Godeps/_workspace/src/github.com/golang/freetype/CONTRIBUTORS @@ -33,3 +33,4 @@ Rémy Oudompheng Rob Pike Roger Peppe Russ Cox +Steven Edwards diff --git a/Godeps/_workspace/src/github.com/golang/freetype/example/drawer/main.go b/Godeps/_workspace/src/github.com/golang/freetype/example/drawer/main.go index 4af981f9fa..0f57d17671 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/example/drawer/main.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/example/drawer/main.go @@ -23,9 +23,9 @@ import ( "math" "os" - "github.com/golang/freetype/truetype" - "golang.org/x/image/font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/freetype/truetype" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) var ( diff --git a/Godeps/_workspace/src/github.com/golang/freetype/example/freetype/main.go b/Godeps/_workspace/src/github.com/golang/freetype/example/freetype/main.go index 21657a381f..50cf246ec0 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/example/freetype/main.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/example/freetype/main.go @@ -22,8 +22,8 @@ import ( "log" "os" - "github.com/golang/freetype" - "golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/freetype" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" ) var ( diff --git a/Godeps/_workspace/src/github.com/golang/freetype/example/gamma/main.go b/Godeps/_workspace/src/github.com/golang/freetype/example/gamma/main.go index 778697f4f0..81f476e891 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/example/gamma/main.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/example/gamma/main.go @@ -19,8 +19,8 @@ import ( "log" "os" - "github.com/golang/freetype/raster" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/freetype/raster" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) func p(x, y int) fixed.Point26_6 { diff --git a/Godeps/_workspace/src/github.com/golang/freetype/example/raster/main.go b/Godeps/_workspace/src/github.com/golang/freetype/example/raster/main.go index ae9c57f973..ca3cddfdce 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/example/raster/main.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/example/raster/main.go @@ -20,8 +20,8 @@ import ( "log" "os" - "github.com/golang/freetype/raster" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/freetype/raster" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) type node struct { diff --git a/Godeps/_workspace/src/github.com/golang/freetype/example/round/main.go b/Godeps/_workspace/src/github.com/golang/freetype/example/round/main.go index 6c3012e625..b849f614f0 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/example/round/main.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/example/round/main.go @@ -26,8 +26,8 @@ import ( "math" "os" - "github.com/golang/freetype/raster" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/freetype/raster" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // pDot returns the dot product p·q. diff --git a/Godeps/_workspace/src/github.com/golang/freetype/example/truetype/main.go b/Godeps/_workspace/src/github.com/golang/freetype/example/truetype/main.go index 5fc72f7711..e6b4d28ebf 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/example/truetype/main.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/example/truetype/main.go @@ -16,9 +16,9 @@ import ( "io/ioutil" "log" - "github.com/golang/freetype/truetype" - "golang.org/x/image/font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/freetype/truetype" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) var fontfile = flag.String("fontfile", "../../testdata/luxisr.ttf", "filename of the ttf font") diff --git a/Godeps/_workspace/src/github.com/golang/freetype/freetype.go b/Godeps/_workspace/src/github.com/golang/freetype/freetype.go index bec01f6b7d..27d1c51626 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/freetype.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/freetype.go @@ -13,10 +13,10 @@ import ( "image" "image/draw" - "github.com/golang/freetype/raster" - "github.com/golang/freetype/truetype" - "golang.org/x/image/font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/freetype/raster" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/freetype/truetype" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // These constants determine the size of the glyph cache. The cache is keyed diff --git a/Godeps/_workspace/src/github.com/golang/freetype/raster/geom.go b/Godeps/_workspace/src/github.com/golang/freetype/raster/geom.go index f3696ea983..1a2b8a77b5 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/raster/geom.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/raster/geom.go @@ -9,7 +9,7 @@ import ( "fmt" "math" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // maxAbs returns the maximum of abs(a) and abs(b). diff --git a/Godeps/_workspace/src/github.com/golang/freetype/raster/raster.go b/Godeps/_workspace/src/github.com/golang/freetype/raster/raster.go index 995925e2ab..859bee6571 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/raster/raster.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/raster/raster.go @@ -18,7 +18,7 @@ package raster import ( "strconv" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // A cell is part of a linked list (for a given yi co-ordinate) of accumulated diff --git a/Godeps/_workspace/src/github.com/golang/freetype/raster/stroke.go b/Godeps/_workspace/src/github.com/golang/freetype/raster/stroke.go index 8d43797573..fa9ba640b1 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/raster/stroke.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/raster/stroke.go @@ -6,7 +6,7 @@ package raster import ( - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // Two points are considered practically equal if the square of the distance diff --git a/Godeps/_workspace/src/github.com/golang/freetype/truetype/face.go b/Godeps/_workspace/src/github.com/golang/freetype/truetype/face.go index d64a014c39..e800cd1bd9 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/truetype/face.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/truetype/face.go @@ -8,9 +8,9 @@ package truetype import ( "image" - "github.com/golang/freetype/raster" - "golang.org/x/image/font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/freetype/raster" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) func powerOf2(i int) bool { diff --git a/Godeps/_workspace/src/github.com/golang/freetype/truetype/face_test.go b/Godeps/_workspace/src/github.com/golang/freetype/truetype/face_test.go index 856581dff4..6833e18bf2 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/truetype/face_test.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/truetype/face_test.go @@ -12,8 +12,8 @@ import ( "strings" "testing" - "golang.org/x/image/font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) func BenchmarkDrawString(b *testing.B) { diff --git a/Godeps/_workspace/src/github.com/golang/freetype/truetype/glyph.go b/Godeps/_workspace/src/github.com/golang/freetype/truetype/glyph.go index c2935a58eb..eca2623d1e 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/truetype/glyph.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/truetype/glyph.go @@ -6,8 +6,8 @@ package truetype import ( - "golang.org/x/image/font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // TODO: implement VerticalHinting. diff --git a/Godeps/_workspace/src/github.com/golang/freetype/truetype/hint.go b/Godeps/_workspace/src/github.com/golang/freetype/truetype/hint.go index 0315de511c..e4eaf9294d 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/truetype/hint.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/truetype/hint.go @@ -12,7 +12,7 @@ import ( "errors" "math" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) const ( diff --git a/Godeps/_workspace/src/github.com/golang/freetype/truetype/hint_test.go b/Godeps/_workspace/src/github.com/golang/freetype/truetype/hint_test.go index 7eb43dde07..d218bb0f6c 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/truetype/hint_test.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/truetype/hint_test.go @@ -10,7 +10,7 @@ import ( "strings" "testing" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) func TestBytecode(t *testing.T) { diff --git a/Godeps/_workspace/src/github.com/golang/freetype/truetype/truetype.go b/Godeps/_workspace/src/github.com/golang/freetype/truetype/truetype.go index 7d166ca77a..c69194d331 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/truetype/truetype.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/truetype/truetype.go @@ -20,12 +20,49 @@ package truetype import ( "fmt" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // An Index is a Font's index of a rune. type Index uint16 +// A NameID identifies a name table entry. +// +// See https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html +type NameID uint16 + +const ( + NameIDCopyright NameID = 0 + NameIDFontFamily = 1 + NameIDFontSubfamily = 2 + NameIDUniqueSubfamilyID = 3 + NameIDFontFullName = 4 + NameIDNameTableVersion = 5 + NameIDPostscriptName = 6 + NameIDTrademarkNotice = 7 + NameIDManufacturerName = 8 + NameIDDesignerName = 9 + NameIDFontDescription = 10 + NameIDFontVendorURL = 11 + NameIDFontDesignerURL = 12 + NameIDFontLicense = 13 + NameIDFontLicenseURL = 14 + NameIDPreferredFamily = 16 + NameIDPreferredSubfamily = 17 + NameIDCompatibleName = 18 + NameIDSampleText = 19 +) + +const ( + // A 32-bit encoding consists of a most-significant 16-bit Platform ID and a + // least-significant 16-bit Platform Specific ID. The magic numbers are + // specified at https://www.microsoft.com/typography/otspec/name.htm + unicodeEncoding = 0x00000003 // PID = 0 (Unicode), PSID = 3 (Unicode 2.0) + microsoftSymbolEncoding = 0x00030000 // PID = 3 (Microsoft), PSID = 0 (Symbol) + microsoftUCS2Encoding = 0x00030001 // PID = 3 (Microsoft), PSID = 1 (UCS-2) + microsoftUCS4Encoding = 0x0003000a // PID = 3 (Microsoft), PSID = 10 (UCS-4) +) + // An HMetric holds the horizontal metrics of a single glyph. type HMetric struct { AdvanceWidth, LeftSideBearing fixed.Int26_6 @@ -78,6 +115,51 @@ func readTable(ttf []byte, offsetLength []byte) ([]byte, error) { return ttf[offset:end], nil } +// parseSubtables returns the offset and platformID of the best subtable in +// table, where best favors a Unicode cmap encoding, and failing that, a +// Microsoft cmap encoding. offset is the offset of the first subtable in +// table, and size is the size of each subtable. +// +// If pred is non-nil, then only subtables that satisfy that predicate will be +// considered. +func parseSubtables(table []byte, name string, offset, size int, pred func([]byte) bool) ( + bestOffset int, bestPID uint32, retErr error) { + + if len(table) < 4 { + return 0, 0, FormatError(name + " too short") + } + nSubtables := int(u16(table, 2)) + if len(table) < size*nSubtables+offset { + return 0, 0, FormatError(name + " too short") + } + ok := false + for i := 0; i < nSubtables; i, offset = i+1, offset+size { + if pred != nil && !pred(table[offset:]) { + continue + } + // We read the 16-bit Platform ID and 16-bit Platform Specific ID as a single uint32. + // All values are big-endian. + pidPsid := u32(table, offset) + // We prefer the Unicode cmap encoding. Failing to find that, we fall + // back onto the Microsoft cmap encoding. + if pidPsid == unicodeEncoding { + bestOffset, bestPID, ok = offset, pidPsid>>16, true + break + + } else if pidPsid == microsoftSymbolEncoding || + pidPsid == microsoftUCS2Encoding || + pidPsid == microsoftUCS4Encoding { + + bestOffset, bestPID, ok = offset, pidPsid>>16, true + // We don't break out of the for loop, so that Unicode can override Microsoft. + } + } + if !ok { + return 0, 0, UnsupportedError(name + " encoding") + } + return bestOffset, bestPID, nil +} + const ( locaOffsetFormatUnknown int = iota locaOffsetFormatShort @@ -93,7 +175,7 @@ type cm struct { type Font struct { // Tables sliced from the TTF data. The different tables are documented // at http://developer.apple.com/fonts/TTRefMan/RM06/Chap6.html - cmap, cvt, fpgm, glyf, hdmx, head, hhea, hmtx, kern, loca, maxp, os2, prep, vmtx []byte + cmap, cvt, fpgm, glyf, hdmx, head, hhea, hmtx, kern, loca, maxp, name, os2, prep, vmtx []byte cmapIndexes []byte @@ -112,46 +194,13 @@ func (f *Font) parseCmap() error { cmapFormat4 = 4 cmapFormat12 = 12 languageIndependent = 0 - - // A 32-bit encoding consists of a most-significant 16-bit Platform ID and a - // least-significant 16-bit Platform Specific ID. The magic numbers are - // specified at https://www.microsoft.com/typography/otspec/name.htm - unicodeEncoding = 0x00000003 // PID = 0 (Unicode), PSID = 3 (Unicode 2.0) - microsoftSymbolEncoding = 0x00030000 // PID = 3 (Microsoft), PSID = 0 (Symbol) - microsoftUCS2Encoding = 0x00030001 // PID = 3 (Microsoft), PSID = 1 (UCS-2) - microsoftUCS4Encoding = 0x0003000a // PID = 3 (Microsoft), PSID = 10 (UCS-4) ) - if len(f.cmap) < 4 { - return FormatError("cmap too short") - } - nsubtab := int(u16(f.cmap, 2)) - if len(f.cmap) < 8*nsubtab+4 { - return FormatError("cmap too short") - } - offset, found, x := 0, false, 4 - for i := 0; i < nsubtab; i++ { - // We read the 16-bit Platform ID and 16-bit Platform Specific ID as a single uint32. - // All values are big-endian. - pidPsid, o := u32(f.cmap, x), u32(f.cmap, x+4) - x += 8 - // We prefer the Unicode cmap encoding. Failing to find that, we fall - // back onto the Microsoft cmap encoding. - if pidPsid == unicodeEncoding { - offset, found = int(o), true - break - - } else if pidPsid == microsoftSymbolEncoding || - pidPsid == microsoftUCS2Encoding || - pidPsid == microsoftUCS4Encoding { - - offset, found = int(o), true - // We don't break out of the for loop, so that Unicode can override Microsoft. - } - } - if !found { - return UnsupportedError("cmap encoding") + offset, _, err := parseSubtables(f.cmap, "cmap", 4, 8, nil) + if err != nil { + return err } + offset = int(u32(f.cmap, offset+4)) if offset <= 0 || offset > len(f.cmap) { return FormatError("bad cmap offset") } @@ -345,6 +394,44 @@ func (f *Font) Index(x rune) Index { return 0 } +// Name returns the Font's name value for the given NameID. It returns "" if +// there was an error, or if that name was not found. +func (f *Font) Name(id NameID) string { + x, platformID, err := parseSubtables(f.name, "name", 6, 12, func(b []byte) bool { + return NameID(u16(b, 6)) == id + }) + if err != nil { + return "" + } + offset, length := u16(f.name, 4)+u16(f.name, x+10), u16(f.name, x+8) + // Return the ASCII value of the encoded string. + // The string is encoded as UTF-16 on non-Apple platformIDs; Apple is platformID 1. + src := f.name[offset : offset+length] + var dst []byte + if platformID != 1 { // UTF-16. + if len(src)&1 != 0 { + return "" + } + dst = make([]byte, len(src)/2) + for i := range dst { + dst[i] = printable(u16(src, 2*i)) + } + } else { // ASCII. + dst = make([]byte, len(src)) + for i, c := range src { + dst[i] = printable(uint16(c)) + } + } + return string(dst) +} + +func printable(r uint16) byte { + if 0x20 <= r && r < 0x7f { + return byte(r) + } + return '?' +} + // unscaledHMetric returns the unscaled horizontal metrics for the glyph with // the given index. func (f *Font) unscaledHMetric(i Index) (h HMetric) { @@ -518,6 +605,8 @@ func parse(ttf []byte, offset int) (font *Font, err error) { f.loca, err = readTable(ttf, ttf[x+8:x+16]) case "maxp": f.maxp, err = readTable(ttf, ttf[x+8:x+16]) + case "name": + f.name, err = readTable(ttf, ttf[x+8:x+16]) case "OS/2": f.os2, err = readTable(ttf, ttf[x+8:x+16]) case "prep": diff --git a/Godeps/_workspace/src/github.com/golang/freetype/truetype/truetype_test.go b/Godeps/_workspace/src/github.com/golang/freetype/truetype/truetype_test.go index ce7f1277a9..2382ab1126 100644 --- a/Godeps/_workspace/src/github.com/golang/freetype/truetype/truetype_test.go +++ b/Godeps/_workspace/src/github.com/golang/freetype/truetype/truetype_test.go @@ -15,8 +15,8 @@ import ( "strings" "testing" - "golang.org/x/image/font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) func parseTestdataFont(name string) (f *Font, testdataIsOptional bool, err error) { @@ -211,6 +211,29 @@ func TestIndex(t *testing.T) { } } +func TestName(t *testing.T) { + testCases := map[string]string{ + "luximr": "Luxi Mono", + "luxirr": "Luxi Serif", + "luxisr": "Luxi Sans", + } + + for name, want := range testCases { + f, testdataIsOptional, err := parseTestdataFont(name) + if err != nil { + if testdataIsOptional { + t.Log(err) + } else { + t.Fatal(err) + } + continue + } + if got := f.Name(NameIDFontFamily); got != want { + t.Errorf("%s: got %q, want %q", name, got, want) + } + } +} + type scalingTestData struct { advanceWidth fixed.Int26_6 bounds fixed.Rectangle26_6 diff --git a/Godeps/_workspace/src/github.com/gorilla/context/.travis.yml b/Godeps/_workspace/src/github.com/gorilla/context/.travis.yml index 6796581fbd..f983b60c62 100644 --- a/Godeps/_workspace/src/github.com/gorilla/context/.travis.yml +++ b/Godeps/_workspace/src/github.com/gorilla/context/.travis.yml @@ -1,9 +1,8 @@ language: go +sudo: false go: - - 1.0 - - 1.1 - - 1.2 - 1.3 - 1.4 + - 1.5 - tip diff --git a/Godeps/_workspace/src/github.com/gorilla/mux/.travis.yml b/Godeps/_workspace/src/github.com/gorilla/mux/.travis.yml index d87d465768..83ab8f59dd 100644 --- a/Godeps/_workspace/src/github.com/gorilla/mux/.travis.yml +++ b/Godeps/_workspace/src/github.com/gorilla/mux/.travis.yml @@ -1,7 +1,14 @@ language: go - +sudo: false go: - - 1.0 - - 1.1 - - 1.2 + - 1.3 + - 1.4 + - 1.5 - tip +install: + - go get golang.org/x/tools/cmd/vet +script: + - go get -t -v ./... + - diff -u <(echo -n) <(gofmt -d -s .) + - go tool vet . + - go test -v -race ./... diff --git a/Godeps/_workspace/src/github.com/gorilla/mux/README.md b/Godeps/_workspace/src/github.com/gorilla/mux/README.md index e60301b033..55dd4e59a5 100644 --- a/Godeps/_workspace/src/github.com/gorilla/mux/README.md +++ b/Godeps/_workspace/src/github.com/gorilla/mux/README.md @@ -1,7 +1,235 @@ mux === +[![GoDoc](https://godoc.org/github.com/gorilla/mux?status.svg)](https://godoc.org/github.com/gorilla/mux) [![Build Status](https://travis-ci.org/gorilla/mux.png?branch=master)](https://travis-ci.org/gorilla/mux) -gorilla/mux is a powerful URL router and dispatcher. +Package gorilla/mux implements a request router and dispatcher. -Read the full documentation here: http://www.gorillatoolkit.org/pkg/mux +The name mux stands for "HTTP request multiplexer". Like the standard +http.ServeMux, mux.Router matches incoming requests against a list of +registered routes and calls a handler for the route that matches the URL +or other conditions. The main features are: + + * Requests can be matched based on URL host, path, path prefix, schemes, + header and query values, HTTP methods or using custom matchers. + * URL hosts and paths can have variables with an optional regular + expression. + * Registered URLs can be built, or "reversed", which helps maintaining + references to resources. + * Routes can be used as subrouters: nested routes are only tested if the + parent route matches. This is useful to define groups of routes that + share common conditions like a host, a path prefix or other repeated + attributes. As a bonus, this optimizes request matching. + * It implements the http.Handler interface so it is compatible with the + standard http.ServeMux. + +Let's start registering a couple of URL paths and handlers: + + func main() { + r := mux.NewRouter() + r.HandleFunc("/", HomeHandler) + r.HandleFunc("/products", ProductsHandler) + r.HandleFunc("/articles", ArticlesHandler) + http.Handle("/", r) + } + +Here we register three routes mapping URL paths to handlers. This is +equivalent to how http.HandleFunc() works: if an incoming request URL matches +one of the paths, the corresponding handler is called passing +(http.ResponseWriter, *http.Request) as parameters. + +Paths can have variables. They are defined using the format {name} or +{name:pattern}. If a regular expression pattern is not defined, the matched +variable will be anything until the next slash. For example: + + r := mux.NewRouter() + r.HandleFunc("/products/{key}", ProductHandler) + r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler) + r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler) + +The names are used to create a map of route variables which can be retrieved +calling mux.Vars(): + + vars := mux.Vars(request) + category := vars["category"] + +And this is all you need to know about the basic usage. More advanced options +are explained below. + +Routes can also be restricted to a domain or subdomain. Just define a host +pattern to be matched. They can also have variables: + + r := mux.NewRouter() + // Only matches if domain is "www.example.com". + r.Host("www.example.com") + // Matches a dynamic subdomain. + r.Host("{subdomain:[a-z]+}.domain.com") + +There are several other matchers that can be added. To match path prefixes: + + r.PathPrefix("/products/") + +...or HTTP methods: + + r.Methods("GET", "POST") + +...or URL schemes: + + r.Schemes("https") + +...or header values: + + r.Headers("X-Requested-With", "XMLHttpRequest") + +...or query values: + + r.Queries("key", "value") + +...or to use a custom matcher function: + + r.MatcherFunc(func(r *http.Request, rm *RouteMatch) bool { + return r.ProtoMajor == 0 + }) + +...and finally, it is possible to combine several matchers in a single route: + + r.HandleFunc("/products", ProductsHandler). + Host("www.example.com"). + Methods("GET"). + Schemes("http") + +Setting the same matching conditions again and again can be boring, so we have +a way to group several routes that share the same requirements. +We call it "subrouting". + +For example, let's say we have several URLs that should only match when the +host is `www.example.com`. Create a route for that host and get a "subrouter" +from it: + + r := mux.NewRouter() + s := r.Host("www.example.com").Subrouter() + +Then register routes in the subrouter: + + s.HandleFunc("/products/", ProductsHandler) + s.HandleFunc("/products/{key}", ProductHandler) + s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) + +The three URL paths we registered above will only be tested if the domain is +`www.example.com`, because the subrouter is tested first. This is not +only convenient, but also optimizes request matching. You can create +subrouters combining any attribute matchers accepted by a route. + +Subrouters can be used to create domain or path "namespaces": you define +subrouters in a central place and then parts of the app can register its +paths relatively to a given subrouter. + +There's one more thing about subroutes. When a subrouter has a path prefix, +the inner routes use it as base for their paths: + + r := mux.NewRouter() + s := r.PathPrefix("/products").Subrouter() + // "/products/" + s.HandleFunc("/", ProductsHandler) + // "/products/{key}/" + s.HandleFunc("/{key}/", ProductHandler) + // "/products/{key}/details" + s.HandleFunc("/{key}/details", ProductDetailsHandler) + +Now let's see how to build registered URLs. + +Routes can be named. All routes that define a name can have their URLs built, +or "reversed". We define a name calling Name() on a route. For example: + + r := mux.NewRouter() + r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler). + Name("article") + +To build a URL, get the route and call the URL() method, passing a sequence of +key/value pairs for the route variables. For the previous route, we would do: + + url, err := r.Get("article").URL("category", "technology", "id", "42") + +...and the result will be a url.URL with the following path: + + "/articles/technology/42" + +This also works for host variables: + + r := mux.NewRouter() + r.Host("{subdomain}.domain.com"). + Path("/articles/{category}/{id:[0-9]+}"). + HandlerFunc(ArticleHandler). + Name("article") + + // url.String() will be "http://news.domain.com/articles/technology/42" + url, err := r.Get("article").URL("subdomain", "news", + "category", "technology", + "id", "42") + +All variables defined in the route are required, and their values must +conform to the corresponding patterns. These requirements guarantee that a +generated URL will always match a registered route -- the only exception is +for explicitly defined "build-only" routes which never match. + +Regex support also exists for matching Headers within a route. For example, we could do: + + r.HeadersRegexp("Content-Type", "application/(text|json)") + +...and the route will match both requests with a Content-Type of `application/json` as well as +`application/text` + +There's also a way to build only the URL host or path for a route: +use the methods URLHost() or URLPath() instead. For the previous route, +we would do: + + // "http://news.domain.com/" + host, err := r.Get("article").URLHost("subdomain", "news") + + // "/articles/technology/42" + path, err := r.Get("article").URLPath("category", "technology", "id", "42") + +And if you use subrouters, host and path defined separately can be built +as well: + + r := mux.NewRouter() + s := r.Host("{subdomain}.domain.com").Subrouter() + s.Path("/articles/{category}/{id:[0-9]+}"). + HandlerFunc(ArticleHandler). + Name("article") + + // "http://news.domain.com/articles/technology/42" + url, err := r.Get("article").URL("subdomain", "news", + "category", "technology", + "id", "42") + +## Full Example + +Here's a complete, runnable example of a small mux based server: + +```go +package main + +import ( + "net/http" + + "github.com/gorilla/mux" +) + +func YourHandler(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("Gorilla!\n")) +} + +func main() { + r := mux.NewRouter() + // Routes consist of a path and a handler function. + r.HandleFunc("/", YourHandler) + + // Bind to a port and pass our router in + http.ListenAndServe(":8000", r) +} +``` + +## License + +BSD licensed. See the LICENSE file for details. diff --git a/Godeps/_workspace/src/github.com/gorilla/mux/doc.go b/Godeps/_workspace/src/github.com/gorilla/mux/doc.go index 9a5e381a22..49798cb5cf 100644 --- a/Godeps/_workspace/src/github.com/gorilla/mux/doc.go +++ b/Godeps/_workspace/src/github.com/gorilla/mux/doc.go @@ -60,8 +60,8 @@ Routes can also be restricted to a domain or subdomain. Just define a host pattern to be matched. They can also have variables: r := mux.NewRouter() - // Only matches if domain is "www.domain.com". - r.Host("www.domain.com") + // Only matches if domain is "www.example.com". + r.Host("www.example.com") // Matches a dynamic subdomain. r.Host("{subdomain:[a-z]+}.domain.com") @@ -94,7 +94,7 @@ There are several other matchers that can be added. To match path prefixes: ...and finally, it is possible to combine several matchers in a single route: r.HandleFunc("/products", ProductsHandler). - Host("www.domain.com"). + Host("www.example.com"). Methods("GET"). Schemes("http") @@ -103,11 +103,11 @@ a way to group several routes that share the same requirements. We call it "subrouting". For example, let's say we have several URLs that should only match when the -host is "www.domain.com". Create a route for that host and get a "subrouter" +host is "www.example.com". Create a route for that host and get a "subrouter" from it: r := mux.NewRouter() - s := r.Host("www.domain.com").Subrouter() + s := r.Host("www.example.com").Subrouter() Then register routes in the subrouter: @@ -116,7 +116,7 @@ Then register routes in the subrouter: s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) The three URL paths we registered above will only be tested if the domain is -"www.domain.com", because the subrouter is tested first. This is not +"www.example.com", because the subrouter is tested first. This is not only convenient, but also optimizes request matching. You can create subrouters combining any attribute matchers accepted by a route. @@ -172,6 +172,13 @@ conform to the corresponding patterns. These requirements guarantee that a generated URL will always match a registered route -- the only exception is for explicitly defined "build-only" routes which never match. +Regex support also exists for matching Headers within a route. For example, we could do: + + r.HeadersRegexp("Content-Type", "application/(text|json)") + +...and the route will match both requests with a Content-Type of `application/json` as well as +`application/text` + There's also a way to build only the URL host or path for a route: use the methods URLHost() or URLPath() instead. For the previous route, we would do: diff --git a/Godeps/_workspace/src/github.com/gorilla/mux/mux.go b/Godeps/_workspace/src/github.com/gorilla/mux/mux.go index af31d23955..3c51cca5e1 100644 --- a/Godeps/_workspace/src/github.com/gorilla/mux/mux.go +++ b/Godeps/_workspace/src/github.com/gorilla/mux/mux.go @@ -5,11 +5,13 @@ package mux import ( + "errors" "fmt" "net/http" "path" + "regexp" - "github.com/gorilla/context" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/gorilla/context" ) // NewRouter returns a new router instance. @@ -68,7 +70,7 @@ func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { // Clean path to canonical form and redirect. if p := cleanPath(req.URL.Path); p != req.URL.Path { - // Added 3 lines (Philip Schlump) - It was droping the query string and #whatever from query. + // Added 3 lines (Philip Schlump) - It was dropping the query string and #whatever from query. // This matches with fix in go 1.2 r.c. 4 for same problem. Go Issue: // http://code.google.com/p/go/issues/detail?id=5252 url := *req.URL @@ -237,6 +239,52 @@ func (r *Router) BuildVarsFunc(f BuildVarsFunc) *Route { return r.NewRoute().BuildVarsFunc(f) } +// Walk walks the router and all its sub-routers, calling walkFn for each route +// in the tree. The routes are walked in the order they were added. Sub-routers +// are explored depth-first. +func (r *Router) Walk(walkFn WalkFunc) error { + return r.walk(walkFn, []*Route{}) +} + +// SkipRouter is used as a return value from WalkFuncs to indicate that the +// router that walk is about to descend down to should be skipped. +var SkipRouter = errors.New("skip this router") + +// WalkFunc is the type of the function called for each route visited by Walk. +// At every invocation, it is given the current route, and the current router, +// and a list of ancestor routes that lead to the current route. +type WalkFunc func(route *Route, router *Router, ancestors []*Route) error + +func (r *Router) walk(walkFn WalkFunc, ancestors []*Route) error { + for _, t := range r.routes { + if t.regexp == nil || t.regexp.path == nil || t.regexp.path.template == "" { + continue + } + + err := walkFn(t, r, ancestors) + if err == SkipRouter { + continue + } + for _, sr := range t.matchers { + if h, ok := sr.(*Router); ok { + err := h.walk(walkFn, ancestors) + if err != nil { + return err + } + } + } + if h, ok := t.handler.(*Router); ok { + ancestors = append(ancestors, t) + err := h.walk(walkFn, ancestors) + if err != nil { + return err + } + ancestors = ancestors[:len(ancestors)-1] + } + } + return nil +} + // ---------------------------------------------------------------------------- // Context // ---------------------------------------------------------------------------- @@ -264,6 +312,10 @@ func Vars(r *http.Request) map[string]string { } // CurrentRoute returns the matched route for the current request, if any. +// This only works when called inside the handler of the matched route +// because the matched route is stored in the request context which is cleared +// after the handler returns, unless the KeepContext option is set on the +// Router. func CurrentRoute(r *http.Request) *Route { if rv := context.Get(r, routeKey); rv != nil { return rv.(*Route) @@ -313,13 +365,24 @@ func uniqueVars(s1, s2 []string) error { return nil } -// mapFromPairs converts variadic string parameters to a string map. -func mapFromPairs(pairs ...string) (map[string]string, error) { +// checkPairs returns the count of strings passed in, and an error if +// the count is not an even number. +func checkPairs(pairs ...string) (int, error) { length := len(pairs) if length%2 != 0 { - return nil, fmt.Errorf( + return length, fmt.Errorf( "mux: number of parameters must be multiple of 2, got %v", pairs) } + return length, nil +} + +// mapFromPairsToString converts variadic string parameters to a +// string to string map. +func mapFromPairsToString(pairs ...string) (map[string]string, error) { + length, err := checkPairs(pairs...) + if err != nil { + return nil, err + } m := make(map[string]string, length/2) for i := 0; i < length; i += 2 { m[pairs[i]] = pairs[i+1] @@ -327,6 +390,24 @@ func mapFromPairs(pairs ...string) (map[string]string, error) { return m, nil } +// mapFromPairsToRegex converts variadic string paramers to a +// string to regex map. +func mapFromPairsToRegex(pairs ...string) (map[string]*regexp.Regexp, error) { + length, err := checkPairs(pairs...) + if err != nil { + return nil, err + } + m := make(map[string]*regexp.Regexp, length/2) + for i := 0; i < length; i += 2 { + regex, err := regexp.Compile(pairs[i+1]) + if err != nil { + return nil, err + } + m[pairs[i]] = regex + } + return m, nil +} + // matchInArray returns true if the given string value is in the array. func matchInArray(arr []string, value string) bool { for _, v := range arr { @@ -337,9 +418,8 @@ func matchInArray(arr []string, value string) bool { return false } -// matchMap returns true if the given key/value pairs exist in a given map. -func matchMap(toCheck map[string]string, toMatch map[string][]string, - canonicalKey bool) bool { +// matchMapWithString returns true if the given key/value pairs exist in a given map. +func matchMapWithString(toCheck map[string]string, toMatch map[string][]string, canonicalKey bool) bool { for k, v := range toCheck { // Check if key exists. if canonicalKey { @@ -364,3 +444,31 @@ func matchMap(toCheck map[string]string, toMatch map[string][]string, } return true } + +// matchMapWithRegex returns true if the given key/value pairs exist in a given map compiled against +// the given regex +func matchMapWithRegex(toCheck map[string]*regexp.Regexp, toMatch map[string][]string, canonicalKey bool) bool { + for k, v := range toCheck { + // Check if key exists. + if canonicalKey { + k = http.CanonicalHeaderKey(k) + } + if values := toMatch[k]; values == nil { + return false + } else if v != nil { + // If value was defined as an empty string we only check that the + // key exists. Otherwise we also check for equality. + valueExists := false + for _, value := range values { + if v.MatchString(value) { + valueExists = true + break + } + } + if !valueExists { + return false + } + } + } + return true +} diff --git a/Godeps/_workspace/src/github.com/gorilla/mux/mux_test.go b/Godeps/_workspace/src/github.com/gorilla/mux/mux_test.go index 6b2c1d22f7..0f9bde0c18 100644 --- a/Godeps/_workspace/src/github.com/gorilla/mux/mux_test.go +++ b/Godeps/_workspace/src/github.com/gorilla/mux/mux_test.go @@ -7,11 +7,24 @@ package mux import ( "fmt" "net/http" + "strings" "testing" - "github.com/gorilla/context" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/gorilla/context" ) +func (r *Route) GoString() string { + matchers := make([]string, len(r.matchers)) + for i, m := range r.matchers { + matchers[i] = fmt.Sprintf("%#v", m) + } + return fmt.Sprintf("&Route{matchers:[]matcher{%s}}", strings.Join(matchers, ", ")) +} + +func (r *routeRegexp) GoString() string { + return fmt.Sprintf("&routeRegexp{template: %q, matchHost: %t, matchQuery: %t, strictSlash: %t, regexp: regexp.MustCompile(%q), reverse: %q, varsN: %v, varsR: %v", r.template, r.matchHost, r.matchQuery, r.strictSlash, r.regexp.String(), r.reverse, r.varsN, r.varsR) +} + type routeTest struct { title string // title of the test route *Route // the route being tested @@ -108,6 +121,15 @@ func TestHost(t *testing.T) { path: "", shouldMatch: true, }, + { + title: "Host route with pattern, additional capturing group, match", + route: new(Route).Host("aaa.{v1:[a-z]{2}(b|c)}.ccc"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v1": "bbb"}, + host: "aaa.bbb.ccc", + path: "", + shouldMatch: true, + }, { title: "Host route with pattern, wrong host in request URL", route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc"), @@ -135,6 +157,33 @@ func TestHost(t *testing.T) { path: "", shouldMatch: false, }, + { + title: "Host route with hyphenated name and pattern, match", + route: new(Route).Host("aaa.{v-1:[a-z]{3}}.ccc"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v-1": "bbb"}, + host: "aaa.bbb.ccc", + path: "", + shouldMatch: true, + }, + { + title: "Host route with hyphenated name and pattern, additional capturing group, match", + route: new(Route).Host("aaa.{v-1:[a-z]{2}(b|c)}.ccc"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v-1": "bbb"}, + host: "aaa.bbb.ccc", + path: "", + shouldMatch: true, + }, + { + title: "Host route with multiple hyphenated names and patterns, match", + route: new(Route).Host("{v-1:[a-z]{3}}.{v-2:[a-z]{3}}.{v-3:[a-z]{3}}"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v-1": "aaa", "v-2": "bbb", "v-3": "ccc"}, + host: "aaa.bbb.ccc", + path: "", + shouldMatch: true, + }, { title: "Path route with single pattern with pipe, match", route: new(Route).Path("/{category:a|b/c}"), @@ -260,6 +309,42 @@ func TestPath(t *testing.T) { path: "/111/222/333", shouldMatch: false, }, + { + title: "Path route with multiple patterns with pipe, match", + route: new(Route).Path("/{category:a|(b/c)}/{product}/{id:[0-9]+}"), + request: newRequest("GET", "http://localhost/a/product_name/1"), + vars: map[string]string{"category": "a", "product": "product_name", "id": "1"}, + host: "", + path: "/a/product_name/1", + shouldMatch: true, + }, + { + title: "Path route with hyphenated name and pattern, match", + route: new(Route).Path("/111/{v-1:[0-9]{3}}/333"), + request: newRequest("GET", "http://localhost/111/222/333"), + vars: map[string]string{"v-1": "222"}, + host: "", + path: "/111/222/333", + shouldMatch: true, + }, + { + title: "Path route with multiple hyphenated names and patterns, match", + route: new(Route).Path("/{v-1:[0-9]{3}}/{v-2:[0-9]{3}}/{v-3:[0-9]{3}}"), + request: newRequest("GET", "http://localhost/111/222/333"), + vars: map[string]string{"v-1": "111", "v-2": "222", "v-3": "333"}, + host: "", + path: "/111/222/333", + shouldMatch: true, + }, + { + title: "Path route with multiple hyphenated names and patterns with pipe, match", + route: new(Route).Path("/{product-category:a|(b/c)}/{product-name}/{product-id:[0-9]+}"), + request: newRequest("GET", "http://localhost/a/product_name/1"), + vars: map[string]string{"product-category": "a", "product-name": "product_name", "product-id": "1"}, + host: "", + path: "/a/product_name/1", + shouldMatch: true, + }, } for _, test := range tests { @@ -434,6 +519,24 @@ func TestHeaders(t *testing.T) { path: "", shouldMatch: false, }, + { + title: "Headers route, regex header values to match", + route: new(Route).Headers("foo", "ba[zr]"), + request: newRequestHeaders("GET", "http://localhost", map[string]string{"foo": "bar"}), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Headers route, regex header values to match", + route: new(Route).HeadersRegexp("foo", "ba[zr]"), + request: newRequestHeaders("GET", "http://localhost", map[string]string{"foo": "baz"}), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: true, + }, } for _, test := range tests { @@ -552,6 +655,150 @@ func TestQueries(t *testing.T) { path: "", shouldMatch: false, }, + { + title: "Queries route with regexp pattern with quantifier, match", + route: new(Route).Queries("foo", "{v1:[0-9]{1}}"), + request: newRequest("GET", "http://localhost?foo=1"), + vars: map[string]string{"v1": "1"}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route with regexp pattern with quantifier, additional variable in query string, match", + route: new(Route).Queries("foo", "{v1:[0-9]{1}}"), + request: newRequest("GET", "http://localhost?bar=2&foo=1"), + vars: map[string]string{"v1": "1"}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route with regexp pattern with quantifier, regexp does not match", + route: new(Route).Queries("foo", "{v1:[0-9]{1}}"), + request: newRequest("GET", "http://localhost?foo=12"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with regexp pattern with quantifier, additional capturing group", + route: new(Route).Queries("foo", "{v1:[0-9]{1}(a|b)}"), + request: newRequest("GET", "http://localhost?foo=1a"), + vars: map[string]string{"v1": "1a"}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route with regexp pattern with quantifier, additional variable in query string, regexp does not match", + route: new(Route).Queries("foo", "{v1:[0-9]{1}}"), + request: newRequest("GET", "http://localhost?foo=12"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with hyphenated name, match", + route: new(Route).Queries("foo", "{v-1}"), + request: newRequest("GET", "http://localhost?foo=bar"), + vars: map[string]string{"v-1": "bar"}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route with multiple hyphenated names, match", + route: new(Route).Queries("foo", "{v-1}", "baz", "{v-2}"), + request: newRequest("GET", "http://localhost?foo=bar&baz=ding"), + vars: map[string]string{"v-1": "bar", "v-2": "ding"}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route with hyphenate name and pattern, match", + route: new(Route).Queries("foo", "{v-1:[0-9]+}"), + request: newRequest("GET", "http://localhost?foo=10"), + vars: map[string]string{"v-1": "10"}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route with hyphenated name and pattern with quantifier, additional capturing group", + route: new(Route).Queries("foo", "{v-1:[0-9]{1}(a|b)}"), + request: newRequest("GET", "http://localhost?foo=1a"), + vars: map[string]string{"v-1": "1a"}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route with empty value, should match", + route: new(Route).Queries("foo", ""), + request: newRequest("GET", "http://localhost?foo=bar"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route with empty value and no parameter in request, should not match", + route: new(Route).Queries("foo", ""), + request: newRequest("GET", "http://localhost"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with empty value and empty parameter in request, should match", + route: new(Route).Queries("foo", ""), + request: newRequest("GET", "http://localhost?foo="), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route with overlapping value, should not match", + route: new(Route).Queries("foo", "bar"), + request: newRequest("GET", "http://localhost?foo=barfoo"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with no parameter in request, should not match", + route: new(Route).Queries("foo", "{bar}"), + request: newRequest("GET", "http://localhost"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with empty parameter in request, should match", + route: new(Route).Queries("foo", "{bar}"), + request: newRequest("GET", "http://localhost?foo="), + vars: map[string]string{"foo": ""}, + host: "", + path: "", + shouldMatch: true, + }, + { + title: "Queries route, bad submatch", + route: new(Route).Queries("foo", "bar", "baz", "ding"), + request: newRequest("GET", "http://localhost?fffoo=bar&baz=dingggg"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, } for _, test := range tests { @@ -801,6 +1048,81 @@ func TestStrictSlash(t *testing.T) { } } +func TestWalkSingleDepth(t *testing.T) { + r0 := NewRouter() + r1 := NewRouter() + r2 := NewRouter() + + r0.Path("/g") + r0.Path("/o") + r0.Path("/d").Handler(r1) + r0.Path("/r").Handler(r2) + r0.Path("/a") + + r1.Path("/z") + r1.Path("/i") + r1.Path("/l") + r1.Path("/l") + + r2.Path("/i") + r2.Path("/l") + r2.Path("/l") + + paths := []string{"g", "o", "r", "i", "l", "l", "a"} + depths := []int{0, 0, 0, 1, 1, 1, 0} + i := 0 + err := r0.Walk(func(route *Route, router *Router, ancestors []*Route) error { + matcher := route.matchers[0].(*routeRegexp) + if matcher.template == "/d" { + return SkipRouter + } + if len(ancestors) != depths[i] { + t.Errorf(`Expected depth of %d at i = %d; got "%d"`, depths[i], i, len(ancestors)) + } + if matcher.template != "/"+paths[i] { + t.Errorf(`Expected "/%s" at i = %d; got "%s"`, paths[i], i, matcher.template) + } + i++ + return nil + }) + if err != nil { + panic(err) + } + if i != len(paths) { + t.Errorf("Expected %d routes, found %d", len(paths), i) + } +} + +func TestWalkNested(t *testing.T) { + router := NewRouter() + + g := router.Path("/g").Subrouter() + o := g.PathPrefix("/o").Subrouter() + r := o.PathPrefix("/r").Subrouter() + i := r.PathPrefix("/i").Subrouter() + l1 := i.PathPrefix("/l").Subrouter() + l2 := l1.PathPrefix("/l").Subrouter() + l2.Path("/a") + + paths := []string{"/g", "/g/o", "/g/o/r", "/g/o/r/i", "/g/o/r/i/l", "/g/o/r/i/l/l", "/g/o/r/i/l/l/a"} + idx := 0 + err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error { + path := paths[idx] + tpl := route.regexp.path.template + if tpl != path { + t.Errorf(`Expected %s got %s`, path, tpl) + } + idx++ + return nil + }) + if err != nil { + panic(err) + } + if idx != len(paths) { + t.Errorf("Expected %d routes, found %d", len(paths), idx) + } +} + // ---------------------------------------------------------------------------- // Helpers // ---------------------------------------------------------------------------- diff --git a/Godeps/_workspace/src/github.com/gorilla/mux/old_test.go b/Godeps/_workspace/src/github.com/gorilla/mux/old_test.go index 1f7c190c0f..755db483e8 100644 --- a/Godeps/_workspace/src/github.com/gorilla/mux/old_test.go +++ b/Godeps/_workspace/src/github.com/gorilla/mux/old_test.go @@ -545,7 +545,7 @@ func TestMatchedRouteName(t *testing.T) { router := NewRouter() route := router.NewRoute().Path("/products/").Name(routeName) - url := "http://www.domain.com/products/" + url := "http://www.example.com/products/" request, _ := http.NewRequest("GET", url, nil) var rv RouteMatch ok := router.Match(request, &rv) @@ -563,10 +563,10 @@ func TestMatchedRouteName(t *testing.T) { func TestSubRouting(t *testing.T) { // Example from docs. router := NewRouter() - subrouter := router.NewRoute().Host("www.domain.com").Subrouter() + subrouter := router.NewRoute().Host("www.example.com").Subrouter() route := subrouter.NewRoute().Path("/products/").Name("products") - url := "http://www.domain.com/products/" + url := "http://www.example.com/products/" request, _ := http.NewRequest("GET", url, nil) var rv RouteMatch ok := router.Match(request, &rv) diff --git a/Godeps/_workspace/src/github.com/gorilla/mux/regexp.go b/Godeps/_workspace/src/github.com/gorilla/mux/regexp.go index aa3067986c..06728dd545 100644 --- a/Godeps/_workspace/src/github.com/gorilla/mux/regexp.go +++ b/Godeps/_workspace/src/github.com/gorilla/mux/regexp.go @@ -10,6 +10,7 @@ import ( "net/http" "net/url" "regexp" + "strconv" "strings" ) @@ -34,8 +35,7 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash // Now let's parse it. defaultPattern := "[^/]+" if matchQuery { - defaultPattern = "[^?&]+" - matchPrefix = true + defaultPattern = "[^?&]*" } else if matchHost { defaultPattern = "[^.]+" matchPrefix = false @@ -53,9 +53,7 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash varsN := make([]string, len(idxs)/2) varsR := make([]*regexp.Regexp, len(idxs)/2) pattern := bytes.NewBufferString("") - if !matchQuery { - pattern.WriteByte('^') - } + pattern.WriteByte('^') reverse := bytes.NewBufferString("") var end int var err error @@ -75,12 +73,14 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash tpl[idxs[i]:end]) } // Build the regexp pattern. - fmt.Fprintf(pattern, "%s(%s)", regexp.QuoteMeta(raw), patt) + varIdx := i / 2 + fmt.Fprintf(pattern, "%s(?P<%s>%s)", regexp.QuoteMeta(raw), varGroupName(varIdx), patt) // Build the reverse template. fmt.Fprintf(reverse, "%s%%s", raw) + // Append variable name and compiled pattern. - varsN[i/2] = name - varsR[i/2], err = regexp.Compile(fmt.Sprintf("^%s$", patt)) + varsN[varIdx] = name + varsR[varIdx], err = regexp.Compile(fmt.Sprintf("^%s$", patt)) if err != nil { return nil, err } @@ -91,6 +91,12 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash if strictSlash { pattern.WriteString("[/]?") } + if matchQuery { + // Add the default pattern if the query value is empty + if queryVal := strings.SplitN(template, "=", 2)[1]; queryVal == "" { + pattern.WriteString(defaultPattern) + } + } if !matchPrefix { pattern.WriteByte('$') } @@ -141,7 +147,7 @@ type routeRegexp struct { func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool { if !r.matchHost { if r.matchQuery { - return r.regexp.MatchString(req.URL.RawQuery) + return r.matchQueryString(req) } else { return r.regexp.MatchString(req.URL.Path) } @@ -175,6 +181,26 @@ func (r *routeRegexp) url(values map[string]string) (string, error) { return rv, nil } +// getUrlQuery returns a single query parameter from a request URL. +// For a URL with foo=bar&baz=ding, we return only the relevant key +// value pair for the routeRegexp. +func (r *routeRegexp) getUrlQuery(req *http.Request) string { + if !r.matchQuery { + return "" + } + templateKey := strings.SplitN(r.template, "=", 2)[0] + for key, vals := range req.URL.Query() { + if key == templateKey && len(vals) > 0 { + return key + "=" + vals[0] + } + } + return "" +} + +func (r *routeRegexp) matchQueryString(req *http.Request) bool { + return r.regexp.MatchString(r.getUrlQuery(req)) +} + // braceIndices returns the first level curly brace indices from a string. // It returns an error in case of unbalanced braces. func braceIndices(s string) ([]int, error) { @@ -200,6 +226,11 @@ func braceIndices(s string) ([]int, error) { return idxs, nil } +// varGroupName builds a capturing group name for the indexed variable. +func varGroupName(idx int) string { + return "v" + strconv.Itoa(idx) +} + // ---------------------------------------------------------------------------- // routeRegexpGroup // ---------------------------------------------------------------------------- @@ -217,8 +248,13 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) if v.host != nil { hostVars := v.host.regexp.FindStringSubmatch(getHost(req)) if hostVars != nil { - for k, v := range v.host.varsN { - m.Vars[v] = hostVars[k+1] + subexpNames := v.host.regexp.SubexpNames() + varName := 0 + for i, name := range subexpNames[1:] { + if name != "" && name == varGroupName(varName) { + m.Vars[v.host.varsN[varName]] = hostVars[i+1] + varName++ + } } } } @@ -226,8 +262,13 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) if v.path != nil { pathVars := v.path.regexp.FindStringSubmatch(req.URL.Path) if pathVars != nil { - for k, v := range v.path.varsN { - m.Vars[v] = pathVars[k+1] + subexpNames := v.path.regexp.SubexpNames() + varName := 0 + for i, name := range subexpNames[1:] { + if name != "" && name == varGroupName(varName) { + m.Vars[v.path.varsN[varName]] = pathVars[i+1] + varName++ + } } // Check if we should redirect. if v.path.strictSlash { @@ -246,12 +287,16 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) } } // Store query string variables. - rawQuery := req.URL.RawQuery for _, q := range v.queries { - queryVars := q.regexp.FindStringSubmatch(rawQuery) + queryVars := q.regexp.FindStringSubmatch(q.getUrlQuery(req)) if queryVars != nil { - for k, v := range q.varsN { - m.Vars[v] = queryVars[k+1] + subexpNames := q.regexp.SubexpNames() + varName := 0 + for i, name := range subexpNames[1:] { + if name != "" && name == varGroupName(varName) { + m.Vars[q.varsN[varName]] = queryVars[i+1] + varName++ + } } } } diff --git a/Godeps/_workspace/src/github.com/gorilla/mux/route.go b/Godeps/_workspace/src/github.com/gorilla/mux/route.go index d4f0146885..913432c1c0 100644 --- a/Godeps/_workspace/src/github.com/gorilla/mux/route.go +++ b/Godeps/_workspace/src/github.com/gorilla/mux/route.go @@ -9,6 +9,7 @@ import ( "fmt" "net/http" "net/url" + "regexp" "strings" ) @@ -188,7 +189,7 @@ func (r *Route) addRegexpMatcher(tpl string, matchHost, matchPrefix, matchQuery type headerMatcher map[string]string func (m headerMatcher) Match(r *http.Request, match *RouteMatch) bool { - return matchMap(m, r.Header, true) + return matchMapWithString(m, r.Header, true) } // Headers adds a matcher for request header values. @@ -199,22 +200,45 @@ func (m headerMatcher) Match(r *http.Request, match *RouteMatch) bool { // "X-Requested-With", "XMLHttpRequest") // // The above route will only match if both request header values match. -// -// It the value is an empty string, it will match any value if the key is set. +// If the value is an empty string, it will match any value if the key is set. func (r *Route) Headers(pairs ...string) *Route { if r.err == nil { var headers map[string]string - headers, r.err = mapFromPairs(pairs...) + headers, r.err = mapFromPairsToString(pairs...) return r.addMatcher(headerMatcher(headers)) } return r } +// headerRegexMatcher matches the request against the route given a regex for the header +type headerRegexMatcher map[string]*regexp.Regexp + +func (m headerRegexMatcher) Match(r *http.Request, match *RouteMatch) bool { + return matchMapWithRegex(m, r.Header, true) +} + +// Regular expressions can be used with headers as well. +// It accepts a sequence of key/value pairs, where the value has regex support. For example +// r := mux.NewRouter() +// r.HeadersRegexp("Content-Type", "application/(text|json)", +// "X-Requested-With", "XMLHttpRequest") +// +// The above route will only match if both the request header matches both regular expressions. +// It the value is an empty string, it will match any value if the key is set. +func (r *Route) HeadersRegexp(pairs ...string) *Route { + if r.err == nil { + var headers map[string]*regexp.Regexp + headers, r.err = mapFromPairsToRegex(pairs...) + return r.addMatcher(headerRegexMatcher(headers)) + } + return r +} + // Host ----------------------------------------------------------------------- // Host adds a matcher for the URL host. // It accepts a template with zero or more URL variables enclosed by {}. -// Variables can define an optional regexp pattern to me matched: +// Variables can define an optional regexp pattern to be matched: // // - {name} matches anything until the next dot. // @@ -223,7 +247,7 @@ func (r *Route) Headers(pairs ...string) *Route { // For example: // // r := mux.NewRouter() -// r.Host("www.domain.com") +// r.Host("www.example.com") // r.Host("{subdomain}.domain.com") // r.Host("{subdomain:[a-z]+}.domain.com") // @@ -272,7 +296,7 @@ func (r *Route) Methods(methods ...string) *Route { // Path adds a matcher for the URL path. // It accepts a template with zero or more URL variables enclosed by {}. The // template must start with a "/". -// Variables can define an optional regexp pattern to me matched: +// Variables can define an optional regexp pattern to be matched: // // - {name} matches anything until the next slash. // @@ -323,7 +347,7 @@ func (r *Route) PathPrefix(tpl string) *Route { // // It the value is an empty string, it will match any value if the key is set. // -// Variables can define an optional regexp pattern to me matched: +// Variables can define an optional regexp pattern to be matched: // // - {name} matches anything until the next slash. // @@ -336,7 +360,7 @@ func (r *Route) Queries(pairs ...string) *Route { return nil } for i := 0; i < length; i += 2 { - if r.err = r.addRegexpMatcher(pairs[i]+"="+pairs[i+1], false, true, true); r.err != nil { + if r.err = r.addRegexpMatcher(pairs[i]+"="+pairs[i+1], false, false, true); r.err != nil { return r } } @@ -382,7 +406,7 @@ func (r *Route) BuildVarsFunc(f BuildVarsFunc) *Route { // It will test the inner routes only if the parent route matched. For example: // // r := mux.NewRouter() -// s := r.Host("www.domain.com").Subrouter() +// s := r.Host("www.example.com").Subrouter() // s.HandleFunc("/products/", ProductsHandler) // s.HandleFunc("/products/{key}", ProductHandler) // s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) @@ -511,7 +535,7 @@ func (r *Route) URLPath(pairs ...string) (*url.URL, error) { // prepareVars converts the route variable pairs into a map. If the route has a // BuildVarsFunc, it is invoked. func (r *Route) prepareVars(pairs ...string) (map[string]string, error) { - m, err := mapFromPairs(pairs...) + m, err := mapFromPairsToString(pairs...) if err != nil { return nil, err } diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/README.md b/Godeps/_workspace/src/github.com/gorilla/websocket/README.md index 9ad75a0f5e..9d71959ea1 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/README.md +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/README.md @@ -7,6 +7,8 @@ Gorilla WebSocket is a [Go](http://golang.org/) implementation of the * [API Reference](http://godoc.org/github.com/gorilla/websocket) * [Chat example](https://github.com/gorilla/websocket/tree/master/examples/chat) +* [Command example](https://github.com/gorilla/websocket/tree/master/examples/command) +* [Client and server example](https://github.com/gorilla/websocket/tree/master/examples/echo) * [File watch example](https://github.com/gorilla/websocket/tree/master/examples/filewatch) ### Status diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/client.go b/Godeps/_workspace/src/github.com/gorilla/websocket/client.go index 5bc27e1932..3bf9b2e840 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/client.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/client.go @@ -5,6 +5,7 @@ package websocket import ( + "bufio" "bytes" "crypto/tls" "errors" @@ -30,50 +31,17 @@ var ErrBadHandshake = errors.New("websocket: bad handshake") // If the WebSocket handshake fails, ErrBadHandshake is returned along with a // non-nil *http.Response so that callers can handle redirects, authentication, // etc. +// +// Deprecated: Use Dialer instead. func NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufSize, writeBufSize int) (c *Conn, response *http.Response, err error) { - challengeKey, err := generateChallengeKey() - if err != nil { - return nil, nil, err + d := Dialer{ + ReadBufferSize: readBufSize, + WriteBufferSize: writeBufSize, + NetDial: func(net, addr string) (net.Conn, error) { + return netConn, nil + }, } - acceptKey := computeAcceptKey(challengeKey) - - c = newConn(netConn, false, readBufSize, writeBufSize) - p := c.writeBuf[:0] - p = append(p, "GET "...) - p = append(p, u.RequestURI()...) - p = append(p, " HTTP/1.1\r\nHost: "...) - p = append(p, u.Host...) - // "Upgrade" is capitalized for servers that do not use case insensitive - // comparisons on header tokens. - p = append(p, "\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: "...) - p = append(p, challengeKey...) - p = append(p, "\r\n"...) - for k, vs := range requestHeader { - for _, v := range vs { - p = append(p, k...) - p = append(p, ": "...) - p = append(p, v...) - p = append(p, "\r\n"...) - } - } - p = append(p, "\r\n"...) - - if _, err := netConn.Write(p); err != nil { - return nil, nil, err - } - - resp, err := http.ReadResponse(c.br, &http.Request{Method: "GET", URL: u}) - if err != nil { - return nil, nil, err - } - if resp.StatusCode != 101 || - !strings.EqualFold(resp.Header.Get("Upgrade"), "websocket") || - !strings.EqualFold(resp.Header.Get("Connection"), "upgrade") || - resp.Header.Get("Sec-Websocket-Accept") != acceptKey { - return nil, resp, ErrBadHandshake - } - c.subprotocol = resp.Header.Get("Sec-Websocket-Protocol") - return c, resp, nil + return d.Dial(u.String(), requestHeader) } // A Dialer contains options for connecting to WebSocket server. @@ -82,6 +50,12 @@ type Dialer struct { // NetDial is nil, net.Dial is used. NetDial func(network, addr string) (net.Conn, error) + // Proxy specifies a function to return a proxy for a given + // Request. If the function returns a non-nil error, the + // request is aborted with the provided error. + // If Proxy is nil or returns a nil *URL, no proxy is used. + Proxy func(*http.Request) (*url.URL, error) + // TLSClientConfig specifies the TLS configuration to use with tls.Client. // If nil, the default configuration is used. TLSClientConfig *tls.Config @@ -99,17 +73,15 @@ type Dialer struct { var errMalformedURL = errors.New("malformed ws or wss URL") -// parseURL parses the URL. The url.Parse function is not used here because -// url.Parse mangles the path. +// parseURL parses the URL. +// +// This function is a replacement for the standard library url.Parse function. +// In Go 1.4 and earlier, url.Parse loses information from the path. func parseURL(s string) (*url.URL, error) { // From the RFC: // // ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ] // wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ] - // - // We don't use the net/url parser here because the dialer interface does - // not provide a way for applications to work around percent deocding in - // the net/url parser. var u url.URL switch { @@ -130,6 +102,12 @@ func parseURL(s string) (*url.URL, error) { u.Opaque = s[i:] } + if strings.Contains(u.Host, "@") { + // Don't bother parsing user information because user information is + // not allowed in websocket URIs. + return nil, errMalformedURL + } + return &u, nil } @@ -139,9 +117,12 @@ func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { if i := strings.LastIndex(u.Host, ":"); i > strings.LastIndex(u.Host, "]") { hostNoPort = hostNoPort[:i] } else { - if u.Scheme == "wss" { + switch u.Scheme { + case "wss": hostPort += ":443" - } else { + case "https": + hostPort += ":443" + default: hostPort += ":80" } } @@ -149,7 +130,9 @@ func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { } // DefaultDialer is a dialer with all fields set to the default zero values. -var DefaultDialer *Dialer +var DefaultDialer = &Dialer{ + Proxy: http.ProxyFromEnvironment, +} // Dial creates a new client connection. Use requestHeader to specify the // origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). @@ -161,15 +144,91 @@ var DefaultDialer *Dialer // etcetera. The response body may not contain the entire response and does not // need to be closed by the application. func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + + if d == nil { + d = &Dialer{ + Proxy: http.ProxyFromEnvironment, + } + } + + challengeKey, err := generateChallengeKey() + if err != nil { + return nil, nil, err + } + u, err := parseURL(urlStr) if err != nil { return nil, nil, err } + switch u.Scheme { + case "ws": + u.Scheme = "http" + case "wss": + u.Scheme = "https" + default: + return nil, nil, errMalformedURL + } + + if u.User != nil { + // User name and password are not allowed in websocket URIs. + return nil, nil, errMalformedURL + } + + req := &http.Request{ + Method: "GET", + URL: u, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + Header: make(http.Header), + Host: u.Host, + } + + // Set the request headers using the capitalization for names and values in + // RFC examples. Although the capitalization shouldn't matter, there are + // servers that depend on it. The Header.Set method is not used because the + // method canonicalizes the header names. + req.Header["Upgrade"] = []string{"websocket"} + req.Header["Connection"] = []string{"Upgrade"} + req.Header["Sec-WebSocket-Key"] = []string{challengeKey} + req.Header["Sec-WebSocket-Version"] = []string{"13"} + if len(d.Subprotocols) > 0 { + req.Header["Sec-WebSocket-Protocol"] = []string{strings.Join(d.Subprotocols, ", ")} + } + for k, vs := range requestHeader { + switch { + case k == "Host": + if len(vs) > 0 { + req.Host = vs[0] + } + case k == "Upgrade" || + k == "Connection" || + k == "Sec-Websocket-Key" || + k == "Sec-Websocket-Version" || + (k == "Sec-Websocket-Protocol" && len(d.Subprotocols) > 0): + return nil, nil, errors.New("websocket: duplicate header not allowed: " + k) + default: + req.Header[k] = vs + } + } + hostPort, hostNoPort := hostPortNoPort(u) - if d == nil { - d = &Dialer{} + var proxyURL *url.URL + // Check wether the proxy method has been configured + if d.Proxy != nil { + proxyURL, err = d.Proxy(req) + } + if err != nil { + return nil, nil, err + } + + var targetHostPort string + if proxyURL != nil { + targetHostPort, _ = hostPortNoPort(proxyURL) + } else { + targetHostPort = hostPort } var deadline time.Time @@ -183,7 +242,7 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re netDial = netDialer.Dial } - netConn, err := netDial("tcp", hostPort) + netConn, err := netDial("tcp", targetHostPort) if err != nil { return nil, nil, err } @@ -198,7 +257,31 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re return nil, nil, err } - if u.Scheme == "wss" { + if proxyURL != nil { + connectReq := &http.Request{ + Method: "CONNECT", + URL: &url.URL{Opaque: hostPort}, + Host: hostPort, + Header: make(http.Header), + } + + connectReq.Write(netConn) + + // Read response. + // Okay to use and discard buffered reader here, because + // TLS server will not speak until spoken to. + br := bufio.NewReader(netConn) + resp, err := http.ReadResponse(br, connectReq) + if err != nil { + return nil, nil, err + } + if resp.StatusCode != 200 { + f := strings.SplitN(resp.Status, " ", 2) + return nil, nil, errors.New(f[1]) + } + } + + if u.Scheme == "https" { cfg := d.TLSClientConfig if cfg == nil { cfg = &tls.Config{ServerName: hostNoPort} @@ -219,44 +302,31 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re } } - if len(d.Subprotocols) > 0 { - h := http.Header{} - for k, v := range requestHeader { - h[k] = v - } - h.Set("Sec-Websocket-Protocol", strings.Join(d.Subprotocols, ", ")) - requestHeader = h + conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize) + + if err := req.Write(netConn); err != nil { + return nil, nil, err } - if len(requestHeader["Host"]) > 0 { - // This can be used to supply a Host: header which is different from - // the dial address. - u.Host = requestHeader.Get("Host") - - // Drop "Host" header - h := http.Header{} - for k, v := range requestHeader { - if k == "Host" { - continue - } - h[k] = v - } - requestHeader = h - } - - conn, resp, err := NewClient(netConn, u, requestHeader, d.ReadBufferSize, d.WriteBufferSize) - + resp, err := http.ReadResponse(conn.br, req) if err != nil { - if err == ErrBadHandshake { - // Before closing the network connection on return from this - // function, slurp up some of the response to aid application - // debugging. - buf := make([]byte, 1024) - n, _ := io.ReadFull(resp.Body, buf) - resp.Body = ioutil.NopCloser(bytes.NewReader(buf[:n])) - } - return nil, resp, err + return nil, nil, err } + if resp.StatusCode != 101 || + !strings.EqualFold(resp.Header.Get("Upgrade"), "websocket") || + !strings.EqualFold(resp.Header.Get("Connection"), "upgrade") || + resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) { + // Before closing the network connection on return from this + // function, slurp up some of the response to aid application + // debugging. + buf := make([]byte, 1024) + n, _ := io.ReadFull(resp.Body, buf) + resp.Body = ioutil.NopCloser(bytes.NewReader(buf[:n])) + return nil, resp, ErrBadHandshake + } + + resp.Body = ioutil.NopCloser(bytes.NewReader([]byte{})) + conn.subprotocol = resp.Header.Get("Sec-Websocket-Protocol") netConn.SetDeadline(time.Time{}) netConn = nil // to avoid close in defer. diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/client_server_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/client_server_test.go index 749ef20509..05a7888fea 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/client_server_test.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/client_server_test.go @@ -56,11 +56,6 @@ func newTLSServer(t *testing.T) *cstServer { } func (t cstHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - if r.Method != "GET" { - t.Logf("method %s not allowed", r.Method) - http.Error(w, "method not allowed", 405) - return - } subprotos := Subprotocols(r) if !reflect.DeepEqual(subprotos, cstDialer.Subprotocols) { t.Logf("subprotols=%v, want %v", subprotos, cstDialer.Subprotocols) @@ -123,6 +118,45 @@ func sendRecv(t *testing.T, ws *Conn) { } } +func TestProxyDial(t *testing.T) { + + s := newServer(t) + defer s.Close() + + surl, _ := url.Parse(s.URL) + + cstDialer.Proxy = http.ProxyURL(surl) + + connect := false + origHandler := s.Server.Config.Handler + + // Capture the request Host header. + s.Server.Config.Handler = http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + if r.Method == "CONNECT" { + connect = true + w.WriteHeader(200) + return + } + + if !connect { + t.Log("connect not recieved") + http.Error(w, "connect not recieved", 405) + return + } + origHandler.ServeHTTP(w, r) + }) + + ws, _, err := cstDialer.Dial(s.URL, nil) + if err != nil { + t.Fatalf("Dial: %v", err) + } + defer ws.Close() + sendRecv(t, ws) + + cstDialer.Proxy = http.ProxyFromEnvironment +} + func TestDial(t *testing.T) { s := newServer(t) defer s.Close() @@ -229,6 +263,45 @@ func TestDialBadOrigin(t *testing.T) { } } +func TestDialBadHeader(t *testing.T) { + s := newServer(t) + defer s.Close() + + for _, k := range []string{"Upgrade", + "Connection", + "Sec-Websocket-Key", + "Sec-Websocket-Version", + "Sec-Websocket-Protocol"} { + h := http.Header{} + h.Set(k, "bad") + ws, _, err := cstDialer.Dial(s.URL, http.Header{"Origin": {"bad"}}) + if err == nil { + ws.Close() + t.Errorf("Dial with header %s returned nil", k) + } + } +} + +func TestBadMethod(t *testing.T) { + s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ws, err := cstUpgrader.Upgrade(w, r, nil) + if err == nil { + t.Errorf("handshake succeeded, expect fail") + ws.Close() + } + })) + defer s.Close() + + resp, err := http.PostForm(s.URL, url.Values{}) + if err != nil { + t.Fatalf("PostForm returned error %v", err) + } + resp.Body.Close() + if resp.StatusCode != http.StatusMethodNotAllowed { + t.Errorf("Status = %d, want %d", resp.StatusCode, http.StatusMethodNotAllowed) + } +} + func TestHandshake(t *testing.T) { s := newServer(t) defer s.Close() @@ -289,8 +362,8 @@ func TestRespOnBadHandshake(t *testing.T) { } } -// If the Host header is specified in `Dial()`, the server must receive it as -// the `Host:` header. +// TestHostHeader confirms that the host header provided in the call to Dial is +// sent to the server. func TestHostHeader(t *testing.T) { s := newServer(t) defer s.Close() @@ -305,16 +378,12 @@ func TestHostHeader(t *testing.T) { origHandler.ServeHTTP(w, r) }) - ws, resp, err := cstDialer.Dial(s.URL, http.Header{"Host": {"testhost"}}) + ws, _, err := cstDialer.Dial(s.URL, http.Header{"Host": {"testhost"}}) if err != nil { t.Fatalf("Dial: %v", err) } defer ws.Close() - if resp.StatusCode != http.StatusSwitchingProtocols { - t.Fatalf("resp.StatusCode = %v, want http.StatusSwitchingProtocols", resp.StatusCode) - } - if gotHost := <-specifiedHost; gotHost != "testhost" { t.Fatalf("gotHost = %q, want \"testhost\"", gotHost) } diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/client_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/client_test.go index d2f2ebd798..07a9cb453e 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/client_test.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/client_test.go @@ -20,6 +20,7 @@ var parseURLTests = []struct { {"wss://example.com/", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/"}}, {"wss://example.com/a/b", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b"}}, {"ss://example.com/a/b", nil}, + {"ws://webmaster@example.com/", nil}, } func TestParseURL(t *testing.T) { diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/conn.go b/Godeps/_workspace/src/github.com/gorilla/websocket/conn.go index e719f1ce63..e8b6b3e045 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/conn.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/conn.go @@ -88,19 +88,23 @@ func (e *netError) Error() string { return e.msg } func (e *netError) Temporary() bool { return e.temporary } func (e *netError) Timeout() bool { return e.timeout } -// closeError represents close frame. -type closeError struct { - code int - text string +// CloseError represents close frame. +type CloseError struct { + + // Code is defined in RFC 6455, section 11.7. + Code int + + // Text is the optional text payload. + Text string } -func (e *closeError) Error() string { - return "websocket: close " + strconv.Itoa(e.code) + " " + e.text +func (e *CloseError) Error() string { + return "websocket: close " + strconv.Itoa(e.Code) + " " + e.Text } var ( - errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true} - errUnexpectedEOF = &closeError{code: CloseAbnormalClosure, text: io.ErrUnexpectedEOF.Error()} + errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true, temporary: true} + errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()} errBadWriteOpCode = errors.New("websocket: bad write message type") errWriteClosed = errors.New("websocket: write closed") errInvalidControlFrame = errors.New("websocket: invalid control frame") @@ -296,7 +300,7 @@ func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) er if n != 0 && n != len(buf) { c.conn.Close() } - return err + return hideTempErr(err) } // NextWriter returns a writer for the next message to send. The writer's @@ -673,12 +677,7 @@ func (c *Conn) advanceFrame() (int, error) { closeCode = int(binary.BigEndian.Uint16(payload)) closeText = string(payload[2:]) } - switch closeCode { - case CloseNormalClosure, CloseGoingAway: - return noFrame, io.EOF - default: - return noFrame, &closeError{code: closeCode, text: closeText} - } + return noFrame, &CloseError{Code: closeCode, Text: closeText} } return frameType, nil @@ -790,20 +789,27 @@ func (c *Conn) SetReadLimit(limit int64) { } // SetPingHandler sets the handler for ping messages received from the peer. -// The default ping handler sends a pong to the peer. -func (c *Conn) SetPingHandler(h func(string) error) { +// The appData argument to h is the PING frame application data. The default +// ping handler sends a pong to the peer. +func (c *Conn) SetPingHandler(h func(appData string) error) { if h == nil { h = func(message string) error { - c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) - return nil + err := c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) + if err == ErrCloseSent { + return nil + } else if e, ok := err.(net.Error); ok && e.Temporary() { + return nil + } + return err } } c.handlePing = h } // SetPongHandler sets the handler for pong messages received from the peer. -// The default pong handler does nothing. -func (c *Conn) SetPongHandler(h func(string) error) { +// The appData argument to h is the PONG frame application data. The default +// pong handler does nothing. +func (c *Conn) SetPongHandler(h func(appData string) error) { if h == nil { h = func(string) error { return nil } } diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/conn_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/conn_test.go index 1f1197e710..02f2d4b501 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/conn_test.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/conn_test.go @@ -5,11 +5,13 @@ package websocket import ( + "bufio" "bytes" "fmt" "io" "io/ioutil" "net" + "reflect" "testing" "testing/iotest" "time" @@ -146,13 +148,15 @@ func TestControl(t *testing.T) { func TestCloseBeforeFinalFrame(t *testing.T) { const bufSize = 512 + expectedErr := &CloseError{Code: CloseNormalClosure, Text: "hello"} + var b1, b2 bytes.Buffer wc := newConn(fakeNetConn{Reader: nil, Writer: &b1}, false, 1024, bufSize) rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, 1024, 1024) w, _ := wc.NextWriter(BinaryMessage) w.Write(make([]byte, bufSize+bufSize/2)) - wc.WriteControl(CloseMessage, FormatCloseMessage(CloseNormalClosure, ""), time.Now().Add(10*time.Second)) + wc.WriteControl(CloseMessage, FormatCloseMessage(expectedErr.Code, expectedErr.Text), time.Now().Add(10*time.Second)) w.Close() op, r, err := rc.NextReader() @@ -160,12 +164,12 @@ func TestCloseBeforeFinalFrame(t *testing.T) { t.Fatalf("NextReader() returned %d, %v", op, err) } _, err = io.Copy(ioutil.Discard, r) - if err != errUnexpectedEOF { - t.Fatalf("io.Copy() returned %v, want %v", err, errUnexpectedEOF) + if !reflect.DeepEqual(err, expectedErr) { + t.Fatalf("io.Copy() returned %v, want %v", err, expectedErr) } _, _, err = rc.NextReader() - if err != io.EOF { - t.Fatalf("NextReader() returned %v, want %v", err, io.EOF) + if !reflect.DeepEqual(err, expectedErr) { + t.Fatalf("NextReader() returned %v, want %v", err, expectedErr) } } @@ -236,3 +240,33 @@ func TestUnderlyingConn(t *testing.T) { t.Fatalf("Underlying conn is not what it should be.") } } + +func TestBufioReadBytes(t *testing.T) { + + // Test calling bufio.ReadBytes for value longer than read buffer size. + + m := make([]byte, 512) + m[len(m)-1] = '\n' + + var b1, b2 bytes.Buffer + wc := newConn(fakeNetConn{Reader: nil, Writer: &b1}, false, len(m)+64, len(m)+64) + rc := newConn(fakeNetConn{Reader: &b1, Writer: &b2}, true, len(m)-64, len(m)-64) + + w, _ := wc.NextWriter(BinaryMessage) + w.Write(m) + w.Close() + + op, r, err := rc.NextReader() + if op != BinaryMessage || err != nil { + t.Fatalf("NextReader() returned %d, %v", op, err) + } + + br := bufio.NewReader(r) + p, err := br.ReadBytes('\n') + if err != nil { + t.Fatalf("ReadBytes() returned %v", err) + } + if len(p) != len(m) { + t.Fatalf("read returnd %d bytes, want %d bytes", len(p), len(m)) + } +} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/doc.go b/Godeps/_workspace/src/github.com/gorilla/websocket/doc.go index 0d2bd912b3..72286279c2 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/doc.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/doc.go @@ -24,7 +24,7 @@ // ... Use conn to send and receive messages. // } // -// Call the connection WriteMessage and ReadMessages methods to send and +// Call the connection's WriteMessage and ReadMessage methods to send and // receive messages as a slice of bytes. This snippet of code shows how to echo // messages using these methods: // @@ -97,10 +97,13 @@ // // Concurrency // -// Connections do not support concurrent calls to the write methods -// (NextWriter, SetWriteDeadline, WriteMessage) or concurrent calls to the read -// methods methods (NextReader, SetReadDeadline, ReadMessage). Connections do -// support a concurrent reader and writer. +// Connections support one concurrent reader and one concurrent writer. +// +// Applications are responsible for ensuring that no more than one goroutine +// calls the write methods (NextWriter, SetWriteDeadline, WriteMessage, +// WriteJSON) concurrently and that no more than one goroutine calls the read +// methods (NextReader, SetReadDeadline, ReadMessage, ReadJSON, SetPongHandler, +// SetPingHandler) concurrently. // // The Close and WriteControl methods can be called concurrently with all other // methods. diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/server.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/server.go index d96ac84dbf..d0b1c31581 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/server.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/autobahn/server.go @@ -8,7 +8,7 @@ package main import ( "errors" "flag" - "github.com/gorilla/websocket" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/gorilla/websocket" "io" "log" "net/http" diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/README.md b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/README.md index 08fc3e65c6..5df3cf1a37 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/README.md +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/README.md @@ -17,3 +17,4 @@ using the following commands. $ cd `go list -f '{{.Dir}}' github.com/gorilla/websocket/examples/chat` $ go run *.go +To use the chat example, open http://localhost:8080/ in your browser. diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/conn.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/conn.go index 7cc0496c3e..675d641131 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/conn.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/chat/conn.go @@ -5,7 +5,7 @@ package main import ( - "github.com/gorilla/websocket" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/gorilla/websocket" "log" "net/http" "time" @@ -88,12 +88,8 @@ func (c *connection) writePump() { } } -// serverWs handles websocket requests from the peer. +// serveWs handles websocket requests from the peer. func serveWs(w http.ResponseWriter, r *http.Request) { - if r.Method != "GET" { - http.Error(w, "Method not allowed", 405) - return - } ws, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/README.md b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/README.md new file mode 100644 index 0000000000..c30d3979a1 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/README.md @@ -0,0 +1,19 @@ +# Command example + +This example connects a websocket connection to stdin and stdout of a command. +Received messages are written to stdin followed by a `\n`. Each line read from +from standard out is sent as a message to the client. + + $ go get github.com/gorilla/websocket + $ cd `go list -f '{{.Dir}}' github.com/gorilla/websocket/examples/command` + $ go run main.go + # Open http://localhost:8080/ . + +Try the following commands. + + # Echo sent messages to the output area. + $ go run main.go cat + + # Run a shell.Try sending "ls" and "cat main.go". + $ go run main.go sh + diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/home.html b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/home.html new file mode 100644 index 0000000000..72fd02b2a3 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/home.html @@ -0,0 +1,96 @@ + + + +Command Example + + + + + +
    +
    + + +
    + + diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/main.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/main.go new file mode 100644 index 0000000000..3531b368c2 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/command/main.go @@ -0,0 +1,188 @@ +// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "bufio" + "flag" + "io" + "log" + "net/http" + "os" + "os/exec" + "text/template" + "time" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/gorilla/websocket" +) + +var ( + addr = flag.String("addr", "127.0.0.1:8080", "http service address") + cmdPath string + homeTempl = template.Must(template.ParseFiles("home.html")) +) + +const ( + // Time allowed to write a message to the peer. + writeWait = 10 * time.Second + + // Maximum message size allowed from peer. + maxMessageSize = 8192 + + // Time allowed to read the next pong message from the peer. + pongWait = 60 * time.Second + + // Send pings to peer with this period. Must be less than pongWait. + pingPeriod = (pongWait * 9) / 10 +) + +func pumpStdin(ws *websocket.Conn, w io.Writer) { + defer ws.Close() + ws.SetReadLimit(maxMessageSize) + ws.SetReadDeadline(time.Now().Add(pongWait)) + ws.SetPongHandler(func(string) error { ws.SetReadDeadline(time.Now().Add(pongWait)); return nil }) + for { + _, message, err := ws.ReadMessage() + if err != nil { + break + } + message = append(message, '\n') + if _, err := w.Write(message); err != nil { + break + } + } +} + +func pumpStdout(ws *websocket.Conn, r io.Reader, done chan struct{}) { + defer func() { + ws.Close() + close(done) + }() + s := bufio.NewScanner(r) + for s.Scan() { + ws.SetWriteDeadline(time.Now().Add(writeWait)) + if err := ws.WriteMessage(websocket.TextMessage, s.Bytes()); err != nil { + break + } + } + if s.Err() != nil { + log.Println("scan:", s.Err()) + } +} + +func ping(ws *websocket.Conn, done chan struct{}) { + ticker := time.NewTicker(pingPeriod) + defer ticker.Stop() + for { + select { + case <-ticker.C: + if err := ws.WriteControl(websocket.PingMessage, []byte{}, time.Now().Add(writeWait)); err != nil { + log.Println("ping:", err) + } + case <-done: + return + } + } +} + +func internalError(ws *websocket.Conn, msg string, err error) { + log.Println(msg, err) + ws.WriteMessage(websocket.TextMessage, []byte("Internal server error.")) +} + +var upgrader = websocket.Upgrader{} + +func serveWs(w http.ResponseWriter, r *http.Request) { + ws, err := upgrader.Upgrade(w, r, nil) + if err != nil { + log.Println("upgrade:", err) + return + } + + defer ws.Close() + + outr, outw, err := os.Pipe() + if err != nil { + internalError(ws, "stdout:", err) + return + } + defer outr.Close() + defer outw.Close() + + inr, inw, err := os.Pipe() + if err != nil { + internalError(ws, "stdin:", err) + return + } + defer inr.Close() + defer inw.Close() + + proc, err := os.StartProcess(cmdPath, flag.Args(), &os.ProcAttr{ + Files: []*os.File{inr, outw, outw}, + }) + if err != nil { + internalError(ws, "start:", err) + return + } + + inr.Close() + outw.Close() + + stdoutDone := make(chan struct{}) + go pumpStdout(ws, outr, stdoutDone) + go ping(ws, stdoutDone) + + pumpStdin(ws, inw) + + // Some commands will exit when stdin is closed. + inw.Close() + + // Other commands need a bonk on the head. + if err := proc.Signal(os.Interrupt); err != nil { + log.Println("inter:", err) + } + + select { + case <-stdoutDone: + case <-time.After(time.Second): + // A bigger bonk on the head. + if err := proc.Signal(os.Kill); err != nil { + log.Println("term:", err) + } + <-stdoutDone + } + + if _, err := proc.Wait(); err != nil { + log.Println("wait:", err) + } +} + +func serveHome(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/" { + http.Error(w, "Not found", 404) + return + } + if r.Method != "GET" { + http.Error(w, "Method not allowed", 405) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + homeTempl.Execute(w, r.Host) +} + +func main() { + flag.Parse() + if len(flag.Args()) < 1 { + log.Fatal("must specify at least one argument") + } + var err error + cmdPath, err = exec.LookPath(flag.Args()[0]) + if err != nil { + log.Fatal(err) + } + http.HandleFunc("/", serveHome) + http.HandleFunc("/ws", serveWs) + log.Fatal(http.ListenAndServe(*addr, nil)) +} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/README.md b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/README.md new file mode 100644 index 0000000000..6ad79ed76a --- /dev/null +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/README.md @@ -0,0 +1,17 @@ +# Client and server example + +This example shows a simple client and server. + +The server echoes messages sent to it. The client sends a message every second +and prints all messages received. + +To run the example, start the server: + + $ go run server.go + +Next, start the client: + + $ go run client.go + +The server includes a simple web client. To use the client, open +http://127.0.0.1:8080 in the browser and follow the instructions on the page. diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/client.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/client.go new file mode 100644 index 0000000000..998d54462b --- /dev/null +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/client.go @@ -0,0 +1,55 @@ +// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "flag" + "log" + "net/url" + "time" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/gorilla/websocket" +) + +var addr = flag.String("addr", "localhost:8080", "http service address") + +func main() { + flag.Parse() + log.SetFlags(0) + + u := url.URL{Scheme: "ws", Host: *addr, Path: "/echo"} + log.Printf("connecting to %s", u.String()) + + c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) + if err != nil { + log.Fatal("dial:", err) + } + defer c.Close() + + go func() { + defer c.Close() + for { + _, message, err := c.ReadMessage() + if err != nil { + log.Println("read:", err) + break + } + log.Printf("recv: %s", message) + } + }() + + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + + for t := range ticker.C { + err := c.WriteMessage(websocket.TextMessage, []byte(t.String())) + if err != nil { + log.Println("write:", err) + break + } + } +} diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/server.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/server.go new file mode 100644 index 0000000000..87f14ceb51 --- /dev/null +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/echo/server.go @@ -0,0 +1,132 @@ +// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "flag" + "html/template" + "log" + "net/http" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/gorilla/websocket" +) + +var addr = flag.String("addr", "localhost:8080", "http service address") + +var upgrader = websocket.Upgrader{} // use default options + +func echo(w http.ResponseWriter, r *http.Request) { + c, err := upgrader.Upgrade(w, r, nil) + if err != nil { + log.Print("upgrade:", err) + return + } + defer c.Close() + for { + mt, message, err := c.ReadMessage() + if err != nil { + log.Println("read:", err) + break + } + log.Printf("recv: %s", message) + err = c.WriteMessage(mt, message) + if err != nil { + log.Println("write:", err) + break + } + } +} + +func home(w http.ResponseWriter, r *http.Request) { + homeTemplate.Execute(w, "ws://"+r.Host+"/echo") +} + +func main() { + flag.Parse() + log.SetFlags(0) + http.HandleFunc("/echo", echo) + http.HandleFunc("/", home) + log.Fatal(http.ListenAndServe(*addr, nil)) +} + +var homeTemplate = template.Must(template.New("").Parse(` + + + + + + + +
    +

    Click "Open" to create a connection to the server, +"Send" to send a message to the server and "Close" to close the connection. +You can change the message and send multiple times. +

    +

    + + +

    + +

    +
    +
    +
    + + +`)) diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/main.go b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/main.go index a2c7b85fab..04244bc0f0 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/main.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/examples/filewatch/main.go @@ -14,7 +14,7 @@ import ( "text/template" "time" - "github.com/gorilla/websocket" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/gorilla/websocket" ) const ( diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/json.go b/Godeps/_workspace/src/github.com/gorilla/websocket/json.go index 18e62f2256..4f0e36875a 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/json.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/json.go @@ -48,9 +48,7 @@ func (c *Conn) ReadJSON(v interface{}) error { } err = json.NewDecoder(r).Decode(v) if err == io.EOF { - // Decode returns io.EOF when the message is empty or all whitespace. - // Convert to io.ErrUnexpectedEOF so that application can distinguish - // between an error reading the JSON value and the connection closing. + // One value is expected in the message. err = io.ErrUnexpectedEOF } return err diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/json_test.go b/Godeps/_workspace/src/github.com/gorilla/websocket/json_test.go index 1b7a5ec8bd..61100e481a 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/json_test.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/json_test.go @@ -38,7 +38,7 @@ func TestJSON(t *testing.T) { } } -func TestPartialJsonRead(t *testing.T) { +func TestPartialJSONRead(t *testing.T) { var buf bytes.Buffer c := fakeNetConn{&buf, &buf} wc := newConn(c, true, 1024, 1024) @@ -87,7 +87,7 @@ func TestPartialJsonRead(t *testing.T) { } err = rc.ReadJSON(&v) - if err != io.EOF { + if _, ok := err.(*CloseError); !ok { t.Error("final", err) } } diff --git a/Godeps/_workspace/src/github.com/gorilla/websocket/server.go b/Godeps/_workspace/src/github.com/gorilla/websocket/server.go index e56a004933..3a9805f026 100644 --- a/Godeps/_workspace/src/github.com/gorilla/websocket/server.go +++ b/Godeps/_workspace/src/github.com/gorilla/websocket/server.go @@ -93,6 +93,9 @@ func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header // request. Use the responseHeader to specify cookies (Set-Cookie) and the // application negotiated subprotocol (Sec-Websocket-Protocol). func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { + if r.Method != "GET" { + return u.returnError(w, r, http.StatusMethodNotAllowed, "websocket: method not GET") + } if values := r.Header["Sec-Websocket-Version"]; len(values) == 0 || values[0] != "13" { return u.returnError(w, r, http.StatusBadRequest, "websocket: version != 13") } diff --git a/Godeps/_workspace/src/github.com/lib/pq/.travis.yml b/Godeps/_workspace/src/github.com/lib/pq/.travis.yml index 9bf6837306..6b8eb405ba 100644 --- a/Godeps/_workspace/src/github.com/lib/pq/.travis.yml +++ b/Godeps/_workspace/src/github.com/lib/pq/.travis.yml @@ -5,6 +5,7 @@ go: - 1.2 - 1.3 - 1.4 + - 1.5 - tip before_install: diff --git a/Godeps/_workspace/src/github.com/lib/pq/bench_test.go b/Godeps/_workspace/src/github.com/lib/pq/bench_test.go index e71f41d069..8ceadc69be 100644 --- a/Godeps/_workspace/src/github.com/lib/pq/bench_test.go +++ b/Godeps/_workspace/src/github.com/lib/pq/bench_test.go @@ -17,7 +17,7 @@ import ( "testing" "time" - "github.com/lib/pq/oid" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/lib/pq/oid" ) var ( diff --git a/Godeps/_workspace/src/github.com/lib/pq/buf.go b/Godeps/_workspace/src/github.com/lib/pq/buf.go index e7ff577719..fd7a3c5739 100644 --- a/Godeps/_workspace/src/github.com/lib/pq/buf.go +++ b/Godeps/_workspace/src/github.com/lib/pq/buf.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/binary" - "github.com/lib/pq/oid" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/lib/pq/oid" ) type readBuf []byte @@ -21,6 +21,7 @@ func (b *readBuf) oid() (n oid.Oid) { return } +// N.B: this is actually an unsigned 16-bit integer, unlike int32 func (b *readBuf) int16() (n int) { n = int(binary.BigEndian.Uint16(*b)) *b = (*b)[2:] diff --git a/Godeps/_workspace/src/github.com/lib/pq/conn.go b/Godeps/_workspace/src/github.com/lib/pq/conn.go index 40a630d74e..7b9aa5dc9a 100644 --- a/Godeps/_workspace/src/github.com/lib/pq/conn.go +++ b/Godeps/_workspace/src/github.com/lib/pq/conn.go @@ -22,7 +22,7 @@ import ( "time" "unicode" - "github.com/lib/pq/oid" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/lib/pq/oid" ) // Common error types @@ -1369,6 +1369,10 @@ func (rs *rows) Next(dest []driver.Value) (err error) { return io.EOF case 'D': n := rs.rb.int16() + if err != nil { + conn.bad = true + errorf("unexpected DataRow after error %s", err) + } if n < len(dest) { dest = dest[:n] } @@ -1622,6 +1626,10 @@ func (cn *conn) readExecuteResponse(protocolState string) (res driver.Result, co t, r := cn.recv1() switch t { case 'C': + if err != nil { + cn.bad = true + errorf("unexpected CommandComplete after error %s", err) + } res, commandTag = cn.parseComplete(r.string()) case 'Z': cn.processReadyForQuery(r) @@ -1629,6 +1637,10 @@ func (cn *conn) readExecuteResponse(protocolState string) (res driver.Result, co case 'E': err = parseError(r) case 'T', 'D', 'I': + if err != nil { + cn.bad = true + errorf("unexpected %q after error %s", t, err) + } // ignore any results default: cn.bad = true diff --git a/Godeps/_workspace/src/github.com/lib/pq/copy.go b/Godeps/_workspace/src/github.com/lib/pq/copy.go index e44fa48a51..101f111330 100644 --- a/Godeps/_workspace/src/github.com/lib/pq/copy.go +++ b/Godeps/_workspace/src/github.com/lib/pq/copy.go @@ -215,9 +215,7 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) { } if len(v) == 0 { - err = ci.Close() - ci.closed = true - return nil, err + return nil, ci.Close() } numValues := len(v) @@ -240,9 +238,10 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) { } func (ci *copyin) Close() (err error) { - if ci.closed { - return errCopyInClosed + if ci.closed { // Don't do anything, we're already closed + return nil } + ci.closed = true if ci.cn.bad { return driver.ErrBadConn diff --git a/Godeps/_workspace/src/github.com/lib/pq/encode.go b/Godeps/_workspace/src/github.com/lib/pq/encode.go index 88422eb3d6..a09f1a1642 100644 --- a/Godeps/_workspace/src/github.com/lib/pq/encode.go +++ b/Godeps/_workspace/src/github.com/lib/pq/encode.go @@ -12,7 +12,7 @@ import ( "sync" "time" - "github.com/lib/pq/oid" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/lib/pq/oid" ) func binaryEncode(parameterStatus *parameterStatus, x interface{}) []byte { diff --git a/Godeps/_workspace/src/github.com/lib/pq/encode_test.go b/Godeps/_workspace/src/github.com/lib/pq/encode_test.go index 97b6638864..3e2f490d7a 100644 --- a/Godeps/_workspace/src/github.com/lib/pq/encode_test.go +++ b/Godeps/_workspace/src/github.com/lib/pq/encode_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/lib/pq/oid" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/lib/pq/oid" ) func TestScanTimestamp(t *testing.T) { @@ -468,11 +468,11 @@ func TestBinaryByteSlicetoUUID(t *testing.T) { db := openTestConn(t) defer db.Close() - b := []byte{'\xa0','\xee','\xbc','\x99', - '\x9c', '\x0b', - '\x4e', '\xf8', - '\xbb', '\x00', '\x6b', - '\xb9', '\xbd', '\x38', '\x0a', '\x11'} + b := []byte{'\xa0', '\xee', '\xbc', '\x99', + '\x9c', '\x0b', + '\x4e', '\xf8', + '\xbb', '\x00', '\x6b', + '\xb9', '\xbd', '\x38', '\x0a', '\x11'} row := db.QueryRow("SELECT $1::uuid", b) var result string diff --git a/Godeps/_workspace/src/github.com/lib/pq/hstore/hstore_test.go b/Godeps/_workspace/src/github.com/lib/pq/hstore/hstore_test.go index c9c108fc34..219ba6626b 100644 --- a/Godeps/_workspace/src/github.com/lib/pq/hstore/hstore_test.go +++ b/Godeps/_workspace/src/github.com/lib/pq/hstore/hstore_test.go @@ -5,7 +5,7 @@ import ( "os" "testing" - _ "github.com/lib/pq" + _ "github.com/mattermost/platform/Godeps/_workspace/src/github.com/lib/pq" ) type Fatalistic interface { diff --git a/Godeps/_workspace/src/github.com/lib/pq/oid/gen.go b/Godeps/_workspace/src/github.com/lib/pq/oid/gen.go index cd4aea8086..d599420477 100644 --- a/Godeps/_workspace/src/github.com/lib/pq/oid/gen.go +++ b/Godeps/_workspace/src/github.com/lib/pq/oid/gen.go @@ -11,7 +11,7 @@ import ( "os" "os/exec" - _ "github.com/lib/pq" + _ "github.com/mattermost/platform/Godeps/_workspace/src/github.com/lib/pq" ) func main() { diff --git a/Godeps/_workspace/src/github.com/mssola/user_agent/bot.go b/Godeps/_workspace/src/github.com/mssola/user_agent/bot.go index cc993d8fe0..df0b6ccdaa 100644 --- a/Godeps/_workspace/src/github.com/mssola/user_agent/bot.go +++ b/Godeps/_workspace/src/github.com/mssola/user_agent/bot.go @@ -9,6 +9,8 @@ import ( "strings" ) +var botFromSiteRegexp = regexp.MustCompile("http://.+\\.\\w+") + // Get the name of the bot from the website that may be in the given comment. If // there is no website in the comment, then an empty string is returned. func getFromSite(comment []string) string { @@ -23,8 +25,7 @@ func getFromSite(comment []string) string { } // Pick the site. - re := regexp.MustCompile("http://.+\\.\\w+") - results := re.FindStringSubmatch(comment[idx]) + results := botFromSiteRegexp.FindStringSubmatch(comment[idx]) if len(results) == 1 { // If it's a simple comment, just return the name of the site. if idx == 0 { diff --git a/Godeps/_workspace/src/github.com/mssola/user_agent/browser.go b/Godeps/_workspace/src/github.com/mssola/user_agent/browser.go index c5612db7b8..a45c8ab7f1 100644 --- a/Godeps/_workspace/src/github.com/mssola/user_agent/browser.go +++ b/Godeps/_workspace/src/github.com/mssola/user_agent/browser.go @@ -9,6 +9,8 @@ import ( "strings" ) +var ie11Regexp = regexp.MustCompile("^rv:(.+)$") + // A struct containing all the information that we might be // interested from the browser. type Browser struct { @@ -75,9 +77,8 @@ func (p *UserAgent) detectBrowser(sections []section) { // This is the new user agent from Internet Explorer 11. p.browser.Engine = "Trident" p.browser.Name = "Internet Explorer" - reg, _ := regexp.Compile("^rv:(.+)$") for _, c := range sections[0].comment { - version := reg.FindStringSubmatch(c) + version := ie11Regexp.FindStringSubmatch(c) if len(version) > 0 { p.browser.Version = version[1] return diff --git a/Godeps/_workspace/src/github.com/pborman/uuid/CONTRIBUTORS b/Godeps/_workspace/src/github.com/pborman/uuid/CONTRIBUTORS new file mode 100644 index 0000000000..b382a04eda --- /dev/null +++ b/Godeps/_workspace/src/github.com/pborman/uuid/CONTRIBUTORS @@ -0,0 +1 @@ +Paul Borman diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/LICENSE b/Godeps/_workspace/src/github.com/pborman/uuid/LICENSE similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/LICENSE rename to Godeps/_workspace/src/github.com/pborman/uuid/LICENSE diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/dce.go b/Godeps/_workspace/src/github.com/pborman/uuid/dce.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/dce.go rename to Godeps/_workspace/src/github.com/pborman/uuid/dce.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/doc.go b/Godeps/_workspace/src/github.com/pborman/uuid/doc.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/doc.go rename to Godeps/_workspace/src/github.com/pborman/uuid/doc.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/hash.go b/Godeps/_workspace/src/github.com/pborman/uuid/hash.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/hash.go rename to Godeps/_workspace/src/github.com/pborman/uuid/hash.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/json.go b/Godeps/_workspace/src/github.com/pborman/uuid/json.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/json.go rename to Godeps/_workspace/src/github.com/pborman/uuid/json.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/json_test.go b/Godeps/_workspace/src/github.com/pborman/uuid/json_test.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/json_test.go rename to Godeps/_workspace/src/github.com/pborman/uuid/json_test.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/node.go b/Godeps/_workspace/src/github.com/pborman/uuid/node.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/node.go rename to Godeps/_workspace/src/github.com/pborman/uuid/node.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/seq_test.go b/Godeps/_workspace/src/github.com/pborman/uuid/seq_test.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/seq_test.go rename to Godeps/_workspace/src/github.com/pborman/uuid/seq_test.go diff --git a/Godeps/_workspace/src/github.com/pborman/uuid/sql.go b/Godeps/_workspace/src/github.com/pborman/uuid/sql.go new file mode 100644 index 0000000000..2d7679e2af --- /dev/null +++ b/Godeps/_workspace/src/github.com/pborman/uuid/sql.go @@ -0,0 +1,40 @@ +// Copyright 2015 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "errors" + "fmt" +) + +// Scan implements sql.Scanner so UUIDs can be read from databases transparently +// Currently, database types that map to string and []byte are supported. Please +// consult database-specific driver documentation for matching types. +func (uuid *UUID) Scan(src interface{}) error { + switch src.(type) { + case string: + // see uuid.Parse for required string format + parsed := Parse(src.(string)) + + if parsed == nil { + return errors.New("Scan: invalid UUID format") + } + + *uuid = parsed + case []byte: + // assumes a simple slice of bytes, just check validity and store + u := UUID(src.([]byte)) + + if u.Variant() == Invalid { + return errors.New("Scan: invalid UUID format") + } + + *uuid = u + default: + return fmt.Errorf("Scan: unable to scan type %T into UUID", src) + } + + return nil +} diff --git a/Godeps/_workspace/src/github.com/pborman/uuid/sql_test.go b/Godeps/_workspace/src/github.com/pborman/uuid/sql_test.go new file mode 100644 index 0000000000..d643567eeb --- /dev/null +++ b/Godeps/_workspace/src/github.com/pborman/uuid/sql_test.go @@ -0,0 +1,53 @@ +// Copyright 2015 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "strings" + "testing" +) + +func TestScan(t *testing.T) { + var stringTest string = "f47ac10b-58cc-0372-8567-0e02b2c3d479" + var byteTest []byte = Parse(stringTest) + var badTypeTest int = 6 + var invalidTest string = "f47ac10b-58cc-0372-8567-0e02b2c3d4" + var invalidByteTest []byte = Parse(invalidTest) + + var uuid UUID + err := (&uuid).Scan(stringTest) + if err != nil { + t.Fatal(err) + } + + err = (&uuid).Scan(byteTest) + if err != nil { + t.Fatal(err) + } + + err = (&uuid).Scan(badTypeTest) + if err == nil { + t.Error("int correctly parsed and shouldn't have") + } + if !strings.Contains(err.Error(), "unable to scan type") { + t.Error("attempting to parse an int returned an incorrect error message") + } + + err = (&uuid).Scan(invalidTest) + if err == nil { + t.Error("invalid uuid was parsed without error") + } + if !strings.Contains(err.Error(), "invalid UUID") { + t.Error("attempting to parse an invalid UUID returned an incorrect error message") + } + + err = (&uuid).Scan(invalidByteTest) + if err == nil { + t.Error("invalid byte uuid was parsed without error") + } + if !strings.Contains(err.Error(), "invalid UUID") { + t.Error("attempting to parse an invalid byte UUID returned an incorrect error message") + } +} diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/time.go b/Godeps/_workspace/src/github.com/pborman/uuid/time.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/time.go rename to Godeps/_workspace/src/github.com/pborman/uuid/time.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/util.go b/Godeps/_workspace/src/github.com/pborman/uuid/util.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/util.go rename to Godeps/_workspace/src/github.com/pborman/uuid/util.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/uuid.go b/Godeps/_workspace/src/github.com/pborman/uuid/uuid.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/uuid.go rename to Godeps/_workspace/src/github.com/pborman/uuid/uuid.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/uuid_test.go b/Godeps/_workspace/src/github.com/pborman/uuid/uuid_test.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/uuid_test.go rename to Godeps/_workspace/src/github.com/pborman/uuid/uuid_test.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/version1.go b/Godeps/_workspace/src/github.com/pborman/uuid/version1.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/version1.go rename to Godeps/_workspace/src/github.com/pborman/uuid/version1.go diff --git a/Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/version4.go b/Godeps/_workspace/src/github.com/pborman/uuid/version4.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go-uuid/uuid/version4.go rename to Godeps/_workspace/src/github.com/pborman/uuid/version4.go diff --git a/Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib/difflib.go b/Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib/difflib.go new file mode 100644 index 0000000000..64cc40fe1d --- /dev/null +++ b/Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib/difflib.go @@ -0,0 +1,758 @@ +// Package difflib is a partial port of Python difflib module. +// +// It provides tools to compare sequences of strings and generate textual diffs. +// +// The following class and functions have been ported: +// +// - SequenceMatcher +// +// - unified_diff +// +// - context_diff +// +// Getting unified diffs was the main goal of the port. Keep in mind this code +// is mostly suitable to output text differences in a human friendly way, there +// are no guarantees generated diffs are consumable by patch(1). +package difflib + +import ( + "bufio" + "bytes" + "fmt" + "io" + "strings" +) + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +func calculateRatio(matches, length int) float64 { + if length > 0 { + return 2.0 * float64(matches) / float64(length) + } + return 1.0 +} + +type Match struct { + A int + B int + Size int +} + +type OpCode struct { + Tag byte + I1 int + I2 int + J1 int + J2 int +} + +// SequenceMatcher compares sequence of strings. The basic +// algorithm predates, and is a little fancier than, an algorithm +// published in the late 1980's by Ratcliff and Obershelp under the +// hyperbolic name "gestalt pattern matching". The basic idea is to find +// the longest contiguous matching subsequence that contains no "junk" +// elements (R-O doesn't address junk). The same idea is then applied +// recursively to the pieces of the sequences to the left and to the right +// of the matching subsequence. This does not yield minimal edit +// sequences, but does tend to yield matches that "look right" to people. +// +// SequenceMatcher tries to compute a "human-friendly diff" between two +// sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the +// longest *contiguous* & junk-free matching subsequence. That's what +// catches peoples' eyes. The Windows(tm) windiff has another interesting +// notion, pairing up elements that appear uniquely in each sequence. +// That, and the method here, appear to yield more intuitive difference +// reports than does diff. This method appears to be the least vulnerable +// to synching up on blocks of "junk lines", though (like blank lines in +// ordinary text files, or maybe "

    " lines in HTML files). That may be +// because this is the only method of the 3 that has a *concept* of +// "junk" . +// +// Timing: Basic R-O is cubic time worst case and quadratic time expected +// case. SequenceMatcher is quadratic time for the worst case and has +// expected-case behavior dependent in a complicated way on how many +// elements the sequences have in common; best case time is linear. +type SequenceMatcher struct { + a []string + b []string + b2j map[string][]int + IsJunk func(string) bool + autoJunk bool + bJunk map[string]struct{} + matchingBlocks []Match + fullBCount map[string]int + bPopular map[string]struct{} + opCodes []OpCode +} + +func NewMatcher(a, b []string) *SequenceMatcher { + m := SequenceMatcher{autoJunk: true} + m.SetSeqs(a, b) + return &m +} + +func NewMatcherWithJunk(a, b []string, autoJunk bool, + isJunk func(string) bool) *SequenceMatcher { + + m := SequenceMatcher{IsJunk: isJunk, autoJunk: autoJunk} + m.SetSeqs(a, b) + return &m +} + +// Set two sequences to be compared. +func (m *SequenceMatcher) SetSeqs(a, b []string) { + m.SetSeq1(a) + m.SetSeq2(b) +} + +// Set the first sequence to be compared. The second sequence to be compared is +// not changed. +// +// SequenceMatcher computes and caches detailed information about the second +// sequence, so if you want to compare one sequence S against many sequences, +// use .SetSeq2(s) once and call .SetSeq1(x) repeatedly for each of the other +// sequences. +// +// See also SetSeqs() and SetSeq2(). +func (m *SequenceMatcher) SetSeq1(a []string) { + if &a == &m.a { + return + } + m.a = a + m.matchingBlocks = nil + m.opCodes = nil +} + +// Set the second sequence to be compared. The first sequence to be compared is +// not changed. +func (m *SequenceMatcher) SetSeq2(b []string) { + if &b == &m.b { + return + } + m.b = b + m.matchingBlocks = nil + m.opCodes = nil + m.fullBCount = nil + m.chainB() +} + +func (m *SequenceMatcher) chainB() { + // Populate line -> index mapping + b2j := map[string][]int{} + for i, s := range m.b { + indices := b2j[s] + indices = append(indices, i) + b2j[s] = indices + } + + // Purge junk elements + m.bJunk = map[string]struct{}{} + if m.IsJunk != nil { + junk := m.bJunk + for s, _ := range b2j { + if m.IsJunk(s) { + junk[s] = struct{}{} + } + } + for s, _ := range junk { + delete(b2j, s) + } + } + + // Purge remaining popular elements + popular := map[string]struct{}{} + n := len(m.b) + if m.autoJunk && n >= 200 { + ntest := n/100 + 1 + for s, indices := range b2j { + if len(indices) > ntest { + popular[s] = struct{}{} + } + } + for s, _ := range popular { + delete(b2j, s) + } + } + m.bPopular = popular + m.b2j = b2j +} + +func (m *SequenceMatcher) isBJunk(s string) bool { + _, ok := m.bJunk[s] + return ok +} + +// Find longest matching block in a[alo:ahi] and b[blo:bhi]. +// +// If IsJunk is not defined: +// +// Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where +// alo <= i <= i+k <= ahi +// blo <= j <= j+k <= bhi +// and for all (i',j',k') meeting those conditions, +// k >= k' +// i <= i' +// and if i == i', j <= j' +// +// In other words, of all maximal matching blocks, return one that +// starts earliest in a, and of all those maximal matching blocks that +// start earliest in a, return the one that starts earliest in b. +// +// If IsJunk is defined, first the longest matching block is +// determined as above, but with the additional restriction that no +// junk element appears in the block. Then that block is extended as +// far as possible by matching (only) junk elements on both sides. So +// the resulting block never matches on junk except as identical junk +// happens to be adjacent to an "interesting" match. +// +// If no blocks match, return (alo, blo, 0). +func (m *SequenceMatcher) findLongestMatch(alo, ahi, blo, bhi int) Match { + // CAUTION: stripping common prefix or suffix would be incorrect. + // E.g., + // ab + // acab + // Longest matching block is "ab", but if common prefix is + // stripped, it's "a" (tied with "b"). UNIX(tm) diff does so + // strip, so ends up claiming that ab is changed to acab by + // inserting "ca" in the middle. That's minimal but unintuitive: + // "it's obvious" that someone inserted "ac" at the front. + // Windiff ends up at the same place as diff, but by pairing up + // the unique 'b's and then matching the first two 'a's. + besti, bestj, bestsize := alo, blo, 0 + + // find longest junk-free match + // during an iteration of the loop, j2len[j] = length of longest + // junk-free match ending with a[i-1] and b[j] + j2len := map[int]int{} + for i := alo; i != ahi; i++ { + // look at all instances of a[i] in b; note that because + // b2j has no junk keys, the loop is skipped if a[i] is junk + newj2len := map[int]int{} + for _, j := range m.b2j[m.a[i]] { + // a[i] matches b[j] + if j < blo { + continue + } + if j >= bhi { + break + } + k := j2len[j-1] + 1 + newj2len[j] = k + if k > bestsize { + besti, bestj, bestsize = i-k+1, j-k+1, k + } + } + j2len = newj2len + } + + // Extend the best by non-junk elements on each end. In particular, + // "popular" non-junk elements aren't in b2j, which greatly speeds + // the inner loop above, but also means "the best" match so far + // doesn't contain any junk *or* popular non-junk elements. + for besti > alo && bestj > blo && !m.isBJunk(m.b[bestj-1]) && + m.a[besti-1] == m.b[bestj-1] { + besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 + } + for besti+bestsize < ahi && bestj+bestsize < bhi && + !m.isBJunk(m.b[bestj+bestsize]) && + m.a[besti+bestsize] == m.b[bestj+bestsize] { + bestsize += 1 + } + + // Now that we have a wholly interesting match (albeit possibly + // empty!), we may as well suck up the matching junk on each + // side of it too. Can't think of a good reason not to, and it + // saves post-processing the (possibly considerable) expense of + // figuring out what to do with it. In the case of an empty + // interesting match, this is clearly the right thing to do, + // because no other kind of match is possible in the regions. + for besti > alo && bestj > blo && m.isBJunk(m.b[bestj-1]) && + m.a[besti-1] == m.b[bestj-1] { + besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 + } + for besti+bestsize < ahi && bestj+bestsize < bhi && + m.isBJunk(m.b[bestj+bestsize]) && + m.a[besti+bestsize] == m.b[bestj+bestsize] { + bestsize += 1 + } + + return Match{A: besti, B: bestj, Size: bestsize} +} + +// Return list of triples describing matching subsequences. +// +// Each triple is of the form (i, j, n), and means that +// a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in +// i and in j. It's also guaranteed that if (i, j, n) and (i', j', n') are +// adjacent triples in the list, and the second is not the last triple in the +// list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe +// adjacent equal blocks. +// +// The last triple is a dummy, (len(a), len(b), 0), and is the only +// triple with n==0. +func (m *SequenceMatcher) GetMatchingBlocks() []Match { + if m.matchingBlocks != nil { + return m.matchingBlocks + } + + var matchBlocks func(alo, ahi, blo, bhi int, matched []Match) []Match + matchBlocks = func(alo, ahi, blo, bhi int, matched []Match) []Match { + match := m.findLongestMatch(alo, ahi, blo, bhi) + i, j, k := match.A, match.B, match.Size + if match.Size > 0 { + if alo < i && blo < j { + matched = matchBlocks(alo, i, blo, j, matched) + } + matched = append(matched, match) + if i+k < ahi && j+k < bhi { + matched = matchBlocks(i+k, ahi, j+k, bhi, matched) + } + } + return matched + } + matched := matchBlocks(0, len(m.a), 0, len(m.b), nil) + + // It's possible that we have adjacent equal blocks in the + // matching_blocks list now. + nonAdjacent := []Match{} + i1, j1, k1 := 0, 0, 0 + for _, b := range matched { + // Is this block adjacent to i1, j1, k1? + i2, j2, k2 := b.A, b.B, b.Size + if i1+k1 == i2 && j1+k1 == j2 { + // Yes, so collapse them -- this just increases the length of + // the first block by the length of the second, and the first + // block so lengthened remains the block to compare against. + k1 += k2 + } else { + // Not adjacent. Remember the first block (k1==0 means it's + // the dummy we started with), and make the second block the + // new block to compare against. + if k1 > 0 { + nonAdjacent = append(nonAdjacent, Match{i1, j1, k1}) + } + i1, j1, k1 = i2, j2, k2 + } + } + if k1 > 0 { + nonAdjacent = append(nonAdjacent, Match{i1, j1, k1}) + } + + nonAdjacent = append(nonAdjacent, Match{len(m.a), len(m.b), 0}) + m.matchingBlocks = nonAdjacent + return m.matchingBlocks +} + +// Return list of 5-tuples describing how to turn a into b. +// +// Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple +// has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the +// tuple preceding it, and likewise for j1 == the previous j2. +// +// The tags are characters, with these meanings: +// +// 'r' (replace): a[i1:i2] should be replaced by b[j1:j2] +// +// 'd' (delete): a[i1:i2] should be deleted, j1==j2 in this case. +// +// 'i' (insert): b[j1:j2] should be inserted at a[i1:i1], i1==i2 in this case. +// +// 'e' (equal): a[i1:i2] == b[j1:j2] +func (m *SequenceMatcher) GetOpCodes() []OpCode { + if m.opCodes != nil { + return m.opCodes + } + i, j := 0, 0 + matching := m.GetMatchingBlocks() + opCodes := make([]OpCode, 0, len(matching)) + for _, m := range matching { + // invariant: we've pumped out correct diffs to change + // a[:i] into b[:j], and the next matching block is + // a[ai:ai+size] == b[bj:bj+size]. So we need to pump + // out a diff to change a[i:ai] into b[j:bj], pump out + // the matching block, and move (i,j) beyond the match + ai, bj, size := m.A, m.B, m.Size + tag := byte(0) + if i < ai && j < bj { + tag = 'r' + } else if i < ai { + tag = 'd' + } else if j < bj { + tag = 'i' + } + if tag > 0 { + opCodes = append(opCodes, OpCode{tag, i, ai, j, bj}) + } + i, j = ai+size, bj+size + // the list of matching blocks is terminated by a + // sentinel with size 0 + if size > 0 { + opCodes = append(opCodes, OpCode{'e', ai, i, bj, j}) + } + } + m.opCodes = opCodes + return m.opCodes +} + +// Isolate change clusters by eliminating ranges with no changes. +// +// Return a generator of groups with up to n lines of context. +// Each group is in the same format as returned by GetOpCodes(). +func (m *SequenceMatcher) GetGroupedOpCodes(n int) [][]OpCode { + if n < 0 { + n = 3 + } + codes := m.GetOpCodes() + if len(codes) == 0 { + codes = []OpCode{OpCode{'e', 0, 1, 0, 1}} + } + // Fixup leading and trailing groups if they show no changes. + if codes[0].Tag == 'e' { + c := codes[0] + i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 + codes[0] = OpCode{c.Tag, max(i1, i2-n), i2, max(j1, j2-n), j2} + } + if codes[len(codes)-1].Tag == 'e' { + c := codes[len(codes)-1] + i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 + codes[len(codes)-1] = OpCode{c.Tag, i1, min(i2, i1+n), j1, min(j2, j1+n)} + } + nn := n + n + groups := [][]OpCode{} + group := []OpCode{} + for _, c := range codes { + i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 + // End the current group and start a new one whenever + // there is a large range with no changes. + if c.Tag == 'e' && i2-i1 > nn { + group = append(group, OpCode{c.Tag, i1, min(i2, i1+n), + j1, min(j2, j1+n)}) + groups = append(groups, group) + group = []OpCode{} + i1, j1 = max(i1, i2-n), max(j1, j2-n) + } + group = append(group, OpCode{c.Tag, i1, i2, j1, j2}) + } + if len(group) > 0 && !(len(group) == 1 && group[0].Tag == 'e') { + groups = append(groups, group) + } + return groups +} + +// Return a measure of the sequences' similarity (float in [0,1]). +// +// Where T is the total number of elements in both sequences, and +// M is the number of matches, this is 2.0*M / T. +// Note that this is 1 if the sequences are identical, and 0 if +// they have nothing in common. +// +// .Ratio() is expensive to compute if you haven't already computed +// .GetMatchingBlocks() or .GetOpCodes(), in which case you may +// want to try .QuickRatio() or .RealQuickRation() first to get an +// upper bound. +func (m *SequenceMatcher) Ratio() float64 { + matches := 0 + for _, m := range m.GetMatchingBlocks() { + matches += m.Size + } + return calculateRatio(matches, len(m.a)+len(m.b)) +} + +// Return an upper bound on ratio() relatively quickly. +// +// This isn't defined beyond that it is an upper bound on .Ratio(), and +// is faster to compute. +func (m *SequenceMatcher) QuickRatio() float64 { + // viewing a and b as multisets, set matches to the cardinality + // of their intersection; this counts the number of matches + // without regard to order, so is clearly an upper bound + if m.fullBCount == nil { + m.fullBCount = map[string]int{} + for _, s := range m.b { + m.fullBCount[s] = m.fullBCount[s] + 1 + } + } + + // avail[x] is the number of times x appears in 'b' less the + // number of times we've seen it in 'a' so far ... kinda + avail := map[string]int{} + matches := 0 + for _, s := range m.a { + n, ok := avail[s] + if !ok { + n = m.fullBCount[s] + } + avail[s] = n - 1 + if n > 0 { + matches += 1 + } + } + return calculateRatio(matches, len(m.a)+len(m.b)) +} + +// Return an upper bound on ratio() very quickly. +// +// This isn't defined beyond that it is an upper bound on .Ratio(), and +// is faster to compute than either .Ratio() or .QuickRatio(). +func (m *SequenceMatcher) RealQuickRatio() float64 { + la, lb := len(m.a), len(m.b) + return calculateRatio(min(la, lb), la+lb) +} + +// Convert range to the "ed" format +func formatRangeUnified(start, stop int) string { + // Per the diff spec at http://www.unix.org/single_unix_specification/ + beginning := start + 1 // lines start numbering with one + length := stop - start + if length == 1 { + return fmt.Sprintf("%d", beginning) + } + if length == 0 { + beginning -= 1 // empty ranges begin at line just before the range + } + return fmt.Sprintf("%d,%d", beginning, length) +} + +// Unified diff parameters +type UnifiedDiff struct { + A []string // First sequence lines + FromFile string // First file name + FromDate string // First file time + B []string // Second sequence lines + ToFile string // Second file name + ToDate string // Second file time + Eol string // Headers end of line, defaults to LF + Context int // Number of context lines +} + +// Compare two sequences of lines; generate the delta as a unified diff. +// +// Unified diffs are a compact way of showing line changes and a few +// lines of context. The number of context lines is set by 'n' which +// defaults to three. +// +// By default, the diff control lines (those with ---, +++, or @@) are +// created with a trailing newline. This is helpful so that inputs +// created from file.readlines() result in diffs that are suitable for +// file.writelines() since both the inputs and outputs have trailing +// newlines. +// +// For inputs that do not have trailing newlines, set the lineterm +// argument to "" so that the output will be uniformly newline free. +// +// The unidiff format normally has a header for filenames and modification +// times. Any or all of these may be specified using strings for +// 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. +// The modification times are normally expressed in the ISO 8601 format. +func WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error { + buf := bufio.NewWriter(writer) + defer buf.Flush() + w := func(format string, args ...interface{}) error { + _, err := buf.WriteString(fmt.Sprintf(format, args...)) + return err + } + + if len(diff.Eol) == 0 { + diff.Eol = "\n" + } + + started := false + m := NewMatcher(diff.A, diff.B) + for _, g := range m.GetGroupedOpCodes(diff.Context) { + if !started { + started = true + fromDate := "" + if len(diff.FromDate) > 0 { + fromDate = "\t" + diff.FromDate + } + toDate := "" + if len(diff.ToDate) > 0 { + toDate = "\t" + diff.ToDate + } + err := w("--- %s%s%s", diff.FromFile, fromDate, diff.Eol) + if err != nil { + return err + } + err = w("+++ %s%s%s", diff.ToFile, toDate, diff.Eol) + if err != nil { + return err + } + } + first, last := g[0], g[len(g)-1] + range1 := formatRangeUnified(first.I1, last.I2) + range2 := formatRangeUnified(first.J1, last.J2) + if err := w("@@ -%s +%s @@%s", range1, range2, diff.Eol); err != nil { + return err + } + for _, c := range g { + i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 + if c.Tag == 'e' { + for _, line := range diff.A[i1:i2] { + if err := w(" " + line); err != nil { + return err + } + } + continue + } + if c.Tag == 'r' || c.Tag == 'd' { + for _, line := range diff.A[i1:i2] { + if err := w("-" + line); err != nil { + return err + } + } + } + if c.Tag == 'r' || c.Tag == 'i' { + for _, line := range diff.B[j1:j2] { + if err := w("+" + line); err != nil { + return err + } + } + } + } + } + return nil +} + +// Like WriteUnifiedDiff but returns the diff a string. +func GetUnifiedDiffString(diff UnifiedDiff) (string, error) { + w := &bytes.Buffer{} + err := WriteUnifiedDiff(w, diff) + return string(w.Bytes()), err +} + +// Convert range to the "ed" format. +func formatRangeContext(start, stop int) string { + // Per the diff spec at http://www.unix.org/single_unix_specification/ + beginning := start + 1 // lines start numbering with one + length := stop - start + if length == 0 { + beginning -= 1 // empty ranges begin at line just before the range + } + if length <= 1 { + return fmt.Sprintf("%d", beginning) + } + return fmt.Sprintf("%d,%d", beginning, beginning+length-1) +} + +type ContextDiff UnifiedDiff + +// Compare two sequences of lines; generate the delta as a context diff. +// +// Context diffs are a compact way of showing line changes and a few +// lines of context. The number of context lines is set by diff.Context +// which defaults to three. +// +// By default, the diff control lines (those with *** or ---) are +// created with a trailing newline. +// +// For inputs that do not have trailing newlines, set the diff.Eol +// argument to "" so that the output will be uniformly newline free. +// +// The context diff format normally has a header for filenames and +// modification times. Any or all of these may be specified using +// strings for diff.FromFile, diff.ToFile, diff.FromDate, diff.ToDate. +// The modification times are normally expressed in the ISO 8601 format. +// If not specified, the strings default to blanks. +func WriteContextDiff(writer io.Writer, diff ContextDiff) error { + buf := bufio.NewWriter(writer) + defer buf.Flush() + var diffErr error + w := func(format string, args ...interface{}) { + _, err := buf.WriteString(fmt.Sprintf(format, args...)) + if diffErr == nil && err != nil { + diffErr = err + } + } + + if len(diff.Eol) == 0 { + diff.Eol = "\n" + } + + prefix := map[byte]string{ + 'i': "+ ", + 'd': "- ", + 'r': "! ", + 'e': " ", + } + + started := false + m := NewMatcher(diff.A, diff.B) + for _, g := range m.GetGroupedOpCodes(diff.Context) { + if !started { + started = true + fromDate := "" + if len(diff.FromDate) > 0 { + fromDate = "\t" + diff.FromDate + } + toDate := "" + if len(diff.ToDate) > 0 { + toDate = "\t" + diff.ToDate + } + w("*** %s%s%s", diff.FromFile, fromDate, diff.Eol) + w("--- %s%s%s", diff.ToFile, toDate, diff.Eol) + } + + first, last := g[0], g[len(g)-1] + w("***************" + diff.Eol) + + range1 := formatRangeContext(first.I1, last.I2) + w("*** %s ****%s", range1, diff.Eol) + for _, c := range g { + if c.Tag == 'r' || c.Tag == 'd' { + for _, cc := range g { + if cc.Tag == 'i' { + continue + } + for _, line := range diff.A[cc.I1:cc.I2] { + w(prefix[cc.Tag] + line) + } + } + break + } + } + + range2 := formatRangeContext(first.J1, last.J2) + w("--- %s ----%s", range2, diff.Eol) + for _, c := range g { + if c.Tag == 'r' || c.Tag == 'i' { + for _, cc := range g { + if cc.Tag == 'd' { + continue + } + for _, line := range diff.B[cc.J1:cc.J2] { + w(prefix[cc.Tag] + line) + } + } + break + } + } + } + return diffErr +} + +// Like WriteContextDiff but returns the diff a string. +func GetContextDiffString(diff ContextDiff) (string, error) { + w := &bytes.Buffer{} + err := WriteContextDiff(w, diff) + return string(w.Bytes()), err +} + +// Split a string on "\n" while preserving them. The output can be used +// as input for UnifiedDiff and ContextDiff structures. +func SplitLines(s string) []string { + lines := strings.SplitAfter(s, "\n") + lines[len(lines)-1] += "\n" + return lines +} diff --git a/Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib/difflib_test.go b/Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib/difflib_test.go new file mode 100644 index 0000000000..94670bea35 --- /dev/null +++ b/Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib/difflib_test.go @@ -0,0 +1,352 @@ +package difflib + +import ( + "bytes" + "fmt" + "math" + "reflect" + "strings" + "testing" +) + +func assertAlmostEqual(t *testing.T, a, b float64, places int) { + if math.Abs(a-b) > math.Pow10(-places) { + t.Errorf("%.7f != %.7f", a, b) + } +} + +func assertEqual(t *testing.T, a, b interface{}) { + if !reflect.DeepEqual(a, b) { + t.Errorf("%v != %v", a, b) + } +} + +func splitChars(s string) []string { + chars := make([]string, 0, len(s)) + // Assume ASCII inputs + for i := 0; i != len(s); i++ { + chars = append(chars, string(s[i])) + } + return chars +} + +func TestSequenceMatcherRatio(t *testing.T) { + s := NewMatcher(splitChars("abcd"), splitChars("bcde")) + assertEqual(t, s.Ratio(), 0.75) + assertEqual(t, s.QuickRatio(), 0.75) + assertEqual(t, s.RealQuickRatio(), 1.0) +} + +func TestGetOptCodes(t *testing.T) { + a := "qabxcd" + b := "abycdf" + s := NewMatcher(splitChars(a), splitChars(b)) + w := &bytes.Buffer{} + for _, op := range s.GetOpCodes() { + fmt.Fprintf(w, "%s a[%d:%d], (%s) b[%d:%d] (%s)\n", string(op.Tag), + op.I1, op.I2, a[op.I1:op.I2], op.J1, op.J2, b[op.J1:op.J2]) + } + result := string(w.Bytes()) + expected := `d a[0:1], (q) b[0:0] () +e a[1:3], (ab) b[0:2] (ab) +r a[3:4], (x) b[2:3] (y) +e a[4:6], (cd) b[3:5] (cd) +i a[6:6], () b[5:6] (f) +` + if expected != result { + t.Errorf("unexpected op codes: \n%s", result) + } +} + +func TestGroupedOpCodes(t *testing.T) { + a := []string{} + for i := 0; i != 39; i++ { + a = append(a, fmt.Sprintf("%02d", i)) + } + b := []string{} + b = append(b, a[:8]...) + b = append(b, " i") + b = append(b, a[8:19]...) + b = append(b, " x") + b = append(b, a[20:22]...) + b = append(b, a[27:34]...) + b = append(b, " y") + b = append(b, a[35:]...) + s := NewMatcher(a, b) + w := &bytes.Buffer{} + for _, g := range s.GetGroupedOpCodes(-1) { + fmt.Fprintf(w, "group\n") + for _, op := range g { + fmt.Fprintf(w, " %s, %d, %d, %d, %d\n", string(op.Tag), + op.I1, op.I2, op.J1, op.J2) + } + } + result := string(w.Bytes()) + expected := `group + e, 5, 8, 5, 8 + i, 8, 8, 8, 9 + e, 8, 11, 9, 12 +group + e, 16, 19, 17, 20 + r, 19, 20, 20, 21 + e, 20, 22, 21, 23 + d, 22, 27, 23, 23 + e, 27, 30, 23, 26 +group + e, 31, 34, 27, 30 + r, 34, 35, 30, 31 + e, 35, 38, 31, 34 +` + if expected != result { + t.Errorf("unexpected op codes: \n%s", result) + } +} + +func ExampleGetUnifiedDiffString() { + a := `one +two +three +four` + b := `zero +one +three +four` + diff := UnifiedDiff{ + A: SplitLines(a), + B: SplitLines(b), + FromFile: "Original", + FromDate: "2005-01-26 23:30:50", + ToFile: "Current", + ToDate: "2010-04-02 10:20:52", + Context: 3, + } + result, _ := GetUnifiedDiffString(diff) + fmt.Printf(strings.Replace(result, "\t", " ", -1)) + // Output: + // --- Original 2005-01-26 23:30:50 + // +++ Current 2010-04-02 10:20:52 + // @@ -1,4 +1,4 @@ + // +zero + // one + // -two + // three + // four +} + +func ExampleGetContextDiffString() { + a := `one +two +three +four` + b := `zero +one +tree +four` + diff := ContextDiff{ + A: SplitLines(a), + B: SplitLines(b), + FromFile: "Original", + ToFile: "Current", + Context: 3, + Eol: "\n", + } + result, _ := GetContextDiffString(diff) + fmt.Printf(strings.Replace(result, "\t", " ", -1)) + // Output: + // *** Original + // --- Current + // *************** + // *** 1,4 **** + // one + // ! two + // ! three + // four + // --- 1,4 ---- + // + zero + // one + // ! tree + // four +} + +func rep(s string, count int) string { + return strings.Repeat(s, count) +} + +func TestWithAsciiOneInsert(t *testing.T) { + sm := NewMatcher(splitChars(rep("b", 100)), + splitChars("a"+rep("b", 100))) + assertAlmostEqual(t, sm.Ratio(), 0.995, 3) + assertEqual(t, sm.GetOpCodes(), + []OpCode{{'i', 0, 0, 0, 1}, {'e', 0, 100, 1, 101}}) + assertEqual(t, len(sm.bPopular), 0) + + sm = NewMatcher(splitChars(rep("b", 100)), + splitChars(rep("b", 50)+"a"+rep("b", 50))) + assertAlmostEqual(t, sm.Ratio(), 0.995, 3) + assertEqual(t, sm.GetOpCodes(), + []OpCode{{'e', 0, 50, 0, 50}, {'i', 50, 50, 50, 51}, {'e', 50, 100, 51, 101}}) + assertEqual(t, len(sm.bPopular), 0) +} + +func TestWithAsciiOnDelete(t *testing.T) { + sm := NewMatcher(splitChars(rep("a", 40)+"c"+rep("b", 40)), + splitChars(rep("a", 40)+rep("b", 40))) + assertAlmostEqual(t, sm.Ratio(), 0.994, 3) + assertEqual(t, sm.GetOpCodes(), + []OpCode{{'e', 0, 40, 0, 40}, {'d', 40, 41, 40, 40}, {'e', 41, 81, 40, 80}}) +} + +func TestWithAsciiBJunk(t *testing.T) { + isJunk := func(s string) bool { + return s == " " + } + sm := NewMatcherWithJunk(splitChars(rep("a", 40)+rep("b", 40)), + splitChars(rep("a", 44)+rep("b", 40)), true, isJunk) + assertEqual(t, sm.bJunk, map[string]struct{}{}) + + sm = NewMatcherWithJunk(splitChars(rep("a", 40)+rep("b", 40)), + splitChars(rep("a", 44)+rep("b", 40)+rep(" ", 20)), false, isJunk) + assertEqual(t, sm.bJunk, map[string]struct{}{" ": struct{}{}}) + + isJunk = func(s string) bool { + return s == " " || s == "b" + } + sm = NewMatcherWithJunk(splitChars(rep("a", 40)+rep("b", 40)), + splitChars(rep("a", 44)+rep("b", 40)+rep(" ", 20)), false, isJunk) + assertEqual(t, sm.bJunk, map[string]struct{}{" ": struct{}{}, "b": struct{}{}}) +} + +func TestSFBugsRatioForNullSeqn(t *testing.T) { + sm := NewMatcher(nil, nil) + assertEqual(t, sm.Ratio(), 1.0) + assertEqual(t, sm.QuickRatio(), 1.0) + assertEqual(t, sm.RealQuickRatio(), 1.0) +} + +func TestSFBugsComparingEmptyLists(t *testing.T) { + groups := NewMatcher(nil, nil).GetGroupedOpCodes(-1) + assertEqual(t, len(groups), 0) + diff := UnifiedDiff{ + FromFile: "Original", + ToFile: "Current", + Context: 3, + } + result, err := GetUnifiedDiffString(diff) + assertEqual(t, err, nil) + assertEqual(t, result, "") +} + +func TestOutputFormatRangeFormatUnified(t *testing.T) { + // Per the diff spec at http://www.unix.org/single_unix_specification/ + // + // Each field shall be of the form: + // %1d", if the range contains exactly one line, + // and: + // "%1d,%1d", , otherwise. + // If a range is empty, its beginning line number shall be the number of + // the line just before the range, or 0 if the empty range starts the file. + fm := formatRangeUnified + assertEqual(t, fm(3, 3), "3,0") + assertEqual(t, fm(3, 4), "4") + assertEqual(t, fm(3, 5), "4,2") + assertEqual(t, fm(3, 6), "4,3") + assertEqual(t, fm(0, 0), "0,0") +} + +func TestOutputFormatRangeFormatContext(t *testing.T) { + // Per the diff spec at http://www.unix.org/single_unix_specification/ + // + // The range of lines in file1 shall be written in the following format + // if the range contains two or more lines: + // "*** %d,%d ****\n", , + // and the following format otherwise: + // "*** %d ****\n", + // The ending line number of an empty range shall be the number of the preceding line, + // or 0 if the range is at the start of the file. + // + // Next, the range of lines in file2 shall be written in the following format + // if the range contains two or more lines: + // "--- %d,%d ----\n", , + // and the following format otherwise: + // "--- %d ----\n", + fm := formatRangeContext + assertEqual(t, fm(3, 3), "3") + assertEqual(t, fm(3, 4), "4") + assertEqual(t, fm(3, 5), "4,5") + assertEqual(t, fm(3, 6), "4,6") + assertEqual(t, fm(0, 0), "0") +} + +func TestOutputFormatTabDelimiter(t *testing.T) { + diff := UnifiedDiff{ + A: splitChars("one"), + B: splitChars("two"), + FromFile: "Original", + FromDate: "2005-01-26 23:30:50", + ToFile: "Current", + ToDate: "2010-04-12 10:20:52", + Eol: "\n", + } + ud, err := GetUnifiedDiffString(diff) + assertEqual(t, err, nil) + assertEqual(t, SplitLines(ud)[:2], []string{ + "--- Original\t2005-01-26 23:30:50\n", + "+++ Current\t2010-04-12 10:20:52\n", + }) + cd, err := GetContextDiffString(ContextDiff(diff)) + assertEqual(t, err, nil) + assertEqual(t, SplitLines(cd)[:2], []string{ + "*** Original\t2005-01-26 23:30:50\n", + "--- Current\t2010-04-12 10:20:52\n", + }) +} + +func TestOutputFormatNoTrailingTabOnEmptyFiledate(t *testing.T) { + diff := UnifiedDiff{ + A: splitChars("one"), + B: splitChars("two"), + FromFile: "Original", + ToFile: "Current", + Eol: "\n", + } + ud, err := GetUnifiedDiffString(diff) + assertEqual(t, err, nil) + assertEqual(t, SplitLines(ud)[:2], []string{"--- Original\n", "+++ Current\n"}) + + cd, err := GetContextDiffString(ContextDiff(diff)) + assertEqual(t, err, nil) + assertEqual(t, SplitLines(cd)[:2], []string{"*** Original\n", "--- Current\n"}) +} + +func TestSplitLines(t *testing.T) { + allTests := []struct { + input string + want []string + }{ + {"foo", []string{"foo\n"}}, + {"foo\nbar", []string{"foo\n", "bar\n"}}, + {"foo\nbar\n", []string{"foo\n", "bar\n", "\n"}}, + } + for _, test := range allTests { + assertEqual(t, SplitLines(test.input), test.want) + } +} + +func benchmarkSplitLines(b *testing.B, count int) { + str := strings.Repeat("foo\n", count) + + b.ResetTimer() + + n := 0 + for i := 0; i < b.N; i++ { + n += len(SplitLines(str)) + } +} + +func BenchmarkSplitLines100(b *testing.B) { + benchmarkSplitLines(b, 100) +} + +func BenchmarkSplitLines10000(b *testing.B) { + benchmarkSplitLines(b, 10000) +} diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/corrupt/huge_tag_exif.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/corrupt/huge_tag_exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffb31743debc969162427dbd0f1f0fb81f354c1c GIT binary patch literal 65536 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

    kDDo1kF#OyEL^N=fu1MU9#;*2qpi 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-03-07-09-28-03-sep-2011-03-07-09-28-03a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-03-07-09-28-03-sep-2011-03-07-09-28-03a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42d3476563585c2ee602b9b8e1c0a183a263b477 GIT binary patch literal 10529 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-05-07-13-02-49-sep-2011-05-07-13-02-49a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-05-07-13-02-49-sep-2011-05-07-13-02-49a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e84ec481f712b419d14a0ddaa236e32696e4919 GIT binary patch literal 23743 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 W2lJ^S19ASfNtxS2|JncI1z1VK-#Qim literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-08-07-19-22-57-sep-2011-08-07-19-22-57a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-08-07-19-22-57-sep-2011-08-07-19-22-57a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16fad2ecba51adeace7dc7bc23c2577849237b00 GIT binary patch literal 9936 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 Cpezmm literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-18-25-43-sep-2011-10-28-18-25-43.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-18-25-43-sep-2011-10-28-18-25-43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3aa54187870dc028fa6b31ab2ef0006e89b84214 GIT binary patch literal 7433 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 Lp#$%c{f_?v0bhzB literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2012-09-21-22-07-34-sep-2012-09-21-22-07-34.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2012-09-21-22-07-34-sep-2012-09-21-22-07-34.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cdb55aac12266a8f6b21c9b34fd9e49055c05cf GIT binary patch literal 10247 zcmeHsc|4U}*Z*~n`H-2+os4D5kj$xMma&j2LPC;Rl&O?X!XYY=nH(I+e9&mjkeLkK zLgvVn;V$R5FGG*}dEV#uc|Pywec!+Cb*yWD_u6Z(z4luB?7gpp*hl;#w5jIjbP0mA zw1go_2!c=$EdmLl0lEX24q$RnW&x%Lm>raPfEf`a5CW7ib0EmJ%4UE$cW@WLhjw(3 z084?s%%B_u%!J(T3(KAEl5X|=4zS=p2txn=2~xGa>UMSei8gTab?`90?B<0wJ}rM# z02@$H!1QVV$kYBk7)qzunimNe7Ll>710aOl zgGu&a(u{5UJisRTjvTnZMR16f0CNFG0sgNt^P;fYE?2?3AE@;I`d*I1>a- z0s#l`m;{mlEr&olkpRP44F?aB9UKiXDZsoy{upiq7+(2<0F#3ru!oZXQvl2gFeOM6 zCFlXqAc2|@q5^U>z-S=f2jsZ`p8%MCM+bs@k%GV`?87Vt_!jJps|&Kp23rAtX8~ph za@Z!!TzfD#!1O?N7G#fS*Cvt#aRA8GfZPknc>!(%coSegpaVzw8CV@cKn`4ivH(5= zEW>tQ0Nl1~2h_#(U~!-ihu{s+`De1(vbvjfQt*{S0Ne1+u}yTKF9ISz0YStdA`z_@ z&NNAK0eS=UDA7AATXRdHOQD17MBcuQI=Nj% zONvWK|L*Wab;L}0|uovh+2Id$F@OOaC_ZWb?!3^i(-_hkZB9VV;JLmt%{J+!w z&*ij06>PxJA<0Bt8<1Ek@OeWMO=S-v&G;XD=D;dsg#P-RBf@oSW3rzfP+KK>r zYb7Egz5zz(wri6n3$5KiL zPCl5J;3E`b1*h{i!Mi6+Y+PvYniw)^1s^IwF1%Z9rw4VRMa$d49vh!US2d8 z8#BX>c?wFfF$2uX#=*hH%EUkif7kX9BNHG-`hOOKK7eTVfos@biH2t1J{lToc(;cM zK40M^z;z-KUP~X;Rn4x6jiK2|z#^VrA5#6r({keiS9AQ$=o|KX#e{6dmKJO{*-#Uzi(Dkv!M z3agwxE_X^=R{j`*ii(N`MZ-)(!%T-lq3Ad`P$&)#eGZuP{}Up zAV?Sx#2Q2zxbl!8wrDpD;3qaxGI9z^Dik&NJ!iWOJhz+oG}1#z1PKX}l!T0o6ugTe zZowY$N4go=-Lx+Wr z${drGlUGnZt){M_sikdv_MC~S*?Dt2dxuMomz|tFy}W&V{jU4px*c}sZumV+OzgwB z_(zYQB&4NhWM*YQ&%wPcDlRE4E3Y8DdtXyqSKrY1p`){_yQjDBQ~#Hd(Xp@N6O&WZ z3yVw3D?e7();Ab{%ScjE5>g7-Wdza}FbM-G*+EHi#*>B=w(d;4QX!Pgr?9DoZ>jjC zjlQ#7^k_%1@*n*oumF3#<@A5%bLfA|>EAy8cA3}@(U5@K6$1$aqylAnXEeHa*;JgM zD^ur5D?h+Anf%H0^FLC;@msoS#nZ1ow&xcrUj8&ecpO{+D=j`aAC=nHTmgE|D zFV?zppzDj0^~g{vA?BD-UfxL)wps-?OmB?OBikr+vhx#OXz47;5JIrD>fo2jl?PTv zUoB>*sXSETbd%zmvU!~Nf4CXz*T14JZ6DD|Iw~1{;In7+tGIXTqS;}!rv<$6Uwc9$ z@=603*_sm({lzz=v)5noy^O$r>j;T*&bji7@@`GF;mj+cwv?`A^3a}crFSYm?op3> z!=@E%3%i6$eM}@PtQs4x@TB*@NL#))`*BqaSeMXDvl}hXHoJ#R2<;jsk$%QEy>v&Z z8$~~g&YEjnY}Pjl=vp{*h2u*_`^DMASfh12d0yNX+s*Srih3fi*BrCMA{YN`wc{7X z*jNuIlK+%)wlCQKiBH=t-f8`*wKBtz+hbZwg!9a&sOnp~Bb6nSn@zFRd6*$;#5Zk* zRr#u>0&(YfEAnu&L^9hI7Ec{%^Jxi7wK%^-IibEz|Ea-7E5&biJx5lKR)2SC4NmoY zm-12ZBUhlz*M!JKrd5wnGxujBFESToJ|+3xZDA3gaWhV?EV`U!{~;;+`TYDjrS!ze zn=USit~A2#4bMM}1oK^fJHf*FAf0VqS3Tm2mQvS(HZRuf`88UfXLo`Rit}8jl^YC7 z(x(Zr$nu=hOxJD@?bP68Oie_-f6?L-?Wa!m)*>&FY3X!;_q>^D-qa_7K$mGRgN$sS zp$b=flb+%bTPM!z3zdp-{rgD~y&HjEEmS2UI)6xOGd`j0A0R);{r1NQ;aa}lBkA^I z%?s4=nU!LVGVgQs-78J@)7Y(_#7a;ErA(`6w?>`0sXiiSOJnczE{sp6J;T;J4I^3f zFuyW(u;>1p{;(?CJCQql1*b$57NyCSu?o!g!#UF;p-B$rnZ24xGKUEUrK^`#!?Il} z&wq39aR~FRyPGl*`!iRlHk$LMP12i;27XH)3L@04tzhDkt{Pu#e3SkD55LTHEBe(& z0~bZpqEOE0Xd2tVYZU5@n~$@7a5DM%UOHNx`Z}LmobpaULh#*Fc zJtlo0wq8a~p8aTzSWV!$CX%|ZCT~_DB4mEnTMb%@e23L6A?<5oeZwt3ULE-1+uZCG ze41aJ5_NoDPeoNL)$he5A>agB z`hZIF+bcA#!WuJHYnrcZnU~!zRE^hEb_c3e`_^gUo$d^YJ}7izxlchui6U1B2rN;3 z?<;w-z=HiA$_%eA$4{^D%f%TR_(98g&?;i8r1fe409~&C;w${KA>W z@-Dk2)ZFQ}1AX3`C0%L1@;78E9xi7(5+=2V*P8=*LzoXUA@5!z_4>GkEP2J>*PkC@ zD&oqa&;MrsITDfLh5GV&vu@Xme6Gytx#BT;w+r&0g)e2__NqP6?lVph_v{NB<++n~ z`Oi*)w6sFeHyl{2$1HC*x}z`al6AKQx_?!#AW^z)_)FMqcI`cqQbpIq<5HpN=_!=I zV=o^|b-K%bb9qHfxZ(XG|e(mhfP}QkPj8l1Pt~%O~$V zf7IR+VVlSfebJg=FR(+U>LpgpcG;wJt~w@LBzRhuRmQrtGkp5=r2C%YS>Jl|C%W`Q z^EI2d~Nr` z%G@++Jk&&tIoL){Y0R|AX6gf@uL)uBN1?G1rnK~ur{?EuOhk;?LajdqRr?x8&Bwg_ zFGT1ZqTV|1Wc^f&+1mZ*waU$`_mZWQiXtMVBZ917bx*WZjCl1YdMi3*a&XMcrq;Y< zyy?9E91Z!2kGj2T&E!&cQwB=cr#3n(#MnjRJh6$ZIcI-8^PDp z^UauPO}BrzBa0Y*MM!_eEyN1e^aW+gV z=EOi*;Z*0(A2~8&M%2}`_4-BFTU_j|9mwHl6nHd_owud{aFTRs)tA|n%iP(6xMue)or zQL?7bPZ@nl-9#nMYa_oTqb<*rK0R!ba%y?GfbsU#g2A~0G1n4Ik2Q4%W_{^IGo1)~ z^f29o@#jXD?19JME@Fn5Zw#D0RO`xIFcx9qv*gH`y<1_AhGs~w|hB^7P`iGmsLdF9t8IKd#nnLDh3^iY^<5(id?aD|%0B=h@sVd}j zYej~{xY#959vv_(Ej^d0AU~F#N)}+3+*&YD|Hw@;ocm7y_|xu9inIF(_u`dkEwA?~aJz#9znfbuZbb3KYfs)Vsl0;v}9UUGiO-IOa3+*g;>Gryvc^$@2x`&!kpX1`!v``81j zvzF1-XRddz{M?Ah_%LCkBJ3EoS$)Q7@m-UKSl{IP1k(U9?AdsRm+rTE(U(%aMd(A0Kkc5-eUqyC<$Zx4I^BT2;NvnzHbgT0mo_@58K>CMbBNP9a&Z zI6--t;63PB&xW-Vz>Fr^ar zvFmHc*0Y`wrt99L&s!nCO(=UvZw4i4GU!(DL;e$)ZkVdYKCO8&RtNR=x}&9Wt+}Tj z4ovwO7E3dlq?8W65|bKc#LgXvSIH?j_D5ytTzAX-d{d*eY7NtRzkPkhDV5_Qcj6_? zUa-xZjg;v$^wJfr@Y$o?4GD27615(KlOlwrgs`{lEk^b)S^3JJYu2Bj>nT3{(jH6O zy(DXMEnNsRtt6C-Phx4l)YK|=SG3O{#on_#xT8a-t8;*Y-*Heje z)G2UbWF7E`PWLR8{G~6Wl;f5=>%v)GtaiBS&k(}+h?eH&k|Sn*`RN6^nd6+1A6gp| zra3)62TI=4BjLK$II42evb^Ghgr4mE`|bInUh4N>Yg?;2HF<0Y@Jwp|(uyIygKHu=E;CVaiU+O0*N|YJ!0%KpK+k9~) zB|!)4Kl@mC%ZRxK%e_J3rO*x+Mp`a@&OU3Bj16o$9sk2`I0CXqI}i?iG@l!3XL?sE zaPWSsO~&;waxEpFS-;UKYaitgh6a(XI?t>kF|LB?f+JZ;$*Hx|=DPit9`X0albM(v zbi8KjLYsad`K#Gs9@9c@$;grc^*OQ9{vgy%2Bt&{%hFCCLXq96UZIkr_{KPMMGsxa zX!Y4KF7K(I({f*yvW>{CHR}2BF4tuRAGt;fKD1bot-a^>v%KL3A}Qr(b;ZvICWd3v zQnlFE&Y_5p1#7+jIjkL43S8ohrgk!Nft|L(iMb)zdCQK2MjmRO7kjIcz1;2u&R9LJ zgNA9fo@beaeIUFnOC2q7mp_#I!?ds?jtDj5J6@LeN7O8JJQdAMoa6c>%yPNJ>uFEJ zRq-F~=bcTxKPu4>p(t?qNx`BLCD4ENERSd5@v+h|E+>i&da#TXLo??7H_(M7W#&C< zM&_1-r6C#78XQ~^H~K!R^pqX_Nb@OK!KLDWAG>KiWxztuimq!;5DVs{c?; zZ?h>%ilq!zTe>kg7U}#)xc%$0DxIA3MxW)e-`N~5xp&U|oT-tq*tOn$xV1oe*Uai7x1z^SNofu5UWl(26$oP|E|b3Hvii@ObDZVmn=DJ`o}aw#+*Myf-Wq};GAxwTmAYG#q6*}J&dc@d9&UQ5nI zsFEOW{aQ*f$4xxs{8cuM)l!YyMmOJVmWanWqX|(SQhDW+YXW+D;3z#uK3HjS(LTm% z&Z1}j3ugygpZuB1YZUTdBf)pAU0r_t49lglKNn}|F_>>2jM-U~&ofDHRYWN_=Jo4q zTzWQH?N9%>izM1z6 zPYdM-$#u;-^XCx5_07l@=p~OuSYjVst7Hz>;)wOMePsLe*Lsi(o>{Td6FJyXbFR!0l|kbu zuiQdEG-y#bb)}j0l$KFCXZ1Db*vn5@hE^L|Yo18P40*2Ln*V%67Ou3Q>7W{_IaJ?~ z64%J4MCX4|MDd&Xt=1DnNP1%G8cyzkHY7Ib{t{) zh43&gDpwd4i9u~_fX*)$U*wA8kK<_Z_i==Pv}s}7WC897^#{FNT#5p2B>^{#(-yv!dtaCqS9yFAH$%XbtKe~NIGp&^l&ZAp=kN05@VN!z8TV;( zaSge+jp@{3Ve!c0C~;g++VpVw^u?4EyfB7vA0r->Hj>gl{e7}LK==q=SXhJ_H$6kZ yrOgaarxm1#L<;BP2#dH8-0-4;IOhy*S|lA$z-{0r6JCl7<8T-xkMPd#fBz4#023ep literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2012-12-19-21-38-40-sep-temple_square1.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2012-12-19-21-38-40-sep-temple_square1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cc074f8e75525694b7bfc387bbbb51f8f90aae2 GIT binary patch literal 39182 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 f3T|+uU*N3c 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2099-08-12-19-59-29-sep-2099-08-12-19-59-29a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2099-08-12-19-59-29-sep-2099-08-12-19-59-29a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9729182b3f0d06ff2d3c1c21df24cd2cb15292f2 GIT binary patch literal 37491 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 AnE(I) literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f1-exif.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f1-exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff003e394915961ec2576628bf882b6b49a3407d GIT binary patch literal 992 zcmbV~Nl+6(6oy|<&txVu31pHY9z;cv6SzZJj6F#Vr6=@Fzv;hv-s?Bt>()lK33!#)nV;DAL|z(gVP07?KRqyehY@~Cb=&PWVJVpJe+kcfLJ+hT5q2k1y{JDGJWBu;h> z&#J7bZbfm+u0%Q0?NZ&c3Sc+_z>)}BRu#Dmg*Bou1b(k8vK&C+Dw+lmprTbEfEP8{ z1GLv*Db6p-2ZRu*NvdlLV9WK^R{3gc68#=uePTgTNvZY{asgA6K8Vp|FdW0sG{dv3 zfiv+YlfVmtImT)+$A~e4U~yPPn`F1!O|fzD4k_L$*(H4wgh>v~7#YSWnFX`-&!*i1 zk%LljVk813A}k_p7*>#`F$6)Uh#2Vz%@|nD$O|N3&;k^~n4+=%*CcwM-Z5HatVv3? z!B$qqCO1lIYgZ4Kk~1)5FCUpn&8YUa8F@!s{IZ0!m8+bq(_NWs)~;Lc&fSogUr<<7 zym3>-=E^Nwx9zB@t=n1eY1rl4y~p3Qw|W18gY6xM4tE|scD(z<$y2A#^qxI;{=&t+ z{@|s{R|cmZ z=5;P|jA5)O*FOC6GNxpd&)BQI zBfKNkHIX)}qlL(p2G;gpWKpn1u5mD7L=F#&kOe=30jh-uC%L9AS;5YT=x&CEU}%kp hg^DRW-xrR;bCn?x`WQR8eTgZt)4kyuf2L?-zW}!h3XT8( literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f2-exif.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f2-exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e0f170e36674d695e53c5b480e57d59ca2ecab9 GIT binary patch literal 994 zcmbW0OHk8L6o${uO`0@mp=r~CxR9q-R!Jy6x?uo$&M*TgqAr}F0#bHVw8)GzfC|b= zRD7)pzOXw~e62+Bxx*)*3#+2Y3Vg#j#2Z?R!%94JPwqb_=iHO;+=(`#h2V8wleZS2 zqy*9dfCCm;0TYFQB98=M<~4u^EsyGYYh?M8CJOF0r7fq*QwaxqvB3U&Ls#7>;3Rn&Da2 zz?pcHN#F&+9AmYZW5gIiusAHDO|skVrr5Z6hZJv>?2>*6!lZ^~j0|Ix%z{~3vT3(L zPiM2#ZJ?f)!+F3_;K-B1R@cGX|D3@&ZX1umFWHrf95xHObzmPmC5BYm$;} zu$5J@$qka)+SS9Q@wy=Tvzzi_ed zQtxK+R8~eT|NDS#*~cmDZ9rv z%sWzDp|oioZJzAkz}o(cEDE;3H3lY3{v8pEkOjYj0jh-uCj??Adn00edrMZZQ;$(C fS>4Sr7o3+o%vDU_*}h10i6x{5o~c~aMH~GM?`I42 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f3-exif.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f3-exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ed7b16a79c93f0d6f75c5060cbfb7bcd48d8fd6 GIT binary patch literal 992 zcmbV}NlesG7{|ZY*G@a_3`}P_1L8qeMNVxQT;@UmSrZZ#5%pjK0y5kfQINz0P(e9~ zircB+hI2#3?Ieop4Oc)9qN2zN+#!+rTE-#agnoI;Kd=Aqef@n;AJNC*O?H#N2B5GI zQUHJh7C8YEg^U%&0Ap%^O0+Vp>risYLlKV(WCe-L0ObmuBY+M+(4pLRvKx^{Ci$|k ztFof{6vZcdW92lTSM{Z;0G6WwEOF4Xs>oevK_d!-_V-+oWzGCIK)Mc~QQ<0};YCgE z0R1gE3Ucyu03k$blIr?AxUvG(6%Ex@v5o$Q+SuIu!Xo`OWC5lqW00W9U^s@MX@+N6 z3uohPHh~uedxX3WGm$fN7CpRy@ zpmcNDmh!FJw(qQ}uGv-VuiM?QXK!QEzUBi554Cq3KGJ#Y_=)b5r%s@+0RlHT16^FdScFkd!_=lYhWkWp02v4h+W-In literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f4-exif.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f4-exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e081f9198454aae18ddb9525a6b987b6191824d GIT binary patch literal 994 zcmbV}Nl+6}5Qh8Bdy|>WB#=oa0r4QKMou$BaLI)NWUZnKP((dg1p*RoL=>dTDnJG0 zBr0yFfE(n7irYyP*Bh>Y9z;cv6SzZJjBf&l(v#Tr`prK*{krGtrw{96@G7gpR|QZ| z0LcKr1BdK@sX{>L76WWZ1C*oXVO@jV3potU(SYtCQ};8Dg*XCe^BEOr9e`HqhUHQ> z-a}7KQ8llsdKFKslIrzn-V_bMbOeB-8AQ=kr31}t#9#>gj;o3iK=WO69U#DjyFdUh zYFY#I*I>)f&dUab5ba63>T}@8^jDVERaV5-`|7G=bMgub^_P$dm|=`XjnKvNEK3M0 zaGZ&^2o{Sdh@v&ZZnH*65u#{w*(8VTbUH1OQPD0r+Acd~qX@$E3}MYIYnH8|RbH~` zw?N{d5Zo9^z(@#7NFRh1bZ9I^Feny`PK2-~jyDS;P3X4)gD_?YHvXDs?=vPwB-S3M zrkfl^Wn6r%tTlIZ@d+7y1J2^1sl=3We~VdgMMW=*Nm{wey*k;Gx@PUV_1?@4S=l+c zdHEYRm258EvUS^zipr{;)xMftb-VY}H|%ZPf8bzi+o8klM~@xvJaO{W=`-DD&z-+; zv8Ok9>GGBStJkjIxOw}|;N5%oA3S{Y_{q~}&tD9WjE=o|`)>UGhl!7q)1N+n`TFhq zkC|D6i(cbAR+#KBE;s+1(_78v>Ez+ndsY?S^EU k(mESqE*O#m%#}>w*&Z6Dd3dJu&m%@G^l?c?LOt}6Uy(TsK>z>% literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f5-exif.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f5-exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8d875479fcf6f9f443434323edc5aab142f2500 GIT binary patch literal 980 zcmbVJNl?^K5bd9zOfty~OlC48;z3qLPDvPC=0X9oR#64Gpx!`0h8rUaQe~B(f_f4a zx6^<-H&onCqPX601@s{9asqcOi`aoUASbo!_x~^dzwXZKHU^Cmc%IW3tOh75f>Zzy zfG2LChzM}F#hN=}fC{o8f@?{N#bNMK2i!qH4>2C=9wXX? znif#~acX+NuLsg}0NZ{59vQ5vYic{0#)P2|{(Y~hYM4w{F${n(6R84WI)gC>7%#w8 zm|Ktwgb=KWRgFpTWQVHC>#Hi`8iMsTad`zr#l|zp2FftzLSu1p0>`l|C-S^aaEK0v zBubJq%I$JS$x)Kz^0{P>;`MqR(eq+_N{n0aDrOQwF^1*r9A{UYl2iF-Gp>UyKnfI7 zA_F56Difn07Gl#llwhi`3_HSdHeRrc5)yh{zz|9qmYRQ!?Coa9SebLjYne7rNjaZT zr|8Y?okC((PoKARU@R%EBGh6Ree+`G$0jdYoU$a4~jg?i^n`(l!o9nl1ZD`!qv~$<)*0w!+_Z>KRsN?XFqsNYSoj7^w^qI5gy3b#@ z*n8>nm8;io-0Z(~`_A2a_a8ib^!Uls!J*-im#<#GdHe4DhtctmpFV&2`tAF~4^tP8 zaavYH*&JQi1j4W^WqDH%yRLX&7E1om)Cg`^kzZHYVYjnvnQsNj(ICW1EMd< zKaxCdN}E#lcfwl!OIbwNjILpDP=dpwGGxHd?l7}M#EH&6CcCG;Gdh~Ug2F1b*EtW{J2E~qyUkZ>cSAXQcgDySz> zaXSUvxuN2A62SS&VN;2q{nMtLg5)y8qX2zSqWxF%B>CTl{qZrKOMo z00QvD2^19p3r-2Z&1!&ZvM{0>NP5`AphpLsLBSDVT;Y8J(CG&@oZEq`8AUkoB(&

    ECwfnwI(_Esx$}J& zE?yeAeC6u3>o;!=-M(}8-u(v;A3c8Z^x4Sh*!Zj0Z{EIp|Ka1r)Ths1zJB}uWBRAb zh0hqmije)mg-sv~%Tks%xd_vYgUT$Iq*X2qntIxsAH zQoZA8QzqIh+24V+{})*VY@TZjY?R>RQ5mw~S6?u8qIai=ZyIFgmhA3UnCXk&!E-uY XIcJTMW>%CvN`_M+mxfDZ8>7Dg!SMnV literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f7-exif.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/f7-exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5dddea44bf215079b3027016b56d4a902affe95 GIT binary patch literal 980 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/has-lens-info.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/has-lens-info.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57757da333245376e44fad869c58a756665fb086 GIT binary patch literal 22493 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

    qYD)y?l3zc@nRN}nUGIi9Bt-tk6E$mypvrdvXX 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 LLYpo5O)vl1LhgJ^ literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/tiff/sample1.tif b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/tiff/sample1.tif new file mode 100644 index 0000000000000000000000000000000000000000..fe51399c542954e5cd837eb50626c5cd02991ebb GIT binary patch literal 18382 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/accessors_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/accessors_test.go index ce5d8e4aa1..03915399b0 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/accessors_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/accessors_test.go @@ -1,7 +1,7 @@ package objx import ( - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" "testing" ) diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/conversions_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/conversions_test.go index e9ccd2987b..3f68f7061c 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/conversions_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/conversions_test.go @@ -1,7 +1,7 @@ package objx import ( - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" "testing" ) diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/fixture_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/fixture_test.go index 27f7d9049a..9e8b55a755 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/fixture_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/fixture_test.go @@ -1,7 +1,7 @@ package objx import ( - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" "testing" ) diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/map_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/map_test.go index 1f8b45c617..e1430512e2 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/map_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/map_test.go @@ -1,7 +1,7 @@ package objx import ( - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" "testing" ) diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/mutations_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/mutations_test.go index e20ee23bc4..fb0fccfcac 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/mutations_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/mutations_test.go @@ -1,7 +1,7 @@ package objx import ( - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" "testing" ) diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/security_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/security_test.go index 8f0898f62c..a438fa65a4 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/security_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/security_test.go @@ -1,7 +1,7 @@ package objx import ( - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" "testing" ) diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/simple_example_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/simple_example_test.go index 5408c7fd3d..345c7ce54f 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/simple_example_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/simple_example_test.go @@ -1,7 +1,7 @@ package objx import ( - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" "testing" ) diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/tests_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/tests_test.go index bcc1eb03d0..81ad090051 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/tests_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/tests_test.go @@ -1,7 +1,7 @@ package objx import ( - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" "testing" ) diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/type_specific_codegen_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/type_specific_codegen_test.go index f7a4fceea3..f767834855 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/type_specific_codegen_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/type_specific_codegen_test.go @@ -2,7 +2,7 @@ package objx import ( "fmt" - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" "testing" ) diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/value.go b/Godeps/_workspace/src/github.com/stretchr/objx/value.go index 7aaef06b1c..956a2211d4 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/value.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/value.go @@ -1,5 +1,10 @@ package objx +import ( + "fmt" + "strconv" +) + // Value provides methods for extracting interface{} data in various // types. type Value struct { @@ -11,3 +16,41 @@ type Value struct { func (v *Value) Data() interface{} { return v.data } + +// String returns the value always as a string +func (v *Value) String() string { + switch { + case v.IsStr(): + return v.Str() + case v.IsBool(): + return strconv.FormatBool(v.Bool()) + case v.IsFloat32(): + return strconv.FormatFloat(float64(v.Float32()), 'f', -1, 32) + case v.IsFloat64(): + return strconv.FormatFloat(v.Float64(), 'f', -1, 64) + case v.IsInt(): + return strconv.FormatInt(int64(v.Int()), 10) + case v.IsInt(): + return strconv.FormatInt(int64(v.Int()), 10) + case v.IsInt8(): + return strconv.FormatInt(int64(v.Int8()), 10) + case v.IsInt16(): + return strconv.FormatInt(int64(v.Int16()), 10) + case v.IsInt32(): + return strconv.FormatInt(int64(v.Int32()), 10) + case v.IsInt64(): + return strconv.FormatInt(v.Int64(), 10) + case v.IsUint(): + return strconv.FormatUint(uint64(v.Uint()), 10) + case v.IsUint8(): + return strconv.FormatUint(uint64(v.Uint8()), 10) + case v.IsUint16(): + return strconv.FormatUint(uint64(v.Uint16()), 10) + case v.IsUint32(): + return strconv.FormatUint(uint64(v.Uint32()), 10) + case v.IsUint64(): + return strconv.FormatUint(v.Uint64(), 10) + } + + return fmt.Sprintf("%#v", v.Data()) +} diff --git a/Godeps/_workspace/src/github.com/stretchr/objx/value_test.go b/Godeps/_workspace/src/github.com/stretchr/objx/value_test.go index 0bc65d92c1..9244060101 100644 --- a/Godeps/_workspace/src/github.com/stretchr/objx/value_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/objx/value_test.go @@ -1 +1,66 @@ package objx + +import ( + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" + "testing" +) + +func TestStringTypeString(t *testing.T) { + m := New(map[string]interface{}{"string": "foo"}) + assert.Equal(t, "foo", m.Get("string").String()) +} + +func TestStringTypeBool(t *testing.T) { + m := New(map[string]interface{}{"bool": true}) + assert.Equal(t, "true", m.Get("bool").String()) +} + +func TestStringTypeInt(t *testing.T) { + m := New(map[string]interface{}{ + "int": int(1), + "int8": int8(8), + "int16": int16(16), + "int32": int32(32), + "int64": int64(64), + }) + + assert.Equal(t, "1", m.Get("int").String()) + assert.Equal(t, "8", m.Get("int8").String()) + assert.Equal(t, "16", m.Get("int16").String()) + assert.Equal(t, "32", m.Get("int32").String()) + assert.Equal(t, "64", m.Get("int64").String()) +} + +func TestStringTypeUint(t *testing.T) { + m := New(map[string]interface{}{ + "uint": uint(1), + "uint8": uint8(8), + "uint16": uint16(16), + "uint32": uint32(32), + "uint64": uint64(64), + }) + + assert.Equal(t, "1", m.Get("uint").String()) + assert.Equal(t, "8", m.Get("uint8").String()) + assert.Equal(t, "16", m.Get("uint16").String()) + assert.Equal(t, "32", m.Get("uint32").String()) + assert.Equal(t, "64", m.Get("uint64").String()) +} + +func TestStringTypeFloat(t *testing.T) { + m := New(map[string]interface{}{ + "float32": float32(32.32), + "float64": float64(64.64), + }) + + assert.Equal(t, "32.32", m.Get("float32").String()) + assert.Equal(t, "64.64", m.Get("float64").String()) +} + +func TestStringTypeOther(t *testing.T) { + m := New(map[string]interface{}{ + "other": []string{"foo", "bar"}, + }) + + assert.Equal(t, "[]string{\"foo\", \"bar\"}", m.Get("other").String()) +} diff --git a/Godeps/_workspace/src/github.com/stretchr/testify/assert/assertions.go b/Godeps/_workspace/src/github.com/stretchr/testify/assert/assertions.go index 818cd7b0e4..fac7ab828e 100644 --- a/Godeps/_workspace/src/github.com/stretchr/testify/assert/assertions.go +++ b/Godeps/_workspace/src/github.com/stretchr/testify/assert/assertions.go @@ -3,6 +3,7 @@ package assert import ( "bufio" "bytes" + "encoding/json" "fmt" "math" "reflect" @@ -10,6 +11,11 @@ import ( "runtime" "strings" "time" + "unicode" + "unicode/utf8" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/davecgh/go-spew/spew" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/pmezard/go-difflib/difflib" ) // TestingT is an interface wrapper around *testing.T @@ -33,11 +39,7 @@ func ObjectsAreEqual(expected, actual interface{}) bool { return expected == actual } - if reflect.DeepEqual(expected, actual) { - return true - } - - return false + return reflect.DeepEqual(expected, actual) } @@ -49,12 +51,13 @@ func ObjectsAreEqualValues(expected, actual interface{}) bool { } actualType := reflect.TypeOf(actual) + if actualType == nil { + return false + } expectedValue := reflect.ValueOf(expected) - if expectedValue.Type().ConvertibleTo(actualType) { + if expectedValue.IsValid() && expectedValue.Type().ConvertibleTo(actualType) { // Attempt comparison after type conversion - if reflect.DeepEqual(actual, expectedValue.Convert(actualType).Interface()) { - return true - } + return reflect.DeepEqual(expectedValue.Convert(actualType).Interface(), actual) } return false @@ -64,28 +67,67 @@ func ObjectsAreEqualValues(expected, actual interface{}) bool { internally, causing it to print the file:line of the assert method, rather than where the problem actually occured in calling code.*/ -// CallerInfo returns a string containing the file and line number of the assert call -// that failed. -func CallerInfo() string { +// CallerInfo returns an array of strings containing the file and line number +// of each stack frame leading from the current test to the assert call that +// failed. +func CallerInfo() []string { + pc := uintptr(0) file := "" line := 0 ok := false + name := "" + callers := []string{} for i := 0; ; i++ { - _, file, line, ok = runtime.Caller(i) + pc, file, line, ok = runtime.Caller(i) if !ok { - return "" + return nil } + + // This is a huge edge case, but it will panic if this is the case, see #180 + if file == "" { + break + } + parts := strings.Split(file, "/") dir := parts[len(parts)-2] file = parts[len(parts)-1] if (dir != "assert" && dir != "mock" && dir != "require") || file == "mock_test.go" { + callers = append(callers, fmt.Sprintf("%s:%d", file, line)) + } + + f := runtime.FuncForPC(pc) + if f == nil { + break + } + name = f.Name() + // Drop the package + segments := strings.Split(name, ".") + name = segments[len(segments)-1] + if isTest(name, "Test") || + isTest(name, "Benchmark") || + isTest(name, "Example") { break } } - return fmt.Sprintf("%s:%d", file, line) + return callers +} + +// Stolen from the `go test` tool. +// isTest tells whether name looks like a test (or benchmark, according to prefix). +// It is a Test (say) if there is a character after Test that is not a lower-case letter. +// We don't want TesticularCancer. +func isTest(name, prefix string) bool { + if !strings.HasPrefix(name, prefix) { + return false + } + if len(name) == len(prefix) { // "Test" is ok + return true + } + rune, _ := utf8.DecodeRuneInString(name[len(prefix):]) + return !unicode.IsLower(rune) } // getWhitespaceString returns a string that is long enough to overwrite the default @@ -144,19 +186,20 @@ func Fail(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool { message := messageFromMsgAndArgs(msgAndArgs...) + errorTrace := strings.Join(CallerInfo(), "\n\r\t\t\t") if len(message) > 0 { - t.Errorf("\r%s\r\tLocation:\t%s\n"+ + t.Errorf("\r%s\r\tError Trace:\t%s\n"+ "\r\tError:%s\n"+ "\r\tMessages:\t%s\n\r", getWhitespaceString(), - CallerInfo(), + errorTrace, indentMessageLines(failureMessage, 2), message) } else { - t.Errorf("\r%s\r\tLocation:\t%s\n"+ + t.Errorf("\r%s\r\tError Trace:\t%s\n"+ "\r\tError:%s\n\r", getWhitespaceString(), - CallerInfo(), + errorTrace, indentMessageLines(failureMessage, 2)) } @@ -171,7 +214,7 @@ func Implements(t TestingT, interfaceObject interface{}, object interface{}, msg interfaceType := reflect.TypeOf(interfaceObject).Elem() if !reflect.TypeOf(object).Implements(interfaceType) { - return Fail(t, fmt.Sprintf("Object must implement %v", interfaceType), msgAndArgs...) + return Fail(t, fmt.Sprintf("%T must implement %v", object, interfaceType), msgAndArgs...) } return true @@ -196,8 +239,9 @@ func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs func Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { if !ObjectsAreEqual(expected, actual) { + diff := diff(expected, actual) return Fail(t, fmt.Sprintf("Not equal: %#v (expected)\n"+ - " != %#v (actual)", expected, actual), msgAndArgs...) + " != %#v (actual)%s", expected, actual, diff), msgAndArgs...) } return true @@ -232,7 +276,7 @@ func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} bType := reflect.TypeOf(actual) if aType != bType { - return Fail(t, "Types expected to match exactly", "%v != %v", aType, bType) + return Fail(t, fmt.Sprintf("Types expected to match exactly\n\r\t%v != %v", aType, bType), msgAndArgs...) } return Equal(t, expected, actual, msgAndArgs...) @@ -245,24 +289,10 @@ func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} // // Returns whether the assertion was successful (true) or not (false). func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - - success := true - - if object == nil { - success = false - } else { - value := reflect.ValueOf(object) - kind := value.Kind() - if kind >= reflect.Chan && kind <= reflect.Slice && value.IsNil() { - success = false - } + if !isNil(object) { + return true } - - if !success { - Fail(t, "Expected not to be nil.", msgAndArgs...) - } - - return success + return Fail(t, "Expected value not to be nil.", msgAndArgs...) } // isNil checks if a specified object is nil or not, without Failing. @@ -292,7 +322,7 @@ func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { return Fail(t, fmt.Sprintf("Expected nil, but got: %#v", object), msgAndArgs...) } -var zeros = []interface{}{ +var numericZeros = []interface{}{ int(0), int8(0), int16(0), @@ -318,7 +348,7 @@ func isEmpty(object interface{}) bool { return true } - for _, v := range zeros { + for _, v := range numericZeros { if object == v { return true } @@ -335,6 +365,9 @@ func isEmpty(object interface{}) bool { } case reflect.Ptr: { + if objValue.IsNil() { + return true + } switch object.(type) { case *time.Time: return object.(*time.Time).IsZero() @@ -349,7 +382,7 @@ func isEmpty(object interface{}) bool { // Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either // a slice or a channel with len == 0. // -// assert.Empty(t, obj) +// assert.Empty(t, obj) // // Returns whether the assertion was successful (true) or not (false). func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { @@ -366,9 +399,9 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { // NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either // a slice or a channel with len == 0. // -// if assert.NotEmpty(t, obj) { -// assert.Equal(t, "two", obj[1]) -// } +// if assert.NotEmpty(t, obj) { +// assert.Equal(t, "two", obj[1]) +// } // // Returns whether the assertion was successful (true) or not (false). func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { @@ -450,7 +483,7 @@ func False(t TestingT, value bool, msgAndArgs ...interface{}) bool { func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { if ObjectsAreEqual(expected, actual) { - return Fail(t, "Should not be equal", msgAndArgs...) + return Fail(t, fmt.Sprintf("Should not be: %#v\n", actual), msgAndArgs...) } return true @@ -476,6 +509,16 @@ func includeElement(list interface{}, element interface{}) (ok, found bool) { return true, strings.Contains(listValue.String(), elementValue.String()) } + if reflect.TypeOf(list).Kind() == reflect.Map { + mapKeys := listValue.MapKeys() + for i := 0; i < len(mapKeys); i++ { + if ObjectsAreEqual(mapKeys[i].Interface(), element) { + return true, true + } + } + return true, false + } + for i := 0; i < listValue.Len(); i++ { if ObjectsAreEqual(listValue.Index(i).Interface(), element) { return true, true @@ -485,11 +528,12 @@ func includeElement(list interface{}, element interface{}) (ok, found bool) { } -// Contains asserts that the specified string or list(array, slice...) contains the +// Contains asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // // assert.Contains(t, "Hello World", "World", "But 'Hello World' does contain 'World'") // assert.Contains(t, ["Hello", "World"], "World", "But ["Hello", "World"] does contain 'World'") +// assert.Contains(t, {"Hello": "World"}, "Hello", "But {'Hello': 'World'} does contain 'Hello'") // // Returns whether the assertion was successful (true) or not (false). func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool { @@ -506,11 +550,12 @@ func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bo } -// NotContains asserts that the specified string or list(array, slice...) does NOT contain the +// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // // assert.NotContains(t, "Hello World", "Earth", "But 'Hello World' does NOT contain 'Earth'") // assert.NotContains(t, ["Hello", "World"], "Earth", "But ['Hello', 'World'] does NOT contain 'Earth'") +// assert.NotContains(t, {"Hello": "World"}, "Earth", "But {'Hello': 'World'} does NOT contain 'Earth'") // // Returns whether the assertion was successful (true) or not (false). func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool { @@ -766,7 +811,7 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool { return true } - return Fail(t, fmt.Sprintf("No error is expected but got %v", err), msgAndArgs...) + return Fail(t, fmt.Sprintf("Received unexpected error %q", err), msgAndArgs...) } // Error asserts that a function returned an error (i.e. not `nil`). @@ -800,7 +845,7 @@ func EqualError(t TestingT, theError error, errString string, msgAndArgs ...inte return false } s := "An error with value \"%s\" is expected but got \"%s\". %s" - return Equal(t, theError.Error(), errString, + return Equal(t, errString, theError.Error(), s, errString, theError.Error(), message) } @@ -851,3 +896,84 @@ func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interf return !match } + +// Zero asserts that i is the zero value for its type and returns the truth. +func Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool { + if i != nil && !reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) { + return Fail(t, fmt.Sprintf("Should be zero, but was %v", i), msgAndArgs...) + } + return true +} + +// NotZero asserts that i is not the zero value for its type and returns the truth. +func NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool { + if i == nil || reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) { + return Fail(t, fmt.Sprintf("Should not be zero, but was %v", i), msgAndArgs...) + } + return true +} + +// JSONEq asserts that two JSON strings are equivalent. +// +// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) +// +// Returns whether the assertion was successful (true) or not (false). +func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) bool { + var expectedJSONAsInterface, actualJSONAsInterface interface{} + + if err := json.Unmarshal([]byte(expected), &expectedJSONAsInterface); err != nil { + return Fail(t, fmt.Sprintf("Expected value ('%s') is not valid json.\nJSON parsing error: '%s'", expected, err.Error()), msgAndArgs...) + } + + if err := json.Unmarshal([]byte(actual), &actualJSONAsInterface); err != nil { + return Fail(t, fmt.Sprintf("Input ('%s') needs to be valid json.\nJSON parsing error: '%s'", actual, err.Error()), msgAndArgs...) + } + + return Equal(t, expectedJSONAsInterface, actualJSONAsInterface, msgAndArgs...) +} + +func typeAndKind(v interface{}) (reflect.Type, reflect.Kind) { + t := reflect.TypeOf(v) + k := t.Kind() + + if k == reflect.Ptr { + t = t.Elem() + k = t.Kind() + } + return t, k +} + +// diff returns a diff of both values as long as both are of the same type and +// are a struct, map, slice or array. Otherwise it returns an empty string. +func diff(expected interface{}, actual interface{}) string { + if expected == nil || actual == nil { + return "" + } + + et, ek := typeAndKind(expected) + at, _ := typeAndKind(actual) + + if et != at { + return "" + } + + if ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array { + return "" + } + + spew.Config.SortKeys = true + e := spew.Sdump(expected) + a := spew.Sdump(actual) + + diff, _ := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{ + A: difflib.SplitLines(e), + B: difflib.SplitLines(a), + FromFile: "Expected", + FromDate: "", + ToFile: "Actual", + ToDate: "", + Context: 1, + }) + + return "\n\nDiff:\n" + diff +} diff --git a/Godeps/_workspace/src/github.com/stretchr/testify/assert/assertions_test.go b/Godeps/_workspace/src/github.com/stretchr/testify/assert/assertions_test.go index d859c77b91..a12352e4c5 100644 --- a/Godeps/_workspace/src/github.com/stretchr/testify/assert/assertions_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/testify/assert/assertions_test.go @@ -2,12 +2,82 @@ package assert import ( "errors" + "io" "math" + "os" + "reflect" "regexp" "testing" "time" ) +var ( + i interface{} + zeros = []interface{}{ + false, + byte(0), + complex64(0), + complex128(0), + float32(0), + float64(0), + int(0), + int8(0), + int16(0), + int32(0), + int64(0), + rune(0), + uint(0), + uint8(0), + uint16(0), + uint32(0), + uint64(0), + uintptr(0), + "", + [0]interface{}{}, + []interface{}(nil), + struct{ x int }{}, + (*interface{})(nil), + (func())(nil), + nil, + interface{}(nil), + map[interface{}]interface{}(nil), + (chan interface{})(nil), + (<-chan interface{})(nil), + (chan<- interface{})(nil), + } + nonZeros = []interface{}{ + true, + byte(1), + complex64(1), + complex128(1), + float32(1), + float64(1), + int(1), + int8(1), + int16(1), + int32(1), + int64(1), + rune(1), + uint(1), + uint8(1), + uint16(1), + uint32(1), + uint64(1), + uintptr(1), + "s", + [1]interface{}{1}, + []interface{}{}, + struct{ x int }{1}, + (*interface{})(&i), + (func())(func() {}), + interface{}(1), + map[interface{}]interface{}{}, + (chan interface{})(make(chan interface{})), + (<-chan interface{})(make(chan interface{})), + (chan<- interface{})(make(chan interface{})), + } +) + // AssertionTesterInterface defines an interface to be used for testing assertion methods type AssertionTesterInterface interface { TestMethod() @@ -62,6 +132,12 @@ func TestObjectsAreEqual(t *testing.T) { if !ObjectsAreEqualValues(uint32(10), int32(10)) { t.Error("ObjectsAreEqualValues should return true") } + if ObjectsAreEqualValues(0, nil) { + t.Fail() + } + if ObjectsAreEqualValues(nil, 0) { + t.Fail() + } } @@ -129,6 +205,9 @@ func TestNotNil(t *testing.T) { if NotNil(mockT, nil) { t.Error("NotNil should return false: object is nil") } + if NotNil(mockT, (*struct{})(nil)) { + t.Error("NotNil should return false: object is (*struct{})(nil)") + } } @@ -139,6 +218,9 @@ func TestNil(t *testing.T) { if !Nil(mockT, nil) { t.Error("Nil should return true: object is nil") } + if !Nil(mockT, (*struct{})(nil)) { + t.Error("Nil should return true: object is (*struct{})(nil)") + } if Nil(mockT, new(AssertionTesterConformingObject)) { t.Error("Nil should return false: object is not nil") } @@ -255,6 +337,7 @@ func TestContains(t *testing.T) { {"g", "h"}, {"j", "k"}, } + simpleMap := map[interface{}]interface{}{"Foo": "Bar"} if !Contains(mockT, "Hello World", "Hello") { t.Error("Contains should return true: \"Hello World\" contains \"Hello\"") @@ -275,12 +358,22 @@ func TestContains(t *testing.T) { if Contains(mockT, complexList, &A{"g", "e"}) { t.Error("Contains should return false: complexList contains {\"g\", \"e\"}") } + if Contains(mockT, complexList, &A{"g", "e"}) { + t.Error("Contains should return false: complexList contains {\"g\", \"e\"}") + } + if !Contains(mockT, simpleMap, "Foo") { + t.Error("Contains should return true: \"{\"Foo\": \"Bar\"}\" contains \"Foo\"") + } + if Contains(mockT, simpleMap, "Bar") { + t.Error("Contains should return false: \"{\"Foo\": \"Bar\"}\" does not contains \"Bar\"") + } } func TestNotContains(t *testing.T) { mockT := new(testing.T) list := []string{"Foo", "Bar"} + simpleMap := map[interface{}]interface{}{"Foo": "Bar"} if !NotContains(mockT, "Hello World", "Hello!") { t.Error("NotContains should return true: \"Hello World\" does not contain \"Hello!\"") @@ -295,13 +388,19 @@ func TestNotContains(t *testing.T) { if NotContains(mockT, list, "Foo") { t.Error("NotContains should return false: \"[\"Foo\", \"Bar\"]\" contains \"Foo\"") } - + if NotContains(mockT, simpleMap, "Foo") { + t.Error("Contains should return true: \"{\"Foo\": \"Bar\"}\" contains \"Foo\"") + } + if !NotContains(mockT, simpleMap, "Bar") { + t.Error("Contains should return false: \"{\"Foo\": \"Bar\"}\" does not contains \"Bar\"") + } } func Test_includeElement(t *testing.T) { list1 := []string{"Foo", "Bar"} list2 := []int{1, 2} + simpleMap := map[interface{}]interface{}{"Foo": "Bar"} ok, found := includeElement("Hello World", "World") True(t, ok) @@ -335,10 +434,17 @@ func Test_includeElement(t *testing.T) { True(t, ok) False(t, found) + ok, found = includeElement(simpleMap, "Foo") + True(t, ok) + True(t, found) + + ok, found = includeElement(simpleMap, "Bar") + True(t, ok) + False(t, found) + ok, found = includeElement(1433, "1") False(t, ok) False(t, found) - } func TestCondition(t *testing.T) { @@ -481,6 +587,9 @@ func TestEmpty(t *testing.T) { mockT := new(testing.T) chWithValue := make(chan struct{}, 1) chWithValue <- struct{}{} + var ti *time.Time + var s *string + var f *os.File True(t, Empty(mockT, ""), "Empty string is empty") True(t, Empty(mockT, nil), "Nil is empty") @@ -488,6 +597,9 @@ func TestEmpty(t *testing.T) { True(t, Empty(mockT, 0), "Zero int value is empty") True(t, Empty(mockT, false), "False value is empty") True(t, Empty(mockT, make(chan struct{})), "Channel without values is empty") + True(t, Empty(mockT, s), "Nil string pointer is empty") + True(t, Empty(mockT, f), "Nil os.File pointer is empty") + True(t, Empty(mockT, ti), "Nil time.Time pointer is empty") False(t, Empty(mockT, "something"), "Non Empty string is not empty") False(t, Empty(mockT, errors.New("something")), "Non nil object is not empty") @@ -789,3 +901,189 @@ func TestRegexp(t *testing.T) { True(t, NotRegexp(mockT, regexp.MustCompile(tc.rx), tc.str)) } } + +func testAutogeneratedFunction() { + defer func() { + if err := recover(); err == nil { + panic("did not panic") + } + CallerInfo() + }() + t := struct { + io.Closer + }{} + var c io.Closer + c = t + c.Close() +} + +func TestCallerInfoWithAutogeneratedFunctions(t *testing.T) { + NotPanics(t, func() { + testAutogeneratedFunction() + }) +} + +func TestZero(t *testing.T) { + mockT := new(testing.T) + + for _, test := range zeros { + True(t, Zero(mockT, test, "%#v is not the %v zero value", test, reflect.TypeOf(test))) + } + + for _, test := range nonZeros { + False(t, Zero(mockT, test, "%#v is not the %v zero value", test, reflect.TypeOf(test))) + } +} + +func TestNotZero(t *testing.T) { + mockT := new(testing.T) + + for _, test := range zeros { + False(t, NotZero(mockT, test, "%#v is not the %v zero value", test, reflect.TypeOf(test))) + } + + for _, test := range nonZeros { + True(t, NotZero(mockT, test, "%#v is not the %v zero value", test, reflect.TypeOf(test))) + } +} + +func TestJSONEq_EqualSONString(t *testing.T) { + mockT := new(testing.T) + True(t, JSONEq(mockT, `{"hello": "world", "foo": "bar"}`, `{"hello": "world", "foo": "bar"}`)) +} + +func TestJSONEq_EquivalentButNotEqual(t *testing.T) { + mockT := new(testing.T) + True(t, JSONEq(mockT, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`)) +} + +func TestJSONEq_HashOfArraysAndHashes(t *testing.T) { + mockT := new(testing.T) + True(t, JSONEq(mockT, "{\r\n\t\"numeric\": 1.5,\r\n\t\"array\": [{\"foo\": \"bar\"}, 1, \"string\", [\"nested\", \"array\", 5.5]],\r\n\t\"hash\": {\"nested\": \"hash\", \"nested_slice\": [\"this\", \"is\", \"nested\"]},\r\n\t\"string\": \"foo\"\r\n}", + "{\r\n\t\"numeric\": 1.5,\r\n\t\"hash\": {\"nested\": \"hash\", \"nested_slice\": [\"this\", \"is\", \"nested\"]},\r\n\t\"string\": \"foo\",\r\n\t\"array\": [{\"foo\": \"bar\"}, 1, \"string\", [\"nested\", \"array\", 5.5]]\r\n}")) +} + +func TestJSONEq_Array(t *testing.T) { + mockT := new(testing.T) + True(t, JSONEq(mockT, `["foo", {"hello": "world", "nested": "hash"}]`, `["foo", {"nested": "hash", "hello": "world"}]`)) +} + +func TestJSONEq_HashAndArrayNotEquivalent(t *testing.T) { + mockT := new(testing.T) + False(t, JSONEq(mockT, `["foo", {"hello": "world", "nested": "hash"}]`, `{"foo": "bar", {"nested": "hash", "hello": "world"}}`)) +} + +func TestJSONEq_HashesNotEquivalent(t *testing.T) { + mockT := new(testing.T) + False(t, JSONEq(mockT, `{"foo": "bar"}`, `{"foo": "bar", "hello": "world"}`)) +} + +func TestJSONEq_ActualIsNotJSON(t *testing.T) { + mockT := new(testing.T) + False(t, JSONEq(mockT, `{"foo": "bar"}`, "Not JSON")) +} + +func TestJSONEq_ExpectedIsNotJSON(t *testing.T) { + mockT := new(testing.T) + False(t, JSONEq(mockT, "Not JSON", `{"foo": "bar", "hello": "world"}`)) +} + +func TestJSONEq_ExpectedAndActualNotJSON(t *testing.T) { + mockT := new(testing.T) + False(t, JSONEq(mockT, "Not JSON", "Not JSON")) +} + +func TestJSONEq_ArraysOfDifferentOrder(t *testing.T) { + mockT := new(testing.T) + False(t, JSONEq(mockT, `["foo", {"hello": "world", "nested": "hash"}]`, `[{ "hello": "world", "nested": "hash"}, "foo"]`)) +} + +func TestDiff(t *testing.T) { + expected := ` + +Diff: +--- Expected ++++ Actual +@@ -1,3 +1,3 @@ + (struct { foo string }) { +- foo: (string) (len=5) "hello" ++ foo: (string) (len=3) "bar" + } +` + actual := diff( + struct{ foo string }{"hello"}, + struct{ foo string }{"bar"}, + ) + Equal(t, expected, actual) + + expected = ` + +Diff: +--- Expected ++++ Actual +@@ -2,5 +2,5 @@ + (int) 1, +- (int) 2, + (int) 3, +- (int) 4 ++ (int) 5, ++ (int) 7 + } +` + actual = diff( + []int{1, 2, 3, 4}, + []int{1, 3, 5, 7}, + ) + Equal(t, expected, actual) + + expected = ` + +Diff: +--- Expected ++++ Actual +@@ -2,4 +2,4 @@ + (int) 1, +- (int) 2, +- (int) 3 ++ (int) 3, ++ (int) 5 + } +` + actual = diff( + []int{1, 2, 3, 4}[0:3], + []int{1, 3, 5, 7}[0:3], + ) + Equal(t, expected, actual) + + expected = ` + +Diff: +--- Expected ++++ Actual +@@ -1,6 +1,6 @@ + (map[string]int) (len=4) { +- (string) (len=4) "four": (int) 4, ++ (string) (len=4) "five": (int) 5, + (string) (len=3) "one": (int) 1, +- (string) (len=5) "three": (int) 3, +- (string) (len=3) "two": (int) 2 ++ (string) (len=5) "seven": (int) 7, ++ (string) (len=5) "three": (int) 3 + } +` + + actual = diff( + map[string]int{"one": 1, "two": 2, "three": 3, "four": 4}, + map[string]int{"one": 1, "three": 3, "five": 5, "seven": 7}, + ) + Equal(t, expected, actual) +} + +func TestDiffEmptyCases(t *testing.T) { + Equal(t, "", diff(nil, nil)) + Equal(t, "", diff(struct{ foo string }{}, nil)) + Equal(t, "", diff(nil, struct{ foo string }{})) + Equal(t, "", diff(1, 2)) + Equal(t, "", diff(1, 2)) + Equal(t, "", diff([]int{1}, []bool{true})) +} diff --git a/Godeps/_workspace/src/github.com/stretchr/testify/assert/doc.go b/Godeps/_workspace/src/github.com/stretchr/testify/assert/doc.go index f678106287..c9dccc4d6c 100644 --- a/Godeps/_workspace/src/github.com/stretchr/testify/assert/doc.go +++ b/Godeps/_workspace/src/github.com/stretchr/testify/assert/doc.go @@ -17,7 +17,7 @@ // // } // -// if you assert many times, use the below: +// if you assert many times, use the format below: // // import ( // "testing" @@ -42,113 +42,4 @@ // // Every assertion function also takes an optional string message as the final argument, // allowing custom error messages to be appended to the message the assertion method outputs. -// -// Here is an overview of the assert functions: -// -// assert.Equal(t, expected, actual [, message [, format-args]]) -// -// assert.EqualValues(t, expected, actual [, message [, format-args]]) -// -// assert.NotEqual(t, notExpected, actual [, message [, format-args]]) -// -// assert.True(t, actualBool [, message [, format-args]]) -// -// assert.False(t, actualBool [, message [, format-args]]) -// -// assert.Nil(t, actualObject [, message [, format-args]]) -// -// assert.NotNil(t, actualObject [, message [, format-args]]) -// -// assert.Empty(t, actualObject [, message [, format-args]]) -// -// assert.NotEmpty(t, actualObject [, message [, format-args]]) -// -// assert.Len(t, actualObject, expectedLength, [, message [, format-args]]) -// -// assert.Error(t, errorObject [, message [, format-args]]) -// -// assert.NoError(t, errorObject [, message [, format-args]]) -// -// assert.EqualError(t, theError, errString [, message [, format-args]]) -// -// assert.Implements(t, (*MyInterface)(nil), new(MyObject) [,message [, format-args]]) -// -// assert.IsType(t, expectedObject, actualObject [, message [, format-args]]) -// -// assert.Contains(t, stringOrSlice, substringOrElement [, message [, format-args]]) -// -// assert.NotContains(t, stringOrSlice, substringOrElement [, message [, format-args]]) -// -// assert.Panics(t, func(){ -// -// // call code that should panic -// -// } [, message [, format-args]]) -// -// assert.NotPanics(t, func(){ -// -// // call code that should not panic -// -// } [, message [, format-args]]) -// -// assert.WithinDuration(t, timeA, timeB, deltaTime, [, message [, format-args]]) -// -// assert.InDelta(t, numA, numB, delta, [, message [, format-args]]) -// -// assert.InEpsilon(t, numA, numB, epsilon, [, message [, format-args]]) -// -// assert package contains Assertions object. it has assertion methods. -// -// Here is an overview of the assert functions: -// assert.Equal(expected, actual [, message [, format-args]]) -// -// assert.EqualValues(expected, actual [, message [, format-args]]) -// -// assert.NotEqual(notExpected, actual [, message [, format-args]]) -// -// assert.True(actualBool [, message [, format-args]]) -// -// assert.False(actualBool [, message [, format-args]]) -// -// assert.Nil(actualObject [, message [, format-args]]) -// -// assert.NotNil(actualObject [, message [, format-args]]) -// -// assert.Empty(actualObject [, message [, format-args]]) -// -// assert.NotEmpty(actualObject [, message [, format-args]]) -// -// assert.Len(actualObject, expectedLength, [, message [, format-args]]) -// -// assert.Error(errorObject [, message [, format-args]]) -// -// assert.NoError(errorObject [, message [, format-args]]) -// -// assert.EqualError(theError, errString [, message [, format-args]]) -// -// assert.Implements((*MyInterface)(nil), new(MyObject) [,message [, format-args]]) -// -// assert.IsType(expectedObject, actualObject [, message [, format-args]]) -// -// assert.Contains(stringOrSlice, substringOrElement [, message [, format-args]]) -// -// assert.NotContains(stringOrSlice, substringOrElement [, message [, format-args]]) -// -// assert.Panics(func(){ -// -// // call code that should panic -// -// } [, message [, format-args]]) -// -// assert.NotPanics(func(){ -// -// // call code that should not panic -// -// } [, message [, format-args]]) -// -// assert.WithinDuration(timeA, timeB, deltaTime, [, message [, format-args]]) -// -// assert.InDelta(numA, numB, delta, [, message [, format-args]]) -// -// assert.InEpsilon(numA, numB, epsilon, [, message [, format-args]]) package assert diff --git a/Godeps/_workspace/src/github.com/stretchr/testify/assert/forward_assertions.go b/Godeps/_workspace/src/github.com/stretchr/testify/assert/forward_assertions.go index d8d3f531ea..cab3aa2acd 100644 --- a/Godeps/_workspace/src/github.com/stretchr/testify/assert/forward_assertions.go +++ b/Godeps/_workspace/src/github.com/stretchr/testify/assert/forward_assertions.go @@ -81,7 +81,7 @@ func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) bool { // Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or a // slice with len == 0. // -// assert.Empty(obj) +// assert.Empty(obj) // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { @@ -91,9 +91,9 @@ func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { // NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or a // slice with len == 0. // -// if assert.NotEmpty(obj) { -// assert.Equal("two", obj[1]) -// } +// if assert.NotEmpty(obj) { +// assert.Equal("two", obj[1]) +// } // // Returns whether the assertion was successful (true) or not (false). func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) bool { @@ -263,3 +263,22 @@ func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...inter func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { return NotRegexp(a.t, rx, str, msgAndArgs...) } + +// Zero asserts that i is the zero value for its type and returns the truth. +func (a *Assertions) Zero(i interface{}, msgAndArgs ...interface{}) bool { + return Zero(a.t, i, msgAndArgs...) +} + +// NotZero asserts that i is not the zero value for its type and returns the truth. +func (a *Assertions) NotZero(i interface{}, msgAndArgs ...interface{}) bool { + return NotZero(a.t, i, msgAndArgs...) +} + +// JSONEq asserts that two JSON strings are equivalent. +// +// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) +// +// Returns whether the assertion was successful (true) or not (false). +func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) bool { + return JSONEq(a.t, expected, actual, msgAndArgs...) +} diff --git a/Godeps/_workspace/src/github.com/stretchr/testify/assert/forward_assertions_test.go b/Godeps/_workspace/src/github.com/stretchr/testify/assert/forward_assertions_test.go index 3df3f3917a..22e1df1d96 100644 --- a/Godeps/_workspace/src/github.com/stretchr/testify/assert/forward_assertions_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/testify/assert/forward_assertions_test.go @@ -509,3 +509,103 @@ func TestRegexpWrapper(t *testing.T) { True(t, assert.NotRegexp(regexp.MustCompile(tc.rx), tc.str)) } } + +func TestZeroWrapper(t *testing.T) { + assert := New(t) + mockAssert := New(new(testing.T)) + + for _, test := range zeros { + assert.True(mockAssert.Zero(test), "Zero should return true for %v", test) + } + + for _, test := range nonZeros { + assert.False(mockAssert.Zero(test), "Zero should return false for %v", test) + } +} + +func TestNotZeroWrapper(t *testing.T) { + assert := New(t) + mockAssert := New(new(testing.T)) + + for _, test := range zeros { + assert.False(mockAssert.NotZero(test), "Zero should return true for %v", test) + } + + for _, test := range nonZeros { + assert.True(mockAssert.NotZero(test), "Zero should return false for %v", test) + } +} + +func TestJSONEqWrapper_EqualSONString(t *testing.T) { + assert := New(new(testing.T)) + if !assert.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"hello": "world", "foo": "bar"}`) { + t.Error("JSONEq should return true") + } + +} + +func TestJSONEqWrapper_EquivalentButNotEqual(t *testing.T) { + assert := New(new(testing.T)) + if !assert.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) { + t.Error("JSONEq should return true") + } + +} + +func TestJSONEqWrapper_HashOfArraysAndHashes(t *testing.T) { + assert := New(new(testing.T)) + if !assert.JSONEq("{\r\n\t\"numeric\": 1.5,\r\n\t\"array\": [{\"foo\": \"bar\"}, 1, \"string\", [\"nested\", \"array\", 5.5]],\r\n\t\"hash\": {\"nested\": \"hash\", \"nested_slice\": [\"this\", \"is\", \"nested\"]},\r\n\t\"string\": \"foo\"\r\n}", + "{\r\n\t\"numeric\": 1.5,\r\n\t\"hash\": {\"nested\": \"hash\", \"nested_slice\": [\"this\", \"is\", \"nested\"]},\r\n\t\"string\": \"foo\",\r\n\t\"array\": [{\"foo\": \"bar\"}, 1, \"string\", [\"nested\", \"array\", 5.5]]\r\n}") { + t.Error("JSONEq should return true") + } +} + +func TestJSONEqWrapper_Array(t *testing.T) { + assert := New(new(testing.T)) + if !assert.JSONEq(`["foo", {"hello": "world", "nested": "hash"}]`, `["foo", {"nested": "hash", "hello": "world"}]`) { + t.Error("JSONEq should return true") + } + +} + +func TestJSONEqWrapper_HashAndArrayNotEquivalent(t *testing.T) { + assert := New(new(testing.T)) + if assert.JSONEq(`["foo", {"hello": "world", "nested": "hash"}]`, `{"foo": "bar", {"nested": "hash", "hello": "world"}}`) { + t.Error("JSONEq should return false") + } +} + +func TestJSONEqWrapper_HashesNotEquivalent(t *testing.T) { + assert := New(new(testing.T)) + if assert.JSONEq(`{"foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) { + t.Error("JSONEq should return false") + } +} + +func TestJSONEqWrapper_ActualIsNotJSON(t *testing.T) { + assert := New(new(testing.T)) + if assert.JSONEq(`{"foo": "bar"}`, "Not JSON") { + t.Error("JSONEq should return false") + } +} + +func TestJSONEqWrapper_ExpectedIsNotJSON(t *testing.T) { + assert := New(new(testing.T)) + if assert.JSONEq("Not JSON", `{"foo": "bar", "hello": "world"}`) { + t.Error("JSONEq should return false") + } +} + +func TestJSONEqWrapper_ExpectedAndActualNotJSON(t *testing.T) { + assert := New(new(testing.T)) + if assert.JSONEq("Not JSON", "Not JSON") { + t.Error("JSONEq should return false") + } +} + +func TestJSONEqWrapper_ArraysOfDifferentOrder(t *testing.T) { + assert := New(new(testing.T)) + if assert.JSONEq(`["foo", {"hello": "world", "nested": "hash"}]`, `[{ "hello": "world", "nested": "hash"}, "foo"]`) { + t.Error("JSONEq should return false") + } +} diff --git a/Godeps/_workspace/src/github.com/stretchr/testify/assert/http_assertions.go b/Godeps/_workspace/src/github.com/stretchr/testify/assert/http_assertions.go index 1246e58e0e..437a86ce47 100644 --- a/Godeps/_workspace/src/github.com/stretchr/testify/assert/http_assertions.go +++ b/Godeps/_workspace/src/github.com/stretchr/testify/assert/http_assertions.go @@ -10,9 +10,9 @@ import ( // httpCode is a helper that returns HTTP code of the response. It returns -1 // if building a new request fails. -func httpCode(handler http.HandlerFunc, mode, url string, values url.Values) int { +func httpCode(handler http.HandlerFunc, method, url string, values url.Values) int { w := httptest.NewRecorder() - req, err := http.NewRequest(mode, url+"?"+values.Encode(), nil) + req, err := http.NewRequest(method, url+"?"+values.Encode(), nil) if err != nil { return -1 } @@ -25,8 +25,8 @@ func httpCode(handler http.HandlerFunc, mode, url string, values url.Values) int // assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) // // Returns whether the assertion was successful (true) or not (false). -func HTTPSuccess(t TestingT, handler http.HandlerFunc, mode, url string, values url.Values) bool { - code := httpCode(handler, mode, url, values) +func HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, values url.Values) bool { + code := httpCode(handler, method, url, values) if code == -1 { return false } @@ -38,8 +38,8 @@ func HTTPSuccess(t TestingT, handler http.HandlerFunc, mode, url string, values // assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). -func HTTPRedirect(t TestingT, handler http.HandlerFunc, mode, url string, values url.Values) bool { - code := httpCode(handler, mode, url, values) +func HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, values url.Values) bool { + code := httpCode(handler, method, url, values) if code == -1 { return false } @@ -51,8 +51,8 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, mode, url string, values // assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). -func HTTPError(t TestingT, handler http.HandlerFunc, mode, url string, values url.Values) bool { - code := httpCode(handler, mode, url, values) +func HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values url.Values) bool { + code := httpCode(handler, method, url, values) if code == -1 { return false } @@ -61,9 +61,9 @@ func HTTPError(t TestingT, handler http.HandlerFunc, mode, url string, values ur // HTTPBody is a helper that returns HTTP body of the response. It returns // empty string if building a new request fails. -func HTTPBody(handler http.HandlerFunc, mode, url string, values url.Values) string { +func HTTPBody(handler http.HandlerFunc, method, url string, values url.Values) string { w := httptest.NewRecorder() - req, err := http.NewRequest(mode, url+"?"+values.Encode(), nil) + req, err := http.NewRequest(method, url+"?"+values.Encode(), nil) if err != nil { return "" } @@ -77,8 +77,8 @@ func HTTPBody(handler http.HandlerFunc, mode, url string, values url.Values) str // assert.HTTPBodyContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). -func HTTPBodyContains(t TestingT, handler http.HandlerFunc, mode, url string, values url.Values, str interface{}) bool { - body := HTTPBody(handler, mode, url, values) +func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}) bool { + body := HTTPBody(handler, method, url, values) contains := strings.Contains(body, fmt.Sprint(str)) if !contains { @@ -94,8 +94,8 @@ func HTTPBodyContains(t TestingT, handler http.HandlerFunc, mode, url string, va // assert.HTTPBodyNotContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). -func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, mode, url string, values url.Values, str interface{}) bool { - body := HTTPBody(handler, mode, url, values) +func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}) bool { + body := HTTPBody(handler, method, url, values) contains := strings.Contains(body, fmt.Sprint(str)) if contains { @@ -114,8 +114,8 @@ func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, mode, url string, // assert.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) // // Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, mode, url string, values url.Values) bool { - return HTTPSuccess(a.t, handler, mode, url, values) +func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method, url string, values url.Values) bool { + return HTTPSuccess(a.t, handler, method, url, values) } // HTTPRedirect asserts that a specified handler returns a redirect status code. @@ -123,8 +123,8 @@ func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, mode, url string, val // assert.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, mode, url string, values url.Values) bool { - return HTTPRedirect(a.t, handler, mode, url, values) +func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method, url string, values url.Values) bool { + return HTTPRedirect(a.t, handler, method, url, values) } // HTTPError asserts that a specified handler returns an error status code. @@ -132,8 +132,8 @@ func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, mode, url string, va // assert.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPError(handler http.HandlerFunc, mode, url string, values url.Values) bool { - return HTTPError(a.t, handler, mode, url, values) +func (a *Assertions) HTTPError(handler http.HandlerFunc, method, url string, values url.Values) bool { + return HTTPError(a.t, handler, method, url, values) } // HTTPBodyContains asserts that a specified handler returns a @@ -142,8 +142,8 @@ func (a *Assertions) HTTPError(handler http.HandlerFunc, mode, url string, value // assert.HTTPBodyContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, mode, url string, values url.Values, str interface{}) bool { - return HTTPBodyContains(a.t, handler, mode, url, values, str) +func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method, url string, values url.Values, str interface{}) bool { + return HTTPBodyContains(a.t, handler, method, url, values, str) } // HTTPBodyNotContains asserts that a specified handler returns a @@ -152,6 +152,6 @@ func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, mode, url string // assert.HTTPBodyNotContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, mode, url string, values url.Values, str interface{}) bool { - return HTTPBodyNotContains(a.t, handler, mode, url, values, str) +func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method, url string, values url.Values, str interface{}) bool { + return HTTPBodyNotContains(a.t, handler, method, url, values, str) } diff --git a/Godeps/_workspace/src/github.com/stretchr/testify/mock/mock.go b/Godeps/_workspace/src/github.com/stretchr/testify/mock/mock.go index fa8747e29f..36de9e659c 100644 --- a/Godeps/_workspace/src/github.com/stretchr/testify/mock/mock.go +++ b/Godeps/_workspace/src/github.com/stretchr/testify/mock/mock.go @@ -2,13 +2,15 @@ package mock import ( "fmt" - "github.com/stretchr/objx" - "github.com/stretchr/testify/assert" "reflect" + "regexp" "runtime" "strings" "sync" "time" + + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/objx" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" ) // TestingT is an interface wrapper around *testing.T @@ -24,6 +26,7 @@ type TestingT interface { // Call represents a method call and is used for setting expectations, // as well as recording activity. type Call struct { + Parent *Mock // The name of the method that was or will be called. Method string @@ -46,24 +49,113 @@ type Call struct { // Holds a handler used to manipulate arguments content that are passed by // reference. It's useful when mocking methods such as unmarshalers or // decoders. - Run func(Arguments) + RunFn func(Arguments) +} + +func newCall(parent *Mock, methodName string, methodArguments ...interface{}) *Call { + return &Call{ + Parent: parent, + Method: methodName, + Arguments: methodArguments, + ReturnArguments: make([]interface{}, 0), + Repeatability: 0, + WaitFor: nil, + RunFn: nil, + } +} + +func (self *Call) lock() { + self.Parent.mutex.Lock() +} + +func (self *Call) unlock() { + self.Parent.mutex.Unlock() +} + +func (self *Call) Return(returnArguments ...interface{}) *Call { + self.lock() + defer self.unlock() + + self.ReturnArguments = returnArguments + + return self +} + +// Once indicates that that the mock should only return the value once. +// +// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Once() +func (self *Call) Once() *Call { + return self.Times(1) +} + +// Twice indicates that that the mock should only return the value twice. +// +// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Twice() +func (self *Call) Twice() *Call { + return self.Times(2) +} + +// Times indicates that that the mock should only return the indicated number +// of times. +// +// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Times(5) +func (self *Call) Times(i int) *Call { + self.lock() + defer self.unlock() + self.Repeatability = i + return self +} + +// WaitUntil sets the channel that will block the mock's return until its closed +// or a message is received. +// +// Mock.On("MyMethod", arg1, arg2).WaitUntil(time.After(time.Second)) +func (self *Call) WaitUntil(w <-chan time.Time) *Call { + self.lock() + defer self.unlock() + self.WaitFor = w + return self +} + +// After sets how long to block until the call returns +// +// Mock.On("MyMethod", arg1, arg2).After(time.Second) +func (self *Call) After(d time.Duration) *Call { + return self.WaitUntil(time.After(d)) +} + +// Run sets a handler to be called before returning. It can be used when +// mocking a method such as unmarshalers that takes a pointer to a struct and +// sets properties in such struct +// +// Mock.On("Unmarshal", AnythingOfType("*map[string]interface{}").Return().Run(function(args Arguments) { +// arg := args.Get(0).(*map[string]interface{}) +// arg["foo"] = "bar" +// }) +func (self *Call) Run(fn func(Arguments)) *Call { + self.lock() + defer self.unlock() + self.RunFn = fn + return self +} + +// On chains a new expectation description onto the mocked interface. This +// allows syntax like. +// +// Mock. +// On("MyMethod", 1).Return(nil). +// On("MyOtherMethod", 'a', 'b', 'c').Return(errors.New("Some Error")) +func (self *Call) On(methodName string, arguments ...interface{}) *Call { + return self.Parent.On(methodName, arguments...) } // Mock is the workhorse used to track activity on another object. -// For an example of its usage, refer to the "Example Usage" section at the top of this document. +// For an example of its usage, refer to the "Example Usage" section at the top +// of this document. type Mock struct { - - // The method name that is currently - // being referred to by the On method. - onMethodName string - - // An array of the arguments that are - // currently being referred to by the On method. - onMethodArguments Arguments - // Represents the calls that are expected of // an object. - ExpectedCalls []Call + ExpectedCalls []*Call // Holds the calls that were made to this mocked object. Calls []Call @@ -94,90 +186,33 @@ func (m *Mock) TestData() objx.Map { // being called. // // Mock.On("MyMethod", arg1, arg2) -func (m *Mock) On(methodName string, arguments ...interface{}) *Mock { - m.onMethodName = methodName - m.onMethodArguments = arguments - +func (self *Mock) On(methodName string, arguments ...interface{}) *Call { for _, arg := range arguments { if v := reflect.ValueOf(arg); v.Kind() == reflect.Func { panic(fmt.Sprintf("cannot use Func in expectations. Use mock.AnythingOfType(\"%T\")", arg)) } } - return m + self.mutex.Lock() + defer self.mutex.Unlock() + c := newCall(self, methodName, arguments...) + self.ExpectedCalls = append(self.ExpectedCalls, c) + return c } -// Return finishes a description of an expectation of the method (and arguments) -// specified in the most recent On method call. -// -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2) -func (m *Mock) Return(returnArguments ...interface{}) *Mock { - m.ExpectedCalls = append(m.ExpectedCalls, Call{m.onMethodName, m.onMethodArguments, returnArguments, 0, nil, nil}) - return m -} - -// Once indicates that that the mock should only return the value once. -// -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Once() -func (m *Mock) Once() { - m.ExpectedCalls[len(m.ExpectedCalls)-1].Repeatability = 1 -} - -// Twice indicates that that the mock should only return the value twice. -// -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Twice() -func (m *Mock) Twice() { - m.ExpectedCalls[len(m.ExpectedCalls)-1].Repeatability = 2 -} - -// Times indicates that that the mock should only return the indicated number -// of times. -// -// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Times(5) -func (m *Mock) Times(i int) { - m.ExpectedCalls[len(m.ExpectedCalls)-1].Repeatability = i -} - -// WaitUntil sets the channel that will block the mock's return until its closed -// or a message is received. -// -// Mock.On("MyMethod", arg1, arg2).WaitUntil(time.After(time.Second)) -func (m *Mock) WaitUntil(w <-chan time.Time) *Mock { - m.ExpectedCalls[len(m.ExpectedCalls)-1].WaitFor = w - return m -} - -// After sets how long to block until the call returns -// -// Mock.On("MyMethod", arg1, arg2).After(time.Second) -func (m *Mock) After(d time.Duration) *Mock { - return m.WaitUntil(time.After(d)) -} - -// Run sets a handler to be called before returning. It can be used when -// mocking a method such as unmarshalers that takes a pointer to a struct and -// sets properties in such struct -// -// Mock.On("Unmarshal", AnythingOfType("*map[string]interface{}").Return().Run(function(args Arguments) { -// arg := args.Get(0).(*map[string]interface{}) -// arg["foo"] = "bar" -// }) -func (m *Mock) Run(fn func(Arguments)) *Mock { - m.ExpectedCalls[len(m.ExpectedCalls)-1].Run = fn - return m -} - -/* - Recording and responding to activity -*/ +// /* +// Recording and responding to activity +// */ func (m *Mock) findExpectedCall(method string, arguments ...interface{}) (int, *Call) { + m.mutex.Lock() + defer m.mutex.Unlock() for i, call := range m.ExpectedCalls { if call.Method == method && call.Repeatability > -1 { _, diffCount := call.Arguments.Diff(arguments) if diffCount == 0 { - return i, &call + return i, call } } @@ -186,17 +221,16 @@ func (m *Mock) findExpectedCall(method string, arguments ...interface{}) (int, * } func (m *Mock) findClosestCall(method string, arguments ...interface{}) (bool, *Call) { - diffCount := 0 var closestCall *Call = nil - for _, call := range m.ExpectedCalls { + for _, call := range m.expectedCalls() { if call.Method == method { _, tempDiffCount := call.Arguments.Diff(arguments) if tempDiffCount < diffCount || diffCount == 0 { diffCount = tempDiffCount - closestCall = &call + closestCall = call } } @@ -215,7 +249,7 @@ func callString(method string, arguments Arguments, includeArgumentValues bool) if includeArgumentValues { var argVals []string for argIndex, arg := range arguments { - argVals = append(argVals, fmt.Sprintf("%d: %v", argIndex, arg)) + argVals = append(argVals, fmt.Sprintf("%d: %#v", argIndex, arg)) } argValsString = fmt.Sprintf("\n\t\t%s", strings.Join(argVals, "\n\t\t")) } @@ -228,22 +262,26 @@ func callString(method string, arguments Arguments, includeArgumentValues bool) // appropriate .On .Return() calls) // If Call.WaitFor is set, blocks until the channel is closed or receives a message. func (m *Mock) Called(arguments ...interface{}) Arguments { - defer m.mutex.Unlock() - m.mutex.Lock() - // get the calling function's name pc, _, _, ok := runtime.Caller(1) if !ok { panic("Couldn't get the caller information") } functionPath := runtime.FuncForPC(pc).Name() + //Next four lines are required to use GCCGO function naming conventions. + //For Ex: github_com_docker_libkv_store_mock.WatchTree.pN39_github_com_docker_libkv_store_mock.Mock + //uses inteface information unlike golang github.com/docker/libkv/store/mock.(*Mock).WatchTree + //With GCCGO we need to remove interface information starting from pN

    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Ü(-}6owGr|1Yq?hac8dMd0-EHLxUld^c zlv$ErczXlBy;#@!dg$Enp#Qi+L4$uteWmrCQxgLiR<@_BTB*&N!5N4{>Qe~r!|LS` zqZ&rPP%@q|F_qj+_3la*nm-%FBJYfrPSbBY(}hE#e0Q*6{{bfOzp6@_l@~F)!+@u- zvs!A1R`iF>f<0*uqwICne}JE>U*t3N)ao94R=-n^oh^Zm+-p|l<~ypd9T0$_h)9fC zZsqw`vm)s_Nv_L0mTDg!867Xoe<~J{Z?YaYo5Y{iny87|Yn4$r=%$*Xv!KhQEBn@o zzdC{2ODDCqf*gBb`yz(usdDpgrQ>n!l8bzd3RBUvjAVJ$?W01 zruzDY@f!JG{P7k%GIbV?lSl;lQ>9{N*`Q{@RN<%rj%wv>af?&7N5VMDelb3DaY*rw zuC!T@T2n5Cz{0j!w;;fATf@Y~<)l7?#3>GTP^_C&Z!7towHEPOa%5;GHrpZZC#Gp)7wqnw^c`U1U>JCHbxj^ouT4ILkIu`>vHY^H?WYGKgM z8R5gy{Ehtc(}}W`<`saOjA{D3ngGQN16$UMNIZeGCz~9i+Mdf88H}0Ws{ahe7|(+i z^v#3HuP2bX(6Hk0__RTFsj*f7sjli=ctPF+%*;&81RqP+?8rDqd%fN ztxl)ILXejFTu798FS+J6_E@JmU2-FlUrTq|)nR7<e7kk^#03B(M6%|62Nq z(MvC0yEJ^s-gQVr=#*YIrZ|w{38EMj%>8S^vi;>VKY9OF7)#SLme&`CVRT*&pEaU* zTcWUx+W6~`nz*GG`E!$reB6r-oB*`k8>t1n^#azk>y`=y1*~2pKF6WMiTEfeZx0N$ zc2sqr1VDdQlEpcrFzFEjhr>;BX>c>t`JkSaYJ?s=oT=e<)HhA{6~VD=1?TC&np>}) z9oZljRZSJ2=&(MNp<8B`pKGrlOP(Hc0b#MgLB(ka((jehL8kT8-YU#AG_+ZujKB50 z*DShLOqwAHGpaj_^+S>+4rORT-WPG4$xhiR=zZk$O#1uMAD$iugwdb);Qhj!b}k(j z!yAd&OQB2e>f8rzYTQ3BMG{>_?vz&!94)1kaF`T%LKY2{t2O=jd^Ub$j3+pTRbc{Fs9B z{HKuR$+RY8%PZutqTpP1Gx@SMB;dSCh3l85tw%k%<3E5vKamdpb6g_j+EN^?I;HE> zm&M-;MDr)#lDwPRQ`kKxFC~@Y$iA6&ItpUnpjWOpfY`l`qor~xBU&qQjL+7YgPDLL zF_HR2#9bE|uW%opdYm?lC`=bhw{`c#r23}vZupTajE^d>3SE)Z%o|@YR@;9j9(J-WjT~{@AmPykRrf z<)F`G=UPSTN@BXtpDb_mT}(uC*z-q|t)j)AJQEBzdMJr8QOxgzs$DbJF*T!6i4x3g zhjO`*LZ|RZ^Kv2nJ{v!$3qE?a@Rt`iy% z>7luRh+pM%ep+kAGq2}FR{UJ4^=cih+9U@b$R2P7h>NLvJ7_;G*Lgx8e34soUVFRE zRKRjA?+bFs9-m*kImRXd2qsCb4}7?zCi56euPQ9TXG**Km-fTdg(-Ml|FT!&&ta-< zs^L>n(|aR26w49X{{Z&pvKT$)eQS0@#L1L&qLANPSJ91g3G%xEM6xukd@M1utfp=} z@u_`Sa5asqs*l*GMCkF?#N*3q+xy>sQQ1?Fp{=-Ioz*)(xiOt?juCe9!i#D}_|i=-T;`v0nqa{ZCD9bDs9Y=D_Y@=ebZW`ObIs`$hUaH=03S^4i zmxczy%3tzB!RDzcl9w4TtPALRcW#K**+s`tv^|eOt<&%;wqvb4K2RD{6;Q5&C zsb5l~!scq}S%-0<%$MF9Xm=VrK=A8TMP_fZK&XICCLrS2uy^=`TbfDBdX-&Lg%NZN z=7+=@KFy2beAco?uQEVuD4sf>z-Ev6!fY=}S?aF7V>-(4u?aHg-7cR91VUz>u9wG; zo(p7xw~Z-(51-Z!>fOxc2!>bO6+A+YR7L=5?y{wN0X(%(;7sI%j=1TFH08 zrw(_9i9J|lj&G-_(*|@8^#w4o=Hlh5WPfJWZvT*XDz_kje|T!>i-^;|wEW{>I_UMR z59_?rFmi*6$cGALF0!%zOI?5-)Qa0zirX-&$1f~RJV2-mOnE+E_!zx6ZM^B*WUxNQ zPHg_m{^*x-|pY@N#rz6(6$Cy@4J+S_Xw4-JE{-z ze0E)6ia&y`R#XoLA7(FeDMV7T)~t(fHnWGg@n;@S+?+U+oveq`6SgIyAH+cmaz_Vu8joP z$O(8I>sqxL&N@@Yu>UY`P)g}rDd2H~HoeR<)MnQ#JMZH@sQ667kCFC{0UV-N;dzU& zd}HW^fi**%FP);Gs|wX3Od;7Yh}JIesAL$taayKvwbTFtNejQ~KKqy^XEyrcThkmm zb6<%0SCGp!^C8vaKgs@k0T76Y-tF<)FKB_byWuc%t+5XJez4Mq4fE;vI4?YV%M#*+ z2SciYQ=t?r=nP^dd_LDo%#w2~iRgy>iV%!DD8!&vX`dLp50QzEov(?&M$vxH`=IL^ zw0y^F(uYcF(rB1+W)8+fgi`iVpK}4f@6s`Q+c2k29hhWDrR2+M!@=gcYY66g@ zsmyL*d06W+M?j$Rsvyrrps3*fzzxd3Vpcq2Jb3ocp7Uc3P&8r_KBD*{|U&a5BZy%}EnXV)$~D}@xtsCE9Ma@wif z&#f)tb|$xguoVyxe0~*KDD<`E=?2MJ;$zANHrTFMggDXR_27OPQ@0=7#uzZ}e+-a2 zk}R%w9*el^a&pT+aVuG`T(GK=^39w8jEA-obTlZTr%S+MnS zyLi;2^zZ>rdu1~8C()nx_U)W(f4kc$uHvHKGKgJw(}WoK6}f3|j*@X7X!F6+`$zRM z-}mbz%DlS*72|Vm?l$(-n=GWeJmy53m9t=l)t0NH2rCRbHoj zG#o1a2e4qsNQO4JT~OE{T`AEe zw3ddOe6w8Y*lD#lFB+=+%*)bL7rzjrb9s0%^XO+4Ph4-!Ef{GnACwNl?tegZjHuh> z6Sz~BE_4Ht9kQBzZy2MOrtU(6mUE5?CCc;Bcq7Zkj(i)2X03(SH(wm-a3yW;QiMhD zKQN`=c!5-gpc5;BzeFx(MfbUt94!4LsK8_lQ6y7ue6nnpbDpq98-2Buj6QaZhOeeY zPR(O6sclpst`68P(qwV!eI$Q{Sz6-s;d~_u)1$*F zetPCN#uL~O_-jUW4Rd4~iGy$C{rSS1SuMU%R>EO~S7+6)oPLbrJy^M=`dB?=_rdm9 zrrjre0`^wII7~`isVAS&fb*YOed8NB{NIAG5dv)s0Zuw208!AhIj<$r?uqV3C@lqT z>Mtp&puSt;% zka{1o%mykKvUhpKEK0Q#Ytq8)(6=#bYp}tP|6nN8RI%zUsr4^0#qIHb0I@0Ect5(P z14Hleq11O0?u{cGW2a9}{(f)y~MRlp%oG0x0uB}1$%qu68KJR|nZMxUhw$X1-D z1gRZt&v25?-}H=rYZ=)78f7L*%RPGKVbc?apDz^#J8Z=2j=T8DYz~*J=mWpNq>kBD zz(D3-psXk{|Cu)>T!(J*TF-r870ovXL0-o@hN(d_V{-u$VlG_*o2mMy;MF)9h_4)e zKHk)hJ&P}WM!B(;QKOm>MYIUlDfb1WWGaS^OkJG4)=+X7;)d6<8svv%SWJ@KxV3F* zqAscpWMQicDKz3+nt#=l#{|KXJ(s34KR>D7jLMP^n^{!dYEoY!GIceRC5GCeo)Tin zm3E)H(xX187-b!y#ql0UF_pz6_y$WmsZ8`zJ%5Z5&$2fK=aPTXsbAma%ZdldOMUj3 z*=@_$G5oJXP~k~%WnDu9`I|gudi-hCg*fXN7Fxf`mAp;5HgF;^NJ#eyzwNq6%^0h) zVD(<=v-2ueeXH*h(U^3YG_|_BM@vT=$=Nd$!W232Dit|l66(A{M0IqK zXsz@JR9PDai#Djy(1`Hm-#CE*XX`Cx^{3;^7PBSpSb!>MJv!dM@|$hWN)0BDw9Q4x zGypc7-d03PJPZMtov*2YN`|C5Dax#kc``ge=#w18igRub$bo3YO7SY$0IlQGde{C| zL7td+4Dq7x`M8Z)QhO*%ODA1JZ~uq(mcR4*j>ayrb7z2koYm3^N1%&hNH%S5d3wS<3HXojRNW``29R-l8Xc=* zin{k5RW6<=I(W6Mei}Th8#0S{bjZHy_xvRgBb4?%6v#-3WAjAK!H3YQ+Azuo7px=;eSBXDJO15>w+O3*c^( z`z!()OPg%QQ*Rz`Un5?x>@Y13`~$elv@;xd53&g&hfizT)63qL!j`&SdmrV}oGAPQ zU@dB^R=+nZ=S#~+D_+!m8g=Sfj<$a_Ji5WOV+KBzeDVr7dLC?C<{0Os9tZ90{eyK% zCvnelywBVj`fGpOaFBIbQD?({H^PHk@@dLzKPZP^BddI>*&phxb-TQcq`7RKRYEpj zXYGsdZa{+Gh0J8K5es@bMRLyb*>JEBQS?NgD2-6PGe%Sg- zn1maqiXwoH>dH&W8j{b}@Djqkt3|Yu=-eNAb5$)b$Go6U`rej28-Y;4HT&%irRQ3IoQon0U3qs}yT-w;_IUQn zdOeEQ6P0q94mX~#IbDexua|Q$eeUJ=IK|o00)K>FMcUSiEbDpc4;@4-2aKH7Fp*@h z$h%ONN)E4OlHOJhUPjuf6^{6cw)W*n;Pz34eSeOW@7&r$jW&x>cUbs}6FVOIPiuTj zd8XJ^E|OQTEx6ZI1%|DLm10^qeh4*>Tiu(-Pr!Iz@Dj<&mT_-WSLEErLc@wW6a}Nr zI~W19hwQ5Z!I0u#^_1S~ON!m75I$Cd2aPK6#5|svtI8NFeD&^@F@Eyha zEZ6g$J*zZ@rp&bLkKS}eWdYZ%1|I@pWOTW1+^OU9h-%TYkgE-cRSHzokPp?Me!9-h z+*N3YPb`STC=4x9e^*@O$PIor^$$SAbSBXRrLbZ5O#gPJ8%0K5_s})*9RCcrijaKfWs zVsA(b=uEz^d=)utiuFpi{b|?dA%@ZsDN>%oo7r=w*dJ!Qu9AEUXCQ_jf9$lUSsbFO ziL#NpTZ<4kR+6X<)Ghq?R+s5NETtDdV)pphFKA*E<54j#Z7@%Ul&I!A9aQgfDYt$f zR5jJ6JVh|d-H$KSp#eBzV*J%@lOU4sx4iq6Ma77(og!p5BMQ!Z=m^1ga7z#h{h8Cr z{Eaa}dIyZ+lw}1fn6*)?l7^c---$fke)h2pi&Lm_9zRHKT*0 z16PCvQD7Gs@aT#%cVDk`ZReFNbzsrJdByI9ob$HP&0(mPysS zQOdI5aNt`k{p-lX-aGr&AqA#ltOHrJ3sd|Z6v zyUfw??I0g{i>I<HJ(-X0n-GfI&YqbF(rG| zJ?mBdDdr(ma!)69H0o?Zv5b<6JDaFVb%t>zh=o0_c#z7*sO7&>fN(&|E0~-9z=ae%$7HQohVk5F0&{l*tonzj0`hF6B1zGu)|# zU4d&dBA!m`h8gs=!{7G@<@Tb~3HBE+;MMHPxiTOgXY4xG3818X|Iep@LC5*MEywnB z(3__wCiYskPsI_#us_Mqkisf^Jcq+oZoEO!y+TD_&}?X>-p)X37d~l;Zc#>Xr*^nK737aSye^uLCKA zM3L#@W@|1q-L%SrDGnFMODrZ~jGEn9le7k+gl{8*Mo(`vO|B#=>n3Q42+?`De7+a+ z@wSuF8My(~V=g~Wo}_{(S~~r(&r9JC(lsWgkJZx=j9wA-uR4OrUvQ)4Kl#Kz2mw!q z)^5x7{!}|G>N%XLj3NKtlQ=eaRtHtLAZ_k_w!L95I^6;4SkIFZp_XL8@>6@BX&}Br z0=5c-htGbXDCo?RELsaw0eH?6X^CW8^np`orW}BZhrOdhnAbw>kDvccoG;g3CzNj^^q*#)A4c18W6F>TUZ1P}V@9|g@jT&K^<{u#S zxN3IX+F9OcloHq`5pMo!5z&?gp{1M(!_5a%n7jIxg~FC!qAPDMT|~;IdHi%$+i3V~ zl*7t{#NKI~O^c7IGC?tXc@Nq)X*mv!7NeLJ8~UYC+<#hY5Z{%y*!vIQiCIeHW_z)n zu6z}6qKy~@tT@X>pG;T_|KwSq{VGN%_9AxKU}r6l5QaZWX+}GJB%|bu`#B0_zI_~g zu@tb|%c%4-X8A;UJyNjko@qMibMH(4C`w|qZrf&kt&s=30nCVwoh7#YyB<@>X3*$> zAh$;G7Y^5f)Lh|A4{o+|?&ARZbdG~Yq;<(AFD7Z_9ZoswRV9U+y0pfZz|}l1rw2=| zHcc;XRIu_?ZLrI`9j_OQ#@m@qo&z&>Ot~KB!f|qQ?j5YiYqi&|;PotnuY z+O0~h^-gd?#-cjPaJLoTnci9rOE$Z=2|HVlf_(1+a@eBYQ%=AaWRwa8B_zIuOoa&p zyT2DG#nB4vlHL{$Q3x)r)c-q|Ol0s9H7q*zho~8nF(JXjUiKD+ zP7d2A5S-2qc9v%t%vVoE0+Y{73mK9o@ueJdV9@>W^X#mG-cPZ!B5h1pk}(|_Yvg-} zVWd}Kj-)RUa8gZlD=#hS8yP8^rgdy%xjqwQ>fJF4np~Hhef7s&=$M?Sjk)OepLRa1 z%8Rl;ozT^pl$=|C?aHgF)NR3)E?}HzHUdo5ef|%S*=|q$0!9C=Yp#SpMn$;?HP>|W z+h;W8!_Um=x4fK-b@R!V(_Pq0%uR{6E{BL^nh1ds#(U=A{m?(=UCsMOYZiF$6826j zWA*Y%9_&>NfWp`rb*L^oswJKpmPwMyv3pXpPfYN&pIN5hd1c3XFjJ<*DCQ(~Q+r!C zrR8kB>IU*iLj343!z|mLf-gBnMi_i0CID{J-6KK(>J~fI`}v<5)2d8p3zrwX@iOjB z+;Ao>XcyL6+rgSKh)=4XGXIT!@k!26Q?u*by*Hq|E3G+UU$G`EXBrU&$e2VL9cNLk z`g%5Z4711N_`P3CgAp%;cj-pbNAFia%p#KnAP^8xM*urVPqiv?Y*FnPWpQpjj-@B& z0A6(VR!Y>!%aD)-oYZXdo8I>2^f%1|IAiz9aCtNs!Ly6wFA7d|wpdry4J2xg?w*d+ z%o>C~L}A9G_3`bWHfi{D--r~|bX7RdR#veu9DXSf{Y!;)+fcmGUelDQn5uhCPc{6< z!osNpeJbpw0ytO7v}TfWa>tu?2W*?`KjG=V`Ks%WX=DG%t57wn5x%2p-Tt1F`!)k5 zUaNZq^r@3h=`oM-%OQQ*tUQ)}K6Ok!Plr=o2rJ}pLN{flT)>7Y$7*PTc$16NonaEJ zGW88(6e?EhoAV!;c))~_k6niRonB?Y_^d7J1U1ki0EFanq~GD1Dh&7CS&u+Nu}uVB z>yPpIs2yrJKfak(&As(_j3HynvzUv?mxWDmc)UNVm!xQ}WFO#sT$5dvZFwN*%;%01 z>>)loa5{vxkgD$@U7k@99>qeHzYq54q0(B*wsIC+sGHcO38{qYu1Pv86xdj z=$qa!H3_f?>r|b$@iM{wtTqD?l}>x$AZMYDd@s_?)R8*VnzGkK=WBBt3?>w5+Q(x| z3V!GL!Rmf3g{%hE>fOzqiwtg%o1PY;$-gf_9vk(bIT8?wE2JpSVt3pGjjC=BUuSNo zW`Hr7P09gb;btORnCEJhqK4u4WS>2Ed7*54YvQjZijZ zF)sV5>_kdjpE;wVgoj_n$1A-9Im$2}PUu%Ck>g0~nbtuY6eBr|iy%%>mxl_zG;7RW z{@n|_M1N+~BRUd129u=b%-4Q(=Q$PaUN8o_aI8TGwM9NQ$C#5(T}V^kdXiFLlR!Z$ zI1p6NC9Go(A*S~;n=T6@QvViS04QKU_T||}CLt!qr$9)U`P;$xDD7el5_@`j{kU4# zuJYm^faWt#uKerO7xIIg&o)jjr=(d%hZ_kTvX%PSPptgl!JVnK2^+EQj;sP|<@;e) zZ`pr5E)MDQr44owJ0UhyYfoy|tv_>gNvuU5U?$8N2GbA8X-WbV4Wx6mZ*-?j(~ulo zdDeWFVRNco7XN5TbVo7=8dpE%Um}ycQ;x>C+FVvN7 z=OW&~6l_X2t2~+UvL~Ugl~FpVos|zxNS!R9oE~-ZdTL2T4-v|(jvs@mziFv*RQ?o% z9*bR|aU*=n@sQV@&q~Eye#ipRQGvt`1a>dnb02zNDtI4Ic}hA5i4^RLF&e!=_c6Df zdyhfjY1U`e%g8GW-8(mOXKlnOjhEUPGKzd}v#1VWmJ|E>AhDBLf)AQQO)1E2z%H0& z7yOB|@ciLb7tPXT3Am=Hbe5Y4auN&6aZ#&(rx;HyFr|4=JeyzYA@lpb%9?p-vJo&A zUHIGaGAiGy+Qs2AI=!!v7r3{;IOnS#Efsd+Xe^OnCI~ zjjExCM!>^*HnqcLs-=dtDf{CI!*`LRDM#^?B?9nMPXE&#vlq!Y7S%;so~0?`C8V5n z+sG;1{omJr8~^^9sjKR%Y8U|kqyPYbo-cKu(;XG|)6xC6@nN0=CpNH6wlk z{$2e8n5kQf{Z}RqjKs1y@e@QG&8;-d5&zBn_wRBVp^Y&Af6CWjD-BKc|H}Uji2q;N z#6ng7zj^=u{i{_sGyb1-{(aj&&`|xK;}WZ2M{cIB^WU+6#F0lGq4z)g|8E;&`TyN^ z67m1753tHNP}MOcE+*C=pzy!-`EULItL{6`VaP50ld0#Sbw9nHsMJ@CA9dGsUM+>H z>JVVisWu@~DgFXO@h^vUJsiUV!J$XW1^)NIz^IbF^OJhbl_A rqS4V%v0aD{F6Z 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 XW_s8uU%dyOy=N466g@y~Y9KEV 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/corrupt/max_uint32_exif.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/corrupt/max_uint32_exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a51b0ba0a1dd31df81ed97fed0943384461fde3 GIT binary patch literal 65536 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 X%=EBRzIqRy=k_5fzv7ekhG72($gd)& literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/example_test.go b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/example_test.go index 45fd5d4ad8..dd99da6db4 100644 --- a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/example_test.go +++ b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/example_test.go @@ -5,7 +5,7 @@ import ( "log" "os" - "github.com/rwcarlsen/goexif/exif" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif" "github.com/rwcarlsen/goexif/mknote" ) diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/exif.go b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/exif.go index b420729da5..b24793a3c8 100644 --- a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/exif.go +++ b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/exif.go @@ -16,7 +16,7 @@ import ( "strings" "time" - "github.com/rwcarlsen/goexif/tiff" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/rwcarlsen/goexif/tiff" ) const ( @@ -574,7 +574,7 @@ func newAppSec(marker byte, r io.Reader) (*appSec, error) { } dataLenBytes := make([]byte, 2) - for k,_ := range dataLenBytes { + for k, _ := range dataLenBytes { c, err := br.ReadByte() if err != nil { return nil, err diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/exif_test.go b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/exif_test.go index c53f1ddda7..70dad6009a 100644 --- a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/exif_test.go +++ b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/exif_test.go @@ -12,7 +12,7 @@ import ( "strings" "testing" - "github.com/rwcarlsen/goexif/tiff" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/rwcarlsen/goexif/tiff" ) var dataDir = flag.String("test_data_dir", ".", "Directory where the data files for testing are located") diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/regen_regress.go b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/regen_regress.go index 17bac52875..52fb2dd081 100644 --- a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/regen_regress.go +++ b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/regen_regress.go @@ -11,8 +11,8 @@ import ( "path/filepath" "strings" - "github.com/rwcarlsen/goexif/exif" - "github.com/rwcarlsen/goexif/tiff" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/rwcarlsen/goexif/tiff" ) func main() { diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/sample1.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/sample1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87bcf8e33a54e6a6608c7d789175395f2b223b5a GIT binary patch literal 80603 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.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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2004-01-11-22-45-15-sep-2004-01-11-22-45-15a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2004-01-11-22-45-15-sep-2004-01-11-22-45-15a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f3be2480bb4694b77a72e0f550b0fd1989ce981 GIT binary patch literal 4586 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 UN!k9s$ysYkg)l^zBDse87wJV7p8x;= literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-08-03-16-29-38-sep-2006-08-03-16-29-38a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-08-03-16-29-38-sep-2006-08-03-16-29-38a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39891df842db6b4414d597f561333e572fb4d3e9 GIT binary patch literal 9735 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-11-11-19-17-56-sep-2006-11-11-19-17-56a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-11-11-19-17-56-sep-2006-11-11-19-17-56a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4721e7542357c07458250423530c31d9130ed534 GIT binary patch literal 35406 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 C3|!j) literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-12-10-23-58-20-sep-2006-12-10-23-58-20a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-12-10-23-58-20-sep-2006-12-10-23-58-20a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c0997ea0f5c4214eaef55dd3bcc6ab966e6d9d4 GIT binary patch literal 8711 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-12-17-07-09-14-sep-2006-12-17-07-09-14a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-12-17-07-09-14-sep-2006-12-17-07-09-14a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c6e7601d01a4bd7dc6b4aaf9ad7e99472510b9a GIT binary patch literal 38252 zcmbrm2|QHa|M-8$V30kE3reL?(_Y;ACLd<@q7Fqzu)mVuh;XQ`?{}l?m4e}?wxaQosFN(rQ4|nx;O%W zrltTu0RX@`fDS|goF`H$G1C*7o~Vn7nGpmAKt%mJUjmW+(e*@T`^)c$%>UPhgvg@A zV;PAWN6cbGW+LiwVm?pukDuQ*F84|Q_|YP6Jnw)2Rz&CDiRF$#0HCj`Ypi4jQ}Oin z^7OXxb@BB0pE5l!;wH>U3eX_h{%+5I^nZ51OdY&oqQW8~fS8Dgl#HmDjHonBL|R4! zDI+QY=zF_(_-g6^BH}~?fQ#ti0`ZUJk0&rNM)U_EX5deM008A5rurk#0UX5YsQ)m{ zA4v;H{cZrU4~PPEMwBF=7@`FKk)(el*&j*%M?yd`F)_q`jU?I-t0X4KA4%~?QvQ)t zf8;q5HKJ#lKMa8X_y_;-5B}r-k0k#i>A{giKa>o_@!}(nAl*MYlX%GQ?JDB1{?;Jq zKiZ1u@%Q#a;xWH%S_1+i|Tj{;(* zC4xOs|L@}ce^;h>`zFzv82-fcJGO~~|3}OJ)k=CQ#5n;;^#9Mf5xbWduEf44YDLfw zBK^}Z&8EaL_{*da;<^20#8nVLPP~qOcP(U$ngK%O-##FeG{mm_Z~s#M<=^9U?k^LO zc#ZwHPig+ew14@Gcq!2Ri|POJ?{i`N+XghTvFHDm|2{vazx=yR%zya;kuUsZF(P05 z%R~fN|HYU7^6&m;`^zwP0D%7GSr`DY|E>3cSTD!l^50{^`LAPP|6;CxG5234ngcw4 z`FEed|FRU3dH-d9`CrWUx1UeXj`juqwxN`GwO{?qEX0!({L9Yy03h_2iG_ghf0*e1 z+FzeUj1>J>x!7O-#BxCCzczp}aU_5DhX(N$q4Jl1&tTX8@^5?9fB8}Sd+ZvqT%8yl zzmMf2X3c;3)FSfl7@LIxT-yISmYIZ<7+V0)MZESd66b*5V>m_RGcfqi9cqEdztiuy z`<;Hv-+pwPZgFtI+Ig$srN3`v|HpJTel`i*1E?t|DCjAusi>$KsfqalJvBA`1r{cz z3rtKbFqS_F2K_%I5G^h3C6-GfFqjBG(TxAMfbw(yIfDBi1^ui3l>L9iSqJDT@eIg7 zf6{-NOq}^h$;crTlvL-47v(?ui1MG^|Jq4UyaR#3B&1+6GE!nMfx>=InWPM4j9j8h zbub+QFU{G+(z1X<>@edMG(;lT~WM*aOJbhO5ytt&a z>_yG%+PeCN#-=yzA38d5_^$4r;gQi#W1q*rOw4_oUszlsEU&C?ZSU;v{oFq|JYpa= znS_)SObYqkWDrRJF@qUM$+$$x8I=qmHt6%*Vo?-K$|;4_ZInFXhCi5Xy+2Z2fJ@Br zZvAfcpGN=xYjgDfRipo>&HvNnvsQqC0{8(^1cSH$5(W^M0dzJ2P=i6l4KM?s05rRM ze055_DL5&BGd*z2eMjhWKHZ%Oa^AFh=eDca9E=jYc>#fLs@yBYaV? zF|o^eED-GE+SQ@ZJ7DHB#aT)KN11X}1LjAt3&qP8i)_0A;NY|??0 z^BKubeWt?iMMxRL-AF_fd1=+i0obR9{%?fkyQQ zw#(_d^^oTID6iO?3etc#MH`YWa|b$7ULh@qwigw)7bcg=FU!xnh#4Xi^1v;PkoVi7 zB_0U0s(ANk%OhKL#WDNx+2xam*VIa*5dlSA{7geXi7`5i7F71{7th4S_bhaDfX^*j-CjCxf?C zhUC+NH8$SaJk6qmocypzJ?k*qEB%63O3G7&mkS*Ns1UZAMlqiS6x+J?3REdKzF+JR z^>i*unA7j)$rV`dUYLi*d}VE|G%}4F{W`FvF?>~OE|%(T5SSDL+DGqpk}<9CHa9(Y zs87%&!Bm4IQJTvN=QSpLUtWo=xoj%XJ8oC0r`Hp8$)5vSAD}1WIIh=UMI8&R-kf*~ zzA;i*_u7KO0H3y0RFu0I7aqD5tMCCIYMWy#H^B3_jQ!n?EMceLZDO)x%t&v^RwJI{ zR_mcfBVXA(Ti{;5Qi+n#R8iHS*oy)rS)09Wxfo*hI0h%)@9MHMVd$A0Yy{>gOtvWfI-RWW>w+i`DSHoz#qK~=^}u}nTJrhenn-s78&4G+fM15^c3 zl+aH?UCD$ykFZNslAd&5`o((rr;KSySg=dgakg4X=FK(Gq_)XQtoHh@!P>hp>vW(v8-Q}v;yNA3VcITCmB#labY{y& zH+BgGW1>YdAZ*1G!+7P7ZH(qUU{;ejv0$(9Mcu$v@yM^z00|>y3d3~1>Fs!?+&FZq zu8du=I?sW+r0tbc7jB=+yOyuhQq6uC`@sov#{o-`yone4HJBbX1%8;yJ()yDgP`DC z5;eqfu(4^ki^q0PT5q(+I92gg zy`;xe>#$8SEatt+FJGypK97g(!-hbmQ;>#R(W!QanV1D(6>8chR{ZA@^Ujd2o(CYf zjE5mp%Dq8LU(&6?#eN{JFWJpFnL}|ppIH&cOh^rywIj|uy43wN<>;kpGrkOauxEeN zcBD@$E36b8)y=XTS-j~fSWPMQ*aSlfeFstfxiz2@aelB%cT zJWvll9+o5YkY6!5sw3D(UHqKO*s9V_vUm2p?1NpKGz>Mm)3Mhx@D`~)v!POo#$lYU zNH(krC+npvUvv8l^-c2^U5h49joJjXW*GzJj(z2`%ed@YX`3}sitv0Hdhw**Goai| zxVJv@LN7c{I%(0ZELEhHwnLg-JY|ySiTN9eLw24V8gp?j%XKj(foBTWSP`tV!5mkd zIf|(!J9<7d6n<%pvo4_un`Ei5K)Su_$#8qQ)YbRRpDWoz|7Ef)t(VUST17}CtFq?7 zHb6sRJ8n7KaAWoul;jyYnvtsVGyX$f*;|$KcveD=%6XGKopSGI7q(}Nv$%SpP0kIX zG`OjweJJ#E*@3!Y+?vws9R3N(>t?s^RN8?w2ffg3o8P?!K0cPBnEiA&9!&GL`4gkV zv|>D)Q%~@=4*F(2<5#xkyFom4jZrZgr4eJI?79FfBzH&Ul7Mp#>O23M57eudl`M2@ z;9HQaqF^JAeDhA|r|BQHB2#xXxbFr*DYBKwG=LCD6fJ$H6o*; z7&zxnO@U}Vj7NzNYgLn)C)N(9z_(tc-fD2C4q8>RHqo7>Y@Kz2IzAk$dBlj}K*ZZW zRuIdlN|)QF;6ozi+}k<<9*ZK4>|fsxcbFSFMUd1W)WHBbNWNuc3~9CJm=yeU!$Za! z$zn<|tA}V&zaoUQ2b^zgJ&s8C?>dEjLsYd-EW-v}X^ehE5ysqJUueN$!;(kkauGU79edX7jR}x3X{RTWb90B zfuLAorlcYs!hfMwTW-EdxP84!v7%u^YASl1D{}{qfzp0}8og$KiZ`!56=&7F6P!+n z?rF^r6Hi;$zuO?#u)|ig?b!SPG|1A|V?s>DlTDa%>1B2@kVk%mag({ZmuG;W z+jhJ^a^S}Y=jo4`QP?veO2RBalxOt0t*wB$n5Hk>I;9OkNZT#C8`jY^ZtB4j4PhY^ zfS>4|jMgN7dJxG5P5Gi%@;+kJ=z*7amy|yk=Cm3RA*y(BSJomV(QsnGC*Cn7v{e^$ zZeT_>KXNPj?r80}U1UW?4TaD*R?(;wY)pQWoD*`e(lv!q64Vo8paXYp3NT^srB}!^ zxGeR&%%x4&gGatuck`ogd1~Ke zD9DVa-U+cTR=-gxvj^-Xt6K@s=+w6PIm)k>r)0#^laak|PF6$0_LqG&Ko*8WOp`CI zzP{V0h-D(z*F4md4df|Z%MY+iSoBEGV0lIj6`qfU2#6;=9^q?1oVbXkNwgqe^}1Zk zxoXYgxe?NlKzVC?2ct%uwq0wGwJr}hs8)ix{CzLln~>9DPMwMtRW@p;VGiYg%7 z7@`AlpyRLlS0139-mQ3)+iqJ3N!-Jc&*jo<`*nlCeC(hye!rH9TQ%y+Uy=mAi3G8$ zu_6$%fvhk(*Jtd-3A5S(?l6_;kLzh@Hz-tu0L{h3G)D&&2+MD?OBPw2^Gy+2P`0tg zJe6YQqlx;Qg4r2qD(~96P75=Qn7VRHkx^ryM^70v&xhpW0qJl(aCzyf!>>_crR^49 zlow^9uil?-?So+yA4T6BBbc4`I9-UmVNZD}4#cW1TVsLQ!G*~zSdR*77Fn$cmC3l) zI}7z#C;L>*$3*J-V4xW6yMhT-5zDD+Z}&>ks80qXMAK;HW_D{r90SFTXVUuBIF=60G<+nw8 zJ2*8!0gDt*g~0RQiW)jQI#0tI(SnigKrVOY*T{lY4Fua8JHEmqvBdqKkAzF~;|D!j zc-v#YHq@ij2dfEb(ZQqj1Jv4!3i+k&N&??4Q@zz#;ta*S_0S`^ANy@;E$Y=Sy~zDrmLX1F|Xx@nS0dLL!lq+ zGxbw`CVS!1+k&tnS1Q}k3` z7$WEd*>bZ#jhU#j=gNI8{+h$5Sz$P;NZOY0o}g>FORZNe0TK|@m3x@JBQ$+Kn?qxO zHW)+iGEs{5b1$)&5RAK=)SDg2rntb^8x_q&C{acaXJuzsh)eb;xyZ~!Q|2kxGZCUK z_=&{+-imQ;g~!Inlh-@#bfSd!p`6~%t~Oi0^(@nR^1A)(yg$KOOnijⅅCQFI|hw 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-12-21-15-55-26-sep-2006-12-21-15-55-26a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2006-12-21-15-55-26-sep-2006-12-21-15-55-26a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8aaf632be460cdacc08e064f8f47f538346ddc5d GIT binary patch literal 16072 zcmbul1zeQRw?FU&g9PXT>ZM5mqI-AuzU>wa&nvi7ytkw;1&oAV8Ebg zj3>rmTul4}<8Nc|HAgkZ-vMC*AWVGisX@5^#ElpX`HMR-nEfvg76uDq%93K@pBR4^ z>rdHhy5%RFf6875Ij#5r4TiRa@i+tk!0`X?0Ci<0T>yBh{)9(cKnQq_DRnK)zhXgt zeqnI|L2*F=1_2>)At7-=VL-*n(#}Or5#Ybi&kq1tnCBlIK-VE1ko4}49(EYPQvYH% z489lipYpQ(#b%fiKqNkZgNgVB1^KZf|LEt3;m7%lqcIp1^@j(9(HSf1PyM;qJkf;z zv|Wn9xY2*;l^Bd4{iiK#OugX0__`^AzgQWA3IFoLG5kK!_y7YQ0JLK;@b#}e0{r}- zum9OUSYQ9xn1K)gu>ayO_?UM8;+5-8&BFgjp6hl&fAK%I$^KIhh74f+#n*J~f1~65 z8wURyCipi@_;2{SE{rHZB&MS4{=UZlU2pw&v};kX+uyvpy1Fih=|yWZ2>^uYtyoO_2%{nv26tlcFa~4)#VMGs#KB-64BZSfoz7Bkt$H2h=*jZHx`47HI z{t){ANc_J5%m4erY@i{)7r2(`7X%ZC1787*>F!sy{!=Ar%2@_*1^56#;5&ea$-M$S z0y%*IPyxpO^IRO9-DG=u`&+|54glh8aGu!wSO-_;GEi5l!G|snG0Ts}(=!Qu9^X|5 z@j4=a5ikc3fWaSAU$^q#qkrmqv52+E<sid_U;HpJ($Q{r=|wCmu%`qxtB+ zVhksUssR8cmSEzq0H{Cg|C0s)cMO;9Utj;X?p4ep_eaLczm$KEu5hI;y!xu zYvhq5nC}rY!~&cSwgNYS=728nJ4hGE0(=+j57GsBgI6H$AgbU1@J}!p)C4(#K)`S? z3iJb{1G@i6?UClAT`(Dl2&4^q^eF0)+oLGoVTc0A1QZUI2aAGrz)fHlP!TWyZUZHN z#z0)aAwUM0f@(pWKq=4&i~=eE9>@-)0SX7<0LPeg2Y3wh8lb>zdk-<=su#=)9s!?# z?gN?t3|IyqgU=xVL=waSkOTRU2Vie-IrtYa4tWC_2E74wf{wrsFceP^HfRt+3n~QB zfLcL@zifUz1m6Q0{xK@V`_Zzm>LW>rJh%kNf_OcO^|gI80Lcf>{8uae&nfUTh%&}v z@4(KWd>{+_8`AseBcudO17iH2%ly|IEuTK$5NIExmXDSXkQG87GVAcw0pXBX$^T#Z z{^!)SE&wUD0pKhj0jP_}0W5<@0N}v^EMMsZwU=5zR7EY|?Sxq{je7u_mPY_8a1N+* z?ZC|A4*>A{$)jSB2UzLRQ_wOf9dHK8`%Zu#LdJXtA$*`ckTApm{2Lqs(gxRqqA~qP z2eJYyfNViKU~SMYXan2_ItO(_6u<_cFwir|7^oYx4Jd+Qft$bx$P=6hdJSTRID(*{ zRLCI&1zra2L5_emkSV4I*C0|LodoVxk!IpF8HYf`kC} z-!lsyCiSng&pXUU@~^W`5C;EuXP-z6{a9DY{v928sHZ~SEE)Fg(E)EV3E*?G}E-pSE4h|jx9zOWm z;o=bx5`YP>6W4{WOJIIrOo@N8|Br&JR!}BJH{3r`{L$uGSM2MC!32avw*f2=MjjmO zYiX{RgX{AU4hilZMgeKOyQ-%6_Z&$D-$rGCnI3;{B2ybcG2egb^p1d#oPv^ynuV2( zorCj%kg$lTnD~>Y&tznu%gL*2XliNe=<2;PGkDuo=vBw)Y; z_==5LH?T-R*d(B<3E&1cWSKx%cnWUAj(!*w|AtJl{jm`s##TV02uz+16ip{+) z&$1)`8>r)?n9Eli#<$Qfx2+jPhn9sO1q?0{>cffWtgTMF@W+|MN2-jk3;kp0#o%!m_hTD^xrFe7)DJyT0EV;M=gj>V`}YU|WK zgH@?ZW&G-g4X4(#VKu*#c#7{oqS2=iYY`Bg5EzSiVRz1zJFHJ~^46z|W@l!je?}lG zyur8Vm%>!dZzsF{JC-*>CxJ(lQT^USYR_&Iy+`_tA;)5BdUu@V@opXye;3;_;@QnK zsWmTtvQytu>Wyu5%YtuOE-hRI7W}DTzcLj5x&$CfA&J@O^DDpXJAHab_j97j+2eO! zR{-&L*V>fhsW#g!u7$f$hsGz<5B=M=mfF6#sH2IS>-AL$Czp;_;4xHe{oB6eWcNQK z%)`u>#MYgSUKJ_nyGbt{E!3Yz*Zh9`5ZUUF=B5Y^OK&E|_E4L8&-#7A!@US_ibr*^ z&F>4+M0lO&qs?EA`q2z!y%~8L+OH4Ya`NXqFKZJ&YGgNdzqHtqqWn3?b8IoKXIrR) zzONW!P|85u*{CRN|bBL<2CXMHwM0pdYl$LSkGYQlD=sKlwDm%%U%O8nUP8_B)H2QGPj? zTUl9o)!=>uQif#s(&Y-6EAiu3R9HxFO2_M9H?_!H7cXydlTT!R9>cT-iS+IBshZo6 zCHG4wRjNE0qoX`mB0Hox zDy`yS#q_3%oGfmnR;ah zFRJ)pA%)+5>B#5k*0HyV$sw3a$5B^6TLhXNx*3;a6q&IyH^lL4F#(qy~PRs@<0+K9k=mJ?KuyQ{80%*!mX*{mncQ?KvDESC8Gj>lw2 zskioeY&~=Tx_UfogOEJoETqicOP8ze^w(wSynUuD)gpUgb)jl=+t!x(j>Hw<#;It1 z-p|%~$$kaA`-wkv_!@=WT+2^=M4_*|MSQ#Tr~AC$0I9={ns)SU%;`{oW~>)}AH!Pb zV>hgrJ)zu${CG+KHp?y2aMp0@qQD7w^NX^1aRtYxHD;1#e+adrniS5N$7OY-HET!* ze{u1I^_2cGWv6MGjah;qqJ}beI=QNT**1AnBVB#})k0nyG1a--ZmcmmoW~=trB-rw zd|_~6eWERzo`X*Ic`K(rw_#_OX|%ND>stSSG>)-Dd-AoTiL|e-`j*RQdYN8uH;M9vfbT=wgEjG`+ zI6AJx{=s%cy(>MbzM=9fTXCW9Q%ZC0Solx2G`CB$YND4*mSmBgg!^5K=ho=7EJbJf zcPdTY$z%3twhi0&xJGUt8SbVX4(j!0#4Zu5c}M77?j&#fM}7+)9*64^^q9o2toMR+RK;)eFdUm9wAl(?#lg- z&!VZ~A5ZE;@MLnjb1c+sIbRZ%*)AZ-*Nt!bVV^VZDqaDf6*?@WN*1&u?9#bIaoj(f zg8a+%as36D?=v{PqGSy7>uZFQz4jdX9HN@L+=Hl}Nn#n2tsC;)^q~lzVKfyrN|}*b zYo{Bi^Zx$X*064UNUzPh*gH)m>)hw!t1I#6Xu0|HV1JVOXROgkTiDFZ6tmvL*4B^q z2c9a8k0U$p2&oVdf+t#i6fhH>WWZ1G+zdTGZybt1!G!!FX!)~dVLwQ18LGMdU5{#2 zbyQ?u%ZISO!Ic-~>`&kR;=SoNzd-yp_S+Znnw47uIfQ!bd3}92!y1!2Bk5Y_MXLXsD*(-g8Pl?x9Vn4j zBf`;3ZZtxd`U+@821$|H|3JTMr=%XpKuzcLpLgW8iN;&FxL60@Wzl*7fn%X|Hb-_J z!Wqz23lweBubL~9E>^xy1a39NuAFX9a0MsnE;&cW!8vM8Ehb=vLi-YsNX0`rKQfi$z3DW7#S?#Opu>U9mmnwF8UV z8~IUKzRFoxY;NR`S2Xc+(9H|soum~rnXH(&Fu0K*1syrKiG}S_xE*b1A9Y70HKlxr zOr?-?36z!+-VCq2NNX`fe{Q2=O44D&&93+nEy&NP9BUGuRp~!YYkdN13+ay_()a-9 zjFG<>)|y@MQ(X{dY~e^TJ4wlo+cJyQ>VZ9TUMs3mSr^m7xAEwAJW-dF@MKQP39Ejs z5x*>pzvDc7X_0hEmSW7Ec)lu6Ul-#W@hjE2EsYjs7nqMuZu6Q+oktSuJ{l8AIClE* zae{@4x7R%3@p?3`SE9-dk%^$DdgHx}y0Q`-r^;q{ljRn;mEdZMFZubHZOi_+yU zkDJW*Tjj>H!&?jfomm>(`dewR55CjMgJ?BQzHMl&b zPJdrP_9LE%#-dv;TO;WiTdB77ewrw(eJ2$0ow$u2YrQr;dEWQtxp&^@;ADC7`0CP573_BD^Ki zFgc-IW$jYCZ}Gcolj91&DY(eGWI!ull79*=FTro7qa*JsrX|uFWR_wIX{X)%@$8N2 zOZyoMBBqG@9^5V#BZ2!31@1Rgjj%O4>|McBPX3K1&+IfoEmd3=A4oMN8 zmhOr1R>)MV`n1Lo(WP46@YCmTs8e9;#hU-&{3#b**)!jlR=2=+*P}yw7eB&2^}yRa z+|d?u-Eg`6{K1)o6RJ^HV>@1s_FFMw*f?xGc&J&u(OIKlD~qzaJaq>mCnIRDUH9YC zRv#L4PSNT31uoI^jnam6?IqXCZ-?}f+%>6sPWfxH+1Z&{oYC$_?keG%+Xp4yPpXEw zyC=~rog{Y>NMs)thc6XLe4_*@5!e@;oEPwFYIl_i z+(=3kf))t-!8bB0%`!TXIF9SqHm(NHkzs2gI$Je4tJKZSLp^JMR^OXGZG%}9Y~3>j zx?Hms7HiAjX^$Hpifepqx0Ui`-J5;!Zn`85M_)nnrI}U`>4f?6XYs>Zo)TpS;W;P@ zxw4@xiWg&#r=EthrEZ~M(eC`xseR!9+c#K5wxQSNKO>-7Ai#W3|Sg$ zZKp=WHaqk>l7w^Jm<-jota0X$*cj5R(_5b&Dw9OE(wAw)9%*Tl!&!C>2V{ApIwMO# zXWipSy6GCM?-dd6^bFGjw|#_gkwM0CwVl=Raxd?&ZX;UW;WvQ9PWo@$M%~G6D>Py5d?|?xAXeF4os>vorW`+> zb~=3Xno`3l2z9SHG?jLM(UdQ#@`qEs~GAMWUBL{-l?xwY@KDfCoYSdwl&NDB&F+Z>QwlB zBkzK96ErB-BTEI9{@z~l6@F;jZcyh@mos^~gl$-;B0rN@oD%TRW2IhH<>-);lVjX3 z3EGf8I4-3v`Ba-(Jz>gM0Y#*X&dE5}8)ifO*hmvYht1z)Fw|SuLj>I`8#1p>C-JN@ z`Isd8CgtY#4J*ezR5c1g=ij8g<45w_n8JtNbPgG6#Dp&RI%_2ot+x)p5g{FZQ*GhV z?i12Tg%z$zd8WGf$MRD*5wojD;dh!9=PebViOMT>>DEc)@YY&ddzP*EFF+PWKf>?D zV<}8LCh#6oQB@n{nU*r&VxjXJuYC=c6-`?Q}T19qshDjZ*#f#_ClI zkvw5JQ;mvF-_};h0!u@`Xqj8EWHQPCc;VksmJ|!9-N248?uwE}&&-`^#7lDO*W-;X z@H9S>8AkFY4$hL)@=9ZeTy8DcC}HL5QtRmbXsHb+AKcJqZmr)o-UO$L=>cX5^_hlFU^un)yTBJ7Zd?|IE& zN#+Qpe3j8t&kvoHfm{sp*u=@!&O1@aI$cBkl2|F@cp+>iyij1Vvym}Eg@U6#yS$Xg+C&3DHy??T2zz#~z~C69SbQ0@wFZ4;^Nzqs&9wV{Z} zy+~Tpot%EKCmJp@v70YR$L~1uX?aasDbJ=-{Aq_=V1Bc|d%aGA9TW5ckXVJa1E+@)H8@D|f zH&WsbPZx-Dup{Quu`!}ZvWuk=i=8rv)6Jt4tt%2?W8)Ds&{lBTr-pxjxLt==QK&n< zt`$Ur8~rteEYLA%K>CCz^lpmF z!;LDc4+XK!O0fuMYD=!^3a;|(oveoK!#elvh@2L4GN<aK-0uT;(oNW6N9~H9%gdojVQ;I$Js7`4aFD-v zWw#wv-AKjl9DW5Pu!=Bb1cw%=+e!7wvCir;Pu9T;ge#QB$Q=W6KC3B~&%2~v0g0?L zRij9S6jyjyZl5=AF!oG-eE(x|=11{Mu68MAj{VMQ5{vK9^aTxJy;VxtK{ONF455W^ zXgrkjQuNdibwo!c#PQSiY+tYZSZ;0K*PFiQQex?g7nNF({IMoaNo`vL&w4`V1?HUn zF7gtY#)iH)6S4Nv4k%wN^jMXzuN-?Y>Dn3X_Sqqt89L)J-ALO>wrjCzeCC3_-H^hMg#H1d{n8Ol@B>h4vRAZESzopCD+csHWt)Oxk zm$6Apiy^f&Uh;^}c-P{RkmO9rM|gK8YK}g*%!6-!G%vqjs;hV$tqHsP^sI!oZ5Lv; z*JZP#CXZ@+-sf{ke^U?6IFx~xyjC_~U9@rf+g}FG+%nI>F%lm(ae8>LHrqvCj3AQa z*?pqB`#RAS1<@Xc9W)sALaqQx*6)^e3gsSj_FF_7HB5W-%2A1ikKYEY2M;0yp*DzL zWea@oeApIu!YSx)OEG)Y=?#`Z=b1*bhx4KrY#nvuX%#lBEbClubGCP_boH`te8W-m z_d^Zwx5{xpWcOPsPPvyiq(7T9J(6q<&l^UGMCjPzb-WZn7c&c}#68&1<3PsqKwU-P zAqIu#6NW~8J|$-yRz?&liW%o(Xe4T8s8w5pb$+v6*^}=p#BD=Eq^Pu!@@@oTYOQyS!rCPYM7`#xop;j-+FZai$0 zu|s!~)i2zdbb66TuIiyQX0ThD6y#HtdNsNmb%Q&KQlV+|Qe=yvQjV#Mq}@42Fn3W4^4 zE^pd}DDEpKOlw8hLW}Hw4#mjtmt?$uG0bDE;A+g1VY@deo)W)LblbTR$L!rL>ptyA zyWCumS%qxN!W9n~^T!og%a;tBQA7at{?G84YN1^BcO4oLmD$5IVkO=a({yQu{V)6| z=taec%@WvzV!R%}EPUM!4U0!>?(LcgnK?N&!XombYX_p)UI+ukL7DE>u+Xax6Fnq@L1;=U*ZJ4?x@0&U~ z7V?~xi{ImiGpl_Lc%~t}-=bkb$t!AQpGRayHI&(7ld6&p7r{ZvWoYYDAJyD#LTh@Un+|8pmNKP2ALPkUS6QeQ7Gl)F*&)9i5i|W@JIOZ{$%*zpyWw&7$Q#uW zF?W$5sX);TCAC(eJxwdgX(}P|903Op&*@gy_m(6J^65pam1)rI?qr=tqD%pzu#)*36C^N^&jnu56Kdz$_T8)NVr*0k zj^*S;cSZ^}AY4Xgvvr2V<482?*w*r{^O4uUImsM?UdQ?hAiJbq3y~U_yYN>_6R^(d zjAo9q?7K_wDzvrr#02y0NFG=WHU$k%N2$-=nm}v#(4+6qL(z}QB~k^MtbG?~Z$HcV zU52z}OSR42N%H88F5Zq-gyQUgbR8o$(@0P-qNJDnHSyFi9;yjV`+o{Byqm2J{;rh0B_2Ir;f8)AbiF^*@dDK;0Q{*vjak^_2Tj|A;8 z+jE|rE5LHC2cbT&MVnduy^Q;D&kauySi(TiE>!r*JuW-CI@JDRLYwj@xERVd;?vyj zXoP=}d@W05MXte=<%_DUo z|HSMkC`yZdQlU}qCM@)l$tw}jz@u!JwGalE9nrrnjVtL5hf zI+lGD=PyD1Qr&8~*%v#mC6qd=hip<_V7szb#FK9?Bvbb^l%7@3|erAp6Ecq~->CM!Qy%blnmi2T} zNg>PpnTg*DnNOS{GIYAR&;5{)J4oi_0119UV&`F$_4fMcN8?XQqy{-2byaSYa&of` zaR&nk^)n`dkc_~ViB#5!Wv_-wd7jg8n{xZi>J2EBhq~sNt1hI)%S&(asqGe@PxZ3d ztLFL_*nbMj<<>hYXQbL>rP z#yo*(ykRf2L(~A56Z*#Oa|^to{0(mQ~!W4f%4riY$HY zwo9G%Hg?yN`t#;C?&5w-$a!4wvWVTBQ|Ej)8qEGRG;L{jux6Ip;|GL?lX%OzXSAV4 zVA3~Yi?Ad8F#3J~MNcQCXy?tb5*u`3-YDmMfs9mlx`?0>@@W=M-M+;1dX0_G$PHWh z#IP6SB&E-t#aJ3*O}<@MRkfR? z?#;OtlpG6;J#2k>f|j0Dbt}`BE->egdRx4P{7K8&_ObtAEaN*@ja)F0Jl9s-U zs-Gec_n_58ddG~Eg=j&oj%C-LM2~FN@A64So3x^mh#7E?Ok_Ywd76VPSwmjyFQD_J zON_x8ITX&-R_Gs~I?BhBw_q`6HzbTY=q)}l;opxbAgud_DM+ zmrCw{6}#OP(}# z{OL#cIKc+zHT@3-jLFf+BevwZ(zm<3XN}aC-xm=dYLPMS&N&-HLLM69pY>__cYDRRY&@wPyF$RctU6op4FmQ_7wk zthqM=FrNUurPEl7^xKtOs216!P55m0)liC_W z+I9UDGJRKl^k9SMiCq1&p?f4qtK=KfY+-&D>H&}Ar-a{soDz7eOO!pct`$F)R8ktj zbDVYsyb1hu`};>wBA_PgcJjl6Xx7!V>vO7+1!aHi#j6uY)zDOyQ3 z)O{mULy@0vPJPDM2 z$sv{>yP>PiMl@q32Zr`4wQmoD^QwNNcslZNej%<#)rigIOOhm=zY=It50|Qcr6!Q2 z_;_D&GI4@OIIUapl-Z9*pQ~}8eJqW-{1s`8)5-)gYNk(!f~(_MPFfvR$AWt+jMN4m z`uj))>0kr(*?+ue>Qu)>6u?iW#4pYCP)NI`N^l9Qgg z?@71GwY`12oq|(ayBARfO`4al1}nJ(#9GANm&=R?g{o>U86SHkuQ9S1ypNjlSJ%4d z_zol?*Co-gZ{(_OduZOt!Y=*tma=ktt*y8&i}njfe8#vM9G4~}jx&0U-thT{3I-Hg zi}5EvJUC)l5;8YS?D6_?_o@1n{bL9wz0O{(p)RNkd)MRgt(;s0@n_%(Hl4^I%_WZCcSF7VWhD%3Au=MsOL91Isy}r zghT7C4C~XFM&#YK1xtmGWt`#nP~9 zg3Hi$I>%zEe6;rpc zx8{b2Z2*134!?=qQfdv7CTIJ*dybWZr8wWmt(A`_Ey@K7f-A_E{J)$8nV6!bm*(iK zbHnlOXDQtMl=*wuDR-9B(y};#%Zsa9?nK!8!CH3-wI-w7U{b8G)`0Lt*%|Mi)(o;% z%5t|VusqDWeauf_?C?xcR=v_=zVb)tT~fDo0$ekkfVQSrDQ@ka9pBI!>Q#f<^60Qk zj}5t9_V}OD-hu-AHq;LUne6)KG?U*Ll*&=zXs`a7ihrLG)F{fLmc4Y6IaGdcJE<~c zO%JI#df_jyu$dI+extGyYcGElSJeqFZ&^^HcKk{`?#)rf^i0H}qIdi4ijGhA!iu8Bs9~JSR=yR;#FE6=($8CFU^3FU* zBaW<3l3SC$SV;` z8cNZlMu7QX3p!d$^yUk$=Hv=VR9f6+!0<@=V%v1z7bX&RHFvm^^jgvnEdCoHgGvIV z{Qi20;z@aR=xTzG>Tuvu#w$D4aLwC^ zc(SEjCk#LScb{G)iD=XcP>)&-rScOubq3RYj0()nusIpE%QgaD;4r8*()I1&$v}oXWp?a>_&T%p5AtOte$g(5Qb%}74vFo+anZdKn3ne#ZYNP78(1`Nh?roZ%#QEo zOHzDz=%t@&WHC2o*#0Y2OI=K^Bf2c~WoEen{9xIA$9vF<;~@{}X}XPNCFWn{J+{3i ziJmeGNHBnX@*1`lzwq3Z2$P}Fk9GK)fcXme4bAZfsoSa7{q`4IA>+gI?RdptlD!Qb z*4DLKWx~nxIUPGC(e^Gow>2gyx@+&$YO0S@P@s_i;#14rn1fR4^lVOtd?8 zXX)e%a}%9TfLWMe%|PQ=z};qEQgMNDlW&KudWi4vov`vZ|%IRR7IBP8+4PY`0f4>1XSzN zyWvlSvqw!?tgZYyXsXtKgh|Xky}VGaa+&O$5iQk;5E?Lu1iCiTq!1;}Gt7fNLJM1T z8`8US&08! z478%7#iiQ*rd;N^C#s@|YU|Zc)-%aT=VQgtP3Gx$9-F4-)-f;&(oHA z7$fZlrlbnj)S^rL?IEcnd4#R&N*;5zTcDi2nOrr+#fkM$)czzDLEh6*|)i@ zh#(zm)i}Bz;<9X3=}uXr5Ofw~;+TdnWW*uxep@MU1 zGJX}OWvC6=2!%oD&nQLs$lKef_x5bi@cYIsMv@jT8?Q!h#nfBwOeXFe+xU^ReK{3! z6yuIoC0iuUdb`gdrcQ5yf5dK0nww zETFdGU2eYPB)xM86VEMN7Mr%xHk9TWjyKs#2_G*_RvI>A4_Otg!I^V-7+i|W*54HZ zhdFzWcBqFC`Kp1p=Y!8%bqScDZ;v|~d;)i=Z}L6ab^rX}p%m-TLGadd_KfVkmaj3r z(kao!lyB31!Ms@tE(gd~ys2(#eJAAE_L)Sv>x>E+f2P0vs-ZqIzwi@QKP5j1-k6imqL9fZT>%)s31WxYuc^YVoDTpO|&mKTC1vrOt6ZSf;06E#A zK7Y#Rm8SY8*pen7jU*eKnGSv)f*1*g zNocAvng{kdv!)(RFehQ5>i^(0ym-ijD*6FQb0Gw0lY5WGrTYLD2d6yeL9OJ?lflR8 zMdo`>CIDtjo8fIvDT8PN$&@{1(F4j8|J&7zR58n{I#hc~IYZItSi|kinX&aj#OsLP z={Ks=1)JvR?%vdFzvD0Dz3)_o+IOwebhSVd& z8b3oO8>Py`!;GdeF`K)LJJ*eXagNYrZzHRFt-GWpHk`bD5f7!&uFx$o;i`-;H;rMOt@W;~ym}_%0_thT-f_)Rl;z zxN#8(dWVjsN?T3h^~ankTb(ooVCS7_?&o#z2%jo|eLQpZmAxIU268a}0BZ*1e$81# z5={68!PK!e)nQbMi{_Jv!QEIBJ7U%Z78xtsUzk?{Evt z+C4unI)u(Yh?2e8_WMoTQ)B*D$2F842%)9dXv{l*7B${uiyaNFnr@y3wdY4QLSOV` zpD(Fk&H2n+B2u*sEqWz%hy5OMjXITmKZuP_O4R$9cjqIW!*pm$mEQcet8LT#z5|FY zW@tB0b)#ld@faG9M6<7kE}~=3Y^CSXvwdZ#qX^Sn+v!L;8S8}8J1n8}Utun&VG>It zvTv0UL zD1{~t3K{A+32|iK-&4Eu@B07m{oMb#!{^@5ZSn1S*0a`n*0ZMf-S69uThD!Jkz^Ge z9KbNPwi=8u!!RPuFcu#(99j&JfIa~-4@j~285Sflk|o$H8=))k^k>l3d3E@p>+ssX zhAz$5*Ou(TTLgOBy26o@9>Z9fxwzV!IVjC>v^1NeWZ`JuP4FWMO7+O%?4On>*}$ zseOGdqWV000CYi~eFb!OYG1#C@GH#Ip)w*oT^_n9ul{P(k4Z&56vrIcHeq3aLUiqOQ~O;-i)^kVj;@im zHva!ZTgNztF*P5?h$DD^v@_+&9CS?i(Y!qQ6djN^=H+SaY21{kymwFQOw%^h(KVPl zrPus-Kg1X*=DaM8jKxe0qt*lIt9}b{5ftASm{eHk3Dx@kQ*0F7=3#tH9N!XZ(l@1~ z4W|E5t1FGT$nkY90Yn1=Q`pd1WEo>C_C{&W#-E~D)fpaAs1Sl9}{9q@`*Hy1uH zLwAA?Kb{}*;W(tv(_PfPincmDAMTL90YL$VX$4(~hmt8|2+qDHNQb=?^e0>{nX^Cw z?UZ2T0wd^-uvwv=DTqTHPeKL=w$HxNb{ zA9#ndOypAlZh_2D_;?OTjz)PK%J-ox8i;~B$dirkjcdRxU=EVN36#g9O#t{Ax<8~Q zI0`)j+mQKm>FnzXFVh zJ_^u&S`0Ek6nG1cf%RY^@Bt%1Jlebgw$LrXFz^g{y51#7FAdNN-4s$6 z+=qT02tk(z6z6B;>memEXL}*9VI61j=Di7d8R*lnC+tM9r*VHZ z!7C7l7-isVFHnImN)zBG1?^73=h^}7uk!TS@beyi8qxkGP=ZdMD<0rH%*J_~%sZ3& z5Z@!zy$_^eo5b@^eaOHj0UFSr_S{CuP9TmrCSW`l;VT4jEWw#x2ir9CAq<;8+H8X_ z71;IRZwc&1D5uYY^m%g;q!nVJ{UHrG44ekE2UAeD68OMJH2Qdt_`)Ecp?n?6>DotU zh0YkQ`7#g*9>VVuFdzI3uA$B{^yvuX(3aMx9Woep+WRfw5_CJ*)K?FXu(3SOZOoli$F z8_0nc_%Xsb>HeY$$j3d@`v`_ZS4No<*7pf;0>)V1OCS$><~E@F#`ozM{Dhz_U4v*2 zw7??RV$psi_M8dUcM{stIU5f-9{a`G~rKozDCQ5DjwRi_!x4 zX(4~uzZL`9KjNK_Q5eHMwCzG&7UWn!XYD=g(X`h9r5eN+1zQmT+eV&$D!T~VXY@(! z6_I}gC?49Qk5Fa?oC(0IY9o~0r{XaLHF2$fCI=*`<3ER1`KF}7!MYKeIN;(0yMtk zfc7QbN7Dh#btSk6&Vpn>*U2lu1aOf5_mD*SP@n+3fE!Q&-zN?X-?I$1*}xvq5fBEZ zU;~&A$nW=w1H<3}7@8m@^vNdiOaO&t9Eob*+J4hBm&U*DR%0Y^BvUZ_cqG++t)*0V4{cRx@^n`TJ5AKAbMkq#fiXfFVrB&C7RU)k_uiTVbh z4rNJ@#k{_ApeLanB~8S!8ST{p#n+#5hV*Hk@Usf_jRD1E1G3@A677VcxAOXai|X`Q z!UkimK)D3U`x9N~D1J(GerSF)0ex=lf`2;9G%vm5fle_y;l8sU&^U7-my-=u3n4j> zIXo1Rr)wQu_iO+M1OZd{wE;MHzlKLc{Hh}usiaBqFz7-?^8V8k8 zdpVRZ0OU6t1i?mYMtqgQWF)3vmVPhu#G!R!@)wTNQ`^#>n^2_fcMXzaJWJ z8^{NWC?kIrkW`QQtH%0K-;`H^^ahr~*#Fq4G%orqRf=aE$}?h!4Laq&PqaU&Ew!P& zy&2SD-`7D#06JULP6jtE@a2fZA?Fzxmj&^qk$zJ4?l|k-vUl z{qa2EJ%5oOQ)&wz6cfEeaK#v?e-85fW1zX9{^*R*nUmwiME*=sMtfWvx*||VJz4`g z&onQz_8j;$#f^^UkH$>TU&dJfR>ViwD0)7i`EQ2IgrvRG4QPFqL*@VjU@H6-Wb~pJ=qT;rTH@Suv;sHYlG8x=4p_ic^#Nf~0uq z9S+4q`@|mvflMApA(c?Cf>)3B9>wqkb{cyUpgq+F8;yqn)W#C=)3_;5^F?c*j%+aq zf}Q*jRGtmd3@X4|D5G&Ou+v=7+$F(IwkpsDC>HYL4XFel-P8_w8Y}hl78HUC z*r`6PwE^nUywUineHrW|DgI0WtO?eY+IXYRW?{@dtu?OgbY}YZIEw#F5vWJ8Qh#>v zVG3xE(3lxO{^;D&KBoQH3<`N?W#ID{%|ErL^&@|-(BGop2>7CX(tocbsR$nw%fNWZ zHziN_p|Q{$)BcfzPWL9d?^PpT%&SLpO!X)}x-Ze0=ua}R(>_pyK?N*_ZU872VVW1% zC=Qwzn!9R1=bGk^&MKXiGT8Q`ULm9%q(6uN^?>}6t^zDUI-osIb1sLrfgoT5o`B7OVx@kAfZ#X$z~t=2!>*bDHVUK7 zvcb$9#}nNaJoU_C9PpeO$Q)q&m^qmB(TpSB-C8hX@#JF4sNp%-7R%0J`0g=f35><9>ktjoZ%c;C69;<90%RUgqP;+8+Nnz5h1g8KY0*@H9ha5-hR|{nl<~uWpNHe{+n= z0ehK))>9aFJOSDxb`yFM%$|c`N5VUGV2hjEL?%fQBRNi^LGs2}I6d5Kh2OZnFSW_W z>EJS^9b9>OP)0vh%48!Q&FKeCB_(npfOiK^LYNREJ|@ZU8%E7yL^t9+8y>(#=tT$e z3Rtj#YcUB{4xllUE2=dU^xF|-@B0jMNLSzhQ~(Do1oXbs9bk05&%adPgqQ!H7%#dS zOoKBpI0J(-FgOE)GcY&-e(Cg^rF+Bve0kwvHIRjhEpEjm$07fq2zAm ztfZqgMO#~2i3wlk6A{j0lJMrUFO7u|W+K9a{rndDFY%2GTpS(|7Q7;`zkHw!8N%s} zs{(IN@aqj;>Jn_?8!K?0=MnMsCIO6N2)^OSX58F3sLx?)!9B)o!0$bHRsVswCfUZX z!5HG*8r63V4qOsuW^GB~*{%p!Ne$@TH@)kjM3U+SPVCJx3+P=E5q6k)W?~{pCb+xBmscTcRt?BtZ%%jbK)+3Xe^|7tL0Mt=*D!8ShPDC#W8+ ze@C1k6N29jiQuIby&t7Sc|EL0fByS9|5x=@x@PspEP*~INi!FlWSHbK`QE-4Efrvd z_Xsjgn9suPBN)}CeSLL|>+74^k*|Sy^!4Wy{CCf{C;p;h!CeG_*eSW23Nov~w^%XS z)P1tA=tr1MlOJpBcvN%uBz6J6*WLqUm2tib%jI$9P z^O68opx>Ig}h&1L(9N{`cx6P7VgIaG8_ zM0twyJ6Yeb8qwh@Q=g9ieT1C+NL4lU2^xC((+muaEG(_8XW7`!c5!uc_we+Z=jXp9 zATTI+X?R5B>Zs^7F&j5+j!)RKbz5R;TKevcJ(+v64j(ys?D&bC+`Kbqi_e|EaIxgl z&)3Utl;5nlb^Bgz-Tem->l+%MwX{Be@v`mJ>(2LGA3lES{`>_qDA+fi{@EKa9tn(x zpPx^FUy#Pbu-4IES_w!BN{!Vq6Ox|m!yXqZqZ^lUNLbmt=$fo^%{!GTzF`|hM2FL0 z#`lh9>VIrFe`z#N{~XTme~yRSgs%llN=eDd%1s_QaO} zr6eV!<`SWPo<3YqJ%*f%gJaE5*8npOVM z3zh`>aZ4FVVf=0{o1Zn7;ge+XOR~6)j2OOX$tTG#iC?nZi+FZcEA7+n&D*UE_Z-s@ zO}%A$f@QihtA2fp4VPK>Q`hiQ@rrKA6_e#A&L8H*`4+jlV0w|sCWFKI=AqUTgnhRe zKe)BjbH zbJYF(6#o$uGA>lSQlEL}RPENxk;}w&?6;auD0SkivExhhmT_X6C_Q=L_N3KaN<%gB zrkUO2qC-&zbL;9d#{D{9ib+%1FFtghxtxE*aghTiyYyq`cI_tDd5zQM&nU#Djp&Jx z)zcQWKD5=$;Se(yE*bS~G5J}tX=@t`Q|3-t!LH2OvDV+;_3+J;-oKBs6>T>isxSOn zb7sqRJ1$dj^Rr&agPQtZQXC&l{?eu~&sWs?c&U|A*VNZGy}_}p81Kq^XI93n*V~-9 zZEyIvyr-Fb>+E%eOLH}M+Z&H$UPXN5GTT-kXkRs}?S4thoB22Po>9nPuHW^taMuQ~P6}SUxKrPRe{>N4IG4_clb_j}HZ*a5c;j!dcxB9ulWls3Zd}==oUvN- zX0B>+MBK#70_g=tZk3jj9;=OH=VUrm9(9Z5)8D_*WU1*g)u0IXVO&P)^5kWQdX~Ag zGyVYyZ|w^_F0SirdjBcFWnM$x@lP@d848?7yWV(yQ{9`8Is8$=tHmqXIs9s$-IHuu zw`<|>^4pX?e9Vol6O*a9ylZ*wl=_{^+9p*OpYGz%Es*y7aiRGOJO9dh zzte@;!3V@ncRn1^!q~=fnaxr&cQ2`1C%*o1bCu(CQ+d_muBLE>lsg^uzghlZF+22i zL}2@f(<49IEpcu1Q2f35Tcp^&L&-PQ>syL)ed>M+%nh;0zwPILQa$#==b|LH%kyi) z@}H~hI=EBEt12jCZK2xc_i^J=*J+sem1{Q^CEggmhV7yDd`yd*ZG&z=f&UMZzvOC& z?Dg5JsGC0CBE0&&^J{5^eGLtAIa0~4p}W%kzZs4z_8I+i<1>Zeqf1nDLljC{xy+Z7 zvurm8#3iRDr=^Z4`Fhf_c>GuEvWYSph9M^(M!nBH^oLQ}b2XP#v#F`l%hx*OumVf( z9@j{E|I>a~!-k{|zYN4FGQYu`zE*FS>K_3fBfSTt%InUX6{T!8i zv(Qpm<$Y}-BJ1q}eo*vvogRAmjaSiO`4Fk6qO*^AMi{hi_;AvstK{(G(vx!K&)A{1 z<9_oGT%coR%YJw8zDk(Sk(Y-id>eCn?=a<@zJ~qXD`!bdBm5u_P zS_T?n?58*MJD)wC?mpk?^)Gd6{6jySlAL6c6tptKP|onO9MAd9v0zBhhrr2Pdo) zFK2!c{Ym(dT%_@-Io4axAGOPypYSS6B{F_HA5$*EWk#BY>oyJ9r6-Z3*#7M7?!7GQ zrw{8sE&g^+qzUIP@2mO!6wIEnJ1?sG#?NTiHyw7be(>sq&*nz<@8_1>Za5S0{K`{rQH4!EWFGusOLtw^-X%lN z2e>ZE7hGx^zve`-OY-T zhONpslB-Wze@=W(&b^XNn)+w-J#V)d3vGCJe2spdb-hfF?aT*94s?xCS-E=th2;sO z-ZizRaU2QA;dO_CtQt_McfEYA>7_S)uqK1*Rpf-SgqwdrPH!Jo&7xO>z=i za?fphd+Jz8*fqJ96Qd@&{4rs#>&3ZBCbm6-LpRo29J{^H&Ado0rQMm!`0I*g*0ogE zgcWR?lz$}E%B)x_CN0ion`ZklKIf~ebVDy~tghT)UOF@5tnP|Y<)NS5-Z&?2P1v9- zqCJQ8%ZMn|xo1jb?iAYVU8#}xXD5t_8eNk2HnwOtQ(LdRR~U(P6JrjnW)CQ`i-9 z>l}hMU6QVKp7yBl>&@UUxv#I|%k|?|B!$l7k6CbJjljcc@w%ZS+Xe6Xym~V~vC#Vb z?@i^2iQ6;EhwKk?oKgI^?56v?sPT7C&5{A%BLOnPx$_O8jvfY2<-qi4hfU!Hf+ zn7VpnYg47_<26jcnUzI(?)Nhu1bG!+D;?FTaqXP*G|SKItb^+!r(PbLxZ!L?jbn1Y zg;2RwaC_o2ZMRg5U$3f-S}`$IWL%A>Jtkex)9Sc*N8K;sljfAP>K=`m z=X?sEJo%KJt6CWoyEs@Sr}<=^o@eSUuU#E+hFy2x=Y({rg$U`TMKv3zK}$l>{%=(s_7VR%`gO>zyrQqEo!;YtH=K zWZn9C!G7<1`@GURjDBy@OV7Pf__-uX`BI9XkKFa!Ki#Nz9sbcVd_q%lOonW}helz< zWi2ifXfaygl=91-v$H-fJS%osvisi0U0FY$-=jWT-{!UgXO+hA%2~?+kon3f7E?pOK(DFXa(Col!hpprM|fsQz)>*OC`UhjAOY+-HKGw*LaQvvzs_ literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-01-17-21-49-44-sep-2007-01-17-21-49-44a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-01-17-21-49-44-sep-2007-01-17-21-49-44a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f025460d65f54d6772b9f1dd5a46e08c1301e3f0 GIT binary patch literal 7999 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 P1zb&DU0p5W8>#&-w_ewm literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-02-02-18-13-29-sep-2007-02-02-18-13-29a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-02-02-18-13-29-sep-2007-02-02-18-13-29a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f1fbfbdf2ce61b9eb3356f03ceeab4c663bde82 GIT binary patch literal 39915 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-02-17-02-21-sep-2007-05-02-17-02-21a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-02-17-02-21-sep-2007-05-02-17-02-21a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..351935778ec323f46205269eb6c29ac57502b0d8 GIT binary patch literal 11783 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-12-08-19-07-sep-2007-05-12-08-19-07a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-12-08-19-07-sep-2007-05-12-08-19-07a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..175b606638da163c458531207d4ba21b27226d62 GIT binary patch literal 35771 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 Bg3S6%pHgIqN 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 JwI>L<{{bB$U$y`M literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-30-14-28-01-sep-2007-05-30-14-28-01a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-05-30-14-28-01-sep-2007-05-30-14-28-01a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74f30c351d7ca187ba5b1429e2653cd15c1afcee GIT binary patch literal 35406 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󋯖Qklz}f;V;hsu^$;&Gb_%`5iZHXm8rcKb7 zDis_&Cr#xMume~z*VuItD`LQGBvT>-;je=k)n2PsrV(cLQQR0)Vaoo<3QSX9 z8rdBG%?MqHz`L>dU6h>pv7l$nWZ%=m$*%}l2yPd$!tXxb15US#e<@K5J5r`ji}2G= zxRksW99u7Z7e7(VV|(|QCyBvmg`$Z-{hD4I@Ii@pQD*9pirf**I!V9rws7;G~GrV3y3t?D=X5feWSF&%zB4ZnIP@sj8-X07CdO z(@*q+?zyT|mg_J!hiK&|8M_N+x8doItBqMwt@JzuA2Egn<*Ut!J3${6B?c6*1Su6p zd3ZVd@|}LEKasw?2gr;bEY+NCLh)Ck5YV2-kp)DjIi-NoSHpH~m6)REd4_{8u%oU` z`Z+ltnOU9rul-y^2FcXU&OCo9MuBA4r^q-2YAJr<;x%XFkGcYCxpSVsOjcSRs%1(Y zc^pJ6nHMWhBb@4AvLtd_(E8Rg?rfpa)^63^@(J)$iKm9tEstrkWq(URyXu&51zrz} z-(xDRC8YK6Y0eUgnmdVbiVe7Zae1Db@rx-Ytt5@o$4S&LClKsI;F zzKII5O9ytY(;a0*u`Pxw-rcUB&5BD=z9fU*b}{ct{QC>X(}wtJ%hxQs#Fr60Lbb$yT;ZaFWZ*jHg|qnBF>Um4IK(3=7)Cvrn31UgR&hDC`Sb-ISU8Ka zpu-U(24j8U^V2LtDh*l@iHfB)RrX{0kSWZ*#)BLDnaewy{OCI9yH(l`VmjWr!6&ne z;dPE!K2A_=rnt9eH_*`vljqUR!Y(D!?GAlT&IFUaXd#E`OTy{D&>5e*^;euDRW$hb z5%H7@7^kQ3AsUmT?rSbK_)jxFOShwmEHpu;iWKiyn&lcV9jaGAmRQ1Qx{{6@T(*9! zBD=7H)zpu6vkmt7IHGjH)~xE!U$WdNGDgB2(9aP`gNyOOjlMc7Bb8aqA50? znL*W)Ym033YI4w;>tEN6;4I5FE!5$b(|P&5_Y=*PMvCj1$)OX<($D(EklfJ})z(pc zlvJG#-l=g^#cL+TBZAO8?eB7WQrJIwZnhPRhNcsGwyIoLjeIR%7W=uQ4EMe}{IaEd zo`!!9utm8TI@_+tE*!XgHzP|vf@jamab{rk=J4C4lKD`v`s=P?hne@?D1G=oFQd5Z z-eFBk*K%i#tD%XmorUMfTj#dhl63cH()a42TzPn^?b_&3#w$UUM4a3@ey7db;6DK#@#C9qZ>pc6oq&2p@qpxLJIpt=^ zGcV1)?VREzJYoD6tGdJ0OquGa;cD(f!5coWg8ew^%1c3Xs}p5BxP-liM_D6GBn7h+ zO-yVM(-_7*?bdiX#>r<)Pf-j1O+YTQyr>wtN5?CSUK7^MHFB(2gV)8bW#IXVY)9ri z`ohE8Qg60THGFdLLS7CsH0AlNxe;dZQq;S^Z{1J0-TZqZOUlHY7VO)ny`}aYEMs4Al%t+LD5svw^3v!>TKHB~FPp6wDD)X9E zJfZs|OLaMwWrJ^;u1O;2UM;h<_%t!Wri{Y*?36?tnL|@Ug4X#EcNV1&;WJ(?=fnIi zA}f7D8T?J7O^W27hN?2_g3L3rGcN=utC%%v4Vm0G-qNcM(1>7XYsUY4ztWx0Kyh5q7`Z zhN={ei}Qv~M4WvzzD&v%kTx?EzEu1kuvMzO=Z+-bX}boN3k0+Z>0W}gRCKvHXbxQbSp?mV6+T6nQFyxgnD8T$e#I@t|9EzxG~+|Ol}B=oWr z9j~hDLS%Fyuj8le9Dgw7R9j*l|kVKb_<+9E6WK_TgTY!Os;7 zal|v*>Z9Qd!cS?Q;=K-0{K9%inE(FEv`(8U+sZuvpF(gnBmn-BBpZVRLHp5^3vnh5C&?L}|VI zD-1oxi01apzfQ5!noty&KeE_M8ZbX{0V#R<)(PW)8qnMseWCu!e%hNotTb`-rr5e@_5{*Kn8`Fnj62g?O@ zP@2MKVoEO-PDt*}@}_#+)Y4*k593E?jtsFNJft;!NJsy+4HK0Hc!i~myv1)hB|yVq z$kv91ga<5zPlq5t1HTtrFE)#<;YQ+}0-Fbe5I#nFh_yuR%#b14vC3_w~Cf~}x z;IEiLe6>OrcEW7!W}BgF?H0$d1YimqtCDYcDkX@I8hh|!i^1A-hZ!VZ2tW~GQjZ{H zG4bQiWpWyd0vN)I)m?ucct9hpTrtR`!?~YbKWbk=e}ym^rKJR{AU0)gS+*xWyA}4U zPg+kJTctk#ly!8P_lc6-FnSt%cVr=#$Xnb*RfiwiO!)Kw9NBa5c;V3(kcr(v>U&l zORoLo`O`l6PC}WkuunvNV*Vaxd47NeXdeUdOO6yZzqt!F)U1Y=nFIQHEucq!9#~p= zAbRv#SZ=29tJles=ymGd`FHr!RLe~sr=m1J{m*feSj}FHKb~F&?Q?$E@PM2anih2Y zD$?Y&47y_=V_Qz!lG%kng-HH2_*h5Y*>Rg$63_b{Ab`$r4lHY@nbYktWvsNA1*|R^ zz~@sutq_I!(s`9&k4WR^XDbwDW3$0z&R0g?Fx0p-31};El2b?^JLNx^LGapUHh1Prw!N{AF}H6**Mf|l(i$U^>J)lPciuDuu&!P z5?XSamuboCUL-DXS~UIrQ@pz8&7AT*U`V-aX_sWE^+l4Y`Z0N|njgd|`U>>cH`g*( zbF8>XoJ#J(5fzbPHDtRV*zS>la-Har_Qp4yqL-L;0X3|kfW06SfNl5+sWFt6CI#$6 z$o8hZIKyZ#01El2me|508ycg%ztZ$dO)^C2v5@bl8i9O@+3>bNeMI$sQN)Xm+6ZIkL2^7YE(-`UoRu3 z!>`l4&fZI;6-KSa$OdqPYmZywM%DFWXPYUkdrGG3d0Rjo8Z=F~%Jru!Ri#Qv^EEZd z*oASdf8I!b9r&^pVa~-8K)UR_(d|LzB8(fMi6 zjB)_tUYt)8HT5Be&Gk_!#0m20^3EBiKAW20Z1f_?)X`mfW#xo_Q$>OTwZxMA7h6Xy zAw8(d%qFBnbX~6BjAJI#AsCVD9*}M*llhVcniS35JFzMttX4}@$VEz$xc5rDJF?-E z3Ti+0dj}mfV*;DbYz;4*S7Dmuf)rwJncl8$Kqof354XoTx(l(|Ov4GD_h*%GYJ$M_ zr~|$3!Xt0lL)y*GbKxQ#D zLx^|sk6|9n@q8ACkYIwKbs$7TPU zm43KrkzkUf<+?h!&DmJ9lx4A?snZ@^4Cvtqx}bc6p=ESR)mS)vv|Cn(KfM2R4|sP} z^n9P&No}-L=1%6MPyThy80*;F6$gve;?I>*ei~uiE$fJb+1TtKpHH2vf@rD{2=t;* zgpb^}();V}d1&i0hQ@CqL@PBS^2dCOUAlf2Yti|1PRmfCZ`36};%Utg=m${d-UIa1 zvKGVjv=X8U-rzS6)bzbSEBv zuNtn%69MX6deF@y?PRX3n4B-UtEL^O!iQk^)$R6Ei_!&2PA^z&&j~TGVmFFo{&Ivb zzm(Zx_fd$gY{{~g#&XZmdE@Iz;sHu_qE5o}CBo6-le#^cx|$fNI(AaMLP#K4*)rmI z_OmHrIurREu_^Anl!JCBWoBf|ly6-c!~<(045lJ5Ah%b?ccb;aqZbr&=?bx(UP^V- zi>rEs$NH*|#vg9)A!F7W*v6gTCk0Jdz&?%l073OpwkNAopXMoVJto_^a?%7Vx$W+9 zf*{pfE(r&-z(@MQpO=f(O=~LUEr`c$tXjwu>p*(}U1tQbTviw7Z_$%AG)0)^NLy@~ z-X%nBX&CL=$S6+`&PMSAj^}yebKT4^SWQcl-g7c6$=GHZU^N%i8M$4CJ{lfLyK$74 z{QU=Mn0GO>*F{L)s`s!Z<*U^zE5?PyCbZ01Rl%GI8dhq=tw!lO$TN$6qb9l+f?_n z>!z3HZiXd(Km7nRek@Ly2XUZcLSBNQ0%_Ot_XI?Kki;O$>E)F{$`kH zpaCN3a3h*J6)-f&Dq+W`W0C=GgFGd5Ufxenhf`66QZZgI!hLkmvIBo^7oMecY(Bf*)}%_C>; zF7y+p+E;#$Zir?#F9DmRLvviz-f3UT^w;JzGDvt^WTdM4CH-i87sR{=aW!ck{n$rS z2#*W2Ed-La91*u#dHz+llP!ox9f5cCj#&>9t@*~ve8t}N^N}a7H^*5b39+ryb%PGw(iISXx!oS)i#T%z9U8 z(Ml9S>p2-ns`*9X_RBeuQK9aXZT_V@NtqzO3S;#pm80>-m`uyD_d_%s4=TKmmKvxh z!v+Fa!Q5SyP}f%9#aCCCYVRW}0=5Zc5)BV=FU7K|8~rHz5^jz!<~c6pDUyDkKCk&b zHlrteUVAMc95kh?$m)9@Rl>y*s8`_0m|&I_$i$yJM1Sm}QePxfft?@cwEO za{B9=y{c(NauZ-b4xs{L9yHXJbv6I~>?>_cu!&enDOYy>QjM3Opq|A*3-P9><=Fuk zm$lOASx%`NbB?^Or|k8&)+wIdNUE>az5K)>9~~-nsHWov*_)OWsyaU~ODG=a5SViw z=M!@`nI91m>&e}bANsdjTXOp<<$)gXR7hm1cq<)s$P}ieNZ${&wkmfdxdr&s2+JW> z3{2Ew>HJ`GB17bG4!?xg{gdbua@;V`XEfn|S6_US0EW2+{`zo=;j?6Ld?@KiAi?bs@7c(uD)(vMXAc=z@GR>#^s40gq+i zU=*72KR_aZiE;@6!-R}uOL-`DHud~gyH&*x54&IQ{K=XPp`(f3SX#ndotA%zE!CVI zw$qXZn&}``*W+%LGVzT!R^?`g=YL^tZ^*R)_HZ7w_ImDY<3DLa*z$xl+Y1uCsLOHK zzw+$hnJQncrDEU7Ki?7M9YAGm7Y-f=!i1cekVof+yszTyyu?yS8PKrBf9u?Fy{#$n zYb^pJbAMSxBh(kxzw!3*NXWK^-nO2C$LY|B@4vzyq3j<;Z?ncq+?sfRZVr*!yKqUA zUCx2Ky`_2JKI@mZq|Swxai&8G2a0SyNH@mmttbcVhlz!8y#uE`7GQlRkspi@EiZia zA0PmlyS;C@+?W?HqL#T?&8YFX)T*q($9peiKZCJMG=E@m0NQG*i};e2@V%8JBS+|X zL_DNL;_w1DH_g`j#mDmuoT1n$whHO@Gq;@}QCGr@Wilbu z3rlwFsRKT2VD)lyB|DQm(ZN(=N9th@u!heG2ll#Iq9UzR+Oter5+;CHyn`F9ko7Zq4xpV}t zn0jaNWir3EAYA0@cfPHl$ILz4)3Yt{{)(Th>QI=%&J;<1nV-+_5NY9Aq3xy|IZ@uG zW5cLe*CRB6AcFU9)oKt0EC9mA@EU1-5gUfxO+w5Rg8>u z`Le6&7k&3ubNgq+Uy)v_sy^PQs}#BtbVDxbQ&w)t7F~S6kGY%VLhY-6X~5TWR%BxW zCwh_+sW{1eM_`A6Bh{~KILo-dmy7k7=bqd=t`74(sXi%ZIw2ZYV zKUUW_H%BPmd=^}m74yE>=1#HxX*;u#zzvzU(8ky|ze)Q$xQq-6{j_Gq`mqwSuEps9 zsK|X+74W;Rs}1I6MSWfMi@xI7^Zw=$OhUKcI@VA|wuIw*OgDKS^FT@v9pO6y4GH;n zwrzq9;*)&?!7mi2{;;FZ{{i|iXVk;0x10@?9jj+@;okQF6-&CB_0yZNhm{4fD?TW* z8C^nOHv4IK_5rZ8YGp58cTMy~xs`-G@4(|kpMZPS*0L9Y4|G3f`zudC^dzg!y(tr; zE6dp#1zTR0)J(o5n63Av4-IUmQL#%_Q3&XFS{k-Zt2Le{(xQcX8^+kQ@#gl4AM!My z9>IMybL3i(kiOS}h1fn0atPOa39w0+Z)|>7X1SYy|NRB%-sT=Te}ixD*pR;cS~gra z$cy9WtoDu)gPIB&RXXmSnrdLc5y!#5M)bjsn1K7VTG(s+01es(&FL@&0$aA7RVbr{ z$MIMN1FJO~$eJdj49aReh->;?Z0vp3K5#*pADD&z3GAs-?(D0xNIeq_B>Wqi(-0-w zK&@Vu{lo34Wn{NZkZ&QHHfj18W%OUasP;>H8~Fh(ngcA>xt;JG|`~ zl#7}3bz*v+BP+c$_???(bn4h-*&n|>!L1;2Xtp9sME$`i$1$|Ixie38ym$cm1K%qaI&yxi*TxB=c1=Uw<)m~Q`Gow>KlwkvEFDyV z`d4=~AMYRh?Wz!@NiT%UT`-?K@)N@mNq4bar6^|a9GIU6s<%lDSzkct+N_O+c`)PQ2CaWgDd@tP|z_WLl+5uAs^#7vrj*efrh6+ zcRR_W3bzCh9O3(bMrv0UPy@uv6tXx5ChE+5meRvXv;Oczr8CG%lc^Ng=+wumbPS=? z?d>H7C!}M>@CN!>2lEoTvCQIN%Ybn~KCT1p7K|3k++f?fp!j25@LNxS!_alHho%!x0N9pz)SH;s8#g(T;d4d% zi4O;ef9Yq8xGT^}I9)aay*TR&OIIDIm6ag$k(X;6G3PrbsS_H(*Gy0(<~SLwEbCFR z92&zO$Uv);ecyPN(kRlW7!k5qY|x#d`UAw>7ab_d4;9N z!-6tRibuX;oYRM9Clp7hXRVZHaYVUf;q@P_|Hca3q?#>d%)9#u)e$?GcvhZKqxTm@ z<9(hU`b6o`SMBdPZ_H$j!_yD6!SX(PKWw<0lTc?oXg-JTRXg%{RCXMI8Xc@u5z#tv^{{sbv1 zgM=V45fnxn&`5}e)k{tk!l6*b$D9#*nqvc?kxNT4n@3Cc0}p!t2TcQ=GS37L{oYwv z0AIw|MXy-3Byb7Dw}ms4>V>k9loce&fSV3B)pV`@161<3`x-nARh&v2X$;vXsDRUQ z;0KoJYO3IzreUFu-QiGw>U5@PT~HSEq?-36A(OvdOUC;LPJayq@ii*^!dq{atiqY# z0s|1oVj62Go$S&ce||@2b~}4`*)TbEJGl?Bwl-eNRJRm_GK#oWl51sobaP zbz>W^-uK#`Iuct5hAHD@Qu0Eo5I#iqwlWkqx=@PNjD=BFIt!el`Ci$N__87dzf0T+ zU%0=KegoxOt?ee5xAkM4trA4`IfO0sFh%>_$xpy6hODq>hIKW}5W|SX28uQ{NPgu? z<5DIU0AFFARaxyhrph6IupBbpDDARa(q|${{V}BEnA|SQAoz>%0uZ@?9j|2cW-XQc zH?h8NaqE!9=o5QCuALm;6N6Q}q-);{p&p}~Nh9$&#u?v$8}%}Zkt`^Q?P|%&CH@gW zNDmYm_E(LYStM~fB?uQMERi(B%sm}#Nn3p1%%$+cWKP1y{8oiP_zPop1u#=C`NL*T z3g)16hBXd(z0iSXkG_H7S3^j7Wx)Dm*X@j>tgHG-6V_>| zthISZ-tmjU0Si}BQr*IKj;8oqT)Jl6Am3=4_FUn>0#3h}I90FhDGP5~QuHW(xY?<( z^Yot^P6XY@PS2?RY?-v1KZwlT?RK*z$69v|+_xv*)z% z!*F#n#5Yu3M}l-83@cVIxAlCip&3Mbn$X!;R-`^wv{)}@7MYrO8E^awMO{RM9dQU_ z*ne$cxiQBi`}j3Iv5fEUoDD(Zphwh#^(8CV5yBIt_qCqi#KiRi?^~)~7}cflB?>!m zFc6QfnpzR1sGowL!W{0{U#2_c%s$U+Q4)(^cT1iQpUd1?iX8!_=o&5;x6RKHH74y? z5ECZ_G1h&vLcsd%eCzf!Wfe%IZuNo4vm`AcG=U86N$09Cc)H3gNWVTMf8RmaCpCJ5 zmV`rZ<_x-^Bg`}^;-sMXT=la%*GEc1=_|fBw!)LEPWzdH4}Ch)1O!H1%euIwrR*tm zcQfZQrB!}=aIHkBlgH_<^*f!3=V~Q7dvJf+jC($~?SkhM44Z3q?aO?4y-74H;lS%f zSEQ?3X~f(toN{1YpJkqpCoR=dkA*;G=p8W2RAd`H=oYasDk0p zxN+ri-lEzfc4y2JPdP_mkV$%ukvgaQN5dO$i^*$G72TLQQ^8HILR;$n>o^uJ62Ii! zpyfGX2sJ4DDMfe9p28}o>F_dUT+x8iH9g*=XzY>fD^qX;HZ{C0HFG|BQ-gzYXq*)N z7^IA;L_$38&Z>13tL%2vY>P^yp%e5+Azi$&|M*Kae?4Y0Xfo~<=>ol*=z_#wScs(C zD&ze`9@1~)wCgRB3?<-g2sXviO`KL(Y=ODGAc2ghdq5U|-}tWi?B#q!7=v&jg;3~( ze7u`6BvTo;stYiOp5bNsQw=gC-N7MK|GQgxad z!nE_7lC$#?z}-Vv@|Lsj{l!ZUd7n6XGP&YQT%vE*e>D|<;au3VlaHB{%rzu)u!FAB z_?611iTbF(05b;Gu!Qe)gOJ zC>T51v0GF_>I0Ck^kdPG@$CLrq1GbH%QTm%l-yP?2pgf{g{buJf%Ff(=&2}~c?UsG ziG2p@WgRNrq&XzxB3kKu;i=lAIkTb}gDVZsC$vv;X1ZL8Tv8lT?AEW}k5W;{Pn>_h zd?*$tY!OH+85?oQOKGG1p;1SP9=ge|qjPe4n|f{60Jm%sPQ!fQ(u+G~SW4&jAcU_o z^ptG89V|`!Lw-&tz?r6nYG>B#~|-{-!jBg zQ2J2SNCBel^CgK@GtI&|GcQIT?HMJ|saD1norGO9VWr4-PUW%xXdd)L61@$XbZzzM z#lc|)Myp#Y67t!~4~3<(p<4C=7E(w|wT8Kv$GG=2{m+YhW*q803Qh?Chw%l*wbHI=X zkO*22H%3Y6!4U^@b;)yE$|AZ>0&S_g)eR*b*WO}c<+%0QJz5@S#?CvEdrcEU1e zv?TiHRPdAdYy%Sc`d3M$%!rwctkcJl6Q>nkrvu=};ZHF^A6Vl()YdR(wKmNCBBN+I zXp)cI$xhI0aB2i`rBwFAA0E%3<1U*+yHoXIkh);As8ZEGEizjrVTIbpWT>Sa;+u;? zLm_Xl*VB@Vq67vajpSHv3GVZ%`eCji>*(}3-=#rgrrKTgB2>ktK|2U!pIc;zrK<7e zHCjzPJ1;{Syb9NmO00ruLf=X9s(GU!f-0ZWb%vvb!j9K8#vh-Y0fS)oD(<^`5%Vuy z^OM|-WN0LZ&U z6!`VJslanHxKhI0BID{kI!8LE+t}oaC9Zb`@FyU%Vrr6ys2MFXvf~yw5s|cw^EDTTcH*akr9#Lm^KOHX;R^*nsw?n8ni)nRTEas=OTdK~3 z#k`Zql3W|6tolZ_mF5Y7(5w)?6A+ayPqPaK%dRl>>urx(RzDc? zH@M8Je+haM_sWvK`2hg|Z)hI{uV@0f(?NL;z(MMse#}a|C_zR$WMhcsc|=RRKH+CL z@{%L+&Mlo+%hvbh#^aaT0iOwy;{xC;Y4NjB$cloERj1ja=C^`20$(1X^(UH73;DvP ziPk?2?e1!3+6|&90wzSOCAWQI1(Pa14cl2H$?25*`(5r_IB#Rx zpcQCb7;mBVd5F+aC7}D&;G4)U?-jK5*Ru7fs7EjLU$&`k5wq0*&oJk7lyzbrKJ#Bj zlvD$l!(@YS5ovGX-LFU20P<>Cg)t6ks@D&(luN^pbNbfhuqJP&F9Z&DGC;OeYTQkM z$Sy_5z?;m|;30v|34WjVc{h>7vLfebWee~ExWl_a)hdeF~@%Z z#p8XAHFK7^{_mo{p4jh&@F6p=^vA~j{*~=oOH?-26LHuKbky#$L9=etnOG%r$kt{2 zTM%Bfv~{ZDE4s->9;Q8mbmPcl zvZ%M_J|ouOZk_pS1L4gNw) zP<96u#QT!Byqg&5uhA03v-v0k8$wwBiSd#>f}QS@*VU)@O|^|BOJjsd5PtVb zgi}(3JK3`xx~8?dr54#+yGm;{nOZz2AAzl;B>K{js4`iRxstV;&k=~+n^03pFwN&Q z8(o`g#t&St2daaK(TqEe{Cb!Lr=smrtbqUp8cf4FS# zuVi^Zvy!$MaC0qon0ThMi0uhQjMG9-ydJ^m@g5LU`_XgpCh0` z8)8ZkD?FQ_QuA9c-2ER=09nG;iJOBI7AXk5%R*tf+F3Q3lGuYGVVt#t8x<%nH(l!AZe*3Am@DULv7k0@Q3nLn+}QaGf=; z!hfm6wdo3QM5U3Mvl@E)(SPb%&}#;Pe6f$(ty4$QbZ@AzD65wL0Q&vgi(juZf7%q! zu2k4!&vxtez;$7_S8!Kr_}+hpDkM80olsjmv0Z%+@IQQePP85%qUz@vR*?&SF1#A5 zlZB}qa~r+@{ky;WR4>r`$vFyE_J$bfTHl&Lc zV#l|FRS}3E)!fHXJL zGxj+!P+L*=W*w549`Fu_%Wv=C>-wek)k?G|ZV{WrgpDeWQv|apvP4%ZY{B-7X$rYS z%?cAhQGM(mn~J9s^4@U(srN!$Wt9|t1~!Tp2nbqgWdK4#uxW;M*4&qOIUjldS4py& zgYp!_etjdPboeN>MGzLhhp` zT2cu@x{~LmotQtoX%6#N#-EeGEC;C*&8&%y=49gHm-vxRLlX==hr9QWuVeIH#n9De zcb}Z!xhBd$SANhhqGE4Kj}tsxPJRxm-kkaEAK$K?nuU>Bj*P z+-;)E{h>UOC+IhK&*=tg$kn*Hvl!Dwt=8ENZ>JTk4fLBLf7(;p3>3ooxD?n})GscG z&-P6QnY#Fm;MC(1cf9S9oE9!v-5P?D&>}99iB5PWE~N-0^XfQD0AK&E`7qpUQf!K# zIyj2CK65rlB{<#c#|OXlu$3=shRnldwU+P*JPx?`uaD6#X1sz239>-#?<=gh828RDs2s>=9*gw5Ocp|=-4i#jdYX$gw=G-^6`fd`>KIaejzl-Bt1@s!)>vh?L@z!+ad#JCkf5vBx0n zh1(`zQ{;dADc9+n-;oh<0jF5KT)f}%ZUNKl{g81&tpyp*!0pjnARP;mAA~g%`Bkl+ zCokh{{t#QY3+HRlg$>C>;C1hxm*EsI!-+$7s(vWTkFqz1xqr&{3=Fi?w(mZu6bqKV z$@u&t-G8k2KJ9buo6{@;*V@pEagF}~>y zkU3Q#mW5pu+ES?AT}vG3gi;QK(b&F5{aDR0a%v8$hyn2n>WNY44}5SySAW2r8K`vr zo~3jsT~IQe*VxoV^o%uQ#^Sj-tY-(dZ+><8X8o_@Pl`)}meo_Q&}ZYJd1ZPg#9Yfo zk}P&w6;t?XeiIjkXP!c4B4We_19=1!xdEIl$LX@Jq)G_Tnw(+xkxM>;E@bz56_ZVn zP6y8Ji(gL54;b9>zYWmAN(Yi@VM6l(2Tm1D>IRp}7 z+0Tcss^>c{*{^x>a-;@qdBKMy1l^z#WUU@#UX`Aq7~D%E zO#w5T@3%y@_^4mu*ahL#fssOsRP;YHI23TUNA#vx-|A}u-FMQ;f*Au&i&nXn&SmCg$fSa|>& z5pIsZlp^b8b61CBp&i7ydoP;jjZFaH$qwHt_@u)x#Dm+_*{3&en_1dG&5`_&haixC zEO1yVvm|6h!PT@0LhJFxoXR_J}O%(;EkA#^P6jyXH%w1$C zr?AzNtasJvF0LOl;meL37IPwA#+Gcno?9dm^)$v!%*ZfC9x1rO{uQ6squGvUG(uKsV^!n1u&e8l1;o1G2v*%Qks>087ZZ z5NN}WsjfbQQxviqY8r4E6Fh6%E?Ij$+Nl-0na9QwIhDn(gmwW1WzyPh5Y-w;uI8*7 z^Sq27H&Rbv_{8`=K zAzN+NecE<)6WS9l7^WF4B7~&3%G47qNScrgb&|}F)Cs++bl=WqAH71rUr<|v{sfv! zYoM7!_P<#P^5`g#D6GpQYifv=?Y!xj-xG2^WO`%SB4c}1DCSfCeyCe^U+kN7S`~+d zL!FvjT6sxfy^&NiD@s8gf~Gr&(3Idw`k!g$w#Av5zywX2w^({Q7p6w1<>h z$CwCzmf{e#3pnrf(%eXhifeq5vz;e-QJUxjtTOwg&W6_j2X4#^zDwzIphTS`HR`$9 z&mnS5ASg5Pt|^5smLny2Hra!NNB!p~&22(&)3s?M-&F%49}J2v9SD$=MQ-RJF9{8} zmHO<7)=SGK!+N+MPiAF2o|Ds)bU!m=EUu%XA|2#PTskDA zW9fJn^}c`ii~Gg%JTL#pe~x3W`RvR&bAIQXxz6L-tBI@m+ch#?HkJUOpl~0+0|0;s zAjZH1D9}`ht|Vy2Mz_*3(!fnLW1;z}4gip1U;!9tzOFPFIKSH#G}Hd&E;Qf$YlDeq z9`sy7bo(7$dC^RcZl}gbxfSTOQ%aicwQa|?-b3ySgzGV*YX z^6-gr^8?b3POn^StgPM8gZ#f|`k`mj{@b%UT2jhi6?$l94*jF_Is)u}*&NM44Cr@+ zxOsWFv10!0>;>8$`!Bnp83X#q1_QlYOz5ATgA;8JlxzE>HnMzS{?QhW=3ANnXaKT6zx7|o1miDXpTTvxnP78`H-C?z;lG{1f9rD! zG(}r;10eMCdVzn`$B{g{6_j_P{dKfbU1|Epe2 zTulOR0Za@`%-1}(KE2I@xX)xgy8?@a@CHJiB^S!@w@z%daV+z1qT;|hfhF= zfey*P%Aeu?7`%zz09rUU77h+J`aQz%yG};fU>s5=9w}Th4O0-aGdb^TXa*k3lk!#y z&7mDuzLzd<@ChhyQBl*}VPn60?>@hPppdYLsPt1ASvh$H#b;XDI=XuL24?0KmR8m_ zwytjO9-dyWyo25bhrA073x~zVefSuk@F_7fD?2AQFTbF$qOz*GruIu+{kOLEj!t-2 zchB$$VsvbL;s1m4E)u?zQUQqW|wSzxn?X{cp|xmVDI$ zfbjq?ARP;X3BW|3IT+EaR!-()Zr7?1!i)Q3xeMT%xq2VhO_ju~Zt5*~-EYAqdL z!`&1WE3c!g@e}3;$*h_ohcZYQ#8rP+^7%M#De($VfH##RlM^MNY;ZsP=6A_-AkbEX zDY8C4U4^}l)=(}2ko%7CSBO+4mdi*VP_M}^3LyP_5_n3pjGB;){6dAwh4u;+z<;ea zL}Ll`Lo`ai;bmlwe0PYU2wbS$U{NMmu|^EnL`q@SxP5O3*@`PwLd=dl*)sAdIis^* zS0rr=kAzygW!9?+jmOE}T#v90au z`+7k`diyg2+Zp;1f9&@DmUL9vNZUiFPBn)~a=ZYZw7k3W$dnokn_ zt1xI+#uDa|O$(@dHU^uW>gaR@3PXF!K}0iE%8QAMk`~ihO6y<5Z>S(Y?5Y>cIYi9CZXzp*sR>(8$njYanK8$F0`E$q>RxPKTN`ZlZ}m8$Oe-&I^Wypl z=3UdU+L#Mwj0g()9wWt4&Q7OOFeBq8?h^i8QuSVN{8%hTlqB|Yp^?1Q+~O=hbyqhc zd&1uX2a-7Iz#>+2>F#XB(KHaCoY|-?v#NT)X(YQhLpT7fD0d$G>ND$ zCWeUS*L#rbs`q1`8h))x=B2cv3tL$q^Gvx_kJT z`3iWm?NvIWe0*;%l8OR$x&9226Iw&uwP?Xkwf0HIPwEWU)&mLOfb1YIN8>tApWb~^ z<55vMMt%4~ZvHv9r%iZ2%h+m37&TK%q0lp&0TruzdYrDjr$_j0{=&s4WzNITPKI1X zINf+rwBrthm^^yAwX7?z4cH4}qjJSJT2{ilnxRh4TGAquvH)tiiZd<8)TN(RWOrh$ zI%fhDD8ptT_+a}BRt$&bx7|=G7J5`fmYdy&-uGhMA}{XkDoelV!#f>=NLzQ*7M$o` z0XShPWzCS>>bm5nrlvStDoam`h|ecAkrUJ{10Z1v)X_PZ_wekJI!$wAi{0h{r~55K z^XU(v6xfAJFx*#gWtf~M&dk_n{jM`fd2yS`5RP0v<(@I7FE4H(D+Ji3sHbPYP>_D; ziBKk7dr3E@{j=Rav%n~Qa zB|E~c;Vzf&&+1#e-S&LJtPh~Fs?s+x7Bj?mH9V$2d9$EA=Z-cRc530N{O{WQsmCqT z^q|yZ)Wx}P>4@OV?pVUu3r!Aw=9#`({8@ePH6p@!*I_Ux;o`F%U8(6+79}EP zi5oc=l2XV_b{`2QmVBKRoX&)XZ>hI!70`u%cJm(uSPusE-AtpMWVEB}b`*V$x+8oJ ziT~ur#bc#mzuP;n13K5Oe=M;+r+pR>#X!)t2=`XIxB_zetYcZeUS#-_{Fpl7^ZM2G zmG3MLCUsH>RZ&CA&A~57)C1-?;a31yW`tiMRRDdn=#C5K(r)<=)YLl$S2x%j@2M!> zBWh~+@C`fmfol}s>u62kvY^epMDYU7VjhQ=IwH{t#31L?l>3I`(&oj*#&h%v|ZyW0=ldIdl4rDP>J-|wXqcmBAx`K*7ch`#cS<+z6d(1ycf;32X%XrB;oFn^yztj33oKL#IW!{HhoVt!_X?P|Ombpr+)XL0 zd;TLz#2j!%6vl{pmhq2EK+@iPhrAh53RC?R}Gt7co0}A8yE3{o;k};N5 zB}%!I25)|Qbcp$D1dddCs=&bCAkR3rbQAAf#%mj1hKz1QTIO8D&#k79ZUdZmF516w zJO#)C{rAg->2A0tC+ig2DkZXUajyCjm3j@V7>u(as#TP<8o$Ox9`RyZ`T|)nz81ir zB7WhyAIZBi9g&AeR0Bep_UB&39zu$pA!!Tjmp!3jg9%<7pPhKdg;ATji{mFwwGPif zW+xK9r)G4n>(b?lKi?C*GGHDQSY8PD8DSHR&@OOa{W|#YROZ+|+XD6|;QqVZ&M~)#9~v4aY_`g{IZ+?kFO>?^iU+v7)tksd(!ifL3@_PC`Rx zc@c-hwlkv-dEYBw@lML9VWG_53 zT+cf;$u{>=MwPB`bvS@buEJNwv9M%4K0`VM>M8F)L@qD0^*Mj^ zjlo!Tj(Tm2ADi@Z;(MSc71Y}o6o`Xdp>mNs4{`i_>% zYR~UMF&~kwjoJ&H-03kB73D}#J1J!v|D=m|^VW@_T{f&7d&K_kxm(>$rQTZ!I(IQM z^VQV=Vv(G2cI}}pg-NlE9BJGRr^hT)u8<(M4aNvK=HP~wcBVTOE~|_Oo zVwamw=pr!S%A^t)M(pjgBtN_wI)-afc#A2aCw7?g`n{yDw)jq$3v$YnElSR#p3O0Y zY*dRRZf!|+-pzETf#E(klvqJF^|q5u5Ym1sW08x*#Py_p^g>(q{ta!bzEARzZ1$c{ z0+=71Sa)IGpjVM-<5_cFr)iGI_BV}nJ^}Ua)2Dr~v8wA!ZFcVPA49T5d+tnXj?>K2 zM5Ys0Fm<}LxE|94v=R}++b)5cFJPg=$QgK2-%`N=Lm2yRzLH@ISI*jAD(B+5&jkzI zlf#E6ieubsk?%eYnttnz$u<0K-~NEPWTHhrjK4F(WMqP#~88TO}M+h3an+og|Y+w>JI zw-4@P<`@RWZl+$?$fiA*loNLh*>pU;efVj?2S*zxXEBO2dzU@Tu9QC{iuH@tOyq0u zMhiL-Ht?nB^@|3F)sJ$~7*_inD~tK}wac|IM5{TLJP<-U$3K+{@F=$_HQ_|3&8A-5 z)`Np>HHW~lL$UWJR5rL2)BHVCJNDVAE5IY)D-BMAG2&=1vvVdD79%@UpA3bo-*ah- zd{&pTFdd-kh|f&e)$0(kC|5?!?>`VCAPXhKm?B41Qkzq%m3= z{p}|8{IE8E(nNp8P|CgP3s%3T?2IeI6`3?Mhtgqm<^DQkc?Pks)Yg|ZIZ6;YSlKN~ zv}o5!%+26a;YbR3pk8$Q6KmAW!DL+;$9a_5Vc2Mi!((Ev5UNs&luSC;v_=ktb;If; z`C18UNh21sy+T8y+z2%=JlEJOk@kJ}OB<$0D3+OoAm4dWpFiJV-s)$Y{ncesbE}7+ zqv!F^f|tOm_tIS+9>;$35UmY&$1ir+G!0dvTZ27$BdKG|2h+nE8J}sO4Xp4glSg!B z*fCZFO0LJ&g%WiMAE9pl`WWJFlt)1iziqnMPxB<*D{)$_7>Z#~b1697M*2u0uL687 zBZnfNGCpL|jDI=W9O<^kCPm+rU1xTrTpn=+EFz{Ma6;k)w(|Pn(rioQ`y2UEkF3~* zsk*lHwH$6bbli6=_n7TiW0g127;1|Vo_WRUMn%!?tMu_u1V{q zNrobk?NG=0Lxe--Xf+SHX{s_Vw%f@B`VHA!YG^z&Zjpo;Q|QaDY2Ry;b5`Ileyn1t z!4wwXXL+I|i%TB8qU2mK+gZ`~vIh*i;h%gu#t(7rQD_P-@AcIf-EwRsE9%+h%g%x* zw$Z&IDQi-|LH&fk+cavSprkO0@Fw;?)3vi(%px?97*D7$nSnFLND(gCfBSs{QVHU&60&mYl0Iq4?;@pRFTc|B6_d- z(Y#hlc6Q|HA;Y&=SVNEAfEHwJYsvyF$0;+}_P*84gc|w#SCi%`CdbA3FKNcDr$53s2?Dps1zGuOGY@)|F!_PDZTqr8!z+7I!LBcF7a%66rG; z_f^_BSmpW&(xII$GHg-&2~{cLRv+Czj6QwM71)Nef}&_lrNl3I*jg@!6psu5t+BKl zoC}IRbBu{8= z;!UO|7>gaN71?-?ZiYlJ^a~jy?3j6{Z0gyvS?j`l((Vlzp^O7l5@Y2@g;^awqb z1G8>LL)jDW*-O73p~gNN4Yky7A3}D9M+k9a1vAporKSX=7_)J99t{Pwh<lQ(plt7L?H(8u)e}KXhaPDVX2J_d(YSH^#WZ{h|-1Z?Uw_lINxLy zi$Q&GAnM&jps2I)P?lFt*#T~Ss%0fpcwwh@7@T^EW*~x&zIhzwN?pR`wH)i`B!K@Y z_rt8`POjetM_whOzmHd`z`Axk-Z?*tW)r05o}Ynn=foYB@Is3=va!aIzUYan#3 z*}A#bP^l=1{Y#jVv@_*A7|z(E_(p66D@eON@eyO|?Z(>5yR9jkKcrZ`ti499tR?F> z=&~J6^fotygY3&;R4=yioR0}gYoS#E4SvwdTRr(ebe`f;qR~{Dnf#{non(RU+yjp) zL^swac9Eq>=|?p`ARU@@i(RejztjY@lFQuQvDQ$1JbZamX1dRQ>XkDrfJZ-Zic;DB z3K)6Fs(vi8H(tI8-0nys;olfnz(9&s)<1qy>PeGnaIYe!+6gYZ}q0X&KTSrsn)sPm8d;l_Lj-h z{++DZ-druUiHwA?xU82L$vfl6(eV9kdqs|X1BHPs&gO}U#^BnY33r!bze7)M$YO=M z6nCmpiS8y{GsxRmQ>zp*B~8i~G?LLt zGH>8dSqGao@6S4)!%2%tXNU*Uy-3^Xx1a%6>dqc;{eov8+ZN;xzJRN4rBIBJayCZE zQd#8<*NgMDedR+O5sGnC>qzVkk%F&)XbgQH8XldbiNTbE2W@jC3{U8k959&btqF-hnV`z0z|MIforNRo z%FYiBnYj5r>RYZ*vw-{u;6Ps@{-7@aPB$$FDpG)RV*qp8yfQ)saFsPhsnKPD_-Mz^ z>HeR6l}aq6ds8ZPpTf@C_Y_37jlTF2li>@A@@L&DtPeMAm{i@Y{WUqIT|N z5JHhIp@bqJJpl{>Lb&mJ-|zq5f8B50b?@CPv*yV@d*jG69M4(w>jpwy z0RRI7DZnWJ0KfuZr8@!OqM;;OVx!?d+(KG9N5f}nc`Ge((9r|vX!)PSM|bjHc|Q&F z|Bc6J_{!fhCumsV@3J#AtoV2RBpT*C@mD>6WS~(D|ElLStx{G70N^&%4eI;g(Is86E9ssPM{xqHsP5OV*A3jawl8w^UOMkB1p`|~%{X4gE@wucRclGKe8qwJQ zMT%Fis%g-E3QCt0Xh2az=_)`NkQx4$MW1MDW&e#o)3ETX|JGLGZ+!hvU2m8GG=%|I z6&0`2zxk{6>S^)}f8$;nrc3-whVGBWNvHp%-7JlNBI&Pt{rV&SH=jVmC;#S?X_zVL zzwdkMZ~W)B%>TfMBqqSrA0|C5z5iPug{xQT-v3qhPivfb|5poNXQhe#jX$5J-S_=p zPj-q{_T=CE?LYP8G5t%=Kaei}uX<<@aN-}B{vVhj|1Vos|J3t0UxX&l_zxMTf8bO9 zz|8-^r~iS^`~&~F_a8evY3V90(NqWgrziNIc!jifbf(G6{#}li{j0p-KmHem!0E)1 z63Y_L&fNQR{ohndr|fGSXC4ax+>0}gGrkWvR^c)Es0IkP@pQizef>QW@UxA!vAB>$7Q`_hd1x3?o`_@CZRcjB*p_L9aw z@i)FsYtest`yVa;?VbP5kAECb0$u{>{wJOI*I)V*G-9A?cIs^Mjj>`%+7&%QJFbR8e zDLzm9a7yH6<=69Og9K5fhd$xVr@47}FYt+pOI(qZQdUt_yQZ#j>$a|*{v88Da|=r= zYa3gzle3Gfn>*CwiLal3Kw!|*7cV0sqh3YFBqgV$rlr5l$o!a>Ur<=|sko%7x&~ES zSKrXs){g1u?E2Q-Gc-IhIyU}e0yj6m@N;o#`Pa%SaeHU?H))T&e?Uij$p5DQ%^r4| zJtt_b&A{}>9=a0&e~e{kIC)utk>iFb(*ti#Va4aCxNatXsQk(-qGU!m|IlafG`Fbo zoEY(sN&m9w|IVQB|1XRF%b@?V=NJb#Lr?3|?DXsaAb=VVoXx=#Y|!EOnoRvUlV~r( z&a61Hc%o&wJ&aWib7!k;VR&}u{D!A9h#v;m#KvfbNjm44Xg*<(Mx8&%C0}vez!LT6 zLaPZnSdue&<4_vA_!(pYRP5M^pex+7MYa`oLjX7Pi1t#p47N3&h@;|N=iMiK) z9B&eYTdgX1Y{O|xs|B}d-2L!?69Z3N`Y$gB^1qI^oefh{A6&Sj)7bb9un=l z@BGg8tj>^hcff4{oxz`%G6UUS%YQea4;?-RRJ&oOJ%`(cSi{_f!e=yyDo4|!@llb@ zV#HfUBPth`o;yRwG;Io?ydQ5Uy_0OqQ=7g}q_6g6v}~n&yIT`%Wi&&oZJf4UnU*LY z`ql14Ag69lYpWT{TjbjBflEtQf`0{PBdm$BW;{T4KX-ZA5B2uKow&BXY)7d`c7?+- z#eln%+#-)jp@5r%A;yzG4ie@z);t862_0DRPHI==3H0XK42u6Uv7)oF*nY@*{p!cE z8y3F>^i7784>urIt<^)j<#PS@`eq|2{?zc9nQ5+?B&^7}PcbDnm6rg_;?ICsM=A^d zG2kQvv1nuR@NOV_UND1n42YzjBT!@sTXShyPabou;tlH1O(0vj-Y0j9AFpU)HEwRO zZTU3CMDuTtll*d)*l^~vW9ZVrTH(RDRtELWvZUH^IZFjC?9k#1-wuqrAl%+(}n z&0}x{SA_B6`MBoD(F}EQbxOX6R=jhw*z4^rp|>l1fD#?oAAWu()C~j~+>A zA*r^-D&1;0*j8x|cuqwhoz~l*)G`fnOOhqfu39(k3qv&>m`b5?49Nj zxS)KDjwoc<&u8!<{_x=gDZOuoU&?McYB8oi`g)F;b&)c4REyxBhZ~Q7O@!`^8zE)* z;_)$IRl5_eIl8i^>VgdKl+`QPJ#SXieD>9fKHLGP-ePS`nd%EJ=_}QQmS?WWl^ofw z&WXH40He}WbUSX!Z9^-fSMlw^5&}VPJwsJ@DbI=M_7!{ty z4~vH~sW-V+8jU)nYlfEmVeqGGBS*J~5TIEk^GqQ4yW#MC)L|#qO;F}^q{D)V9FY$t?wVLMS_NUp+jxOKJH~o$QHKJF+wL>e9<+{>tn`s3X zou0XmyBf!Q<(*1#$*Os$ek#1NuF20c%VB(I6DJWIrs#0G)MEIt38)+lmM)wr7xN2k zT6xm%=M|?0EnSVDYg#jUy0p3~jb6t#WcuC85Uo$*&0x1b6~vO(KUc4K!oYK{4OoN3 zc(EX^*Cd$Mjw7_^TR0t2qrMxC?N8qw10D?{E$3m-b?}U(P3}P4=QNpfy&&!%(i%3< zPP-nf5|qJqX~Fnb2=3QrjhvJp*VNb+Rj8>p&G2wDV{MQ+8peyTE)0}z!*z8E@sY>B zQqR}5B!AJlFrqTi+Fqdh_{B!rV_lK#H$BB(Ep*!%#=MB1)}+hF0EQi6I%Xiou}c4I zf&jvN6rmqHe+=M(;yM;dc|;!YyVZ0nA>4Rr(cRFoB@@Z@j#5mQ)O`gmnXI$Hc5-X& zip6|eGmG{I%BiH5wCS`gfj|ue$}tHx?1-&x6iNqP44XxwYlPM>9|lr~@Mp9ny<8SH zPLo0ym-WeE3qkT;zOkq9dX=tC)pe2X%|)*9v4&NTTv9d@eA1DRk0Oo%v*=t-+5?OA z&tW(!HhGD{M+sgU_tcqQXcFMXtvzMR{FYYP4u8N7S#wD=47$k%+&iS~GX%3)@o4pZ zwry%3bZlBqDcgfKDQ7`N@$GfZzrEb9d5m5Lo2Hd)P=&^4Hp6b^asfS$0Ta1%;)#Tv zju|oHMr$zvKQB|Q3nhZSLR9)#?rM6{UKo3*fHVbf*$B$Hlo+ESoN;_j=a1iLM(QAt zAyk;0rB6s`KL$iQ@Dcm#D#(T=7gzGycw~#gs&CP5;`+@mmDw90Yx*`hx`}D`RwHhR z>@G&r6rs(wIc7fnbVu`9&c_5 zy3DZ8=B4K?L68QCVEKS)Gq|Br)1Lj1e@g)mZ?t$BZl~oKfc#EXqh4BDo2#D|$o$<= z7Qm+kj#X@1@5dMpirf}B2f1wN{GiF(Uo-vzwYQPf;CE<_U~6bawKgVgEhN1BmKL1x zGv0|h`b?`bn$b|v=&MAW-+p**8kX>;Xi=2Yq>ghaqO4&WC(KaI2CE zC6eUjPMz#YQ0{z~(h$4IXxe#N3$1NCl%|sxpM{vLNo~mV*eFC@XbQ zwAa&-jQ4-)OLRO(MhrMzgt~bW%GZZPj{&&v70!~p59&EIghNB;8y7BABrd_HCA)g2 z9ndApq}`FrCQOpS*E+z)DZdAg0e-%Um(K7}!|K#26+f)&%XIs3|Z1y^R{cR-I{o zxoR1Bmytsf8ENim>_3Q(LglQ;b$Jz1E{-;9`&QXB>M!Dc1@NSEP!x#DB?BMg@u2l zqrdVS#ulB+Swovz=?`mh&LUYIWie^o{sa@GZi2L#y*97V`W!z-B16p0jwjNlH-;-Z z_e<9U#ggHB7(?qcY-VcB>Tq#kwpz#mUr(AnI5sdwVbP={@b^{!SL@-um8gsIYq*wJ;j-46GezImRb; zPq5$XXWYS2+taPRt)BQ9=_^K`?6~4HK<7KWfhU@kD%^oJ5?^+khblHyG;?DGx$0`7 zlkRNHwS?THJM$!6uk%#9c&FA+&#&iy@3RI+bDt7U%s))l}|AI&dz%`g6xOlPwQ=_`R6@yT6~ zISBb+a2zxu_cDBY^MEmD$$dV}@^+nh3O)8Rek%>3y74VnC5GhFC*F|sbfQVQd|FI= zG-ui#otXP^(S-As^anmupIECw+leCS8Dj;sB5I~*i|Qb0>^xx{llHG`55JLP?YJo>9Ga(?J zqFv~56-CXP$J)qCKtr!50^c#jMEtbt%wp@kdNYo#xa)x>s9AJM!hfO3`)PhQ$*2Yu zzcmg!21wplcpE3^wDGyBW^`}7uurq1#VQ^;m}|F&u0ei*tMUtg!(LLEhLkmlO_lL5MmluQQ=jVQd=}_d|el)?d~jw};QhCDtZDWrl0N#|&Syur@t)t}){J z+OpIA3|$nFw)A8qXs#)Gun>T=nNvrtpfycwiz4&Vi{;dhCqjChFaNZb@vjzAu4tFa z3dLnGLd^`uI!yYu>yT8&*RQ+_&)-UuvTJ$gRG5Q~RxLOTCJP@7QTv6$@zv7>)k(gw z@LP9ce#6J@rU?62^%Y@P;9#~ldAbtj2bqcSOlbS zskK)^x52g)Rk8{!z?&2ab!`7Uz=3g z-@M`oi3trXVUs0$hkYg&sKYaiMEw_=47sd2yzUYh)jjZR`j=4tLs{}?UH8qOIluI< zyonRp{sKQTe7-)0EwG?tGebX=IC}88J`XOL1fwdlJjdDVCiXZEodRts6Dj$M;rmic ziVixe2^rL$jsbr2HA_hNo|i=FUIV-Y-O-ztCEbLfprfDg_WO4TjiGTJ2N3hw>us~@75)q%G{yRG~)k)6Qj z4)R3*g5p&iFp{bj2r;5|rVTrDDmhLn0<)U0#VILlx5d5sIz6gC{ZMgA4wQy0zVW0m z1yZ|RW4?phT1s|sV~Nnxl08|G)3}0kT>Egie`r7+wis#^`QffQu5=@Bn#?h?y*j3C z2npo772sdd!|*vTH`#M&`L!zY#(pqS=?kCi4AM_5PxJ(AByqDm|JLcW?rx{Y6hbfw z81?nORQsxeDO5ElJ!X^SCsIe|83;JykHao#SrlBs-$wS#WXggIG+UJSrpt%tfDgl* zKpT8`(i1YQQ1@hKvGT$DAr*V;-sqz0oU!@EHm;cKVhOP8&-q0-0IP^G?+)rn<4gMM zgkD_1+-obMXhN8uV3b#hee(ueMnlrg;>zX;PEW$>{nNi7ax*I6&js;eHsnV*f0LHX z`1R?E)XCvYNVn3jDvFM9E&rak(Q0OM-bcfgz6$5$#ihlVfW^od4tpAvL-Fe(p33UByqf5Wu-96xTYy)o@cnAHHRS_cy{u( zmF^v^K*_1EtS_{Ur<`JbuULOIjI+F;`upi{%wR!L$As6C_keVl8K%cP_NRxWyqCG& zy9&}oVLAxXOO|TaPu4Y(Zco-PgbiZpJxJW#2M7?HuaqgZu*u(2Px`{mFRgSq^?OqG zPulc09##_~M!@v8t7rUT;SkGhhM{f%Yc%VM!OK?#TD3#@T}c~!Y9l6!OC3lLB=dAV zIv6x*GwDATvt~4w873a$sv@uNQ+uE;k z?&nHl(f$_Qs4q7yQ`0Z-mR&6gs(3ifG6OP(<>SDUMnfJ)Dh5!estAvO08e~m?s(Dc z_>I}z33CggU&q`KMI9zk9+`O55+IjX+6tEa6_c3n2~vQjhg+YHd-8@p*cteF=Dlhj z+07799Tc(US>NS-I1~D|qSwmEk#R%{9Ym_dD>r5<6tlWDK!FdMCLX@FBvibcaTa^V zQ>Ur-_=b8eZHiFQtl5FD4*f8<#WNjfs&!KKsG~L+UJ4Scs1U&=)x^}>it|T4^bByz zdHZumU%u3#@g;xLR^8$eqEB+f2yA=|7~k#u1+4ZjtuTQ@AIt{3`>`BZABy9KZHV-3 z#gfSnGX%NQnUk1Byy<-)_=IcP@BxcoFpzbeY?AW+hzI zc~*yX%~j-VipUb09fD;=DNcC=s5uDd$X3gym5bYE4FA;MCO~@3Ci7WUc(&EogQ;*&)`--in21*q3bl zp~$Fo0xOr%_O^-k7UMUwcBsX}WKK_-dZ0uVcpm53|%O6B7_ymFn8Ms?-DJ#CHX! z{g7sx(!-%RznLSpA7QvjJrtT8Jr~=pJQ-b(Ft>i+G3(S)+AV>;IWvf-f4Bv@cT)eR zLS?AUs4rwviSug^7qiNA!T^5>bg)#YGV2Joa-1?TXixJcWRSY89%al2UeIKO+fFOTrv?|}Kc-$( z`}}Eb`;&fpR?bxJ>BZ#<<%$%^Qn7Laxd5(KAd!Iz9Fntits-YvfKBo{E+y@l*SkP6 zHX@bYe%tw&W+%BSc=a(G{W6}*25~c!;a$Q-aLtpqGun5i?yf)mnOt{aWf&E5_S*ac zD1E|eXmc-M0!k<^->XGXR-BdB8e=Lh>|80m(q-g;=A^=XCq%a8f?HrVP4#TzEl8*) zV?nV1lhJK|qblKu)4Vr%qpidG-`{~iFQ?W~`M}EHHpXFI(Q188ivQH>}y(0}0wQ*}? zw@-EXHo*ce*3!UJ2ig2N>OutMnxoJP3Q*&#-&GgcTCb{ouG?)1Uy@T|D)o_qogAJ~WegM( zNEvci^-x%hd0M|QJiVCUUk9^Bet$g9;&koBg==#-wCq8_O7-M&$YvUH(~&HZ8|%9j zjhiM#l&prbe{XgsX{0~@?G?2)pB0?#gEgx*QQZ))WC}}Zy(j3Cb~A8_?fjvi&{qR` z`c}+bmN&KU68mt%yPYoZ!ClwOP99P<)AK{nJrfHmY9qbcSE_`q1q0sLic$9neW$B3;0)Wf_-!OpKjJ{0aN zHB(d!f0StHnoOvU*zrI_H^R_v=$`}Qih_bY(t+L(PE%a9IgC1umj8JqyBgRTeQ1b~ z9;6rqe}W)DgrAvyubWs)&v^mJWezfrKK)P-P>S54lkVp|r>HT$8zldg`8Nws%)*_T z@CV-Kar#AT!x+9h(}KX6e8WSK@K0aqH#Znw>;=UZTXq=Bf)6LD%;d#8o$t)eme5{g z)!HT@40=Q5kcVPQR$q{hehh2nsv$R-`bScc=ERe=3G?yBq}4;)@cFTJ`(~Ir>ToG$qA0Gn^l`Bkx;bN9iZ_h@;zbV2 zW|`VTK@@l4kf~iU1Y$2yhbe%q6wTWs7?tRZg&Y!O$8sa6q4vs+CL!4md zk07j1n~0T}uI%wl-u(xqRFFZ_Fp58Uy?CAzmpRU2Zrk2|E zj9XTr0U@oRgAwX;s#;(e2Dh;nq2lfvyp}7{R$Al;%6CutR;gYWoeC;@r0P{Ky|Zsp zmmqoF{urR@p>dHko>(xG)A?I|w-fZFNC_$z$-VTLQ*)G@bkV%XbT}m`Ezz zT0THx>>E+qNy-ejgf7mpvGDBTNv_jDe6It}}4M`N5hs zO>U)gZb_5afHvN3ET1Obwj|RfYUwrOK=-~Il7?IUq}pa=z{f4G?14p(63=(a)^(vJ z(}GBJdhem*?9vND*xXiUF4-ctW(*0NcVwEuPrElJ#5D8ISC;=G;hb(QLp=PSKoz?M zMw051FPKW&q~=d0HN8wAP0sI9nZMU)%JLYJ1M+NsrQ=w$W+8#)@{9F}zU0&TUhF&N zV9nkRu1~!#ZgsaK@>wrB?c~UozG_=2o|{jB_BGhTg2dcHxU+@ptO6ivhfxvN?iSWU z9E?;PWbJ(yVS45KGpo=o=e+8sP$yb2hfD}-+W=BebAA*$6Ntw2EyO=*qh1=znt`_sSQiCBK^~pwjW5P$J$dH6!`pmj0rRG|nG)}) zn+MxOv_73WvVK|pn~lYrYt_~#_)fu?UC-XW`VqGE7;pw5PLywp9Q$qavz46gT}F=V zT*6WDRCbW`C*d_|yG=E3j-JHo?Q2-pr{kofLlXxWmF4IiRhV3K_;eTqI;+@k?`S#f z`#u>0^$KDL7!oJF;elA!i=4vD!f!q_4jY z8#M?vx@fHgR&gE*upe#$7Ze_u3^yBpBk%8`&sejIBWU}7!$GqZ72G(GS82ftY$ zQ$=3!Q7vrEk;S%4sWlf?b`-NcbjM;pnW6r=i`DH5aW31&SDUhdFs+lcK7}R7#S;>~ z;88sBRAFsWONF~e0Ol-zo7Lc?c40QBp-Uado2L9m+yl4$=S+bQ4K5?fhIKmTuFl}9 z?7AT^&2H^ndyz1Cr3EeRIo(cM%%_LqbG)Us<-tv|0kZE9_=+nnCA<}1(TJY*a*O1L$%+X#B^xzS zzo4pL2dlSFCNE*HRZ7L(TE4KaHNnL-`Fu&AXbb>ORE6cxXni@gvmoCNE}7vQi)ldYpQ#2iHX5sBDu~qK_;KHmjrV$bwf4>0bMxOKT9Yagw2!jLZtXMYYU|Uk{Cqu{KPqUE z(v@K?DU z+T7MjxrX8yvb6r_Bi*By)??$#chd-VlWojtR7sIInO4i8F8OpROxtoXnT^(gDvt8d z?)D&u@5cZa$4Gy)pr1YHFaR??BSzrP852B9$fzFQ@?EpnX~$$vZ`;hQ)Ri(MVKxV3 z3NKvVUOv?RCWQK4bf)WqafG_2Atx%8^i;M28SMBmCA(rhOm@t7)w*U}%5)k$=70uj zL%vg=>(Czqz7`z=PK6Ez%nRXeEl^u#jl_q|hva3bJQQ}K6ghGeVp`bgN2gjDRs=4w zz)Il0@8CPk(38T&|?5wvkjh*?yeSkiRf2j+U2G_ zFfktqQ%khn%5+ia;FILh68&SI}>tWq9?&jZWa@O;zdHnCSy6svXY6pVm#$#G9 zka_0SVtr$eZb694FKOqE^yh3IyxE+W$g;PU6T}q7kBuQdR5PTNI>d~ms<;* z>R0`kmuGEI0F(A@gs-{f8E6lrbdAP)y!L5=uZ1G*sctCBlcCm&SVG>se8dttc#dV7 z)r4Vcb$o^^d-nSy)P?)exGS6Ti6F>g_;Y{b2aiB;lICP40zFBb%tLhi(kfL)&LE^; zC%QeOUS8uUdgTjuI5Z8~vKl&?t*JM<&JSs_Wty0Lr8DqC^zfr)eUj?I8Iv=Mfp2B* z7R$MVCHFPaEh>Jvtx`dHtM8z1AVryAxz&N6 zc-pnFoIrV~1>t#t0!FlIkT>$6{(~!fg)oCHxC-04zAVXG*@P6t2v$zTlndu`P%CkP zb;h(U;C3YE*NR>(wzH(tVv2ay;Y|bi@LpWYSUgOzO2gH_B}M{g@iC}`*~M&h+jfTA z#*i2jVB&hX7Pg9g{OSGr*im|F`F?JH?uI^rXy-q zxvIB^@?P6?)cUmgObaW&UFe_AO^(}&%~2Vo($1e8Vs?H^t_<4h7Tn2%_ZP_!?5Fk( zBfiKmqsNhCgyS~Q4E`JiDTliiX03-%og!b`hagX@y2o1UtKAaL5xwQT3J%`FHW2~kY#)AEqU9BrMT_k_Mi zX@{2KQ_k@b>E9Tu2-4aQQu2?+7VKkU9bxlW^c%fYVO6{onq#siG{4qdf)W3CYUtT%Oj}xYs+UP#L zyB(soy&0knTflaX`W{`H0g=if_TkL3DFWr5`e|xUH(kC7JR5jQK^*1PvxJ8u9a&BCIv&x+#oYRI2xw&7E zc0XcBN%ZBWzm8pS1C}%M!0oFe=Pr_LShl-iZfYdFVBeeuGcsNp++@PN_?G_>V7zm| z75m`2jLp0Ilzu7Y6}{6*Rn`uf1!TKDF&*?VG|_$eu{Kccp1s+O%ArPM zhQrw&fGuLcMS5)jmqSkuB8<;bs-O-$!yiVqu46oK$XCDD?ii$airZ{_=OjJewllec z1HEfhetne*+eHVuis|&Tdb2XUvM<;vvS$VI50euj*lbOQB}Bh;f+YD|M{>7Y(HKs zL{Yd_cWxZj(@v)4C6thvNUqd=5b(z`3HV)0S2Z%->UMOpV`F_+7MG^Qbe9}AZ0WVy zQGfPXRLi)Y1e0D(wq%Ejwo8#NoU&`RS{CnQ+Qr0VIxXh1=#QT+4aovZ0AYCYCAO|& z^rPH~I+DjxqSnnENpc9$dakolsD0}K0z3}iEo~8OJ8QVTXBK74{UFEYQq`Eu%XDu@ z*Tr~X(wmH&D+NbfWISy)@%cO2WuF$e8<>!{Jo?zoPUK&3i{AYq2dr#1dB4hB6c{=` zZd9W?yxRi4Zf@3K9kd)X<5g{JHGk6PexywVLg?J%T507EQZ^TChoQyVDs|S2+?yMt zwvJw(=4dYzwnR4;b}Kcz+9cFwQsXh8J1Nv^bTcICJ#7NUY3)dMJqUP?FoMs?N2dk& zIM_G@ZsTC30tRxI+~v|{CpDCPc*k(p7BLarc(1hH`P&r0(Fe4%2^T_@yi6#X>)N<5 zN1J`>jMNOohO)PeG&3XMo>?}i`qtOH)(Q@Gx+)n>+t@y#OhAnD)F~gdW;UTvB&y^A zG03C&;pkRXYKrG%lA&T1L=!YBvf(2q-tK+&j2^#&(Ma0Z8h?XkaQO@m{IG{;^(&-> zXwoHkesq1kS*#RspXispR2}ju_BLTGHq7ZEe3aoTNATrJ4iSvcG(4 zzT|bBHsc{?++dvUjO;`iXjR+g@HGCma zQHYybcYQZhM{dF&$z+_+=elyWvdp`xq-1At1AJ8dLTdi%gf@815SAtxG~DDlot2YN zo>_&$Z&NihE2I>1b!+h~{=f11KS*AH)f{eBH65+Sk+LNsmxday#)#4SgnQw(`kNQ+ z@P|Jp>(9`Sp_y8*k^44Lx*=8vZR2;F$F}@JROgSL$5-45yubEkYSmJGzra0ksyJa> zvDIrMursG*Xw9n&BqX09N-#6qqP<9xgYd<@zj7`RmfMh%K*&)A!jTxYfJ~idY#pOY zl0647_Xg%{AC*&p;<-+uW9M#0mU%P;%(P6MF{;EKG94;X9ueFy_~>)CWXBG$ zYXi)WP`ia$vRD0mandu{SkS&BYa>%q6&qh(^FfY3?L;dJ^V2-^J3M1TAIEqBhf;`j$P>k*y)S{KQQAfKFUw<);}(Er-*DifX~^Vw~g5 zEyg!*SfFlA$@k>$p{kyrb5Bg^(NC2;*IfV8*W|U}neU-|h`WT^@_D0xHry8JBKW9@ z9J5%%zpvbt0_pP=wbH9qkL`uGnnv|UsCMFokIvsU=3#3$4vb8;Gn7bI3vfl;QssCUR65&N0Ags!mU|}j>!ZD$^}cpSUhbJx$1ac z4x!O{t!cEVIdgv5WXQQ*=uwU>!;LdnF5J1>{!FO}_&!%C?2!%WM#LR*Eg3!S8$)zzn-_M&ZO1(4MbZy+9#AJxq;lVgdcMqYvxAWTMnI*}jia7ab{UF6(P(>#jWY`ev4C>XjKkU!TbV?D&pS$CIA# z2@{Uvv*=l&BB3(~wz-v7MT8Q$=_pH+oP2})V1bPp+Bh^-4+)W?9s>+hH}Y?6R~sB9 z6ur448uE5_EN1UXxUd% zX&@L9+O;1C{l@40Sh95CYNCzc+m7Q; z_VPNwi*-@T-NM687Nf{5nVJN)$uA|*qRV{`F5EwLTbkWUkjx#rQN<-6luQOXlF?whj9jnzs0{lPGArc70JP+xCBc$A*{1tjOI$9TJL z*geDT6#F{xX7(^dxiJUNW^MCmKHGNVf;efiVx=58c%Vc~pOeQpMx$#?+GIuM#p4N+ z?Nq@rd6YfKTIhUrm~1o-Z^u~ z9-gO~syPEjMuPPYwhIq;+;d344@wT=#m~Qeaw^~&$uuw=n%3;jU+_;o=&&zO+-hYf zM-Zas-|3u-Z6}b^LIfET+MR4`i5yk7BGZ~m(~{MUs#Y13XRD>oHwtwA9v}(eBT;8{ zu#pa9)@^UYe4W1iXI zBr~HXTkP%mp=yJ2*`k63%r&=@w-ml9N!7p1pKbUMvf$-Do(Y8*mlh=a5)XTk7-;@A zvo$Y&)pTYhVJ@RQX;VGToHis}PBXr7@A_BDf%VSHp{_)fmiD{}E6&DVYc-dxLb)`u zKCYPqA5ya7dW!9vJ-3!jZjd0iiwGchZ7NgYwKuOyvva7y+a9woeON!YI!F%W@D4&~ zd`nAxE}N}Q;~lsa3Gljra8k^y(LY-@)aNm{@AQNqM0dV)15cI^{4fVH zd4(4MOJm(tvLHe%Sb?&=Q&k1A*}4@co&_a@L{!Y{Dc*Bi>Il=eYO`n~XG8?dC^`D_ zhtUFU_GXvTYtlm8WAzCcFQMSN9{ zREGJW9&63l4I zTI(NW)|3a#D~0yYh!Q$8h%BVnM7HNOHNzDgZT+j>1uN-FCYQFg4l(ARyJYgaE@FAo z`3-X~x7!);P1rrIgwLnU7jT#7uS(ai`R5rMI#|J{rO{8~A0GoY{1j{rm)nOQzo?sl z>a9#jKM!Wt=nHZskT%?-)wbNkBZNF7FU`>e@x2i`$hk+<23SA6d% zE7zn!>UKomXf*C`_jII!_1#1>si`_rzh)SQP(Ut(5n=CH4gLffX_gEkN?^h`f6-19 zZlK~Vz6$rVmWJ>#OFZDa#lb9S6mEqBh$f7z4!@+Gz3Ue9q6J2jQ*DhoO{`EWPgcVw zibyE3z`|DC=g@vZMxxw@dAtx*=#&^axzyvSRSM*KWS{&xe1>=HM?#HJw%#Dxx8j*n zHVlf;182vX535XV9)Brb1g`%|Synjho^ zE_5~O{%+YQ%=Rv_1rHS7I@z)Lo)Aw;{#GIfkoOajx@4Zagr%~EkblpaoF_MZab#4^ zLf5W=!!Yq6+C~z0L35U9ZDmY5wi|GV&s8@#U15xt7m6f#bcutwE(Gslc|Q z->bfJ4Q{WDGpp*t){4nYhx|swu1;`g0U_&)qo9@vA$V^3Fqb{BM*!Hh_f)&AO7&Yp z%J=+m^+gsg_~q+OB7zU3Vo=*|ootLn?T)XgN(8=D!rF_r#@a)Bt|#$ zhUC`g2npficXOyS!RTsoj4g9Ew<){m3`yWI%aTA*B z6pxLaoeW`H`HIUKVz3~SR1NuV;a+@i7==rIegK315!H2% zqE9w0g@S>v5o`+~UURh1FI7Trwm}y_(Qq%B2#o3G<-!1fC+7ZAv_MRZqqQ%En3NpJI7ex1UclgDff>RZSlH#L!>fZ_{Z&tVXPc& z>7Ab|q@_P66#di@GjL%|P?6{ut0kAiPKd1IPAIa`iRDVdYWEVbUT5GJJDogxdYBn_ zPJ*v}J4!zEQZBGBJFClA37K%u&m6)%%35<@Fiyk|pV^~1$Rx7p{rg^ch zLv+8wJWXO8&*^Z6j)V2%wdfX1I0Gdxv{>Mz{JN1_JKqS&n!Rj$S|+bIVle#bov(Dy zF5M4jX4)wWG2A8N>3CoTrk#VR;nnoBWSi{{Vt^c*j$HYJUUYYB0;8=zciUyjP-Wl3S{}U0sxd_C=5Y&ABYB2G(M$ z<@~A(u|KUExBL}z;@|8I|;H_+3$*A1K zL|W9tvt%Nxlbx7;nSJrn=mF9 z&NyLTKYzg!JW*$B`&#(c!(7y~g^>Ib@fF4XrQ#^^kE+S3=<{3!lK6{&=0CH%rypo> zED~SK6p~q3*?9gPQH>rI=ag6PB{!|Fq?)?Dp2=U9OHI_3(ez#-%5`|UqL0~(7yd}T zeSFo=>Hh%4da`Qz{{Vt)Rvj+I<<};e^&byiI?r_kR(BzzB+3t#qIo33x*h8o-Nq03 z%l`nuz{>D{!9ex2Y0%AeZn6Ox+M~^abqTdLg$uU>C+TsX z&Ym88>sFHg0LhcT+^l@Y4pD?!*HiG?<53F$k6{^Yr2hb)rC?8S=6&8e9A>_LtiAhO z)+?4aHZ*HJTU5Qbx6th`@3m%>J&m@P1IcjCzcyo4%Vc1lJuCKKPu8#QJU-f+>N-u8 zyvu1N#gw`($r9nw%A|^6&O(WS&rXKFIpc|6*r-Y>X-{=`Yb)DFYuWa_kJ2~}Fi@ln}335vmT(1^_> zMo4WkoeJ;t74h%<6?a3`G(U|V2Gy3wQnb;v4~C`~TTygtd#l8}xVX8N+BGe*KPvXd zGrJC6HsfH8o8u`-E;)xgwc^tC5~Say=D#+N%A1?9bdxsY zw5e5ohZ)9ym*+*cov3RU);czkZ8o8)>e|h=lcj0)>AFja>OC>3vqIsVyX~lSkF~fTun#s+Q4dc`HSH{{XE~ z`%nJ>2H^a9{h@%N5zb-P&ZhP9(WW{Nwj zf{{!kxs`XQEw$b;#Dv%9_xu;<$7$m)_$UswZ~dhVv3M)tzLDU?vVC1{rnK8VwfXx7(YAGMiMwL^u&Icvf}E?n>bowndi8IAJ)QK|3TPb zAn?_?>LX5y(%MHdT&jsB0$HvCi3uYcLEE$s8^4yu;kEr+N!9#YXQ#)lh@h~GMcuSW z(lj9moNiFD$TwhPj1ErU!?P}Wyiti*dC4UGUDQ?9tyx_(x@?w*?-?VZhT$AEv2@`k z-`ae-Ir8&t?$WbEqs=EhFAs6}yz>>EW>NQ@Si<(!aa^jT(qGLxw-tYTn%iDqmhf*C zVK{S*s()!i-mOY*646Dw=(N%*PBK@wDt1dpr}NLKvW2va_ms%Yan1%SHr)A_GCo^} z+x6nVbZzuLaWw4TQ~DzR0E2pd0c&3temVZpzA25YqwuGPJ_Rqs&30MKnU?ESzK!in zdq7aTG>gs5U05BPLCX}E{tIdFU*b>f?c)CchrSc>vAppPkK;Q@b&mx2^j$yMZf&d@ zWOy1UMk#O(sD-0hh(!^xR`ZpY;xoJjJZ}`?B}!kzvzDDxa!Yk}WV&xIscZJRHh=w% zkz(-nx~~gs(WcjD(YLm(CF%V3!8k}R9G(ie108egP16*!+o|gB=fC@)fIsvT`PbXt z`=1e__)qMY{tapPYph%RIsLBwDqlnghx}jTe+u{)M3&sQn%A0bwe7|7l2>2?J#N5^ zF*z-eFr@q|{{RKv_!;A$gCFpz7ve+NHP*M{-x1k-FTc}op_Uu{3L8y5FJH=xyF;>M zuzXDD$L)AkZ!Ot=9~Dm#J}#p=5xa}~lS=Ql*X!9?pLvmHI0_s)jl$!fE2#wH`^qh~ z9TV0~t#(N@*6aDij$Nq`9OhMwf;%&VU!q^|O>YZ$TU!06bUzh%r%%MY4Jxx zveMmxuB8U4V{aAR#s*9l%Xs&UGOPZIH*QVH{{U;5Rh2xhvx~D(mb>f9`gJ~Ahp@CU zS@s&1DP9t(1lM%ruD=tH{k!%50QgEjX}^j-G&-g3vvK1+a_hvJ)}wi8<+t{=#l)94 zQMlNFBnIj^3_(;zCPh_L2&3ZEk$D(9$6h;EHbpthDWvBW7j2TV-P+5dvDd{|Ts{wo zE78G8&JlJ^yS^islz=0AyXkSYv_+ATTO8@4bV#hF%V9+V{GqpQXPCsy=$oJ8pkXf3el< z-WdM?f@%0J@n>KYjq*KQ%$7+G<0L6SI{hy?@t9Udoo-`+ zV4Gi#CS_qEcLlAuRoI}65&OZ&=zk8WPIa@qT$+`+<+HY_yL5Zl{pO8%;P`I|%gcU9 z=_t8rD_>@eU{%+eC6xM3wM0GIv?Vc~Ctz8CmQ@B+ibdS%yy{6lZ!-F8n4cwLJ zrRJk_$>!W&2`%(gSsp=^d4Nr-p+8H-=9OM!PYHpFQH-wpHr?dxt*TAGUG9H9)yZRo z#8k#q_opWWyp`gfpNsq#NBrSIqiY@`*ECNK_;*UwwcUSQzJo~6^i3Yc?yoN{<#8M^ zK?(xWNbXft6cWUM0Vcgi_JH^?d;2{6Zup7tXHt{IS699P)}zuTz41qdTSU6L%qbwa zTSk&Xut+2lLgkN{3&kcEe$n(Yt7__-TD1QF2EWhnJJmR-K7RiI=l)C3{;PlB*xw3j zo*VdW`&9f3}c;Cl<8}J67Z)an3J<{Fjc9%C7Eg)Em1Szjt?b{(@R!z!-X@8>s z0N~-zgun2!{{Ul83VdO(@a*^c@4%mn7L#A=_cBdv+JA<17~anDQWo1AteSw(SCuji zpr}OOyW{bkE5`J=76D|+vtB=4Q6Q?h)?eknh_U+?OAQj1ht zk45<(!p4t%2A!zs*O!`X8r8O+s=;$}quof!9o%UkCKqMoD+MY@IRNop9sQ;DlRe$N z)E9bgsis^>1orZyLp{C1F$6F;WOZdAjtC;Y-V%hTXZ?RyJe^|hk7)3BfVE#7e$1a6 zel5)U#;>USD)`;t>kUfqq?7Hn*KGBVwcXvySm6DqLenD*MoU~Awnzu(g_CX4#!t&4 zmFdYNr}eH(G_TJHt0=UW+`r7;yLDeYo!iy7tKIcKRz3)R)LszqckI8U_zHb+=o-g{ z?low&t2wSBA8w27pK5`S5xXq6_Xw+pV%D#YHi7x&;A@-D5d2BhJZT1xX|A+hDSr~L zh3|A^)&AQgmjL~mYet$jo;D7^g(RF~9Ok|+D9NXnaV|3xQ&laUou4DqMj_%$_<2+*qlOCykXW`7>=$a$XX=UOz)1|bZQ?(aQb&^!ZUq-j={I=$K> zO|nHVEyIFjdX4TCaaa0pubxPm)0)2>?MMey93ie18xA=e~iXt5!cpKZqk5f(We zPY1W)m}-&7Db>ZL@5)bmYVP#b_Pe*C{UwW`Uo62=r9x6%iZQy1X{gyhvh_;u*P;K} Y00000000000000000000|KbH$Nk8ewVE_OC literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-08-15-14-42-46-sep-2007-08-15-14-42-46a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-08-15-14-42-46-sep-2007-08-15-14-42-46a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81be2a200ec2db358da3e7d4536a28c1bb9e3d2a GIT binary patch literal 11549 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-08-24-02-40-42-sep-2007-08-24-02-40-42a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2007-08-24-02-40-42-sep-2007-08-24-02-40-42a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa457643d4e5694ec7fe44d9526068e58cb10abc GIT binary patch literal 7687 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 S(emE)X}FlWSfVge`@aAfP5&qW literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2008-09-02-17-43-48-sep-2008-09-02-17-43-48a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2008-09-02-17-43-48-sep-2008-09-02-17-43-48a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c866423c7a9be687da7154feaba7e28f6804d383 GIT binary patch literal 5406 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-03-26-09-23-20-sep-2009-03-26-09-23-20a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-03-26-09-23-20-sep-2009-03-26-09-23-20a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..761bf6488b68c78fe86e87532b42e65e361b9a71 GIT binary patch literal 10759 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 literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-06-20-07-59-05-sep-2009-06-20-07-59-05a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-06-20-07-59-05-sep-2009-06-20-07-59-05a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8718269e98aa2dbaedb9a45a0d6383cb8a42b3c0 GIT binary patch literal 13618 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 U$(hF@NP=Af{I>TM##;Bk01P0F`Tzg` literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-08-05-08-11-31-sep-2009-08-05-08-11-31a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2009-08-05-08-11-31-sep-2009-08-05-08-11-31a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9598b21369e6d2ced1ebca55a84689ef28ad8937 GIT binary patch literal 9919 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 J&SPsS{10ZZ2HyYx literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2010-06-08-04-44-24-sep-2010-06-08-04-44-24a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2010-06-08-04-44-24-sep-2010-06-08-04-44-24a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33f7d9b2005f3904cab626cb92899f6bd1cac746 GIT binary patch literal 10939 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 o&XOJ@6K9`>&eb(#I)3GR*w)JxaE5kxu5Q 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 CWB3RF literal 0 HcmV?d00001 diff --git a/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-01-24-22-06-02-sep-2011-01-24-22-06-02a.jpg b/Godeps/_workspace/src/github.com/rwcarlsen/goexif/exif/samples/2011-01-24-22-06-02-sep-2011-01-24-22-06-02a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a4af42d38fee0b9505b8981c171e94f09b44691 GIT binary patch literal 29003 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

    . + re := regexp.MustCompile("\\.pN\\d+_") + if re.MatchString(functionPath) { + functionPath = re.Split(functionPath, -1)[0] + } parts := strings.Split(functionPath, ".") functionName := parts[len(parts)-1] found, call := m.findExpectedCall(functionName, arguments...) - switch { - case found < 0: + if found < 0 { // we have to fail here - because we don't know what to do // as the return arguments. This is because: // @@ -258,28 +296,33 @@ func (m *Mock) Called(arguments ...interface{}) Arguments { } else { panic(fmt.Sprintf("\nassert: mock: I don't know what to return because the method call was unexpected.\n\tEither do Mock.On(\"%s\").Return(...) first, or remove the %s() call.\n\tThis method was unexpected:\n\t\t%s\n\tat: %s", functionName, functionName, callString(functionName, arguments, true), assert.CallerInfo())) } - case call.Repeatability == 1: - call.Repeatability = -1 - m.ExpectedCalls[found] = *call - case call.Repeatability > 1: - call.Repeatability -= 1 - m.ExpectedCalls[found] = *call + } else { + m.mutex.Lock() + switch { + case call.Repeatability == 1: + call.Repeatability = -1 + + case call.Repeatability > 1: + call.Repeatability -= 1 + } + m.mutex.Unlock() } // add the call - m.Calls = append(m.Calls, Call{functionName, arguments, make([]interface{}, 0), 0, nil, nil}) + m.mutex.Lock() + m.Calls = append(m.Calls, *newCall(m, functionName, arguments...)) + m.mutex.Unlock() // block if specified if call.WaitFor != nil { <-call.WaitFor } - if call.Run != nil { - call.Run(arguments) + if call.RunFn != nil { + call.RunFn(arguments) } return call.ReturnArguments - } /* @@ -302,27 +345,30 @@ func AssertExpectationsForObjects(t TestingT, testObjects ...interface{}) bool { // AssertExpectations asserts that everything specified with On and Return was // in fact called as expected. Calls may have occurred in any order. func (m *Mock) AssertExpectations(t TestingT) bool { - var somethingMissing bool = false var failedExpectations int = 0 // iterate through each expectation - for _, expectedCall := range m.ExpectedCalls { - switch { - case !m.methodWasCalled(expectedCall.Method, expectedCall.Arguments): + expectedCalls := m.expectedCalls() + for _, expectedCall := range expectedCalls { + if !m.methodWasCalled(expectedCall.Method, expectedCall.Arguments) { somethingMissing = true failedExpectations++ t.Logf("\u274C\t%s(%s)", expectedCall.Method, expectedCall.Arguments.String()) - case expectedCall.Repeatability > 0: - somethingMissing = true - failedExpectations++ - default: - t.Logf("\u2705\t%s(%s)", expectedCall.Method, expectedCall.Arguments.String()) + } else { + m.mutex.Lock() + if expectedCall.Repeatability > 0 { + somethingMissing = true + failedExpectations++ + } else { + t.Logf("\u2705\t%s(%s)", expectedCall.Method, expectedCall.Arguments.String()) + } + m.mutex.Unlock() } } if somethingMissing { - t.Errorf("FAIL: %d out of %d expectation(s) were met.\n\tThe code you are testing needs to make %d more call(s).\n\tat: %s", len(m.ExpectedCalls)-failedExpectations, len(m.ExpectedCalls), failedExpectations, assert.CallerInfo()) + t.Errorf("FAIL: %d out of %d expectation(s) were met.\n\tThe code you are testing needs to make %d more call(s).\n\tat: %s", len(expectedCalls)-failedExpectations, len(expectedCalls), failedExpectations, assert.CallerInfo()) } return !somethingMissing @@ -331,18 +377,18 @@ func (m *Mock) AssertExpectations(t TestingT) bool { // AssertNumberOfCalls asserts that the method was called expectedCalls times. func (m *Mock) AssertNumberOfCalls(t TestingT, methodName string, expectedCalls int) bool { var actualCalls int = 0 - for _, call := range m.Calls { + for _, call := range m.calls() { if call.Method == methodName { actualCalls++ } } - return assert.Equal(t, actualCalls, expectedCalls, fmt.Sprintf("Expected number of calls (%d) does not match the actual number of calls (%d).", expectedCalls, actualCalls)) + return assert.Equal(t, expectedCalls, actualCalls, fmt.Sprintf("Expected number of calls (%d) does not match the actual number of calls (%d).", expectedCalls, actualCalls)) } // AssertCalled asserts that the method was called. func (m *Mock) AssertCalled(t TestingT, methodName string, arguments ...interface{}) bool { if !assert.True(t, m.methodWasCalled(methodName, arguments), fmt.Sprintf("The \"%s\" method should have been called with %d argument(s), but was not.", methodName, len(arguments))) { - t.Logf("%v", m.ExpectedCalls) + t.Logf("%v", m.expectedCalls()) return false } return true @@ -351,14 +397,14 @@ func (m *Mock) AssertCalled(t TestingT, methodName string, arguments ...interfac // AssertNotCalled asserts that the method was not called. func (m *Mock) AssertNotCalled(t TestingT, methodName string, arguments ...interface{}) bool { if !assert.False(t, m.methodWasCalled(methodName, arguments), fmt.Sprintf("The \"%s\" method was called with %d argument(s), but should NOT have been.", methodName, len(arguments))) { - t.Logf("%v", m.ExpectedCalls) + t.Logf("%v", m.expectedCalls()) return false } return true } func (m *Mock) methodWasCalled(methodName string, expected []interface{}) bool { - for _, call := range m.Calls { + for _, call := range m.calls() { if call.Method == methodName { _, differences := Arguments(expected).Diff(call.Arguments) @@ -374,6 +420,18 @@ func (m *Mock) methodWasCalled(methodName string, expected []interface{}) bool { return false } +func (m *Mock) expectedCalls() []*Call { + m.mutex.Lock() + defer m.mutex.Unlock() + return append([]*Call{}, m.ExpectedCalls...) +} + +func (m *Mock) calls() []Call { + m.mutex.Lock() + defer m.mutex.Unlock() + return append([]Call{}, m.Calls...) +} + /* Arguments */ diff --git a/Godeps/_workspace/src/github.com/stretchr/testify/mock/mock_test.go b/Godeps/_workspace/src/github.com/stretchr/testify/mock/mock_test.go index b7446accb4..403534dbc2 100644 --- a/Godeps/_workspace/src/github.com/stretchr/testify/mock/mock_test.go +++ b/Godeps/_workspace/src/github.com/stretchr/testify/mock/mock_test.go @@ -2,7 +2,8 @@ package mock import ( "errors" - "github.com/stretchr/testify/assert" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "testing" "time" ) @@ -44,6 +45,16 @@ func (i *TestExampleImplementation) TheExampleMethodFunc(fn func(string) error) return args.Error(0) } +func (i *TestExampleImplementation) TheExampleMethodVariadic(a ...int) error { + args := i.Called(a) + return args.Error(0) +} + +func (i *TestExampleImplementation) TheExampleMethodVariadicInterface(a ...interface{}) error { + args := i.Called(a) + return args.Error(0) +} + type ExampleFuncType func(string) error func (i *TestExampleImplementation) TheExampleMethodFuncType(fn ExampleFuncType) error { @@ -63,9 +74,7 @@ func Test_Mock_TestData(t *testing.T) { mockedService.TestData().Set("something", 123) assert.Equal(t, 123, mockedService.TestData().Get("something").Data()) - } - } func Test_Mock_On(t *testing.T) { @@ -73,9 +82,36 @@ func Test_Mock_On(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - assert.Equal(t, mockedService.On("TheExampleMethod"), &mockedService.Mock) - assert.Equal(t, "TheExampleMethod", mockedService.onMethodName) + c := mockedService.On("TheExampleMethod") + assert.Equal(t, []*Call{c}, mockedService.ExpectedCalls) + assert.Equal(t, "TheExampleMethod", c.Method) +} +func Test_Mock_Chained_On(t *testing.T) { + // make a test impl object + var mockedService *TestExampleImplementation = new(TestExampleImplementation) + + mockedService. + On("TheExampleMethod", 1, 2, 3). + Return(0). + On("TheExampleMethod3", AnythingOfType("*mock.ExampleType")). + Return(nil) + + expectedCalls := []*Call{ + &Call{ + Parent: &mockedService.Mock, + Method: "TheExampleMethod", + Arguments: []interface{}{1, 2, 3}, + ReturnArguments: []interface{}{0}, + }, + &Call{ + Parent: &mockedService.Mock, + Method: "TheExampleMethod3", + Arguments: []interface{}{AnythingOfType("*mock.ExampleType")}, + ReturnArguments: []interface{}{nil}, + }, + } + assert.Equal(t, expectedCalls, mockedService.ExpectedCalls) } func Test_Mock_On_WithArgs(t *testing.T) { @@ -83,12 +119,11 @@ func Test_Mock_On_WithArgs(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - assert.Equal(t, mockedService.On("TheExampleMethod", 1, 2, 3), &mockedService.Mock) - assert.Equal(t, "TheExampleMethod", mockedService.onMethodName) - assert.Equal(t, 1, mockedService.onMethodArguments[0]) - assert.Equal(t, 2, mockedService.onMethodArguments[1]) - assert.Equal(t, 3, mockedService.onMethodArguments[2]) + c := mockedService.On("TheExampleMethod", 1, 2, 3, 4) + assert.Equal(t, []*Call{c}, mockedService.ExpectedCalls) + assert.Equal(t, "TheExampleMethod", c.Method) + assert.Equal(t, Arguments{1, 2, 3, 4}, c.Arguments) } func Test_Mock_On_WithFuncArg(t *testing.T) { @@ -96,12 +131,85 @@ func Test_Mock_On_WithFuncArg(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - assert.Equal(t, mockedService.On("TheExampleMethodFunc", AnythingOfType("func(string) error")).Return(nil), &mockedService.Mock) - assert.Equal(t, "TheExampleMethodFunc", mockedService.onMethodName) - assert.Equal(t, AnythingOfType("func(string) error"), mockedService.onMethodArguments[0]) + c := mockedService. + On("TheExampleMethodFunc", AnythingOfType("func(string) error")). + Return(nil) + + assert.Equal(t, []*Call{c}, mockedService.ExpectedCalls) + assert.Equal(t, "TheExampleMethodFunc", c.Method) + assert.Equal(t, 1, len(c.Arguments)) + assert.Equal(t, AnythingOfType("func(string) error"), c.Arguments[0]) fn := func(string) error { return nil } - mockedService.TheExampleMethodFunc(fn) + + assert.NotPanics(t, func() { + mockedService.TheExampleMethodFunc(fn) + }) +} + +func Test_Mock_On_WithVariadicFunc(t *testing.T) { + + // make a test impl object + var mockedService *TestExampleImplementation = new(TestExampleImplementation) + + c := mockedService. + On("TheExampleMethodVariadic", []int{1, 2, 3}). + Return(nil) + + assert.Equal(t, []*Call{c}, mockedService.ExpectedCalls) + assert.Equal(t, 1, len(c.Arguments)) + assert.Equal(t, []int{1, 2, 3}, c.Arguments[0]) + + assert.NotPanics(t, func() { + mockedService.TheExampleMethodVariadic(1, 2, 3) + }) + assert.Panics(t, func() { + mockedService.TheExampleMethodVariadic(1, 2) + }) + +} + +func Test_Mock_On_WithVariadicFuncWithInterface(t *testing.T) { + + // make a test impl object + var mockedService *TestExampleImplementation = new(TestExampleImplementation) + + c := mockedService.On("TheExampleMethodVariadicInterface", []interface{}{1, 2, 3}). + Return(nil) + + assert.Equal(t, []*Call{c}, mockedService.ExpectedCalls) + assert.Equal(t, 1, len(c.Arguments)) + assert.Equal(t, []interface{}{1, 2, 3}, c.Arguments[0]) + + assert.NotPanics(t, func() { + mockedService.TheExampleMethodVariadicInterface(1, 2, 3) + }) + assert.Panics(t, func() { + mockedService.TheExampleMethodVariadicInterface(1, 2) + }) + +} + +func Test_Mock_On_WithVariadicFuncWithEmptyInterfaceArray(t *testing.T) { + + // make a test impl object + var mockedService *TestExampleImplementation = new(TestExampleImplementation) + + var expected []interface{} + c := mockedService. + On("TheExampleMethodVariadicInterface", expected). + Return(nil) + + assert.Equal(t, []*Call{c}, mockedService.ExpectedCalls) + assert.Equal(t, 1, len(c.Arguments)) + assert.Equal(t, expected, c.Arguments[0]) + + assert.NotPanics(t, func() { + mockedService.TheExampleMethodVariadicInterface() + }) + assert.Panics(t, func() { + mockedService.TheExampleMethodVariadicInterface(1, 2) + }) } @@ -119,13 +227,18 @@ func Test_Mock_On_WithFuncTypeArg(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - assert.Equal(t, mockedService.On("TheExampleMethodFuncType", AnythingOfType("mock.ExampleFuncType")).Return(nil), &mockedService.Mock) - assert.Equal(t, "TheExampleMethodFuncType", mockedService.onMethodName) - assert.Equal(t, AnythingOfType("mock.ExampleFuncType"), mockedService.onMethodArguments[0]) + c := mockedService. + On("TheExampleMethodFuncType", AnythingOfType("mock.ExampleFuncType")). + Return(nil) + + assert.Equal(t, []*Call{c}, mockedService.ExpectedCalls) + assert.Equal(t, 1, len(c.Arguments)) + assert.Equal(t, AnythingOfType("mock.ExampleFuncType"), c.Arguments[0]) fn := func(string) error { return nil } - mockedService.TheExampleMethodFuncType(fn) - + assert.NotPanics(t, func() { + mockedService.TheExampleMethodFuncType(fn) + }) } func Test_Mock_Return(t *testing.T) { @@ -133,24 +246,23 @@ func Test_Mock_Return(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - assert.Equal(t, mockedService.On("TheExampleMethod", "A", "B", true).Return(1, "two", true), &mockedService.Mock) + c := mockedService. + On("TheExampleMethod", "A", "B", true). + Return(1, "two", true) - // ensure the call was created - if assert.Equal(t, 1, len(mockedService.ExpectedCalls)) { - call := mockedService.ExpectedCalls[0] + require.Equal(t, []*Call{c}, mockedService.ExpectedCalls) - assert.Equal(t, "TheExampleMethod", call.Method) - assert.Equal(t, "A", call.Arguments[0]) - assert.Equal(t, "B", call.Arguments[1]) - assert.Equal(t, true, call.Arguments[2]) - assert.Equal(t, 1, call.ReturnArguments[0]) - assert.Equal(t, "two", call.ReturnArguments[1]) - assert.Equal(t, true, call.ReturnArguments[2]) - assert.Equal(t, 0, call.Repeatability) - assert.Nil(t, call.WaitFor) - - } + call := mockedService.ExpectedCalls[0] + assert.Equal(t, "TheExampleMethod", call.Method) + assert.Equal(t, "A", call.Arguments[0]) + assert.Equal(t, "B", call.Arguments[1]) + assert.Equal(t, true, call.Arguments[2]) + assert.Equal(t, 1, call.ReturnArguments[0]) + assert.Equal(t, "two", call.ReturnArguments[1]) + assert.Equal(t, true, call.ReturnArguments[2]) + assert.Equal(t, 0, call.Repeatability) + assert.Nil(t, call.WaitFor) } func Test_Mock_Return_WaitUntil(t *testing.T) { @@ -159,24 +271,25 @@ func Test_Mock_Return_WaitUntil(t *testing.T) { var mockedService *TestExampleImplementation = new(TestExampleImplementation) ch := time.After(time.Second) - assert.Equal(t, mockedService.Mock.On("TheExampleMethod", "A", "B", true).Return(1, "two", true).WaitUntil(ch), &mockedService.Mock) + c := mockedService.Mock. + On("TheExampleMethod", "A", "B", true). + WaitUntil(ch). + Return(1, "two", true) - // ensure the call was created - if assert.Equal(t, 1, len(mockedService.Mock.ExpectedCalls)) { - call := mockedService.Mock.ExpectedCalls[0] + // assert that the call was created + require.Equal(t, []*Call{c}, mockedService.ExpectedCalls) - assert.Equal(t, "TheExampleMethod", call.Method) - assert.Equal(t, "A", call.Arguments[0]) - assert.Equal(t, "B", call.Arguments[1]) - assert.Equal(t, true, call.Arguments[2]) - assert.Equal(t, 1, call.ReturnArguments[0]) - assert.Equal(t, "two", call.ReturnArguments[1]) - assert.Equal(t, true, call.ReturnArguments[2]) - assert.Equal(t, 0, call.Repeatability) - assert.Equal(t, ch, call.WaitFor) - - } + call := mockedService.ExpectedCalls[0] + assert.Equal(t, "TheExampleMethod", call.Method) + assert.Equal(t, "A", call.Arguments[0]) + assert.Equal(t, "B", call.Arguments[1]) + assert.Equal(t, true, call.Arguments[2]) + assert.Equal(t, 1, call.ReturnArguments[0]) + assert.Equal(t, "two", call.ReturnArguments[1]) + assert.Equal(t, true, call.ReturnArguments[2]) + assert.Equal(t, 0, call.Repeatability) + assert.Equal(t, ch, call.WaitFor) } func Test_Mock_Return_After(t *testing.T) { @@ -184,23 +297,24 @@ func Test_Mock_Return_After(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - assert.Equal(t, mockedService.Mock.On("TheExampleMethod", "A", "B", true).Return(1, "two", true).After(time.Second), &mockedService.Mock) + c := mockedService.Mock. + On("TheExampleMethod", "A", "B", true). + Return(1, "two", true). + After(time.Second) - // ensure the call was created - if assert.Equal(t, 1, len(mockedService.Mock.ExpectedCalls)) { - call := mockedService.Mock.ExpectedCalls[0] + require.Equal(t, []*Call{c}, mockedService.ExpectedCalls) - assert.Equal(t, "TheExampleMethod", call.Method) - assert.Equal(t, "A", call.Arguments[0]) - assert.Equal(t, "B", call.Arguments[1]) - assert.Equal(t, true, call.Arguments[2]) - assert.Equal(t, 1, call.ReturnArguments[0]) - assert.Equal(t, "two", call.ReturnArguments[1]) - assert.Equal(t, true, call.ReturnArguments[2]) - assert.Equal(t, 0, call.Repeatability) - assert.NotEqual(t, nil, call.WaitFor) + call := mockedService.Mock.ExpectedCalls[0] - } + assert.Equal(t, "TheExampleMethod", call.Method) + assert.Equal(t, "A", call.Arguments[0]) + assert.Equal(t, "B", call.Arguments[1]) + assert.Equal(t, true, call.Arguments[2]) + assert.Equal(t, 1, call.ReturnArguments[0]) + assert.Equal(t, "two", call.ReturnArguments[1]) + assert.Equal(t, true, call.ReturnArguments[2]) + assert.Equal(t, 0, call.Repeatability) + assert.NotEqual(t, nil, call.WaitFor) } @@ -209,29 +323,56 @@ func Test_Mock_Return_Run(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - assert.Equal(t, mockedService.Mock.On("TheExampleMethod3", AnythingOfType("*mock.ExampleType")).Return(nil).Run(func(args Arguments) { + fn := func(args Arguments) { arg := args.Get(0).(*ExampleType) arg.ran = true - }), &mockedService.Mock) - - // ensure the call was created - if assert.Equal(t, 1, len(mockedService.Mock.ExpectedCalls)) { - call := mockedService.Mock.ExpectedCalls[0] - - assert.Equal(t, "TheExampleMethod3", call.Method) - assert.Equal(t, AnythingOfType("*mock.ExampleType"), call.Arguments[0]) - assert.Equal(t, nil, call.ReturnArguments[0]) - assert.Equal(t, 0, call.Repeatability) - assert.NotEqual(t, nil, call.WaitFor) - assert.NotNil(t, call.Run) - } + c := mockedService.Mock. + On("TheExampleMethod3", AnythingOfType("*mock.ExampleType")). + Return(nil). + Run(fn) + + require.Equal(t, []*Call{c}, mockedService.ExpectedCalls) + + call := mockedService.Mock.ExpectedCalls[0] + + assert.Equal(t, "TheExampleMethod3", call.Method) + assert.Equal(t, AnythingOfType("*mock.ExampleType"), call.Arguments[0]) + assert.Equal(t, nil, call.ReturnArguments[0]) + assert.Equal(t, 0, call.Repeatability) + assert.NotEqual(t, nil, call.WaitFor) + assert.NotNil(t, call.Run) + et := ExampleType{} assert.Equal(t, false, et.ran) mockedService.TheExampleMethod3(&et) assert.Equal(t, true, et.ran) +} +func Test_Mock_Return_Run_Out_Of_Order(t *testing.T) { + // make a test impl object + var mockedService *TestExampleImplementation = new(TestExampleImplementation) + f := func(args Arguments) { + arg := args.Get(0).(*ExampleType) + arg.ran = true + } + + c := mockedService.Mock. + On("TheExampleMethod3", AnythingOfType("*mock.ExampleType")). + Run(f). + Return(nil) + + require.Equal(t, []*Call{c}, mockedService.ExpectedCalls) + + call := mockedService.Mock.ExpectedCalls[0] + + assert.Equal(t, "TheExampleMethod3", call.Method) + assert.Equal(t, AnythingOfType("*mock.ExampleType"), call.Arguments[0]) + assert.Equal(t, nil, call.ReturnArguments[0]) + assert.Equal(t, 0, call.Repeatability) + assert.NotEqual(t, nil, call.WaitFor) + assert.NotNil(t, call.Run) } func Test_Mock_Return_Once(t *testing.T) { @@ -239,24 +380,23 @@ func Test_Mock_Return_Once(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - mockedService.On("TheExampleMethod", "A", "B", true).Return(1, "two", true).Once() + c := mockedService.On("TheExampleMethod", "A", "B", true). + Return(1, "two", true). + Once() - // ensure the call was created - if assert.Equal(t, 1, len(mockedService.ExpectedCalls)) { - call := mockedService.ExpectedCalls[0] + require.Equal(t, []*Call{c}, mockedService.ExpectedCalls) - assert.Equal(t, "TheExampleMethod", call.Method) - assert.Equal(t, "A", call.Arguments[0]) - assert.Equal(t, "B", call.Arguments[1]) - assert.Equal(t, true, call.Arguments[2]) - assert.Equal(t, 1, call.ReturnArguments[0]) - assert.Equal(t, "two", call.ReturnArguments[1]) - assert.Equal(t, true, call.ReturnArguments[2]) - assert.Equal(t, 1, call.Repeatability) - assert.Nil(t, call.WaitFor) - - } + call := mockedService.ExpectedCalls[0] + assert.Equal(t, "TheExampleMethod", call.Method) + assert.Equal(t, "A", call.Arguments[0]) + assert.Equal(t, "B", call.Arguments[1]) + assert.Equal(t, true, call.Arguments[2]) + assert.Equal(t, 1, call.ReturnArguments[0]) + assert.Equal(t, "two", call.ReturnArguments[1]) + assert.Equal(t, true, call.ReturnArguments[2]) + assert.Equal(t, 1, call.Repeatability) + assert.Nil(t, call.WaitFor) } func Test_Mock_Return_Twice(t *testing.T) { @@ -264,24 +404,24 @@ func Test_Mock_Return_Twice(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - mockedService.On("TheExampleMethod", "A", "B", true).Return(1, "two", true).Twice() + c := mockedService. + On("TheExampleMethod", "A", "B", true). + Return(1, "two", true). + Twice() - // ensure the call was created - if assert.Equal(t, 1, len(mockedService.ExpectedCalls)) { - call := mockedService.ExpectedCalls[0] + require.Equal(t, []*Call{c}, mockedService.ExpectedCalls) - assert.Equal(t, "TheExampleMethod", call.Method) - assert.Equal(t, "A", call.Arguments[0]) - assert.Equal(t, "B", call.Arguments[1]) - assert.Equal(t, true, call.Arguments[2]) - assert.Equal(t, 1, call.ReturnArguments[0]) - assert.Equal(t, "two", call.ReturnArguments[1]) - assert.Equal(t, true, call.ReturnArguments[2]) - assert.Equal(t, 2, call.Repeatability) - assert.Nil(t, call.WaitFor) - - } + call := mockedService.ExpectedCalls[0] + assert.Equal(t, "TheExampleMethod", call.Method) + assert.Equal(t, "A", call.Arguments[0]) + assert.Equal(t, "B", call.Arguments[1]) + assert.Equal(t, true, call.Arguments[2]) + assert.Equal(t, 1, call.ReturnArguments[0]) + assert.Equal(t, "two", call.ReturnArguments[1]) + assert.Equal(t, true, call.ReturnArguments[2]) + assert.Equal(t, 2, call.Repeatability) + assert.Nil(t, call.WaitFor) } func Test_Mock_Return_Times(t *testing.T) { @@ -289,24 +429,24 @@ func Test_Mock_Return_Times(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - mockedService.On("TheExampleMethod", "A", "B", true).Return(1, "two", true).Times(5) + c := mockedService. + On("TheExampleMethod", "A", "B", true). + Return(1, "two", true). + Times(5) - // ensure the call was created - if assert.Equal(t, 1, len(mockedService.ExpectedCalls)) { - call := mockedService.ExpectedCalls[0] + require.Equal(t, []*Call{c}, mockedService.ExpectedCalls) - assert.Equal(t, "TheExampleMethod", call.Method) - assert.Equal(t, "A", call.Arguments[0]) - assert.Equal(t, "B", call.Arguments[1]) - assert.Equal(t, true, call.Arguments[2]) - assert.Equal(t, 1, call.ReturnArguments[0]) - assert.Equal(t, "two", call.ReturnArguments[1]) - assert.Equal(t, true, call.ReturnArguments[2]) - assert.Equal(t, 5, call.Repeatability) - assert.Nil(t, call.WaitFor) - - } + call := mockedService.ExpectedCalls[0] + assert.Equal(t, "TheExampleMethod", call.Method) + assert.Equal(t, "A", call.Arguments[0]) + assert.Equal(t, "B", call.Arguments[1]) + assert.Equal(t, true, call.Arguments[2]) + assert.Equal(t, 1, call.ReturnArguments[0]) + assert.Equal(t, "two", call.ReturnArguments[1]) + assert.Equal(t, true, call.ReturnArguments[2]) + assert.Equal(t, 5, call.Repeatability) + assert.Nil(t, call.WaitFor) } func Test_Mock_Return_Nothing(t *testing.T) { @@ -314,20 +454,19 @@ func Test_Mock_Return_Nothing(t *testing.T) { // make a test impl object var mockedService *TestExampleImplementation = new(TestExampleImplementation) - assert.Equal(t, mockedService.On("TheExampleMethod", "A", "B", true).Return(), &mockedService.Mock) + c := mockedService. + On("TheExampleMethod", "A", "B", true). + Return() - // ensure the call was created - if assert.Equal(t, 1, len(mockedService.ExpectedCalls)) { - call := mockedService.ExpectedCalls[0] + require.Equal(t, []*Call{c}, mockedService.ExpectedCalls) - assert.Equal(t, "TheExampleMethod", call.Method) - assert.Equal(t, "A", call.Arguments[0]) - assert.Equal(t, "B", call.Arguments[1]) - assert.Equal(t, true, call.Arguments[2]) - assert.Equal(t, 0, len(call.ReturnArguments)) - - } + call := mockedService.ExpectedCalls[0] + assert.Equal(t, "TheExampleMethod", call.Method) + assert.Equal(t, "A", call.Arguments[0]) + assert.Equal(t, "B", call.Arguments[1]) + assert.Equal(t, true, call.Arguments[2]) + assert.Equal(t, 0, len(call.ReturnArguments)) } func Test_Mock_findExpectedCall(t *testing.T) { @@ -452,8 +591,13 @@ func Test_Mock_Called_For_Bounded_Repeatability(t *testing.T) { var mockedService *TestExampleImplementation = new(TestExampleImplementation) - mockedService.On("Test_Mock_Called_For_Bounded_Repeatability", 1, 2, 3).Return(5, "6", true).Once() - mockedService.On("Test_Mock_Called_For_Bounded_Repeatability", 1, 2, 3).Return(-1, "hi", false) + mockedService. + On("Test_Mock_Called_For_Bounded_Repeatability", 1, 2, 3). + Return(5, "6", true). + Once() + mockedService. + On("Test_Mock_Called_For_Bounded_Repeatability", 1, 2, 3). + Return(-1, "hi", false) returnArguments1 := mockedService.Called(1, 2, 3) returnArguments2 := mockedService.Called(1, 2, 3) @@ -651,7 +795,9 @@ func Test_Mock_AssertCalled_WithAnythingOfTypeArgument(t *testing.T) { var mockedService *TestExampleImplementation = new(TestExampleImplementation) - mockedService.On("Test_Mock_AssertCalled_WithAnythingOfTypeArgument", Anything, Anything, Anything).Return() + mockedService. + On("Test_Mock_AssertCalled_WithAnythingOfTypeArgument", Anything, Anything, Anything). + Return() mockedService.Called(1, "two", []uint8("three")) diff --git a/Godeps/_workspace/src/code.google.com/p/go.crypto/bcrypt/base64.go b/Godeps/_workspace/src/golang.org/x/crypto/bcrypt/base64.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go.crypto/bcrypt/base64.go rename to Godeps/_workspace/src/golang.org/x/crypto/bcrypt/base64.go diff --git a/Godeps/_workspace/src/code.google.com/p/go.crypto/bcrypt/bcrypt.go b/Godeps/_workspace/src/golang.org/x/crypto/bcrypt/bcrypt.go similarity index 98% rename from Godeps/_workspace/src/code.google.com/p/go.crypto/bcrypt/bcrypt.go rename to Godeps/_workspace/src/golang.org/x/crypto/bcrypt/bcrypt.go index b8e18d744b..aa50fdc61f 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.crypto/bcrypt/bcrypt.go +++ b/Godeps/_workspace/src/golang.org/x/crypto/bcrypt/bcrypt.go @@ -12,7 +12,7 @@ import ( "crypto/subtle" "errors" "fmt" - "golang.org/x/crypto/blowfish" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/crypto/blowfish" "io" "strconv" ) diff --git a/Godeps/_workspace/src/code.google.com/p/go.crypto/bcrypt/bcrypt_test.go b/Godeps/_workspace/src/golang.org/x/crypto/bcrypt/bcrypt_test.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go.crypto/bcrypt/bcrypt_test.go rename to Godeps/_workspace/src/golang.org/x/crypto/bcrypt/bcrypt_test.go diff --git a/Godeps/_workspace/src/golang.org/x/image/font/basicfont/basicfont.go b/Godeps/_workspace/src/golang.org/x/image/font/basicfont/basicfont.go index 7eae19c8bb..8875bd1cc0 100644 --- a/Godeps/_workspace/src/golang.org/x/image/font/basicfont/basicfont.go +++ b/Godeps/_workspace/src/golang.org/x/image/font/basicfont/basicfont.go @@ -10,7 +10,7 @@ package basicfont import ( "image" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // Range maps a contiguous range of runes to vertically adjacent sub-images of diff --git a/Godeps/_workspace/src/golang.org/x/image/font/basicfont/gen.go b/Godeps/_workspace/src/golang.org/x/image/font/basicfont/gen.go index 67a21a74ad..4efb033228 100644 --- a/Godeps/_workspace/src/golang.org/x/image/font/basicfont/gen.go +++ b/Godeps/_workspace/src/golang.org/x/image/font/basicfont/gen.go @@ -18,9 +18,9 @@ import ( "path" "path/filepath" - "golang.org/x/image/font" - "golang.org/x/image/font/plan9font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font/plan9font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) func main() { diff --git a/Godeps/_workspace/src/golang.org/x/image/font/font.go b/Godeps/_workspace/src/golang.org/x/image/font/font.go index de8802fcc5..1eae5c7ab8 100644 --- a/Godeps/_workspace/src/golang.org/x/image/font/font.go +++ b/Godeps/_workspace/src/golang.org/x/image/font/font.go @@ -14,7 +14,7 @@ import ( "image/draw" "io" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // TODO: who is responsible for caches (glyph images, glyph indices, kerns)? diff --git a/Godeps/_workspace/src/golang.org/x/image/font/plan9font/example_test.go b/Godeps/_workspace/src/golang.org/x/image/font/plan9font/example_test.go index c1eacb2306..1114fd7d27 100644 --- a/Godeps/_workspace/src/golang.org/x/image/font/plan9font/example_test.go +++ b/Godeps/_workspace/src/golang.org/x/image/font/plan9font/example_test.go @@ -13,9 +13,9 @@ import ( "path" "path/filepath" - "golang.org/x/image/font" - "golang.org/x/image/font/plan9font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font/plan9font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) func ExampleParseFont() { diff --git a/Godeps/_workspace/src/golang.org/x/image/font/plan9font/plan9font.go b/Godeps/_workspace/src/golang.org/x/image/font/plan9font/plan9font.go index 9c686b7760..705258c3bd 100644 --- a/Godeps/_workspace/src/golang.org/x/image/font/plan9font/plan9font.go +++ b/Godeps/_workspace/src/golang.org/x/image/font/plan9font/plan9font.go @@ -21,8 +21,8 @@ import ( "strconv" "strings" - "golang.org/x/image/font" - "golang.org/x/image/math/fixed" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/font" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/math/fixed" ) // fontchar describes one character glyph in a subfont. diff --git a/Godeps/_workspace/src/golang.org/x/image/tiff/buffer_test.go b/Godeps/_workspace/src/golang.org/x/image/tiff/buffer_test.go new file mode 100644 index 0000000000..e13afb3619 --- /dev/null +++ b/Godeps/_workspace/src/golang.org/x/image/tiff/buffer_test.go @@ -0,0 +1,36 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package tiff + +import ( + "io" + "strings" + "testing" +) + +var readAtTests = []struct { + n int + off int64 + s string + err error +}{ + {2, 0, "ab", nil}, + {6, 0, "abcdef", nil}, + {3, 3, "def", nil}, + {3, 5, "f", io.EOF}, + {3, 6, "", io.EOF}, +} + +func TestReadAt(t *testing.T) { + r := newReaderAt(strings.NewReader("abcdef")) + b := make([]byte, 10) + for _, test := range readAtTests { + n, err := r.ReadAt(b[:test.n], test.off) + s := string(b[:n]) + if s != test.s || err != test.err { + t.Errorf("buffer.ReadAt(<%v bytes>, %v): got %v, %q; want %v, %q", test.n, test.off, err, s, test.err, test.s) + } + } +} diff --git a/Godeps/_workspace/src/golang.org/x/image/tiff/reader.go b/Godeps/_workspace/src/golang.org/x/image/tiff/reader.go index 714e3dda7d..651fa80268 100644 --- a/Godeps/_workspace/src/golang.org/x/image/tiff/reader.go +++ b/Godeps/_workspace/src/golang.org/x/image/tiff/reader.go @@ -17,7 +17,7 @@ import ( "io/ioutil" "math" - "golang.org/x/image/tiff/lzw" + "github.com/mattermost/platform/Godeps/_workspace/src/golang.org/x/image/tiff/lzw" ) // A FormatError reports that the input is not a valid TIFF image. diff --git a/Godeps/_workspace/src/golang.org/x/image/tiff/reader_test.go b/Godeps/_workspace/src/golang.org/x/image/tiff/reader_test.go new file mode 100644 index 0000000000..f5c02e6975 --- /dev/null +++ b/Godeps/_workspace/src/golang.org/x/image/tiff/reader_test.go @@ -0,0 +1,377 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package tiff + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "errors" + "image" + "io/ioutil" + "os" + "strings" + "testing" + + _ "image/png" +) + +const testdataDir = "../testdata/" + +// Read makes *buffer implements io.Reader, so that we can pass one to Decode. +func (*buffer) Read([]byte) (int, error) { + panic("unimplemented") +} + +func load(name string) (image.Image, error) { + f, err := os.Open(testdataDir + name) + if err != nil { + return nil, err + } + defer f.Close() + img, _, err := image.Decode(f) + if err != nil { + return nil, err + } + return img, nil +} + +// TestNoRPS tests decoding an image that has no RowsPerStrip tag. The tag is +// mandatory according to the spec but some software omits it in the case of a +// single strip. +func TestNoRPS(t *testing.T) { + _, err := load("no_rps.tiff") + if err != nil { + t.Fatal(err) + } +} + +// TestNoCompression tests decoding an image that has no Compression tag. This +// tag is mandatory, but most tools interpret a missing value as no +// compression. +func TestNoCompression(t *testing.T) { + _, err := load("no_compress.tiff") + if err != nil { + t.Fatal(err) + } +} + +// TestUnpackBits tests the decoding of PackBits-encoded data. +func TestUnpackBits(t *testing.T) { + var unpackBitsTests = []struct { + compressed string + uncompressed string + }{{ + // Example data from Wikipedia. + "\xfe\xaa\x02\x80\x00\x2a\xfd\xaa\x03\x80\x00\x2a\x22\xf7\xaa", + "\xaa\xaa\xaa\x80\x00\x2a\xaa\xaa\xaa\xaa\x80\x00\x2a\x22\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", + }} + for _, u := range unpackBitsTests { + buf, err := unpackBits(strings.NewReader(u.compressed)) + if err != nil { + t.Fatal(err) + } + if string(buf) != u.uncompressed { + t.Fatalf("unpackBits: want %x, got %x", u.uncompressed, buf) + } + } +} + +func TestShortBlockData(t *testing.T) { + b, err := ioutil.ReadFile("../testdata/bw-uncompressed.tiff") + if err != nil { + t.Fatal(err) + } + // The bw-uncompressed.tiff image is a 153x55 bi-level image. This is 1 bit + // per pixel, or 20 bytes per row, times 55 rows, or 1100 bytes of pixel + // data. 1100 in hex is 0x44c, or "\x4c\x04" in little-endian. We replace + // that byte count (StripByteCounts-tagged data) by something less than + // that, so that there is not enough pixel data. + old := []byte{0x4c, 0x04} + new := []byte{0x01, 0x01} + i := bytes.Index(b, old) + if i < 0 { + t.Fatal(`could not find "\x4c\x04" byte count`) + } + if bytes.Contains(b[i+len(old):], old) { + t.Fatal(`too many occurrences of "\x4c\x04"`) + } + b[i+0] = new[0] + b[i+1] = new[1] + if _, err = Decode(bytes.NewReader(b)); err == nil { + t.Fatal("got nil error, want non-nil") + } +} + +func TestDecodeInvalidDataType(t *testing.T) { + b, err := ioutil.ReadFile("../testdata/bw-uncompressed.tiff") + if err != nil { + t.Fatal(err) + } + + // off is the offset of the ImageWidth tag. It is the offset of the overall + // IFD block (0x00000454), plus 2 for the uint16 number of IFD entries, plus 12 + // to skip the first entry. + const off = 0x00000454 + 2 + 12*1 + + if v := binary.LittleEndian.Uint16(b[off : off+2]); v != tImageWidth { + t.Fatal(`could not find ImageWidth tag`) + } + binary.LittleEndian.PutUint16(b[off+2:], uint16(len(lengths))) // invalid datatype + + if _, err = Decode(bytes.NewReader(b)); err == nil { + t.Fatal("got nil error, want non-nil") + } +} + +func compare(t *testing.T, img0, img1 image.Image) { + b0 := img0.Bounds() + b1 := img1.Bounds() + if b0.Dx() != b1.Dx() || b0.Dy() != b1.Dy() { + t.Fatalf("wrong image size: want %s, got %s", b0, b1) + } + x1 := b1.Min.X - b0.Min.X + y1 := b1.Min.Y - b0.Min.Y + for y := b0.Min.Y; y < b0.Max.Y; y++ { + for x := b0.Min.X; x < b0.Max.X; x++ { + c0 := img0.At(x, y) + c1 := img1.At(x+x1, y+y1) + r0, g0, b0, a0 := c0.RGBA() + r1, g1, b1, a1 := c1.RGBA() + if r0 != r1 || g0 != g1 || b0 != b1 || a0 != a1 { + t.Fatalf("pixel at (%d, %d) has wrong color: want %v, got %v", x, y, c0, c1) + } + } + } +} + +// TestDecode tests that decoding a PNG image and a TIFF image result in the +// same pixel data. +func TestDecode(t *testing.T) { + img0, err := load("video-001.png") + if err != nil { + t.Fatal(err) + } + img1, err := load("video-001.tiff") + if err != nil { + t.Fatal(err) + } + img2, err := load("video-001-strip-64.tiff") + if err != nil { + t.Fatal(err) + } + img3, err := load("video-001-tile-64x64.tiff") + if err != nil { + t.Fatal(err) + } + img4, err := load("video-001-16bit.tiff") + if err != nil { + t.Fatal(err) + } + + compare(t, img0, img1) + compare(t, img0, img2) + compare(t, img0, img3) + compare(t, img0, img4) +} + +// TestDecodeLZW tests that decoding a PNG image and a LZW-compressed TIFF +// image result in the same pixel data. +func TestDecodeLZW(t *testing.T) { + img0, err := load("blue-purple-pink.png") + if err != nil { + t.Fatal(err) + } + img1, err := load("blue-purple-pink.lzwcompressed.tiff") + if err != nil { + t.Fatal(err) + } + + compare(t, img0, img1) +} + +// TestDecompress tests that decoding some TIFF images that use different +// compression formats result in the same pixel data. +func TestDecompress(t *testing.T) { + var decompressTests = []string{ + "bw-uncompressed.tiff", + "bw-deflate.tiff", + "bw-packbits.tiff", + } + var img0 image.Image + for _, name := range decompressTests { + img1, err := load(name) + if err != nil { + t.Fatalf("decoding %s: %v", name, err) + } + if img0 == nil { + img0 = img1 + continue + } + compare(t, img0, img1) + } +} + +func replace(src []byte, find, repl string) ([]byte, error) { + removeSpaces := func(r rune) rune { + if r != ' ' { + return r + } + return -1 + } + + f, err := hex.DecodeString(strings.Map(removeSpaces, find)) + if err != nil { + return nil, err + } + r, err := hex.DecodeString(strings.Map(removeSpaces, repl)) + if err != nil { + return nil, err + } + dst := bytes.Replace(src, f, r, 1) + if bytes.Equal(dst, src) { + return nil, errors.New("replacement failed") + } + return dst, nil +} + +// TestZeroBitsPerSample tests that an IFD with a bitsPerSample of 0 does not +// cause a crash. +// Issue 10711. +func TestZeroBitsPerSample(t *testing.T) { + b0, err := ioutil.ReadFile(testdataDir + "bw-deflate.tiff") + if err != nil { + t.Fatal(err) + } + + // Mutate the loaded image to have the problem. + // 02 01: tag number (tBitsPerSample) + // 03 00: data type (short, or uint16) + // 01 00 00 00: count + // ?? 00 00 00: value (1 -> 0) + b1, err := replace(b0, + "02 01 03 00 01 00 00 00 01 00 00 00", + "02 01 03 00 01 00 00 00 00 00 00 00", + ) + if err != nil { + t.Fatal(err) + } + + _, err = Decode(bytes.NewReader(b1)) + if err == nil { + t.Fatal("Decode with 0 bits per sample: got nil error, want non-nil") + } +} + +// TestTileTooBig tests that we do not panic when a tile is too big compared to +// the data available. +// Issue 10712 +func TestTileTooBig(t *testing.T) { + b0, err := ioutil.ReadFile(testdataDir + "video-001-tile-64x64.tiff") + if err != nil { + t.Fatal(err) + } + + // Mutate the loaded image to have the problem. + // + // 42 01: tag number (tTileWidth) + // 03 00: data type (short, or uint16) + // 01 00 00 00: count + // xx 00 00 00: value (0x40 -> 0x44: a wider tile consumes more data + // than is available) + b1, err := replace(b0, + "42 01 03 00 01 00 00 00 40 00 00 00", + "42 01 03 00 01 00 00 00 44 00 00 00", + ) + if err != nil { + t.Fatal(err) + } + + // Turn off the predictor, which makes it possible to hit the + // place with the defect. Without this patch to the image, we run + // out of data too early, and do not hit the part of the code where + // the original panic was. + // + // 3d 01: tag number (tPredictor) + // 03 00: data type (short, or uint16) + // 01 00 00 00: count + // xx 00 00 00: value (2 -> 1: 2 = horizontal, 1 = none) + b2, err := replace(b1, + "3d 01 03 00 01 00 00 00 02 00 00 00", + "3d 01 03 00 01 00 00 00 01 00 00 00", + ) + if err != nil { + t.Fatal(err) + } + + _, err = Decode(bytes.NewReader(b2)) + if err == nil { + t.Fatal("did not expect nil error") + } +} + +// TestZeroSizedImages tests that decoding does not panic when image dimensions +// are zero, and returns a zero-sized image instead. +// Issue 10393. +func TestZeroSizedImages(t *testing.T) { + testsizes := []struct { + w, h int + }{ + {0, 0}, + {1, 0}, + {0, 1}, + {1, 1}, + } + for _, r := range testsizes { + img := image.NewRGBA(image.Rect(0, 0, r.w, r.h)) + var buf bytes.Buffer + if err := Encode(&buf, img, nil); err != nil { + t.Errorf("encode w=%d h=%d: %v", r.w, r.h, err) + continue + } + if _, err := Decode(&buf); err != nil { + t.Errorf("decode w=%d h=%d: %v", r.w, r.h, err) + } + } +} + +// TestLargeIFDEntry tests that a large IFD entry does not cause Decode to +// panic. +// Issue 10596. +func TestLargeIFDEntry(t *testing.T) { + testdata := "II*\x00\x08\x00\x00\x00\f\x000000000000" + + "00000000000000000000" + + "00000000000000000000" + + "00000000000000000000" + + "00000000000000\x17\x01\x04\x00\x01\x00" + + "\x00\xc0000000000000000000" + + "00000000000000000000" + + "00000000000000000000" + + "000000" + _, err := Decode(strings.NewReader(testdata)) + if err == nil { + t.Fatal("Decode with large IFD entry: got nil error, want non-nil") + } +} + +// benchmarkDecode benchmarks the decoding of an image. +func benchmarkDecode(b *testing.B, filename string) { + b.StopTimer() + contents, err := ioutil.ReadFile(testdataDir + filename) + if err != nil { + b.Fatal(err) + } + r := &buffer{buf: contents} + b.StartTimer() + for i := 0; i < b.N; i++ { + _, err := Decode(r) + if err != nil { + b.Fatal("Decode:", err) + } + } +} + +func BenchmarkDecodeCompressed(b *testing.B) { benchmarkDecode(b, "video-001.tiff") } +func BenchmarkDecodeUncompressed(b *testing.B) { benchmarkDecode(b, "video-001-uncompressed.tiff") } diff --git a/Godeps/_workspace/src/golang.org/x/image/tiff/writer_test.go b/Godeps/_workspace/src/golang.org/x/image/tiff/writer_test.go new file mode 100644 index 0000000000..c8fb7bf37e --- /dev/null +++ b/Godeps/_workspace/src/golang.org/x/image/tiff/writer_test.go @@ -0,0 +1,95 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package tiff + +import ( + "bytes" + "image" + "io/ioutil" + "os" + "testing" +) + +var roundtripTests = []struct { + filename string + opts *Options +}{ + {"video-001.tiff", nil}, + {"video-001-16bit.tiff", nil}, + {"video-001-gray.tiff", nil}, + {"video-001-gray-16bit.tiff", nil}, + {"video-001-paletted.tiff", nil}, + {"bw-packbits.tiff", nil}, + {"video-001.tiff", &Options{Predictor: true}}, + {"video-001.tiff", &Options{Compression: Deflate}}, + {"video-001.tiff", &Options{Predictor: true, Compression: Deflate}}, +} + +func openImage(filename string) (image.Image, error) { + f, err := os.Open(testdataDir + filename) + if err != nil { + return nil, err + } + defer f.Close() + return Decode(f) +} + +func TestRoundtrip(t *testing.T) { + for _, rt := range roundtripTests { + img, err := openImage(rt.filename) + if err != nil { + t.Fatal(err) + } + out := new(bytes.Buffer) + err = Encode(out, img, rt.opts) + if err != nil { + t.Fatal(err) + } + + img2, err := Decode(&buffer{buf: out.Bytes()}) + if err != nil { + t.Fatal(err) + } + compare(t, img, img2) + } +} + +// TestRoundtrip2 tests that encoding and decoding an image whose +// origin is not (0, 0) gives the same thing. +func TestRoundtrip2(t *testing.T) { + m0 := image.NewRGBA(image.Rect(3, 4, 9, 8)) + for i := range m0.Pix { + m0.Pix[i] = byte(i) + } + out := new(bytes.Buffer) + if err := Encode(out, m0, nil); err != nil { + t.Fatal(err) + } + m1, err := Decode(&buffer{buf: out.Bytes()}) + if err != nil { + t.Fatal(err) + } + compare(t, m0, m1) +} + +func benchmarkEncode(b *testing.B, name string, pixelSize int) { + img, err := openImage(name) + if err != nil { + b.Fatal(err) + } + s := img.Bounds().Size() + b.SetBytes(int64(s.X * s.Y * pixelSize)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + Encode(ioutil.Discard, img, nil) + } +} + +func BenchmarkEncode(b *testing.B) { benchmarkEncode(b, "video-001.tiff", 4) } +func BenchmarkEncodePaletted(b *testing.B) { benchmarkEncode(b, "video-001-paletted.tiff", 1) } +func BenchmarkEncodeGray(b *testing.B) { benchmarkEncode(b, "video-001-gray.tiff", 1) } +func BenchmarkEncodeGray16(b *testing.B) { benchmarkEncode(b, "video-001-gray-16bit.tiff", 2) } +func BenchmarkEncodeRGBA(b *testing.B) { benchmarkEncode(b, "video-001.tiff", 4) } +func BenchmarkEncodeRGBA64(b *testing.B) { benchmarkEncode(b, "video-001-16bit.tiff", 8) } diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/.travis.yml b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/.travis.yml index 67467e1407..1b5151f123 100644 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/.travis.yml +++ b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/.travis.yml @@ -2,10 +2,15 @@ sudo: false language: go go: - - 1.4.1 + - 1.5.1 before_script: - - FIXED=$(go fmt ./... | wc -l); if [ $FIXED -gt 0 ]; then echo "gofmt - $FIXED file(s) not formatted correctly, please run gofmt to fix this." && exit 1; fi + - go get -u github.com/golang/lint/golint + +after_script: + - test -z "$(gofmt -s -l -w . | tee /dev/stderr)" + - test -z "$(golint ./... | tee /dev/stderr)" + - go vet ./... os: - linux diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/AUTHORS b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/AUTHORS index 4e0e8284e9..763b853c37 100644 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/AUTHORS +++ b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/AUTHORS @@ -11,18 +11,22 @@ Adrien Bustany Caleb Spare Case Nelson -Chris Howey +Chris Howey Christoffer Buchholz +Daniel Wagner-Hall Dave Cheney +Evan Phoenix Francisco Souza Hari haran John C Barstow Kelvin Fo +Ken-ichirou MATSUZAWA Matt Layher Nathan Youngman Paul Hammond Pieter Droogendijk Pursuit92 +Riku Voipio Rob Figueiredo Soge Zhang Tilak Sharma @@ -32,3 +36,4 @@ Yukang bronze1man debrando henrikedwards +铁哥 diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/CHANGELOG.md b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/CHANGELOG.md index ea9428a2a4..4e6672702f 100644 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/CHANGELOG.md +++ b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## v1.2.5 / 2015-10-17 + +* inotify: use epoll_create1 for arm64 support (requires Linux 2.6.27 or later) [#100](https://github.com/go-fsnotify/fsnotify/pull/100) (thanks @suihkulokki) +* inotify: fix path leaks [#73](https://github.com/go-fsnotify/fsnotify/pull/73) (thanks @chamaken) +* kqueue: watch for rename events on subdirectories [#83](https://github.com/go-fsnotify/fsnotify/pull/83) (thanks @guotie) +* kqueue: avoid infinite loops from symlinks cycles [#101](https://github.com/go-fsnotify/fsnotify/pull/101) (thanks @illicitonion) + +## v1.2.1 / 2015-10-14 + +* kqueue: don't watch named pipes [#98](https://github.com/go-fsnotify/fsnotify/pull/98) (thanks @evanphx) + ## v1.2.0 / 2015-02-08 * inotify: use epoll to wake up readEvents [#66](https://github.com/go-fsnotify/fsnotify/pull/66) (thanks @PieterD) diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/NotUsed.xcworkspace b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/NotUsed.xcworkspace deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/README.md b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/README.md index 7a0b247364..f2b432e96a 100644 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/README.md +++ b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/README.md @@ -1,6 +1,6 @@ # File system notifications for Go -[![Coverage](http://gocover.io/_badge/github.com/go-fsnotify/fsnotify)](http://gocover.io/github.com/go-fsnotify/fsnotify) [![GoDoc](https://godoc.org/gopkg.in/fsnotify.v1?status.svg)](https://godoc.org/gopkg.in/fsnotify.v1) +[![GoDoc](https://godoc.org/gopkg.in/fsnotify.v1?status.svg)](https://godoc.org/gopkg.in/fsnotify.v1) [![Coverage](http://gocover.io/_badge/github.com/go-fsnotify/fsnotify)](http://gocover.io/github.com/go-fsnotify/fsnotify) Go 1.3+ required. @@ -8,8 +8,8 @@ Cross platform: Windows, Linux, BSD and OS X. |Adapter |OS |Status | |----------|----------|----------| -|inotify |Linux, Android\*|Supported [![Build Status](https://travis-ci.org/go-fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/go-fsnotify/fsnotify)| -|kqueue |BSD, OS X, iOS\*|Supported [![Circle CI](https://circleci.com/gh/go-fsnotify/fsnotify.svg?style=svg)](https://circleci.com/gh/go-fsnotify/fsnotify)| +|inotify |Linux 2.6.27 or later, Android\*|Supported [![Build Status](https://travis-ci.org/go-fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/go-fsnotify/fsnotify)| +|kqueue |BSD, OS X, iOS\*|Supported [![Build Status](https://travis-ci.org/go-fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/go-fsnotify/fsnotify)| |ReadDirectoryChangesW|Windows|Supported [![Build status](https://ci.appveyor.com/api/projects/status/ivwjubaih4r0udeh/branch/master?svg=true)](https://ci.appveyor.com/project/NathanYoungman/fsnotify/branch/master)| |FSEvents |OS X |[Planned](https://github.com/go-fsnotify/fsnotify/issues/11)| |FEN |Solaris 11 |[Planned](https://github.com/go-fsnotify/fsnotify/issues/12)| @@ -55,5 +55,10 @@ Please refer to [CONTRIBUTING][] before opening an issue or pull request. See [example_test.go](https://github.com/go-fsnotify/fsnotify/blob/master/example_test.go). - [contributing]: https://github.com/go-fsnotify/fsnotify/blob/master/CONTRIBUTING.md + +## Related Projects + +* [notify](https://github.com/rjeczalik/notify) +* [fsevents](https://github.com/go-fsnotify/fsevents) + diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/circle.yml b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/circle.yml deleted file mode 100644 index 204217fb0b..0000000000 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/circle.yml +++ /dev/null @@ -1,26 +0,0 @@ -## OS X build (CircleCI iOS beta) - -# Pretend like it's an Xcode project, at least to get it running. -machine: - environment: - XCODE_WORKSPACE: NotUsed.xcworkspace - XCODE_SCHEME: NotUsed - # This is where the go project is actually checked out to: - CIRCLE_BUILD_DIR: $HOME/.go_project/src/github.com/go-fsnotify/fsnotify - -dependencies: - pre: - - brew upgrade go - -test: - override: - - go test ./... - -# Idealized future config, eventually with cross-platform build matrix :-) - -# machine: -# go: -# version: 1.4 -# os: -# - osx -# - linux diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify.go b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify.go index d7759ec8c8..06f4bba88e 100644 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify.go +++ b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify.go @@ -23,6 +23,7 @@ type Watcher struct { Events chan Event Errors chan error mu sync.Mutex // Map access + cv *sync.Cond // sync removing on rm_watch with IN_IGNORE fd int poller *fdPoller watches map[string]*watch // Map of inotify watches (key: path) @@ -54,6 +55,7 @@ func NewWatcher() (*Watcher, error) { done: make(chan struct{}), doneResp: make(chan struct{}), } + w.cv = sync.NewCond(&w.mu) go w.readEvents() return w, nil @@ -134,8 +136,10 @@ func (w *Watcher) Remove(name string) error { } // inotify_rm_watch will return EINVAL if the file has been deleted; // the inotify will already have been removed. - // That means we can safely delete it from our watches, whatever inotify_rm_watch does. - delete(w.watches, name) + // watches and pathes are deleted in ignoreLinux() implicitly and asynchronously + // by calling inotify_rm_watch() below. e.g. readEvents() goroutine receives IN_IGNORE + // so that EINVAL means that the wd is being rm_watch()ed or its file removed + // by another thread and we have not received IN_IGNORE event. success, errno := syscall.InotifyRmWatch(w.fd, watch.wd) if success == -1 { // TODO: Perhaps it's not helpful to return an error here in every case. @@ -146,6 +150,14 @@ func (w *Watcher) Remove(name string) error { // explicitly by inotify_rm_watch, implicitly when the file they are watching is deleted. return errno } + + // wait until ignoreLinux() deleting maps + exists := true + for exists { + w.cv.Wait() + _, exists = w.watches[name] + } + return nil } @@ -249,7 +261,7 @@ func (w *Watcher) readEvents() { event := newEvent(name, mask) // Send the events that are not ignored on the events channel - if !event.ignoreLinux(mask) { + if !event.ignoreLinux(w, raw.Wd, mask) { select { case w.Events <- event: case <-w.done: @@ -266,9 +278,15 @@ func (w *Watcher) readEvents() { // Certain types of events can be "ignored" and not sent over the Events // channel. Such as events marked ignore by the kernel, or MODIFY events // against files that do not exist. -func (e *Event) ignoreLinux(mask uint32) bool { +func (e *Event) ignoreLinux(w *Watcher, wd int32, mask uint32) bool { // Ignore anything the inotify API says to ignore if mask&syscall.IN_IGNORED == syscall.IN_IGNORED { + w.mu.Lock() + defer w.mu.Unlock() + name := w.paths[int(wd)] + delete(w.paths, int(wd)) + delete(w.watches, name) + w.cv.Broadcast() return true } diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify_poller.go b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify_poller.go index 3b41784041..23a5ca1460 100644 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify_poller.go +++ b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify_poller.go @@ -39,7 +39,7 @@ func newFdPoller(fd int) (*fdPoller, error) { poller.fd = fd // Create epoll fd - poller.epfd, errno = syscall.EpollCreate(1) + poller.epfd, errno = syscall.EpollCreate1(0) if poller.epfd == -1 { return nil, errno } diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify_test.go b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify_test.go index 035ee8f95d..4b5c4b1849 100644 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify_test.go +++ b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/inotify_test.go @@ -7,6 +7,7 @@ package fsnotify import ( + "fmt" "os" "path/filepath" "syscall" @@ -281,12 +282,60 @@ func TestInotifyRemoveTwice(t *testing.T) { } err = w.Remove(testFile) - if err != syscall.EINVAL { - t.Fatalf("Expected EINVAL from Remove, got: %v", err) + if err == nil { + t.Fatalf("no error on removing invalid file") } + s1 := fmt.Sprintf("%s", err) err = w.Remove(testFile) - if err == syscall.EINVAL { - t.Fatalf("Got EINVAL again, watch was not removed") + if err == nil { + t.Fatalf("no error on removing invalid file") + } + s2 := fmt.Sprintf("%s", err) + + if s1 != s2 { + t.Fatalf("receive different error - %s / %s", s1, s2) + } +} + +func TestInotifyInnerMapLength(t *testing.T) { + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + testFile := filepath.Join(testDir, "testfile") + + handle, err := os.Create(testFile) + if err != nil { + t.Fatalf("Create failed: %v", err) + } + handle.Close() + + w, err := NewWatcher() + if err != nil { + t.Fatalf("Failed to create watcher: %v", err) + } + defer w.Close() + + err = w.Add(testFile) + if err != nil { + t.Fatalf("Failed to add testFile: %v", err) + } + go func() { + for err := range w.Errors { + t.Fatalf("error received: %s", err) + } + }() + + err = os.Remove(testFile) + if err != nil { + t.Fatalf("Failed to remove testFile: %v", err) + } + _ = <-w.Events // consume Remove event + <-time.After(50 * time.Millisecond) // wait IN_IGNORE propagated + + if len(w.watches) != 0 { + t.Fatalf("Expected watches len is 0, but got: %d, %v", len(w.watches), w.watches) + } + if len(w.paths) != 0 { + t.Fatalf("Expected paths len is 0, but got: %d, %v", len(w.paths), w.paths) } } diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/integration_test.go b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/integration_test.go index 59169c6afa..49e48ff1ca 100644 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/integration_test.go +++ b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/integration_test.go @@ -10,6 +10,7 @@ import ( "io/ioutil" "os" "os/exec" + "path" "path/filepath" "runtime" "sync/atomic" @@ -1065,6 +1066,53 @@ func TestFsnotifyFakeSymlink(t *testing.T) { watcher.Close() } +func TestCyclicSymlink(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("symlinks don't work on Windows.") + } + + watcher := newWatcher(t) + + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + link := path.Join(testDir, "link") + if err := os.Symlink(".", link); err != nil { + t.Fatalf("could not make symlink: %v", err) + } + addWatch(t, watcher, testDir) + + var createEventsReceived counter + go func() { + for ev := range watcher.Events { + if ev.Op&Create == Create { + createEventsReceived.increment() + } + } + }() + + if err := os.Remove(link); err != nil { + t.Fatalf("Error removing link: %v", err) + } + + // It would be nice to be able to expect a delete event here, but kqueue has + // no way for us to get events on symlinks themselves, because opening them + // opens an fd to the file to which they point. + + if err := ioutil.WriteFile(link, []byte("foo"), 0700); err != nil { + t.Fatalf("could not make symlink: %v", err) + } + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + + if got := createEventsReceived.value(); got == 0 { + t.Errorf("want at least 1 create event got %v", got) + } + + watcher.Close() +} + // TestConcurrentRemovalOfWatch tests that concurrent calls to RemoveWatch do not race. // See https://codereview.appspot.com/103300045/ // go test -test.run=TestConcurrentRemovalOfWatch -test.cpu=1,1,1,1,1 -race diff --git a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/kqueue.go b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/kqueue.go index 265622d201..9662a50a84 100644 --- a/Godeps/_workspace/src/gopkg.in/fsnotify.v1/kqueue.go +++ b/Godeps/_workspace/src/gopkg.in/fsnotify.v1/kqueue.go @@ -94,7 +94,8 @@ func (w *Watcher) Add(name string) error { w.mu.Lock() w.externalWatches[name] = true w.mu.Unlock() - return w.addWatch(name, noteAllEvents) + _, err := w.addWatch(name, noteAllEvents) + return err } // Remove stops watching the the named file or directory (non-recursively). @@ -153,7 +154,8 @@ var keventWaitTime = durationToTimespec(100 * time.Millisecond) // addWatch adds name to the watched file set. // The flags are interpreted as described in kevent(2). -func (w *Watcher) addWatch(name string, flags uint32) error { +// Returns the real path to the file which was added, if any, which may be different from the one passed in the case of symlinks. +func (w *Watcher) addWatch(name string, flags uint32) (string, error) { var isDir bool // Make ./name and name equivalent name = filepath.Clean(name) @@ -161,7 +163,7 @@ func (w *Watcher) addWatch(name string, flags uint32) error { w.mu.Lock() if w.isClosed { w.mu.Unlock() - return errors.New("kevent instance already closed") + return "", errors.New("kevent instance already closed") } watchfd, alreadyWatching := w.watches[name] // We already have a watch, but we can still override flags. @@ -173,12 +175,17 @@ func (w *Watcher) addWatch(name string, flags uint32) error { if !alreadyWatching { fi, err := os.Lstat(name) if err != nil { - return err + return "", err } // Don't watch sockets. if fi.Mode()&os.ModeSocket == os.ModeSocket { - return nil + return "", nil + } + + // Don't watch named pipes. + if fi.Mode()&os.ModeNamedPipe == os.ModeNamedPipe { + return "", nil } // Follow Symlinks @@ -190,18 +197,26 @@ func (w *Watcher) addWatch(name string, flags uint32) error { if fi.Mode()&os.ModeSymlink == os.ModeSymlink { name, err = filepath.EvalSymlinks(name) if err != nil { - return nil + return "", nil + } + + w.mu.Lock() + _, alreadyWatching = w.watches[name] + w.mu.Unlock() + + if alreadyWatching { + return name, nil } fi, err = os.Lstat(name) if err != nil { - return nil + return "", nil } } watchfd, err = syscall.Open(name, openMode, 0700) if watchfd == -1 { - return err + return "", err } isDir = fi.IsDir() @@ -210,7 +225,7 @@ func (w *Watcher) addWatch(name string, flags uint32) error { const registerAdd = syscall.EV_ADD | syscall.EV_CLEAR | syscall.EV_ENABLE if err := register(w.kq, []int{watchfd}, registerAdd, flags); err != nil { syscall.Close(watchfd) - return err + return "", err } if !alreadyWatching { @@ -224,6 +239,7 @@ func (w *Watcher) addWatch(name string, flags uint32) error { // Watch the directory if it has not been watched before, // or if it was watched before, but perhaps only a NOTE_DELETE (watchDirectoryFiles) w.mu.Lock() + watchDir := (flags&syscall.NOTE_WRITE) == syscall.NOTE_WRITE && (!alreadyWatching || (w.dirFlags[name]&syscall.NOTE_WRITE) != syscall.NOTE_WRITE) // Store flags so this watch can be updated later @@ -232,11 +248,11 @@ func (w *Watcher) addWatch(name string, flags uint32) error { if watchDir { if err := w.watchDirectoryFiles(name); err != nil { - return err + return "", err } } } - return nil + return name, nil } // readEvents reads from kqueue and converts the received kevents into @@ -359,7 +375,8 @@ func (w *Watcher) watchDirectoryFiles(dirPath string) error { for _, fileInfo := range files { filePath := filepath.Join(dirPath, fileInfo.Name()) - if err := w.internalWatch(filePath, fileInfo); err != nil { + filePath, err = w.internalWatch(filePath, fileInfo) + if err != nil { return err } @@ -394,7 +411,8 @@ func (w *Watcher) sendDirectoryChangeEvents(dirPath string) { } // like watchDirectoryFiles (but without doing another ReadDir) - if err := w.internalWatch(filePath, fileInfo); err != nil { + filePath, err = w.internalWatch(filePath, fileInfo) + if err != nil { return } @@ -404,7 +422,7 @@ func (w *Watcher) sendDirectoryChangeEvents(dirPath string) { } } -func (w *Watcher) internalWatch(name string, fileInfo os.FileInfo) error { +func (w *Watcher) internalWatch(name string, fileInfo os.FileInfo) (string, error) { if fileInfo.IsDir() { // mimic Linux providing delete events for subdirectories // but preserve the flags used if currently watching subdirectory @@ -412,7 +430,7 @@ func (w *Watcher) internalWatch(name string, fileInfo os.FileInfo) error { flags := w.dirFlags[name] w.mu.Unlock() - flags |= syscall.NOTE_DELETE + flags |= syscall.NOTE_DELETE | syscall.NOTE_RENAME return w.addWatch(name, flags) } diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/.gitignore b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/.gitignore similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/.gitignore rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/.gitignore diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/.travis.yml b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/.travis.yml similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/.travis.yml rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/.travis.yml diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/LICENSE b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/LICENSE similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/LICENSE rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/LICENSE diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/README.md b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/README.md similarity index 90% rename from Godeps/_workspace/src/github.com/throttled/throttled/README.md rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/README.md index 0954c808a1..fbb4a01fc9 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/README.md +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/README.md @@ -1,13 +1,15 @@ -# Throttled [![build status](https://secure.travis-ci.org/throttled/throttled.png)](http://travis-ci.org/throttled/throttled) [![GoDoc](https://godoc.org/github.com/throttled/throttled?status.png)](http://godoc.org/github.com/throttled/throttled) +# Throttled [![build status](https://secure.travis-ci.org/throttled/throttled.png)](http://travis-ci.org/throttled/throttled) [![GoDoc](https://godoc.org/gopkg.in/throttled/throttled.v1?status.png)](http://godoc.org/gopkg.in/throttled/throttled.v1) Package throttled implements different throttling strategies for controlling access to HTTP handlers. -*As of July 27, 2015, the package is now located under its own GitHub organization, please adjust your imports to `github.com/throttled/throttled`.* +*As of July 27, 2015, the package is now located under its own GitHub + organization and uses gopkg.in for versioning, please adjust your + imports to `gopkg.in/throttled/throttled.v1`.* ## Installation -`go get github.com/throttled/throttled/...` +`go get gopkg.in/throttled/throttled.v1/...` ## Interval @@ -75,6 +77,6 @@ Finally, many examples are provided in the /examples sub-folder of the repositor The [BSD 3-clause license][bsd]. Copyright (c) 2014 Martin Angers and Contributors. -[doc]: http://godoc.org/github.com/throttled/throttled +[doc]: http://godoc.org/gopkg.in/throttled/throttled.v1 [blog]: http://0value.com/throttled--guardian-of-the-web-server [bsd]: http://opensource.org/licenses/BSD-3-Clause diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/common_test.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/common_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/common_test.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/common_test.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/delayer.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/delayer.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/delayer.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/delayer.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/delayer_test.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/delayer_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/delayer_test.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/delayer_test.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/doc.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/doc.go similarity index 96% rename from Godeps/_workspace/src/github.com/throttled/throttled/doc.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/doc.go index a83b0aca42..acf5213b0f 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/doc.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/doc.go @@ -3,7 +3,7 @@ // // Installation // -// go get github.com/throttled/throttled/... +// go get gopkg.in/throttled/throttled.v1/... // // Inverval // @@ -62,7 +62,7 @@ // Documentation // // The API documentation is available as usual on godoc.org: -// http://godoc.org/github.com/throttled/throttled +// http://godoc.org/gopkg.in/throttled/throttled.v1 // // There is also a blog post explaining the package's usage on 0value.com: // http://0value.com/throttled--guardian-of-the-web-server diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/examples/README.md b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/README.md similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/examples/README.md rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/README.md diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/examples/custom/main.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/custom/main.go similarity index 96% rename from Godeps/_workspace/src/github.com/throttled/throttled/examples/custom/main.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/custom/main.go index 4a3fe119c2..128e08b81c 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/examples/custom/main.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/custom/main.go @@ -9,7 +9,7 @@ import ( "sync" "time" - "github.com/throttled/throttled" + "github.com/mattermost/platform/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1" ) var ( diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/examples/interval-many/main.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval-many/main.go similarity index 95% rename from Godeps/_workspace/src/github.com/throttled/throttled/examples/interval-many/main.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval-many/main.go index d0add9fb26..03fcfce80b 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/examples/interval-many/main.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval-many/main.go @@ -9,7 +9,7 @@ import ( "sync" "time" - "github.com/throttled/throttled" + "github.com/mattermost/platform/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1" ) var ( diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/examples/interval-vary/main.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval-vary/main.go similarity index 95% rename from Godeps/_workspace/src/github.com/throttled/throttled/examples/interval-vary/main.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval-vary/main.go index 439d4ad8b4..f84e1e41f4 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/examples/interval-vary/main.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval-vary/main.go @@ -9,7 +9,7 @@ import ( "sync" "time" - "github.com/throttled/throttled" + "github.com/mattermost/platform/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1" ) var ( diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/examples/interval-vary/siege-urls b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval-vary/siege-urls similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/examples/interval-vary/siege-urls rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval-vary/siege-urls diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/examples/interval/main.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval/main.go similarity index 94% rename from Godeps/_workspace/src/github.com/throttled/throttled/examples/interval/main.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval/main.go index 7c6473346d..f890678168 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/examples/interval/main.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/interval/main.go @@ -9,7 +9,7 @@ import ( "sync" "time" - "github.com/throttled/throttled" + "github.com/mattermost/platform/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1" ) var ( diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/examples/memstats/main.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/memstats/main.go similarity index 96% rename from Godeps/_workspace/src/github.com/throttled/throttled/examples/memstats/main.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/memstats/main.go index 719fea01b5..823de9b251 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/examples/memstats/main.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/memstats/main.go @@ -11,7 +11,7 @@ import ( "sync" "time" - "github.com/throttled/throttled" + "github.com/mattermost/platform/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1" ) var ( diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/examples/memstats/test-file b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/memstats/test-file similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/examples/memstats/test-file rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/memstats/test-file diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/examples/rate-limit/main.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/rate-limit/main.go similarity index 89% rename from Godeps/_workspace/src/github.com/throttled/throttled/examples/rate-limit/main.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/rate-limit/main.go index b7b31529aa..1e4c1cb8f3 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/examples/rate-limit/main.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/examples/rate-limit/main.go @@ -9,9 +9,9 @@ import ( "sync" "time" - "github.com/garyburd/redigo/redis" - "github.com/throttled/throttled" - "github.com/throttled/throttled/store" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1" + "github.com/mattermost/platform/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store" ) var ( diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/interval.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/interval.go similarity index 98% rename from Godeps/_workspace/src/github.com/throttled/throttled/interval.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/interval.go index 628a5593e8..ab4d452513 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/interval.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/interval.go @@ -5,7 +5,7 @@ import ( "sync" "time" - "github.com/golang/groupcache/lru" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/groupcache/lru" ) // Static check to ensure that the interval limiters implement the Limiter interface. diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/interval_test.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/interval_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/interval_test.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/interval_test.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/memstats.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/memstats.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/memstats.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/memstats.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/memstats_test.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/memstats_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/memstats_test.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/memstats_test.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/misc/pre-commit b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/misc/pre-commit similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/misc/pre-commit rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/misc/pre-commit diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/rate.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/rate.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/rate.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/rate.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/rate_test.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/rate_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/rate_test.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/rate_test.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/store.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/store.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/store/doc.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/doc.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/store/doc.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/doc.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/store/mem.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/mem.go similarity index 92% rename from Godeps/_workspace/src/github.com/throttled/throttled/store/mem.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/mem.go index e220dfe81d..74d48a73ee 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/store/mem.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/mem.go @@ -4,8 +4,8 @@ import ( "sync" "time" - "github.com/golang/groupcache/lru" - "github.com/throttled/throttled" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/golang/groupcache/lru" + "github.com/mattermost/platform/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1" ) // memStore implements an in-memory Store. diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/store/mem_test.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/mem_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/store/mem_test.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/mem_test.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/store/redis.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/redis.go similarity index 92% rename from Godeps/_workspace/src/github.com/throttled/throttled/store/redis.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/redis.go index 6347eb6fcd..44ef431228 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/store/redis.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/redis.go @@ -3,8 +3,8 @@ package store import ( "time" - "github.com/garyburd/redigo/redis" - "github.com/throttled/throttled" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1" ) // redisStore implements a Redis-based store. diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/store/redis_test.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/redis_test.go similarity index 94% rename from Godeps/_workspace/src/github.com/throttled/throttled/store/redis_test.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/redis_test.go index a282d6d251..d7d1d17439 100644 --- a/Godeps/_workspace/src/github.com/throttled/throttled/store/redis_test.go +++ b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/store/redis_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/garyburd/redigo/redis" + "github.com/mattermost/platform/Godeps/_workspace/src/github.com/garyburd/redigo/redis" ) func getPool() *redis.Pool { diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/throttler.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/throttler.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/throttler.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/throttler.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/varyby.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/varyby.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/varyby.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/varyby.go diff --git a/Godeps/_workspace/src/github.com/throttled/throttled/varyby_test.go b/Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/varyby_test.go similarity index 100% rename from Godeps/_workspace/src/github.com/throttled/throttled/varyby_test.go rename to Godeps/_workspace/src/gopkg.in/throttled/throttled.v1/varyby_test.go

    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�M4W zaPKExxcAW)Zk2APJ(4z2o8KOJEVy51q;Rm0 z{Z!sWbjH1Rd9agKi5u%~!L1VYU}L|E_mjH+e!?PuA0+~Oh#2&T*g=1Y75+X1gx&@(WFl_Ag(4vD^J=z1scvzx*#XIujEB0003YT>t<8002S&3&Vo|00000004df z00030|Ns9%sY$-6?!n4PJ-V-!-WVH=l`CEV00000000000001ZoMT`BgCGdSPzS_2 zf!Nxnq{J;huSB6ZEw3ajwWv5VKhIVvrozAghz+5%fs#T=iBDz{T;52}M9Gc|0N?c# E^%+k|ZU6uP diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxirr.ttf.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxirr.ttf.i deleted file mode 100644 index f69ff25c8eee878aeb36274d4b84ccae9f5a619b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42583 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 GYW^QQu{tFH diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxirr.ttx.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxirr.ttx.i deleted file mode 100644 index 69c7d205589ee1c80678bf26d1336f8db147462c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91046 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 diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxisr-12pt-sans-hinting.txt.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxisr-12pt-sans-hinting.txt.i deleted file mode 100644 index 8233fd6bf93898186ae746c21f48f4dea382c4a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44295 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 C>CJrr diff --git a/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxisr-12pt-with-hinting.txt.i b/Godeps/_workspace/src/code.google.com/p/freetype-go/.hg/store/data/testdata/luxisr-12pt-with-hinting.txt.i deleted file mode 100644 index 882e45367721be0bf8fdbf4e3712072a6ddbeb74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40027 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