From bbe4536903ae5629ea5584c0d462030fd6b3e0e2 Mon Sep 17 00:00:00 2001 From: vivek thampi Date: Fri, 1 May 2009 01:31:03 -0700 Subject: [PATCH] Initial commit --- CHANGES | 63 + INSTALL | 234 +++ LICENSE | 22 + Makefile.am | 29 + Makefile.win32 | 11 + README | 1 + autogen.sh | 4 + configure.ac | 44 + docs/Makefile.am | 2 + docs/index.html | 84 + docs/ss.jpg | Bin 0 -> 31396 bytes docs/style.css | 67 + docs/udis86.odt | Bin 0 -> 71745 bytes docs/udis86.pdf | Bin 0 -> 196844 bytes docs/x86optable.xml | 3184 ++++++++++++++++++++++++++++++++ docs/x86optable.xsl | 63 + libudis86/Makefile.am | 33 + libudis86/Makefile.win32 | 43 + libudis86/decode.c | 1221 +++++++++++++ libudis86/decode.h | 186 ++ libudis86/extern.h | 88 + libudis86/input.c | 256 +++ libudis86/input.h | 67 + libudis86/opgen.py | 638 +++++++ libudis86/syn-att.c | 228 +++ libudis86/syn-intel.c | 225 +++ libudis86/syn.c | 79 + libudis86/syn.h | 51 + libudis86/types.h | 234 +++ libudis86/udis86.c | 175 ++ tests/Makefile.am | 66 + tests/Makefile.win32 | 35 + tests/bufovrrun.c | 17 + tests/gen.c | 54 + tests/randtest.raw | Bin 0 -> 7780 bytes tests/randtest16.ref | 3725 ++++++++++++++++++++++++++++++++++++++ tests/randtest32.ref | 3075 +++++++++++++++++++++++++++++++ tests/randtest64.ref | 2882 +++++++++++++++++++++++++++++ tests/test16.asm | 2 + tests/test32.asm | 280 +++ tests/test64.asm | 154 ++ tests/testjmp.asm | 17 + tests/testjmp.ref | 15 + tests/testobscure.asm | 12 + tests/testobscure.ref | 10 + udcli/Makefile.am | 4 + udcli/Makefile.win32 | 21 + udcli/udcli.c | 271 +++ udis86.h | 33 + 49 files changed, 18005 insertions(+) create mode 100644 CHANGES create mode 100644 INSTALL create mode 100644 LICENSE create mode 100644 Makefile.am create mode 100644 Makefile.win32 create mode 100644 README create mode 100755 autogen.sh create mode 100644 configure.ac create mode 100644 docs/Makefile.am create mode 100644 docs/index.html create mode 100644 docs/ss.jpg create mode 100644 docs/style.css create mode 100644 docs/udis86.odt create mode 100644 docs/udis86.pdf create mode 100644 docs/x86optable.xml create mode 100644 docs/x86optable.xsl create mode 100644 libudis86/Makefile.am create mode 100644 libudis86/Makefile.win32 create mode 100644 libudis86/decode.c create mode 100644 libudis86/decode.h create mode 100644 libudis86/extern.h create mode 100644 libudis86/input.c create mode 100644 libudis86/input.h create mode 100644 libudis86/opgen.py create mode 100644 libudis86/syn-att.c create mode 100644 libudis86/syn-intel.c create mode 100644 libudis86/syn.c create mode 100644 libudis86/syn.h create mode 100644 libudis86/types.h create mode 100644 libudis86/udis86.c create mode 100644 tests/Makefile.am create mode 100644 tests/Makefile.win32 create mode 100644 tests/bufovrrun.c create mode 100644 tests/gen.c create mode 100644 tests/randtest.raw create mode 100644 tests/randtest16.ref create mode 100644 tests/randtest32.ref create mode 100644 tests/randtest64.ref create mode 100644 tests/test16.asm create mode 100644 tests/test32.asm create mode 100644 tests/test64.asm create mode 100644 tests/testjmp.asm create mode 100644 tests/testjmp.ref create mode 100644 tests/testobscure.asm create mode 100644 tests/testobscure.ref create mode 100644 udcli/Makefile.am create mode 100644 udcli/Makefile.win32 create mode 100644 udcli/udcli.c create mode 100644 udis86.h diff --git a/CHANGES b/CHANGES new file mode 100644 index 0000000..fe42b00 --- /dev/null +++ b/CHANGES @@ -0,0 +1,63 @@ + + * [Apr/22/09] + + Apply patches from folks at Ksplice. + Thank You Tim Abbott and Anders Kaseorg! + + - Add prototypes for ud_set_user_opaque_data/ud_get_user_opaque_data. + - Remove autogenerated files from version control. + - autogen.sh wraps autoreconf. + - opgen.py takes path to optable. + - Use packing in instruction tables. + - Add support for setting the vendor to UD_VENDOR_ANY. + - Support for build as part of linux kernel. + - Support for 3 byte opcodes. + - Fix/Add instructions. + + * [May/03/08] Fix: Makefile for HP-UX build. + Checked build on HP-UX, Solaris, FreeBSD, MacOS, Linux. + Potentially broken win32 build (need help.) + * [Apr/29/08] Fix: operand size cast for rcl, ror, etc. (Thanks to Hans) + Fix: support for implicit operands and segment + overrides (Thanks to Hans) + * [Mar/27/08] Add: new XML based optable generator. + Add: new build system based on libtool. + * [Dec/01/07] Fix: documentation buf: prefix fields + Fix: bufoverrun.c to include the right header. + * [Aug/05/07] Patch for DJGPP (Thanks to Robert Riebisch) + Removed "test" Target in tot Makefile (Thanks to Robert Riebisch) + New target:tests. + Misc. clean up top-of-tree Makefile. + Use config.h for package version + Review/cleanup FP Opcode map. + * [Dec/18/06] Fixed: Printf warnings. + Fixed: set_input_buffered to set_input_buffer in documentation. + Added support for INTEL VMX instructions. + API addition: ud_set_vendor(): UD_VENDOR_{INTEL, AMD}. + Fixed: Handling of invalid combination of bytes. No more + input re-syncing. + Added Makefiles for win32 build. (Thanks to Xi Hang). + Added Makefile.standalone for "Standalone Udis86". + Fixed: u->inp_end initialization bug. + Fixed: swapgs only in 64bit mode. + * [Oct/27/06] 0xF1 is now int1. + Fixed: cast prefix for Group1_op80/82/C0/D0 instructions. + Fixed: lmsw + Added support for Udis86 Standalone. + * [Sep/18/06] Fixed: Missing support for o32 for in/out instructions. + * [Jul/26/06] Fixed: Missing REX.W in Group1_op83 instructions. + * [Jul/16/06] Fixed: rex.b on [rip+disp] + * [Jul/15/06] Fixed: Wrongly printing "loopnz" as "loopn" (Thanks to Sanjay Patel) + Fixed: Wrongly decoding "out Ib, AL" (Thanks to Sanjay Patel) + * [Jun/8/06] Missing instructions added. (As per AMD64 Manual Vol3 Rev 3.11 + Dec 2005) + Fixed minor decoder issues. (Thanks to Sanjay Patel) + Fixed issues with input stream buffer. (Thanks to Sanjay Patel) + * [May/18/06] Fixed issues with handling of 64-bit values. + Fixed bug in syntax generation for immediate operands in branch + instructions. + Fixed decoding of (G, W) operands. + * [May/12/06] Added support for data types in MS VC++. + * [May/11/06] Fixed portability issues concerning inp_uintXX functions in + input.c and 64-bit casting in syn-intel/syn-att.c (Thanks to + Sanjay Patel) diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..5458714 --- /dev/null +++ b/INSTALL @@ -0,0 +1,234 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006 Free Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5d7bf4d --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..a61ee8e --- /dev/null +++ b/Makefile.am @@ -0,0 +1,29 @@ +ACLOCAL_AMFLAGS = -I build/m4 + +SUBDIRS = libudis86 . udcli . tests . docs + +GENERATED = autom4te.cache \ + aclocal.m4 \ + configure \ + build \ + *.in \ + libudis86/*.in \ + udcli/*.in \ + tests/*.in \ + docs/*.in + +include_ladir = ${includedir} +include_la_HEADERS = udis86.h + +.PHONY: libudis86 udcli tests + +libudis86: + $(MAKE) -C $@ + +udcli: libudis86 + $(MAKE) -C $@ + +tests: check + +maintainer-clean-local: + rm -rf $(GENERATED) diff --git a/Makefile.win32 b/Makefile.win32 new file mode 100644 index 0000000..0371698 --- /dev/null +++ b/Makefile.win32 @@ -0,0 +1,11 @@ +# Makefile +# udis86 - udis86 disassembler for x86(x86-64) +# + +all: + cd libudis86 && $(MAKE) -f Makefile.win32 + cd udcli && $(MAKE) -f Makefile.win32 +clean: + cd libudis86 && $(MAKE) clean -f Makefile.win32 + cd udcli && $(MAKE) clean -f Makefile.win32 + diff --git a/README b/README new file mode 100644 index 0000000..70757cb --- /dev/null +++ b/README @@ -0,0 +1 @@ +See docs/udis86.pdf diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..3cb9607 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,4 @@ +#!/bin/bash +# +if [ ! -e build/m4 ]; then mkdir -p build/m4; fi +autoreconf --force -v --install || ( echo "autogen: autoreconf -i failed." && false ) diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..2625270 --- /dev/null +++ b/configure.ac @@ -0,0 +1,44 @@ +# +# +AC_PREREQ(2.59) +AC_INIT([udis86], [1.7], [vivek@sig9.com]) +AC_CONFIG_AUX_DIR(build) +AC_CONFIG_MACRO_DIR([build/m4]) +AM_MAINTAINER_MODE + +# Determine the build host; we notify automake of Windows builds, so it can +# pass proper parameters for building DLLs to the linker. +AC_CANONICAL_HOST +case "$host_os" in + mingw32*) + TARGET_OS=windows + AC_LIBTOOL_WIN32_DLL + ;; +esac + +# Initialize the automake subsystem. +# In case we have a Windows build, we pass a TARGET_WINDOWS conditional to +# automake. +AM_INIT_AUTOMAKE([-Wall -Werror foreign]) +AM_CONDITIONAL(TARGET_WINDOWS, test "$TARGET_OS" = windows) + +AC_PROG_CC +AC_DISABLE_SHARED +AC_PROG_LIBTOOL +AM_PROG_CC_C_O + +# If this is a gnu compiler, pass -Wall +if test "$ac_cv_c_compiler_gnu" = "yes"; then + CFLAGS="$CFLAGS -Wall" +fi + +AC_CONFIG_HEADERS(config.h) +AC_CONFIG_FILES([ + Makefile + libudis86/Makefile + udcli/Makefile + tests/Makefile + docs/Makefile +]) + +AC_OUTPUT diff --git a/docs/Makefile.am b/docs/Makefile.am new file mode 100644 index 0000000..4bd9354 --- /dev/null +++ b/docs/Makefile.am @@ -0,0 +1,2 @@ +docdir = ${datadir}/docs +dist_doc_DATA = udis86.odt udis86.pdf index.html style.css ss.jpg x86optable.xml x86optable.xsl diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..bfa41d5 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,84 @@ + + +Udis86 - Disassembler Library for x86 and AMD64 (x86-64) + + + +

Udis86 - Disassembler Library for x86 and AMD64

+ +
+ +
+ +
+ + Documentation · + XML Optable · + Help! · + Author · + Changes · + SF Project Page + +
+ + +

Udis86 is an easy-to-use minimalistic disassembler library (libudis86) +for the x86 and AMD64 (x86-64) range of instruction set architectures. The primary +intent of the design and development of udis86 is to aid software development +projects that entail binary code analysis.

+ +
+ Latest Release: udis86-1.7.tar.gz +
+ +

libudis86

+
    +
  1. Full support for the x86 and x86-64 (AMD64) range of instruction set + architectures.
  2. +
  3. Full support for all AMD-V, INTEL-VMX, MMX, SSE, SSE2, SSE3, FPU(x87), and + AMD 3Dnow! instructions.
  4. +
  5. Supports 16bit, 32bit, and 64bit disassembly modes.
  6. +
  7. Supports instruction meta-data using XML based decode tables.
  8. +
  9. Generates output in AT&T or INTEL assembler language syntaxes.
  10. +
  11. Supports flexbile input methods: File, Buffer, and Hooks.
  12. +
  13. Thread-safe and Reentrant.
  14. +
  15. Clean and very easy-to-use API.
  16. +
+ +

udcli

+ + A front-end incarnation of this library, udcli is a small command-line tool + for your quick disassembly needs. +
+
+ +
+ + +

Help Needed

+ + I am looking for developers who can help me with udis86 in the following + areas, + +
    +
  • Maintenance of the build system (especially for Windows)
  • +
  • Maintenance of the x86optable (adding new instructions, meta-data, etc.)
  • +
  • Testing udis86
  • +
  • Writing extensions for dynamic languages.
  • +
+ + If you are interested, let me know at vivekATsig9DOTcom. + + +

Author

+ +

Udis86 is a creation of Vivek Mohan. +You can reach me at vivek[at]sig9[dot]com. Please let me know if you are +using udis86, have ideas for it, or would like to comment on it.

+ + +
© 2006, 2007, 2008 Vivek Mohan
+
+
+ + diff --git a/docs/ss.jpg b/docs/ss.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b7274cc288f8fe06d40b07125887b630d8d86ca GIT binary patch literal 31396 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 N6w-AwCU~0vKLDONs3ZUY literal 0 HcmV?d00001 diff --git a/docs/style.css b/docs/style.css new file mode 100644 index 0000000..83f172c --- /dev/null +++ b/docs/style.css @@ -0,0 +1,67 @@ +body { + font: 76%, sans-serif; + background-color: #fff; + margin: 0; + padding: 0; +} + +#topbar { + margin-top: 0px; + padding: 1em; + background-color: skyblue; + color: navy; +} + +#topbar h1 { + padding: 0; + margin: 0; + font: 2em, sans-serif; + font-weight: bold; +} + +#wrapper { + width: 750px; +} + +#menu { +} +#content a { + text-decoration: none; + color: navy; +// border-bottom: 1px solid; +} + +#content { + margin-left: 40px; + font-size: 1.1em; + line-height: 1.4em; + padding: 1em; + vertical-align: top; + border-left: 1px solid skyblue; + border-right: 1px solid skyblue; +} + +.box { + background-color: #efefef; + border: 1px dotted #aaa; + padding: .5em; +} + +li { + margin-bottom: .5em; +} + +pre { + padding: .5em; + background-color: #f5f5f5; + font-size: 1.1em; + border: 1px solid #999; +} + +code { + font-size: 1.2em; +} + +ul { + margin: 1em; +} diff --git a/docs/udis86.odt b/docs/udis86.odt new file mode 100644 index 0000000000000000000000000000000000000000..3e8a05bb4194ede6952a3f52569352af0831d00c GIT binary patch literal 71745 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%0AZhgS6L ze5^_35W_e-lSGR6DLqvu8)wk5qJA_KK&Bumc?qN}3<-fE5D-};1TK$MfP!Tqa!Ozn z91fRNB5C2jcL5zM*3I40)%{opP;m$X3gG2c)K&ug2T)4~2pTAyg<@9#0G(U_08mQ< z1QY-W00;mulQlU200000000000000C0001UWps3DZfA2Ycx`O8SzB}3IuL$8zaryz z0^|;p&@rU+(9pmDY3B4z*bDeX)_Np4z`yTGhD-vcB^W)C*wWs#`+d9e?UzN&PhLT) z2*sUOJ*{{rAOZ{{F}?GiM(xs#_oeaAElws;0QC@qGzOtd3bdvr>V&onRnK1Ed8rh2 zWGYg1!D3K#9n>)avEEjHzq)RfWlt775-)e&OzWgxF3;!l)A{)+%4xY;tJTW(?Rsf| zViHaFRh6xNuL=?06qyZ~F;>}GrE*cu{`XE+Mt%rQV;zUJ`;FU`g6yXhX^2g1PF9bN zX?Gr}tiMJue~X%zx9{VgpS0eWz($yO>oRF!L^RvtAvtqLUg=jjk2r0>+HDh85YD2*okpmN6L(3En z)6o%4iE{-%Foa#wCycAT#g}51lp+zr0>bTBP^?rZm2D*tb`^=Kz+y%>QEQBI?Y^qs)M|$b z|AiQjNYrM!%}^d5W+SxC0*x|XY_)Qr;Eoyshd@Kvmh|9&a?W}9zBYHgUX^?P0^*ka z*(iIEN~Ve1K0`}>81|WDBSyI}Ojuyx;OJo4CzR0xFw_g15Of$?ew5!!wE_DsY2g1w zz(e(z#$%9waHfE^E;TPtNyu~__^)%ZK%l>F>+k#W0=KJZ1d{p?dHu3dL%9lCbbANrFqtE+?OdG6U zHJ-a2E-3srgvF{fw9T%6S<|HQ6^1Vtcl}$kjN#rVjgMEOpFiww$dW#k?&+O6TVMC@ z&W>d5sgwFns%&L+`)qwAge^K^GVi_W2TyH*x6E#ISuXTWb@umT|5wj5*z@W@O}7^F z9D9Zx88%@ipLW=$yp`wIUVK)pwM8I!l?IDtQ)}HcotK+s9e1jos&(i|0hknjGCagQLM(p}k+iH#zf+%M9a5VmpPm zu>ZFWwVI{ldvnEekMnf~6OHaoIS>~!O*2t)?!Q^FcU8V|ojS|f^wT3bN_g9m665FB z#LpNr9T4LEef@~dN1hP1u;V)?U~ z2fG_})XlY%94n;{=uhw{J|6GZ=YQ|et>`PCu7&UWwC?@<-us}E&&;oT@d4lkJdU#X zN-}D;;8HC=cb>Vn3tKBT3iCUf@$ltvwlYu1RCDkxgOr@di}`!wB5(PK7ZpV zpD@jDw*(gpTk`$5UB~W*NODx!qL)O`R$_Ie$(0Zd|BGYSL?aRM65K|8Dj1? z`R;hMR?d0xD@Xlsl#}1yqg{<#y|@<4P_MsOy0K97cURMgsWn6`k> z!?~HVze=Xc1^Kh7Cx;mAc(cIu{Pamy8|+p-cKCL^?qRdszj;b0oZfKPO+VcD$@kQs zn@QGv^%I($_5}TTQt^KF+;jJuKR>DQ-czus-D*!EVXeV6IK#}eT|&99ID2A!BmLr%#FEnD zq{Je9m^mCkyFj*sv@${UgIs_Btw1KaIf=>1sX3`YWAlsjlS_+=QuDy63}z@uGt5w! zL7@Ag5a14wiEe0GPJUuZD#B?X)##?6dQk`%l<1}uaP|oCV?D-9OQ&e*@eZFlKlJ}LZ-;WeFS2Bz+y^fZen_B zvA$DgNp506F-8!b^gMiMNfiSF2IP zkhK7)GdVx61TFc&G$P+r2fW+?2^^Y-d;>7LQ;{z`L(Pe5D-gHZq3c4vLjpBXh_AwZ zH5$4p$Sqt{Q+{p1WlBmKx+%!D1!`a~;$cK-8>8z)E}=lR2?ER!WW-*#1bDNufs_dW O;YnZ>l_U&IcnkoN9`3RL literal 0 HcmV?d00001 diff --git a/docs/udis86.pdf b/docs/udis86.pdf new file mode 100644 index 0000000000000000000000000000000000000000..25d51c6c93b0ff6e7d1fef05220188521768d9fc GIT binary patch literal 196844 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

FWOkzP$TOmKqUp{=pv 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%0A^TA6qk7a(I z;WN^-=1i!!8N;7p{(L5#Rgn91ww@`j`g*OqHSKAW2`QOMF+nIJowz^hACA^HvU(5u z9ac*Y+i9fa8Pg=^@NJ#-}0=*(@psuYuGUJS*q;$+8jWoHxX#I6#tznbpDsDbk1A1iPG02Q4 zy;+f*FC0aY``-9??NCo&{k(aeOn2Y6zxdg2Huul`R?lS@eMDa>7QaTFuirKJqptS; z_KU?}8)Cs%&fDvYEvV@@6)Nfq$kRoTr!(n)Z?AF3;$=`3pf+`*kga`ro{9%%zp0vb ztEc*_t=&~qul8LN-OzQ*R6S6WPb3J(e6?t_#Rt}lFty37o9k(zJ~AO>7G#qATEZSD|g!p91C z2-N0NijHPCRIYqVvo!`7Rth!Og!w{der9=QO=e@}?Tk8`p_yMMI7z<%SxP*>Reme4 zMW%KaVm39?bwNzJ<#6e^P+uwO>nurHf;8@S%4%a! zS}P4pn#+eDnd~>9oGT>||g&pGvpkXfV_&{NN2w&)J zmrRaK38TqoJVD>Xw#5#`B#tYIxJnQS)FsEhm1!h^hh>NTe*lMBqNA%yP;wK1LeVL{ zushq{o{cql&Hh`KUB9fYrK|Ra2OmA{(0|Qe-&$MC;^m3zsw%7hg5%a)+1wPNQyyA- z*7yIkjCN@=ZWnE^5pqY^i?xzH!`k~u&4S%dIYGF9OwX%4pUyFYw0F{R{Jo&k`Wt2t;V?T zj>ef+r1(J~7p$9r)PGh$j>$6tFb!J~R9`pGnygVd5P-b?$q*vf{QqgOR(dsvE_17BvtCriT&TW0|{ z*{(l&6xn%fWRW(+aCyn-H&R?P4kB4RKnHR;}gK!B8N? zseLL>jQII*jC!@zG0YJ~Q8s>*j2K1@l@ALnJ7AYW1XvX`8EacGs)$-ycFZ@yJ7G%k z<2}nCxTdeCyL%3^)eC)ncb+}#JGGu8);s_4#FI}K4^8{-jTdq=Ix_Wbl$k{n51oAD z^d79;vUJjjXRrU?;BA(>8KF1tLay&y(o`#4WFlgcH*XD~-C}QvoGz}mUngE`-)VcE z{yOqksz<`FRfxE)?X+ENv3A(BlCC_{)Pfwvulaop>th_vd_E_>5*u*WB<>ff#F$4h zt}N?pn_jAtK%ns1os#P)|L|+Brj9D0pTlmqm1zT$$0Ultm7Fk1FkPF_h}~vmo5-)k zW+Y;>gQN)2*?f6j-iur~n^ns~#mp2Q5#JF%5jD&Te%3zR*le*E>{r+~+Mlt1Y%ke0 zSv$2q8&W16H8u;xf%TP#5mi(n_iFZNlx0hLVAiC(Pzq2H0}KR_V=l~6#+T(d1M@hN z#^{w@yNYK=O0R8|ojQhYAQhgiu`rpXD4WLWD2>u`I(*rei*l=IU6#=Swf7ZruHNEF z|5ZGBmMe!HP8RvaR7MU-1#*O;H6$Lk@*l(UCJCi`sroc!CQL^xa49(EM$ImdEt z8Gn*}v14g$LHrH-?;T%opIN`OA9Q?KbtrBN(QKl?<>K?Xd3Nw|T$^C?2_aMExo=8J zFLv13-bBRHp&UZZ4(&v3XFGcsMKQ{%Aj%4wteVV&sE~v_-&qboBBLlancKrm^9riW za~09TFa{QIRR>d3m4<>N@mmF^&RM`*0%8?|v1b@fhXA|9$j#*R#L&MJo!Uy?u~ zC31G14s0S#tDM4XvpQ@@+#)PH_bjOevmtFZd%P-(^{JekHN@6>w%Z&DC$SMk*6qWX zk9|NF$YaeVzm7}9<5=?+8D{h`;v_tMY`ZPgA}=*_XtW)W^%y<0Q^cy>!^k$>&CSM& zpEqpzSfNPw_`vvp*Tb?eE5Mvgm&^vYx+ZDUI?#^geNY@jq~(;`as|nCG}Ue=lCC;0 zlLl%=8e36A-pLSMMa&JbB%@tSaY#CVZ+3>jVKl+uQ5&{UBv>KqRn#0aRCTcC;%OAh z7SwG#fS{aX^V9~#w47Fs?W#!kD8c93MpOAmpiFvQCOo8b>R?Cme%mQ|`41M8w zo4T5<`2XV10Q7mn$_H%xikA3-7mi3ewgM%ks>id9`ItMvZKkPoy3Gc-}0cuw`{web$gQW=$b$$QH7P93f|@YQVf$ zT#^~co@rhsuF9O59W(FBK1*Np|0ekB>~mdj(l`8n2)@5xausK+x>RO0(3TMf_2=L>WOD<0?(r6g3|c9VjPrVgHi$Gs4S5i3>qSAE18iMXkn>=7RgyH@7ju55fKnlY|fb?oY+cJ zI@}|`Zpf0z*bOu67FB2fa%TBQtQ8U4v-skax3-GyIODA?V%hm)w`B_?v6}*As7zW? zBu8tFoMR5#PO06^xss}%`B%o8j}1h{c}LRVLz?=Q0p9UZ^h*WOX+`!lfF zPP(}GROggJ-_QFB4pZitCo?8Tp$~z@t`6?Z;;G2WW$9n3cCJ|DI#R5i?mz;{Ra`qJ ze?kmJs;%x1K5$#BBS_Y5V+WZTOps9yEEgD=V3juAZ@WM6Q0Sq|>w*2Dzu7*>XjcZ# z3|(uxHgJ9D`i#2IHY?B@nvq!@I6d@m;Qo-dD&Pq%4e-Aszq9Tq`>pQ>{~1(ktt*4; z$U5t_L98up)fmVs|H|MczHj^22Coj@>AS`MknbnKUA}F>=Y4yE7KBKw`QYN<>Aur~ z*ZVYLFdWPU7X}A|YlEAD8isdm?QLe2WbSCTO$#mva+`wtf*jj5I{$b!C;mgpjU+W2 zLhP9W7C;ad2Tp?RJ&bS-gRQn9K)(#?T4|K`aPl6h#%Sc0Rl@;PFAK;eYjbj&TXqGO zHc(}aPege+V>IXT=8X~xPe4XlH&yfZAk+8SKy`H>;0XlF9`6xv_-kx!q-+8ab9FLD z=P)x7Qc2H{1yPmoO=p++Lq=MG25r`3ZoO3}$y1+<9=@{fc4!iZgy0BT37^mgfhF&4~m$T50AN?q5KSCfgm^lbVNJ= ztVB%7YsPe97c-TuY@I<&0X%jpAl!LZdEyVzD(jw5@zbG!toR(`x}l0C9jr(Td9^Z` z*@M=%b!ddxxonFinc|w^QOGV_Gc4KB zhz+BNup-I|++$dla2dA63>tYW#I|sc;jO4E!tH;l`(dHUncuqz`U(M78z$5t39ORF z&5oZp1oWT5rQZl%Hd(16!W7YE$DCZqtyV>DMY-Q87)FrACpQ!yn-1d$3v4a?<h@$!y$362b=Ae|RmXk#9Yd|l7;A~;RaZ586P+>0^a-pb_mbRq-}?XBcQ&0C ztDLbnVapQfvzWUJ+?I2U+FAE8<~_ReRFwcDrb;Q4!Etiu(b>f@)_La(+t_T8FSb_t zuJpvjovK7}6=H`mOs&jNZH5wq*CKe#W3*w*!)%D;<bCCmR;!#vJJ{y(QeiKS1h8E8ykkq>AS1sj8)_CE8L*7E*u0cHcy9>$#J z@bWaBpQh<_okPlC)vT2^F&xm;>4)<)9~KNI^yAWP;pGv^k|-sXm=VEjto6AuZi!@* z^CN?rkS50>plyX63Uy-U9E*V}Ih;V9hA=6JNiPJMGba{A*+?lT9`ui=5GNTrZyc*X z$?gs`$S6)?kIIY~xrS^}YNuQunOn&~32VFf_X9tZ^{M`6c73k7TY5L9GaB~xa*iP_1_gFa#> z1D^EOB|~AAF02X$X`K#5NF52%q_#F#1|`{A7qb^%EQyI4gE3*OjS4k}c$64TSYRGj zS>-X<-zZ@D@X4c0$-rlZv1?^SL7WWEO#GkLz68Fh>&p8rvUY2?EXmex z$%`yYvMqy+LC+foJ0OSMq{MDwl915Ykaf}yxD6qlCMj;FAqkxp(rHOZJH^Ne0g?{1 znWoLw&}M_QgXm0#ENu!+frbF$`=9$HV?ySe`Tf4naPGbDzN>rQyYHU6ob6VYJ5{9nEZe@WIE5%(=!yBKOY0U*=BL zRM%5)5bvPy+?Ms@<6l|xt#4s`TMJsh540ZPj!W|nn_suRU2(Yb1Isbnv5F5W&)Uug zwQ8FtC^T7CnygsmJ4xUnAC{2B9cih728u< z3N#eZ`XPfg3NEri2#aH}s@q^;^!PMLhJ+mB^;j;LXU%T@@mucRtn$DS5U3<@a zzvI0=&>vL1vx*P$^fw~Kv^uq+s6;$z;7vMjiPvYU@#$hEF`uvIcj4dFFzPd(_noUS z!o*6~Si>j)2_MlSyK*2=CRvI4ii7GY)A%JTThb}IoCF=7x!R3tyOpTVs#1gcignoC zdf|d^DKu?|A*~S(U@I%|u3E6>7E3O#DQy}s4TI5}H61ryFsb*GFgh}K6C*RCERyoc z#AafQenw@cKTVPtID@7}BGF4o%n__KSb~<2m#Z`&s4#=T!p12CCev4SjZR;q1ASHN zy+Iy+G%ukqpWjyED*=7^ZMa)vpS(MTzVZ_5ARCvtWFvjt(t^>*R3|iwnZdad#@X4A zE_g3@jIVmLZ%Z$uub@m`-}-)$`RsE z{C6bn9?KrvGiARlQ$PlNRGM4vX&e$(+kUBhTY1QK$oZb~ecSuazY3?6f3=*med0Y6 zG&U)_m4aoJZI$Cj*Nxumg5MUlddGr4_WmIFsZ-}x6^S})g@!Dis?Wt9Ym#61OtWML5oLbWu#OoR-Jps_s{pO{poy9^>j~F?xjtqbBFoV!N31a z! zW}ygkUyi?&6DQyP9K{)!-Bd_j-HjE}yoCsoEeNn2t5{j(cXO7ZXahGCt*tdV;!t?* za|}909ZHANIHb`CLuxG-iJ!vS{6k4k`muuFm4qlCJzyz3ZJ0{#)aOj3B0Fr_YT9Yq zZ&GkjpW1JF4Le$RTIKm&g<&2&;aymW<<`Vx5+928daIG3T|H}$S-D1FU~`xj?Z)2prF_19cC zk8h49FnbE?22K1g=r1+WmBzgYgACQ_2l|n*L=}Yx~ zOTyA_+2h^g|CRSw{xg+l5;{|vH{>geg*NL?de8bltvnk!89kNIRnpi_TGnixRXK{` z9#^AMF%k|bSY0N?+(DVp-LPX46-7#7*A~`QP;#@ChAlR`E9SP>8ms+56?d1wD`S4Q z&S(hV0qsp;X$C%r=(_~9TQxg1`!%m=6y!+ls7563>}l9qyBhi|gWy5D08>&d$GpC@ zZ@@R~8}SwG_whbw{oLydL;m?=D?q_{EjR3FFgat;Z-r(DQ$EUz?efaVPrGRR=ZIb@ z2KmXp{c7qwfto8(C zq3U2!RR!*apmD&~UO-V;T*1DqAQ#4}ywEk^h;-^?Fm(Iq);-0kmE;y*f#D*7BvV{+ch1=H{;1zJ1Nw zAO4W|gK$=@_%Y~yI`=2Znbp8emt9$@6hYHkL6+>p&=R`1Z%^9z$!xAzJf660I+tbo z*jcIzU!Jz{^8O1RYoNe?u^Nu7>zJWvzU)(;xzjl~Ki?r4`BQEzy{oIL%x068>~5A~ z@s!r^Bj_0D4;ohs=ci0VJU*J>y)XoDHmBu}4^S-5ob>|I&O%d{)ngb5n8Wyo%TtI#=~GL$D8+ zr5Kx&vC{1ghvt0e_T2isxffZ5@wcRXk>s-6=#)Hp0gQQh6yKs3-$I1vis$!|4#R}5 zcormM2c!}t`ZPQVFolAP1zX9b11OV}+J%dU@J;;)ipit;3c28=#DtWP7D!CGlzG-I zHZ-RotmMj-#ZX~=7P&S!4_cbx?}V=}EWb)he73l4&?efP?&UvV#D;YhjIBuk37L3m z4Q5C5ZDMhtlk+9PcZ!{DLnl{TH6$v4v zNxp5~+5NVWSHUR~T4u6^bZDWhk>63jMuU`>GY1 z;2~{9p;S2C`*4;j6b6`HBw7Zo1+Od6G+9CJKv;W036gEiNu_KJHJP=*6M@zEC1Zk^ zJoQ-aYHBQDcnbYfo1Om&wb;42ljKgc-G%=2DB3Jh^t$vIXI)~w#(JA|)cTFmjnQ93 zUyQwO{axvAqlXj!W&I#wd@?p}-BZtX@#3`$&36x-pZ3?XPZw$N`_*3A+;NRj} zTW~B0^AtsVq5me^#>9)kU&UYdpYm%s|95QP2|N=27u&wz-uP=aHFzjTAq*f^N~Q-k zEG(ic$#KQJM%&_rNsEy)B)nXC0v^Jxr>!a|IUSgYbTpE((?s6_iVtLZlPtS4O_y_} zriIA>v}Aq$HeaWIe!R~=5Z_d`seF@rlV_7xXOr;rGFv%3ZCRwL6IYvKQlE`j_+$eO zpGIWa#&i=%*PCRE;IZail#F79t1XyBU3AGntbKS+F6cTnp> z>Wa9!Y@NU)TY>guwvMl>ix1nkf`uS%vyUS>YFBveo9sKmP*9M{mt+qo?UDunTOPaA zoV1TRlXknUjh>OTy#;I}z1A%nW@b(%nJ_aa6J};+W@g4oCd>>IW@ct)rb&ls!i+EZ z&e3`2f4aJQy3%c_m%O)^%XZbWRb5@)&Mv>4D3B7EhSfTkZWWFqIi5@}C7Whq#o}># z!z0fFjDSU`YsC*)1|dYl7mYiE{}t0BMn-(xRpfk%E7p%@E|t5KUH{v(zMG#U1!n!O zuY(unJZkZswS&1Ur~4-?R7UOdBk@u?8z8SZm*AV+Jw#>bl3u2%{C$yNCT+3zEv&KE zUZ~F8i40{_Js(m{AJU7`?P<4!Z29yqp`)sMpwJb+FpE&2>xeap3h+ALyHKWBtqzk` zkA^E{));`Z55!qS>wPDJ=u8GwpaFOI>4LRX zYq3%tKV9<$mKgp>R=Vf$=bg?fR76AY<$CAB?sxb{Fla*zBmwz(c^YiEnR%e`OU|D)UD=Ooq=zM5&Sb zv=M;=W9<2bz5M3zh@Pms+-BqSH)X1Ck4V^?5(QRa4oKB--!-Z~K_(&8Bo-e44WR~A z&A9>s>8MUZPh>elXKP`J%Q0o0AnV&hEshA3gyBJJp`<7#BKjsSk3?iL0|pMPC@Cwy zowuD|$i?QW1V7pDtRW&m3V!SGq4)m0ENbprz)yA}3pOMDi-Fa>{Ra@e2+E|{r8pid z0d-o6d!kqCFayP>aR9LKZ>GbJK zi>4g^m-Ze5Ux#xsmXwk5_?w$99Lj{&OZt6;(RxRdN1zd`n{hS9ZtZ}l!QRRsyq%qQ zyD>2CkSAu=hkR`HZe$azQ z-_$NUqwwcm$~hcpx^Xa9ExlazZ2c|D2W@uTEk<3V@2zOlMZuS!KL ze32Uf!=ziWM-R=W8QR(Ja@u)%%I3koXme*bSeDuReN0Nc;!pOtUT(tusGW%Qh6tS83RJTnUZ@%t#>bM!DVE5Duk zm{tVbj>cuy$FWh`DcZ^|;mG@N3HxaSjtBW%B!E`2m0UAnPvtLNchgXHi%_|x8W}FG zP#y~H6mGBdrE{rH8F}X}=;cBTG}M$9Oo#0t(M>bIshawk*CT5D>TXbv-sRlob|F2C z==0oWQZfUT{;%f1 zWGk;_l9JlV!KP)3mNQ!WhCE6DJmxoHn?0rINj^$T(_ef63SiJM+w22O)B?aR=Wsi( zPP-3hx>!H8M(h1n6FE*HQCgZpB}>I0SJ>NC^zEFD=}_w}gyiEprb9rW=!j)l{Icr75_25>u1B0Sd+=z`oVsY- z39|kTGrB9co}SLu#zZC7Tu0}u4&Mm2o5r&Z?($->T~bP6&Y^BI?P0RuEEP^3+W z>85zBMnaaV7czLTqiI35pmfQh+2YAdMW`UIb2UW|bp)dQ_&A;XQ-{pa*N_-gk2YU3;fxZ&k_+qyl+#hfiR z_)|jc>hd513*&XvLPG1;Q04ADc@630HjaweHNJ_zRc7(l+P;eHP-j)~THHtA0R6b8 zH`L5z`0?s=d}0>NJJ#F~27jTxMdLAkRdkb8C$xWo{Z5vtfYH6}ohM!6ZS2#$mwFRp z65)ntm*hv(QOr~H_8R~iX*uFx^n@5mux!1|tMMAF&?wm=+p6f501zFI)v>raRiT6O z%e$(>@^q9hd2kSOuwJk4qa2}^3K^Vs2f!K&)0RCD55u!DaUaD%hnZ{r;-7&z+XNMb zmsUgiVRbhGW?1rsH%gQ|8tjh7X82?n9GtBu)Y(Uu!$JBYZl~z|biVNfdEVV)^ZFd} za(*}nU+wC5<@NB_>zuIb3h(3g?}zV$TFmQa3jg!7kKgNy6=t-tEw1;g!-z&q5aJ`! z8abR?V_3n8$Hi#R)5*+Rc#kwRfJ9Pu)fp1Q$Llx}+2 za<2IDKnFs~gcEAZVw?fpv7bQADLnMLRowz-x#O)PbX+*0>*~l??K;JoZfzL z7;4a^;Ho&((a3hi?wzI@$ceY061$q6TE9Q`=URoE(3`ANq{fAh;qvG@jl27~F{ffQ zirErON#T{C(3E_q^<(4aIyB?-(N6UIxSN#Mt=FwdUxw7)Y39#+=7n9g)Tq!@!u^fx ziGyF%N25YvJ;i3E2Q(P_uJR@$8G0mzL}_L1gHH8+YZ-cs~y*onbj3Ipk7$CXQDuZ$o8-&*SmX8 zikW(X-Tx@O$xyR9Hsh69@jFi!RNH+yIkDZkye8PfmzyY>;2+nq0brb1rWP9@PYpF$ zzE7EX^L&KIH_vbh!?eb0D#b{wSgctLaVawnHq{;xcONjLQ17H5{SiJWp`vRRC~!D) z>?AIUIf`7wsHexVVv(}hgnG>rt?wOF6}}vtG~_rea&Mko9Z|!zH!jk;#tq-BbmnZt zb0S?VCKy1=#|x@JBhR$g7m!zDf#l$au6=$DdPi>ga9xs)li%mY#KSQN60cbCI0Hkt zrELvkWX&DT9!ed@&O)CiC2pH$IyN-@wU{r9=g*c%?2exgF;%IH zN`KV3Zz2}Uo#^XrdzMTR^Do{Q4xUwi(Qful7ZeQTOLNiQ@3~w>T}@sQF7T>6cyDT@ zvp3k0Mq6x2WiI4Ir!{tzi5DucstjfrZZ6gvSvu}eM#Z*+U$^Fl$aZjXL}jS(W+)A{ z=!>W@v2ic?*zEuYu+Kq0B;>6q=YD$1NE6a8uHM>)Egwf{X`at+Vt!PfyD|3H9`HA0 z{`|?ufl@|+j(c*eDT}P2^7z-&OuOU;us%%bkG-K#*D(zAxe7jVyy3eAkI=w58|%0m z^8Dt{t`O%*L)UI{+CO3wzMC@LTaZ(fiq}Zs|%XSMQc4(kdluW`0K%x~0$jiGCJA z=sE=d(4w;`{8Nw#WngZw}KBqBBTCKAwj${_5n5;4}D*Xw2k-X5LmSeufmse)$%{`%$s`|80mDc zsAN3#l?%2^$tht39oGlh86DY%LS@CD(FJt$RCKJ|lv}ki)TTEwY_qwQRc(7JpAjIP zfO~y#8(QS9tTNf|cYi6tKPX|3;?_C&syDSJr7MZ}*4u*7xo0++yRh=-^Os?k97^Kc zx?}RZk7sVztSj}cigztQLeGcWY`FHgF1Ug?F)>jZEvOp*?jLaHqa0VN$+t4;Cvc_n zi>?3y#T3$k`%QSuZVoDAc_bZgRi_Rf5*|WxaR6o&m%(#7E1I&Ef|E3we(mjLm19w87kL^(E_SHen*PeIMUzD3T>UxB?Rt7% z#@eoCIPNn_q!vNL;_sa|j%HC>@CIOpSC)bK1sv^Al{J;F`L2A+e&_x+`(%D&?>{94 zt{`?t`ELpVdSp@?r2~N{NOv~}h29b}=$|&;T4*Kb7u?cpv#+$DZMu9iSwEzQF7Q7eWIv}yV5MZYiD18aO(70Hog zC2L0BX))M zt~Xqxr%ajD!sozCF8BCiA4FLg#~++|Kf~JxPYzJX*sT?4Z68Gp#m`nuq-zyY-iPoaAh%svLbdQijcdBjVCk2 z4%N_%8M2C%lY_40S^$4A6PNm}=OxfENB+7~H}}g(Y{4*g8Ue81!Gka%$5AP>?NINP zHnf+|80VgmlfyH2*pDy`uJ{WwhG>jP14S7k#$uH&BkpJVm&B~YLWGi=rM6&vC_3ys zs`u1K8bbciSU2%mda*QcRs=gt1fZ;%KXbS(I5zBoxb(!^G)$CvzyL|rm*TMW%e<2!(1`wtF?V(K7((^f|K(u_m za5kzMovo!r5-d0=sAOKnzILQmWmb9v4yAFc4`YVC=#haDw+cpHRyYSk>*FN+ z-N-1P5x-kT<=2_=0Vypfn;uaU;o%mc!xo2qL(^4+eu~zlYtXT&cyuhsI7tSRC?}ME zq{sxOCb&D5VbXqMx_Ul7QHLEgdhQQ4bwa_GAaXCY(&wSLL5YI<$IN-c*d`_Velg|k z?q-FcveO(oJLfrQ0)>ZvU}Rmj4y+rH!T)k~d!Ri1o~h4&GvVVp0(*xstcdkxrVQAf;L_2=x6Da4i+%Lv7Hq(BWOJ(2Z4gu$*S`O#;XY&BAYqbqGRV zICFPa-&|ltx5T*X*{OCH?asFWZ<1}wZu;uP$(rfYiJB!PvJDw3OpQq`@lpJ;u8-D= ztWZ^I48~ntROe&OumreG*xcesPZF^IO7RF<=5BK@aR6_n>PP5D0er5r$@p!{ZbI+h z5>V%7Z8>CMHfdacrjTNp@!N~Ut26sK_L{VxUYcH5_g6M^W-#2lwep+(Ui&P5=&;N* zHkq`XNOn}0q5IaYU0lj}J1Mwv87boN-^-^WP^MJ}xhCl*g&>u>cTo1S(;Y?fo2Yy09OM@E!hu((>T}VwT>H0A`I6pCs0K~j^ z5GZ+S{U4!Of70t$;@^nHa?6H(DF(&z^`z)d*gw~5znNJ=J;FROW9&a&Garo2KgOP+ z3KW51QP1}^{{X?`w|Tz(+~a*MKPl#2slror+Urt@D=X&kJw5nv4z%TQOh^2c8X3%w z!cCGaRDF=;Zz%lpvt&y{S-Ay<#~Y)F6MWJ78g|~PnhM)YDA+=;IVevb`43zLg;=%* zTs5a=EOs1pQN_y;q2=cx((`p*+^7e40!K`2F-j+9kX?$*B!>*-UsxZrk3PG)=ajp! zqNMoF-qi;6fRyZfEIqRlHXB#J^&8M>+lTQD*mEO-O7LhOpP}H|$(Ej$wU&ez%w31` z76numvZ&M6yCKM^?!yu8Uf^Q{ow_A7*Jd13+!UOYjAT#S9aZeAhmFBala=1T4DWF- zGwz|xDQOi1EjEnO>{D#6o(K+ho-7zSL&bN;-ky36aJou{P3k|%Ol1wgq&1Y9lqJ^E zn@Z;o8c21R^a*O<)FG`wNiBcR`WJX#OlFoMD;#b%A3mX|7Yh37!XX>U`&Qp$@^IYYgn`Vyg`y|evWLJH@(`IIPTE%K zoa&s+KH_3CRO!T#0eR!wvFJv}Xy=yC0m0@W_~>-Dl69m*84>07h#{7AytDSp3u>Y6T&f2NA@fgC z7L#b6pt}l6eQP!%UJp2K{2qjU+NVTrOF~fJ$vgcr=4izpQDAA~jrQ$WYz==JL)`79 zxXlt2TSPip>AFS4C~zM0BrV*rc7)hb#DsVn>2al9Genj>xq~jPKdC1k7?B%OF>(z? zr7!iZrA5Y7rUWvIoOquPLp(&lDOYZ(G(t$!CJ*H(fbO!|MYD^0MuzbkVV#uGoXroz z3L;J${N`au*O=Nbi|$iZ&6izP^|o~vC=r|pPrxEKbLq)kj!6`MsBM%aASpW<*vL1B zYZ>a5YFP|7B)Iu+*vDej=tSkVl*xfm z)YRRjDeOeNvEjYYv38NI(r??YB*YJL#?O4bS-J07R`IbLGE|eNG<3~1_J5z zZS*A#`UeLm{II8A-yb5j-IZ`B+~DgC*onMfD-V{;OGNECXp+{(o^OzNn7udS`usj( zamZbAAG&1$FDVh#4t@Z%MF`*azYR+Aoc&OJIN%6Jx+m&*!LK+O*9Vp+Q8+)L$8D!lCI{gNj1H3VD{4)gHBl7%LWQ>U<2YgpKW z#vz8#-xClT;SZ;3`|HdvwnknF*k+%=Cf>fCQ>aLyDZ&_`(_Q2jrPW4PFSL$#$BI|X zq&HVaOj~Q_*C$^2m1Z}8Z?5Jlu`DgM`Fn14wxcHE-Bz?_o=~--+E3s5RJ*ixg3*{) zz|~w`p0c(r+0YAR73895-F~Y4)4v{8s;txS$8L2?4mYA2w@8_NRM7zRD9xHcqq5!g zha5bk!byY-Tkr976A(6%JZdiZo+=P*5aT7x1-vGyLCXg5(?c@(mUkr7e2~e94hcso zGS}nkqJWDOt5xvSMgnqo6Q$-j&bNolOJkDD`V{TnM{E(i!>X2#GymGVL`_g9v)8xv z)~VeP^`;TJwdgt=)ofdT(7X+YcZHeP@>XuTfygdykFfK(Kg5IO8+Sm7+l%2BAl8uH zh?kIq<$<_Y!;SI_@q3^Pj+<}2m3?{jfqSC8x`DkZid&)V_hWrg z>3jHT+$Bgq~JH+|d{ijzGN8O=5^_foKGtId(Yx7yZM4-4X9A%&TD! zVUajp~z}}2jQ?|RB81rM}yl5jtk^n zeMHjWOT;wx_x^;?gdvk6#K|1>>^faF!@A`ZHmWO8nrp*)Cd zwt18ghVnBJw$LN;`V9ghszd4n(^Np@Gz({#oKa4Z+wg5`;5$~_Us_>SSVA0@q|jeM z7W8veBCi-AFvFl5oIz9e((Uh0oU78T0H*ep8#D-g1XcKEna&RNt+uuZ>?x-J&sORd zj}7ljmFE^}0IJJp%rV^wT0pYn_~q1iYk3R3J#|ZYt3dR6@MyEJA>?^|pG#AeE90Ifl!BA^VQVPKdk@@%0l37&Cy z&?dkM#gBkB{y`Gt%>B7=NbF1z@96cIjv#+jAgueJInvs#HQ82H=+n9R%^Q=t1Ew&eaNl!^H$aTpUo zCp1gf#7d4~zQJ5;%^dLQ~Hi8P4;@8yW8MJ~O$}V}ivUS}Pmu&V7OyM7$*B?>Y7Lw_OOcx17SN zY6czxh6I8H#<7*oBN`_ScBi|t>r+HRJwqNqt=M9^0xN&;S$N?)@yS{I#LiUa&|9`1 zj%}dr+(%ys?s7JX4galrU_u+vY!lFQPx*~N&!*gL+D9O**#2)Uz}}xS0J#P3$w2)x zl-10LhmWo&_TiBQK^9ErkB9^*?w>DJC4A*!00imeIYZ%m>8+%yC;%2BgMPu4HEiD0&uafnnO-#PH+ z(fMT@--C+eut%(q3S<*eX3V2P_*m2fi-%qdZg}2l>7dU>a7wQdn$$YnS(W!31v{vn}(X=kuW*Kn4ja? z(q~hIEN0XWCY4I2vB-A+$2t{&%zFSB@PJ4Es*5$$H!&Us(=C)O$MK6HS{?*ygQyQV z8ApU;NO2u0x_$vT_}cD>uE;PLMM_~b$p1G`+`dvY5gvvrvo#+8sRmE*SZLdo5G7l` zl?-6R13U{H;@}T<1WG~FzScL!^Q|L9W>stBn?FSd=>}NeHH@7pPSjS@O z2U7AXwL#Y73uLO182v5D&;_0-Sjh)KUGr@VT>3PG8`uxB1@_VeX~q+v+GFFt4(wKw ziCnM*v;<;nz*!#mjIwPCBwH=w4yup7E!rb9f(;R!1UJlJ4+r`M%y|7hjBsBtVGjpO zB3=nx0ge=H;Cy1RjRg^H5Nd?Q5gPCX*wF;r+pPo(e}bO9)vqjpFIxm_ ztI*t{9SDr}2T*Y^kYxdu5E5u07Sez}(a;w_fH4ww*Pw>$72n4U!%GfKsApf~@08nbVTkwB5aQnAc%JnSITlA&f; z?x6u+fSqlyjScYyrtYC3<+0Bo`r!VTa7JAC|8a(h(}K`IAY}t@V67|znE|;&_OG=zn@3r?P?HfIM@)3ScxEopgJ zuw;-#JBF)TD2uwa-bR4uuGsx~`105KWrfz&gpm7vp?jY#j|F6Q3%VS^@Quh-W~2L- zB##@E9A=Nw^Hl?%LEhf2^*b1!0I(IX6%h0fe0{`=_;_{fEO2X3XHZRGhaaRwU{FBb zKuzp9Zu2~FaETna>`VF+t>Fwgj*QbmrK#H_?GQaU(i|%J?a+=ku z7%l$#3wV%(FRRrn8-h?Va#&OsW>x)-16w{srEI^?b)dSsfYB&nBY(Q6*@y#4PO$(& z14d-aN41C|)>{Gott2+v>eaU~uqgZdQ%x zw>t%XcKyTb!#$PsVcUKF{p#6UQ?QLRhd`u_J4f{C{mLS4i?<9GcBoj)bC}gfjdp$T z=Fi#iV#}q=LY?_4!8?e_rV^X&u|HnGVdn#nyy#Vk7s1iR;aPJrQBt;vZT999XD`t> z-Wd%;2r{z@?o+z`t~yKS1G)T^vInm6R&K=kEuHYeikz~MP8p*&6z4pE;Lk?8{puq) zyDm-6(V(05QINZkI5cxR*8@yF#fe_ia;uEEOB}MsSSvg|rv}16njq&48L?_KtO6(9 zZJHyn0Y*}JfjAwe{ys=b;`-v>i<6CgF`|@XQLat(Y*)+4SELykd zYfQJVB-6H_oV0hTBtALSYLc34d=R4O+kqA+7O5trxp`<_mm#Ugf}XhKUP}7gzw`ku zi+N1A47olW2`r31+hmTr2?Cg>1+9yE(u#Irel>Y{B)@K!9$|xA=Zx(!@zcrr`1sfy zd$)bkdwsK$bZkDLZd;sfEOR>f5D(ruS{k8!By5Fu83lK68Lw=11WI-|rA3YglY8zR z>s{-$b(mp3!nAEI%wh72$U^_?Y3?^j64RZ8Z8KIGOnC4iU!A!le?vulblnJ_>iE#E^^PsE1s?Io)!{3;?FeHCkg~S;2E=6Y2Wa#SfhdfLt+A7{qltmd zSIW-N5{8ADh=J%U!NWsDuk2xOLPRfWXX`9%;$-A#Vef3`NJKB-WMpFNOvJ&=Ohhka zU@vZBVP@`3#KyotME^zm%A;levP7*7%$$h6XkUjA6tr_E(xPSLWFn$vXJjB^XJ8^? zWMX2{`B%2Afz4-KA_89@Y9TupM+*~2Sra#TC0ao{YhxK@B6<9ksD3464BXW$jGfK@)dcl_w}*xGs|BC+idtBkFcGn^d{PyO`1tT?#=orp>HBZ?|Bdv&YSa18S!eq9 zS^uB%`n;MhhR*+}P1(`KM9@<(&WN z4d;LLM%u*I>{EpQ5I<}Dm&r)P$iV*3Sg^2mHgWuHh_!*UiLl9MjV51W{P*B<2M+Os z_D&Q@ek?Dmj&UxY7vu6F+k7i@a-(znA;>OqxEH=5Fb72j+z04Eg4zZ`5Y|CQMT))p zVGrOZV0LsxSpb^yN1&>JED1lPIqKu!PVY?vU;g;{YF+ z;)6~EgoK#YL&RZcVa1KsXHn1*DbH_h`(hRRj>sr1kQSK!_iwQ5^wYG-J8{td()Qe$n)0evFq&ez6>IuC8 zZ;h9Tru*f4YX{I48=!Q80%W*XOhieF{ub;CrjRjZh(NqQ(P$&(g7G*zKS;bmiFgoX zf9Y7$wEz{sGCp$E5scUHFi}X{qE_^p^?rM{8n{J;!WtPchr0pb(S+DsqRmB&zFeY! z3B;Hj`UB)Mh=A4sx{p|<;(h{UP}9BWBO#9J-$i<$aESzc5vGx0(5#Yr#bzM1Ec~B> z?Hp7&3u6D0ApRg|nuC(tk)GC%7@nH#ps8J>9=ucm4Rm{6pa}?yDoea^72jZp2 z6NX2ORR$(Tl-!(?wZQz|qms<@$ZZkafMzx6kD(6!0D$5G=mB_9@{Nuhjur5fP@@e% zJ76x5a)1P3Q}uBiKVW&_#kN0#bn}Ib2P5&05@+p^ILZPCk&}=YUd?G+U@!E3PX)E&7h(J~1hVS}ZIIRmPZ2Nm=2x84-cdj&c zEh=G}fN4TbLfDAW9_Ai+T@K#&KZ@XQiHxq@m&unldmROF*>SpkzFDzw1S6u8iM{wG z(+}Hn9Nl>FQdFa13t~>#$UBfEafTKZ4FaA@&tM&~KRb+aF%Ef7`rT ztGLY`dEEKPY1~a*HEE@@cH6J=W~5=Pzz~k1oZmKla525M4KbY@L)F{3j~FiRYKh<^ z4g&!suH&BNy$*5%ans+w)dBSrJ0gyCC!CRV?y))scF4*mxQ&GENjZj~;Q8=D@K*(5 zI|EMvu-jrnkIk^EWzaa)PdZl#HDc6wJKo-dly$kaf0AD+KX1zuf#V*%2qp^j^ z%o{V$`+QOm14t{VQiso3f!zne+wGym(;fVVKy6P0ox(28+7W7r@3Z% zPp~PJu__C2$P4ra!L5nZ#wDzF-M z1UZZ}_8v7s3~CJ1nA`Ar%Xn$H^#g)|Acp#qx#5+>m@E+*bCrxMz&D_Qv?i+~+KC53 z>WJ}LYC#ISY8c%ZW_3`s$FmNPR1x7}M(+oeO>wFDH1l@%2lQ?s8x4-)Roi>2~1oCWAUgK})^w84wUv)!-b-uKc-+QP*WupxMkxBwdL(_vQT zPAMh@ZwUk%Vh?A;CVG-6>);yFndE1*8$LLXfG>bZIz`WaOX)Luq`#4S1gQ2Jn;YRb zWb5QooRR3)x?3!L4|G2kVgN$MkGF$RTD#i(v?{8Jv;m|Aefrwnh83VWmG6xN|Onl z_SJS@Du_GS7Vym=$)50BZh6+~Q)2zhmk{S<)4N?sKOH+j3psIprVTepVDg|O9bD1n zqjW8Jl4Sz8XLFizQ?!BjL-vn6azfr_g1D7I$98Qint{#*JR#5JPxX1LKE(7~rkLmTg#kVbiPYG~(yMPJO@oAW{)57?QplPXCsd`YbK+4COTrLGJm1 zqFreIG}k=mal9O4R?~^;a27*d4$v}zH|{mQ4%#M)&{r|4sWX)B;cx4(R<@9Em<{g> zeC^QIlXX=!74=MKSGjG`p&XSB+ca(bo`xzT8pJ1nS-m(=sv;TELlLmSW#nG2*jf`o2#1q zRkw0^Ud~j;rtkJZ({2QnAa)*g|5lZ=vcG}C5L_!rRHmdf^qAl*iVw{aCLydw3NZ&dN5$FKW{XSKqIDQG`bO0Y(`9o$ zu*|_Z#9$4lb{POg5JwmIduo1hWe>eSN!G5Uk*#$YPG^4Ub~T9LlkyNqt861JF)$qZ{X9J+ruQm-c9 zsU&U?(2|}^*KaO6Oc`H8yt#entOMErbkXD1tfXm#X3_@0xfHY|XP2Rs)(o37$f3_n z=$8>z3E~=LR2_Mm>)2R)bFOXP-0p=MgjAAms?3`Or|?zSgE>D(?9-kI<}PLvxgkhB zJqytfphqjB?bsWTmzaaoo#Rw?toMw>qJNcF2=NUv=Ydd?yQ2Uy&(`4?^ z?`+qkJzO)?Dm5(^`_2#%Zrd4kj|h1qo5Xkc2=V@+(d zpX6%E;Y0a?c@k5I`$>OjvV#KNT)3h2Uti-j$9xtQ6~qRPeHf?K0=whno4aWg!x%$4R9@nQA>8YmCc26-Sc zMDDm{7Yb$160Zi%c`yOwSmuc^(j9$RE(4_;f6+l)@Ah2S{(SFW>>23o`QDEh@H4a* zNEreG6i*Zl16RbT%^VFA#=gH_b_0rPo69{I)f~s1AjmBEfmnAY;JoI9E*~8RCRbly z_#3hkv!s+LMx@BmLQ)^_`AeYx)Ej85o^=g^s8?;;!z!G4a{ zm(BRzC$PNlwtq44C!>b`V-lG#riDi^D``y*5d!}h+|bjrEH&LkQlh~$2F<{j&0z4# zp_Sxiba0!djuDn+ka&LRXROtT&9q7D>igp(%?({pYW@y5*QNVF?v!FFrbK``r7T9q z;O5S^s}^?w<;ZBJ(_}$~(eV^YH|iK_dJ6DDALS`VE&frTa4A=WD;d03&@tC3$DLin z(6NBA0AMAL-XFbq(kc*D2v{=vWLBKLB^%1NG?4wn!6Ie^m_kgwXt)`&n0qM3Wuv zWVla-vka^Jf1^d1Gp>HXo+>=NfOY&9Lh!yDd(0H!bT0(JNCAN>pdp0>#w$0D4@p3L zZmM$JprNFLBW0<&fhWVCwwyvbq{V>XsVGtpyVGcj-YikhJvBdSR~^jZI6o*0%6OX~ z)oe!smw9?zDxyn&mAW$FEX96-)22c@GlnwP?~X!p2hdZvtMuL$#Wi+9}k`t>8ACvG@Y)ta&*+aBD`(;&!UvPx?UZp&;NW7 zn5_S-qwR4q8RouN-8PIe5ksNPUv$RV+S-0JsYSf^PH_Xc7-U z3b=EK!QftVLehC4EX%Yx@?PrCCW~F5m3YI5DWz70Mxiij=o|_K9SAzRR-xob`<2!B ze#*ITHx*;AJ~Ntb`^WqUcs~Cf-|R$#Ux&{NC#1)HYcqAko$K#ed6onYxo*kCxR18( zm+kjSb3ux38;WkAF*#UOCOUP~Iw*|##Xi}D`L&p1%!ohbd`nb*`I^=RHVrcB6}lCz zV$B09$t^u)vM6b~zl6;4BQW#yxMqu+)y5nGRicC13g#F-u+*SvkBVN7Ndz*WJ0a^R zgGTD%@JF!sMfM*gL+Wz8H_gU58H}5cM7=?SoRVMMf4N#=g+oVGyPe}i2Z*%6m>!=P z1abCS^HTXlMSh&}WsM(2tbJo&;WU22Q;&Wzlec2T%}g?l{`EG8*el#wu4pA%utcQj z5PW+PNJ(Z>I99=G@QpZf)x46yDbai>gL8N^7aA2urUTfDIA8h#0g3R@_9G-5+t$Le zr4y1E)GqVaYg(#omjH^Hcca;~8s11AYTU)ot4C^ zwsQtxqp+&cGe_gh$dWfj@z~DMwtNCv6n^1}lkozW4 zYtfi*E@d*-kn1seWbv(Tvum)5XZL%F%2M&VQyH?PsnXBE3kA;X(`tnnEs9E?&p@5? z$LVHX65`)5q!a}MN*0YHjoWiUn)!9ozMU)z|D~7;0gI8!Vd5<0G|`BNHKcEQsnu$l z?&SYtawshfj{rtRKYE^Hb)EB=T}~dxnZM%7u;=1gzXKbSzjPyi+U1@VW?vZ->-#6+ zxUB9F5thEBA`-1Noyo<&Qj>#6WKTu#; zprJKo%8>EWJlMJ=PT8?huLq1fte;Dnl!E`3ma!Pd)O&HU3Rkz5Jn8ncL?d$=7JHR@ z#c-ctOtsLrb-OV)ciNkC1J=2@8jhlw{BdE`&p!O zQ;kou56jge5YR7w2hW}4_5c{_uwE}t`ma7g{Ul44Wz;)vnbr!rTY{+?;vKA9E3 z(gboWypK@;*ZuSyheXor_ z1FjTM1nRN=*3LY$bftA-O!@6A{Chbk>pR4(7$ohHPf(u8>i2bBwcmzga8V_l+^)LY zkin9Di#%6USMXR6^rPc$_Vz%Jby-2?GvVZ|N5E59+ye$^ykk)m6&k2CxGFZ+-;2qM zw5a1Zw%wB3M=21Al~_$_li1kRZP1NGi@`PqjxQm{Hb^%0tC-rLpXGTn!SbONC;T4% z#HbqnYJKhZb^1y6#CnWdlV7=zAE%rumREUOs0lJEgpf-U+)hRSGNYgYApJft0|@=82>FS-?b{qn-s3 zwMLHl%@+GPdAFq$D>;WYq&9+=Vpn^Oqs`xfKoGgn{GNFD*Qslc^S{2{gkvG|y$z?b z`A%G!w;q$@>Fg|o7IYS9<){R*?!;O2(IM#=K@lIXc0qFD6a?~Ozy3#9}4(Nat& z@S+JC1~Jp;w=I^6N&7yiKFI>-3{B|Cx#T-`t5go5oM@_HQ=sl$Mdx9%S=J4rae;x6B zZy`$?+nP@AA&Br-j@H@iYSjNj**nIH5`=5I%eHOXwrz7S+qP}nwr$(Cv6pS!eI{pS z&dkldnMqeV)k&w*Rh{&YdY*be&m4{hD^%M3VSG;Hv?E=LF@!AW3=&F=Iz+wJc^YVk z@@Iz!G%Wr6*tj_5vWp^c_ZlaqD}X%8hX)=BVvFb8W|oDdOi3EgCh;fX(oxIDE?v4F zu35Wz>Y0C1UlN%H?e|m1ADz~LbHzMG#O`I^tu)rw=hKGpJiNL>g7?_T+iLF-5xcs! z+lt@ecRk*XqGHw~5Qfi~eW-q-cGP|#oPorAkuWESvpAbzy>s9dDilaM7bU$*t<-^Y_g=xFAo(9|h{$Q{Ug z;kjni!IY5;lVhsHs{E5RmXcIApYVqqlo`d@!0qbnVh z$=)qfYqT2LZAOY)y~hepaa}u+vwp;b=TVMs``jQZa?ZU63|G;^#v|>$9Z@*25LMqcNhitXZ&Gp zW0NjN<^O2Z;gGGp$bY#L{^MlwAxGe-Z0K5Dp<$?Aw~JKtr%-B0=t|Bz!v3gBpCxzV z=8D!4zs}Ntx&E&()9w%!V~^=5i(lVs!fC~9GDfb3b(9(eMGM2)Jt z9Mg~PG*!1XF6e44M!lF*cRjfdp0u&WXepXeLWjw;5MBs$6KUIM_588Nv)vg~oqxslnICX zar5kKq?jXI(T_@08tjo|*e*m2I8N-a>=|Xb7GC42ozO6frV6 z2INb#Ngb(-Tc}eK5U?o(I{}Q@A14$97D71V^Y$ zaFgp;&eN;9nKj(3+HFRyHxV11r5l}+O)k$(E}%^=-)}jq7fU_|OE%AcZ=U{&eK?o! z={CrxT`#F(-V^$g`NI6vL|2*UkQ}LCmc?iEaD{utY=ahJ(dHWCq20RaqkV!dUivCr zsT(~Bu(+wSJUAUv-v~JraI;HIgo{}m+JRUDn#O^;_m{6~*LYyFrJ*>a6b5YHr zk|A|%?T5Zxl&p1mmn-VidT5c4FERNp33e%K&`Vk9fG9U!NeGt0?1#t=;q8PhbW>3mMDY|+75$_E{>(x2^P`OC?=STn zgF~w-{M46lB2ED0vA6upCYSfD_5ErKVRLYoI(=gZ_n9Y;cz$U1nP@J;5L`n za|JhE&YItK&Gr=b)S*u->b1|VUbwr%hVDAx|JE7?8XWZ-SBf+%3%G(`#W`<^v|zF9 zqm*G(wPCJN8(BX^w>-}j0mthEqu^ui-&ksd_d|2lQ`ASI>{IRwL4GW8sT*rvqh^ba z*BXd`6JvHQ>sM%NNBUx8HHb35`5nZ?$0obDZ$`_FO1{<_98pJg%--k`aH#>!6j14J z?QEY$x7po@trLA%F3%xqqV?>!)c|jONX6N?ds4JQVv=GHQUSWBwtO`v`2!~XXI!cW zx47A2Bg}ah1Aco?hfM1)CNW@rW`6<16~>SLgYf=uVg$#3VZHx1VgxHY$N!la!Sqjz zVB`1)%>Q*58JHOV7coNo|1C!RpE(iCEClrb!--&K{9l}i|G?M()rnwb{LeA|S101X zdJ6y1|6h;)>J0p^X2Jht{_Owx)c-5y|Nk-I{~h=L$5;7B+y4{y|F;4ByZoQHpYtE! z|DU*@k^TP^_p|=zJ2SF#GPC}7-p~3U63Ks;WBxnu|BpNW3-4!QVq^O^<^Qac|6kr8 z(+#Pka@NED#bcJ^GkXR7Z)X`Z1MoBe@DK!37_Nwch$t8asEFvlvOH#}O&0ScBozx+ zq0KXkrGm1=lI%-Xo5kHkt*xAv*aknnX3cFs`(AzcZ*g)Tvu)ta za`#@oY3Bqn2#bY`!o?0NV}dX%13htKzwpiZwOfp`tmZ;*@(6?BiHBjTC#rYeUgwtZ z35R_FKd-IWb^1=1kLKtEB^JUJmd3{~1`g(|{rqp;e6f4=CE?2VOpNON5MLg}*=)C- zx7*%~AV^K>f3IP))L~t7@hn5X(GB{{j`nL|9wTW&<_%G=y4YZCb#!m1cz`}d>u+bR zcROSLn$-n;lU&_ST5IM|w%^~HuKVE<-hkV~3<>d34Hw`G-3s-n$4P|!)}fMKFV&mo zH_UUG^ECT?$CsrLgDMUBOo-Fgur6vvffOgTK8+JR|2mn7kQs}i8H=(Ri*t?#I4a^f z4lZ>hfO{N3zmJD~Q2=OzmLq^37+CHX{KR$_FK{`|Y=f_Drc62M58ii~`amq)4O_od z{5=2Ogze;+!q0s7dH*~^|8D8ML@j27{kA znGyd!C*@G{Z_OvBfKtH}$Kr5h_Jk1I0UwiA;M4-#`!`w83c#LFszocyS}M_%l*HHm z4U}T2=8Rggxngzs`UjZ#=9pL_Sqld3V@dW`X69huu=?<0F%*HP1zO92p7XBlXL`<9 zYy0%)j4Ba^=71MsR`U>C{(Su%$w?oO(S8s&c;c*gIi4*3YD2oO`CAL$=ZMZgJt3Uk zxVQbt$r3gtw)we*oSWm;remjUfY(5G*u?hg4?8GQLv8GZif=E#=a5f0o`BzI;`eOb z(6=LD_hrcmAL*SUb@{);$IKxz*gREGHwS_G>HzWx0cH~UWXrK!3glm_wi+M%l50hm z3SeTk;F}?};%)squZ3OBJ@Y{4(IOjD6my!M9Y0GXK7b&91I^0oTsQ|L(X-U8i(rbbzcgA3a zonT(*UI1S}bLGL!n>eHHNSK{7epo#v)ypi9pYJh*Hw@a*nAsZY8T`OMQlIiXlAETU ztUI{!(=_4CJv(T(XSEY=lY0Z|Q$7}Q&y#$m`hD{R8jp{ALvF{Ei!Xp#5^_PIY)4%# z=+}pK3i*K`?a8U`+Y!V<0spQw+ALe0*X0|@53SVT#I+u3zM$zublxjr%+i4c4xpF=_ z;&QrXtr)Ul!g}W9uay5ItvaJlG{VXlsH`4Y;5y1b0hFV+Ha4_mpSyw_3~%z_V5K_t z^icm31Vv~c=oKathX4Lc39>#bc5n4kzjU1mZA=bT$Kug zrAV!%nLQar?Hy>+*eXs--9;#g6$k8cw0CT5vMnA5Rrc7MYb+c*DLUIr%jrk1Wsy;( z_Cr*+^C%Ci@)p92q~(Gi?8-VrDD>ahYn_yDoaTL(<_i<|z)L__SP&Ke0tth@d6l0C zwu>yJ&@(OX+2mTb?H9CkSYrA*n$4tk8DbU|bJG?AI~s~?jACLa+a0rQvGDgk>(bEC zTil-84?MbM!F7%SyF81{f~Fc+Vd6w$6Y%4|DXV&9kH`Bx*OIrjZ*ej8`2mdUBV2A@$mquJAC(kKd9#Z}Za<5w2%uZEYv-x)l=U9E-<* zD=94pbUZz7VJp+uY;BvjpOp`YpNS zRChI(VaXSti3BFb5PhlQ;VMuH1Iz0SCz_7aT8@L&x|!y_h5q`25Lg^3c#Rk`jsPGE z?D-I>bxI%p3tbu?_|9zjE7KPZ_!wfwkHjYw0a7hZT*B2hd$!tv`BW0c_g*qy=tqF= zgk&4EAjBgedJhlC+!9F&BYh8sHNo=D)tYxBzPI>H4KqGYpY%;*|y~SobHj^f-q`)~I?qB_B6L>&#a=u0hSc6kwBx?f8nbY=~>M%dF-q zI6AQc7@k0(%f_4%3yi`CA0xu(Pc*-vpBNS9pd?EG1?N{Ynt2M*;4fI8BNjigrQgM1 zEx2JNnrfS6Or&DS67yf`zYC}q8m-Z#W(q{Sz{*xc4ei2rvQo(pV@dv+a0JsWWDcv6?I3SIaw(_)y=-CWJiu! z)vo=S0XFm{`<3{a@Fq*(Pyc0YO!%#cznqLYj_i=JO^@D?(Nc#SLSOrPbkMvDWNu03 zaDRlE-)FCgA2&ASwUIbKGgz?*AysytN~`VN4+e-aFo{9)5m~N}C4mQq4AwzJ1=}z& zp5PGH5Tlx^JxPV!4pU9k5vupPpLPa@UP0qImPm|#lcABeo?v&Mg&{|_^n$zdGd~CK z-BIlEEzEw_UWxiin;=A8^@kF3OaTYndjzD%D)$TFXyF-oWu#+@7^Y4c{g>o%={^SE zx3S&@9lX8N9Cj2+Ewu|`82Xr+?G^Hy?D8F554)2IDK5nhOty0=goX^3==*7y@iYbC zp_-rrxgmj}`JqghUbtX5ig^DdW`fv*C}#C>O(7sKbAKuSqAAX#khXLhv0b1+NDW{x zK7hpuO%B=@5Gv|IKmuVJ>Uul^RGMP}lW7I%g$94P@_zNyCX;1k()7@T5*gYURTR~! zR8$DU$ip`+BSKgJMsr0A^{SN7mlx1p{#f&a<`2JAKu@8p&MMAe`|CE6W3n=8A#9p9FY5{?K zX|=xLp+Om~bU;DMnBcqfb91ba`VFDcG#UZ`0YqX5LE6;e;P|lcFl4$(I`ujbtpL}` z=#@ha(sIyHW$-STpn`X4EnKEdJ{GN>R#P{sF%o5~E9m5}#qIDK68${!3XP-z#oG#< zcI$_slBmM5B-K<=Gh5Ai)wzZFI?B4g_=*g9g7Oa{D^^~l`&QPyM zBNtm`x>EkW%Q~w}Jo-#=nt8VTAyYN*9~VxEF~4wlvS1P35z+NUZrCRtgIr%<-km5{ zQA&X$#kBmYxXBt&FPg?KWB3Vk%r4iT+4toyUbV}dRq&c-)g1YqfBT{@lo;_m6HSgd z-{q-N4wIOcsFs2)CY=|DiIj&)q`2!TGr?q<|IWN6ZQ|feWQ-RC!ed^RQGxY)>hMD`*ZQx zw(HFw4pVsg1F{gs#|CKXL|!^vnhR@2+ovyI6p7~{kK2>)a&}Quq~rD7dC6vN$WG4I zMlObHS_GV_<7@S4YUK5KI#b$0xlF=Bnsr`Us)sCF23C5%anz$*k$W33@mEyPTP+%0 zwM2@yV)2G3W5KxeyK!c91~lvM-x>GEQ^KsGe#HZGmnRNa&fbH4+=!Hgu0nZ{z35(i zlYz(-AGg6@VE&W5QQ1NhyUzmGO5NP9X0N}QB~OcXa4-gI2zWpPKsgxT+|D7+Yy?N; z#=+GQQOtwU_Ke;hV(mP_PX-^6a*ILvV6Ukf!c6Ck6f)5MDA{u0R8@@YnRRHu)@1c0 zCSU}V@4yd|ok##MxA$TGPx;8m8ifq@fP(CR@Ca$A5DtQ3P3l7q98e!EM3E7^kKkVh z^9cmID0RyewB5D|qgGL?oF;5jP>)K=dbRAwtLS)oG-&7RTrLs01-cgxyhCeM){ad| zvy~{9P_o&&c}aB6xw7t1D>Cva+s8X)#ZfgA&n0Ba%SA08_hD;0D~dG=Yxh1-v-Dic zaJg<140G6nR=sIV%gaW+FYKz+6y4SoovyCW@A!0U3_wMx)SPMo7W2F5E9IQi%8orc zdwQ#%@VSH5xt^}4jDog@8Y$Ufml_E2nMV}{v9RvFMZY03gRKl_f zd5TwvP|A4?o=LtPxvO^J$v9Mmrez@GFiL0U_qpnBG@RY^Lqt*OQ|1%fB}ZJ^-V;yT-1(X;Hfro<;9E2{2`og423bQDsn(4DFR>ecEKmN~hiG6y!`n z!=RO!bF9C;?{+iMg&z9ME7^_8h0wMnoztcom@xH9&<^-tK}TXq%Tag=epB8WgnUFw zhhR-}C&)gS_`?vQd+E2$w}ElbvPWt9TH9f8=kWIQM|*`OgJuX1b<3tcXI|mf=pEk@tP#Gy?Kv(2gRPd&ph8+TX43UZybonE&EwD zj~p0wY#>GsIze-*{l4w{FCaetn!ij56Pw_S8DM=z15r1P@p*fjJmPJmEN#d*)$nbH16p&C+UNxile*&ZfIL+{Gr!rkKUXDJ`8dv2|zDwsYhG z`eY11!NGsBT;e#cho_)$P<(UK%jp82@_`kv4zttbEbiwyvWXk?7nQm-WzS_T7uRk3 zUZH+lwU;;>4h-K?&JMUU9Zuv}0}l*J2XGlyt1dE~MF5*UX_v}E@NPzcTu(+Pnagnl zEgt<1cu*G*!cq2J6$GL|Kt3S^pwCgL2BY789l#Ebr63_b=!iEsTcp+Bk%kZ%hc!bm zNw1_fSOUTkJR0&P&RN7x>V+YgR|`e}W!ciBIvN3|ANmWJC`D{{3al6#Nm#3N-z6jn z4fc=7v|$S0$((AFqn=T<98G%Xx0S2(9&ab9|HBE7X^LaXoS75KMAvlb#&7*dGM8G# z>fdd}9;x1g4yX<_D|KqhNL8TSeb5?SI!m% zY%nB1K%tzlE?rkfz5#3)iPitY2RRKq2Hx%!8dd8|aa5|OEoFOoZk=NdL|eQreup%w z&YrThVRoa^C{y^iRi6Ef(-^QKsPhwXnS2GpUn)iM%e=%s>z(&3Pd&Y8>H1#1#-)}e zSK$1~K(9eb*@VL$6JIM~O9C!xT*ZYhyXQ8{w+gFbUZiw|b7soPse*QM=b>AZ^BoGv ze7fM95p-5Kb_gB&no7pJMxaBE0CUT&SMYE@H64`vn=!SIYgThHl7Yz~az|r8K(m}I zMw72CX!}>A83dt1L?Qn1!4QT8OzCmoMItcQgzoOEd)V|eu&^{n4u_aakf}2Gga(X* znvu|eb|2lbU_l6*)Jo*I4J&I6Y}pYu$15m9&8nFcPIkxl3giua(TXGbBso8| zi79eI@oZ&#sa|#m(E&*Bz_H4=xrIZ13TuTbR+UM>w?pZ!y!l0cWy?|}l7}^jGQ+~D zLb&w2(@xRtS*S*~V#y-1bup3`)PoK1h7wp!$snX39Y_75-hAt&!468$2TaVkT zf&hOxd2zap?m$D@-4)2%WLqNWA)#WOOm*(cjg>5Cu^7!AwPq<^0Mu9%!6iKdc#ofU zvO>k8Qp!|L6O!?IHW}EnVO*{QDPve8&=rS*Ut!&h*B=fdJ1WY)xnEXbJR5JHX&b{` zR;MsE9*&__M6AD6plxnIM(7XlC}wvgK!S^T;*xmq20p+T9hk@@ot8C2z_IB<+(qO#dFt?PsVGSO@TX<{1G}^J4KS3d)qiB#v1`kCgOli1pzcJ`5da zN%@=mPU)pK*9UZwr&Xb55nH)QcFYk7>=Y$xwUmCRS*wAiq+ThTcOEw+hAZxJC#P>Z^QuipO&&dPV3c zR8jnD)87f-u*dYc@tEDp(|#3KZ%= zNyC85?w}eIJ#2Q9pR%+^JN3e!^{I=!BcZYfB?o0gW#%r#H;E7HlIza-G z)9#^E2)*Ir0lWY7!x9QuYpPT8LMa%al)$PBuCrFlf++%zmIRNQv;ZssktVMR3+UkW z6gqFM-D*Fcce3~HqRu_1tp&Hyd|lhPWpDiU3tg0y?D5WHQrhFaNtWJnX9P4ho^;`t zxz>3creqP{R30R(l47^*{N$KC?>uT*D(}6&YRbAF{k*c>bQwJ(PgyPQc~&`1^znBy z1Ad)?=XCk62#H0 zqXW`F?+Zx5b&+#S(qc?I&|>le4b!B)KTcI{*WAF~WNpuNYQBb!Y;re;H9IRswea`L z3%{^Qoa7@>ooQ(9Jy=ZAWiEwn!WGs^q^+~AjAZ{EtgSUhUr9-^D$E0g3=b$C8!}d* zAA&$G6IWUcE~!fniRi;(LimJAMaxcoXteUBs&_L%iaeW_kJGXfTRz^WzR{CKk((z5#r zW!vblTExLh-DF#3Oh{M8Rvy_YUA9U|^rnUm51~Df?xSy%LCq3`37YnC5IIJd`LK*- zU!{VJJP`{XX^q!ox}2{3>^E6yY7{ADG(5Vsf>JX-35YVEyhD~|1$E*lf8AHHe-*!9pfSa*@`mDTWvLB^qHrNE(io+HiOH2&`Ek2RjC&D>y#P56d`ML^2Cx zp0EaLv2k*65n(UXOG>b2K;r(2P7;=d85wpg!9x<6hzZ1MVYuaClhSc<#MWe1|GCuW zPM-YW`Y<9Wl+c}OA|(RLT{Mm9*QL0=2O@XZnw{s52#db@+mc{M3z1>MR*@)1*V|8D zcL%fP{ovItoZL}Q!+0rrVT|yI2RNL~&ga-{dn1QH~33RFN*F5c1St^dZ?@|SEQ<=KJ2-H7( zG5a0+4yp~;an%gyBQ%Q={SuZzw-QVsuHklHouIY+$B_KDD;SkFi$5EDTmW`gx zl*W9BW4|bOcK0Q0;xiMLT0HeJZ)niap6*H;OT*XbZpp}8k3p};(|u7HlG72{E!byL zBngmSdq4tWOmgk_GxMcbE+`}`8zZvK5l)H6>W>S^3HmXTy-t2mN<%|5Xhj4eHK+iB zfk*(`%q&2W)`z9XG++>p97oNkh|JJ>a))Sb(3?m04 z%OMS}tHw!;k?|b%;7nKsS5F;NAR;gzklRmzLgU0&mHfCVVApSI3bn0{cURM66u>TT zWI#y=50Z06Fy%Vx`-%kYB|dR^+%(yj(qc)|aN zHe=K-O6)S$*xD)@$?$cQ%+QGutdXU`;wz!tt^m&RvlC9wykl9&L~B&5JheKFL;_J5 zqF)~tWmZSENz)9yux%qhj%6DlmtZ_IW>@G5T){yN1el;aQ5bY}2BbVKUPU;_k+dv8 zixDZ{HPDHaQ-7Z(O}U1~2Hm}_kVJfr!u(2-uj8)c)^#yDmHiwTTk}m%P?7hw9eEGp zUziVd$i?*Q$BnG@j@j!XfPn1EvuCC<)Jy1?rWpB|3QvvtMced+DgDlZF6+}5%2qCQ zvB|oJzRER&RWr;?BZof3j8km(4HoB0qosD|==qEaZF?D{wx5@Kt|&n86z~tIIhbb) zo+HVLGv%;%7r_wAj}~9=-dBFeN5%*1k`=V?>Il!8>)_KO(8ob*SXXY-JbV>?D-T8i zdOCXZj;55~{L4V#E7!T(%&jJ$xqDrTN72EV4Zr@KDfnaPg;{7`);YY&8O&{#d9bA_ zY!0n~-=KWXOI}!geqXVPh?Udk;J-{co2F}VHqW-}W}8_tE1PxGs!Cm2Wmh?6+l4yi zQ`oe-+=89~VL>X4t3Zkyr4{35lMI`Oi1T-fl7DO9P=_&j;Sc!q!_Z-_*o?)@W@3bG zE}(~)`7ROmiP;1MXCNE+vSowZiY6e!ln|PG3X{_k#d|!H5(JD)N zD@M)soe8@%>(;-l3%x4FgYE!FS=PTfsa#*+d3NspBvcjlYqHqoWiEY8(QFcV35SW- z=Hgp$aq<^Cg1f$|d8(~H;#lh0@-LiSQ83>67-or%ue8UA^$B#ji91PE3mZxr5LnKp znBQc0W%Rvlzd<z1pzS# zsfct3Z@2((k64c~9fmAYDyc9;yyZ?@2WldvsC&`c?8>3Z^@s9bsBo#;vn*A1g3g2& z(2Ufj(|t@>p8NevK&QV>0ky4x?;O=rC;-~}Micd#TT_SJXtfLG(n5+XcF@pPCsvpJ z(ELEiE$G_IF*W+CH#zxJ+;Lm3&vEh6{>KD9l%-RD$Z)yQjqs+Zc>e5-)tD$fm@_eQ z%Ble>JQ213bfV9k2f1r4*!2%+`5zPLW#1Z5cu?qFv@ypqtTAr5QAXL0VMj#?DBwZ0 z1GxjigXn%@2?Z!RLLy@jF^*8tX^VDdMVAwZa8{b9uD@ORj>Hw)G(b>mfozrDlTix z8L^l0%d{1HzOL8j*i}TaMC$dcd0T7`>&Fuh)pkn^uYBL!t%#QB*bC5xs{R_#8{rSZ zSRVPlh}$^uy81@g6TAm%t95#3eY<^ge(Qd-zh1xSzItG*f|^U(qkT7o)$DbVU%hTY z&DOkHYOEGp?qYGzZEYl}&7IvOk4 z1%6nSrzeYqML|cY>MwRiS;bb(v+2=Dqrf7WM9m^Kbe;qeNl`i?iR$N2aJ7l|{sUj3 za}whVc?jjEr%fBtoft6M>F*x!aNSO2(nLvVY6jMWDm4-yiXJXmZ>ul?qQ6?&@`+xc z0~nbVWuqa>8xpl(D2XTqNThm5LaAwyyqP|j7-*+5#gDYk+UjWl8EAE%?_M6pwAA3x z;o03gH?!1i+`yfHSw&uUF0D+=Qvc%7^#N5R1d=w`%%mg>FndUa6gvMbu*haXS3B%#&V5Mgj9a*z3Q~3%zix#O)D%HMq zP~C7=_C<0p#cpk(*ZH>JcZgLYZk6O8IHb{o;`pgm+f(Y<*<1_4%=)YS@w}qXH~G-| zHZHH8Zfda9BnwU|2v8t%CLGRJU}8Zm6fVd;5$Q?fSTadm3JrcSnXmv{g3$59v2a0J zDys!NWN|Mp8s-nl*4YM23zT9A8U%$)8}t?l5)z0nSJa5sx(dtAV%KH_LQ?^_ComD& z7)V`3+DrjxES3=PCr|;%#4!6IQ)r&K>7xW1Fq+JtW^NvVX(nqlA4s#UKIyW73N^e= z8AT}hlPJd;ETe&1r>~~m++kv(s5k$YUaOD=!^lTX;!j43B{y-K0MR+)>y^&7o!S(k zfQb^&Vu^`dCQ>w0k|o9&A9#aUiPY#DD_My;M0E?>wqk1DElUS3C>Z+;TOB7EP>gwT zuOsAzK~Xs>mD^eYr^EYNSDx;@E$z3$btu-Bk^j%Cj@7 zt}1D2_Dk-o(k}Clf%tEazvt}Mxm=*9^HL-`$}JV2;+O1z7)q3sn93u;jd*f+tG$ z=xx;MlFivxd8=-n)tyB-^rDCxsirqx;jVuGfgc?8{0*~3V1()9P*E^;IJyXvQ!xb% zAf*eXHb?{)M+#m@d5AOOvT!`h4n??HCg~51IWIv8id;F#F$pw9a~*}W4E&FH6%Z|%!uisZAX9Mqr6iVfBbZ1Ltk!s>ecSqlXpIMQ@ zhK~@9yT?FQF8kKM%3gD=eOCqGt1&f2v#dw&#P>hu8xkIVDh0R;c>ucnu#D73VNT_+ zG1V9NQZd!%_)5(+vu9SN_ne9w9Gb275klU0L_SOHS}={@mpRhpAu(3$u?-x9k=BX0 zf0(a8yaIZLClRRY5jj`}8n33@k+Bf@=D<>{ir0}9k|<`a?n~WKtxaDcY?c&WMU7Dg zr}sC#|E*AUl7lhP8_*y{r<%if38*OT6Ok?vYO~;*C0zkTG`$H74uhl%-aybf0}X@p zsVyQZ{<`)g7Dt$OY<31LuB&oWOH;xGT!`2@i|@qXj_jv1DeRmM+g&D=Ffmu%ua#3! zxEN1os=A~gy7lRa0yQ8g_Gnv_Zs^#IwY^eAuR{@%Xn(unY;SYAGnO>3Yv{>3tRFez zY=1xJ{hhH{{quMHYdZ6-5}Wpgs72}^xRZjDe9Z|fWbtPr@H&bL32kSQ$4JsC%R6hm z`h>SxXCl!I6hxv>dDykE!*4(DU!4aeQ<7|ypt1*Fq)$!S8Z3t%_|ZF62|3ry@=0J9RrPcSj{K#o8JHBAx*|rJqpbk3aj9QXPQl zNa>6~0l~=cCQg+ztFci{z9srp`d7tRAyA!faHSg1R3o|2$WU@OT>9^{gOVNBp4-pBJ3RRj2-dONDKP9q0~>zc zEPvjw<`2%Y$OB?cAWWwgv|`+#qGHEhAOppo-B3UvgChFkd4-^y2yTws)gZaYd3h9FT1!O;7<8ASb zeQbw`ZIaT!aCF8p@T-Y5#@3P-gZXJvDb2}#Frn?+1~6}vUFfGAoSYI+(p9iA{abCS z!b*`TOWyg5drIXA%yn;5Q&3Pjr;&X&5@BjAHoCUdz9^rms^!n|29I6bAb`wG`dK|Q zJ`e9VSPSGq7uqN}StWjej}@**`4|?qW0#4tvKg?K(b#O&RaTZ*cj#E(KZ9g`x`fD& zHX3QgVLp`j6)+c3E+whRxi`3SC6My3RIai|uOd4yC~`Z6^D!9m8j6~gY^s3dqF&L= zw&QyUJM--U7MuHJ;+Ie@C$kT;j#yNrzVw0LlC{dPoS{&mNWwC^2zZ&JqJ~4eC1I(2 zJx{}n%+ebTC1q*3VTFZTn$6PdC!44nq&HGGhpskHG}t*H$(*6=rW!O-Q1?jCE2}`# z4OhAUisb+`zcP!Nq)CabpsczDJ4JWI7dqb#erBCKI)3eO;y4N6sZ}ge7oxd(lslct^XZoZ zDkN!Et6zXflr<#>syj7jhIvsvg+NC>WOoNTw6`r|)l8v!f=-pYgM!aXkKQ{!a{6^-cKhU5TbmR3q%?Yi00xk5jH?D@3;^vk*Pflv-J{- zcevPsiPr>VHJPn5-esIZ4dfp5dp|w0paV{s;we&?w16NCyrMoft>OLs8~6Lj-{zI0 z#T>2svrR)@;1)ynX9ri3y)f53mG2Z#q4~&vf7k$P&;$ai;3=?auw|ZI}Z$H_xAH{#h14fexf0N?=|F z0T`+V&E{ZWn1Hq2x5w+-cQOtF6s;vgU3D)P%@*|K1Bv+yeOxF_ly%k76~Z0 zEi5AM8}Y)f7F0I&M8eu(bsS`qSp6D!k& zTvlzvKcr3TI8aiG!zDWm&+8!8(t3gQ;Fa@gq$r;b5G*NEG%doXpAU6ZKLx z#J}5HEq^plY;{iz`*pRuL4yFjeB9)nwgSD0MCm zh6sy!_ROf{s7-#p;_(c(qOoKvU$N|wDF`X2v^hipcsHi1>d%sr6G`%tlCG*E&V|o~ zhsc&GDATA(C|&kO<8GVr5$S{MZ3eh=m2jS*pa}E~8fevvU3;!fzLc?YtXPvhlToR% zNQ+=fXfJ&z{_4(7(E@Fk1|c;tTuGxdP=hiIbb}_Qs{kyFmaGX> zsRh%BOaMw#C?x2}*r*TcpzW=xy=}eyHhQtM+itF~0{1mJ*pa?`d0E+OdBA@A85Osk zhMp}zkNYaBeLB9<@9OPpI;v@DQBI=wq5ssbR{sI&I{_=tu@T)vr~ZzW0zWCQ%+SX^ z9ya|Bp8|-s7)X&9PzBrT_N;L#d&E7v&HgXboGEUs0c0wKtz&0^6}IBx=JDbU<1ypud$iBpS`hmlr6irD7)wT;q&y)d z#a4`*EOr!-gmajzS`i^>gzJ1bROg(vW_ZNflOmKAD9(@Ww7O`*iKQo;ye*b`+?43v^N!ZozToE&?9uSqpANqY0V9*zED=1fVJ2gsY$)+QOw z=uNc%1Ag8c;_ozZexhzEpl(YffT0X%1u2A#R1k<4B1nWJ^hc0M6v4DO4LoK<0Du4s zdE3>e&1aD~j-fX`UXey&n3!aoGcsO1Nej3iNanX)D9_>*RUO5ts~5Ud;DXAg3FjlW zX0UvVm!sRl$?hWqia96imW`KA2Covv3z{KjXHO05 zy+@7J6@yAh zDh?Fw=17d6il7OX9`}Lp5rqS#ppb#2`%>(K9hmSy>^`4q)~DsT5}Cjcpc9CImceya zk1-(2PY*Y>r20#Yf7RAS@+=}y1j$DWfFtRUQSs;t`PM^=1X-jKdb7g+nFx}iq?7|g zMjdBOd3}fZd2YF{477KDu^SnIwvB0tMgx)yU7YB~wz5P!KJlsNT69xCxw%Bie?)Df z#=RG*sB5NE>!_@(Y;hRnUN!0}HT>mJAJ@EmoNb1@j6M^kDs7XIspabC&fEO8V#W}{Wy`cX9 zAi8E>RZEa_&#W5g8Sv;RH>+T7h+Fhyp)YD=M5v)%K!e}~s)y)R>trhhU-hRYaiO+< z6ZHV~|KaScgX3lrylu8)=GcxIVv3oWnVFf#%*^bVnVB6k$IQ&k%*Z5}G?cDR*z=sT^ufg{S;W z1@wg$V3SbDIJO1Gj(IgsDa;dJG6(O_kvCv8p=1wo5FTu1tmc(1s z8OjaHQKsR)nxSdLm4m7vTq%@a-bX8QRw@nW#q#1w#>ZBPJpo6p_rN;qsV_+XZ z%S6V}Ldz2rND6tpho3OJz;SaC>%6^9fNf5Ju47Qgj`p}t5+WgdSIKYMn!`iyird$i zjj3pKOsPhDNq-)e1#aKT!9zzc3d03YcRN76sKN#cfHRv1q;`82Ap$I2~vq|ydP2rr0 zdUo&(Lm8)u{Lshv79muwj7fc270Iigf_r0 zNbP6{5zWOMnjW%F+t&DxIcOec2f(k=MPz-wV>zlO_=Tri*AUp?HAqLxjLc$-U);$G zQt`v39?8aPKzAqn!!HYk7~{1SLzds|0@yf~tzT1Db)S@s$go$Eo*`OK&X`cZh~6MY z0+Su(`^*KtIRCL(MZR85hN3Dcq=g_}>?~h{1X04t7&0^+)0FV(i! zeryOEEG>Phwj0v$-((ndArt~aPR$|CYzwmVah7tCB%fh+CtE&OYqyuuZ|^SAsO(Hv zLg`rY&Qs3WiH}Fue#us(`+d^gu-ToyttnG3gU~*s-#{7tm25}#cO8Y@sxpid3~Go$ zr`5Y#bI`#YkBfHYWZ*A=r8nOgiR(k*n~W z*<48`WYsZQRWR7_qg-e%@1Ws_*~mY=n=T9`5Mqtg_6I#&V$ANF0~aG=~wTVNcQ00?B-Uv1Ll%-t7Lfo?avf zP=P)@zhDSsc7nE0APiKGtCJuN$M3D5ko!YvQ+%)I{wKIBaDQwZy{9;M+hbL@hKg9> z87>4-#!h}cZjnjB0U83)gYJa62>y!_e@fgUmi5nvUY$^etNez!CGmQ%0Q~Xo%Fx;H zImub<5;isa9O2Agn59d~_K?`DIybg(AIw7mS{;31b$(9#66W6gaxK4E@)Cj)h7!z` z&sALyh9OnF?DxFOR)nu>)B1I+XcU;bg2`jRGXMN0G88`-1rF>fM zC}ULif@RJnWKBg2>cNYsG}G?h1kF6imtbO@T0IYx*=? z`hChLrA-1S_RnO4Bd16(uQ96mY&8TmT-~`)k*|EBS#r8^bcL+NF2c6rw!&S_sF>j3 zp#d8|?dqWOlt9ahmB6qf3q|J8*Jeoa(?Be>;Wx<(&dUxd=>W;`gQsf@SGZ*3qHOalKP=Pbv5y5MJ_Q zfzLB>?QkVsS?MdhlXALe*S`6dr#b`5Wz%W&50v=jhOZf!?59yXfV}ShOTeUmbXF~n zbe4IOb3wy?CDbhXQ~GnwRjv8kYLN=}wxKMN$hxXX1u5QPb5w;#K=cnrciVeB`Z*Po znuDCpU|y)f0RjLlRlZEFvT5I>{$$W63gCg-q^ z+EbJ#=0Jff%RT?nyJO2#H_M1@sUwA zf&}~W;7SHkn>&rXw*_$P&r^};-M@&gotlVSwSK|upHTakrtV#4wrIO3XnruFaW_zJ zrWZo%499aISp5i=`lz1Ezrk5iI{&4hAfyP?9F4M`fbR3Ll@FrWK6`+dMx4|f1s6Ad zH*HvMZ)!(i!5-yU=_tJu6{V#P=H5IY-!sW3I0MmQ-={p~>UQX`e@pD?b?CAGO8f>& z0V$6p+atYnRct?es?WD;oiH{e>A685u6m{UZsP+C#IgqrsW& znV}-c%>Bu^2-tK|6C-L?S|E;S#%44X={2`&W#~2PRovzb;YPgXx6!jYS(6^CM{6tm zH;i9&)7>zu>66`)$dl|jRPW+FO-mMpW(0xuayK0NkrnhiIsTh zTn+62*SotZVotjB3~bD7bVHK&U9K)>6V-68HYPt+XIV~LG1Vn2&StE#)tRHce?DI- zZVa_Ecz%7RzN=oa{^cuh5_tFZSn&}X@pH!L!rHO#Bmq2H9`r&tnQ}GDM#G5noyE4q zQ!^dx_UOVjXEPM;b+3wBu{?k%!j0N`B%kc+BCprMwt=bHQ3kl^-e9m!OonQkjEV&p zEVQv2d;u`rf!z_&TjMdY__rQ8(pS$hMKt1?Q~6sNG<+L!GOt}rwJ@1*O0+N;cY3xc z8gVMMC>nLrY%u60vANjb<@j>;GMO2Ck6I^YD#P!NxV(_f1$5?R$|A4=Zi%W6u?%5) zk`2dq;y({+iB&nV?!~$SXUL(^P;1O#&@f}nA=F?{i$mqM#r!opBlw=X4v+7JpsrG2 zWlg;>?qnCm5&9Lic<#$|AxLzwW^XL_`0EZLz1LOrDnQr(48Ko>R zDe6b0iY?`hyRF^$udwpn=G%&w>%2^i*C%10(;zt_hMhQQaFB^QxDjiNkt~| zW)*xtie=!F(@Mbr-%7rv8DyMgtD^>4o&HJKY0viAO8fFVUX=G4kcZK?RiNKzD-Bk` zCpjz7aN|8`6hm}o->d}`9A*X?jm)r8kRN(DUN+|fIoWjE+&XtG1LRg3;QYof*(ju$ z;e0&JmJukecj`Zc-4LffAdOJw5&kD_i0MDqFfr5rlZJ`mQ+xCe4HG@{ANkVXG)$k( z{=jqou3=(e!>9UFO-D=1jL$~L@K3ZM{=d5||0R9; zn|$dnZq7e}hL}I0Ie$Pp8u;{o33L7#D)jdf1Kpotp#8M?{2>+n|6c#z`fqDymOr>5 zW(FpF78W{uW+rBQrq84NQ^)Yv*Pz8`V)8~HuC#LA{prk)1;IsJOprn8CB7L6B ze^`+IH!l+NpX2y*CRrI+8UMja`Zr#rzZ!n__zy1<9Ubj|z)7libM;UdXg(ZG7n+`O zs>2ydJR{O*Ff>?-wRF`XriuN!WYOQt9I~iuQ9B0{fGpaLoY?!rcEuv#J$BXjps)%5iOBirT%x`hEc{us|CzJOteoljGP`oIwM`HfSmK@I|TKqaH2ZZ>7_nP1Z%SA<>p$yq}Fr$s-7_>J` zOLE%)dK_74t%VM=crT$f=shelj`q0@tG%tF-g;SW=)Kjcn7eP2c$em~>tFUtr>+w6 zIyyEzL5GWwLxjGF;v5F4g@?a?xDicq+(pP_n^cFV*N6g_AX6u3?(e!^ z7aE5l=}*V_d*SWLlOWseXQVvr-nNx_2eXIY%N+Fh*AO5a@w^EG+iM_m+-$s7)TaQ8 zdEC$}Ap#%louq|A5tj|ibf40}cadPq&p^p(23hfNxRVkdn6D#ZX-B_c_DGVe+bh z6Br2*u5;yQq3n-@HKuM3iLF2yFosAl82ssDP~1{M6~Q}0?G%BDDn#@)2LV3rQ$2@t zw*n5Z%WVPc!dd!g`!-+?J5iSjDSHgw;A14TWe&-fUjRXJ5jQ;>&*zr*Sm!9CN719z3L>5cM_OPCb>#Pog_EsVXQ8<+UJ*X+sdZ&R7K-|5K#^h5ld$h@D#1izBz=vBV{C4kDsQoG2M)$ zIO|3tA1FlQG@S!2#e*nzCS%D_4pzV!wj1)0ug!12YntJ2xo*o(7VLWgxTU*gy8UdJ%D5$a<3=&wrw1K9 z8+A_UIRykN>3wV`m@#T`cp5(=Ftn$vr>vNqr@C707o@28Dq!TBK(viOoIUtc&*cDx z`6xT&;BLnB=Ioh*V}W6SaA*e3=g4i&vZ^DjE1=nJWds(a=1hMM#4LH@7(rV!5 z3a;rZP1gtz1d#C6mWiRa)ml z<0acG{5zs|P$eR`91@BcNea*saj=Uh=As^gnm7b-|DaP%5;p!r%!}_xRBYTXr)$_ZCU{oeKs~X&b&7G8Eh#UA4=056F2UR#wO|BS<5}w>roYcmX z=kmjx$AjewB?Z4IrKn^~S41XvL*8uG>v>?)d4H!P`eGW+5N5dOJz_nOCr4Y5a89CK z1bWgtm!UHWWOLARR1?{s&UFZH3hS7p70H|LT%d7>GuH1uC(eP3ziYU3ILyvl%r<61 zLv?c~D=z88Y0r?OmL5m{)8E6z)Mt$L!#HlL^Tbg-B2|GL?Gq#gMkF(cd2ZjU=}EV| zXJJMjJv{Ekd+QB8_0=AT;?*%VSpcwrprn%r3$nM#BMT81-*pn7>^z&D3KB)M>(Hxh zZpV(?L)P zV!S^=(-#tFYc^U*fEwK?61QuM{fCJttD<87egXPEhPgd+pnkcuDfF5wTh6=h;w$)C z&UbfXV;Nu4pl>RyNdwWf1cehxVzPO!$rvjb3WHI$zrwm4Cbb8UCXPZqzu;0`j4Z&i zLOv%s4HSDF5}`8e4y0yCRqu~|wE)iq^YV~$mYhrOG?ja>on@{)6Fq4tEW|xB>+e73 z(jjS7Kp|M62%dG**N-B)zw|q=bTFQX|9yJoD-FXL6S$T_3otRw5=iauwsM7-ByVv2 zbY)1V8ryYKW)OUtXH^TXWNq4Mh&IrdYh++Rui|ij zPMeNQp6cyRi)w(tDc7kazr@~x6O+c9Ix=CvI#XewjP3QwPf$D~6aHPnDe{VE0u?W}|Z6;T2Hc>exKk*pOyw3QJVI)OyyXMdbmY4B`9 zX954g7E3|m*j!;pr>bKzN0XR^m&PD6jVeSGf-bB~nj`_k`ON_7fb1ef$j8Xki-qyH zQFin$F!L%(r^7W6XPfjAgxnY?I6aqQZc7#y?y}Z$PGb_ zLm(k}^!t6`#*ds)6RoHFqrlCm26vQnmzAG^4ds*C{f6RxR?!~n$(22)S9Kg3S~Y`| zd6;%6Gisr6?r=FCN)+>{7lisn$5zlg8rpWR>Y_723sKlF9=jTng4IIK5yOaL*DK9O zJ$)4Zjv4{ZZlWjAx~NyaI*4znkNkpy%{iIHiNQgrhXWa_NSp^2n@ES!~BcvZ7^<9AQdT;xoi zh$ooWJ#w$G4qD?nW#NGV+09{8U68NTnr)pjQozU}`V~)We2xVpCt3^BdRAsfi+Plz z3v0t!T_jvW+>GdbeoAEIjl;6AOWW+4R#bXu$W5z(izy@~ImP`pwaMjvXoo*8!k7Q2%zgnq8UEHqT8<})anJ225ax^$Utn~IZTTyBq<|32fC zGMkByuw>MmOH|kD9Gga+siWPylK7#bSzc?5iH4~r!Q~Kiv)k`lF6QF9OcquJKUxBo=a-8axITFg zp7Xxkl@A_7X3<#QCN>=>W3sLc%V1W;@uX&>DvE|R1Q;nToEw`>`IQ718lN1eWzz~8 z83u4=rvC`!kCIJV*H>GZH?pcVtaq$e`+ZxlW?@@PVLe$}(sZo9RH)yrWyn0W_I2oc z>R~OQq^6-lNGsr?+j2~6HnygwAaTc#N4;BzHr@qpe)x*6DF;Xttv9*VAN7IEL?|)- z`+}y1yG&wVdV&$K-tskOv@rs6{9>y-DarI+1p3pZDyq5PS?}zUm`Y zy_jDAO$r!U$EMl6#B4=GTQN-D>N&!gS7X9nI3k@A!RgO+)Nw z4fY5rO5brJ>QMu!N>;%7N0Czz(~COe=X5RG-FBw|0?lquRT90;B+I4Wtg7ZXb+;4& z!a{oAwfUntl;^eHQ>QpTp`Rtb=j$wKHVP;s z@VydjI#|*Y(Led35S{IM^K(bfEgC1*4z)LNZLA$GY`h2Fl3$Wv!e187C)U{4+s33; z&%v~j7)zgD6pOJ~!sgbGd6|^nTKL|@9n>6_6yNtHHlh1-=aEsH+z7Cep;zUPaB8J| zL9|$GLCK;VFexo-zS1e@cIWH+tO<~+PJ<#gg^b0vItoUODPyWotCHZ@7&nW*iS0A{X_n~G;> z>Xk1psOC>Iz5+WqhmJfQ98}WAF`l!SLeFa%nnWs9DkwOt#|-pM`j&{gYv{iYJCRQ6 zUd*}Jwve6Xr=}TJk$n5?_EY)E>gwz!W2}Aqo%o@aElb62aEBBNu2r=AI9uxiiK};q zF5$tr+G4fWjC=MZ^uvc6@__hKH~m&EYNth(%G>A|aC=M@BwlF=?F&{!tm1vAToTTw zn}APQrMq;Hh?=wzV^<{=4Vp|O%3Gto>4^h@sXD4#zr~J@tt#6Y@wa2IQ>tq(O)`J>Y;GS-aidV znH9-W#8BrMbsvA>#gFkDGfj!X%f$kr7N99izY$N6q!DbI8nwjagKF_ctOVj^dncDS z(B1>I#J9u|vh1=exn-x>-``?D8rgbc01X8gvxTG2;CGlM>;_Ag&W5K_Q_G`%q1Jks z785&6L7G9e$yFs+Ulv|litbZuz1Njnn@l{OO+K{skQnZq1mLqe9^({7Ml>m2#^dY@ zy%kPquigAlij^hytS&FHs0zS5t+HIB9HzVjS%iRZ6{|RP`;Aeo_o?n-tHVnCa)(SJ zQ)JS}Ynw}RX;)6lWk$v$l@(JcDN37oexj}m>kX%Oj!l^DC@0eN21X+QZnnKDa-mIB z3gpl%{1hQ0pynWt!e+ym(4v$l(a6h}CeeAO4iV!8c`T_p{h<>yb#U24 zm99cISbpr1GYTk|&7WudQo>$etXxVp{+`}?Tb)?L78zdcEw-ilOkmP1GdjlTS_oN; znm1F1vu?_S9&u7?)iJau!|lDBEyn0S{jg!{9-lST> zI)z=2)2~OpA!*H`VM@%Hq7Z+vjj9ou8@Y4pFO{BqS9C8tp4+@IAD?U2Vww3EqR43L z*EX-Lg`{_rf59nP$FeSOr0(F6MJa}x1qbPx&E`r*m$V*)3bS|jEBiGlULfz}vJe+Z zpU+}2+-ENU$5&rxA5~~K#^~vCrFpa6XP*a1NW_IMTwgS=WrN!+RpeueZ5#l!IYManGZ|-25CH z#ZG7ra?mjCnMON@tWM009Va%^ShaHgfpT5Ta4HLf7c->Fd9aVI$-wuox3(v44q;U7^vaww2wPnaj?pzy4m!m#0*)YV1ZOu8ng%U~4&G+qqLI7aw_68Lle5%>ob;&{KAfzQ{=AIS!@s>2eqLs;_gaGpV4#)W{Uf=E(I1 zct(fKon4(BGpGt1!$_P}vRAGFVB-iib{P0-{+XicG+%S#Z^L7y#P|a0WcgGfzk_!POw;{t zUtJ%v1+Qc3cH|0=<1E{iED)y&DxQcOxg^M#LZjGcjT1xFn5GDmmk+p2qi??Ms~2eY zPjRYs@+9CmWMXyDns^NSp>9T`B~;SKR!9N9Q`{kU+ve#nR4M81;an;)a1>A)`Ep== zR-X@z9vmos_4b=j=<~ArD+~u|ga)A4IAT2!Fbgo_deKcMteiP|&sLTyMixmU*~pci zm=N+bhiZ1-6_$Qlw3($0B6-2;F!x>Mk)$Wb91>S4G`& zqDv)B)wM8EJgkSU{1Zi6wuN0Qk(o3yFGq#t(a10fNz?Za!?x4(xZwgIrn+t(P>oS` zLYhgd#A&^sAq-V$_wmNyWGUM6+A7>mFJ1K#%Ot+}?h6hI@OgzBVN!VGj0$ zBS4f_h|I!c^;Xd{h7-xe?F)BxDX=q&6rl8f)95=g?mBn7Ln#QCOvEu|RLIL#y&0k{ zYf2`~Hm}So!z(;593L}s_8p@Ea7ce!Qx#Vu>nollbDAsXp*i_CySrgsc-utS!cWj7 zx67;NDwM=Cw*EN4Ow?sVSB%ksm>8$ID*6In9_Z%zy5rCiIWesvb$QPlma;JZ>MJh? zM;3Aqrl4>znxeoIOd%2w|H76T^*l1>)t34jn^de#?FIHrI`Dz>l` zH0fbyy;LAE{!xa^5YrscmhZP@N3NRIy|e5qiJ~ik;8H+yW9K%A zelu9xoH3)uwR+gblKhOWv_yUR$!r-aMVGeZuU*-Wg|q{;n(Z~C#8o>6bK~A(hNkfi z+0CnsQ#8x>T+4^bl=kVwJah}!xn%c=IIG#>^t(=hs*!kql<}7i@4WVXd&4C7kuCoK znpE!gL~&&pYbOeP>bUKsT?G02wXzHG;FB4tnK5yg^iFZ+_dNtBdwDWQYl;sv9NmR% znG*a|iQkj7bAjrYYO~S@c@R(!VI`Zlu69`CSX&$ria{%);PoNTK3=|IoiFlwZL`h0?> zy9}Emi=sHS@>rpoaIXMlmh)H`5TO6$7O9yi4C;(a4XMd(_k`hTt`n4;E$ZRGE4fMP z2M|r#VE8=x5oZXTXdTEWy(UGQT-NcZ>m7%^f+>le-OQhrA+KVuIJ-VDg}^!ABkvJH zAfJ)NQNJQQ2q4e?eDkd2RXAd`!;XxX(PfZ5M*u92dkfp0wwe!uOwgg0LPdRH#)au@-5(XQ@C z3dEdI_r4BVSemyH4eGJ$E7m)vM+m++xfhHbNM^T{AvkP4F%_A5V6X~XZ?H-r4hZ(8 zetx%&XkfPo+K5*CHP zCy$QD10F|6@`&hxg&(`Uq{yBM-xCZ1f)s-Bp$sp19DHTlNPPbINGOV%u(BhPpU(}- z6W*`T8jdIY;^_e;j}%GARoXHH>hpwqC2LZRWfxbB&;jK55<2L>E8XeLe=+kjV8;c) zF!Ptsz^aqOOO%tqG8UdU|0|spFJ!aIo>i&u_KO#Oxn$%aYeiEcxxb`Is%)0un<)q4 z&n67Z0W}*n}jKq)u?o3k6b9e1h-Ymqc!+e>hc%a)v z&aIyHomrY8P}{AyvoF`34BO3DY}*%60y{6;ErBL7+X79XSU5pTu2~$UoWI{1WuPAT zX7bEy0^Ree6T`aK+GxmdV{jwkfe7U&Pd74kUnjzxc~vy}W$492sZ8^FPxFcbrmnye zaJ>0doi&d+s4LdI($z`ebRTu?d;})HjM`^kfQLqyf`{(~HZ^&?h=szk9|uR`{>(zj zr2+CUz+3|g2fqIx z>L^Cdg_S!OGKMEX5;rR9Qq~QhI~IP((+DZ5?x3nRF#@%wFVTg0u;UJ&c<{crEZiI1;MbtS*ZFcM5*O47lpB zSE$Fq!0PK)QAs9mu?M7ZgieBOoNF;#kRs7NEvKXCN7klb$Cmq*0te%T_e|XQj|rX? zo?IKl_pu`0_r@+%ArId69TT)|y1>VH{_l|vAYJ*AwB#tA-yTfR;s#LTYQY+A7YjvA zoGldGWPYg*kLEuJ>PJcsOrP)U;@DBoI$(3R`s73Qv+}O{+M9Of0kf`0_NK-e;_`wn zamW+Kv`KN&r$Dw*#nlfPJ|eOq7@BH|`@ptSu@T4k0y7O77R9!O+F2J{H?T}g3pTUF z)JYg-^U>q5Lye{7&qwn*k9s-C=7LUC;~mNpCz4Fz9G$^2;b8h|$UGqF(8yvR-3>*# zZ;u?87~buD&btP)I`h^^CtWuLq1&vBUAWnpfz=-KOE?H7K?3e+x`wk^`SKl_?7sb7 zJi!7z(vM+VAACz9y&nX7eA~^!Pg2m=QO|T5{U31e-XYpc_$b?xrQ;BjP3J`7vy(GW zzY?bNs!D+0&T38W8KGWHGk%Sxx*tog$Yf{9;Sn&Ur`lgu2QDuGy;y$34%DY93$6B% z?<6Vlax6S!e))p6MQQ|q%dW3g0>1;llSlI~BzMdQt@COacG7VCjt$AfrqKtw3?%$0 zWv|r%yisTIR%87tp`g*hty9|3A9?r9>i5xiRHB@%WYCID?MJV!r8+Oq@Id+bAKyoo z0^Sj{nB}GaO|a)b*NFW~u!r$8E%EPyJ#5VX6zrk@%%xD#f5u+uXg|{@{~GKO_~&2` zm6(H`g_*%W=XcLKcgL=*$|9qJ1Ag1gxl93E6SG_ zO?&tWVyG|$0P(s@ z4?a?d-cdwr-y3>XnIp{&7FnG*{t1q)rzXcW$`$R7z0oqLgwL?w%X}l;EtGvT0unUV z)@pr@rRTtf!hGii_?GA3+|1gF^Zi>-iH$bG#Kv50NuG(s0A4?md^>-L2iSw|qsT{{ zs9@37A-{wg!er+=YcCOS#S{-(Y;^dnD5&#EG%jW|Qc5&tUndhx%g*(9m<1VnUyh5R z$d}2KL26c6WV`Nft7Mq2ve4o}W@I=<*^=>&PkgLydLzPYrqI_pnv7_BIUc(rz=}T5 zQ;doMg?X687zx?(sDjX`p~g8&#jpuK#d3un#aRcecLY{BXz3Z>53UdhL1XSkQ65lS zX!s$g1P+PW{k=Gz8jx;b%^&iJc;6)A-s-N1Zc!ZY2JfhD_Y6M>93b5=;AApq`n?3* zFN6?sMJDBLiQUkjo$|irJRBT$R5aCoJL6}`UYXQ7WI9bg^iEW@aRAFApkfPlzvA9h zWuB~sz01YR&7iHQb%DQ4;ML)}wc-ao1iH->G^u<%8yQ2M4dE|_vE+^F!jY*x|KZ|< z1PIn%{`$5O0x^Z_!15c9EAV$t8%)3Z$sS(w_9M~ucdOZ8ZeLQJULFz?pWK%z_$d%| zp8)&#GLMie^ayVs*?iAeyzCRoL2$d|)eu|~Ez`(cYgI+n=)~i2x|2E(nHsGgO+a(e z>dbueg3|iY@(H;))yU8%kte_PN7tFv@Q@RqbBZ}eE-f?DHe(0&D!TuFx{6z|r9vTIOMW0(OMLHIp0e5}vI_i$(7~6-!Ce zDKtz<@!e0aD0e2#-+%8*%w>pGd(wt$%30z5Zz(GUic{KEN81)3>M0^W2zOkr&Ws(G zXi`sZscK}oUByLwO8TuDJvY5xlQNIICxQ)ADDa;*o_z}TbO(ALtn2RO55S9p5|2rS z%xj0%cE!%Gpmf5I(5Hgf6e4(JYc&MxvcJaa_t`<%3P>F9#YME15(TAH0OmGjlQfo0 zw;T`(?&9u#HTa=w`Z+>1Y(LZz`ORq+()L6tM-%Mk!t#sD>KUjULu+x+D%j3b*cg5u zNJ#xIC@~LEnpPJmBO))ZXVc7dfsf}+(Tk+o#SL398Y%E2<+b38Viy~pPq5=QO!=EG06rL?2Xo8z&xrXGaPb8ohP1Qa4D3rRr* z!+{7dVWW7r(@=PL)H^=}OfE4*i7c~$avBIJiRXkHDRD-s7};R*<5X;y2Cyr^Sjjo= zSj{2g;)8BS5C7^`KV?VjP%pZ)DQ0qG= zzapVAa29#y+mK}<0c4;_Ge-sho|#gLOBJn#C{_iYm6>QmmKf0{*4NgX@sAQ z5x}lUT9=Iu{GIy>xD3gZ_0@-CbAR{JYg(X?TRID_=iHtdH!YVWLY1G58ygJVe?<;4 z)5cx$>G6i9Bfx!g{tAJp(q<&N9hIyETNtEaOOX>!DUW_NL}jP!QugCJn z9@!yGSBrB*kW&T(2yNq!^beTpT+=5f!Oy$Wgr*aZkgssvNxA}@riHN@K0g_~&R}oC zS-s`iD(2(O%*X0&jl|T=>m^s`(w8@do%6BeGfIfNsBp!B^#XPMk!I+Et74k86mwRo z86+Ehc;LVw?3vjW`090Qu30q0JiawwPW)8uU-lM$-wTbBxw0@*YiA;1TTk3xpKkZ~ z_Vi;KXUV^DtL@RPm5HA5{_(ZZn(OwxwfSa$ZqB3n!laTqy-^nzho_%8TDki2yKX)^ z3BF=TZsLr+k}7?2`gcOaBH(YZ>TS|xXy0zBk#~PL<3{d;vu7-JVw%w$+_(um<*ny( z>I^0!+z_UJ9et1k_8F8s=hf!Zm;Gacfmz^=VC6;&nCU zD`s8i<^hs7(W1duH~AEu3kyf&&l}Io;{b8GF~q_nkmqcoWX0WIXr&H&&+H;v^7XZW zFjoY6C99@@P@POfaSPizVn^FE{a~}edXAFd+mxVFflvXl5?xCkE@4Q??3~eTDnnW< zJ7OLE3O>3|JTnXW$o091@i*VP>`VsJss8%mDLUlFU6Xx$e1p` zSDW^Wwk)bH7(DP2uQea=U?lW7sL7KnCsPjL%f-GmHbaH0<4v`gdDkEGw^%#YY%9T&y#=_S{b&CfX znlx!+NyzmrYz6qCp`l;4!wR8%2eU{SKTH2$&P@Qq@BJa#;wfz!b2xOs3SikUCApP#DPF%=?^zQ*r6SXYh{9a_jj; z1+JXHtOe}wXJX1r`gs$omdx5&8tM!!_XSid?WyLbtR2ivH16WkUee?Dsrz99Q8Gif z6=asKwSjgvZ=SVf0NgeT=Wnh{?svyZ2;h{)6PM{}%5e!PYfK$pQn3v8?Kxe3Pfjfb zzi!h_goT~X&kI(h`;Q7d*nn5l0iT`; zqfk?c06%WrF>A!Pp@@w0J7#B+`vxlwDrfeDvZF)k=9b`GVw9mus_&uy3e(5mLdzT? zO$T+K@%9S}AfPm$882fZD+e{Ig{XRXgC2a7ywcwiuJ>M-#EumQX^b+?vezP&%=0{c zWJAE_yqz&Pd`a#hLmY6yHlY+@N$4D?anvd-XG)!1;nA9pCib|WX2q>Ue zsI4QbmB5OxgAZ;?#Ui2&EjdqBqzlEEmChC_uSA-wFjUC^Nf?%usgxWDdcTUZitb zR56V6ewywx@iAj0ah}p;i7;`?+|r1hrO*NPQGN3n`~%!5Xy2%q?7Bi8?>jY5r`xL2 zznkVq9WcBFMgg74rFnGFLQiQB091wrGo)1FQ+b#=s@NUpXO{x0n&eb2N}ZjXSY+l_ znnwX5l9Cn?{tVGT7^dzG6Q{OBwc%dMhGcf=NLd=(j1fymH{Zpn1_M*g?UACtnEuqK zwBU;$XGFeCgMpDJlT$`e0_6Xe%mv7g2?cd7DsEmxwO$Rt4Ge!1fXg9Sbg~onEM&Lc z3Ezk!I>~jPZ&+nD5u1?+>>}qPfrH#frmr;}Ufzs&*oxu~^N?kBCt&9BggDTuw-qht zFcJ;%coXyLL?Ls%exB5g9EpuF8gW>^62#}YsV-jgDGvQ0KlF!k;+E+L#QK%lP^s}Z z_&^KToPjLBweA4GB1IvF$Sp~*gQ2$IW-+g4QT(-2e-`@%NeRssUC>9Kv%{r+iA0j* z`k1-AW*HhW=vgIszeu{}zs|eVhlh*o82ONV#3DR}jqbM}F2t_fNX#lcm2)F9Jh=;1@VE=_T!`p)uZz_uZ~L6+1B@=Z}6O97anfdS{_a-FbslwlZBA$-Zuw06X;=mJ^5B=lbxld zOeyrCe9%*fp=K@1{*Rp!b}zmA@*A8SBBYmg@ny=0i>zQgy0dNRik0mVf*7z>Y}yD z{bofO0^U3?e=KJQN&vbjQK9SuA#wy3DT)J};8efaG-vzcL!rW=K@!aCHPM1W&^tWe z9v$+5c;33Tk?r2wSi#@YLm22inL~E3z_;?oR@G72k=r3{V49(fN5Dll_LNA95C{O% za6;PhLGRk!lezlMmr5-#M+=|Gwwf{T!guuUJu1bH0mhm03D7>4$P?esVVP3sYALpxf@uuw=q9~j)2z)l*18${ zl-L#;J~~yrV&_dlWYKsQXVW`Re8R3&Tc6uI8F{>_Uvj$DW&-SO&DOO>TD($;*mMXz z_@pfSsB7@Qlb4WqnA@uWS_xi_`NiEh?x@;!vY^oZUvXa@mc_R%OgDmbhje#Kr*wxj zNOyOabc0e#NlHlyl2XzkodSY%h$0|-^S0X6>0(J7(>@*6!R~ z(Va^nfZTa9X3~XN)16_>R5e`Bn3`6czLidpZeHtbmqs$~uvPtj#@4;<`4h9kACh&b zb}&4_B{WB7@Z^n{dYX1c>2umE@ERk&q>Hp@s`%EyRbPd*wW5kFISIqCe~3vMt7-J3 z#zs(F>y5pwaFIlwS`;|kfb5!TJ6JsPH2bj-K8vm7w&dva&R<_o(^kH7ydEd(d=N2f zVX5BQ`_xd2r7}nNqQ7HaxV*eXuNvxW@aSNwBg|K^c%tG*kxcAbnbQf1#17CJPhmB- zq-R7V14JW@YYtopvV@AD+Ee3y#)~PLjK5+p(m{gzQIdi<+5ywoJ2!|K2ld%ZJx7|P z+3I6qIz_Y7vMwGEvGiXF@83K#;42IYKkaQdUh+Lbi zf~Lww5g84haDYIJAvE_g6MTXt7P&)k7{ux%B;%1xa8-$x#i+4LJ%r4U7&x?Rf$b1j zJO~-7_ULKZgz|y2$)#I&C+~CxnC##Dpem`Y+QO+}h-D#=l8Kd)-$a}UH&jVWt zMkYt5J)RP0q@D};8Rn7mz4WZ=&EJUW(QZrQz07)R*wf$hWOmB{o}#r64lY(smXVlg zF3Vg-ZT#sXy$v0mvjsgS3-P|C5K3YkHf8of$mL*Yzby6-#4zp$9wZ}GP+jeP5&}p_ zkXub*T_K6z-32kcJU(ud`0^O=gl^~#4qxRROE%3~r;E*7Nj;5_~)o`8gp;XRoF*QByozB<<=WY5uv!?pS( zv7PgCtS^4s(+J^Isn1oiNgoMbP6vN_wqM;2hq{I8UDRqYg7{Fa6HmFbO;59vg*rvK z7j8F}zz)HWYyyw*l?g10)8L555#=Pz5XIiZdt5VKb* z^?vpY{dqULQ*I+pLzH-<^rR&lOOp8l*|-;VQ2qwheN3{oyidkLG;nOFlGd*ppjkJt zP{|p`DcI2KFS8SoV`-Z%`MEcx^4G)PL1a;H6}sBZ;UTH;5Egz&VUfR(Zv09)Of#K> zb%`55k=0yqSQPXl!4!Kb*pmzAm|`(1Uix8-x@nwbwMh&2QVSjn4o>M~PB~XOc_ubw z)7YQKI1G;tbtC6l%GMNP;_2vI8=W*OaL1{i!7+5GGe;uQ^;;WBi_@&Dw6H3p57Md? zs$|p$ZB5w55=K)~$S7uL+}Bk)(J3BLn|*=)5C)&ix;5>x+H!D@w@uLLtHk zH5{GRT?t77i>jZB>n8cPPoq(Y;WS!EOJeBrRQsL$xoG6z8YUFvHE|iq=!)Ufsw|U& zt*9)QVdA#j2^U0pBDHkZ2efjJ5Y--eWk;7%cHhS(yAXMY^d?#b$ap}iz21lZ{<|-7 zKvj$Dewjx$Ur0dBNq=ehr~@*RO9OMj{#8&&Ackkx2Y9*7VbqYZzJ4Ze%jpFLy5Z16 zmX_89=50bB3N6ItU_CYCjhzJ5M`j;-kM7Z{*<=k>%TE;8uronNGRGP2Zn@wSW)Tk$ z#kCR%aeX9S;e38YsbXGJk3lNKPbVeuy7)w~ad??v5n!Zi$`HdVd{Jov6fafb^YSoyK^^6LYAOLGdsFOlh&OI zKc+*^)v z_hjs*J@)MZj`h>^`%O06*k58J*QF*SdU3`)$KJlL<;|a{^nU4AJaLg$2`~pkHQ!VS}Geql)E6N|8!6q-4BvCG!>x? ziJOit>t!YtQK=YiS=hXp5IdFfJ9*4Sq=(g*hin#AmXKT=;?jhJDOS^0gv4)bP0-U0 zsl6VF=RgF8JgP-Q)O6&3o_ex*J3sbt#VT zIa!07?M~WGl=*N5U)k2H(**;(i;Xi)iD|krdM9jo3IpZH=q_bCyH>pJPRRu#8tUu{q(%b!ogle;84@HhpLV5$s##M@!k!m=5{u zEs1A^q!OKnx^r0*6H!qYLFb7CI^}C>oL(0vu@pd2)GBp_?y z#AQXPg9{*`p^RZ1jo^->>x$)xBr+xM+d-XSO*U*rd~IobY;g%?%TbsDw`+^qjR(ii zW(1eP5_~N}cd4aM`lG`qag(CWk74{8gSpfHFt0H|b*Rmsj!;?1*<4CeuCB6@Wqr>Y2jB$?ci>MM0hjYm+4>eez= zPbJ`CDXf$~sYGs*r`F5T^qaIiqr-{RFo~v(DuWP>Xy*w#ZfAk~3Lo=cyB%eVR^eIo zb$e)nJRae*_eEh8Faa1}qH3>#iXU|Lo=N$ZIWq4Cd%mIoe0wRrIIR((cxXn5*}`c2 zWVwW?J+@gx7R6BXunaAErCM&sg7kF?G3n#oC?zVkN&N4bA0^R#RCet|hWTO?Qs-Ro z$rGaUB~OaA%#W#(h{=a|FxbyR2So4L(V`HmF|fgy&*Fj-B0qV86D-SJ+LcmT{G@|J zIr!{k71^RQAb@Z=#sOMg0ArsDT2IXrJBX38ygOFX0C#uIMI=|g*GUkFcPE8`q$L;@ z-7+mgBK7ivxO_shUQK)n!751Vm&Z6+>ZQ~&x4rt#e7mP+Rw!aG^Xo}+npx#o1OHo> z`cil%!MNA6)(^~5)-$j$*`DjE>OWAFk3oKWR>DEW#popJJfCuJKol3t{KZpZKF$^T zWi3uPXbJaSt<}q5lT^DLgzuEP(CfnSg@*2> zZ9>{2(Vjni@(MzduwzV7qH3~G#2~RJj4>W%x}(b*3X>1*5I14`5#43H9A#GIBDQ|} zCb3dC&yzDa+=a{S^EeIOFH2eFF*!*YYj)e6TKwmv8o_UJtS`%L{e6}-7!KZjP&bKl z%Xw$F^(~7ieO(!+yPIG_O$lFh+)wRZc{H!lxsHj+Ji+7n&rsJ&P}ko>RAPcOntW2^ zg%R=0wO#bh3Ko=YH1wi}%7(x= z`tkUP)qX!hqt1wZjHVCc9c&e%qiVg4q&HmaD#JGj&en&D2h;oEA9+?(XOJI0d4{Wv ztY(|iVZd6V#fyS1f>GaT6!*$Z7~+q*KZ+){Cmu6qiD>QBFi*1n1ln5K;KXG9*!-R>E5E)BP8qqiuXG~Mek_ek5r-S;l z5x;kr9cfG~ni|t1E~3gWY#WX z3q8Q96lUIz!8mhmQ*6RPfjlQ&&KIzn5SC$#eH&St2+cG>imlj`dr?wl<_vO}k@T%@ zyJ6!{*Ql|XR}VE7oz4B$SrXsO_^fsXJPdN+_dHQydZg_)FuAZ$ILl&zC8B2xOFk0i zd*L>vbdR(NM<(uEb(oPFa%h^KDyguqMknx;RLD}2z^~*9hO4p|Vz)+(=oH1Hu1VFd z_k|rP5V4C!V&0M#jFW0A93dq<6OWKL)ALG5-$gH#EMtzmV$7~aH*JU1Ow`t7e1;~s z$*2y!+m$vTQO1=q5Rz(K<)>cB_hxQ3r`}A^0FRHKozwMmiIH?#m0p~VkNzC7DMyo< zM}g3FxMm(_(6Cg-*({kfngm)rEguzIp^n$=gv-GC+%rC%H#Igc>7NotZFf3%LYe2e zb9>EXaR%*e!js;MXROzn6e5+WT45>jn7z_4L$BUaWK(;tSQKSlPr-I?_PSYflkX(h z>;1sYnnGYBvV9yT-I0^PtMT?M>(kz4t}8~WKA7Q20c?zbW&H>6G>61)5r{wa-Qp!4 z;AW8Mz07g0e|H)|qNLho2mSIVHpdISDR%{~nff_Wx(4E=Z)vc?q*1;^Kd6Pi)$*}Y zarlYPme$NdaB5tP43(72jr0-wB-c_281Qi%%O`BZsv8_Lu^!lMRbh1L*i8*-7Jo}H z?>_X7al;rqa(KRazW*fP8gC5=76pHBQraaz|3zOsahryW%xHtZ97nKKK^h~F6HWp}UIu>v_-n7RATRH1szm%R_m@oGoc*@7@@3pr8 z|2Zy(5nt!WS!G{+Q}cKY`{p3t1vcKd^fKI*Q}!+7a^+7pp$)T-XQ8N|)9*{>Gf-wB zSb8IDcinrbnPUY^B8wEX5I5YbwzP_=4h&ZqTtaN7;vXIDeYr%+F-iD!e2~+U4L-kf zy5;Jv`xA+$KHp5}%LfyWEFLJl|FA@eR(3*Cmq44)pFS_U1{>S+ve?zFn%7+hRpZfX z?!M?MEwMGR+QxQs>DSvcB*jM1-%H;s-|H#cqFsY6^*n;dz&jB0^0HM|PJ&d%q9&YC z=jVRr$jXa+LasGwHY&kV-RU?Yl;EUL&tFYdWF0y5>H_6DE6(8Of=>RoVrn)D3ez>; z{W*c+)`zI)$Fy6~aIv&z`0HqAcF&X9u#%17owl8;l+ux{dL%Qro}f=0v)V@JQvJXi zYxjOB0aFLT<&Lf)l9L~SL&A!g(N~N3MUP(+zCEjGQUUAbOwi6|zBfgcKku~#r)L=4 z1femSZo{)t!VG=56l?{9&QihHW_Nt07bKU`L;)FTTBD;j6qM{5@*xnd$MODzDsa+L zPhB`KSuS-9*L(BK1{Hl**b>M05BlkQqOEChJu5oue{jKBgo?0-BJ) zlUW%jWKo8O(~QSv)F;;|k`0SsEh^PIdCbZJZFW}N-RD!mkdpd@^onncpcr9Pj!@Ff zXHNQ_J*nZo;P7JB7|b`%ncs)#JgLH)tihw^#A+FZ(tOMbGke^xgIXs-me#LE|G;MQ z=bLvL*aCTPdbo!xoAcw=@`sul#&oW?J}7v+av;$0`J__w+S($Vr@4Z%o|2A;Y~I@a ziRZgXjKf^JkI0XK)$U6nVWp4e;n}Mo$A9MRg=h?4m+h&^%j;KidbO)lB|5|Xyyoy% zX}uijiBBA~HN;(Mjuk0`V?T+&xKS3#w_h|<`aYuEnIyiklxpV88320 zu3itgUqugWof1-eG`gxp7CB2_tf3wapBedjJVb-U+Iq$ZSqk?+_MuslWr6&CohgI$ zFF!xUH5Mnf#a!aOY-{24mNa*-sSnmvwTfibb;7OZy~`84)Z@bk@ZMHLCkaUz(oyAJ6|)6%`~x2m*ap!G z?IO1a*kT~qV#>$FP)<-Ovb$NYvp+dtNvC}3$CHvP$&4|krs==N8M+h><47*O{^@9L zuu-1B7hPFNf?wiSy3>u8GwaiJ>0?8l(d73G>)^`BVCb?oMyCF-a;PJ`@8H3UHqZJz z+7^cHEB-FIJrov|oJ)yE*&V46A71QdbbXv-z_8K7T0?&SzLzfWs4noxEd1y?`MRwb z=2`u0l4Bce9=^IWlw0C7=@=!&=wfopkf!(3IL#+JIXge5duf>ZDkXXGc})9YD6jdh z@zGvpFI~42#1|IYzWmb5P;HPg z^IwYS5-dqVy&=x{fo(V~cR3P~a&2CrFNz`kjOy$N6wdw}V1?w#ejYtFE!sjTw)zYiS~q-Qq=ni#%kx^pa=U;gdHvJ*)UxkhZ_+LT*5AFV!5DeF z(S)BfZ9e^xXING-E_vP0HZh=|qbqtkrhL=y28E;9TSCzt4}Q2kQPk5$LW9(AL~M(GDD zuQ`lCJi?aado`Dhr-3)>U&A2>**?m zxH!exTpu^xFn5E!Y%{7R_aKeI1LXa7z`MNv)KN~;n?n_Iy_i`Lu0DWmOR)P4Cl;@g zK;22A>O(N%Cr`#Pk*myWh~sPL*|UKBf;Y1yr=Ek0`Oqo}*ZMImDysNB>Ca@xT)1^# z9-(pT7U*N*y)f&e9ut!L(*A*89GVg1-2U5g$_NXImDiJ@Ll+7uAF;LIZNtep+p^c! zKN*yB9qqbs9Nc@d@D~{Q9b}ET(I8(xm@65SU*qV8YLzKpDU)PVqs727ZXHE(vvzMx zZV;~#hAwoOP$t(3q37#k#k6{`iiU60cN&uMLNn=!X)aDH)^6~@n5V0t!kLR6%9C>* zmxmr)178VQLh}YTw5ZP^t;bsqB=$2&qp+^oF)mTo24g`x4v_HV!8n z2{`t|QVWI$qT34T3)hJBxQ8D+*Q0+yT_9r+OFDvX6egw}lYXesX)@$p6YP-wcHRB- z@es}>bWP+za{Y&Q+oB3dY2zg|;zFeTQV9Flw0$^T*tr9RPo6V({_m7r?810B$2-8Kelia z8*+T`dzZqKb8;nIa@l0hvh@fTpJg+^dD+3wacwbe@arT8GG$4ok`=jpDK+7QzTgu+ z!2MZ@?;PoUue95Yh|&6~S?Oc13Ic1=M)O?JkBmH)Z=Dz#q%1Yu2Ff@|phZ;^)@9u! z68%NIMR515V>6C|!YHz`aXq!~L2O|E5cTI^bU=7mYs@AR5yU`{Q{>cd73f+Oion>C zGbKM3>?Jv!7oq{FP0*NOb~Q^7pH6+9U${_fkXXIZ+!XMXo7QIr1EI|iE8)Y0!$hSqiVq~FcZe|wrYSQ6^VtXbUt zaRH+i&mqXcT3vlKm{_x_R0UQEU7GAiB~>>1Gm%wnCJx@$B9fRBYXq3sz-e zccq^YUz)G&}YtbWx$`mT6!7;GW zV=Jxu5fo7uTaCHegmXeQX)2^Yu|j2e-5x$RYLxa|`r8mJlW4sO&-bwzvL8-o1om#8 zm`x|WdMn?uO#}DY4imn9W_j$pe1s!@B&-ZIfS0@3^Px4AVOJ*K`QvHAeQ{Pr?PQ~X z!>ocx#=w!dH@yz;zP|lT{Y?%NcQ#innE4n<`OI(&aus`0ZhU3Fwrk62#{R*J+{_hE zWTLKx)gv@m!a0hWD%3cSE_Y#D7h@kJ?k(wtPVPS9o}o^N8szy=omH}J>^CcxA{IY% zM|H;Hy_+^H(U#%&3`MW;h&EpuT-9x<%%J%}Thd&^mY1}|#*Hqk_=Tq->Z;&h^I^cw zpW$8WPWH#=Cb!_e4qD^C;+uqBW68Jcc&eE6@Qmc!mm`a_`(HV0U#MnF(pU*!b8nlB zbolAv`uIbq$H}hFnL0W|dJO*ST=^2GIh0)F>zK^fOvI~TYNhZEp34PoTk7tu|eX-5(H3GFi z+$T1VZS0Ijt@#VuXRpt1*u2;(b*&i%m|p14zrL_TwzV)#oxxqR{BXGr*^pH?rN)0AjoIwT=EEnAmII*v^5 zoFijg*U?NIrsIPYe@bH-cTr7d{6R4!-}JQbi6DpPUpWM_P!SjCX5g^{)SO5LxrFbn zKxtED!wnQplytOH9hPXLGk8)vdUKa+rmrF8HWb;JMbtXEco<4wM7cT7pXbCWyt5;m z<0>!n7z+Qm!@r(WuRu&V1x)v-y_tH&RVHu|n!30%-4L0r>&-8~{q%4$W8Xd3Ltoc{ zMtG*WBy(qJwBuC&Bhyzm`|Yh2EjNdy_mz()mOD->@X@^m&IPy;h%trVRQPnIig%_q z5{!Uy4C+Pf9Qn3Du)L3Ug!c7^uR!K0;c>8xV5`_&nhcshL~6lk5SLt|KjW^%tnASD zWHN}DUPEmp{Js+FiRl}%6v4CRf9C7};m{F6GxlIREB?u6Y`pl!I9loL_^(8>{_7PK zUD5`8$5;1Hzfc$wLmIg}{^IqJyP{nu95r@WN_Bd4T;wh8ssOIw+oywucmpijmTS1o zRmWT(kvqKGk`2Ip!>S@nnBpt^IP|rX^94GRgLG@XJgR4ELe+dv&xQx2HoFD7rn5;Pd|?3 z@5V)cI8)&(Tq!P$T7DxCexNhWA%Y_8b8s(j!9JQr+234_R@pu-Y^q}>G&ozpBrDto zRRHAzg$M7OK&9Kh%hJkxgJ18rMV^JmfZi+p3lGASGBeX4<75|1748pnP+i`;{L%U& zYb(!LM$o4#Qw=d|q4KeNuqCXT%VP1;J`qJnj?@<%8_3;%VHUZ{!KArl_2|=L#ca!f z>R_7@%jO2e=zLz)4Uib3HTH`#arVSN=wu5f--!qW6iBMBJL!7O~}$+{ABWInV3|V zxy0=3i2}SCap;sKnJUW)rl)W3>9jyNS|{#h*F3QT4W&9V>B5?EOQn@|sXp(R1gGT2 z-rmlhS?s}Hc+;_Qb;}z&?XM}PlM_z%m0E05sK72^VqVDBrb`!q@3aN6o za&&cYCSwtGF*UPy1w}e>-Oj1Z10)l^6?z4PRsH*%%0MP#CU#aHGB!?5;6ET->W`et z5~83#22C^PC&u>1e}-HEPy9ClSD>Jze*&(!fDFFi1kN`BSK#2C+bNZ~LBUNoDU~_E zDTFz>K!Hu5e?06!m=lnem=j2V3_8F;O~3;{*P!qo(3zWq`+q%vz^GrPZ=MSTOz{FG zd4ZCAyf^8Vfh@vYJfPIepg1B>e;#sj2E=HcZb<7Ne}L1#X$nuL!As znGB#TU=v-i1*to`ncdtFGj=fpg>wOxa!1j3g1o?X2t;-L%ES!T+kXi1VrTz926^#- z#04?{PCgFye`37;O(teABJjrFnV7kG0Qm!%plw~voWYjuY9?W3>hQ#jOh^dH#nsu& z*bd1P@-;8Ar~1d|n^_kb0v;qh9Le(Rt$}!opAolB2hO5ErSocGLa&*6y9Cp17pE*6XL=7&Lbt+vzOO%W~D#l`Xqd^ITOLKlKL z{j|N6;ij~FHh6G9kDKCsxt_~K&&LtNmIK54 zH^H3Yw{r+gpV}c@K3jr4D+*+2_+D=9kyY(Mk&=Su+4J@rs!D0b9%KumIUAhPpCJ-I0nu2 zB76|Z5g0fbI-6$;U3B<@4jqfS`9l{!#wHitl%#jXEq=zf*i= z^@e^IoCE(>Gk*)k8$2Zm9DD7-RBxp`~;~$ zC>#eGmri3S6=1(+9K+B_CD+4Vw3UX1hh{!I^~(px531gCS?bcVHG*_w=5>@$fef!? zTVBMy?3|LUA9}5w?Hnn?P73(5hwFp!7o3#}-r!-ROLuTX(dBBMO~!8^DsydvAssT43@VqkxicIPLR2WmEJm?_~wXc5~I z^G=mzjg?ftGqfPb<6cA*ZQu>nsMp;1wDUo~bi5)@@L1+*=5R^n{%aH;l>1r*Khs{y z)`h4_qo-nT*}|b{h7;_kXb?=r3abV^fal*ZZm+X9_I$f-G|4j_G&l_xk!4y^3Og5= zv7&<8(I=THBvTj;-LGF0eh&?;e>J*Nr<9=&&2>8PRq{L7 z9~nr8<<<{Y?G@7Y-4%vK8XmS3Q84c;HQF9k1Szu0Uo7u%JtTVC2$lHlX+6rIK^gtf z5gZrG^dvdFh?|=oN5S)Z?YV1Nj{1aKk1@-g9#!EqLTdRCpS}ECq(!@mkAx2OMqVfR zji^RvX^X7pSkg;mI4#TgI3&)NQn3@$XK=XdJly)kh3q5Ol~r3nZl@`G5*=dje-Mgv-CG+r;yzlvH_ z)I)qb{qUv#qbmN7&mk_JNoAU=z%awc!7`)FLo&6u8NY(mefjyNT7`y+Ton^G7XIXl zd0>(5P-43iLwgU0^@QtWt{o1}_zM2$m&q2Fk>X&@;Kh$YnIRL6F`BPPq@$*xzaiLU zRqH64MEBr7+t9-&aSw7*e2>;Ep|RO|%oF`+O2nctD)|bo*)*f_u}z3N{TLAmS(2<( z!V+|%LE)Sr#HMF>2jiw*>6Xg#6>V#cOh#%ExY6>4$&a2V$1jQST0g-~q&&~I_J^q0 zw>}`sL1Y{HQjG$arcwBfKOI-2gR@4eSPNS#mS;FpPlVnL5-)+%8i}k~{MBTf0dF9k zrR_*fsMO=rt6d)9XyGWNY{cPEMo*)yQ$uK!b6K1F5Rb_%HzzN?;+qpGE?;X83IwD8T{?Sv?OX^G=t zuYWCd!2j)W8imG(;C|A5URTE>w9Hc}L(Sog<6eX0svpT7j@MUyO3%*jlY1SHw_$4x zGBFEaT{$276gcm!EclKXxm^hEFASoIL^He^o(M3y3jIummJzSWV3Q%A3v5=m{eFI; zOUKxQ*Fk?wHeirMF0$~uc{h@&Wc4S7jd%VGX4Ts4NyrMRF1|Xg$C(KxkDqC%F;^8x z7#7hKo)_q4B*jNAw3w<#wN7p=W@l0gRCU$OKjYqIt zwa(?0(?KJUG+K%B>}Roei}!-b_Xz9EkSMN(#zFl9dxp5i0~Yh>&D6Ip8!*wNSGnBE zcC-U9bFS%WDXHnh-Gx*LDH)cgO%e*#jM!ScwVHd#taT9Hjc+zT?KYN*j!e?XEejrg z)4IOQ-xxSTZ43C(bs#i3L0Eh5``*v=Fxjc|bEX~tBtyqVcBSc>nFERrr zCS9R**L+|32oLJM_?i}#1i5V|NqHnM=KYM-c6kwK!c>;_uX(!u7h9F}L6e@-6>C>s z$ZwlD*ad$!+hAj7 zdoT(5cZr&rx@-z34a6(8PPp|-Ik@xLWO~}Hj=#ZdPS4i8Mw?Gdk+&Uitc3Hamwz|1 zKD6thth2NNWY&FU`qr}Zv-*^YOH&q>DBc03CL#Hhd|O?Qg6yNf+9dx@bUT{|>-rCp zNH8d%*M&MUpx!zjQrf{^>%GFBMaz_YuzY>05Wq*mvzt9(&ueFptX){f9)z2R98e@KYx!UhNN_HYV?PvSxK9X--+7v zn|k4Zxi;IY=eVsQh4a()PR&Q~n9$4?Pi7T11$gXin5T~Y9Je35%U(ipN{iK`>#mjL zoMn_#>ndRrpX@x6#ulibKiySPapj+g+e+U4Vcr^Fl%-gf*dS2c;hBfw$w67F*L!cx zh0jQcsUcq6KDcEKH7M6_BGF@$cl~7<^?Us1g%6-urc@JLxcgHs+P4pjdhp%`%)e_J z?%C~4zK%TT_);`Nt;)M1mTk-YV@DzVnVD$Wsdzf>)dvcx9 z`i|@M1FvO|#{&j$3NnWttS9mF-V-*PP+_0Tt*x+NEyF|+cuj2@T-_Ul-5MExobV{7 zk1@mSO_rV|v;37Nd%CTn`!nL1tWQeCPK0u?(Xr&FZHd74eya4VKU0M|sXs|DZplky z4oWdO|Ge5pCwdY#BVecT!ra6`MomnHh=6e7vKb-5@lxJ&h&RWoyux`oCafg=)XMn# zqKDi=gABeOUz>}TW6gS8n_gs>8e|W+ZZTyxG@}`QQ>!Ez_WnW~a?e%^5w0c7i^YG6 zhmLA%KGfVDBhA$9NKfqp+>B;DsdH@Hv_^(kSbQ~Gj(JH$qzTplIZH-eOg=vHlY0ut zsKJUc#s{AFKkIF1?sl%H1ven&B_|iL8ZY@Ab@%TX3f^PcI3jxeI)LFlYS?GGSp=xi z2emKWQuAAeS8#G5VN$S#Q)40Qg*|I~JM&)q{uw`YLomyl;*hbi5Yx3*;1F|%7>;Yi zCmFUh#8a_o5klU$F~nfShUDpaPXmXsxPCnY#s+O$6~g-SQ!e|~6tu(FzQQAinwfP; z!iXx0E?RBBGV>ZQSZ7b{cs<8RV~U>(b3BoI;6o?v&Ix>F3sd4OHCN5q=)g zKVhK~QB9gS`Q1e6AYS&yDNwniWrt@CXXRVvm1o0ts-!%b3zB`0(G*I5v|E)vL#H!e zj6j&W;q}>Tyk*;~+KY1|b^r|*YEOujB)&EQ#~yJm>}B!jTF`uoK=VR+T#7P0sz zdsBS+3{f_(!zIM$Ug_HNYJb*hAI@AU_k!Qe3eHj1eD0RStTZjcwN>xTra$<0X*fL> zt|n2rzyA?d?lVsU#URcs6Yl5k1gPBkW25GJHk5R5`DsCQ@Aae~_Ytq}ds0tfLY1Hh zT=o!zP<&LeTHz8T5Q%@tp7H3Dt>QN;U|TeVvv$mp0ddp0!giR3U~+T&8h3$FtA6~2 zwTuNlP5V<7E%x+OfA~&HyS;v{?}9x$IlOKOxan^C*PTPAu3KfjJUooEZ8YNjRBc&} zGy+Leb90YHKaxE>C0cMn*fkVkp`Sld##uPgj*DO+^$rgt(x0B6%yt8I^7}`njk2=(H7|cgzEEh14Pc!u@8&B=Fj#Ic zlg3>%uQ-P)R1Apl`Qp52(JuN};B;Zq%QOE`#AJtfHZ!XtjXZOZ(u@6mVZV=z#fOqd zb1cvE?orchiZnm6q?yG23SFGzkGXB84p|rGj|dxNC>^Czs99qF(nlGJB2VEf-4L@( z_;NCDaC|b#FtM*kuoER^+%By~2l@x{60BiXC`Gu> zR3p5~d!e|EDD>cmjOLasFG}x~HrPN2*zst zu@y~YG1U*P50!limCN7wz4po_xA_31i%Fg1ZOH7e z$(YZ_#nIB_dPx}5NCMASu1vmct%`l=Tiq$R$R!a{CL@NL>-gzX_!EAc>Pz5v2)-)A zH2b-LdH>@+|8l)X$DpU18z(T?xFfhZTEjfq@i`W$YAwpI`p3Rzi85ja#H6YiFp7^v zjeHnUUA4#?Nm%yZN)kF#P8;=H_4LfLKBv-Lvi4>;$2t8`FYyJ9CaQ4crI0gJ+jslc zulqiVU#8ohGyMEqD>=U~;gIqEY+cP^ySv6PYwD2$M3=83|E8ey&r8=RPPo%Brr7b5 zBC0R0gDi{94JvaDMJjX6G|~i1Y7BefZ)xgf&cD4BpX1`yA|Mz{cE2Z8-~*RgK&+hF zQToFyg!OQ2569|4B)^tvik1!0$=sw;zLJ##tJKNr_|hoRT;xj z>>))uIyR+G+C?czSu|rQYBi6K3ofBta(YveZQLy~+20J}GbitI7RkMu$k7fwv&4E%!n0F0nUI0Pg~LArDYFQ|!mvYuNhgTP9UKt12e z&bk_IA$=g`;2*i>#V+S;4u*S=8y0r)3FGCGkkU1yz!H?PCS&Lo;r4)t!M|}y|DThA z{hwXZcd~)8aj^aNNdwuW{_;sn{o$(oAF_b~e&>JZoMr3_L)|MS%^$1m9Z`#)iV9L|5=138)hhTesM+`^!|Um!>DjWZd90dgMSKHrr3?K%dz zqi>!Kav1;1S^WQ%8SH=1z+Ip5pNYZ1;`~oOV_-hv|CAUEEIF{xn3emt%NWc%2nL!b zx$zN`f$?s+jJZI`=>9j4v0Xy5T$eIdPg`cKm7luqebQ*kGXe>87-CoD`%ccvSocLI z=CrG-MWbo&u|<dpCb<&9Hvp;I59yv9Ky9_^GNz#tNF#|laA3A{>4+n!X-pvZqBM=Q?O zs+3*aaY;jFEv-kXUE%IQ1rN_z*F=Y}w!U=S+q9Dt?VZ@z(%AS_uVm=-Vdd9duZ{r8 zoqnB@*DdP8mysEsqkW4bXU%PhDZ~i*Xp$G@2t;{&qgv4|Tx%9vSMSh@nUCbwtBKwEYGniT_? z#;uJ;d4P>ZL3i0$f$V(1Gya$qleuYt6wMr%)V%CW9BltD^I~k=K;paKO%FF4Fi8e_ z-_5)j*m`fzi}CzxUW^BrZ~CXY^89Xl+1WY%G5ymW7-{?OF9|p!o-uhZnnLaL zNo4)R;OY#_rkg|bm4&WL*(Fa^}0@s|saJWG5UpU+#_^)do zW?&W*jDrNskD1v&0aYF(UQi!#Q;opZNCuca@OUH^Z6yEynVQ%oUj36cS<)2Wl7a3Kudk*SDDdR|3iZ4n3fLA0*4) zO88gx{qN8NZYplk1FRJI$0+_Q3Ip24KP3d-Q2Cdc{&y$>+01R70dvp)Wf_6%^=+-) zYBl~VGGhPTM*OyGU=6^3S4QAb@@=hw6XpIl?T8&@Hh)m`yFdT0HICp0|CSvApI-l6 ztpQ7F{*)2Nf4jj37E;}z=)c`$bKGsSflcB6(VDn}8>nYxzu6|8j2A3V@aTgKynnmu z?amo|_g9s;Daif19O!FN^`;!Kvj}W#!>uW##4r4oTqP zVP$0pmXGmp0@u920o(`u<`xGI5DxHz2ROKa?|IOf2Y`X@vrGINJfJK$=s5rm=p7uu z^EkMH;Ri6lch$Wa(rD{ECS&7eW99_bZE-LI#OnVZRDgw{3Jg`u+<$Yg2#i$7fF)ml z>JglH`w!+>|6q|5#2&yZH$Wo5-3=SR*}26sh$XNH0Fps0{T2y`bg(!;_d(_UDEl`% z>}=p69v?fv)Gc;y6nMkVjZ$vdx!WlL3(@Wv!5wyfX$njdNP8e{a03U3ynm-jfM>7< zerXiM8c1s(k?{N~4~Bu@pl5+Z1(f-%Wp0VTS!Cm514g18?0kP}>^6&Fwpeahyj%0Y zhWMW}2CxDmi3>P`NCayF#G2SI&45@1Y3`S%IDZ=%PzWTJ-$uy^Vh?1*ApGCj2WgM% zH%s7Ak}3<>3W2Qhf7#$|j{f4}*686*rMt0h(5C_!u%__uO7}|@zbh9fKp#LVD<|JS zblq48h%R<+R_1?0+0Bsq#+<-4;zrgtZNsge09fnzAI*vD4lSSt;qOX&BX>@aX@E>b z6eL670N0FvM>7X2@YMns5%B-5DsV&R4b3+qy0MSH+QD1>>5XLntO9pw<^;?iY$qU_ z_+49nnK;N!csTwYjhx&-1?2$Rp8t_XFkQcF_-+pi*6V+=;XAhXyEXae3`hrL2u`cyxASzrgBWz)pbmu7B3a+cLk)1K3#p;Nf?-!FOX` zU<>90+v5Lcw*jiPzuI0<4gAe5xaNX>-)>6*PC-%tH*BCXpaZxMg8lAZz*+`bEa`P*m#YHlU%m=JFaJ0z0GAz$oYfN-T{5uo zkbyfjGO(oqK1GlQ$-rN=zzJN>$bg9n5b&m2l7YWefM4KtgbX|;R|QsygHdkm2K0iP z7LJYMwgNynx5*Ya1~yA^umF2qTz>gm05=ZcgONA(a&U8HQL;A^cd&J{v%i5V086M@ zG+fM-++1y~?9BjuztbFVsD*-|x7+ASzI9O@uZi&p(*~}aX*mQ;) z2|)SvN5&0I4sns0lYwDuynK8>tN{2Pnf(n6^aG?b(BCZ>(8>J?W8-6G13BmJ;(=Uh zf5L!SBS2ucVL(}S(4h4;48-_fFgA8J(B?0<@qn_x@bym^D}Vq0(_v^q}woHU1K%Ue;$^!Oump-5@C&;;b7Y{UX_y-J_76hU}{(u2xx&E?A01vb= z(4S@5*g+o#w_!k89$+r)4;auvaR32CcVIjmKm^QRu)pmTm}R^}GaCo++B>=gVCJE(cFS+pYa{WyUFV|gr2HJLZkQ3z2^Eg1R zy1THu^&BV*F!vW80KEg_12FI6@v#Aha2F5MP5lMq{JZY6bAtv0f6xc80dk$)f&JBQ zvGH-Rfo2i^#N*)j%kKF&xIk{EJ9xaTf4!H3?{8WFlK;Zv1jqLM`8)u0OXsf6##Xjw z&cGZ#i<*_U8PFxOs5&^fk^xa~prHlJBYSfPGVrJZ^h1J7m+T>*q$pruZ0wRee3D{f z;=Js + + + + + + + ; 0f 0f ; P Q + + + + ; 37 ; + + + + ; d5 ; Ib + + + + ; d4 ; Ib + + + + ; 3f ; + + + + aso rexr rexx rexb ; 10 ; Eb Gb + aso oso rexw rexr rexx rexb ; 11 ; Ev Gv + aso rexr rexx rexb ; 12 ; Gb Eb + aso oso rexw rexr rexx rexb ; 13 ; Gv Ev + ; 14 ; AL Ib + oso rexw ; 15 ; rAX Iz + aso rexr rexx rexb ; 80 /2 ; Eb Ib + aso rexr rexx rexb ; 82 /2 ; Eb Ib + aso oso rexw rexr rexx rexb ; 81 /2 ; Ev Iz + aso oso rexw rexr rexx rexb ; 83 /2 ; Ev Ib + + + + aso rexr rexx rexb ; 00 ; Eb Gb + aso oso rexw rexr rexx rexb ; 01 ; Ev Gv + aso rexr rexx rexb ; 02 ; Gb Eb + aso oso rexw rexr rexx rexb ; 03 ; Gv Ev + ; 04 ; AL Ib + oso rexw ; 05 ; rAX Iz + aso rexr rexx rexb ; 80 /0 ; Eb Ib + aso rexr rexx rexb ; 82 /0 ; Eb Ib + aso oso rexw rexr rexx rexb ; 81 /0 ; Ev Iz + aso oso rexw rexr rexx rexb ; 83 /0 ; Ev Ib + + + + aso rexr rexx rexb ; sse66 0f 58 ; V W + + + + aso rexr rexx rexb ; 0f 58 ; V W + + + + aso rexr rexx rexb ; ssef2 0f 58 ; V W + + + + aso rexr rexx rexb ; ssef3 0f 58 ; V W + + + + aso rexr rexx rexb ; sse66 0f d0 ; V W + + + + aso rexr rexx rexb ; ssef2 0f d0 ; V W + + + + aso rexr rexx rexb ; 20 ; Eb Gb + aso oso rexw rexr rexx rexb ; 21 ; Ev Gv + aso rexr rexx rexb ; 22 ; Gb Eb + aso oso rexw rexr rexx rexb ; 23 ; Gv Ev + ; 24 ; AL Ib + oso rexw ; 25 ; rAX Iz + aso rexw rexr rexx rexb ; 80 /4 ; Eb Ib + aso rexr rexx rexb ; 82 /4 ; Eb Ib + aso oso rexw rexr rexx rexb ; 81 /4 ; Ev Iz + aso oso rexw rexr rexx rexb ; 83 /4 ; Ev Ib + + + + aso rexr rexx rexb ; sse66 0f 54 ; V W + + + + aso rexr rexx rexb ; 0f 54 ; V W + + + + aso rexr rexx rexb ; sse66 0f 55 ; V W + + + + aso rexr rexx rexb ; 0f 55 ; V W + + + + aso ; 63 /M16 ; Ew Gw + aso ; 63 /M32 ; Ew Gw + + + + aso oso rexw rexx rexr rexb ; 63 /M64 ; Gv Ed + + + + aso oso ; 62 ; Gv M + + + + aso oso rexw rexr rexx rexb ; 0f bc ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f bd ; Gv Ev + + + + oso rexw rexb ; 0f c8 ; rAXr8 + oso rexw rexb ; 0f c9 ; rCXr9 + oso rexw rexb ; 0f ca ; rDXr10 + oso rexw rexb ; 0f cb ; rBXr11 + oso rexw rexb ; 0f cc ; rSPr12 + oso rexw rexb ; 0f cd ; rBPr13 + oso rexw rexb ; 0f ce ; rSIr14 + oso rexw rexb ; 0f cf ; rDIr15 + + + + aso oso rexw rexr rexx rexb ; 0F BA /4 ; Ev Ib + aso oso rexw rexr rexx rexb ; 0f a3 ; Ev Gv + + + + aso oso rexw rexr rexx rexb ; 0f bb ; Ev Gv + aso oso rexw rexr rexx rexb ; 0F BA /7 ; Ev Ib + + + + aso oso rexw rexr rexx rexb ; 0f b3 ; Ev Gv + aso oso rexw rexr rexx rexb ; 0F BA /6 ; Ev Ib + + + + aso oso rexw rexr rexx rexb ; 0f ab ; Ev Gv + aso oso rexw rexr rexx rexb ; 0F BA /5 ; Ev Ib + + + + aso oso rexw rexr rexx rexb ; FF /2 ; Ev + aso oso rexw rexr rexx rexb ; FF /3 ; Ep + oso ; e8 ; Jz + oso ; 9a ; Ap + + + + oso rexw ; 98 /O16 ; + + + + oso rexw ; 98 /O32 ; + + + + oso rexw ; 98 /O64 ; + + + + f8 ; + + + + fc ; + + + + aso rexw rexr rexx rexb ; 0F AE /7 /mod=!11 ; M + + + + 0F 01 /3 /mod=11 /rm=5 ; + AMD + + + + fa ; + + + + 0f 06 ; + + + + f5 ; + + + + aso oso rexw rexr rexx rexb ; 0f 40 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 41 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 42 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 43 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 44 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 45 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 46 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 47 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 48 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 49 ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 4a ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 4b ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 4c ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 4d ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 4e ; Gv Ev + + + + aso oso rexw rexr rexx rexb ; 0f 4f ; Gv Ev + + + + aso rexr rexx rexb ; 38 ; Eb Gb + aso oso rexw rexr rexx rexb ; 39 ; Ev Gv + aso rexr rexx rexb ; 3a ; Gb Eb + aso oso rexw rexr rexx rexb ; 3b ; Gv Ev + ; 3c ; AL Ib + oso rexw ; 3d ; rAX Iz + aso rexr rexx rexb ; 80 /7 ; Eb Ib + aso rexr rexx rexb ; 82 /7 ; Eb Ib + aso oso rexw rexr rexx rexb ; 81 /7 ; Ev Iz + aso oso rexw rexr rexx rexb ; 83 /7 ; Ev Ib + + + + aso rexr rexx rexb ; sse66 0f c2 ; V W Ib + + + + aso rexr rexx rexb ; 0f c2 ; V W Ib + + + + a6 ; + + + + oso rexw ; a7 /O16 ; + + + + oso rexw ; a7 /O32 ; + aso rexr rexx rexb ; ssef2 0f c2 ; V W Ib + + + + oso rexw ; a7 /O64 ; + + + + aso rexr rexx rexb ; ssef3 0f c2 ; V W Ib + + + + aso rexr rexx rexb ; 0f b0 ; Eb Gb + aso oso rexw rexr rexx rexb ; 0f b1 ; Ev Gv + + + + aso rexr rexx rexb ; 0F C7 /1 ; M + + + + aso rexr rexx rexb ; sse66 0f 2f ; V W + + + + aso rexr rexx rexb ; 0f 2f ; V W + + + + 0f a2 ; + + + + aso rexr rexx rexb ; ssef3 0f e6 ; V W + + + + aso rexr rexx rexb ; 0f 5b ; V W + + + + aso rexr rexx rexb ; ssef2 0f e6 ; V W + + + + aso rexr rexx rexb ; sse66 0f 2d ; P W + + + + aso rexr rexx rexb ; sse66 0f 5a ; V W + + + + aso rexr rexx rexb ; 0f 2a ; V Q + + + + aso rexr rexx rexb ; sse66 0f 2a ; V Q + + + + aso rexr rexx rexb ; sse66 0f 5b ; V W + + + + aso rexr rexx rexb ; 0f 2d ; P W + + + + aso rexr rexx rexb ; 0f 5a ; V W + + + + aso rexr rexx rexb ; ssef2 0f 2d ; Gvw W + + + + aso rexr rexx rexb ; ssef2 0f 5a ; V W + + + + aso rexr rexx rexb ; ssef3 0f 2a ; V Ex + + + + aso rexr rexx rexb ; ssef3 0f 2d ; Gvw W + + + + aso rexr rexx rexb ; ssef3 0f 5a ; V W + + + + aso rexr rexx rexb ; sse66 0f 2c ; P W + + + + ; sse66 0f e6 ; V W + + + + aso rexr rexx rexb ; ssef3 0f 5b ; V W + + + + aso rexr rexx rexb ; 0f 2c ; P W + + + + aso rexr rexx rexb ; ssef2 0f 2c ; Gvw W + + + + aso rexw rexr rexx rexb ; ssef2 0f 2a ; V Ex + + + + aso rexr rexx rexb ; ssef3 0f 2c ; Gvw W + + + + oso rexw ; 99 /O16 ; + + + + oso rexw ; 99 /O32 ; + + + + oso rexw ; 99 /O64 ; + + + + ; 27 ; + + + + ; 2f ; + + + + oso ; 48 ; eAX + oso ; 49 ; eCX + oso ; 4a ; eDX + oso ; 4b ; eBX + oso ; 4c ; eSP + oso ; 4d ; eBP + oso ; 4e ; eSI + oso ; 4f ; eDI + aso rexw rexr rexx rexb ; FE /1 ; Eb + aso oso rexw rexr rexx rexb ; FF /1 ; Ev + + + + aso oso rexw rexr rexx rexb ; F7 /6 ; Ev + aso rexw rexr rexx rexb ; F6 /6 ; Eb + + + + aso rexr rexx rexb ; sse66 0f 5e ; V W + + + + aso rexr rexx rexb ; 0f 5e ; V W + + + + aso rexr rexx rexb ; ssef2 0f 5e ; V W + + + + aso rexr rexx rexb ; ssef3 0f 5e ; V W + + + + 0f 77 ; + + + + ; c8 ; Iw Ib + + + + 0F D9 /mod=11 /x87=30 ; + X87 + + + + 0F D9 /mod=11 /x87=21 ; + X87 + + + + X87 + aso rexr rexx rexb ; DC /mod=!11 /0 ; Mq + aso rexr rexx rexb ; D8 /mod=!11 /0 ; Md + DC /mod=11 /x87=00 ; ST0 ST0 + DC /mod=11 /x87=01 ; ST1 ST0 + DC /mod=11 /x87=02 ; ST2 ST0 + DC /mod=11 /x87=03 ; ST3 ST0 + DC /mod=11 /x87=04 ; ST4 ST0 + DC /mod=11 /x87=05 ; ST5 ST0 + DC /mod=11 /x87=06 ; ST6 ST0 + DC /mod=11 /x87=07 ; ST7 ST0 + D8 /mod=11 /x87=00 ; ST0 ST0 + D8 /mod=11 /x87=01 ; ST0 ST1 + D8 /mod=11 /x87=02 ; ST0 ST2 + D8 /mod=11 /x87=03 ; ST0 ST3 + D8 /mod=11 /x87=04 ; ST0 ST4 + D8 /mod=11 /x87=05 ; ST0 ST5 + D8 /mod=11 /x87=06 ; ST0 ST6 + D8 /mod=11 /x87=07 ; ST0 ST7 + X87 + + + + DE /mod=11 /x87=00 ; ST0 ST0 + DE /mod=11 /x87=01 ; ST1 ST0 + DE /mod=11 /x87=02 ; ST2 ST0 + DE /mod=11 /x87=03 ; ST3 ST0 + DE /mod=11 /x87=04 ; ST4 ST0 + DE /mod=11 /x87=05 ; ST5 ST0 + DE /mod=11 /x87=06 ; ST6 ST0 + DE /mod=11 /x87=07 ; ST7 ST0 + X87 + + + + X87 + aso rexr rexx rexb ; DF /mod=!11 /4 ; Mt + + + + X87 + aso rexr rexx rexb ; DF /mod=!11 /6 ; Mt + + + + X87 + D9 /mod=11 /x87=20 ; + + + + DB /mod=11 /x87=22 ; + X87 + + + + DA /mod=11 /x87=00 ; ST0 ST0 + DA /mod=11 /x87=01 ; ST0 ST1 + DA /mod=11 /x87=02 ; ST0 ST2 + DA /mod=11 /x87=03 ; ST0 ST3 + DA /mod=11 /x87=04 ; ST0 ST4 + DA /mod=11 /x87=05 ; ST0 ST5 + DA /mod=11 /x87=06 ; ST0 ST6 + DA /mod=11 /x87=07 ; ST0 ST7 + X87 + + + + DA /mod=11 /x87=08 ; ST0 ST0 + DA /mod=11 /x87=09 ; ST0 ST1 + DA /mod=11 /x87=0A ; ST0 ST2 + DA /mod=11 /x87=0B ; ST0 ST3 + DA /mod=11 /x87=0C ; ST0 ST4 + DA /mod=11 /x87=0D ; ST0 ST5 + DA /mod=11 /x87=0E ; ST0 ST6 + DA /mod=11 /x87=0F ; ST0 ST7 + X87 + + + + DA /mod=11 /x87=10 ; ST0 ST0 + DA /mod=11 /x87=11 ; ST0 ST1 + DA /mod=11 /x87=12 ; ST0 ST2 + DA /mod=11 /x87=13 ; ST0 ST3 + DA /mod=11 /x87=14 ; ST0 ST4 + DA /mod=11 /x87=15 ; ST0 ST5 + DA /mod=11 /x87=16 ; ST0 ST6 + DA /mod=11 /x87=17 ; ST0 ST7 + X87 + + + + DA /mod=11 /x87=18 ; ST0 ST0 + DA /mod=11 /x87=19 ; ST0 ST1 + DA /mod=11 /x87=1A ; ST0 ST2 + DA /mod=11 /x87=1B ; ST0 ST3 + DA /mod=11 /x87=1C ; ST0 ST4 + DA /mod=11 /x87=1D ; ST0 ST5 + DA /mod=11 /x87=1E ; ST0 ST6 + DA /mod=11 /x87=1F ; ST0 ST7 + X87 + + + + DB /mod=11 /x87=00 ; ST0 ST0 + DB /mod=11 /x87=01 ; ST0 ST1 + DB /mod=11 /x87=02 ; ST0 ST2 + DB /mod=11 /x87=03 ; ST0 ST3 + DB /mod=11 /x87=04 ; ST0 ST4 + DB /mod=11 /x87=05 ; ST0 ST5 + DB /mod=11 /x87=06 ; ST0 ST6 + DB /mod=11 /x87=07 ; ST0 ST7 + X87 + + + + DB /mod=11 /x87=08 ; ST0 ST0 + DB /mod=11 /x87=09 ; ST0 ST1 + DB /mod=11 /x87=0A ; ST0 ST2 + DB /mod=11 /x87=0B ; ST0 ST3 + DB /mod=11 /x87=0C ; ST0 ST4 + DB /mod=11 /x87=0D ; ST0 ST5 + DB /mod=11 /x87=0E ; ST0 ST6 + DB /mod=11 /x87=0F ; ST0 ST7 + X87 + + + + DB /mod=11 /x87=10 ; ST0 ST0 + DB /mod=11 /x87=11 ; ST0 ST1 + DB /mod=11 /x87=12 ; ST0 ST2 + DB /mod=11 /x87=13 ; ST0 ST3 + DB /mod=11 /x87=14 ; ST0 ST4 + DB /mod=11 /x87=15 ; ST0 ST5 + DB /mod=11 /x87=16 ; ST0 ST6 + DB /mod=11 /x87=17 ; ST0 ST7 + X87 + + + + DB /mod=11 /x87=18 ; ST0 ST0 + DB /mod=11 /x87=19 ; ST0 ST1 + DB /mod=11 /x87=1A ; ST0 ST2 + DB /mod=11 /x87=1B ; ST0 ST3 + DB /mod=11 /x87=1C ; ST0 ST4 + DB /mod=11 /x87=1D ; ST0 ST5 + DB /mod=11 /x87=1E ; ST0 ST6 + DB /mod=11 /x87=1F ; ST0 ST7 + X87 + + + + DB /mod=11 /x87=28 ; ST0 ST0 + DB /mod=11 /x87=29 ; ST0 ST1 + DB /mod=11 /x87=2A ; ST0 ST2 + DB /mod=11 /x87=2B ; ST0 ST3 + DB /mod=11 /x87=2C ; ST0 ST4 + DB /mod=11 /x87=2D ; ST0 ST5 + DB /mod=11 /x87=2E ; ST0 ST6 + DB /mod=11 /x87=2F ; ST0 ST7 + X87 + + + + aso rexr rexx rexb ; D8 /mod=!11 /2 ; Md + aso rexr rexx rexb ; DC /mod=!11 /2 ; Mq + D8 /mod=11 /x87=10 ; ST0 ST0 + D8 /mod=11 /x87=11 ; ST0 ST1 + D8 /mod=11 /x87=12 ; ST0 ST2 + D8 /mod=11 /x87=13 ; ST0 ST3 + D8 /mod=11 /x87=14 ; ST0 ST4 + D8 /mod=11 /x87=15 ; ST0 ST5 + D8 /mod=11 /x87=16 ; ST0 ST6 + D8 /mod=11 /x87=17 ; ST0 ST7 + X87 + + + + DC /mod=11 /x87=10 ; ST0 + DC /mod=11 /x87=11 ; ST1 + DC /mod=11 /x87=12 ; ST2 + DC /mod=11 /x87=13 ; ST3 + DC /mod=11 /x87=14 ; ST4 + DC /mod=11 /x87=15 ; ST5 + DC /mod=11 /x87=16 ; ST6 + DC /mod=11 /x87=17 ; ST7 + X87 UNDOC + + + + DC /mod=11 /x87=18 ; ST0 + DC /mod=11 /x87=19 ; ST1 + DC /mod=11 /x87=1A ; ST2 + DC /mod=11 /x87=1B ; ST3 + DC /mod=11 /x87=1C ; ST4 + DC /mod=11 /x87=1D ; ST5 + DC /mod=11 /x87=1E ; ST6 + DC /mod=11 /x87=1F ; ST7 + X87 UNDOC + + + + DB /mod=11 /x87=30 ; ST0 ST0 + DB /mod=11 /x87=31 ; ST0 ST1 + DB /mod=11 /x87=32 ; ST0 ST2 + DB /mod=11 /x87=33 ; ST0 ST3 + DB /mod=11 /x87=34 ; ST0 ST4 + DB /mod=11 /x87=35 ; ST0 ST5 + DB /mod=11 /x87=36 ; ST0 ST6 + DB /mod=11 /x87=37 ; ST0 ST7 + X87 + + + + DF /mod=11 /x87=28 ; ST0 ST0 + DF /mod=11 /x87=29 ; ST0 ST1 + DF /mod=11 /x87=2A ; ST0 ST2 + DF /mod=11 /x87=2B ; ST0 ST3 + DF /mod=11 /x87=2C ; ST0 ST4 + DF /mod=11 /x87=2D ; ST0 ST5 + DF /mod=11 /x87=2E ; ST0 ST6 + DF /mod=11 /x87=2F ; ST0 ST7 + X87 + + + + DF /mod=11 /x87=30 ; ST0 ST0 + DF /mod=11 /x87=31 ; ST0 ST1 + DF /mod=11 /x87=32 ; ST0 ST2 + DF /mod=11 /x87=33 ; ST0 ST3 + DF /mod=11 /x87=34 ; ST0 ST4 + DF /mod=11 /x87=35 ; ST0 ST5 + DF /mod=11 /x87=36 ; ST0 ST6 + DF /mod=11 /x87=37 ; ST0 ST7 + X87 + + + + aso rexr rexx rexb ; D8 /mod=!11 /3 ; Md + aso rexr rexx rexb ; DC /mod=!11 /3 ; Mq + D8 /mod=11 /x87=18 ; ST0 ST0 + D8 /mod=11 /x87=19 ; ST0 ST1 + D8 /mod=11 /x87=1A ; ST0 ST2 + D8 /mod=11 /x87=1B ; ST0 ST3 + D8 /mod=11 /x87=1C ; ST0 ST4 + D8 /mod=11 /x87=1D ; ST0 ST5 + D8 /mod=11 /x87=1E ; ST0 ST6 + D8 /mod=11 /x87=1F ; ST0 ST7 + X87 + + + + DE /mod=11 /x87=10 ; ST0 + DE /mod=11 /x87=11 ; ST1 + DE /mod=11 /x87=12 ; ST2 + DE /mod=11 /x87=13 ; ST3 + DE /mod=11 /x87=14 ; ST4 + DE /mod=11 /x87=15 ; ST5 + DE /mod=11 /x87=16 ; ST6 + DE /mod=11 /x87=17 ; ST7 + X87 UNDOC + + + + DE /mod=11 /x87=19 ; + X87 + + + + D9 /mod=11 /x87=3F ; + X87 + + + + D9 /mod=11 /x87=36 ; + X87 + + + + aso rexr rexx rexb ; DC /mod=!11 /6 ; Mq + DC /mod=11 /x87=38 ; ST0 ST0 + DC /mod=11 /x87=39 ; ST1 ST0 + DC /mod=11 /x87=3A ; ST2 ST0 + DC /mod=11 /x87=3B ; ST3 ST0 + DC /mod=11 /x87=3C ; ST4 ST0 + DC /mod=11 /x87=3D ; ST5 ST0 + DC /mod=11 /x87=3E ; ST6 ST0 + DC /mod=11 /x87=3F ; ST7 ST0 + aso rexr rexx rexb ; D8 /mod=!11 /6 ; Md + D8 /mod=11 /x87=30 ; ST0 ST0 + D8 /mod=11 /x87=31 ; ST0 ST1 + D8 /mod=11 /x87=32 ; ST0 ST2 + D8 /mod=11 /x87=33 ; ST0 ST3 + D8 /mod=11 /x87=34 ; ST0 ST4 + D8 /mod=11 /x87=35 ; ST0 ST5 + D8 /mod=11 /x87=36 ; ST0 ST6 + D8 /mod=11 /x87=37 ; ST0 ST7 + X87 + + + + DE /mod=11 /x87=38 ; ST0 ST0 + DE /mod=11 /x87=39 ; ST1 ST0 + DE /mod=11 /x87=3A ; ST2 ST0 + DE /mod=11 /x87=3B ; ST3 ST0 + DE /mod=11 /x87=3C ; ST4 ST0 + DE /mod=11 /x87=3D ; ST5 ST0 + DE /mod=11 /x87=3E ; ST6 ST0 + DE /mod=11 /x87=3F ; ST7 ST0 + X87 + + + + aso rexr rexx rexb ; DC /mod=!11 /7 ; Mq + DC /mod=11 /x87=30 ; ST0 ST0 + DC /mod=11 /x87=31 ; ST1 ST0 + DC /mod=11 /x87=32 ; ST2 ST0 + DC /mod=11 /x87=33 ; ST3 ST0 + DC /mod=11 /x87=34 ; ST4 ST0 + DC /mod=11 /x87=35 ; ST5 ST0 + DC /mod=11 /x87=36 ; ST6 ST0 + DC /mod=11 /x87=37 ; ST7 ST0 + aso rexr rexx rexb ; D8 /mod=!11 /7 ; Md + D8 /mod=11 /x87=38 ; ST0 ST0 + D8 /mod=11 /x87=39 ; ST0 ST1 + D8 /mod=11 /x87=3A ; ST0 ST2 + D8 /mod=11 /x87=3B ; ST0 ST3 + D8 /mod=11 /x87=3C ; ST0 ST4 + D8 /mod=11 /x87=3D ; ST0 ST5 + D8 /mod=11 /x87=3E ; ST0 ST6 + D8 /mod=11 /x87=3F ; ST0 ST7 + X87 + + + + DE /mod=11 /x87=30 ; ST0 ST0 + DE /mod=11 /x87=31 ; ST1 ST0 + DE /mod=11 /x87=32 ; ST2 ST0 + DE /mod=11 /x87=33 ; ST3 ST0 + DE /mod=11 /x87=34 ; ST4 ST0 + DE /mod=11 /x87=35 ; ST5 ST0 + DE /mod=11 /x87=36 ; ST6 ST0 + DE /mod=11 /x87=37 ; ST7 ST0 + X87 + + + + 0f 0e ; + + + + DD /mod=11 /x87=00 ; ST0 + DD /mod=11 /x87=01 ; ST1 + DD /mod=11 /x87=02 ; ST2 + DD /mod=11 /x87=03 ; ST3 + DD /mod=11 /x87=04 ; ST4 + DD /mod=11 /x87=05 ; ST5 + DD /mod=11 /x87=06 ; ST6 + DD /mod=11 /x87=07 ; ST7 + X87 + + + + DF /mod=11 /x87=00 ; ST0 + DF /mod=11 /x87=01 ; ST1 + DF /mod=11 /x87=02 ; ST2 + DF /mod=11 /x87=03 ; ST3 + DF /mod=11 /x87=04 ; ST4 + DF /mod=11 /x87=05 ; ST5 + DF /mod=11 /x87=06 ; ST6 + DF /mod=11 /x87=07 ; ST7 + X87 + + + + aso rexr rexx rexb ; DE /mod=!11 /2 ; Mw + aso rexr rexx rexb ; DA /mod=!11 /2 ; Md + X87 + + + + aso rexr rexx rexb ; DE /mod=!11 /3 ; Mw + aso rexr rexx rexb ; DA /mod=!11 /3 ; Md + X87 + + + + aso rexr rexx rexb ; DF /mod=!11 /0 ; Mw + aso rexr rexx rexb ; DF /mod=!11 /5 ; Mq + aso rexr rexx rexb ; DB /mod=!11 /0 ; Md + X87 + + + + D9 /mod=11 /x87=37 ; + X87 + + + + DB /mod=11 /x87=23 ; + X87 + + + + aso rexr rexx rexb ; DA /mod=!11 /0 ; Md + aso rexr rexx rexb ; DE /mod=!11 /0 ; Mw + X87 + + + + aso rexr rexx rexb ; DA /mod=!11 /7 ; Md + aso rexr rexx rexb ; DE /mod=!11 /7 ; Mw + X87 + + + + aso rexr rexx rexb ; DA /mod=!11 /6 ; Md + aso rexr rexx rexb ; DE /mod=!11 /6 ; Mw + X87 + + + + aso rexr rexx rexb ; DA /mod=!11 /4 ; Md + aso rexr rexx rexb ; DE /mod=!11 /4 ; Mw + X87 + + + + aso rexr rexx rexb ; DA /mod=!11 /5 ; Md + aso rexr rexx rexb ; DE /mod=!11 /5 ; Mw + X87 + + + + aso rexr rexx rexb ; DF /mod=!11 /2 ; Mw + aso rexr rexx rexb ; DB /mod=!11 /2 ; Md + X87 + + + + aso rexr rexx rexb ; DF /mod=!11 /3 ; Mw + aso rexr rexx rexb ; DF /mod=!11 /7 ; Mq + aso rexr rexx rexb ; DB /mod=!11 /3 ; Md + X87 + + + + aso rexr rexx rexb ; DB /mod=!11 /1 ; Md + aso rexr rexx rexb ; DD /mod=!11 /1 ; Mq + aso rexr rexx rexb ; DF /mod=!11 /1 ; Mw + X87 + + + + aso rexr rexx rexb ; DB /mod=!11 /5 ; Mt + aso rexr rexx rexb ; DD /mod=!11 /0 ; Mq + aso rexr rexx rexb ; D9 /mod=!11 /0 ; Md + D9 /mod=11 /x87=00 ; ST0 ST0 + D9 /mod=11 /x87=01 ; ST0 ST1 + D9 /mod=11 /x87=02 ; ST0 ST2 + D9 /mod=11 /x87=03 ; ST0 ST3 + D9 /mod=11 /x87=04 ; ST0 ST4 + D9 /mod=11 /x87=05 ; ST0 ST5 + D9 /mod=11 /x87=06 ; ST0 ST6 + D9 /mod=11 /x87=07 ; ST0 ST7 + X87 + + + + D9 /mod=11 /x87=28 ; + X87 + + + + D9 /mod=11 /x87=29 ; + X87 + + + + D9 /mod=11 /x87=2A ; + X87 + + + + D9 /mod=11 /x87=2B ; + X87 + + + + D9 /mod=11 /x87=2C ; + X87 + + + + D9 /mod=11 /x87=2D ; + X87 + + + + D9 /mod=11 /x87=2E ; + X87 + + + + aso rexr rexx rexb ; D9 /mod=!11 /5 ; Mw + X87 + + + + aso rexr rexx rexb ; D9 /mod=!11 /4 ; M + X87 + + + + aso rexr rexx rexb ; DC /mod=!11 /1 ; Mq + DC /mod=11 /x87=08 ; ST0 ST0 + DC /mod=11 /x87=09 ; ST1 ST0 + DC /mod=11 /x87=0A ; ST2 ST0 + DC /mod=11 /x87=0B ; ST3 ST0 + DC /mod=11 /x87=0C ; ST4 ST0 + DC /mod=11 /x87=0D ; ST5 ST0 + DC /mod=11 /x87=0E ; ST6 ST0 + DC /mod=11 /x87=0F ; ST7 ST0 + aso rexr rexx rexb ; D8 /mod=!11 /1 ; Md + D8 /mod=11 /x87=08 ; ST0 ST0 + D8 /mod=11 /x87=09 ; ST0 ST1 + D8 /mod=11 /x87=0A ; ST0 ST2 + D8 /mod=11 /x87=0B ; ST0 ST3 + D8 /mod=11 /x87=0C ; ST0 ST4 + D8 /mod=11 /x87=0D ; ST0 ST5 + D8 /mod=11 /x87=0E ; ST0 ST6 + D8 /mod=11 /x87=0F ; ST0 ST7 + X87 + + + + DE /mod=11 /x87=08 ; ST0 ST0 + DE /mod=11 /x87=09 ; ST1 ST0 + DE /mod=11 /x87=0A ; ST2 ST0 + DE /mod=11 /x87=0B ; ST3 ST0 + DE /mod=11 /x87=0C ; ST4 ST0 + DE /mod=11 /x87=0D ; ST5 ST0 + DE /mod=11 /x87=0E ; ST6 ST0 + DE /mod=11 /x87=0F ; ST7 ST0 + X87 + + + + aso rexr rexx rexb ; DA /mod=!11 /1 ; Md + aso rexr rexx rexb ; DE /mod=!11 /1 ; Mw + X87 + + + + D9 /mod=11 /x87=10 ; + X87 + + + + D9 /mod=11 /x87=33 ; + X87 + + + + D9 /mod=11 /x87=38 ; + X87 + + + + D9 /mod=11 /x87=35 ; + X87 + + + + D9 /mod=11 /x87=32 ; + X87 + + + + D9 /mod=11 /x87=3C ; + X87 + + + + aso rexr rexx rexb ; DD /mod=!11 /4 ; M + X87 + + + + aso rexr rexx rexb ; DD /mod=!11 /6 ; M + X87 + + + + D9 /mod=11 /x87=3D ; + X87 + + + + D9 /mod=11 /x87=3E ; + X87 + + + + D9 /mod=11 /x87=3B ; + X87 + + + + D9 /mod=11 /x87=3A ; + X87 + + + + aso rexr rexx rexb ; DB /mod=!11 /7 ; Mt + aso rexr rexx rexb ; DD /mod=!11 /3 ; Mq + aso rexr rexx rexb ; D9 /mod=!11 /3 ; Md + DD /mod=11 /x87=18 ; ST0 + DD /mod=11 /x87=19 ; ST1 + DD /mod=11 /x87=1A ; ST2 + DD /mod=11 /x87=1B ; ST3 + DD /mod=11 /x87=1C ; ST4 + DD /mod=11 /x87=1D ; ST5 + DD /mod=11 /x87=1E ; ST6 + DD /mod=11 /x87=1F ; ST7 + X87 + + + + D9 /mod=11 /x87=18 ; ST0 + D9 /mod=11 /x87=19 ; ST1 + D9 /mod=11 /x87=1A ; ST2 + D9 /mod=11 /x87=1B ; ST3 + D9 /mod=11 /x87=1C ; ST4 + D9 /mod=11 /x87=1D ; ST5 + D9 /mod=11 /x87=1E ; ST6 + D9 /mod=11 /x87=1F ; ST7 + + + + DF /mod=11 /x87=10 ; ST0 + DF /mod=11 /x87=11 ; ST1 + DF /mod=11 /x87=12 ; ST2 + DF /mod=11 /x87=13 ; ST3 + DF /mod=11 /x87=14 ; ST4 + DF /mod=11 /x87=15 ; ST5 + DF /mod=11 /x87=16 ; ST6 + DF /mod=11 /x87=17 ; ST7 + + + + DF /mod=11 /x87=18 ; ST0 + DF /mod=11 /x87=19 ; ST1 + DF /mod=11 /x87=1A ; ST2 + DF /mod=11 /x87=1B ; ST3 + DF /mod=11 /x87=1C ; ST4 + DF /mod=11 /x87=1D ; ST5 + DF /mod=11 /x87=1E ; ST6 + DF /mod=11 /x87=1F ; ST7 + + + + aso rexr rexx rexb ; D9 /mod=!11 /2 ; Md + aso rexr rexx rexb ; DD /mod=!11 /2 ; Mq + DD /mod=11 /x87=10 ; ST0 + DD /mod=11 /x87=11 ; ST1 + DD /mod=11 /x87=12 ; ST2 + DD /mod=11 /x87=13 ; ST3 + DD /mod=11 /x87=14 ; ST4 + DD /mod=11 /x87=15 ; ST5 + DD /mod=11 /x87=16 ; ST6 + DD /mod=11 /x87=17 ; ST7 + X87 + + + + aso rexr rexx rexb ; D9 /mod=!11 /7 ; Mw + X87 + + + + aso rexr rexx rexb ; D9 /mod=!11 /6 ; M + X87 + + + + aso rexr rexx rexb ; DD /mod=!11 /7 ; Mw + DF /mod=11 /x87=20 ; AX + X87 + + + + aso rexr rexx rexb ; D8 /mod=!11 /4 ; Md + aso rexr rexx rexb ; DC /mod=!11 /4 ; Mq + D8 /mod=11 /x87=20 ; ST0 ST0 + D8 /mod=11 /x87=21 ; ST0 ST1 + D8 /mod=11 /x87=22 ; ST0 ST2 + D8 /mod=11 /x87=23 ; ST0 ST3 + D8 /mod=11 /x87=24 ; ST0 ST4 + D8 /mod=11 /x87=25 ; ST0 ST5 + D8 /mod=11 /x87=26 ; ST0 ST6 + D8 /mod=11 /x87=27 ; ST0 ST7 + DC /mod=11 /x87=28 ; ST0 ST0 + DC /mod=11 /x87=29 ; ST1 ST0 + DC /mod=11 /x87=2A ; ST2 ST0 + DC /mod=11 /x87=2B ; ST3 ST0 + DC /mod=11 /x87=2C ; ST4 ST0 + DC /mod=11 /x87=2D ; ST5 ST0 + DC /mod=11 /x87=2E ; ST6 ST0 + DC /mod=11 /x87=2F ; ST7 ST0 + X87 + + + + DE /mod=11 /x87=28 ; ST0 ST0 + DE /mod=11 /x87=29 ; ST1 ST0 + DE /mod=11 /x87=2A ; ST2 ST0 + DE /mod=11 /x87=2B ; ST3 ST0 + DE /mod=11 /x87=2C ; ST4 ST0 + DE /mod=11 /x87=2D ; ST5 ST0 + DE /mod=11 /x87=2E ; ST6 ST0 + DE /mod=11 /x87=2F ; ST7 ST0 + X87 + + + + aso rexr rexx rexb ; DC /mod=!11 /5 ; Mq + D8 /mod=11 /x87=28 ; ST0 ST0 + D8 /mod=11 /x87=29 ; ST0 ST1 + D8 /mod=11 /x87=2A ; ST0 ST2 + D8 /mod=11 /x87=2B ; ST0 ST3 + D8 /mod=11 /x87=2C ; ST0 ST4 + D8 /mod=11 /x87=2D ; ST0 ST5 + D8 /mod=11 /x87=2E ; ST0 ST6 + D8 /mod=11 /x87=2F ; ST0 ST7 + DC /mod=11 /x87=20 ; ST0 ST0 + DC /mod=11 /x87=21 ; ST1 ST0 + DC /mod=11 /x87=22 ; ST2 ST0 + DC /mod=11 /x87=23 ; ST3 ST0 + DC /mod=11 /x87=24 ; ST4 ST0 + DC /mod=11 /x87=25 ; ST5 ST0 + DC /mod=11 /x87=26 ; ST6 ST0 + DC /mod=11 /x87=27 ; ST7 ST0 + aso rexr rexx rexb ; D8 /mod=!11 /5 ; Md + X87 + + + + DE /mod=11 /x87=20 ; ST0 ST0 + DE /mod=11 /x87=21 ; ST1 ST0 + DE /mod=11 /x87=22 ; ST2 ST0 + DE /mod=11 /x87=23 ; ST3 ST0 + DE /mod=11 /x87=24 ; ST4 ST0 + DE /mod=11 /x87=25 ; ST5 ST0 + DE /mod=11 /x87=26 ; ST6 ST0 + DE /mod=11 /x87=27 ; ST7 ST0 + X87 + + + + D9 /mod=11 /x87=24 ; + X87 + + + + DD /mod=11 /x87=20 ; ST0 + DD /mod=11 /x87=21 ; ST1 + DD /mod=11 /x87=22 ; ST2 + DD /mod=11 /x87=23 ; ST3 + DD /mod=11 /x87=24 ; ST4 + DD /mod=11 /x87=25 ; ST5 + DD /mod=11 /x87=26 ; ST6 + DD /mod=11 /x87=27 ; ST7 + X87 + + + + DD /mod=11 /x87=28 ; ST0 + DD /mod=11 /x87=29 ; ST1 + DD /mod=11 /x87=2A ; ST2 + DD /mod=11 /x87=2B ; ST3 + DD /mod=11 /x87=2C ; ST4 + DD /mod=11 /x87=2D ; ST5 + DD /mod=11 /x87=2E ; ST6 + DD /mod=11 /x87=2F ; ST7 + X87 + + + + DA /mod=11 /x87=29 ; + X87 + + + + D9 /mod=11 /x87=25 ; + X87 + + + + D9 /mod=11 /x87=08 ; ST0 ST0 + D9 /mod=11 /x87=09 ; ST0 ST1 + D9 /mod=11 /x87=0A ; ST0 ST2 + D9 /mod=11 /x87=0B ; ST0 ST3 + D9 /mod=11 /x87=0C ; ST0 ST4 + D9 /mod=11 /x87=0D ; ST0 ST5 + D9 /mod=11 /x87=0E ; ST0 ST6 + D9 /mod=11 /x87=0F ; ST0 ST7 + X87 + + + + DD /mod=11 /x87=08 ; ST0 + DD /mod=11 /x87=09 ; ST1 + DD /mod=11 /x87=0A ; ST2 + DD /mod=11 /x87=0B ; ST3 + DD /mod=11 /x87=0C ; ST4 + DD /mod=11 /x87=0D ; ST5 + DD /mod=11 /x87=0E ; ST6 + DD /mod=11 /x87=0F ; ST7 + X87 + + + + DF /mod=11 /x87=08 ; ST0 + DF /mod=11 /x87=09 ; ST1 + DF /mod=11 /x87=0A ; ST2 + DF /mod=11 /x87=0B ; ST3 + DF /mod=11 /x87=0C ; ST4 + DF /mod=11 /x87=0D ; ST5 + DF /mod=11 /x87=0E ; ST6 + DF /mod=11 /x87=0F ; ST7 + X87 + + + + aso rexw rexr rexx rexb ; 0F AE /1 ; M + + + + aso rexw rexr rexx rexb ; 0F AE /0 ; M + + + + D9 /mod=11 /x87=34 ; + X87 + + + + D9 /mod=11 /x87=31 ; + X87 + + + + D9 /mod=11 /x87=39 ; + X87 + + + + aso rexr rexx rexb ; sse66 0f 7c ; V W + + + + aso rexr rexx rexb ; ssef2 0f 7c ; V W + + + + f4 ; + + + + aso rexr rexx rexb ; sse66 0f 7d ; V W + + + + aso rexr rexx rexb ; ssef2 0f 7d ; V W + + + + aso oso rexw rexr rexx rexb ; F7 /7 ; Ev + aso rexw rexr rexx rexb ; F6 /7 ; Eb + + + + ; e4 ; AL Ib + oso ; e5 ; eAX Ib + ec ; AL DX + oso ; ed ; eAX DX + + + + aso oso rexw rexr rexx rexb ; 0f af ; Gv Ev + aso rexw rexr rexx rexb ; F6 /5 ; Eb + aso oso rexw rexr rexx rexb ; F7 /5 ; Ev + aso oso rexw rexr rexx rexb ; 69 ; Gv Ev Iz + aso oso rexw rexr rexx rexb ; 6b ; Gv Ev Ib + + + + oso ; 40 ; eAX + oso ; 41 ; eCX + oso ; 42 ; eDX + oso ; 43 ; eBX + oso ; 44 ; eSP + oso ; 45 ; eBP + oso ; 46 ; eSI + oso ; 47 ; eDI + aso oso rexw rexr rexx rexb ; FF /0 ; Ev + aso rexw rexr rexx rexb ; FE /0 ; Eb + + + + ; 6c ; + + + + oso ; 6d /O16 ; + + + + oso ; 6d /O32 ; + + + + f1 ; + + + + ; cc ; + + + + ; cd ; Ib + + + + ; ce ; + + + + 0f 08 ; + + + + sse66 0f 38 80 /M32 ; Gd Mo + sse66 0f 38 80 /M64 ; Gq Mo + INTEL + + + + aso rexr rexx rexb ; 0F 01 /7 /mod=!11 ; M + + + + 0F 01 /3 /mod=11 /rm=7 ; + AMD + + + + sse66 0f 38 81 /M32 ; Gd Mo + sse66 0f 38 81 /M64 ; Gq Mo + INTEL + + + + oso rexw ; cf /O16 ; + + + + oso rexw ; cf /O32 ; + + + + oso rexw ; cf /O64 ; + + + + ; 70 ; Jb + oso ; 0f 80 ; Jz + + + + ; 71 ; Jb + oso ; 0f 81 ; Jz + + + + ; 72 ; Jb + oso ; 0f 82 ; Jz + + + + ; 73 ; Jb + oso ; 0f 83 ; Jz + + + + ; 74 ; Jb + oso ; 0f 84 ; Jz + + + + ; 75 ; Jb + oso ; 0f 85 ; Jz + + + + ; 76 ; Jb + oso ; 0f 86 ; Jz + + + + ; 77 ; Jb + oso ; 0f 87 ; Jz + + + + ; 78 ; Jb + oso ; 0f 88 ; Jz + + + + ; 79 ; Jb + oso ; 0f 89 ; Jz + + + + ; 7a ; Jb + oso ; 0f 8a ; Jz + + + + ; 7b ; Jb + oso ; 0f 8b ; Jz + + + + ; 7c ; Jb + oso ; 0f 8c ; Jz + + + + ; 7d ; Jb + oso ; 0f 8d ; Jz + + + + ; 7e ; Jb + oso ; 0f 8e ; Jz + + + + ; 7f ; Jb + oso ; 0f 8f ; Jz + + + + aso ; e3 /A16 ; Jb + + + + aso ; e3 /A32 ; Jb + + + + aso ; e3 /A64 ; Jb + + + + aso oso rexw rexr rexx rexb ; FF /4 ; Ev + aso oso rexw rexr rexx rexb ; FF /5 ; Ep + oso ; e9 ; Jz + ea ; Ap + eb ; Jb + + + + ; 9f ; + + + + aso oso rexw rexr rexx rexb ; 0f 02 ; Gv Ew + + + + aso rexr rexx rexb ; ssef2 0f f0 ; V M + + + + aso rexw rexr rexx rexb ; 0F AE /2 ; Md + + + + aso oso ; c5 ; Gv M + + + + aso oso rexw rexr rexx rexb ; 8d ; Gv M + + + + aso oso ; c4 ; Gv M + + + + aso oso rexw rexr rexx rexb ; 0f b4 ; Gz M + + + + aso oso rexw rexr rexx rexb ; 0f b5 ; Gz M + + + + aso rexr rexx rexb ; 0F 01 /3 /mod=!11 ; M + + + + aso oso rexw rexr rexx rexb ; 0f b2 ; Gz M + + + + ; c9 ; + + + + 0F AE /5 /mod=11 /rm=0 ; + 0F AE /5 /mod=11 /rm=1 ; + 0F AE /5 /mod=11 /rm=2 ; + 0F AE /5 /mod=11 /rm=3 ; + 0F AE /5 /mod=11 /rm=4 ; + 0F AE /5 /mod=11 /rm=5 ; + 0F AE /5 /mod=11 /rm=6 ; + 0F AE /5 /mod=11 /rm=7 ; + + + + aso rexr rexx rexb ; 0F 01 /2 /mod=!11 ; M + + + + aso rexr rexx rexb ; 0F 00 /2 ; Ew + + + + aso rexr rexx rexb ; 0F 01 /6 /mod=!11 ; Ew + + + + f0 ; + + + + ; ac ; + + + + oso rexw ; ad /O16 ; + + + + oso rexw ; ad /O32 ; + + + + oso rexw ; ad /O64 ; + + + + ; e0 ; Jb + + + + ; e1 ; Jb + + + + ; e2 ; Jb + def64 depM + + + + aso oso rexw rexr rexx rexb ; 0f 03 ; Gv Ew + + + + aso rexr rexx rexb ; 0F 00 /3 ; Ew + + + + aso rexr rexx rexb ; 0f f7 ; P Q + aso rexr rexx rexb ; sse66 0f f7 ; V W + + + + aso rexr rexx rexb ; sse66 0f 5f ; V W + + + + aso rexr rexx rexb ; 0f 5f ; V W + + + + aso rexr rexx rexb ; ssef2 0f 5f ; V W + + + + aso rexr rexx rexb ; ssef3 0f 5f ; V W + + + + 0F AE /6 /mod=11 /rm=0 ; + 0F AE /6 /mod=11 /rm=1 ; + 0F AE /6 /mod=11 /rm=2 ; + 0F AE /6 /mod=11 /rm=3 ; + 0F AE /6 /mod=11 /rm=4 ; + 0F AE /6 /mod=11 /rm=5 ; + 0F AE /6 /mod=11 /rm=6 ; + 0F AE /6 /mod=11 /rm=7 ; + + + + aso rexr rexx rexb ; sse66 0f 5d ; V W + + + + aso rexr rexx rexb ; 0f 5d ; V W + + + + aso rexr rexx rexb ; ssef2 0f 5d ; V W + + + + aso rexr rexx rexb ; ssef3 0f 5d ; V W + + + + 0F 01 /1 /mod=11 /rm=0 ; + + + + ; 0f a6 /mod=11 /rm=0 /0 ; + + + + aso rexw rexr rexx rexb ; C6 /0 ; Eb Ib + aso oso rexw rexr rexx rexb ; C7 /0 ; Ev Iz + aso rexr rexx rexb ; 88 ; Eb Gb + aso oso rexw rexr rexx rexb ; 89 ; Ev Gv + aso rexr rexx rexb ; 8a ; Gb Eb + aso oso rexw rexr rexx rexb ; 8b ; Gv Ev + aso oso rexr rexx rexb ; 8c ; Ev S + aso oso rexr rexx rexb ; 8e ; S Ev + a0 ; AL Ob + aso oso rexw ; a1 ; rAX Ov + a2 ; Ob AL + aso oso rexw ; a3 ; Ov rAX + rexb ; b0 ; ALr8b Ib + rexb ; b1 ; CLr9b Ib + rexb ; b2 ; DLr10b Ib + rexb ; b3 ; BLr11b Ib + rexb ; b4 ; AHr12b Ib + rexb ; b5 ; CHr13b Ib + rexb ; b6 ; DHr14b Ib + rexb ; b7 ; BHr15b Ib + oso rexw rexb ; b8 ; rAXr8 Iv + oso rexw rexb ; b9 ; rCXr9 Iv + oso rexw rexb ; ba ; rDXr10 Iv + oso rexw rexb ; bb ; rBXr11 Iv + oso rexw rexb ; bc ; rSPr12 Iv + oso rexw rexb ; bd ; rBPr13 Iv + oso rexw rexb ; be ; rSIr14 Iv + oso rexw rexb ; bf ; rDIr15 Iv + rexr ; 0f 20 ; R C + rexr ; 0f 21 ; R D + rexr ; 0f 22 ; C R + rexr ; 0f 23 ; D R + + + + aso rexr rexx rexb ; sse66 0f 28 ; V W + aso rexr rexx rexb ; sse66 0f 29 ; W V + + + + aso rexr rexx rexb ; 0f 28 ; V W + aso rexr rexx rexb ; 0f 29 ; W V + + + + aso rexw rexr rexx rexb ; sse66 0f 6e ; V Ex + aso rexr rexx rexb ; 0f 6e ; P Ex + aso rexw rexr rexx rexb ; sse66 0f 7e ; Ex V + aso rexr rexx rexb ; 0f 7e ; Ex P + + + + aso rexr rexx rexb ; ssef2 0f 12 ; V W + + + + aso rexr rexx rexb ; sse66 0f 7f ; W V + + + + aso rexr rexx rexb ; ssef3 0f 6f ; V W + aso rexr rexx rexb ; ssef3 0f 7f ; W V + + + + aso rexb ; ssef2 0f d6 ; P VR + + + + aso rexr rexx rexb ; sse66 0f 16 ; V M + aso rexr rexx rexb ; sse66 0f 17 ; M V + + + + aso rexr rexx rexb ; 0f 16 ; V W + aso rexr rexx rexb ; 0f 17 ; M V + + + + + + aso rexr rexx rexb ; sse66 0f 12 ; V M + aso rexr rexx rexb ; sse66 0f 13 ; M V + + + + aso rexr rexx rexb ; 0f 12 ; V W + aso rexr rexx rexb ; 0f 13 ; M V + + + + + + oso rexr rexb ; sse66 0f 50 ; Gd VR + + + + oso rexr rexb ; 0f 50 ; Gd VR + + + + aso rexr rexx rexb ; sse66 0f e7 ; M V + + + + aso rexw rexr rexx rexb ; 0f c3 ; M Gvw + + + + aso rexr rexx rexb ; sse66 0f 2b ; M V + + + + aso rexr rexx rexb ; 0f 2b ; M V + + + + 0f e7 ; M P + + + + aso rexr rexx rexb ; 0f 6f ; P Q + aso rexr rexx rexb ; sse66 0f d6 ; W V + aso rexr rexx rexb ; ssef3 0f 7e ; V W + aso rexr rexx rexb ; 0f 7f ; Q P + + + + aso rexr rexx rexb ; sse66 0f 6f ; V W + + + + aso ; ssef3 0f d6 ; V PR + + + + a4 ; + + + + oso rexw ; a5 /O16 ; + + + + oso rexw ; a5 /O32 ; + aso rexr rexx rexb ; ssef2 0f 10 ; V W + aso rexr rexx rexb ; ssef2 0f 11 ; W V + + + + oso rexw ; a5 /O64 ; + + + + aso rexr rexx rexb ; ssef3 0f 12 ; V W + + + + aso rexr rexx rexb ; ssef3 0f 16 ; V W + + + + aso rexr rexx rexb ; ssef3 0f 10 ; V W + aso rexr rexx rexb ; ssef3 0f 11 ; W V + + + + aso oso rexw rexr rexx rexb ; 0f be ; Gv Eb + aso oso rexw rexr rexx rexb ; 0f bf ; Gv Ew + + + + aso rexr rexx rexb ; sse66 0f 10 ; V W + aso rexr rexx rexb ; sse66 0f 11 ; W V + + + + aso rexr rexx rexb ; 0f 10 ; V W + aso rexr rexx rexb ; 0f 11 ; W V + + + + aso oso rexw rexr rexx rexb ; 0f b6 ; Gv Eb + aso oso rexw rexr rexx rexb ; 0f b7 ; Gv Ew + + + + aso rexw rexr rexx rexb ; F6 /4 ; Eb + aso oso rexw rexr rexx rexb ; F7 /4 ; Ev + + + + aso rexr rexx rexb ; sse66 0f 59 ; V W + + + + aso rexr rexx rexb ; 0f 59 ; V W + + + + aso rexr rexx rexb ; ssef2 0f 59 ; V W + + + + aso rexr rexx rexb ; ssef3 0f 59 ; V W + + + + 0F 01 /1 /mod=11 /rm=1 ; + + + + aso rexw rexr rexx rexb ; F6 /3 ; Eb + aso oso rexw rexr rexx rexb ; F7 /3 ; Ev + + + + ; 90 ; + aso rexr rexx rexb ; 0f 19 ; M + aso rexr rexx rexb ; 0f 1a ; M + aso rexr rexx rexb ; 0f 1b ; M + aso rexr rexx rexb ; 0f 1c ; M + aso rexr rexx rexb ; 0f 1d ; M + aso rexr rexx rexb ; 0f 1e ; M + aso rexr rexx rexb ; 0f 1f ; M + + + + aso rexw rexr rexx rexb ; F6 /2 ; Eb + aso oso rexw rexr rexx rexb ; F7 /2 ; Ev + + + + aso rexr rexx rexb ; 08 ; Eb Gb + aso oso rexw rexr rexx rexb ; 09 ; Ev Gv + aso rexr rexx rexb ; 0a ; Gb Eb + aso oso rexw rexr rexx rexb ; 0b ; Gv Ev + ; 0c ; AL Ib + oso rexw ; 0d ; rAX Iz + aso rexr rexx rexb ; 80 /1 ; Eb Ib + aso oso rexw rexr rexx rexb ; 81 /1 ; Ev Iz + aso rexr rexx rexb ; 82 /1 ; Eb Ib + aso oso rexw rexr rexx rexb ; 83 /1 ; Ev Ib + + + + aso rexr rexx rexb ; sse66 0f 56 ; V W + + + + aso rexr rexx rexb ; 0f 56 ; V W + + + + ; e6 ; Ib AL + oso ; e7 ; Ib eAX + ; ee ; DX AL + oso ; ef ; DX eAX + + + + 6e ; + + + + oso ; 6f /o16 ; + + + + oso ; 6f /o32 ; + + + + oso ; 6f /o64; + + + + aso rexr rexx rexb ; sse66 0f 63 ; V W + aso rexr rexx rexb ; 0f 63 ; P Q + + + + aso rexr rexx rexb ; sse66 0f 6b ; V W + aso rexr rexx rexb ; 0f 6b ; P Q + + + + aso rexr rexx rexb ; sse66 0f 67 ; V W + aso rexr rexx rexb ; 0f 67 ; P Q + + + + aso rexr rexx rexb ; sse66 0f fc ; V W + aso rexr rexx rexb ; 0f fc ; P Q + + + + aso rexr rexx rexb ; 0f fd ; P Q + aso rexr rexx rexb ; sse66 0f fd ; V W + + + + aso rexr rexx rexb ; 0f d4 ; P Q + aso rexr rexx rexb ; sse66 0f d4 ; V W + + + + aso rexr rexx rexb ; 0f ec ; P Q + aso rexr rexx rexb ; sse66 0f ec ; V W + + + + aso rexr rexx rexb ; 0f ed ; P Q + aso rexr rexx rexb ; sse66 0f ed ; V W + + + + aso rexr rexx rexb ; 0f dc ; P Q + + + + aso rexr rexx rexb ; 0f dd ; P Q + + + + aso rexr rexx rexb ; sse66 0f db ; V W + aso rexr rexx rexb ; 0f db ; P Q + + + + aso rexr rexx rexb ; sse66 0f df ; V W + aso rexr rexx rexb ; 0f df ; P Q + + + + ; f3 90 ; + + + + aso rexr rexx rexb ; sse66 0f e0 ; V W + aso rexr rexx rexb ; 0f e0 ; P Q + + + + aso rexr rexx rexb ; sse66 0f e3 ; V W + aso rexr rexx rexb ; 0f e3 ; P Q + + + + aso rexr rexx rexb ; 0f 74 ; P Q + aso rexr rexx rexb ; sse66 0f 74 ; V W + + + + aso rexr rexx rexb ; 0f 75 ; P Q + aso rexr rexx rexb ; sse66 0f 75 ; V W + + + + aso rexr rexx rexb ; 0f 76 ; P Q + aso rexr rexx rexb ; sse66 0f 76 ; V W + + + + aso rexr rexx rexb ; sse66 0f 64 ; V W + aso rexr rexx rexb ; 0f 64 ; P Q + + + + aso rexr rexx rexb ; sse66 0f 65 ; V W + aso rexr rexx rexb ; 0f 65 ; P Q + + + + aso rexr rexx rexb ; sse66 0f 66 ; V W + aso rexr rexx rexb ; 0f 66 ; P Q + + + + aso rexr rexb ; sse66 0f c5 ; Gd VR Ib + aso oso rexw rexr rexx rexb ; 0f c5 ; Gd PR Ib + + + + aso oso rexw rexr rexx rexb ; 0f c4 ; P Ew Ib + aso rexw rexr rexx rexb ; sse66 0f c4 ; V Ew Ib + + + + aso rexr rexx rexb ; 0f f5 ; P Q + aso rexr rexx rexb ; sse66 0f f5 ; V W + + + + aso rexr rexx rexb ; sse66 0f ee ; V W + aso rexr rexx rexb ; 0f ee ; P Q + + + + aso rexr rexx rexb ; 0f de ; P Q + aso rexr rexx rexb ; sse66 0f de ; V W + + + + aso rexr rexx rexb ; sse66 0f ea ; V W + aso rexr rexx rexb ; 0f ea ; P Q + + + + aso rexr rexx rexb ; sse66 0f da ; V W + aso rexr rexx rexb ; 0f da ; P Q + + + + rexr rexb ; sse66 0f d7 ; Gd VR + oso rexr rexb ; 0f d7 ; Gd PR + + + + aso rexr rexx rexb ; 0f e4 ; P Q + aso rexr rexx rexb ; sse66 0f e4 ; V W + + + + aso rexr rexx rexb ; sse66 0f e5 ; V W + aso rexr rexx rexb ; 0f e5 ; P Q + + + + aso rexr rexx rexb ; 0f d5 ; P Q + aso rexr rexx rexb ; sse66 0f d5 ; V W + + + + aso rexr rexx rexb ; 0f f4 ; P Q + aso rexr rexx rexb ; sse66 0f f4 ; V W + + + + ; 07 ; ES + ; 17 ; SS + ; 1f ; DS + 0f a9 ; GS + 0f a1 ; FS + oso rexb ; 58 ; rAXr8 + oso rexb ; 59 ; rCXr9 + oso rexb ; 5A ; rDXr10 + oso rexb ; 5B ; rBXr11 + oso rexb ; 5C ; rSPr12 + oso rexb ; 5D ; rBPr13 + oso rexb ; 5E ; rSIr14 + oso rexb ; 5F ; rDIr15 + aso oso rexw rexr rexx rexb ; 8F /0 ; Ev + + + + oso ; 61 /O16 ; + + + + oso ; 61 /O32 ; + + + + oso ; 9d /M32 /O16 ; + oso ; 9d /M16 /O16 ; + + + + oso ; 9d /M16 /O32 ; + oso ; 9d /M32 /O32 ; + + + + oso ; 9d /M64 ; + + + + aso rexr rexx rexb ; sse66 0f eb ; V W + aso rexr rexx rexb ; 0f eb ; P Q + + + + aso rexw rexr rexx rexb ; 0F 0D /0 ; M + aso rexw rexr rexx rexb ; 0F 0D /1 ; M + aso rexw rexr rexx rexb ; 0F 0D /2 ; M + aso rexw rexr rexx rexb ; 0F 0D /3 ; M + aso rexw rexr rexx rexb ; 0F 0D /4 ; M + aso rexw rexr rexx rexb ; 0F 0D /5 ; M + aso rexw rexr rexx rexb ; 0F 0D /6 ; M + aso rexw rexr rexx rexb ; 0F 0D /7 ; M + + + + aso rexw rexr rexx rexb ; 0F 18 /0 ; M + + + + aso rexw rexr rexx rexb ; 0F 18 /1 ; M + + + + aso rexw rexr rexx rexb ; 0F 18 /2 ; M + + + + aso rexw rexr rexx rexb ; 0F 18 /3 ; M + + + + aso rexr rexx rexb ; sse66 0f f6 ; V W + aso rexr rexx rexb ; 0f f6 ; P Q + + + + aso rexr rexx rexb ; sse66 0f 70 ; V W Ib + + + + aso rexr rexx rexb ; ssef3 0f 70 ; V W Ib + + + + aso rexr rexx rexb ; ssef2 0f 70 ; V W Ib + + + + aso rexr rexx rexb ; 0f 70 ; P Q Ib + + + + rexb ; sse66 0F 73 /7 ; VR Ib + + + + aso rexr rexx rexb ; sse66 0f f1 ; V W + aso rexr rexx rexb ; 0f f1 ; P Q + rexb ; sse66 0F 71 /6 ; VR Ib + 0F 71 /6 ; PR Ib + + + + aso rexr rexx rexb ; sse66 0f f2 ; V W + aso rexr rexx rexb ; 0f f2 ; P Q + rexb ; sse66 0F 72 /6 ; VR Ib + 0F 72 /6 ; PR Ib + + + + aso rexr rexx rexb ; sse66 0f f3 ; V W + aso rexr rexx rexb ; 0f f3 ; P Q + rexb ; sse66 0F 73 /6 ; VR Ib + 0F 73 /6 ; PR Ib + + + + aso rexr rexx rexb ; 0f e1 ; P Q + aso rexr rexx rexb ; sse66 0f e1 ; V W + rexb ; sse66 0F 71 /4 ; VR Ib + 0F 71 /4 ; PR Ib + + + + 0F 72 /4 ; PR Ib + aso rexr rexx rexb ; sse66 0f e2 ; V W + aso rexr rexx rexb ; 0f e2 ; P Q + rexb ; sse66 0F 72 /4 ; VR Ib + + + + 0F 71 /2 ; PR Ib + aso rexr rexx rexb ; 0f d1 ; P Q + aso rexr rexx rexb ; sse66 0f d1 ; V W + rexb ; sse66 0F 71 /2 ; VR Ib + + + + 0F 72 /2 ; PR Ib + aso rexr rexx rexb ; 0f d2 ; P Q + aso rexr rexx rexb ; sse66 0f d2 ; V W + rexb ; sse66 0F 72 /2 ; VR Ib + + + + 0F 73 /2 ; PR Ib + aso rexr rexx rexb ; 0f d3 ; P Q + aso rexr rexx rexb ; sse66 0f d3 ; V W + rexb ; sse66 0F 73 /2 ; VR Ib + + + + rexb ; sse66 0F 73 /3 ; VR Ib + + + + aso rexr rexx rexb ; sse66 0f f8 ; V W + aso rexr rexx rexb ; 0f f8 ; P Q + + + + aso rexr rexx rexb ; sse66 0f f9 ; V W + aso rexr rexx rexb ; 0f f9 ; P Q + + + + aso rexr rexx rexb ; 0f fa ; P Q + aso rexr rexx rexb ; sse66 0f fa ; V W + + + + aso rexr rexx rexb ; sse66 0f fb ; V W + aso rexr rexx rexb ; 0f fb ; P Q + + + + aso rexr rexx rexb ; 0f e8 ; P Q + aso rexr rexx rexb ; sse66 0f e8 ; V W + + + + aso rexr rexx rexb ; 0f e9 ; P Q + aso rexr rexx rexb ; sse66 0f e9 ; V W + + + + aso rexr rexx rexb ; 0f d8 ; P Q + aso rexr rexx rexb ; sse66 0f d8 ; V W + aso rexr rexx rexb ; sse66 0f dc ; V W + + + + aso rexr rexx rexb ; 0f d9 ; P Q + aso rexr rexx rexb ; sse66 0f d9 ; V W + + + + aso rexr rexx rexb ; sse66 0f 68 ; V W + aso rexr rexx rexb ; sse66 0f dd ; V W + aso rexr rexx rexb ; 0f 68 ; P Q + + + + aso rexr rexx rexb ; sse66 0f 69 ; V W + aso rexr rexx rexb ; 0f 69 ; P Q + + + + aso rexr rexx rexb ; sse66 0f 6a ; V W + aso rexr rexx rexb ; 0f 6a ; P Q + + + + aso rexr rexx rexb ; sse66 0f 6d ; V W + + + + aso rexr rexx rexb ; sse66 0f 60 ; V W + aso rexr rexx rexb ; 0f 60 ; P Q + + + + aso rexr rexx rexb ; sse66 0f 61 ; V W + aso rexr rexx rexb ; 0f 61 ; P Q + + + + aso rexr rexx rexb ; sse66 0f 62 ; V W + aso rexr rexx rexb ; 0f 62 ; P Q + + + + aso rexr rexx rexb ; sse66 0f 6c ; V W + + + + ; 0f 0f /3dnow=0C ; P Q + + + + ; 0f 0f /3dnow=0D ; P Q + + + + ; 0f 0f /3dnow=1C ; P Q + + + + ; 0f 0f /3dnow=1D ; P Q + + + + ; 0f 0f /3dnow=8A ; P Q + + + + ; 0f 0f /3dnow=8E ; P Q + + + + ; 0f 0f /3dnow=90 ; P Q + + + + ; 0f 0f /3dnow=94 ; P Q + + + + ; 0f 0f /3dnow=96 ; P Q + + + + ; 0f 0f /3dnow=97 ; P Q + + + + ; 0f 0f /3dnow=9A ; P Q + + + + ; 0f 0f /3dnow=9E ; P Q + + + + ; 0f 0f /3dnow=A0 ; P Q + + + + ; 0f 0f /3dnow=A4 ; P Q + + + + ; 0f 0f /3dnow=A6 ; P Q + + + + ; 0f 0f /3dnow=A7 ; P Q + + + + ; 0f 0f /3dnow=AA ; P Q + + + + ; 0f 0f /3dnow=AE ; P Q + + + + ; 0f 0f /3dnow=B0 ; P Q + + + + ; 0f 0f /3dnow=B4 ; P Q + + + + ; 0f 0f /3dnow=B6 ; P Q + + + + ; 0f 0f /3dnow=B7 ; P Q + + + + ; 0f 0f /3dnow=BB ; P Q + + + + ; 0f 0f /3dnow=BF ; P Q + + + + ; 06 ; ES + ; 0e ; CS + ; 16 ; SS + ; 1e ; DS + ; 0f a8 ; GS + ; 0f a0 ; FS + oso rexb ; 50 ; rAXr8 + oso rexb ; 51 ; rCXr9 + oso rexb ; 52 ; rDXr10 + oso rexb ; 53 ; rBXr11 + oso rexb ; 54 ; rSPr12 + oso rexb ; 55 ; rBPr13 + oso rexb ; 56 ; rSIr14 + oso rexb ; 57 ; rDIr15 + oso ; 68 ; Iz + aso oso rexw rexr rexx rexb ; FF /6 ; Ev + ; 6a ; Ib + + + + oso ; 60 /O16 ; + + + + oso ; 60 /O32 ; + + + + oso ; 9c /M32 /O16 ; + oso ; 9c /M16 /O16 ; + oso rexw ; 9c /M64 /O16 ; + + + + oso ; 9c /M16 /O32 ; + oso ; 9c /M32 /O32 ; + + + + oso rexw ; 9c /M64 /O32 ; + oso rexw ; 9c /M64 /O64 ; + + + + aso rexr rexx rexb ; sse66 0f ef ; V W + aso rexr rexx rexb ; 0f ef ; P Q + + + + aso rexw rexr rexx rexb ; C0 /2 ; Eb Ib + aso oso rexw rexr rexx rexb ; C1 /2 ; Ev Ib + aso rexw rexr rexx rexb ; D0 /2 ; Eb I1 + aso rexw rexr rexx rexb ; D2 /2 ; Eb CL + aso oso rexw rexr rexx rexb ; D3 /2 ; Ev CL + aso oso rexw rexr rexx rexb ; D1 /2 ; Ev I1 + + + + aso rexw rexr rexx rexb ; D0 /3 ; Eb I1 + aso oso rexw rexr rexx rexb ; C1 /3 ; Ev Ib + aso rexw rexr rexx rexb ; C0 /3 ; Eb Ib + aso oso rexw rexr rexx rexb ; D1 /3 ; Ev I1 + aso rexw rexr rexx rexb ; D2 /3 ; Eb CL + aso oso rexw rexr rexx rexb ; D3 /3 ; Ev CL + + + + aso rexw rexr rexx rexb ; C0 /0 ; Eb Ib + aso rexw rexr rexx rexb ; D0 /0 ; Eb I1 + aso oso rexw rexr rexx rexb ; D1 /0 ; Ev I1 + aso rexw rexr rexx rexb ; D2 /0 ; Eb CL + aso oso rexw rexr rexx rexb ; D3 /0 ; Ev CL + aso oso rexw rexr rexx rexb ; C1 /0 ; Ev Ib + + + + aso rexw rexr rexx rexb ; D0 /1 ; Eb I1 + aso rexw rexr rexx rexb ; C0 /1 ; Eb Ib + aso oso rexw rexr rexx rexb ; C1 /1 ; Ev Ib + aso oso rexw rexr rexx rexb ; D1 /1 ; Ev I1 + aso rexw rexr rexx rexb ; D2 /1 ; Eb CL + aso oso rexw rexr rexx rexb ; D3 /1 ; Ev CL + + + + aso rexr rexx rexb ; 0f 53 ; V W + + + + aso rexr rexx rexb ; ssef3 0f 53 ; V W + + + + 0f 32 ; + + + + 0f 33 ; + + + + 0f 31 ; + + + + 0F 01 /7 /mod=11 /rm=1 ; + AMD + + + + f2 ; + + + + f3 ; + + + + ; c2 ; Iw + ; c3 ; + + + + ; ca ; Iw + ; cb ; + + + + 0f aa ; + + + + aso rexr rexx rexb ; 0f 52 ; V W + + + + aso rexr rexx rexb ; ssef3 0f 52 ; V W + + + + ; 9e ; + + + + + + + + ; d6 ; + + + + aso oso rexw rexr rexx rexb ; D1 /7 ; Ev I1 + aso rexw rexr rexx rexb ; C0 /7 ; Eb Ib + aso rexw rexr rexx rexb ; D0 /7 ; Eb I1 + aso oso rexw rexr rexx rexb ; C1 /7 ; Ev Ib + aso rexw rexr rexx rexb ; D2 /7 ; Eb CL + aso oso rexw rexr rexx rexb ; D3 /7 ; Ev CL + + + + aso rexw rexr rexx rexb ; C0 /6 ; Eb Ib + aso oso rexw rexr rexx rexb ; C1 /6 ; Ev Ib + aso rexw rexr rexx rexb ; D0 /6 ; Eb I1 + aso rexw rexr rexx rexb ; D2 /6 ; Eb CL + aso oso rexw rexr rexx rexb ; D3 /6 ; Ev CL + aso oso rexw rexr rexx rexb ; C1 /4 ; Ev Ib + aso rexr rexx rexb ; D2 /4 ; Eb CL + aso oso rexw rexr rexx rexb ; D1 /4 ; Ev I1 + aso rexw rexr rexx rexb ; D0 /4 ; Eb I1 + aso rexw rexr rexx rexb ; C0 /4 ; Eb Ib + aso oso rexw rexr rexx rexb ; D3 /4 ; Ev CL + aso oso rexw rexr rexx rexb ; D1 /6 ; Ev I1 + + + + aso oso rexw rexr rexx rexb ; C1 /5 ; Ev Ib + aso rexw rexr rexx rexb ; D2 /5 ; Eb CL + aso oso rexw rexr rexx rexb ; D1 /5 ; Ev I1 + aso rexw rexr rexx rexb ; D0 /5 ; Eb I1 + aso rexw rexr rexx rexb ; C0 /5 ; Eb Ib + aso oso rexw rexr rexx rexb ; D3 /5 ; Ev CL + + + + aso rexr rexx rexb ; 18 ; Eb Gb + aso oso rexw rexr rexx rexb ; 19 ; Ev Gv + aso rexr rexx rexb ; 1a ; Gb Eb + aso oso rexw rexr rexx rexb ; 1b ; Gv Ev + ; 1c ; AL Ib + oso rexw ; 1d ; rAX Iz + aso rexr rexx rexb ; 80 /3 ; Eb Ib + aso oso rexw rexr rexx rexb ; 81 /3 ; Ev Iz + aso rexr rexx rexb ; 82 /3 ; Eb Ib + aso oso rexw rexr rexx rexb ; 83 /3 ; Ev Ib + + + + ; ae ; + + + + oso rexw ; af /O16 ; + + + + oso rexw ; af /O32 ; + + + + oso rexw ; af /O64 ; + + + + aso rexr rexx rexb ; 0f 90 ; Eb + + + + aso rexr rexx rexb ; 0f 91 ; Eb + + + + aso rexr rexx rexb ; 0f 92 ; Eb + + + + aso rexr rexx rexb ; 0f 93 ; Eb + + + + aso rexr rexx rexb ; 0f 94 ; Eb + + + + aso rexr rexx rexb ; 0f 95 ; Eb + + + + aso rexr rexx rexb ; 0f 96 ; Eb + + + + aso rexr rexx rexb ; 0f 97 ; Eb + + + + aso rexr rexx rexb ; 0f 98 ; Eb + + + + aso rexr rexx rexb ; 0f 99 ; Eb + + + + aso rexr rexx rexb ; 0f 9a ; Eb + + + + aso rexr rexx rexb ; 0f 9b ; Eb + + + + aso rexr rexx rexb ; 0f 9c ; Eb + + + + aso rexr rexx rexb ; 0f 9d ; Eb + + + + aso rexr rexx rexb ; 0f 9e ; Eb + + + + aso rexr rexx rexb ; 0f 9f ; Eb + + + + 0F AE /7 /mod=11 /rm=0 ; + 0F AE /7 /mod=11 /rm=1 ; + 0F AE /7 /mod=11 /rm=2 ; + 0F AE /7 /mod=11 /rm=3 ; + 0F AE /7 /mod=11 /rm=4 ; + 0F AE /7 /mod=11 /rm=5 ; + 0F AE /7 /mod=11 /rm=6 ; + 0F AE /7 /mod=11 /rm=7 ; + + + + aso rexr rexx rexb ; 0F 01 /0 /mod=!11 ; M + + + + aso oso rexw rexr rexx rexb ; 0f a4 ; Ev Gv Ib + aso oso rexw rexr rexx rexb ; 0f a5 ; Ev Gv CL + + + + aso oso rexw rexr rexx rexb ; 0f ac ; Ev Gv Ib + aso oso rexw rexr rexx rexb ; 0f ad ; Ev Gv CL + + + + aso rexr rexx rexb ; sse66 0f c6 ; V W Ib + + + + aso rexr rexx rexb ; 0f c6 ; V W Ib + + + + aso rexr rexx rexb ; 0F 01 /1 /mod=!11 ; M + + + + aso oso rexr rexx rexb ; 0F 00 /0 ; Ev + + + + aso rexr rexx rexb ; 0F 01 /4 /mod=!11 ; M + + + + aso rexr rexx rexb ; 0f 51 ; V W + + + + aso rexr rexx rexb ; sse66 0f 51 ; V W + + + + aso rexr rexx rexb ; ssef2 0f 51 ; V W + + + + aso rexr rexx rexb ; ssef3 0f 51 ; V W + + + + f9 ; + + + + fd ; + + + + 0F 01 /3 /mod=11 /rm=4 ; + AMD + + + + fb ; + + + + 0F 01 /3 /mod=11 /rm=6 ; + AMD + + + + aso rexw rexr rexx rexb ; 0F AE /3 ; Md + + + + ; aa ; + + + + oso rexw ; ab /O16 ; + + + + oso rexw ; ab /O32 ; + + + + oso rexw ; ab /O64 ; + + + + aso oso rexr rexx rexb ; 0F 00 /1 ; Ev + + + + aso rexr rexx rexb ; 28 ; Eb Gb + aso oso rexw rexr rexx rexb ; 29 ; Ev Gv + aso rexr rexx rexb ; 2a ; Gb Eb + aso oso rexw rexr rexx rexb ; 2b ; Gv Ev + 2c ; AL Ib + oso rexw ; 2d ; rAX Iz + aso rexr rexx rexb ; 80 /5 ; Eb Ib + aso oso rexw rexr rexx rexb ; 81 /5 ; Ev Iz + aso rexr rexx rexb ; 82 /5 ; Eb Ib + aso oso rexw rexr rexx rexb ; 83 /5 ; Ev Ib + + + + aso rexr rexx rexb ; sse66 0f 5c ; V W + + + + aso rexr rexx rexb ; 0f 5c ; V W + + + + aso rexr rexx rexb ; ssef2 0f 5c ; V W + + + + aso rexr rexx rexb ; ssef3 0f 5c ; V W + + + + 0F 01 /7 /mod=11 /rm=0 ; + + + + 0f 05 ; + + + + 0f 34 ; + + + + 0f 35 ; + + + + 0f 07 ; + + + + aso rexw rexr rexx rexb ; F6 /0 ; Eb Ib + aso rexr rexx rexb ; 84 ; Eb Gb + aso oso rexw rexr rexx rexb ; 85 ; Ev Gv + a8 ; AL Ib + oso rexw ; a9 ; rAX Iz + aso rexw rexr rexx rexb ; F6 /1 ; Eb Ib + aso oso rexw rexr rexx rexb ; F7 /0 ; Ev Iz + aso oso rexw rexr rexx rexb ; F7 /1 ; Ev Iz + + + + + aso rexr rexx rexb ; sse66 0f 2e ; V W + + + + aso rexr rexx rexb ; 0f 2e ; V W + + + + 0f 0b ; + + + + aso rexr rexx rexb ; sse66 0f 15 ; V W + + + + aso rexr rexx rexb ; 0f 15 ; V W + + + + aso rexr rexx rexb ; 0f 14 ; V W + + + + aso rexr rexx rexb ; sse66 0f 14 ; V W + + + + aso rexr rexx rexb ; 0F 00 /4 ; Ew + + + + aso rexr rexx rexb ; 0F 00 /5 ; Ew + + + + 0F 01 /0 /mod=11 /rm=1 ; + INTEL + + + + aso rexr rexx rexb ; sse66 0F C7 /6 ; Mq + INTEL + + + + aso rexr rexx rexb ; ssef3 0F C7 /6 ; Mq + INTEL + + + + aso rexr rexx rexb ; 0F C7 /6 ; Mq + INTEL + + + + aso rexr rexx rexb ; 0F C7 /7 ; Mq + INTEL + + + + 0F 01 /0 /mod=11 /rm=2 ; + INTEL + + + + 0F 01 /0 /mod=11 /rm=3 ; + INTEL + + + + 0F 01 /0 /mod=11 /rm=4 ; + INTEL + + + + aso rexr rexx rexb ; 0F 78 /M16 ; Ed Gd + aso rexr rexx rexb ; 0F 78 /M32 ; Ed Gd + aso rexr rexx rexb ; 0F 78 /M64 ; Eq Gq + INTEL + + + + aso rexr rexx rexb ; 0F 79 /M16 ; Gd Ed + aso rexr rexx rexb ; 0F 79 /M32 ; Gd Ed + aso rexr rexx rexb ; 0F 79 /M64 ; Gq Eq + INTEL + + + + 0F 01 /3 /mod=11 /rm=0 ; + AMD + + + + 0F 01 /3 /mod=11 /rm=1 ; + AMD + + + + 0F 01 /3 /mod=11 /rm=2 ; + AMD + + + + 0F 01 /3 /mod=11 /rm=3 ; + AMD + + + + ; 9b ; + + + + 0f 09 ; + + + + 0f 30 ; + + + + aso oso rexr rexx rexb ; 0f c0 ; Eb Gb + aso oso rexw rexr rexx rexb ; sse66 0f c1 ; Ev Gv + aso rexw rexr rexx rexb ; sse66 0f c0 ; Eb Gb + aso rexw rexr rexx rexb ; ssef2 0f c0 ; Eb Gb + aso oso rexr rexx rexb ; ssef2 0f c1 ; Ev Gv + aso rexw rexr rexx rexb ; ssef3 0f c0 ; Eb Gb + aso rexw rexr rexx rexb ; ssef3 0f c1 ; Ev Gv + aso oso rexw rexr rexx rexb ; 0f c1 ; Ev Gv + + + + aso rexr rexx rexb ; 86 ; Eb Gb + aso oso rexw rexr rexx rexb ; 87 ; Ev Gv + oso rexw rexb ; 90 ; rAXr8 rAX + oso rexw rexb ; 91 ; rCXr9 rAX + oso rexw rexb ; 92 ; rDXr10 rAX + oso rexw rexb ; 93 ; rBXr11 rAX + oso rexw rexb ; 94 ; rSPr12 rAX + oso rexw rexb ; 95 ; rBPr13 rAX + oso rexw rexb ; 96 ; rSIr14 rAX + oso rexw rexb ; 97 ; rDIr15 rAX + + + + rexw ; d7 ; + + + + aso rexr rexx rexb ; 30 ; Eb Gb + aso oso rexw rexr rexx rexb ; 31 ; Ev Gv + aso rexr rexx rexb ; 32 ; Gb Eb + aso oso rexw rexr rexx rexb ; 33 ; Gv Ev + ; 34 ; AL Ib + oso rexw ; 35 ; rAX Iz + aso rexr rexx rexb ; 80 /6 ; Eb Ib + aso oso rexw rexr rexx rexb ; 81 /6 ; Ev Iz + aso rexr rexx rexb ; 82 /6 ; Eb Ib + aso oso rexw rexr rexx rexb ; 83 /6 ; Ev Ib + + + + aso rexr rexx rexb ; sse66 0f 57 ; V W + + + + aso rexr rexx rexb ; 0f 57 ; V W + + + + ; 0f a7 /mod=11 /rm=0 /1 ; + + + + ; 0f a7 /mod=11 /rm=0 /2 ; + + + + ; 0f a7 /mod=11 /rm=0 /3 ; + + + + ; 0f a7 /mod=11 /rm=0 /4 ; + + + + ; 0f a7 /mod=11 /rm=0 /5 ; + + + + ; 0f a6 /mod=11 /rm=0 /1 ; + + + + ; 0f a6 /mod=11 /rm=0 /2 ; + + + + ; 0f a7 /mod=11 /rm=0 /0 ; + + + + + + + diff --git a/docs/x86optable.xsl b/docs/x86optable.xsl new file mode 100644 index 0000000..df1c0cf --- /dev/null +++ b/docs/x86optable.xsl @@ -0,0 +1,63 @@ + + + + + x86 opcode table + + + +

x86optable.xml

+

+ udis86.sourceforge.net

+ + + + + + + + + + + + + +
MnemonicOpcodesVendor
+ + +
+
+
+ + +
+
+
+

+ Copyright (c) 2008, Vivek Thampi +

+ + + + + diff --git a/libudis86/Makefile.am b/libudis86/Makefile.am new file mode 100644 index 0000000..65ba915 --- /dev/null +++ b/libudis86/Makefile.am @@ -0,0 +1,33 @@ +lib_LTLIBRARIES = libudis86.la + +include_ladir = ${includedir} +libudis86_ladir = ${includedir}/libudis86 + +libudis86_la_SOURCES = itab.c \ + input.c \ + decode.c \ + syn.c \ + syn-intel.c \ + syn-att.c \ + udis86.c \ + input.h \ + syn.h \ + decode.h \ + extern.h \ + types.h \ + itab.h \ + opgen.py + +libudis86_la_HEADERS = types.h extern.h itab.h + +# DLLs may not contain undefined symbol references. We have the linker +# check this explicitly. +if TARGET_WINDOWS +libudis86_la_LDFLAGS=-no-undefined -version-info 0:0:0 +endif + +itab.c itab.h: ../docs/x86optable.xml opgen.py + python ./opgen.py $< + +clean-local: + rm -rf itab.c itab.h diff --git a/libudis86/Makefile.win32 b/libudis86/Makefile.win32 new file mode 100644 index 0000000..c5f88a1 --- /dev/null +++ b/libudis86/Makefile.win32 @@ -0,0 +1,43 @@ +# +# Makefile for win32 compilers +# +# (I need some help here.) +# + +CC = cl +CFLAGS = /O2 +AR = lib +RM = del +PERL = perl + +.SUFFIXES: .c .obj +.c.obj: + $(CC) -c $(CFLAGS) -o $@ $< + +OBJS = itab.obj \ + input.obj \ + decode.obj \ + input.obj \ + decode.obj \ + syn.obj \ + syn-intel.obj \ + syn-att.obj \ + udis86.obj + +HDRS = types.h \ + extern.h \ + itab.h \ + decode.h \ + syn.h \ + input.h + +libudis86.a: $(OBJS) + $(AR) /out:udis86.lib $(OBJS) + +itab.c itab.h: x86optable.xml opgen.py + python ./opgen.py + +itab.c input.c decode.c syn-intel.c syn-att.c syn.c udis86.c: $(HDRS) + +clean: + $(RM) *.obj *.lib diff --git a/libudis86/decode.c b/libudis86/decode.c new file mode 100644 index 0000000..90f6c05 --- /dev/null +++ b/libudis86/decode.c @@ -0,0 +1,1221 @@ +/* udis86 - libudis86/decode.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef __UD_STANDALONE__ +# include +#endif /* __UD_STANDALONE__ */ + +#include "types.h" +#include "itab.h" +#include "input.h" +#include "decode.h" + +/* The max number of prefixes to an instruction */ +#define MAX_PREFIXES 15 + +static struct ud_itab_entry ie_invalid = { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }; +static struct ud_itab_entry ie_pause = { UD_Ipause, O_NONE, O_NONE, O_NONE, P_none }; +static struct ud_itab_entry ie_nop = { UD_Inop, O_NONE, O_NONE, O_NONE, P_none }; + + +/* Looks up mnemonic code in the mnemonic string table + * Returns NULL if the mnemonic code is invalid + */ +const char * ud_lookup_mnemonic( enum ud_mnemonic_code c ) +{ + if ( c < UD_Id3vil ) + return ud_mnemonics_str[ c ]; + return NULL; +} + + +/* Extracts instruction prefixes. + */ +static int get_prefixes( struct ud* u ) +{ + unsigned int have_pfx = 1; + unsigned int i; + uint8_t curr; + + /* if in error state, bail out */ + if ( u->error ) + return -1; + + /* keep going as long as there are prefixes available */ + for ( i = 0; have_pfx ; ++i ) { + + /* Get next byte. */ + inp_next(u); + if ( u->error ) + return -1; + curr = inp_curr( u ); + + /* rex prefixes in 64bit mode */ + if ( u->dis_mode == 64 && ( curr & 0xF0 ) == 0x40 ) { + u->pfx_rex = curr; + } else { + switch ( curr ) + { + case 0x2E : + u->pfx_seg = UD_R_CS; + u->pfx_rex = 0; + break; + case 0x36 : + u->pfx_seg = UD_R_SS; + u->pfx_rex = 0; + break; + case 0x3E : + u->pfx_seg = UD_R_DS; + u->pfx_rex = 0; + break; + case 0x26 : + u->pfx_seg = UD_R_ES; + u->pfx_rex = 0; + break; + case 0x64 : + u->pfx_seg = UD_R_FS; + u->pfx_rex = 0; + break; + case 0x65 : + u->pfx_seg = UD_R_GS; + u->pfx_rex = 0; + break; + case 0x67 : /* adress-size override prefix */ + u->pfx_adr = 0x67; + u->pfx_rex = 0; + break; + case 0xF0 : + u->pfx_lock = 0xF0; + u->pfx_rex = 0; + break; + case 0x66: + /* the 0x66 sse prefix is only effective if no other sse prefix + * has already been specified. + */ + if ( !u->pfx_insn ) u->pfx_insn = 0x66; + u->pfx_opr = 0x66; + u->pfx_rex = 0; + break; + case 0xF2: + u->pfx_insn = 0xF2; + u->pfx_repne = 0xF2; + u->pfx_rex = 0; + break; + case 0xF3: + u->pfx_insn = 0xF3; + u->pfx_rep = 0xF3; + u->pfx_repe = 0xF3; + u->pfx_rex = 0; + break; + default : + /* No more prefixes */ + have_pfx = 0; + break; + } + } + + /* check if we reached max instruction length */ + if ( i + 1 == MAX_INSN_LENGTH ) { + u->error = 1; + break; + } + } + + /* return status */ + if ( u->error ) + return -1; + + /* rewind back one byte in stream, since the above loop + * stops with a non-prefix byte. + */ + inp_back(u); + + /* speculatively determine the effective operand mode, + * based on the prefixes and the current disassembly + * mode. This may be inaccurate, but useful for mode + * dependent decoding. + */ + if ( u->dis_mode == 64 ) { + u->opr_mode = REX_W( u->pfx_rex ) ? 64 : ( ( u->pfx_opr ) ? 16 : 32 ) ; + u->adr_mode = ( u->pfx_adr ) ? 32 : 64; + } else if ( u->dis_mode == 32 ) { + u->opr_mode = ( u->pfx_opr ) ? 16 : 32; + u->adr_mode = ( u->pfx_adr ) ? 16 : 32; + } else if ( u->dis_mode == 16 ) { + u->opr_mode = ( u->pfx_opr ) ? 32 : 16; + u->adr_mode = ( u->pfx_adr ) ? 32 : 16; + } + + return 0; +} + + +/* Searches the instruction tables for the right entry. + */ +static int search_itab( struct ud * u ) +{ + struct ud_itab_entry * e = NULL; + enum ud_itab_index table; + uint8_t peek; + uint8_t did_peek = 0; + uint8_t curr; + uint8_t index; + + /* if in state of error, return */ + if ( u->error ) + return -1; + + /* get first byte of opcode. */ + inp_next(u); + if ( u->error ) + return -1; + curr = inp_curr(u); + + /* resolve xchg, nop, pause crazyness */ + if ( 0x90 == curr ) { + if ( !( u->dis_mode == 64 && REX_B( u->pfx_rex ) ) ) { + if ( u->pfx_rep ) { + u->pfx_rep = 0; + e = & ie_pause; + } else { + e = & ie_nop; + } + goto found_entry; + } + } + + /* get top-level table */ + if ( 0x0F == curr ) { + table = ITAB__0F; + curr = inp_next(u); + if ( u->error ) + return -1; + + /* 2byte opcodes can be modified by 0x66, F3, and F2 prefixes */ + if ( 0x66 == u->pfx_insn ) { + if ( ud_itab_list[ ITAB__PFX_SSE66__0F ][ curr ].mnemonic != UD_Iinvalid ) { + table = ITAB__PFX_SSE66__0F; + u->pfx_opr = 0; + } + } else if ( 0xF2 == u->pfx_insn ) { + if ( ud_itab_list[ ITAB__PFX_SSEF2__0F ][ curr ].mnemonic != UD_Iinvalid ) { + table = ITAB__PFX_SSEF2__0F; + u->pfx_repne = 0; + } + } else if ( 0xF3 == u->pfx_insn ) { + if ( ud_itab_list[ ITAB__PFX_SSEF3__0F ][ curr ].mnemonic != UD_Iinvalid ) { + table = ITAB__PFX_SSEF3__0F; + u->pfx_repe = 0; + u->pfx_rep = 0; + } + } + /* pick an instruction from the 1byte table */ + } else { + table = ITAB__1BYTE; + } + + index = curr; + +search: + + e = & ud_itab_list[ table ][ index ]; + + /* if mnemonic constant is a standard instruction constant + * our search is over. + */ + + if ( e->mnemonic < UD_Id3vil ) { + if ( e->mnemonic == UD_Iinvalid ) { + if ( did_peek ) { + inp_next( u ); if ( u->error ) return -1; + } + goto found_entry; + } + goto found_entry; + } + + table = e->prefix; + + switch ( e->mnemonic ) + { + case UD_Igrp_reg: + peek = inp_peek( u ); + did_peek = 1; + index = MODRM_REG( peek ); + break; + + case UD_Igrp_mod: + peek = inp_peek( u ); + did_peek = 1; + index = MODRM_MOD( peek ); + if ( index == 3 ) + index = ITAB__MOD_INDX__11; + else + index = ITAB__MOD_INDX__NOT_11; + break; + + case UD_Igrp_rm: + curr = inp_next( u ); + did_peek = 0; + if ( u->error ) + return -1; + index = MODRM_RM( curr ); + break; + + case UD_Igrp_x87: + curr = inp_next( u ); + did_peek = 0; + if ( u->error ) + return -1; + index = curr - 0xC0; + break; + + case UD_Igrp_3byte: + curr = inp_next( u ); + did_peek = 0; + if (u->error) + return -1; + index = curr; + break; + + case UD_Igrp_osize: + if ( u->opr_mode == 64 ) + index = ITAB__MODE_INDX__64; + else if ( u->opr_mode == 32 ) + index = ITAB__MODE_INDX__32; + else + index = ITAB__MODE_INDX__16; + break; + + case UD_Igrp_asize: + if ( u->adr_mode == 64 ) + index = ITAB__MODE_INDX__64; + else if ( u->adr_mode == 32 ) + index = ITAB__MODE_INDX__32; + else + index = ITAB__MODE_INDX__16; + break; + + case UD_Igrp_mode: + if ( u->dis_mode == 64 ) + index = ITAB__MODE_INDX__64; + else if ( u->dis_mode == 32 ) + index = ITAB__MODE_INDX__32; + else + index = ITAB__MODE_INDX__16; + break; + + case UD_Igrp_vendor: + if ( u->vendor == UD_VENDOR_INTEL ) + index = ITAB__VENDOR_INDX__INTEL; + else if ( u->vendor == UD_VENDOR_AMD ) + index = ITAB__VENDOR_INDX__AMD; + else if ( u->vendor == UD_VENDOR_ANY ) + index = ITAB__VENDOR_INDX__ANY; + else + return -1; + break; + + case UD_Id3vil: + return -1; + break; + + default: + return -1; + break; + } + + goto search; + +found_entry: + + u->itab_entry = e; + u->mnemonic = u->itab_entry->mnemonic; + + return 0; +} + + +static unsigned int resolve_operand_size( const struct ud * u, unsigned int s ) +{ + switch ( s ) + { + case SZ_V: + return ( u->opr_mode ); + case SZ_Z: + return ( u->opr_mode == 16 ) ? 16 : 32; + case SZ_P: + return ( u->opr_mode == 16 ) ? SZ_WP : SZ_DP; + case SZ_MDQ: + return ( u->opr_mode == 16 ) ? 32 : u->opr_mode; + case SZ_RDQ: + return ( u->dis_mode == 64 ) ? 64 : 32; + default: + return s; + } +} + + +static int resolve_mnemonic( struct ud* u ) +{ + /* far/near flags */ + u->br_far = 0; + u->br_near = 0; + /* readjust operand sizes for call/jmp instrcutions */ + if ( u->mnemonic == UD_Icall || u->mnemonic == UD_Ijmp ) { + /* WP: 16bit pointer */ + if ( u->operand[ 0 ].size == SZ_WP ) { + u->operand[ 0 ].size = 16; + u->br_far = 1; + u->br_near= 0; + /* DP: 32bit pointer */ + } else if ( u->operand[ 0 ].size == SZ_DP ) { + u->operand[ 0 ].size = 32; + u->br_far = 1; + u->br_near= 0; + } else { + u->br_far = 0; + u->br_near= 1; + } + /* resolve 3dnow weirdness. */ + } else if ( u->mnemonic == UD_I3dnow ) { + u->mnemonic = ud_itab_list[ ITAB__3DNOW ][ inp_curr( u ) ].mnemonic; + } + /* SWAPGS is only valid in 64bits mode */ + if ( u->mnemonic == UD_Iswapgs && u->dis_mode != 64 ) { + u->error = 1; + return -1; + } + + return 0; +} + + +/* ----------------------------------------------------------------------------- + * decode_a()- Decodes operands of the type seg:offset + * ----------------------------------------------------------------------------- + */ +static void +decode_a(struct ud* u, struct ud_operand *op) +{ + if (u->opr_mode == 16) { + /* seg16:off16 */ + op->type = UD_OP_PTR; + op->size = 32; + op->lval.ptr.off = inp_uint16(u); + op->lval.ptr.seg = inp_uint16(u); + } else { + /* seg16:off32 */ + op->type = UD_OP_PTR; + op->size = 48; + op->lval.ptr.off = inp_uint32(u); + op->lval.ptr.seg = inp_uint16(u); + } +} + +/* ----------------------------------------------------------------------------- + * decode_gpr() - Returns decoded General Purpose Register + * ----------------------------------------------------------------------------- + */ +static enum ud_type +decode_gpr(register struct ud* u, unsigned int s, unsigned char rm) +{ + s = resolve_operand_size(u, s); + + switch (s) { + case 64: + return UD_R_RAX + rm; + case SZ_DP: + case 32: + return UD_R_EAX + rm; + case SZ_WP: + case 16: + return UD_R_AX + rm; + case 8: + if (u->dis_mode == 64 && u->pfx_rex) { + if (rm >= 4) + return UD_R_SPL + (rm-4); + return UD_R_AL + rm; + } else return UD_R_AL + rm; + default: + return 0; + } +} + +/* ----------------------------------------------------------------------------- + * resolve_gpr64() - 64bit General Purpose Register-Selection. + * ----------------------------------------------------------------------------- + */ +static enum ud_type +resolve_gpr64(struct ud* u, enum ud_operand_code gpr_op) +{ + if (gpr_op >= OP_rAXr8 && gpr_op <= OP_rDIr15) + gpr_op = (gpr_op - OP_rAXr8) | (REX_B(u->pfx_rex) << 3); + else gpr_op = (gpr_op - OP_rAX); + + if (u->opr_mode == 16) + return gpr_op + UD_R_AX; + if (u->dis_mode == 32 || + (u->opr_mode == 32 && ! (REX_W(u->pfx_rex) || u->default64))) { + return gpr_op + UD_R_EAX; + } + + return gpr_op + UD_R_RAX; +} + +/* ----------------------------------------------------------------------------- + * resolve_gpr32 () - 32bit General Purpose Register-Selection. + * ----------------------------------------------------------------------------- + */ +static enum ud_type +resolve_gpr32(struct ud* u, enum ud_operand_code gpr_op) +{ + gpr_op = gpr_op - OP_eAX; + + if (u->opr_mode == 16) + return gpr_op + UD_R_AX; + + return gpr_op + UD_R_EAX; +} + +/* ----------------------------------------------------------------------------- + * resolve_reg() - Resolves the register type + * ----------------------------------------------------------------------------- + */ +static enum ud_type +resolve_reg(struct ud* u, unsigned int type, unsigned char i) +{ + switch (type) { + case T_MMX : return UD_R_MM0 + (i & 7); + case T_XMM : return UD_R_XMM0 + i; + case T_CRG : return UD_R_CR0 + i; + case T_DBG : return UD_R_DR0 + i; + case T_SEG : return UD_R_ES + (i & 7); + case T_NONE: + default: return UD_NONE; + } +} + +/* ----------------------------------------------------------------------------- + * decode_imm() - Decodes Immediate values. + * ----------------------------------------------------------------------------- + */ +static void +decode_imm(struct ud* u, unsigned int s, struct ud_operand *op) +{ + op->size = resolve_operand_size(u, s); + op->type = UD_OP_IMM; + + switch (op->size) { + case 8: op->lval.sbyte = inp_uint8(u); break; + case 16: op->lval.uword = inp_uint16(u); break; + case 32: op->lval.udword = inp_uint32(u); break; + case 64: op->lval.uqword = inp_uint64(u); break; + default: return; + } +} + +/* ----------------------------------------------------------------------------- + * decode_modrm() - Decodes ModRM Byte + * ----------------------------------------------------------------------------- + */ +static void +decode_modrm(struct ud* u, struct ud_operand *op, unsigned int s, + unsigned char rm_type, struct ud_operand *opreg, + unsigned char reg_size, unsigned char reg_type) +{ + unsigned char mod, rm, reg; + + inp_next(u); + + /* get mod, r/m and reg fields */ + mod = MODRM_MOD(inp_curr(u)); + rm = (REX_B(u->pfx_rex) << 3) | MODRM_RM(inp_curr(u)); + reg = (REX_R(u->pfx_rex) << 3) | MODRM_REG(inp_curr(u)); + + op->size = resolve_operand_size(u, s); + + /* if mod is 11b, then the UD_R_m specifies a gpr/mmx/sse/control/debug */ + if (mod == 3) { + op->type = UD_OP_REG; + if (rm_type == T_GPR) + op->base = decode_gpr(u, op->size, rm); + else op->base = resolve_reg(u, rm_type, (REX_B(u->pfx_rex) << 3) | (rm&7)); + } + /* else its memory addressing */ + else { + op->type = UD_OP_MEM; + + /* 64bit addressing */ + if (u->adr_mode == 64) { + + op->base = UD_R_RAX + rm; + + /* get offset type */ + if (mod == 1) + op->offset = 8; + else if (mod == 2) + op->offset = 32; + else if (mod == 0 && (rm & 7) == 5) { + op->base = UD_R_RIP; + op->offset = 32; + } else op->offset = 0; + + /* Scale-Index-Base (SIB) */ + if ((rm & 7) == 4) { + inp_next(u); + + op->scale = (1 << SIB_S(inp_curr(u))) & ~1; + op->index = UD_R_RAX + (SIB_I(inp_curr(u)) | (REX_X(u->pfx_rex) << 3)); + op->base = UD_R_RAX + (SIB_B(inp_curr(u)) | (REX_B(u->pfx_rex) << 3)); + + /* special conditions for base reference */ + if (op->index == UD_R_RSP) { + op->index = UD_NONE; + op->scale = UD_NONE; + } + + if (op->base == UD_R_RBP || op->base == UD_R_R13) { + if (mod == 0) + op->base = UD_NONE; + if (mod == 1) + op->offset = 8; + else op->offset = 32; + } + } + } + + /* 32-Bit addressing mode */ + else if (u->adr_mode == 32) { + + /* get base */ + op->base = UD_R_EAX + rm; + + /* get offset type */ + if (mod == 1) + op->offset = 8; + else if (mod == 2) + op->offset = 32; + else if (mod == 0 && rm == 5) { + op->base = UD_NONE; + op->offset = 32; + } else op->offset = 0; + + /* Scale-Index-Base (SIB) */ + if ((rm & 7) == 4) { + inp_next(u); + + op->scale = (1 << SIB_S(inp_curr(u))) & ~1; + op->index = UD_R_EAX + (SIB_I(inp_curr(u)) | (REX_X(u->pfx_rex) << 3)); + op->base = UD_R_EAX + (SIB_B(inp_curr(u)) | (REX_B(u->pfx_rex) << 3)); + + if (op->index == UD_R_ESP) { + op->index = UD_NONE; + op->scale = UD_NONE; + } + + /* special condition for base reference */ + if (op->base == UD_R_EBP) { + if (mod == 0) + op->base = UD_NONE; + if (mod == 1) + op->offset = 8; + else op->offset = 32; + } + } + } + + /* 16bit addressing mode */ + else { + switch (rm) { + case 0: op->base = UD_R_BX; op->index = UD_R_SI; break; + case 1: op->base = UD_R_BX; op->index = UD_R_DI; break; + case 2: op->base = UD_R_BP; op->index = UD_R_SI; break; + case 3: op->base = UD_R_BP; op->index = UD_R_DI; break; + case 4: op->base = UD_R_SI; break; + case 5: op->base = UD_R_DI; break; + case 6: op->base = UD_R_BP; break; + case 7: op->base = UD_R_BX; break; + } + + if (mod == 0 && rm == 6) { + op->offset= 16; + op->base = UD_NONE; + } + else if (mod == 1) + op->offset = 8; + else if (mod == 2) + op->offset = 16; + } + } + + /* extract offset, if any */ + switch(op->offset) { + case 8 : op->lval.ubyte = inp_uint8(u); break; + case 16: op->lval.uword = inp_uint16(u); break; + case 32: op->lval.udword = inp_uint32(u); break; + case 64: op->lval.uqword = inp_uint64(u); break; + default: break; + } + + /* resolve register encoded in reg field */ + if (opreg) { + opreg->type = UD_OP_REG; + opreg->size = resolve_operand_size(u, reg_size); + if (reg_type == T_GPR) + opreg->base = decode_gpr(u, opreg->size, reg); + else opreg->base = resolve_reg(u, reg_type, reg); + } +} + +/* ----------------------------------------------------------------------------- + * decode_o() - Decodes offset + * ----------------------------------------------------------------------------- + */ +static void +decode_o(struct ud* u, unsigned int s, struct ud_operand *op) +{ + switch (u->adr_mode) { + case 64: + op->offset = 64; + op->lval.uqword = inp_uint64(u); + break; + case 32: + op->offset = 32; + op->lval.udword = inp_uint32(u); + break; + case 16: + op->offset = 16; + op->lval.uword = inp_uint16(u); + break; + default: + return; + } + op->type = UD_OP_MEM; + op->size = resolve_operand_size(u, s); +} + +/* ----------------------------------------------------------------------------- + * disasm_operands() - Disassembles Operands. + * ----------------------------------------------------------------------------- + */ +static int disasm_operands(register struct ud* u) +{ + + + /* mopXt = map entry, operand X, type; */ + enum ud_operand_code mop1t = u->itab_entry->operand1.type; + enum ud_operand_code mop2t = u->itab_entry->operand2.type; + enum ud_operand_code mop3t = u->itab_entry->operand3.type; + + /* mopXs = map entry, operand X, size */ + unsigned int mop1s = u->itab_entry->operand1.size; + unsigned int mop2s = u->itab_entry->operand2.size; + unsigned int mop3s = u->itab_entry->operand3.size; + + /* iop = instruction operand */ + register struct ud_operand* iop = u->operand; + + switch(mop1t) { + + case OP_A : + decode_a(u, &(iop[0])); + break; + + /* M[b] ... */ + case OP_M : + if (MODRM_MOD(inp_peek(u)) == 3) + u->error= 1; + /* E, G/P/V/I/CL/1/S */ + case OP_E : + if (mop2t == OP_G) { + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_GPR); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + else if (mop3t == OP_CL) { + iop[2].type = UD_OP_REG; + iop[2].base = UD_R_CL; + iop[2].size = 8; + } + } + else if (mop2t == OP_P) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_MMX); + else if (mop2t == OP_V) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_XMM); + else if (mop2t == OP_S) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_SEG); + else { + decode_modrm(u, &(iop[0]), mop1s, T_GPR, NULL, 0, T_NONE); + if (mop2t == OP_CL) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_CL; + iop[1].size = 8; + } else if (mop2t == OP_I1) { + iop[1].type = UD_OP_CONST; + u->operand[1].lval.udword = 1; + } else if (mop2t == OP_I) { + decode_imm(u, mop2s, &(iop[1])); + } + } + break; + + /* G, E/PR[,I]/VR */ + case OP_G : + if (mop2t == OP_M) { + if (MODRM_MOD(inp_peek(u)) == 3) + u->error= 1; + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_GPR); + } else if (mop2t == OP_E) { + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_GPR); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } else if (mop2t == OP_PR) { + decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_GPR); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } else if (mop2t == OP_VR) { + if (MODRM_MOD(inp_peek(u)) != 3) + u->error = 1; + decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_GPR); + } else if (mop2t == OP_W) + decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_GPR); + break; + + /* AL..BH, I/O/DX */ + case OP_AL : case OP_CL : case OP_DL : case OP_BL : + case OP_AH : case OP_CH : case OP_DH : case OP_BH : + + iop[0].type = UD_OP_REG; + iop[0].base = UD_R_AL + (mop1t - OP_AL); + iop[0].size = 8; + + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + else if (mop2t == OP_DX) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_DX; + iop[1].size = 16; + } + else if (mop2t == OP_O) + decode_o(u, mop2s, &(iop[1])); + break; + + /* rAX[r8]..rDI[r15], I/rAX..rDI/O */ + case OP_rAXr8 : case OP_rCXr9 : case OP_rDXr10 : case OP_rBXr11 : + case OP_rSPr12: case OP_rBPr13: case OP_rSIr14 : case OP_rDIr15 : + case OP_rAX : case OP_rCX : case OP_rDX : case OP_rBX : + case OP_rSP : case OP_rBP : case OP_rSI : case OP_rDI : + + iop[0].type = UD_OP_REG; + iop[0].base = resolve_gpr64(u, mop1t); + + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + else if (mop2t >= OP_rAX && mop2t <= OP_rDI) { + iop[1].type = UD_OP_REG; + iop[1].base = resolve_gpr64(u, mop2t); + } + else if (mop2t == OP_O) { + decode_o(u, mop2s, &(iop[1])); + iop[0].size = resolve_operand_size(u, mop2s); + } + break; + + /* AL[r8b]..BH[r15b], I */ + case OP_ALr8b : case OP_CLr9b : case OP_DLr10b : case OP_BLr11b : + case OP_AHr12b: case OP_CHr13b: case OP_DHr14b : case OP_BHr15b : + { + ud_type_t gpr = (mop1t - OP_ALr8b) + UD_R_AL + + (REX_B(u->pfx_rex) << 3); + if (UD_R_AH <= gpr && u->pfx_rex) + gpr = gpr + 4; + iop[0].type = UD_OP_REG; + iop[0].base = gpr; + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + break; + } + + /* eAX..eDX, DX/I */ + case OP_eAX : case OP_eCX : case OP_eDX : case OP_eBX : + case OP_eSP : case OP_eBP : case OP_eSI : case OP_eDI : + iop[0].type = UD_OP_REG; + iop[0].base = resolve_gpr32(u, mop1t); + if (mop2t == OP_DX) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_DX; + iop[1].size = 16; + } else if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + break; + + /* ES..GS */ + case OP_ES : case OP_CS : case OP_DS : + case OP_SS : case OP_FS : case OP_GS : + + /* in 64bits mode, only fs and gs are allowed */ + if (u->dis_mode == 64) + if (mop1t != OP_FS && mop1t != OP_GS) + u->error= 1; + iop[0].type = UD_OP_REG; + iop[0].base = (mop1t - OP_ES) + UD_R_ES; + iop[0].size = 16; + + break; + + /* J */ + case OP_J : + decode_imm(u, mop1s, &(iop[0])); + iop[0].type = UD_OP_JIMM; + break ; + + /* PR, I */ + case OP_PR: + if (MODRM_MOD(inp_peek(u)) != 3) + u->error = 1; + decode_modrm(u, &(iop[0]), mop1s, T_MMX, NULL, 0, T_NONE); + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + break; + + /* VR, I */ + case OP_VR: + if (MODRM_MOD(inp_peek(u)) != 3) + u->error = 1; + decode_modrm(u, &(iop[0]), mop1s, T_XMM, NULL, 0, T_NONE); + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + break; + + /* P, Q[,I]/W/E[,I],VR */ + case OP_P : + if (mop2t == OP_Q) { + decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_MMX); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } else if (mop2t == OP_W) { + decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_MMX); + } else if (mop2t == OP_VR) { + if (MODRM_MOD(inp_peek(u)) != 3) + u->error = 1; + decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_MMX); + } else if (mop2t == OP_E) { + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_MMX); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } + break; + + /* R, C/D */ + case OP_R : + if (mop2t == OP_C) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_CRG); + else if (mop2t == OP_D) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_DBG); + break; + + /* C, R */ + case OP_C : + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_CRG); + break; + + /* D, R */ + case OP_D : + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_DBG); + break; + + /* Q, P */ + case OP_Q : + decode_modrm(u, &(iop[0]), mop1s, T_MMX, &(iop[1]), mop2s, T_MMX); + break; + + /* S, E */ + case OP_S : + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_SEG); + break; + + /* W, V */ + case OP_W : + decode_modrm(u, &(iop[0]), mop1s, T_XMM, &(iop[1]), mop2s, T_XMM); + break; + + /* V, W[,I]/Q/M/E */ + case OP_V : + if (mop2t == OP_W) { + /* special cases for movlps and movhps */ + if (MODRM_MOD(inp_peek(u)) == 3) { + if (u->mnemonic == UD_Imovlps) + u->mnemonic = UD_Imovhlps; + else + if (u->mnemonic == UD_Imovhps) + u->mnemonic = UD_Imovlhps; + } + decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_XMM); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } else if (mop2t == OP_Q) + decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_XMM); + else if (mop2t == OP_M) { + if (MODRM_MOD(inp_peek(u)) == 3) + u->error= 1; + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_XMM); + } else if (mop2t == OP_E) { + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_XMM); + } else if (mop2t == OP_PR) { + decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_XMM); + } + break; + + /* DX, eAX/AL */ + case OP_DX : + iop[0].type = UD_OP_REG; + iop[0].base = UD_R_DX; + iop[0].size = 16; + + if (mop2t == OP_eAX) { + iop[1].type = UD_OP_REG; + iop[1].base = resolve_gpr32(u, mop2t); + } else if (mop2t == OP_AL) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_AL; + iop[1].size = 8; + } + + break; + + /* I, I/AL/eAX */ + case OP_I : + decode_imm(u, mop1s, &(iop[0])); + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + else if (mop2t == OP_AL) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_AL; + iop[1].size = 16; + } else if (mop2t == OP_eAX) { + iop[1].type = UD_OP_REG; + iop[1].base = resolve_gpr32(u, mop2t); + } + break; + + /* O, AL/eAX */ + case OP_O : + decode_o(u, mop1s, &(iop[0])); + iop[1].type = UD_OP_REG; + iop[1].size = resolve_operand_size(u, mop1s); + if (mop2t == OP_AL) + iop[1].base = UD_R_AL; + else if (mop2t == OP_eAX) + iop[1].base = resolve_gpr32(u, mop2t); + else if (mop2t == OP_rAX) + iop[1].base = resolve_gpr64(u, mop2t); + break; + + /* 3 */ + case OP_I3 : + iop[0].type = UD_OP_CONST; + iop[0].lval.sbyte = 3; + break; + + /* ST(n), ST(n) */ + case OP_ST0 : case OP_ST1 : case OP_ST2 : case OP_ST3 : + case OP_ST4 : case OP_ST5 : case OP_ST6 : case OP_ST7 : + + iop[0].type = UD_OP_REG; + iop[0].base = (mop1t-OP_ST0) + UD_R_ST0; + iop[0].size = 0; + + if (mop2t >= OP_ST0 && mop2t <= OP_ST7) { + iop[1].type = UD_OP_REG; + iop[1].base = (mop2t-OP_ST0) + UD_R_ST0; + iop[1].size = 0; + } + break; + + /* AX */ + case OP_AX: + iop[0].type = UD_OP_REG; + iop[0].base = UD_R_AX; + iop[0].size = 16; + break; + + /* none */ + default : + iop[0].type = iop[1].type = iop[2].type = UD_NONE; + } + + return 0; +} + +/* ----------------------------------------------------------------------------- + * clear_insn() - clear instruction pointer + * ----------------------------------------------------------------------------- + */ +static int clear_insn(register struct ud* u) +{ + u->error = 0; + u->pfx_seg = 0; + u->pfx_opr = 0; + u->pfx_adr = 0; + u->pfx_lock = 0; + u->pfx_repne = 0; + u->pfx_rep = 0; + u->pfx_repe = 0; + u->pfx_seg = 0; + u->pfx_rex = 0; + u->pfx_insn = 0; + u->mnemonic = UD_Inone; + u->itab_entry = NULL; + + memset( &u->operand[ 0 ], 0, sizeof( struct ud_operand ) ); + memset( &u->operand[ 1 ], 0, sizeof( struct ud_operand ) ); + memset( &u->operand[ 2 ], 0, sizeof( struct ud_operand ) ); + + return 0; +} + +static int do_mode( struct ud* u ) +{ + /* if in error state, bail out */ + if ( u->error ) return -1; + + /* propagate perfix effects */ + if ( u->dis_mode == 64 ) { /* set 64bit-mode flags */ + + /* Check validity of instruction m64 */ + if ( P_INV64( u->itab_entry->prefix ) ) { + u->error = 1; + return -1; + } + + /* effective rex prefix is the effective mask for the + * instruction hard-coded in the opcode map. + */ + u->pfx_rex = ( u->pfx_rex & 0x40 ) | + ( u->pfx_rex & REX_PFX_MASK( u->itab_entry->prefix ) ); + + /* whether this instruction has a default operand size of + * 64bit, also hardcoded into the opcode map. + */ + u->default64 = P_DEF64( u->itab_entry->prefix ); + /* calculate effective operand size */ + if ( REX_W( u->pfx_rex ) ) { + u->opr_mode = 64; + } else if ( u->pfx_opr ) { + u->opr_mode = 16; + } else { + /* unless the default opr size of instruction is 64, + * the effective operand size in the absence of rex.w + * prefix is 32. + */ + u->opr_mode = ( u->default64 ) ? 64 : 32; + } + + /* calculate effective address size */ + u->adr_mode = (u->pfx_adr) ? 32 : 64; + } else if ( u->dis_mode == 32 ) { /* set 32bit-mode flags */ + u->opr_mode = ( u->pfx_opr ) ? 16 : 32; + u->adr_mode = ( u->pfx_adr ) ? 16 : 32; + } else if ( u->dis_mode == 16 ) { /* set 16bit-mode flags */ + u->opr_mode = ( u->pfx_opr ) ? 32 : 16; + u->adr_mode = ( u->pfx_adr ) ? 32 : 16; + } + + /* These flags determine which operand to apply the operand size + * cast to. + */ + u->c1 = ( P_C1( u->itab_entry->prefix ) ) ? 1 : 0; + u->c2 = ( P_C2( u->itab_entry->prefix ) ) ? 1 : 0; + u->c3 = ( P_C3( u->itab_entry->prefix ) ) ? 1 : 0; + + /* set flags for implicit addressing */ + u->implicit_addr = P_IMPADDR( u->itab_entry->prefix ); + + return 0; +} + +static int gen_hex( struct ud *u ) +{ + unsigned int i; + unsigned char *src_ptr = inp_sess( u ); + char* src_hex; + + /* bail out if in error stat. */ + if ( u->error ) return -1; + /* output buffer pointe */ + src_hex = ( char* ) u->insn_hexcode; + /* for each byte used to decode instruction */ + for ( i = 0; i < u->inp_ctr; ++i, ++src_ptr) { + sprintf( src_hex, "%02x", *src_ptr & 0xFF ); + src_hex += 2; + } + return 0; +} + +/* ============================================================================= + * ud_decode() - Instruction decoder. Returns the number of bytes decoded. + * ============================================================================= + */ +unsigned int ud_decode( struct ud* u ) +{ + inp_start(u); + + if ( clear_insn( u ) ) { + ; /* error */ + } else if ( get_prefixes( u ) != 0 ) { + ; /* error */ + } else if ( search_itab( u ) != 0 ) { + ; /* error */ + } else if ( do_mode( u ) != 0 ) { + ; /* error */ + } else if ( disasm_operands( u ) != 0 ) { + ; /* error */ + } else if ( resolve_mnemonic( u ) != 0 ) { + ; /* error */ + } + + /* Handle decode error. */ + if ( u->error ) { + /* clear out the decode data. */ + clear_insn( u ); + /* mark the sequence of bytes as invalid. */ + u->itab_entry = & ie_invalid; + u->mnemonic = u->itab_entry->mnemonic; + } + + u->insn_offset = u->pc; /* set offset of instruction */ + u->insn_fill = 0; /* set translation buffer index to 0 */ + u->pc += u->inp_ctr; /* move program counter by bytes decoded */ + gen_hex( u ); /* generate hex code */ + + /* return number of bytes disassembled. */ + return u->inp_ctr; +} + +/* vim:cindent + * vim:ts=4 + * vim:sw=4 + * vim:expandtab + */ diff --git a/libudis86/decode.h b/libudis86/decode.h new file mode 100644 index 0000000..a4ce428 --- /dev/null +++ b/libudis86/decode.h @@ -0,0 +1,186 @@ +/* udis86 - libudis86/decode.h + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UD_DECODE_H +#define UD_DECODE_H + +#define MAX_INSN_LENGTH 15 + +/* register classes */ +#define T_NONE 0 +#define T_GPR 1 +#define T_MMX 2 +#define T_CRG 3 +#define T_DBG 4 +#define T_SEG 5 +#define T_XMM 6 + +/* itab prefix bits */ +#define P_none ( 0 ) +#define P_c1 ( 1 << 0 ) +#define P_C1(n) ( ( n >> 0 ) & 1 ) +#define P_rexb ( 1 << 1 ) +#define P_REXB(n) ( ( n >> 1 ) & 1 ) +#define P_depM ( 1 << 2 ) +#define P_DEPM(n) ( ( n >> 2 ) & 1 ) +#define P_c3 ( 1 << 3 ) +#define P_C3(n) ( ( n >> 3 ) & 1 ) +#define P_inv64 ( 1 << 4 ) +#define P_INV64(n) ( ( n >> 4 ) & 1 ) +#define P_rexw ( 1 << 5 ) +#define P_REXW(n) ( ( n >> 5 ) & 1 ) +#define P_c2 ( 1 << 6 ) +#define P_C2(n) ( ( n >> 6 ) & 1 ) +#define P_def64 ( 1 << 7 ) +#define P_DEF64(n) ( ( n >> 7 ) & 1 ) +#define P_rexr ( 1 << 8 ) +#define P_REXR(n) ( ( n >> 8 ) & 1 ) +#define P_oso ( 1 << 9 ) +#define P_OSO(n) ( ( n >> 9 ) & 1 ) +#define P_aso ( 1 << 10 ) +#define P_ASO(n) ( ( n >> 10 ) & 1 ) +#define P_rexx ( 1 << 11 ) +#define P_REXX(n) ( ( n >> 11 ) & 1 ) +#define P_ImpAddr ( 1 << 12 ) +#define P_IMPADDR(n) ( ( n >> 12 ) & 1 ) + +/* rex prefix bits */ +#define REX_W(r) ( ( 0xF & ( r ) ) >> 3 ) +#define REX_R(r) ( ( 0x7 & ( r ) ) >> 2 ) +#define REX_X(r) ( ( 0x3 & ( r ) ) >> 1 ) +#define REX_B(r) ( ( 0x1 & ( r ) ) >> 0 ) +#define REX_PFX_MASK(n) ( ( P_REXW(n) << 3 ) | \ + ( P_REXR(n) << 2 ) | \ + ( P_REXX(n) << 1 ) | \ + ( P_REXB(n) << 0 ) ) + +/* scable-index-base bits */ +#define SIB_S(b) ( ( b ) >> 6 ) +#define SIB_I(b) ( ( ( b ) >> 3 ) & 7 ) +#define SIB_B(b) ( ( b ) & 7 ) + +/* modrm bits */ +#define MODRM_REG(b) ( ( ( b ) >> 3 ) & 7 ) +#define MODRM_NNN(b) ( ( ( b ) >> 3 ) & 7 ) +#define MODRM_MOD(b) ( ( ( b ) >> 6 ) & 3 ) +#define MODRM_RM(b) ( ( b ) & 7 ) + +/* operand type constants -- order is important! */ + +enum __attribute__((packed)) ud_operand_code { + OP_NONE, + + OP_A, OP_E, OP_M, OP_G, + OP_I, + + OP_AL, OP_CL, OP_DL, OP_BL, + OP_AH, OP_CH, OP_DH, OP_BH, + + OP_ALr8b, OP_CLr9b, OP_DLr10b, OP_BLr11b, + OP_AHr12b, OP_CHr13b, OP_DHr14b, OP_BHr15b, + + OP_AX, OP_CX, OP_DX, OP_BX, + OP_SI, OP_DI, OP_SP, OP_BP, + + OP_rAX, OP_rCX, OP_rDX, OP_rBX, + OP_rSP, OP_rBP, OP_rSI, OP_rDI, + + OP_rAXr8, OP_rCXr9, OP_rDXr10, OP_rBXr11, + OP_rSPr12, OP_rBPr13, OP_rSIr14, OP_rDIr15, + + OP_eAX, OP_eCX, OP_eDX, OP_eBX, + OP_eSP, OP_eBP, OP_eSI, OP_eDI, + + OP_ES, OP_CS, OP_SS, OP_DS, + OP_FS, OP_GS, + + OP_ST0, OP_ST1, OP_ST2, OP_ST3, + OP_ST4, OP_ST5, OP_ST6, OP_ST7, + + OP_J, OP_S, OP_O, + OP_I1, OP_I3, + + OP_V, OP_W, OP_Q, OP_P, + + OP_R, OP_C, OP_D, OP_VR, OP_PR +}; + + +/* operand size constants */ + +enum __attribute__((packed)) ud_operand_size { + SZ_NA = 0, + SZ_Z = 1, + SZ_V = 2, + SZ_P = 3, + SZ_WP = 4, + SZ_DP = 5, + SZ_MDQ = 6, + SZ_RDQ = 7, + + /* the following values are used as is, + * and thus hard-coded. changing them + * will break internals + */ + SZ_B = 8, + SZ_W = 16, + SZ_D = 32, + SZ_Q = 64, + SZ_T = 80, + SZ_O = 128, +}; + + +/* A single operand of an entry in the instruction table. + * (internal use only) + */ +struct ud_itab_entry_operand +{ + enum ud_operand_code type; + enum ud_operand_size size; +}; + + +/* A single entry in an instruction table. + *(internal use only) + */ +struct ud_itab_entry +{ + enum ud_mnemonic_code mnemonic; + struct ud_itab_entry_operand operand1; + struct ud_itab_entry_operand operand2; + struct ud_itab_entry_operand operand3; + uint32_t prefix; +}; + +extern const char * ud_lookup_mnemonic( enum ud_mnemonic_code c ); + +#endif /* UD_DECODE_H */ + +/* vim:cindent + * vim:expandtab + * vim:ts=4 + * vim:sw=4 + */ diff --git a/libudis86/extern.h b/libudis86/extern.h new file mode 100644 index 0000000..e99720c --- /dev/null +++ b/libudis86/extern.h @@ -0,0 +1,88 @@ +/* udis86 - libudis86/extern.h + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UD_EXTERN_H +#define UD_EXTERN_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "types.h" + +/* ============================= PUBLIC API ================================= */ + +extern void ud_init(struct ud*); + +extern void ud_set_mode(struct ud*, uint8_t); + +extern void ud_set_pc(struct ud*, uint64_t); + +extern void ud_set_input_hook(struct ud*, int (*)(struct ud*)); + +extern void ud_set_input_buffer(struct ud*, uint8_t*, size_t); + +#ifndef __UD_STANDALONE__ +extern void ud_set_input_file(struct ud*, FILE*); +#endif /* __UD_STANDALONE__ */ + +extern void ud_set_vendor(struct ud*, unsigned); + +extern void ud_set_syntax(struct ud*, void (*)(struct ud*)); + +extern void ud_input_skip(struct ud*, size_t); + +extern int ud_input_end(struct ud*); + +extern unsigned int ud_decode(struct ud*); + +extern unsigned int ud_disassemble(struct ud*); + +extern void ud_translate_intel(struct ud*); + +extern void ud_translate_att(struct ud*); + +extern char* ud_insn_asm(struct ud* u); + +extern uint8_t* ud_insn_ptr(struct ud* u); + +extern uint64_t ud_insn_off(struct ud*); + +extern char* ud_insn_hex(struct ud*); + +extern unsigned int ud_insn_len(struct ud* u); + +extern const char* ud_lookup_mnemonic(enum ud_mnemonic_code c); + +extern void ud_set_user_opaque_data(struct ud*, void*); + +extern void *ud_get_user_opaque_data(struct ud*); + +/* ========================================================================== */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/libudis86/input.c b/libudis86/input.c new file mode 100644 index 0000000..ae53eb0 --- /dev/null +++ b/libudis86/input.c @@ -0,0 +1,256 @@ +/* udis86 - libudis86/input.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "extern.h" +#include "types.h" +#include "input.h" + +/* ----------------------------------------------------------------------------- + * inp_buff_hook() - Hook for buffered inputs. + * ----------------------------------------------------------------------------- + */ +static int +inp_buff_hook(struct ud* u) +{ + if (u->inp_buff < u->inp_buff_end) + return *u->inp_buff++; + else return -1; +} + +#ifndef __UD_STANDALONE__ +/* ----------------------------------------------------------------------------- + * inp_file_hook() - Hook for FILE inputs. + * ----------------------------------------------------------------------------- + */ +static int +inp_file_hook(struct ud* u) +{ + return fgetc(u->inp_file); +} +#endif /* __UD_STANDALONE__*/ + +/* ============================================================================= + * ud_inp_set_hook() - Sets input hook. + * ============================================================================= + */ +extern void +ud_set_input_hook(register struct ud* u, int (*hook)(struct ud*)) +{ + u->inp_hook = hook; + inp_init(u); +} + +extern void +ud_set_user_opaque_data( struct ud * u, void * opaque ) +{ + u->user_opaque_data = opaque; +} + +extern void * +ud_get_user_opaque_data( struct ud * u ) +{ + return u->user_opaque_data; +} + +/* ============================================================================= + * ud_inp_set_buffer() - Set buffer as input. + * ============================================================================= + */ +extern void +ud_set_input_buffer(register struct ud* u, uint8_t* buf, size_t len) +{ + u->inp_hook = inp_buff_hook; + u->inp_buff = buf; + u->inp_buff_end = buf + len; + inp_init(u); +} + +#ifndef __UD_STANDALONE__ +/* ============================================================================= + * ud_input_set_file() - Set buffer as input. + * ============================================================================= + */ +extern void +ud_set_input_file(register struct ud* u, FILE* f) +{ + u->inp_hook = inp_file_hook; + u->inp_file = f; + inp_init(u); +} +#endif /* __UD_STANDALONE__ */ + +/* ============================================================================= + * ud_input_skip() - Skip n input bytes. + * ============================================================================= + */ +extern void +ud_input_skip(struct ud* u, size_t n) +{ + while (n--) { + u->inp_hook(u); + } +} + +/* ============================================================================= + * ud_input_end() - Test for end of input. + * ============================================================================= + */ +extern int +ud_input_end(struct ud* u) +{ + return (u->inp_curr == u->inp_fill) && u->inp_end; +} + +/* ----------------------------------------------------------------------------- + * inp_next() - Loads and returns the next byte from input. + * + * inp_curr and inp_fill are pointers to the cache. The program is written based + * on the property that they are 8-bits in size, and will eventually wrap around + * forming a circular buffer. So, the size of the cache is 256 in size, kind of + * unnecessary yet optimized. + * + * A buffer inp_sess stores the bytes disassembled for a single session. + * ----------------------------------------------------------------------------- + */ +extern uint8_t inp_next(struct ud* u) +{ + int c = -1; + /* if current pointer is not upto the fill point in the + * input cache. + */ + if ( u->inp_curr != u->inp_fill ) { + c = u->inp_cache[ ++u->inp_curr ]; + /* if !end-of-input, call the input hook and get a byte */ + } else if ( u->inp_end || ( c = u->inp_hook( u ) ) == -1 ) { + /* end-of-input, mark it as an error, since the decoder, + * expected a byte more. + */ + u->error = 1; + /* flag end of input */ + u->inp_end = 1; + return 0; + } else { + /* increment pointers, we have a new byte. */ + u->inp_curr = ++u->inp_fill; + /* add the byte to the cache */ + u->inp_cache[ u->inp_fill ] = c; + } + /* record bytes input per decode-session. */ + u->inp_sess[ u->inp_ctr++ ] = c; + /* return byte */ + return ( uint8_t ) c; +} + +/* ----------------------------------------------------------------------------- + * inp_back() - Move back a single byte in the stream. + * ----------------------------------------------------------------------------- + */ +extern void +inp_back(struct ud* u) +{ + if ( u->inp_ctr > 0 ) { + --u->inp_curr; + --u->inp_ctr; + } +} + +/* ----------------------------------------------------------------------------- + * inp_peek() - Peek into the next byte in source. + * ----------------------------------------------------------------------------- + */ +extern uint8_t +inp_peek(struct ud* u) +{ + uint8_t r = inp_next(u); + if ( !u->error ) inp_back(u); /* Don't backup if there was an error */ + return r; +} + +/* ----------------------------------------------------------------------------- + * inp_move() - Move ahead n input bytes. + * ----------------------------------------------------------------------------- + */ +extern void +inp_move(struct ud* u, size_t n) +{ + while (n--) + inp_next(u); +} + +/*------------------------------------------------------------------------------ + * inp_uintN() - return uintN from source. + *------------------------------------------------------------------------------ + */ +extern uint8_t +inp_uint8(struct ud* u) +{ + return inp_next(u); +} + +extern uint16_t +inp_uint16(struct ud* u) +{ + uint16_t r, ret; + + ret = inp_next(u); + r = inp_next(u); + return ret | (r << 8); +} + +extern uint32_t +inp_uint32(struct ud* u) +{ + uint32_t r, ret; + + ret = inp_next(u); + r = inp_next(u); + ret = ret | (r << 8); + r = inp_next(u); + ret = ret | (r << 16); + r = inp_next(u); + return ret | (r << 24); +} + +extern uint64_t +inp_uint64(struct ud* u) +{ + uint64_t r, ret; + + ret = inp_next(u); + r = inp_next(u); + ret = ret | (r << 8); + r = inp_next(u); + ret = ret | (r << 16); + r = inp_next(u); + ret = ret | (r << 24); + r = inp_next(u); + ret = ret | (r << 32); + r = inp_next(u); + ret = ret | (r << 40); + r = inp_next(u); + ret = ret | (r << 48); + r = inp_next(u); + return ret | (r << 56); +} diff --git a/libudis86/input.h b/libudis86/input.h new file mode 100644 index 0000000..3471fa3 --- /dev/null +++ b/libudis86/input.h @@ -0,0 +1,67 @@ +/* udis86 - libudis86/input.h + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UD_INPUT_H +#define UD_INPUT_H + +#include "types.h" + +uint8_t inp_next(struct ud*); +uint8_t inp_peek(struct ud*); +uint8_t inp_uint8(struct ud*); +uint16_t inp_uint16(struct ud*); +uint32_t inp_uint32(struct ud*); +uint64_t inp_uint64(struct ud*); +void inp_move(struct ud*, size_t); +void inp_back(struct ud*); + +/* inp_init() - Initializes the input system. */ +#define inp_init(u) \ +do { \ + u->inp_curr = 0; \ + u->inp_fill = 0; \ + u->inp_ctr = 0; \ + u->inp_end = 0; \ +} while (0) + +/* inp_start() - Should be called before each de-code operation. */ +#define inp_start(u) u->inp_ctr = 0 + +/* inp_back() - Resets the current pointer to its position before the current + * instruction disassembly was started. + */ +#define inp_reset(u) \ +do { \ + u->inp_curr -= u->inp_ctr; \ + u->inp_ctr = 0; \ +} while (0) + +/* inp_sess() - Returns the pointer to current session. */ +#define inp_sess(u) (u->inp_sess) + +/* inp_cur() - Returns the current input byte. */ +#define inp_curr(u) ((u)->inp_cache[(u)->inp_curr]) + +#endif diff --git a/libudis86/opgen.py b/libudis86/opgen.py new file mode 100644 index 0000000..384f63d --- /dev/null +++ b/libudis86/opgen.py @@ -0,0 +1,638 @@ +#!/usr/bin/env python + +import os +import sys +import string +from xml.dom import minidom + +# +# opgen.py -- generates tables and constants for decoding +# +# - itab.c +# - itab.h +# + +# +# special mnemonic types for internal purposes. +# +spl_mnm_types = [ 'd3vil', \ + 'na', \ + 'grp_reg', \ + 'grp_rm', \ + 'grp_vendor', \ + 'grp_x87', \ + 'grp_mode', \ + 'grp_osize', \ + 'grp_asize', \ + 'grp_mod', \ + 'grp_3byte', \ + 'none' \ + ] + +# +# opcode-vendor dictionary +# +vend_dict = { + 'AMD' : '00', + 'INTEL' : '01', + 'ANY' : '02' +} + + +# +# opcode-mode dictionary +# + +mode_dict = { + '16' : '00', + '32' : '01', + '64' : '02' +} + +# +# opcode-operand dictionary +# +operand_dict = { + "Ap" : [ "OP_A" , "SZ_P" ], + "E" : [ "OP_E" , "SZ_NA" ], + "Eb" : [ "OP_E" , "SZ_B" ], + "Ew" : [ "OP_E" , "SZ_W" ], + "Ev" : [ "OP_E" , "SZ_V" ], + "Ed" : [ "OP_E" , "SZ_D" ], + "Eq" : [ "OP_E" , "SZ_Q" ], + "Ez" : [ "OP_E" , "SZ_Z" ], + "Ex" : [ "OP_E" , "SZ_MDQ" ], + "Ep" : [ "OP_E" , "SZ_P" ], + "G" : [ "OP_G" , "SZ_NA" ], + "Gb" : [ "OP_G" , "SZ_B" ], + "Gw" : [ "OP_G" , "SZ_W" ], + "Gv" : [ "OP_G" , "SZ_V" ], + "Gvw" : [ "OP_G" , "SZ_MDQ" ], + "Gd" : [ "OP_G" , "SZ_D" ], + "Gq" : [ "OP_G" , "SZ_Q" ], + "Gx" : [ "OP_G" , "SZ_MDQ" ], + "Gz" : [ "OP_G" , "SZ_Z" ], + "M" : [ "OP_M" , "SZ_NA" ], + "Mb" : [ "OP_M" , "SZ_B" ], + "Mw" : [ "OP_M" , "SZ_W" ], + "Ms" : [ "OP_M" , "SZ_W" ], + "Md" : [ "OP_M" , "SZ_D" ], + "Mq" : [ "OP_M" , "SZ_Q" ], + "Mt" : [ "OP_M" , "SZ_T" ], + "Mo" : [ "OP_M" , "SZ_O" ], + "I1" : [ "OP_I1" , "SZ_NA" ], + "I3" : [ "OP_I3" , "SZ_NA" ], + "Ib" : [ "OP_I" , "SZ_B" ], + "Isb" : [ "OP_I" , "SZ_SB" ], + "Iw" : [ "OP_I" , "SZ_W" ], + "Iv" : [ "OP_I" , "SZ_V" ], + "Iz" : [ "OP_I" , "SZ_Z" ], + "Jv" : [ "OP_J" , "SZ_V" ], + "Jz" : [ "OP_J" , "SZ_Z" ], + "Jb" : [ "OP_J" , "SZ_B" ], + "R" : [ "OP_R" , "SZ_RDQ" ], + "C" : [ "OP_C" , "SZ_NA" ], + "D" : [ "OP_D" , "SZ_NA" ], + "S" : [ "OP_S" , "SZ_NA" ], + "Ob" : [ "OP_O" , "SZ_B" ], + "Ow" : [ "OP_O" , "SZ_W" ], + "Ov" : [ "OP_O" , "SZ_V" ], + "V" : [ "OP_V" , "SZ_NA" ], + "W" : [ "OP_W" , "SZ_NA" ], + "P" : [ "OP_P" , "SZ_NA" ], + "Q" : [ "OP_Q" , "SZ_NA" ], + "VR" : [ "OP_VR" , "SZ_NA" ], + "PR" : [ "OP_PR" , "SZ_NA" ], + "AL" : [ "OP_AL" , "SZ_NA" ], + "CL" : [ "OP_CL" , "SZ_NA" ], + "DL" : [ "OP_DL" , "SZ_NA" ], + "BL" : [ "OP_BL" , "SZ_NA" ], + "AH" : [ "OP_AH" , "SZ_NA" ], + "CH" : [ "OP_CH" , "SZ_NA" ], + "DH" : [ "OP_DH" , "SZ_NA" ], + "BH" : [ "OP_BH" , "SZ_NA" ], + "AX" : [ "OP_AX" , "SZ_NA" ], + "CX" : [ "OP_CX" , "SZ_NA" ], + "DX" : [ "OP_DX" , "SZ_NA" ], + "BX" : [ "OP_BX" , "SZ_NA" ], + "SI" : [ "OP_SI" , "SZ_NA" ], + "DI" : [ "OP_DI" , "SZ_NA" ], + "SP" : [ "OP_SP" , "SZ_NA" ], + "BP" : [ "OP_BP" , "SZ_NA" ], + "eAX" : [ "OP_eAX" , "SZ_NA" ], + "eCX" : [ "OP_eCX" , "SZ_NA" ], + "eDX" : [ "OP_eDX" , "SZ_NA" ], + "eBX" : [ "OP_eBX" , "SZ_NA" ], + "eSI" : [ "OP_eSI" , "SZ_NA" ], + "eDI" : [ "OP_eDI" , "SZ_NA" ], + "eSP" : [ "OP_eSP" , "SZ_NA" ], + "eBP" : [ "OP_eBP" , "SZ_NA" ], + "rAX" : [ "OP_rAX" , "SZ_NA" ], + "rCX" : [ "OP_rCX" , "SZ_NA" ], + "rBX" : [ "OP_rBX" , "SZ_NA" ], + "rDX" : [ "OP_rDX" , "SZ_NA" ], + "rSI" : [ "OP_rSI" , "SZ_NA" ], + "rDI" : [ "OP_rDI" , "SZ_NA" ], + "rSP" : [ "OP_rSP" , "SZ_NA" ], + "rBP" : [ "OP_rBP" , "SZ_NA" ], + "ES" : [ "OP_ES" , "SZ_NA" ], + "CS" : [ "OP_CS" , "SZ_NA" ], + "DS" : [ "OP_DS" , "SZ_NA" ], + "SS" : [ "OP_SS" , "SZ_NA" ], + "GS" : [ "OP_GS" , "SZ_NA" ], + "FS" : [ "OP_FS" , "SZ_NA" ], + "ST0" : [ "OP_ST0" , "SZ_NA" ], + "ST1" : [ "OP_ST1" , "SZ_NA" ], + "ST2" : [ "OP_ST2" , "SZ_NA" ], + "ST3" : [ "OP_ST3" , "SZ_NA" ], + "ST4" : [ "OP_ST4" , "SZ_NA" ], + "ST5" : [ "OP_ST5" , "SZ_NA" ], + "ST6" : [ "OP_ST6" , "SZ_NA" ], + "ST7" : [ "OP_ST7" , "SZ_NA" ], + "NONE" : [ "OP_NONE" , "SZ_NA" ], + "ALr8b" : [ "OP_ALr8b" , "SZ_NA" ], + "CLr9b" : [ "OP_CLr9b" , "SZ_NA" ], + "DLr10b" : [ "OP_DLr10b" , "SZ_NA" ], + "BLr11b" : [ "OP_BLr11b" , "SZ_NA" ], + "AHr12b" : [ "OP_AHr12b" , "SZ_NA" ], + "CHr13b" : [ "OP_CHr13b" , "SZ_NA" ], + "DHr14b" : [ "OP_DHr14b" , "SZ_NA" ], + "BHr15b" : [ "OP_BHr15b" , "SZ_NA" ], + "rAXr8" : [ "OP_rAXr8" , "SZ_NA" ], + "rCXr9" : [ "OP_rCXr9" , "SZ_NA" ], + "rDXr10" : [ "OP_rDXr10" , "SZ_NA" ], + "rBXr11" : [ "OP_rBXr11" , "SZ_NA" ], + "rSPr12" : [ "OP_rSPr12" , "SZ_NA" ], + "rBPr13" : [ "OP_rBPr13" , "SZ_NA" ], + "rSIr14" : [ "OP_rSIr14" , "SZ_NA" ], + "rDIr15" : [ "OP_rDIr15" , "SZ_NA" ], + "jWP" : [ "OP_J" , "SZ_WP" ], + "jDP" : [ "OP_J" , "SZ_DP" ], + +} + +# +# opcode prefix dictionary +# +pfx_dict = { + "aso" : "P_aso", + "oso" : "P_oso", + "rexw" : "P_rexw", + "rexb" : "P_rexb", + "rexx" : "P_rexx", + "rexr" : "P_rexr", + "inv64" : "P_inv64", + "def64" : "P_def64", + "depM" : "P_depM", + "cast1" : "P_c1", + "cast2" : "P_c2", + "cast3" : "P_c3" +} + + +# +# globals +# +opr_constants = [] +siz_constants = [] +tables = {} +table_sizes = {} +mnm_list = [] +default_opr = 'O_NONE, O_NONE, O_NONE' + + +# +# collect the operand/size constants +# +for o in operand_dict.keys(): + if not (operand_dict[o][0] in opr_constants): + opr_constants.append(operand_dict[o][0]) + if not (operand_dict[o][1] in siz_constants): + siz_constants.append(operand_dict[o][1]) + +xmlDoc = minidom.parse(sys.argv[1]) +tlNode = xmlDoc.firstChild + +# +# look for top-level optable node +# +while tlNode and tlNode.localName != "x86optable": tlNode = tlNode.nextSibling + +# +# creates a table entry +# +def centry(i, defmap): + if defmap["type"][0:3] == "grp": + opr = default_opr + mnm = 'UD_I' + defmap["type"].lower() + pfx = defmap["name"].upper() + elif defmap["type"] == "leaf": + mnm = "UD_I" + defmap["name"] + opr = defmap["opr"] + pfx = defmap["pfx"] + if len(mnm) == 0: mnm = "UD_Ina" + if len(opr) == 0: opr = default_opr + if len(pfx) == 0: pfx = "P_none" + else: + opr = default_opr + pfx = "P_none" + mnm = "UD_Iinvalid" + + return " /* %s */ { %-16s %-26s %s },\n" % (i, mnm + ',', opr + ',', pfx) + +# +# makes a new table and adds it to the global +# list of tables +# +def mktab(name, size): + if not (name in tables.keys()): + tables[name] = {} + table_sizes[name] = size + +for node in tlNode.childNodes: + + opcodes = [] + iclass = '' + vendor = '' + + # we are only interested in + if node.localName != 'instruction': + continue + + # we need the mnemonic attribute + if not ('mnemonic' in node.attributes.keys()): + print "error: no mnemonic given in ." + sys.exit(-1) + + # check if this instruction was already defined. + # else add it to the global list of mnemonics + mnemonic = node.attributes['mnemonic'].value + if mnemonic in mnm_list: + print "error: multiple declarations of mnemonic='%s'" % mnemonic; + sys.exit(-1) + else: + mnm_list.append(mnemonic) + + # + # collect instruction + # - vendor + # - class + # + for n in node.childNodes: + if n.localName == 'vendor': + vendor = (n.firstChild.data).strip(); + elif n.localName == 'class': + iclass = n.firstChild.data; + + # + # for each opcode definition + # + for n in node.childNodes: + if n.localName != 'opcode': + continue; + + opcode = n.firstChild.data.strip(); + parts = opcode.split(";"); + flags = [] + opr = [] + pfx = [] + opr = [] + pfx_c = [] + + # get cast attribute, if given + if 'cast' in n.attributes.keys(): + pfx_c.append( "P_c" + n.attributes['cast'].value ) + + # get implicit addressing attribute, if given + if 'imp_addr' in n.attributes.keys(): + if int( n.attributes['imp_addr'].value ): + pfx_c.append( "P_ImpAddr" ) + + # get mode attribute, if given + if 'mode' in n.attributes.keys(): + v = (n.attributes['mode'].value).strip() + modef = v.split(); + for m in modef: + if not (m in pfx_dict): + print "warning: unrecognized mode attribute '%s'" % m + else: + pfx_c.append(pfx_dict[m]) + + # + # split opcode definition into + # 1. prefixes (pfx) + # 2. opcode bytes (opc) + # 3. operands + # + if len(parts) == 1: + opc = parts[0].split() + elif len(parts) == 2: + opc = parts[0].split() + opr = parts[1].split() + for o in opc: + if o in pfx_dict: + pfx = parts[0].split() + opc = parts[1].split() + break + elif len(parts) == 3: + pfx = parts[0].split() + opc = parts[1].split() + opr = parts[2].split() + else: + print "error: invalid opcode definition of %s\n" % mnemonic + sys.exit(-1) + # Convert opcodes to upper case + for i in range(len(opc)): + opc[i] = opc[i].upper() + + # + # check for special cases of instruction translation + # and ignore them + # + if mnemonic == 'pause' or \ + ( mnemonic == 'nop' and opc[0] == '90' ) or \ + mnemonic == 'invalid' or \ + mnemonic == 'db' : + continue + + # + # Convert prefix + # + for p in pfx: + if not ( p in pfx_dict.keys() ): + print "error: invalid prefix specification: %s \n" % pfx + pfx_c.append( pfx_dict[p] ) + if len(pfx) == 0: + pfx_c.append( "P_none" ) + pfx = "|".join( pfx_c ) + + # + # Convert operands + # + opr_c = [ "O_NONE", "O_NONE", "O_NONE" ] + for i in range(len(opr)): + if not (opr[i] in operand_dict.keys()): + print "error: invalid operand declaration: %s\n" % opr[i] + opr_c[i] = "O_" + opr[i] + opr = "%-8s %-8s %s" % (opr_c[0] + ",", opr_c[1] + ",", opr_c[2]) + + table_sse = '' + table_name = 'itab__1byte' + table_size = 256 + table_index = '' + + for op in opc: + if op[0:3] == 'SSE': + table_sse = op + elif op == '0F' and len(table_sse): + table_name = "itab__pfx_%s__0f" % table_sse + table_size = 256 + table_sse = '' + elif op == '0F': + table_name = "itab__0f" + table_size = 256 + elif op == '38' and (table_name == "itab__0f" or + table_name == "itab__pfx_SSE66__0f"): + table_index = '38' + tables[table_name][table_index] = { \ + 'type' : 'grp_3byte', \ + 'name' : "%s__38" % (table_name) \ + } + table_name = tables[table_name][table_index]['name'] + table_size = 256 + elif op[0:5] == '/X87=': + tables[table_name][table_index] = { \ + 'type' : 'grp_x87', \ + 'name' : "%s__op_%s__x87" % (table_name, table_index) \ + } + table_name = tables[table_name][table_index]['name'] + table_index = "%02X" % int(op[5:7], 16) + table_size = 64 + elif op[0:4] == '/RM=': + tables[table_name][table_index] = { \ + 'type' : 'grp_rm', \ + 'name' : "%s__op_%s__rm" % (table_name, table_index) \ + } + table_name = tables[table_name][table_index]['name'] + table_index = "%02X" % int(op[4:6]) + table_size = 8 + elif op[0:5] == '/MOD=': + tables[table_name][table_index] = { \ + 'type' : 'grp_mod', \ + 'name' : "%s__op_%s__mod" % (table_name, table_index) \ + } + table_name = tables[table_name][table_index]['name'] + if len(op) == 8: + v = op[5:8] + else: + v = op[5:7] + mod_dict = { '!11' : 0, '11' : 1 } + table_index = "%02X" % int(mod_dict[v]) + table_size = 2 + elif op[0:2] == '/O': + tables[table_name][table_index] = { \ + 'type' : 'grp_osize', \ + 'name' : "%s__op_%s__osize" % (table_name, table_index) \ + } + table_name = tables[table_name][table_index]['name'] + table_index = "%02X" % int(mode_dict[op[2:4]]) + table_size = 3 + elif op[0:2] == '/A': + tables[table_name][table_index] = { \ + 'type' : 'grp_asize', \ + 'name' : "%s__op_%s__asize" % (table_name, table_index) \ + } + table_name = tables[table_name][table_index]['name'] + table_index = "%02X" % int(mode_dict[op[2:4]]) + table_size = 3 + elif op[0:2] == '/M': + tables[table_name][table_index] = { \ + 'type' : 'grp_mode', \ + 'name' : "%s__op_%s__mode" % (table_name, table_index) \ + } + table_name = tables[table_name][table_index]['name'] + table_index = "%02X" % int(mode_dict[op[2:4]]) + table_size = 3 + elif op[0:6] == '/3DNOW': + table_name = "itab__3dnow" + table_size = 256 + elif op[0:1] == '/': + tables[table_name][table_index] = { \ + 'type' : 'grp_reg', \ + 'name' : "%s__op_%s__reg" % (table_name, table_index) \ + } + table_name = tables[table_name][table_index]['name'] + table_index = "%02X" % int(op[1:2]) + table_size = 8 + else: + table_index = op + + mktab(table_name, table_size) + + if len(vendor): + tables[table_name][table_index] = { \ + 'type' : 'grp_vendor', \ + 'name' : "%s__op_%s__vendor" % (table_name, table_index) \ + } + table_name = tables[table_name][table_index]['name'] + table_index = vend_dict[vendor] + table_size = 3 + mktab(table_name, table_size) + + tables[table_name][table_index] = { \ + 'type' : 'leaf', \ + 'name' : mnemonic, \ + 'pfx' : pfx, \ + 'opr' : opr, \ + 'flags' : flags \ + } + + if len(vendor): + tables[table_name][vend_dict['ANY']] = { \ + 'type' : 'leaf', \ + 'name' : mnemonic, \ + 'pfx' : pfx, \ + 'opr' : opr, \ + 'flags' : flags \ + } + +# --------------------------------------------------------------------- +# Generate itab.h +# --------------------------------------------------------------------- + +f = open("itab.h", "w") + +f.write(''' +/* itab.h -- auto generated by opgen.py, do not edit. */ + +#ifndef UD_ITAB_H +#define UD_ITAB_H + +''') + +# +# Generate enumeration of size constants +# +siz_constants.sort() +f.write(''' +''') + +f.write("\nenum ud_itab_vendor_index {\n" ) +f.write(" ITAB__VENDOR_INDX__AMD,\n" ) +f.write(" ITAB__VENDOR_INDX__INTEL,\n" ) +f.write(" ITAB__VENDOR_INDX__ANY,\n" ) +f.write("};\n\n") + + +f.write("\nenum ud_itab_mode_index {\n" ) +f.write(" ITAB__MODE_INDX__16,\n" ) +f.write(" ITAB__MODE_INDX__32,\n" ) +f.write(" ITAB__MODE_INDX__64\n" ) +f.write("};\n\n") + + +f.write("\nenum ud_itab_mod_index {\n" ) +f.write(" ITAB__MOD_INDX__NOT_11,\n" ) +f.write(" ITAB__MOD_INDX__11\n" ) +f.write("};\n\n") + +# +# Generate enumeration of the tables +# +table_names = tables.keys() +table_names.sort(); + +f.write( "\nenum ud_itab_index {\n" ) +for name in table_names: + f.write(" %s,\n" % name.upper() ); +f.write( "};\n\n" ) + +# +# Generate mnemonics list +# +f.write("\nenum __attribute__((packed)) ud_mnemonic_code {\n") +for m in mnm_list: + f.write(" UD_I%s,\n" % m) +for m in spl_mnm_types: + f.write(" UD_I%s,\n" % m) +f.write("};\n\n") + +# +# Generate operand definitions +# +f.write("\n/* itab entry operand definitions */\n\n"); +operands = operand_dict.keys() +operands.sort() +for o in operands: + f.write("#define O_%-7s { %-12s %-8s }\n" % + (o, operand_dict[o][0] + ",", operand_dict[o][1])); +f.write("\n"); + +# +# Generate struct defs +# +f.write( \ +''' + +extern const char* ud_mnemonics_str[];; +extern struct ud_itab_entry* ud_itab_list[]; + +''' ) + + +f.write("#endif\n") + +f.close() + +# --------------------------------------------------------------------- +# Generate itab.c +# --------------------------------------------------------------------- + +f = open("itab.c", "w") + +f.write(''' +/* itab.c -- auto generated by opgen.py, do not edit. */ + +#include "types.h" +#include "decode.h" +#include "itab.h" + +''') + +# +# generate mnemonic list +# +f.write("const char * ud_mnemonics_str[] = {\n") +for m in mnm_list: + f.write(" \"%s\",\n" % m ) +f.write("};\n\n") + +# +# generate instruction tables +# + +f.write("\n") +for t in table_names: + f.write("\nstatic struct ud_itab_entry " + t.lower() + "[%d] = {\n" % table_sizes[t]); + for i in range(int(table_sizes[t])): + index = "%02X" % i + if index in tables[t]: + f.write(centry(index, tables[t][index])) + else: + f.write(centry(index,{"type":"invalid"})) + f.write("};\n"); + +# +# write the instruction table list +# +f.write( "\n/* the order of this table matches enum ud_itab_index */") +f.write( "\nstruct ud_itab_entry * ud_itab_list[] = {\n" ) +for name in table_names: + f.write( " %s,\n" % name.lower() ) +f.write( "};\n" ); + +f.close(); + +# vim:expandtab +# vim:sw=4 +# vim:ts=4 diff --git a/libudis86/syn-att.c b/libudis86/syn-att.c new file mode 100644 index 0000000..95b87b7 --- /dev/null +++ b/libudis86/syn-att.c @@ -0,0 +1,228 @@ +/* udis86 - libudis86/syn-att.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "types.h" +#include "extern.h" +#include "decode.h" +#include "itab.h" +#include "syn.h" + +/* ----------------------------------------------------------------------------- + * opr_cast() - Prints an operand cast. + * ----------------------------------------------------------------------------- + */ +static void +opr_cast(struct ud* u, struct ud_operand* op) +{ + switch(op->size) { + case 16 : case 32 : + mkasm(u, "*"); break; + default: break; + } +} + +/* ----------------------------------------------------------------------------- + * gen_operand() - Generates assembly output for each operand. + * ----------------------------------------------------------------------------- + */ +static void +gen_operand(struct ud* u, struct ud_operand* op) +{ + switch(op->type) { + case UD_OP_REG: + mkasm(u, "%%%s", ud_reg_tab[op->base - UD_R_AL]); + break; + + case UD_OP_MEM: + if (u->br_far) opr_cast(u, op); + if (u->pfx_seg) + mkasm(u, "%%%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]); + if (op->offset == 8) { + if (op->lval.sbyte < 0) + mkasm(u, "-0x%x", (-op->lval.sbyte) & 0xff); + else mkasm(u, "0x%x", op->lval.sbyte); + } + else if (op->offset == 16) + mkasm(u, "0x%x", op->lval.uword); + else if (op->offset == 32) + mkasm(u, "0x%lx", op->lval.udword); + else if (op->offset == 64) + mkasm(u, "0x" FMT64 "x", op->lval.uqword); + + if (op->base) + mkasm(u, "(%%%s", ud_reg_tab[op->base - UD_R_AL]); + if (op->index) { + if (op->base) + mkasm(u, ","); + else mkasm(u, "("); + mkasm(u, "%%%s", ud_reg_tab[op->index - UD_R_AL]); + } + if (op->scale) + mkasm(u, ",%d", op->scale); + if (op->base || op->index) + mkasm(u, ")"); + break; + + case UD_OP_IMM: + switch (op->size) { + case 8: mkasm(u, "$0x%x", op->lval.ubyte); break; + case 16: mkasm(u, "$0x%x", op->lval.uword); break; + case 32: mkasm(u, "$0x%lx", op->lval.udword); break; + case 64: mkasm(u, "$0x" FMT64 "x", op->lval.uqword); break; + default: break; + } + break; + + case UD_OP_JIMM: + switch (op->size) { + case 8: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sbyte); + break; + case 16: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sword); + break; + case 32: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sdword); + break; + default:break; + } + break; + + case UD_OP_PTR: + switch (op->size) { + case 32: + mkasm(u, "$0x%x, $0x%x", op->lval.ptr.seg, + op->lval.ptr.off & 0xFFFF); + break; + case 48: + mkasm(u, "$0x%x, $0x%lx", op->lval.ptr.seg, + op->lval.ptr.off); + break; + } + break; + + default: return; + } +} + +/* ============================================================================= + * translates to AT&T syntax + * ============================================================================= + */ +extern void +ud_translate_att(struct ud *u) +{ + int size = 0; + + /* check if P_OSO prefix is used */ + if (! P_OSO(u->itab_entry->prefix) && u->pfx_opr) { + switch (u->dis_mode) { + case 16: + mkasm(u, "o32 "); + break; + case 32: + case 64: + mkasm(u, "o16 "); + break; + } + } + + /* check if P_ASO prefix was used */ + if (! P_ASO(u->itab_entry->prefix) && u->pfx_adr) { + switch (u->dis_mode) { + case 16: + mkasm(u, "a32 "); + break; + case 32: + mkasm(u, "a16 "); + break; + case 64: + mkasm(u, "a32 "); + break; + } + } + + if (u->pfx_lock) + mkasm(u, "lock "); + if (u->pfx_rep) + mkasm(u, "rep "); + if (u->pfx_repne) + mkasm(u, "repne "); + + /* special instructions */ + switch (u->mnemonic) { + case UD_Iretf: + mkasm(u, "lret "); + break; + case UD_Idb: + mkasm(u, ".byte 0x%x", u->operand[0].lval.ubyte); + return; + case UD_Ijmp: + case UD_Icall: + if (u->br_far) mkasm(u, "l"); + mkasm(u, "%s", ud_lookup_mnemonic(u->mnemonic)); + break; + case UD_Ibound: + case UD_Ienter: + if (u->operand[0].type != UD_NONE) + gen_operand(u, &u->operand[0]); + if (u->operand[1].type != UD_NONE) { + mkasm(u, ","); + gen_operand(u, &u->operand[1]); + } + return; + default: + mkasm(u, "%s", ud_lookup_mnemonic(u->mnemonic)); + } + + if (u->c1) + size = u->operand[0].size; + else if (u->c2) + size = u->operand[1].size; + else if (u->c3) + size = u->operand[2].size; + + if (size == 8) + mkasm(u, "b"); + else if (size == 16) + mkasm(u, "w"); + else if (size == 64) + mkasm(u, "q"); + + mkasm(u, " "); + + if (u->operand[2].type != UD_NONE) { + gen_operand(u, &u->operand[2]); + mkasm(u, ", "); + } + + if (u->operand[1].type != UD_NONE) { + gen_operand(u, &u->operand[1]); + mkasm(u, ", "); + } + + if (u->operand[0].type != UD_NONE) + gen_operand(u, &u->operand[0]); +} diff --git a/libudis86/syn-intel.c b/libudis86/syn-intel.c new file mode 100644 index 0000000..df83ce6 --- /dev/null +++ b/libudis86/syn-intel.c @@ -0,0 +1,225 @@ +/* udis86 - libudis86/syn-intel.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "types.h" +#include "extern.h" +#include "decode.h" +#include "itab.h" +#include "syn.h" + +/* ----------------------------------------------------------------------------- + * opr_cast() - Prints an operand cast. + * ----------------------------------------------------------------------------- + */ +static void +opr_cast(struct ud* u, struct ud_operand* op) +{ + switch(op->size) { + case 8: mkasm(u, "byte " ); break; + case 16: mkasm(u, "word " ); break; + case 32: mkasm(u, "dword "); break; + case 64: mkasm(u, "qword "); break; + case 80: mkasm(u, "tword "); break; + default: break; + } + if (u->br_far) + mkasm(u, "far "); + else if (u->br_near) + mkasm(u, "near "); +} + +/* ----------------------------------------------------------------------------- + * gen_operand() - Generates assembly output for each operand. + * ----------------------------------------------------------------------------- + */ +static void gen_operand(struct ud* u, struct ud_operand* op, int syn_cast) +{ + switch(op->type) { + case UD_OP_REG: + mkasm(u, ud_reg_tab[op->base - UD_R_AL]); + break; + + case UD_OP_MEM: { + + int op_f = 0; + + if (syn_cast) + opr_cast(u, op); + + mkasm(u, "["); + + if (u->pfx_seg) + mkasm(u, "%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]); + + if (op->base) { + mkasm(u, "%s", ud_reg_tab[op->base - UD_R_AL]); + op_f = 1; + } + + if (op->index) { + if (op_f) + mkasm(u, "+"); + mkasm(u, "%s", ud_reg_tab[op->index - UD_R_AL]); + op_f = 1; + } + + if (op->scale) + mkasm(u, "*%d", op->scale); + + if (op->offset == 8) { + if (op->lval.sbyte < 0) + mkasm(u, "-0x%x", -op->lval.sbyte); + else mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.sbyte); + } + else if (op->offset == 16) + mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.uword); + else if (op->offset == 32) { + if (u->adr_mode == 64) { + if (op->lval.sdword < 0) + mkasm(u, "-0x%x", -op->lval.sdword); + else mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.sdword); + } + else mkasm(u, "%s0x%lx", (op_f) ? "+" : "", op->lval.udword); + } + else if (op->offset == 64) + mkasm(u, "%s0x" FMT64 "x", (op_f) ? "+" : "", op->lval.uqword); + + mkasm(u, "]"); + break; + } + + case UD_OP_IMM: + if (syn_cast) opr_cast(u, op); + switch (op->size) { + case 8: mkasm(u, "0x%x", op->lval.ubyte); break; + case 16: mkasm(u, "0x%x", op->lval.uword); break; + case 32: mkasm(u, "0x%lx", op->lval.udword); break; + case 64: mkasm(u, "0x" FMT64 "x", op->lval.uqword); break; + default: break; + } + break; + + case UD_OP_JIMM: + if (syn_cast) opr_cast(u, op); + switch (op->size) { + case 8: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sbyte); + break; + case 16: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sword); + break; + case 32: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sdword); + break; + default:break; + } + break; + + case UD_OP_PTR: + switch (op->size) { + case 32: + mkasm(u, "word 0x%x:0x%x", op->lval.ptr.seg, + op->lval.ptr.off & 0xFFFF); + break; + case 48: + mkasm(u, "dword 0x%x:0x%lx", op->lval.ptr.seg, + op->lval.ptr.off); + break; + } + break; + + case UD_OP_CONST: + if (syn_cast) opr_cast(u, op); + mkasm(u, "%d", op->lval.udword); + break; + + default: return; + } +} + +/* ============================================================================= + * translates to intel syntax + * ============================================================================= + */ +extern void ud_translate_intel(struct ud* u) +{ + /* -- prefixes -- */ + + /* check if P_OSO prefix is used */ + if (! P_OSO(u->itab_entry->prefix) && u->pfx_opr) { + switch (u->dis_mode) { + case 16: + mkasm(u, "o32 "); + break; + case 32: + case 64: + mkasm(u, "o16 "); + break; + } + } + + /* check if P_ASO prefix was used */ + if (! P_ASO(u->itab_entry->prefix) && u->pfx_adr) { + switch (u->dis_mode) { + case 16: + mkasm(u, "a32 "); + break; + case 32: + mkasm(u, "a16 "); + break; + case 64: + mkasm(u, "a32 "); + break; + } + } + + if (u->pfx_lock) + mkasm(u, "lock "); + if (u->pfx_rep) + mkasm(u, "rep "); + if (u->pfx_repne) + mkasm(u, "repne "); + if (u->implicit_addr && u->pfx_seg) + mkasm(u, "%s ", ud_reg_tab[u->pfx_seg - UD_R_AL]); + + /* print the instruction mnemonic */ + mkasm(u, "%s ", ud_lookup_mnemonic(u->mnemonic)); + + /* operand 1 */ + if (u->operand[0].type != UD_NONE) { + gen_operand(u, &u->operand[0], u->c1); + } + /* operand 2 */ + if (u->operand[1].type != UD_NONE) { + mkasm(u, ", "); + gen_operand(u, &u->operand[1], u->c2); + } + + /* operand 3 */ + if (u->operand[2].type != UD_NONE) { + mkasm(u, ", "); + gen_operand(u, &u->operand[2], u->c3); + } +} diff --git a/libudis86/syn.c b/libudis86/syn.c new file mode 100644 index 0000000..0d10977 --- /dev/null +++ b/libudis86/syn.c @@ -0,0 +1,79 @@ +/* udis86 - libudis86/syn.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* ----------------------------------------------------------------------------- + * Intel Register Table - Order Matters (types.h)! + * ----------------------------------------------------------------------------- + */ +const char* ud_reg_tab[] = +{ + "al", "cl", "dl", "bl", + "ah", "ch", "dh", "bh", + "spl", "bpl", "sil", "dil", + "r8b", "r9b", "r10b", "r11b", + "r12b", "r13b", "r14b", "r15b", + + "ax", "cx", "dx", "bx", + "sp", "bp", "si", "di", + "r8w", "r9w", "r10w", "r11w", + "r12w", "r13W" , "r14w", "r15w", + + "eax", "ecx", "edx", "ebx", + "esp", "ebp", "esi", "edi", + "r8d", "r9d", "r10d", "r11d", + "r12d", "r13d", "r14d", "r15d", + + "rax", "rcx", "rdx", "rbx", + "rsp", "rbp", "rsi", "rdi", + "r8", "r9", "r10", "r11", + "r12", "r13", "r14", "r15", + + "es", "cs", "ss", "ds", + "fs", "gs", + + "cr0", "cr1", "cr2", "cr3", + "cr4", "cr5", "cr6", "cr7", + "cr8", "cr9", "cr10", "cr11", + "cr12", "cr13", "cr14", "cr15", + + "dr0", "dr1", "dr2", "dr3", + "dr4", "dr5", "dr6", "dr7", + "dr8", "dr9", "dr10", "dr11", + "dr12", "dr13", "dr14", "dr15", + + "mm0", "mm1", "mm2", "mm3", + "mm4", "mm5", "mm6", "mm7", + + "st0", "st1", "st2", "st3", + "st4", "st5", "st6", "st7", + + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + + "rip" +}; diff --git a/libudis86/syn.h b/libudis86/syn.h new file mode 100644 index 0000000..30ee191 --- /dev/null +++ b/libudis86/syn.h @@ -0,0 +1,51 @@ +/* udis86 - libudis86/syn.h + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* ----------------------------------------------------------------------------- + * syn.h + * + * Copyright (c) 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ +#ifndef UD_SYN_H +#define UD_SYN_H + +#include "types.h" +#ifndef __UD_STANDALONE__ +# include +#endif /* __UD_STANDALONE__ */ + +extern const char* ud_reg_tab[]; + +static void mkasm(struct ud* u, const char* fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + u->insn_fill += vsprintf((char*) u->insn_buffer + u->insn_fill, fmt, ap); + va_end(ap); +} + +#endif diff --git a/libudis86/types.h b/libudis86/types.h new file mode 100644 index 0000000..41c0022 --- /dev/null +++ b/libudis86/types.h @@ -0,0 +1,234 @@ +/* udis86 - libudis86/types.h + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UD_TYPES_H +#define UD_TYPES_H + +#ifdef __KERNEL__ + /* -D__KERNEL__ is automatically passed on the command line when + building something as part of the Linux kernel */ +# include +# include +# define __UD_STANDALONE__ 1 +#endif /* __KERNEL__ */ + +#include "itab.h" + +#ifndef __UD_STANDALONE__ +# include +#endif /* __UD_STANDALONE__ */ + +#ifdef _MSC_VER +# define FMT64 "%I64" + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; +#else +# define FMT64 "%ll" +# ifndef __UD_STANDALONE__ +# include +# endif /* __UD_STANDALONE__ */ +#endif + +/* ----------------------------------------------------------------------------- + * All possible "types" of objects in udis86. Order is Important! + * ----------------------------------------------------------------------------- + */ +enum ud_type +{ + UD_NONE, + + /* 8 bit GPRs */ + UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL, + UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH, + UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL, + UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B, + UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B, + + /* 16 bit GPRs */ + UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX, + UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI, + UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W, + UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W, + + /* 32 bit GPRs */ + UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX, + UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI, + UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D, + UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D, + + /* 64 bit GPRs */ + UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX, + UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI, + UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11, + UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15, + + /* segment registers */ + UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS, + UD_R_FS, UD_R_GS, + + /* control registers*/ + UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3, + UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7, + UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11, + UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15, + + /* debug registers */ + UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3, + UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7, + UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11, + UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15, + + /* mmx registers */ + UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3, + UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7, + + /* x87 registers */ + UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3, + UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7, + + /* extended multimedia registers */ + UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3, + UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7, + UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11, + UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15, + + UD_R_RIP, + + /* Operand Types */ + UD_OP_REG, UD_OP_MEM, UD_OP_PTR, UD_OP_IMM, + UD_OP_JIMM, UD_OP_CONST +}; + +/* ----------------------------------------------------------------------------- + * struct ud_operand - Disassembled instruction Operand. + * ----------------------------------------------------------------------------- + */ +struct ud_operand +{ + enum ud_type type; + uint8_t size; + union { + int8_t sbyte; + uint8_t ubyte; + int16_t sword; + uint16_t uword; + int32_t sdword; + uint32_t udword; + int64_t sqword; + uint64_t uqword; + + struct { + uint16_t seg; + uint32_t off; + } ptr; + } lval; + + enum ud_type base; + enum ud_type index; + uint8_t offset; + uint8_t scale; +}; + +/* ----------------------------------------------------------------------------- + * struct ud - The udis86 object. + * ----------------------------------------------------------------------------- + */ +struct ud +{ + int (*inp_hook) (struct ud*); + uint8_t inp_curr; + uint8_t inp_fill; +#ifndef __UD_STANDALONE__ + FILE* inp_file; +#endif + uint8_t inp_ctr; + uint8_t* inp_buff; + uint8_t* inp_buff_end; + uint8_t inp_end; + void (*translator)(struct ud*); + uint64_t insn_offset; + char insn_hexcode[32]; + char insn_buffer[64]; + unsigned int insn_fill; + uint8_t dis_mode; + uint64_t pc; + uint8_t vendor; + struct map_entry* mapen; + enum ud_mnemonic_code mnemonic; + struct ud_operand operand[3]; + uint8_t error; + uint8_t pfx_rex; + uint8_t pfx_seg; + uint8_t pfx_opr; + uint8_t pfx_adr; + uint8_t pfx_lock; + uint8_t pfx_rep; + uint8_t pfx_repe; + uint8_t pfx_repne; + uint8_t pfx_insn; + uint8_t default64; + uint8_t opr_mode; + uint8_t adr_mode; + uint8_t br_far; + uint8_t br_near; + uint8_t implicit_addr; + uint8_t c1; + uint8_t c2; + uint8_t c3; + uint8_t inp_cache[256]; + uint8_t inp_sess[64]; + void * user_opaque_data; + struct ud_itab_entry * itab_entry; +}; + +/* ----------------------------------------------------------------------------- + * Type-definitions + * ----------------------------------------------------------------------------- + */ +typedef enum ud_type ud_type_t; +typedef enum ud_mnemonic_code ud_mnemonic_code_t; + +typedef struct ud ud_t; +typedef struct ud_operand ud_operand_t; + +#define UD_SYN_INTEL ud_translate_intel +#define UD_SYN_ATT ud_translate_att +#define UD_EOI -1 +#define UD_INP_CACHE_SZ 32 +#define UD_VENDOR_AMD 0 +#define UD_VENDOR_INTEL 1 +#define UD_VENDOR_ANY 2 + +#define bail_out(ud,error_code) longjmp( (ud)->bailout, error_code ) +#define try_decode(ud) if ( setjmp( (ud)->bailout ) == 0 ) +#define catch_error() else + +#endif diff --git a/libudis86/udis86.c b/libudis86/udis86.c new file mode 100644 index 0000000..135ef59 --- /dev/null +++ b/libudis86/udis86.c @@ -0,0 +1,175 @@ +/* udis86 - libudis86/udis86.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef __UD_STANDALONE__ +#include +#include +#endif /* __UD_STANDALONE__ */ + +#include "input.h" +#include "extern.h" + +/* ============================================================================= + * ud_init() - Initializes ud_t object. + * ============================================================================= + */ +extern void +ud_init(struct ud* u) +{ + memset((void*)u, 0, sizeof(struct ud)); + ud_set_mode(u, 16); + u->mnemonic = UD_Iinvalid; + ud_set_pc(u, 0); +#ifndef __UD_STANDALONE__ + ud_set_input_file(u, stdin); +#endif /* __UD_STANDALONE__ */ +} + +/* ============================================================================= + * ud_disassemble() - disassembles one instruction and returns the number of + * bytes disassembled. A zero means end of disassembly. + * ============================================================================= + */ +extern unsigned int +ud_disassemble(struct ud* u) +{ + if (ud_input_end(u)) + return 0; + + + u->insn_buffer[0] = u->insn_hexcode[0] = 0; + + + if (ud_decode(u) == 0) + return 0; + if (u->translator) + u->translator(u); + return ud_insn_len(u); +} + +/* ============================================================================= + * ud_set_mode() - Set Disassemly Mode. + * ============================================================================= + */ +extern void +ud_set_mode(struct ud* u, uint8_t m) +{ + switch(m) { + case 16: + case 32: + case 64: u->dis_mode = m ; return; + default: u->dis_mode = 16; return; + } +} + +/* ============================================================================= + * ud_set_vendor() - Set vendor. + * ============================================================================= + */ +extern void +ud_set_vendor(struct ud* u, unsigned v) +{ + switch(v) { + case UD_VENDOR_INTEL: + u->vendor = v; + break; + case UD_VENDOR_ANY: + u->vendor = v; + break; + default: + u->vendor = UD_VENDOR_AMD; + } +} + +/* ============================================================================= + * ud_set_pc() - Sets code origin. + * ============================================================================= + */ +extern void +ud_set_pc(struct ud* u, uint64_t o) +{ + u->pc = o; +} + +/* ============================================================================= + * ud_set_syntax() - Sets the output syntax. + * ============================================================================= + */ +extern void +ud_set_syntax(struct ud* u, void (*t)(struct ud*)) +{ + u->translator = t; +} + +/* ============================================================================= + * ud_insn() - returns the disassembled instruction + * ============================================================================= + */ +extern char* +ud_insn_asm(struct ud* u) +{ + return u->insn_buffer; +} + +/* ============================================================================= + * ud_insn_offset() - Returns the offset. + * ============================================================================= + */ +extern uint64_t +ud_insn_off(struct ud* u) +{ + return u->insn_offset; +} + + +/* ============================================================================= + * ud_insn_hex() - Returns hex form of disassembled instruction. + * ============================================================================= + */ +extern char* +ud_insn_hex(struct ud* u) +{ + return u->insn_hexcode; +} + +/* ============================================================================= + * ud_insn_ptr() - Returns code disassembled. + * ============================================================================= + */ +extern uint8_t* +ud_insn_ptr(struct ud* u) +{ + return u->inp_sess; +} + +/* ============================================================================= + * ud_insn_len() - Returns the count of bytes disassembled. + * ============================================================================= + */ +extern unsigned int +ud_insn_len(struct ud* u) +{ + return u->inp_ctr; +} diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000..6f1e7d6 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,66 @@ +# +# Automake definitions for ud/tests +# +check_PROGRAMS = gen ovrrun + +gen_SOURCES = gen.c +gen_LDADD = ../libudis86/libudis86.la +gen_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) +ovrrun_SOURCES = bufovrrun.c +ovrrun_LDADD = ../libudis86/libudis86.la +ovrrun_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) + +YASM = yasm + +dist_check_DATA = test16.asm test32.asm test64.asm testjmp.asm testobscure.asm \ + testjmp.ref testobscure.ref randtest.raw randtest16.ref \ + randtest32.ref randtest64.ref + +check-local: tests + +tests: test16 test32 test64 testjmp bufovrrun randraw + +test16: gen + $(YASM) -f bin -o test16.bin $(top_srcdir)/tests/test16.asm + echo "[bits 16]" > test16.out + ./gen -16 < test16.bin >> test16.out + diff $(top_srcdir)/tests/test16.asm test16.out + +test32: gen + $(YASM) -f bin -o test32.bin $(top_srcdir)/tests/test32.asm + echo "[bits 32]" > test32.out + ./gen -32 < test32.bin >> test32.out + diff $(top_srcdir)/tests/test32.asm test32.out + +test64: gen + $(YASM) -f bin -o test64.bin $(top_srcdir)/tests/test64.asm + echo "[bits 64]" > test64.out + ./gen -64 < test64.bin >> test64.out + diff $(top_srcdir)/tests/test64.asm test64.out + +testjmp: gen + $(YASM) -f bin -o testjmp.bin $(top_srcdir)/tests/testjmp.asm + ../udcli/udcli -64 < testjmp.bin > testjmp.out + diff $(top_srcdir)/tests/testjmp.ref testjmp.out + +testobscure: gen + $(YASM) -f bin -o testobscure.bin $(top_srcdir)/tests/testobscure.asm + ./gen -32 < testobscure.bin > testobscure.out + diff $(top_srcdir)/tests/testobscure.ref testobscure.out + +bufovrrun: ovrrun + ./ovrrun + +randraw: + ./gen -16 < $(top_srcdir)/tests/randtest.raw > randtest16.out + diff randtest16.out $(top_srcdir)/tests/randtest16.ref + ./gen -32 < $(top_srcdir)/tests/randtest.raw > randtest32.out + diff randtest32.out $(top_srcdir)/tests/randtest32.ref + ./gen -64 < $(top_srcdir)/tests/randtest.raw > randtest64.out + diff randtest64.out $(top_srcdir)/tests/randtest64.ref + +installcheck-local: + $(CC) $(srcdir)/gen.c -o gen_installcheck.bin -I$(includedir) -L$(libdir) -ludis86 + +clean-local: + rm -f *.bin *.out diff --git a/tests/Makefile.win32 b/tests/Makefile.win32 new file mode 100644 index 0000000..259b8ec --- /dev/null +++ b/tests/Makefile.win32 @@ -0,0 +1,35 @@ +# Makefile + +CC = cl +RM = del + + +.SUFFIXES: .c .obj +.c.obj: + $(CC) -I.. -c $(CFLAGS) -o $@ $< + +OBJS = gen.obj + +gen.exe: $(OBJS) + $(CC) $(OBJS) ../libudis86/udis86.lib -o gen.exe +test16: gen.exe + yasm -f bin -o test16.bin test16.asm + echo [bits 16]> test16.out + gen -16 < test16.bin >> test16.out + diff test16.asm test16.out | more +test32: gen.exe + yasm -f bin -o test32.bin test32.asm + echo [bits 32]> test32.out + gen -32 < test32.bin >> test32.out + diff test32.asm test32.out | more +test64: gen.exe + yasm -f bin -o test64.bin test64.asm + echo [bits 64]> test64.out + gen -64 < test64.bin >> test64.out + diff test64.asm test64.out | more +testjmp: gen.exe + yasm -f bin -o testjmp.bin testjmp.asm + ..\udcli\udcli -64 < testjmp.bin > testjmp.out + type testjmp.out | more +clean: + $(RM) *.obj gen.exe *.bin *.out diff --git a/tests/bufovrrun.c b/tests/bufovrrun.c new file mode 100644 index 0000000..de52262 --- /dev/null +++ b/tests/bufovrrun.c @@ -0,0 +1,17 @@ +#include +#include + +int +main() { + uint8_t raw[] = { 0xf0, 0x66, 0x36, 0x67, 0x65, 0x66, 0xf3, 0x67, 0xda }; + uint8_t len = 9; + ud_t ud_obj; + ud_init(&ud_obj); + ud_set_mode(&ud_obj, 16); + ud_set_input_buffer(&ud_obj, raw, len); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + if (ud_disassemble(&ud_obj) != 0) { + return 0; + } + return 1; +} diff --git a/tests/gen.c b/tests/gen.c new file mode 100644 index 0000000..34daba8 --- /dev/null +++ b/tests/gen.c @@ -0,0 +1,54 @@ +/* ----------------------------------------------------------------------------- + * gen.c - front end to udis86 testing. + * + * Copyright (c) 2006,2007 Vivek Mohan + * All rights reserved. + * See (LICENSE) + * ----------------------------------------------------------------------------- + */ +#include +#include +#include + +#if defined(__DJGPP__) || defined(_WIN32) +# include +# include +#endif + +#ifdef __DJGPP__ +# include /* for isatty() */ +# define _setmode setmode +# define _fileno fileno +# define _O_BINARY O_BINARY +#endif + +/* help string */ +int main(int argc, char **argv) +{ + ud_t ud_obj; + +#ifdef __DJGPP__ + if ( !isatty( fileno( stdin ) ) ) +#endif +#if defined(__DJGPP) || defined(_WIN32) + _setmode(_fileno(stdin), _O_BINARY); +#endif + + ud_init(&ud_obj); + ud_set_input_file(&ud_obj, stdin); + + if (strcmp(argv[1],"-16") == 0) + ud_set_mode(&ud_obj, 16); + else if (strcmp(argv[1],"-32") == 0) + ud_set_mode(&ud_obj, 32); + else if (strcmp(argv[1],"-64") == 0) + ud_set_mode(&ud_obj, 64); + + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + + while ( ud_disassemble( &ud_obj ) ) { + printf( "\t%s\n", ud_insn_asm( &ud_obj ) ); + } + + return 0; +} diff --git a/tests/randtest.raw b/tests/randtest.raw new file mode 100644 index 0000000000000000000000000000000000000000..c3a6e9c170fd799e180b0a8df828f248e66d6b99 GIT binary patch literal 7780 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 literal 0 HcmV?d00001 diff --git a/tests/randtest16.ref b/tests/randtest16.ref new file mode 100644 index 0000000..aba0d52 --- /dev/null +++ b/tests/randtest16.ref @@ -0,0 +1,3725 @@ + mov di, 0x4fae + adc byte [di+0xfaf1], 0x43 + lea ax, [bx+si] + or al, 0xeb + aaa + add ax, 0x3a9d + retf 0x35cf + xor ax, 0xa132 + cld + add word [gs:bx+si], 0xf8 + out dx, ax + jmp word 0x7863:0x6e11 + ret 0x6e60 + mov cr1, [bx+di-0x6e] + jnp 0xffffffffffffffac + xchg si, ax + push es + lahf + add bl, ch + out 0x9f, al + sar word [bx+di-0x61], 1 + jmp word 0x85e3:0x3f60 + pusha + lock jl 0x81 + mov cx, 0x2522 + rol ax, cl + out 0x70, ax + push si + pop ss + aaa + in al, dx + xchg cx, ax + and bp, si + push cx + mov cl, 0xc8 + sbb al, 0x78 + into + shr bp, 1 + adc bh, [si+0x21] + jnp 0xffffffffffffffe6 + inc ax + push word [bp+si-0x1d] + xlatb + bound ax, [bp+di+0xd184] + neg word [bx+di+0x6df4] + xchg di, ax + mov gs, [0x8e1] + mov al, 0x96 + adc [bp+di+0x585e], ah + insb + xchg dx, ax + ret 0x7e85 + add ch, ch + pop ss + daa + xchg si, ax + mov bl, 0xe4 + mov cr0, [bx+di+0x1807] + scasw + std + inc byte [si] + stosw + sbb word [si], 0x444e + outsw + mov [si+0x572e], bl + mov cx, 0xa448 + or sp, dx + adc al, 0xe9 + insw + sub cl, bl + invalid + cmc + bound ax, [bx+si] + pop ds + pop cx + mov [bx], ch + xchg dx, ax + salc + and [bx+di], sp + push bx + jbe 0xde + mov [bx+di], di + sar cl, cl + add [bp+di+0x5e], cl + inc bp + iretw + daa + mov gs, [bp+si] + adc ax, 0xe2e1 + pop es + adc [bx+si+0x4b], dx + repne gs movsb + scasb + a32 inc sp + jae 0x130 + ret + cmp ax, 0x1475 + loope 0x128 + stosw + insw + xor [si+0x98a4], si + add al, bh + imul si, [bp+di], 0xccc5 + push 0xc8 + cmp si, [bx+0x2958] + ret + wait + daa + xor al, [bx+si+0xc8bf] + push cx + mov ax, [0xe8a3] + mov al, [0x705f] + in ax, dx + add si, bx + xchg bx, ax + xor byte [bx+di+0x4f], 0x37 + ja 0xa6 + xlatb + o32 shl [bx+si], cl + mov bh, 0x91 + push bp + push si + nop + push sp + mov bl, 0x83 + invalid + pop cx + mov bx, 0xc4e3 + pop ax + iretw + mov cx, [bx+si+0x20] + jbe 0x145 + dec ebp + js 0x94 + xor ch, [bx+si-0x65] + sahf + dec cx + or bh, [bp+0xdd9a] + ret 0x25db + invalid + xor al, 0x81 + xchg [bp+si], bh + mov al, 0xd0 + xchg sp, ax + push ss + sub ax, 0x27a4 + sti + out 0xf5, ax + and ax, 0x47f6 + pop di + jg 0x1a4 + and word [fs:bp-0x79], 0xc980 + rol byte [si+0x6699], 1 + div word [bx-0x44] + sub bl, ch + push sp + or [bx+di+0x9a4a], dl + shr word [di+0x9f7b], cl + movsw + sub al, 0xe0 + wait + push ss + invalid + test al, 0x7b + int3 + cmpsw + in al, 0xac + mov dl, 0xd8 + push sp + add di, cx + salc + push ss + bswap bp + sbb ax, 0x63c4 + and al, 0x13 + sub [bx+di+0xa3f5], al + mov ah, 0x98 + fstp8 st1 + or al, 0x40 + out dx, ax + or [bx+di-0x47], sp + jae 0x162 + call 0xffffffffffff8331 + test [di+0xa6fe], dx + ficom dword [bx+di] + movsb + jmp word 0x3235:0x78b0 + push word 0x6252 + int1 + or [bx+si+0xd1ef], cl + invalid + xchg cx, ax + jns 0x112 + pushfw + jb 0x1cd + ficom word [0x2f0e] + loopnz 0x14f + push ax + xor [bx+si+0x2f], sp + cli + insw + les si, [si+0x2d] + imul bp, [bp+0x3], 0x7437 + invalid + fbstp [bx+si] + ret 0x7e91 + xor ax, 0x189e + ror word [bx+di], 1 + xchg di, ax + sub ax, 0xb563 + dec di + jcxz 0x13f + push dx + push ax + mov si, 0x268e + sbb ax, 0xdfba + pop es + test [bp+0x64], bx + xchg [bx+0xd6d], si + das + ja 0x173 + push cs + pop bx + add [bp+di+0x4faf], dx + aam 0xc3 + add bp, [0x7433] + ror word [di+0xbcd7], cl + pop bx + inc cx + dec si + or [0x23cf], cl + jae 0x22a + int3 + push si + sbb sp, [bx] + jnz 0x222 + mov dx, 0x6695 + daa + xor dl, dl + outsb + shl dl, 1 + pop bp + aad 0x47 + sub [bp-0x9], ax + call 0x4abc + add al, 0x2d + ret 0xd5d9 + loopnz 0x193 + xchg bx, ax + or dx, [bp+si] + cld + jp 0x227 + inc di + and ch, bl + pop ss + retf + xchg bp, ax + in ax, 0xf1 + rep pusha + scasb + inc cx + push ss + pusha + mov ax, [0x4d9e] + push di + dec di + mov si, 0xd71e + invalid + xor al, 0xa3 + xchg sp, ax + shl word [di+0xcece], 0x9c + mov bl, 0x48 + pusha + test al, 0xdd + mov di, 0xc7d3 + mov bx, 0x414e + movsb + or al, 0x7c + stosw + push cx + jnp 0x22d + xor bl, [bx+di+0x55b3] + xchg bx, ax + xchg ax, ax + dec dx + mov cl, 0xf2 + xchg bp, ax + lock push bx + xchg cx, ax + push bp + les cx, [di] + retf + in ax, 0xf5 + mov sp, 0xcad2 + mov al, [0x4ba] + adc cx, ax + fucomi st0, st1 + jge 0x234 + adc di, sp + std + xor [0x9be6], di + invalid + inc sp + xor ax, 0x4733 + or al, 0x73 + jle 0x1f9 + push ax + mov [0x87e4], al + cmpsb + pop di + sti + push word 0xb144 + xor al, 0xf2 + mov [0xb4c3], ax + mov bh, [di] + inc ax + mov ch, 0x87 + add ah, dl + invalid + clc + lodsw + sahf + loopnz 0x2e6 + pop bp + mov [0x6118], ax + cmp cl, [bp+si-0x3d] + sub dl, [bp-0x41] + xchg dx, ax + mov ax, [0x2e8f] + o32 fncstp + mov bl, 0xf0 + mov ch, 0xf4 + rcl byte [si-0x8], 1 + shl word [si+0x30], 0x6f + aad 0x9f + push bx + mov byte [bx+0x7cb8], 0xd2 + mov gs, [si+0x11ca] + in al, 0x18 + pushfw + aad 0xaa + sbb al, 0xed + jmp 0x263 + cld + imul si, [si], 0xbc + or [bp+si+0x8f31], cl + pop bp + push ds + add [di], dx + in al, 0xb4 + out dx, ax + and cl, [bp+si] + push cs + push sp + arpl [di], dx + push ss + ret 0xd4b9 + sar [bx+di+0x7d], cl + retf + invalid + mov bx, 0x8ee4 + adc word [bp+di+0x7f44], 0xe1e2 + o32 shr dl, 0x87 + invalid + xchg cx, ax + adc [bx-0x4a], dl + scasw + push word [bx+0x946f] + cmp al, 0x9d + scasw + in al, 0x1b + push di + fdiv qword [bx+di+0x5f] + jae 0x2b6 + jg 0x297 + repne sub byte [ecx+0x9b7c0025], 0x81 + sub di, [di] + cmp al, 0x1c + invalid + in al, dx + cmpsw + jp 0x299 + inc dx + invalid + push di + xor [si+0x1f4a], di + test [bx+si+0xbd04], bl + in ax, dx + cmpsw + mov dl, 0xf0 + jnp 0x35a + sbb [bx-0x44], cx + loope 0x392 + add [di+0x81d9], cx + adc ax, 0xa4f0 + hlt + movsb + into + sbb al, 0x2d + cmpsb + cbw + dec dx + insw + invalid + mov [0xe06f], ax + invalid + sbb ax, di + cmp ax, 0x5531 + push sp + mov di, 0x9764 + push di + js 0x381 + jge 0x30e + dec ax + fnstsw word [bx+di-0x7f] + pop ds + shl word [bx+di], 0xe0 + or sp, [bx+0x2926] + aad 0xd4 + push di + arpl [bx+0x8291], bx + in ax, dx + cmp ch, ch + dec di + neg word [di] + a32 ret + pop ax + sbb ax, 0x6df9 + mov cl, 0x34 + mov dl, 0x1b + mov ax, [0xa1f8] + xor cx, [si] + mov bx, 0x867c + xor ax, 0x88d6 + add ax, [si+0x6] + out dx, al + lodsw + pop ss + jnz 0x3b5 + arpl di, ax + cmpsw + hlt + mov di, 0x2357 + lodsb + xchg bp, ax + push bp + inc bx + pop bx + adc ax, 0x8bc4 + test al, 0x8b + shr ax, cl + dec bx + div byte [bx+di] + bound bx, [bx+di-0x21] + fdivr dword [di+0x1a13] + dec bx + movsb + xor si, [bp-0x27] + sbb [0x89d2], dx + and bh, [si+0xbb3e] + outsw + and di, [bp+0xf435] + xor ax, 0xafd5 + add [bx+si], dh + js 0x3dc + jmp word 0xbfdf:0x8522 + lds sp, [bp+di] + jge 0x3d9 + xchg di, ax + test [bx+di+0x36], bl + xor ax, 0xdd51 + repne mov si, 0x5b1f + invalid + push ax + fstp qword [bx+si+0x4f77] + push si + jp 0x383 + mov sp, 0x8fdc + fsubr qword [bp+0x35] + shl word [di+0x57e4], 1 + mov di, 0xa0bc + nop + dec ax + fdivr st0, st2 + popfw + jo 0x39f + daa + nop + in ax, 0xe + in ax, 0xc1 + cmp [si+0x9a5d], ah + out 0x18, al + push ds + xchg [bp+di+0x44bd], cx + dec sp + push cx + pusha + cmpsw + outsw + inc bx + stosw + wait + invalid + mov ax, 0xf49a + in al, 0xbe + pop sp + mov al, 0x7d + cmp ax, 0x7321 + xor al, 0xda + imul cx, [bx+di], 0x38aa + invalid + mov ax, 0xa09c + jg 0x44a + cmp [bp+0xb487], dh + stc + push bp + fild qword [bx+0x31] + pop ax + invalid + mov cl, 0x1f + clc + jns 0x442 + mov bp, [bp+si] + in ax, 0x6 + mov ah, 0x85 + adc cx, [bp+di-0x1d] + inc di + jnp 0x3ed + xchg sp, ax + invalid + jg 0x491 + bound dx, [si] + adc si, bx + mov ch, 0xc3 + push sp + inc cx + dec bx + jle 0x3db + test [di+0x5122], ax + push word 0xf672 + push dx + push ax + mov [0xd9be], al + cmp ch, [bp+di+0xf270] + jmp 0xa4e + inc si + add al, 0x6f + mov [0x9ce8], ax + leave + mov cx, 0xebad + jbe 0x494 + shl word [bx+di+0xac9b], 1 + or ax, 0x158e + int1 + sub bl, bh + lodsw + and al, 0x52 + mov cl, al + push dx + and ax, 0x662 + add ax, 0xecf6 + push si + jmp 0x4f3 + push bx + cld + or al, 0xe4 + jnz 0x4bd + shl byte [bx+si], 1 + mov cx, 0x583c + mov [0xbc10], al + fidiv dword [bp+si] + adc al, 0x8c + jp 0x4af + popa + inc si + jmp word far [bp+di+0x2715] + jmp 0x4a2 + int 0xbb + dec di + outsw + mov dl, 0x55 + sbb al, 0xbb + xchg sp, ax + sbb ax, 0xa77e + push dx + a32 and ax, 0xd401 + mov ax, [0xf7d7] + enter 0x5092, 0xcf + retf 0xbec1 + lock into + jp 0x453 + into + mov bh, 0xf7 + and al, 0x80 + cmp [si], dh + nop + in ax, 0xcf + xor [0x3daf], ch + mov [si], di + sub byte [bp+di], 0x88 + xor [bp+0xf5b9], bh + mov al, [0x7e59] + cwd + hlt + aaa + movsb + lea si, [bp+di+0x8281] + inc dx + xor bx, [bx] + mov sp, 0xcb8f + ja 0x4fc + wait + repne push si + adc al, 0xb7 + inc cx + inc bx + dec si + wait + cmp ax, 0xa78a + push word 0xdd84 + call word 0x97e9:0x3040 + aam 0x7 + mov [0x23a1], ax + jo 0x53d + retf + sbb di, [bx+si+0x49d3] + mov sp, 0x9fff + mov bh, 0x3a + pushfw + cmpsw + mov ah, 0xad + or dh, [bp+si] + push ss + inc dx + xor [bx+di], cx + mov di, 0x147 + inc sp + mov ax, [0x4339] + jcxz 0x4f7 + inc sp + mov ah, 0x90 + and [si+0xb08a], ah + xchg bp, ax + sbb bp, bx + mov bl, 0x42 + xchg [di-0x1f], di + xor ax, 0x2d90 + push es + and si, ax + add bl, [bp+di+0x2] + popfw + leave + sar word [bx+di-0x61], 0x7d + jp 0x4f2 + xchg bx, ax + mov cx, 0xe5d + jo 0x5cd + fsub dword [bx+si+0x11eb] + fidivr word [bx+si] + scasw + stc + xchg si, ax + mov al, [0x36a2] + std + dec si + sti + invalid + xor al, 0xe7 + test byte [di], 0xcd + insb + imul word [bx+si] + dec sp + push ss + rep inc si + cmpsw + leave + pop di + jcxz 0x52d + retf 0x3450 + mov ch, ah + movsw + stosb + sti + or bl, [bp+di+0x4199] + movsw + push ds + mov al, [0xc0d6] + cmp al, 0x38 + xchg bx, ax + dec bp + dec di + dec dx + dec dx + add [bx+si], cx + adc al, 0x6e + inc ax + leave + adc al, 0x26 + jmp 0x556 + invalid + insw + pusha + bound sp, [si] + invalid + ja 0x5b1 + scasb + xchg sp, ax + invalid + repne inc di + dec bp + cmp ax, 0xbcd0 + jl 0x629 + cmp dh, bh + or dx, si + jo 0x55b + xor al, 0x9b + test byte [di+0x164], 0x74 + mov bp, 0xa3e9 + jp 0x5aa + jmp 0x5898 + rep push dx + mov al, 0x77 + mov cl, 0xda + mov dl, 0xec + insw + scasb + xchg cx, ax + rol bh, 1 + and ax, 0xad88 + mov byte [bx-0x6], 0x3e + out 0x66, ax + ja 0x5f0 + mov [0xa31c], al + dec bp + sar [bp-0x76], cl + push es + jae 0x5f5 + ja 0x623 + adc bx, cx + xchg bx, ax + xlatb + cwd + pop ds + sahf + mov bx, 0x5910 + xor al, 0xff + mov al, [0xf4c1] + enter 0x1f5e, 0xa6 + call 0x2d83 + aas + jns 0x5b9 + mov bl, 0x7a + adc si, ax + jmp word 0x103b:0x24f4 + adc al, 0xce + inc cx + rep fstp qword [bx+si+0x23] + out dx, eax + jno 0x59b + imul sp, bp, 0xfd + or [di+0x5ba2], ah + inc sp + scasb + jcxz 0x5d4 + cmp bh, ah + in ax, dx + aas + nop + sbb al, 0xd8 + call word 0x79d8:0xc271 + mov dh, 0x43 + inc di + inc sp + popfw + das + pop di + in al, 0xa8 + xchg bx, ax + mov dh, 0x9f + invalid + out dx, ax + nop + test ax, 0x741d + fldcw word [bp-0x5f] + adc [bx+di+0x34], cl + push bx + test si, 0x2761 + popa + out dx, ax + adc bx, [bp+si+0x48a9] + fptan + sub al, 0x46 + mov ax, 0xc441 + inc byte [bp+di+0x9db1] + scasw + cmp si, ax + sub [bx-0x66], ax + dec bp + cmp bl, 0x61 + mov al, [0xebf3] + out 0x25, al + inc cx + pusha + movsw + int3 + test al, 0xc0 + mov cl, 0x39 + insw + jmp 0x627 + add ax, 0x295d + o32 fidivr dword [bx+di] + jg 0x6a2 + push ax + sub al, 0x5e + sbb cx, [bx+si] + xchg cx, ax + dec bp + out 0xe2, ax + pop bx + jp 0x653 + jmp word 0xfa79:0xaa3b + jns 0x6c1 + shl byte [bp+si+0xe325], 1 + mov ecx, 0x56cadec + or di, [bx+di+0x4e2e] + cmp al, 0xfb + sub ax, 0xa8d8 + repne push dx + mov cx, [bp+0x8] + and cx, [bx+si+0xf452] + clc + mov cx, 0xd7d8 + int1 + mov si, 0x5708 + or ax, 0xbd70 + mov ax, [0x8e58] + adc sp, [ecx] + adc word [bx+si], 0xbf + and word [si], 0x94 + invalid + sub ax, 0xa2af + pop ds + sahf + mov cx, 0x29ae + fstp9 st4 + clc + cmp cl, cl + cmc + enter 0x4f3f, 0xf8 + adc byte [bp+si+0x8e71], 0x4b + jmp 0x699 + loop 0x6ad + jz 0x66e + aam 0x1b + push bx + call 0x3204 + test [bp+0x62], ch + test al, 0x70 + enter 0xabbc, 0x1a + out 0xd4, ax + or cl, [di] + insb + aas + sbb bl, [bp+di] + in ax, 0x7c + sbb ax, 0x4d07 + mov cx, 0x6db9 + mov bl, 0x8a + push 0xf9 + sbb cx, [bx+si+0x669e] + xor [bp+di], bx + mov si, 0x5b3d + fcomp5 st1 + js 0x6fc + sbb ax, 0xe0d5 + inc word [0xa87d] + insb + inc bp + ret 0xda6 + mov sp, 0xba3b + jmp 0xffffffffffff9862 + jle 0x793 + mov dx, 0xd8e3 + or ax, [si+0xd1b6] + les si, [bp+si] + test al, cl + int1 + fld qword [di] + cli + adc bx, ax + jle 0x7a4 + jae 0x758 + pop si + das + hlt + jbe 0x731 + jge 0x78e + ret + in al, dx + lodsw + ja 0x74e + pop bx + scasw + cld + mov bh, 0xa0 + adc ah, [bx+si] + sbb al, 0x53 + imul ax, [bx+di+0x938a], 0x9b0e + fmul qword [bx+0x74] + push bx + cmpsb + xchg [bp+si+0x5082], bp + xchg cx, ax + inc bx + imul byte [bp+si-0x5d] + lahf + add ax, 0xadde + xchg [bx+si+0xc], ah + sti + or ax, 0x6d7b + xchg dx, ax + mov al, [0xe4ed] + jbe 0x73d + int1 + xlatb + fidiv dword [0x1788] + inc al + mov [bx+di+0x6253], sp + inc di + cbw + xlatb + mov dx, 0xea50 + stosw + push sp + jo 0x7ae + add dh, [bx] + fsub qword [bx+di] + xor [si+0xf], bp + dec ax + lahf + arpl [bp+si-0x4b], bp + invalid + clc + mov sp, 0xa834 + mov bx, 0xfd9c + jcxz 0x7a0 + dec di + add bp, [bx-0x40] + mov dx, 0xa522 + pop ss + xchg di, ax + sub [si], ch + mov sp, 0xbc9f + sbb [bx-0x17], cl + inc di + xchg [ds:0x559c], si + cmp dx, [bx] + jz 0x834 + xchg sp, ax + dec cx + salc + push cx + aad 0xf9 + inc byte [bp+si+0x8bf5] + cld + push bx + sbb ah, [bp+0x9e65] + push es + push cs + shr dx, cl + in al, dx + pop ss + xchg sp, ax + and [bp+si], cx + dec cx + wait + daa + jle 0x779 + push ds + mov [bx+di-0x65], ah + inc ax + pop es + jnp 0x7f4 + jmp 0xffffffffffffdc25 + push ds + jae 0x86b + mov [0xbab1], ax + xor ax, 0xd376 + adc dx, [bx+0x7a] + jg 0x838 + inc ax + salc + xor word [bx], 0xb7cd + push si + mov si, 0x879 + xchg di, ax + in al, dx + ret 0xfc88 + xchg sp, ax + outsw + mov cx, 0x9fe0 + invalid + outsw + popfw + inc dx + push sp + xchg cx, ax + mov cx, 0xb740 + repne aas + adc ax, 0x7f6a + iretw + mov ah, 0x63 + sahf + jnp 0x876 + mov bp, 0xffbb + sbb al, 0x3d + jmp 0xffffffffffffac8f + arpl [bp+di+0x4d45], cx + push si + pusha + or ax, [di-0x14] + push si + sbb ax, 0xc0ae + invalid + dec ax + and al, [bx-0x3b] + push cx + aaa + xchg [bx+di+0x6b], sp + fcmove st0, st4 + jmp word 0x34ff:0x9395 + and bp, [bx+si] + adc al, bh + xor ax, 0x2ee2 + fadd qword [bx+si] + add [bp+di+0xd786], ax + cld + push bp + jg 0x88e + jmp 0xffffffffffffccf7 + fisttp qword [bx+si+0xfc5d] + in al, dx + and cx, [bp+0xf6fd] + adc al, 0xf3 + xor [bp+0x8], al + fstp qword [bx+si-0x6e] + ja 0x803 + add byte [bx+si+0x8a1f], 0xef + imul dx, [bx+0x106e], 0x6d + mov ch, 0x59 + sub si, [di] + in ax, 0xf4 + jg 0x8b3 + stc + mov [bp+di], ds + or word [si], 0x42dc + out dx, al + arpl [0x2f50], ax + fsubrp st5, st0 + jl 0x909 + loop 0x832 + mov sp, 0xb4a6 + mov si, 0x1534 + cmp [bx+si+0x74], bl + invalid + jno 0x8e0 + jmp word 0x9127:0x8a2b + push cx + pop sp + sbb [bx+0x5cc1], cx + retf 0xd633 + or ax, [bp+si+0x0] + das + movsw + cmc + cmpsb + add [si-0x7d], ch + adc [si-0x79], si + and [di-0x2d], bp + dec ax + retf + sbb [bx+di], dl + mov dh, 0x35 + rcl word [bx-0x1f], cl + or [si+0x60], dh + enter 0x211f, 0x78 + shl word [bx+di+0xe3c8], 1 + ja 0x900 + out 0x82, al + o32 loop 0x90a + invalid + cmp [0x921a], dl + rcl word [bx+si+0x55], cl + cmc + jbe 0x93a + leave + adc dx, [bp+di] + mov cl, 0xbb + push bx + and ax, [si-0x20] + or cl, bh + outsw + xor [bp+0xd0e8], dx + hlt + adc [di], bh + cwd + xlatb + cmc + sbb al, 0xc5 + inc ax + loop 0x8f9 + jbe 0x937 + dec di + and bp, bx + sbb al, [bx+si+0xb12] + mov [bx], ch + pop di + nop + xchg sp, ax + sti + invalid + arpl [si+0x77e1], sp + pop ds + fidiv dword [bx+di] + mov al, [0x71b] + mov ax, 0x9abd + jnp 0x8ff + pop ax + push cs + pop dx + sub ax, 0x3f5c + pop ss + fcmove st0, st3 + and ax, 0x4aa9 + a32 jno 0x8d7 + adc ch, ch + or si, [bx+di] + xor bl, [si-0x3] + wait + aaa + xlatb + inc ax + sub [bx+si], bh + jnz 0x8d3 + jmp word 0xf1be:0x2348 + invalid + movsb + or bx, [ss:bx+si+0x2d] + adc bp, bx + adc [bp+0xd235], cx + pop ds + xchg bp, ax + mov [bp+0x3f], ax + ja 0x957 + sub sp, dx + xor word [bx], 0xa7 + loop 0x936 + std + mov bh, [bx+di+0x9152] + mov ah, 0x46 + in al, dx + mov dl, 0x45 + xchg dx, ax + push 0xc5 + wait + pushfw + sti + in al, dx + jge 0x901 + jbe 0x9be + xchg dx, ax + inc di + xchg dx, ax + cmp ch, cl + loop 0x9d3 + dec cx + lodsw + pop bx + xchg [bx+0x9360], ah + dec ax + stosw + js 0x96e + mov cx, 0xa604 + fsubr qword [bx+0xceab] + adc si, [bx+di+0xd828] + pop ss + scasb + rcr byte [di+0x3a], 1 + sub [bx+di], ax + mov bp, 0x42cb + sar di, cl + and ah, ch + push sp + loope 0x9b4 + dec bp + xor dl, bl + out dx, al + mov [bx], si + jl 0x982 + invalid + fld qword [di-0x7c] + insw + wait + dec di + push di + adc bx, [bp+si-0x27] + salc + xor word [bx+di], 0x5c + dec byte [bp-0x3f] + or [bp+si], ax + xchg dx, ax + into + outsw + xor [bx+0x4b77], dx + xor [si+0x548d], ax + imul si, bx, 0xdfba + mov sp, 0xbe94 + mov cx, 0x367e + adc al, 0x13 + push ss + lock shl byte [bp+di], 0x56 + mov [bp+0x4c6c], ss + dec bx + sbb si, sp + mov bx, 0xc129 + or al, 0xaf + jno 0xa19 + das + dec si + popfw + xor [bx+di+0x88f6], sp + or [di], bp + wait + mov ax, [0x9891] + mov di, 0x5cbf + popa + add dl, [bx+si+0x5d02] + jl 0x9c8 + xlatb + push cs + iretw + std + int3 + stosw + shl word [bp+si-0x34], 1 + cmp dl, dh + jno 0xa01 + adc dl, [bp+si+0xac71] + jno 0x9bc + salc + push cx + int3 + jmp word 0xdd39:0x9c2e + jle 0x9e2 + cmp byte [bx+si], 0x67 + pop di + jle 0xa98 + in al, 0x2f + adc [bp+di], ax + idiv bp + push es + lea bp, [bp+si-0x6e] + inc bp + pop si + xor [di], sp + in al, 0x8c + out dx, al + sbb dh, [si+0x67] + into + sahf + shl word [bp+0x47], 0xf0 + movsw + inc bp + rol word [bx+di+0x2a6a], 1 + adc al, 0x1b + int3 + mov cl, 0x8a + lock repne cmp ax, bp + mov [si], al + fiadd word [si] + xchg cx, ax + arpl [bx], dx + jnz 0xa6c + push cs + adc cx, [bx+0x7a] + jp 0xa88 + aaa + push bx + mov [di-0x32], bh + or al, 0x23 + iretw + inc dx + psubusb mm7, mm4 + jcxz 0xaaf + das + das + xchg bx, ax + mov dl, 0x8e + test al, 0xcd + invalid + adc al, 0x5b + sbb ax, 0x660b + or [bx], al + repne shl al, 0xf5 + pop es + salc + xchg bx, ax + imul ax, [bp+di], 0x9ea2 + aam 0x59 + xchg cx, ax + dec cx + invalid + adc al, ah + jmp word 0xe423:0x4f72 + call 0xffffffffffff907e + sub ch, bl + jns 0xa40 + xor byte [bx+si+0xefc], 0x75 + out dx, ax + mov cx, 0xb0a2 + int1 + mov dx, 0x9439 + std + popa + fbstp [si] + test ax, 0x2e4b + movsb + in al, dx + mov cx, 0x6992 + in al, 0x8e + inc sp + mov dx, 0x610b + cmp ax, 0x85f7 + sbb al, 0x1b + insw + mov ch, 0x66 + sbb ax, [bp+si+0x3107] + cmp [bp+si+0xc8e8], bx + o32 jz 0xaca + btc [bx+di], di + pop ss + jl 0xb20 + jcxz 0xb2f + scasw + cmpsb + lahf + push ds + add al, 0x97 + pushfw + salc + aad 0x6 + popa + aam 0x72 + enter 0xfba7, 0x60 + out dx, ax + mov [bp+si+0x43], ax + inc bx + xor ax, 0x4a48 + pusha + add ah, bl + jnz 0xae4 + cwd + and ax, 0x52e6 + add al, 0xe7 + lahf + push ds + jz 0xb01 + push bx + or sp, [bp+di-0x16] + fbstp [bx] + xor word [si+0x7f36], 0x920d + pop dx + jb 0xb2a + mov ax, bx + lds ax, [bp-0x2f] + inc ax + clc + push word 0x87ab + div word [di+0x2d39] + cli + xchg bp, ax + jle 0xadd + dec bp + test [bx+0xb13c], sp + mov dh, [si+0x1e] + and dl, [0xbc86] + shr ch, 0x52 + push word 0x5836 + in ax, dx + stosb + popfw + cli + inc bx + jmp word 0x1549:0xa128 + adc bl, cl + fisub dword [bp+si] + pop di + sahf + std + jnp 0xafd + push word 0xdb7 + jl 0xbb1 + push di + daa + int3 + mov ch, 0xb4 + adc ax, 0x4747 + jz 0xb52 + mov dh, 0x9b + dec sp + jns 0xbcd + std + xor dh, al + push dx + mov bp, 0x4ff4 + adc dx, [di+0x2432] + dec ax + jg 0xbab + push ss + test [bp+si+0x3694], cx + nop + jmp word 0xb9f2:0xacf3 + sahf + pushfw + cmp di, [bx+di-0x7] + stosw + adc dh, 0x3e + sbb al, 0x4 + mov [0xf994], al + ret 0x72cb + cmpsb + pop ds + pop ss + sar word [di], 0x47 + imul di, [bx+si], 0x44 + mov si, 0x9922 + imul ax, si, 0x6f + clc + mov ch, 0x93 + pop dx + int 0x82 + xchg di, ax + mov bl, [bp+di-0x56] + stosb + call word 0xb4d:0xb446 + or byte [bx+0xa], 0x6d + mov bh, [bx+si-0x62] + or [si+0x4d30], cx + scasb + sbb bh, [bx] + jp 0xb5b + movsw + outsb + nop + sub cx, [bp+si] + inc bp + out dx, al + sub ax, [bp+si] + stc + pop di + adc al, 0xbf + repne mov ax, [0xf35] + pop di + aam 0x75 + arpl si, bp + fsubr dword [bp+di+0x1d] + mov sp, 0x6e72 + imul sp, ax, 0xc978 + or [bx+si], bp + pop es + lock and [bp+di+0x55], ch + test al, 0xca + cmpsw + xor al, 0xdb + dec si + lock mov cl, bl + pop bp + call word 0xe705:0xbccd + jo 0xc3b + dec sp + mov ch, 0x50 + xlatb + test [bx+si+0x487a], ax + in al, 0x66 + or ax, 0x61f4 + adc bl, dl + call 0xffffffffffffa133 + inc bp + mov cx, 0x9af2 + jle 0xbde + pop bx + or word [si], 0x5450 + pop dx + jcxz 0xbdf + fisubr word [bp+si] + popfw + out dx, ax + and [0x23bb], bh + xchg si, ax + or [bx+si], cl + push dx + jo 0xc82 + xor ch, [bp+si+0x4] + jb 0xc04 + inc bx + cmc + neg byte [bp-0x53] + pop dx + sbb al, 0x3f + lds di, [bx+di+0x4356] + test al, 0xaf + nop + mov al, 0xb5 + or byte [bx+si+0x71], 0x43 + xchg dx, ax + aam 0x63 + call word 0xed2e:0xc16a + aaa + out dx, al + adc ax, 0xa4b9 + xchg di, ax + test al, 0x67 + jz 0xc46 + movsb + imul si, [bp+0xc5a1], 0xfb + push bx + pop dx + jg 0xbda + or byte [bx+0x7649], 0x36 + lahf + jge 0xca9 + imul di, [bx+si], 0xa59b + dec dx + sub al, 0x28 + pop bp + and bx, [ds:bx+di+0xd08] + mov dh, cl + inc sp + sub [di+0x11], cx + pop sp + dec cx + push bp + salc + mov ah, 0x36 + jge 0xc35 + jnp 0xcb2 + pop dx + inc cx + inc bx + or ch, al + sub [bp+di], ch + o32 jb 0xcf9 + das + sub ax, 0x2927 + ret + invalid + xor dl, ch + invalid + inc bp + out dx, al + xchg bx, ax + int 0x3c + arpl [bx+di+0xdfe3], di + wait + fadd st0, st5 + lock invalid + xchg al, ch + add ax, 0xd371 + sahf + xor ax, 0x872a + invalid + xor ch, [bx+di-0x15] + invalid + push cs + xor dh, [bx] + arpl [si], cx + jl 0xc5a + dec si + fbld [si+0x49] + rep pop ax + pop di + add word [bx+0x6c2a], 0xca + push si + adc ax, 0xc6ae + cli + sbb ax, 0x404f + inc sp + cmpsw + int 0x66 + sbb [0x3621], si + invalid + sub bh, cl + call 0x8c3f + mov bp, 0x12c8 + push ds + stosw + jz 0xcf3 + rol ah, 1 + int1 + mov bl, 0x4b + push es + or al, 0xd5 + imul cx, [bp+si+0x7bd3], 0x1c18 + call 0x88ec + outsw + sbb di, bp + push bx + test al, 0x4a + fidivr word [bp+di+0x72e7] + aam 0xdb + mov [0x3ac4], ax + push ds + cli + xchg di, ax + ret + push dx + push di + push ss + dec si + adc al, ch + wait + cwd + out dx, al + test [bp+di+0x8cac], cx + mov ax, bx + fcom dword [bx+si-0x25] + stosb + lahf + a32 mov bx, 0x1d22 + jmp 0xd06 + rcl byte [bx+di+0xc686], 1 + test ax, 0xc9cc + and dh, [bx+0xe867] + lahf + adc bl, cl + mov di, 0xaa58 + test [si-0x4], bh + cmp sp, bx + xchg [bp+di-0x6a], dx + push ds + mov cr1, [di+0x1b] + push ss + cli + xor cx, [bx+si+0xca8e] + pop sp + fdiv qword [bp+si-0x1e] + imul bx, bx, 0x6844 + xchg di, ax + xor [di], bl + retf + ret 0xd37 + das + inc ax + xor word [0xcb00], 0x1db6 + mov cl, 0x2c + mov [bp-0x6f], di + leave + mov [bp+di], bh + imul ax, [0x630a], 0x894b + add ax, [bp+0x65] + xchg di, ax + sub di, dx + inc si + repne or bp, [bx+si-0x58] + loope 0xcfb + sub ax, 0x573e + lahf + dec bx + lea dx, [bx] + in al, 0x80 + jae 0xd7d + xchg di, ax + sbb al, 0x22 + sbb byte [bx+0x1637], 0xc6 + xchg si, ax + push dx + jno 0xda6 + pop es + dec sp + ret 0xc7e4 + push ss + fbld [bp+di] + mov di, 0x479b + lodsw + adc dl, dh + sahf + sbb ch, [bx+si+0xe4c7] + mov dh, 0x39 + fmul qword [bx+di+0xc8c2] + adc al, 0x7b + xchg di, ax + int1 + mov bx, [si] + xor di, bx + enter 0x5f41, 0x9d + xor ax, 0xd870 + mov ch, 0x78 + mov sp, 0x7c3b + stosb + jb 0xdf5 + scasw + and byte [bp+0x2fdc], 0xd3 + jz 0xdec + hlt + std + xor al, 0x1d + inc si + or ax, 0x5706 + adc ax, [si+0x60f1] + out 0xfe, al + test byte [bx+si-0x6c], 0x2f + arpl [bp+0x37], bp + or al, 0xa8 + xor [bp+si], ah + xchg si, ax + xchg cx, ax + add [bp+si+0x8], al + jl 0xdf6 + ficom dword [0x2180] + mov si, 0xfd24 + test si, si + sub al, 0x33 + int1 + jbe 0xe3c + push cs + xor al, 0x89 + mov bp, 0x9942 + jmp word 0xe375:0x5124 + invalid + retf + inc dx + scasb + or byte [bx+di-0x5e], 0x10 + fimul dword [bx+0x76] + imul bp, [di+0xa334], 0x8532 + rdtsc + adc ax, [gs:di] + push 0x75 + xchg dx, ax + mov bh, 0x9f + mov ax, 0x540d + jae 0xde4 + xor ax, 0x4f52 + adc al, 0xd + rol byte [di+0x556b], 0x95 + lds bx, [bx] + jae 0xea7 + xor [bp+0x58], bx + or bl, [bx+di] + and bx, [bp+si-0x6] + test [bx+0xb0c5], dh + sub cl, [bp+di+0x23] + mov sp, 0x9561 + or al, 0xe4 + invalid + mov al, [0x47be] + movsw + dec bp + and di, [di+0x71] + xlatb + lock jbe 0xec9 + mov ch, 0xa9 + cmp [bp+si+0x52], sp + xor al, 0x22 + pop es + sub dh, 0x45 + sub ax, 0xd79d + xor al, 0xb2 + mov bh, 0x55 + mov cx, 0xc2c1 + xor ch, [0xb58] + adc cx, 0x8e + lodsb + add [bx], ch + sub ax, 0x5fde + dec di + mov [bx+si-0x4f], bp + sbb cl, [bp-0x20] + stosw + out 0xbc, ax + pop bp + and ax, 0x8d00 + or byte [bx-0x70], 0x53 + xor al, 0x20 + jno 0xe8c + sbb word [bp+di+0xe924], 0x23c + jle 0xeb2 + test ax, 0xb2f8 + or bx, sp + fiadd word [bp+di-0x12] + sub [bp+di+0x86ca], dx + sbb [bp+si], ch + ficomp dword [bx+di+0x59e8] + push dx + cmp [si], bp + and sp, 0xdc + pop si + not word [bp+si+0x49] + lodsb + in al, 0x43 + push ds + mov [0x276e], ax + mov ah, bh + pop dx + call word 0xefb5:0xd5e5 + repne mov [0x7a9a], ax + and [bp+si], ax + cli + mov sp, gs + mov [0x76c2], ax + out 0x86, al + nop + cmp dh, [di] + mov [gs:0x2711], al + add dh, dl + cmpsw + ficomp dword [bx+di+0xbcdf] + xchg bx, ax + arpl [bx+di+0xfa51], si + popfw + push ss + push bp + adc [di+0x8571], ah + inc bx + nop + add bp, bx + maskmovq mm2, [bx+si-0x17] + js 0xee5 + mov dl, bh + push di + push di + shr ax, cl + or ax, 0x312c + call 0xffffffffffffa21b + dec di + sbb al, 0x80 + and si, [bx+di] + test al, 0x14 + pusha + ret + inc cx + adc [bp+0x3b], sp + invalid + cmp bx, [bx+di-0x34] + rol byte [bp+0x9d74], cl + jnp 0xf55 + sbb ax, bx + cwd + push bx + invalid + ja 0xf88 + dec si + invalid + adc ax, 0x79c6 + std + xor ax, 0x879b + lodsw + pop bx + stc + sbb dl, [si+0xa0df] + xchg si, ax + xchg di, ax + inc si + jcxz 0xed6 + mov [bp+si+0x22], cr0 + xchg di, ax + imul si, di, 0x3f5f + mov ch, 0xa2 + push ax + cmp [si], sp + test ax, 0x1e62 + or si, di + loope 0xf83 + outsw + call 0xffffffffffffa13d + int1 + xchg si, ax + invalid + sti + mov cx, 0x610f + mov cx, 0x9f2b + and bh, [bp+di+0x9c08] + hlt + dec bx + imul word [bp+di-0x19] + test al, 0x67 + shl word [bp+si], 0x17 + in ax, 0xfd + wait + cmp ax, 0xf37f + push ss + or [bx+di], dl + sub [bx+si-0x31], ch + fmul dword [di-0x7c] + sub al, [bx+di] + stosb + shr word [bx+si+0x4de7], 0x99 + pop dx + or ax, 0xbf41 + dec sp + out 0x35, al + cbw + add [bx-0xa], ch + sub al, 0x99 + jle 0xf79 + push si + cmpsb + inc cx + sub word [fs:si+0x60], 0x8968 + insb + int1 + jle 0xfc3 + jbe 0xf47 + cmp al, 0xa4 + ror byte [bp+0x5502], 0x0 + dec bp + or [bp+0xe7f7], ch + aaa + out 0x11, al + or ah, [bx+0x927a] + in ax, 0x7e + fxch4 st1 + pop cx + add al, 0x60 + inc bp + pusha + xor bl, [bp+di+0x87ce] + rep xor ax, 0x8702 + jcxz 0xf42 + sbb byte [si], 0x9e + sub si, cx + invalid + dec dx + outsb + and al, 0x50 + popfw + pop bp + int 0x92 + rcl word [di+0xc430], 1 + neg word [bx+di] + iretw + mov [0xd961], al + adc al, 0x98 + push ss + stosw + mov al, [0x4d13] + inc sp + out 0x29, al + xchg bx, ax + sub bl, [bx+si] + idiv si + sub ax, 0x971c + ror byte [bx+0x3652], 1 + sbb cx, sp + retf 0x3ab0 + xor al, 0x97 + adc [bx+si], di + jle 0xf8d + adc [bp+di+0x2e1d], di + lodsb + adc dl, cl + sar word [bp+di-0x57], cl + fist dword [si-0x9] + popa + ja 0xfb0 + scasw + push ax + mov sp, 0x5827 + cmovle cx, [bx-0x7] + invalid + jnp 0x1027 + xchg sp, ax + push bx + push di + jnz 0x105f + mov [0x4468], ax + wait + xchg dx, ax + sub al, 0x57 + and word [si+0x56b6], 0x296 + push cs + shr [bp+si-0x75], cl + jno 0xfc1 + clc + aas + xchg cx, ax + jmp 0xffffffffffffe25f + inc byte [bx+di-0x39] + fadd dword [bx+si+0xc3c] + rcr byte [bx+si+0x4d], 1 + jp 0x1051 + outsw + test al, 0x78 + mov bh, 0xd3 + out 0x69, ax + mov [0x1122], al + o32 cmp dl, ch + neg word [si+0x31] + popa + mov cl, 0xcf + dec di + mov [bx+si], ds + mov [0xce77], al + mov [bp+0x13], sp + cmp byte [bx+si+0x8b3], 0x9b + sbb [bx+di], si + shr sp, cl + js 0x1035 + jmp 0xc2f + and [bx+si], ah + aas + cmpsw + jge 0x1090 + mov [bx+0xaac3], cr1 + inc bp + test [fs:bx+si+0x57], bp + push ax + in al, 0x10 + int3 + loope 0x1051 + jns 0x1054 + call 0x8508 + hlt + lea si, [si+0xd17c] + cmp al, 0x2 + mov si, 0xdbe8 + fisubr word [0x83c1] + wait + in ax, 0x65 + sbb ax, 0xaf60 + mov cl, 0xe0 + dec dx + or [bx+di-0x6d], di + daa + add al, 0x7c + into + adc sp, 0x1715 + adc [di], al + jnz 0x1089 + sbb al, 0x4d + dec di + or ah, [bp+si] + push word 0x3002 + pop es + dec sp + dec dx + o32 cld + sbb [fs:0x8277], bl + pop bp + push bp + retf 0xb295 + push si + lfs dx, [di+0x1c59] + or ch, bl + mov [bx+si+0x11d4], cl + test [bp+si], cx + invalid + iretw + call word 0x5a3:0xafeb + inc ax + and bx, 0x974a + call word 0x9856:0xf431 + stosb + lock stosw + push si + or ax, 0xa868 + imul dx, [bx-0x27], 0x4374 + cmp bl, ah + dec dx + mov dh, [0x5d17] + jle 0x10a3 + pop bx + adc ax, 0xb11f + loope 0x108c + out dx, ax + xchg sp, ax + dec cx + cmpsw + xchg si, ax + sub di, bp + imul byte [bx+0x85bb] + or cl, [bx+di] + rcl bx, 1 + mov si, 0xab26 + jle 0x113e + loopnz 0x10eb + jae 0x1180 + clc + out 0x76, al + pop ax + loop 0x1137 + mov [0xfdf], al + dec bp + add al, 0x13 + dec si + mov ch, 0xde + retf 0x2df + in ax, dx + loopnz 0x10ad + and dl, [di+0x28] + invalid + cmp [si], dl + test [bp+di+0x612c], cx + mul byte [di+0x3bad] + adc byte [bp+si], 0xbe + dec bx + xchg bp, ax + push ax + int1 + lodsw + jo 0x110b + pop si + push dx + mov al, ah + iretw + push bp + add ax, 0xbe2a + adc al, 0x30 + xchg cx, ax + cmp si, [bx+di+0x8] + ret 0x6b83 + mov dh, 0xbe + insb + arpl [bp+si], cx + and [bx], dx + clc + loope 0x10e3 + rep cwd + pop ds + jnp 0x110f + sbb ax, 0xc8f1 + call word 0x9729:0x98b7 + mov cl, 0x1a + call 0xffffffffffffe04c + push cx + mov [0xf280], ax + test [bx+si+0x90fb], bh + xchg di, ax + push di + js 0x117e + repne insb + rcpps xmm4, xmm7 + fstp qword [di] + inc di + invalid + add dx, [ecx+0x8a9204f2] + das + lds dx, [di+0x18] + cmp al, 0xce + popfw + rcr byte [di-0x24], 1 + jns 0x113f + adc sp, [di] + call 0xffffffffffffb0a7 + inc sp + mov sp, 0x7652 + add byte [bx+di+0xc9fd], 0xce + invalid + push cs + mov cx, 0x4d00 + mov dx, 0xf583 + sbb ax, 0xb376 + xor ax, [bp+si+0x5d] + push cs + pop ss + repne rcl word [bx+si], 0x25 + invalid + jb 0x11db + test al, 0xb6 + lodsw + loope 0x11f6 + into + jcxz 0x11fb + xlatb + push sp + rol word [bx], 0x91 + mov cl, [bx+0x7c17] + and bh, [si-0x5d] + xor ax, 0xb6de + dec dx + mov di, 0x12f1 + cld + inc cx + retf + or al, 0xe5 + and al, 0xe3 + std + mov [si+0xb677], cr0 + wait + lodsb + jmp 0xffffffffffffdd90 + xchg si, ax + test al, 0xf6 + and al, 0xfe + out dx, ax + dec si + pushfw + xchg bp, ax + xchg si, ax + xor cl, [bp+di] + adc word [bp+si], 0x1d + push 0x1b + out dx, ax + xor ax, 0x7ae7 + xlatb + jmp word 0x662a:0x8c3 + salc + pop dx + jb 0x11da + dec bx + or bl, bh + lahf + call 0xfffffffffffffe65 + jz 0x128a + or [bx+si+0x1e], dx + in ax, dx + jmp 0x1252 + push word 0x27c4 + cld + inc sp + sahf + pusha + int 0x97 + aad 0x64 + int1 + add ax, 0xf27a + mov cx, 0x482d + sbb sp, di + push ds + cmp ax, bp + jmp 0x11e8 + mov al, [0xd4d5] + wait + mov [di], bx + shl cl, 0x15 + mov dh, 0x2a + mov cl, 0x25 + loop 0x127f + push cs + and word [bx+di-0x76], 0x8636 + lahf + mov cx, 0x8984 + inc bx + test ax, 0xc7bb + xor [bx-0x3d], dl + sbb ax, [bx+si] + xchg [bp+si], bl + mov [0x392e], al + or al, 0xab + hlt + insb + inc bx + or [si+0x58], bl + sahf + out dx, al + mov [0x324f], ax + sub ax, 0x4fe5 + pop dx + mov al, [0x316e] + clc + stosw + test [bp+si], bh + shr word [bx], 1 + fadd st1, st0 + inc di + fidivr word [di-0x2d] + pop sp + mov cx, ss + out dx, ax + invalid + add al, 0xb6 + jo 0x1276 + shr dword [bx+di], 1 + invalid + push bp + retf 0x8a07 + neg byte [bp+0x1678] + xor [0xd62e], bp + ror word [bx+0x12ae], 1 + pop ss + jge 0x12fc + cmp al, 0xd6 + shr byte [bx+di-0x76], 0xab + jae 0x1317 + adc ax, si + mov bl, 0x2a + mov al, [0xe9cf] + out dx, ax + add [si+0x6c], si + sbb ah, [bx-0x72] + cmpsb + mov ax, 0x9209 + fld qword [bp+di] + test [bx+di+0x4], ch + shl [bp+di+0x1174], cl + mov cl, 0xe7 + shl byte [si+0x58], 1 + invalid + mov dh, 0x99 + push si + lodsw + insb + rep int 0xc5 + imul si, [bp+0xbaf4], 0xd418 + test ax, 0x3e6a + fsub qword [bx+si+0xa367] + cmc + adc al, 0xda + leave + sbb [bp+si-0x64], sp + cmp ax, 0x46d1 + jnp 0x132a + pop ss + xchg bx, ax + std + out dx, al + in al, 0x2d + sub [si+0x1ba9], cx + in ax, dx + push di + xor dh, ah + retf 0x52a7 + repne daa + clc + jp 0x1372 + pop cx + mov ch, 0x16 + pop di + movsw + inc sp + mov al, [0x6f88] + shld [ebp+0x1fd61f], cx, cl + stc + push ss + dec ax + ret + lds di, [bx+0xbc93] + mov al, [0xdd9a] + push bp + mov al, [0x6932] + hlt + o32 jl 0x131b + int1 + dec dx + jg 0x134d + pop bx + pop ss + cmp al, 0x16 + and cx, cx + push sp + into + sti + mov ax, [0x2e6d] + pop di + cmp bl, [cs:bp+di] + fprem1 + inc bp + a32 outsw + pusha + inc cx + fidivr word [bx+0xfbfd] + cmpsw + sbb sp, ax + pop es + in ax, 0x3a + push ds + imul sp, [di+0xaf9a], 0xb22d + js 0x12ed + mov ah, 0xf9 + sbb byte [gs:di+0xf2a0], 0x52 + xchg sp, ax + jmp 0x1314 + pop dx + loopnz 0x1307 + or [di], ch + int1 + xor [bx], bx + leave + sbb ax, bp + outsb + push ss + invalid + mov bx, 0x3fdb + pop dx + shl word [bp+di], 1 + jmp 0x1319 + cmpsw + jmp word 0xf3d0:0x94f7 + clc + imul ax, [si], 0x874e + sbb [es:bx+di+0x6f], si + pop ax + push ds + mov fs, [bx+si+0xd55c] + salc + iretw + arpl [bp+si+0x4d], sp + mov dl, dh + scasw + xlatb + sub bl, [bx+si+0x2985] + aad 0xcd + mov ax, [0x5194] + adc bx, [bp+si+0x3e65] + xor ax, 0xef5f + pop es + into + push ax + mov ss, bp + insb + and byte [si-0x7b], 0xac + lahf + push sp + mov sp, 0xf68 + xchg bp, ax + in ax, 0xa0 + adc bh, dh + invalid + lodsw + repne jno 0x139c + jb 0x13ca + xlatb + or [bp+di], sp + popa + jp 0x1370 + call word far [si+0x96ca] + jg 0x140e + call word 0xba14:0xebe + out 0xe1, al + mov dh, cl + add dl, bl + shl word [bp+si], cl + cmp ah, bh + adc ax, 0xb335 + call 0xffffffffffffe44e + jmp 0x4a13 + fst dword [di+0xeb37] + dec ax + adc ax, 0x1614 + mov word [0xe96e], 0x9b74 + mov al, [0x1053] + fcom st0, st7 + mov bp, 0xffe0 + in al, dx + test ax, 0xc923 + jb 0x13f1 + invalid + cwd + scasw + push 0xa3 + movsw + jno 0x13fa + int1 + popfw + inc bp + ret 0x7d8 + inc dx + mov eax, 0x21693b54 + ret + pop bx + out dx, al + dec cx + pop sp + and ax, 0xf28a + push cs + xchg cx, ax + dec sp + xchg si, ax + stc + jle 0x143a + jmp 0x13c2 + test [di], bp + aam 0x4c + das + int 0xbe + or ah, [bx+di+0x6] + test al, 0xd9 + mov ax, 0x4195 + and ah, cl + xchg dx, ax + cmpsw + inc sp + push si + sbb [si], bp + mov ax, 0xd9c9 + sbb byte [di+0x5743], 0xa5 + mov cx, [bx+0x6389] + sub al, 0x58 + test ax, 0xaebd + xlatb + and bh, [bx+si-0x2c] + sar word [bp+si+0x2cec], 0x33 + dec di + fbstp [bx+si] + loope 0x1401 + inc bp + test al, 0x31 + pushfw + dec sp + inc dx + add [si+0xf433], sp + mov dx, 0xfdff + jbe 0x13fc + cmp di, [bx+di+0x3717] + test [di-0x6d], dl + enter 0xd9ab, 0xfc + rcl byte [di+0x3f], cl + adc [bp+si+0xddb3], ax + dec di + sub word [si], 0x3a + mov al, [0x70d2] + mov bx, 0x21c6 + inc dx + into + jnz 0x14d0 + pop sp + or [bx+di-0x61], ch + sub bh, 0xe4 + out 0xe3, al + mov ah, ah + cmp cl, bl + xchg bp, ax + js 0x14e2 + add ax, 0xbe38 + jge 0x1508 + sahf + xchg bx, ax + loope 0x14dd + popfw + mov al, [0x6e05] + sub [bx+0x3d], di + cmp di, [si] + cmp bp, [bx+si] + sub al, 0xb8 + inc sp + wait + xchg bx, ax + and [bx+di], si + mov cx, 0xbfa3 + mov cx, 0xb426 + push cs + les ax, [bp+si-0x1f] + jle 0x151b + movsb + lock sbb al, 0x1a + jl 0x14ad + sub al, 0x21 + test [bp+di], dl + add ax, si + insw + inc bp + cmc + xor ax, 0xaf66 + cmc + pop ax + enter 0xa7, 0xa9 + or word [bp+si], 0xba + inc si + mov bx, 0xf0ca + jg 0x14cf + jmp word 0x3c69:0x4d5e + das + rol byte [bx-0xf], cl + in ax, 0x77 + out dx, al + and al, 0xf7 + stosw + and [bx+si+0xbaac], ah + push fs + push si + jnz 0x14bc + jz 0x1540 + into + inc si + mov al, [0x8476] + xchg di, ax + stc + inc di + ret 0x77ca + adc ax, 0x329d + jle 0x1503 + mov ch, 0xad + repne dec si + fisub word [bx+di] + mov bh, 0x95 + scasw + mov bp, 0x74fa + sub sp, sp + shl word [cs:bx+si+0x7d], 0xb5 + bound dx, [bp+si] + outsw + fsubr st0, st5 + fcom qword [bx+di-0x57] + cbw + bound dx, [bp+si+0x7f] + push ax + dec di + cwd + pop es + inc byte [si] + movsb + or ah, ch + pop ds + lea sp, [bp+si] + mov si, 0x717f + cli + and dh, al + mov dh, 0x1d + jb 0x14ca + sub ax, 0x1f1d + jb 0x1532 + out dx, al + wait + adc al, [bx+di+0x9d2e] + adc ax, 0x867e + dec ax + pop cx + dec bp + retf 0xd5f8 + lock mov ah, al + lahf + mov [0xf5ea], al + dec bx + cmp [bx+si+0xe645], bp + adc dx, bx + cmp di, [bx+di] + in al, 0x34 + add [bx+0x1b58], bx + sub [si-0x15], bx + sub [bx+di], dx + mov ax, 0xcca9 + sub byte [bp+0x5abb], 0x77 + add word [bx+si+0x36], 0x2251 + mov bh, 0x1c + or bh, [bp+si+0x16] + aad 0x60 + or al, 0x84 + cmp ax, 0x82ad + cmpsw + pushfw + xchg [bp+si+0x2], cx + add [bx+di+0x6ed7], ch + mov al, [0x80d] + xchg cx, ax + retf + push dx + pop di + adc ax, 0x2d27 + jcxz 0x1620 + pop sp + pop sp + push bx + arpl [si], bp + invalid + test ax, 0xb849 + mov [0xa984], al + test ax, 0xd2a8 + adc dx, bp + mov bh, [0xc230] + xchg [bp+si], dh + o32 mov ah, 0xc3 + wait + add [bp+di-0x4], cl + inc bx + repne iretw + xor dh, [bx+si] + outsb + mov [bp+di], gs + leave + add dx, bx + inc cx + push dx + ret + sub al, 0x73 + jz 0x15c4 + jz 0x15e1 + imul word [bx+di+0x3607] + inc dx + invalid + pop di + std + adc ax, 0x70cb + mov [0xdca9], ax + aas + and ah, 0xe2 + stosw + dec di + aam 0x42 + jg 0x15dc + movsb + test di, sp + inc sp + adc bh, bl + a32 jmp 0x2879 + sahf + aas + int3 + jp 0x1619 + in ax, 0xad + rcr word [bx+0xd60a], 1 + sar byte [si-0x39], 0xdc + cmc + adc dx, bp + mov al, dl + sub bh, [di+0xcb04] + xchg [bp+di+0x7919], dl + push es + adc al, 0xe4 + pop es + mov bl, 0x1e + rcr word [bx+si-0x5b], 0x13 + push es + and ax, 0xfe65 + jg 0x161c + push di + xchg dx, ax + and ax, 0x9b38 + cwd + and ax, ax + adc ax, 0x1eca + sbb [bx+di], al + das + cmpsb + call word 0xae70:0x22fd + or [bp+0x77d6], bh + push 0xda + xor si, [di-0x33] + jno 0x1612 + hlt + clc + push ss + adc ah, 0xaf + popa + dec di + mov [0xdcaf], al + shr word [bp-0x60], 1 + pop cx + mov bx, 0x56ea + inc ax + cmp bx, bp + fnstenv [bp+si+0x8544] + jno 0x15f4 + sbb ax, 0x9a29 + jp 0x162c + lea bp, [bp+si] + popfw + jno 0x1626 + in al, 0x9e + push si + a32 hlt + daa + mov [0xffe7], al + pop si + nop + xchg bx, ax + enter 0x1efc, 0xff + aam 0xba + loopnz 0x161f + jmp 0xffffffffffffed29 + push word 0x8548 + in al, dx + a32 pop bp + cmp ah, [bx+0x30] + out 0xe6, al + sub ax, [0x7dd6] + pop ds + dec cx + clc + adc byte [ds:si-0x1e], 0xe2 + rep fstp qword [ds:bx] + push cx + xchg si, ax + test al, 0x96 + stc + jz 0x1661 + mov si, 0xb604 + iretw + dec cx + or ax, 0x445e + test ax, 0x6a6e + ja 0x1695 + scasb + aas + xchg di, ax + invalid + invalid + lock das + cmp ax, 0x32a8 + push si + into + xor [bp+si], dl + xchg bp, ax + xor al, 0x70 + mul byte [bp+di] + shl word [di+0x13], 0x62 + scasb + lds si, [bx-0x48] + outsw + xchg dx, ax + push bx + out 0xd9, al + o32 xor bl, [bp+di] + int1 + imul bp, [bp+0x8118], 0x641 + adc word [si], 0x5f + mov bx, 0x152b + invalid + ret 0x343e + or al, 0xcf + lahf + popa + retf 0x474 + jo 0x168a + cmp dl, [di+0x5eb5] + wait + inc bx + int1 + invalid + mov dh, 0x82 + mov dh, [bx+di+0x1018] + cmp [di+0x2490], bh + fidiv dword [bx+0x5] + mov al, [0x37a2] + dec si + pop es + dec sp + enter 0x8c8d, 0x2d + xchg [di+0x9e2c], bp + test word [bp+0x5e], 0x92d7 + lahf + cmpsw + xor di, [si-0x61] + xor ax, 0xefb4 + xchg [bx-0x74], ah + pop sp + fisub dword [bx+si+0x69a0] + jle 0x178f + adc [di+0x56], ch + jno 0x177c + mov sp, 0xd095 + dec ax + loope 0x16fd + mov di, 0x805a + mov dl, ah + mov cx, 0x8344 + mov ax, [0xa1ba] + and al, 0x30 + jns 0x1738 + add ax, 0x464 + jbe 0x1787 + ret 0xf750 + mov ax, [di+0x4ef8] + xor sp, [bp+si] + aaa + sbb dx, [bp+si+0x6164] + mov [0x5e62], ax + retf 0x78ab + push si + stosb + or [bx], bp + or ch, [si-0xa] + a32 std + jae 0x172e + test word [bx-0x76], 0x8686 + adc al, 0x4d + sti + pop dx + fs lodsb + cmc + add [di], cx + dec di + outsw + lodsw + or sp, si + adc cx, ax + mov bl, ch + jmp word 0x3bf3:0x5c6b + daa + loop 0x1765 + int1 + or ax, 0x6a7b + cmp si, [bp+si+0x5d] + inc cx + call 0x6996 + in ax, 0x61 + int3 + sbb dx, [0xa49d] + fcom dword [bp+si] + rcr word [di+0x55ab], cl + push sp + in al, 0xf7 + int 0x9 + pop dx + out 0x9b, al + adc [bp+si], ax + out dx, al + ficom word [di+0x36] + imul bp + popa + mov si, 0x9112 + sub ax, [bp+si+0x9] + ret 0x9e86 + or cx, [bx+di] + jno 0x1819 + push es + outsb + jg 0x17f2 + cmpsw + mov sp, 0xb93 + mov ah, 0x3f + cmpsw + xchg sp, ax + movsb + mov sp, 0x464 + ret + invalid + inc bx + pushfw + or al, 0x20 + mov si, 0x97b2 + mov [bp+si], gs + imul dx, sp, 0xa76e + or al, 0xbb + js 0x17b6 + jz 0x17eb + dec sp + jmp word far [bx+di-0xa] + mov ax, [0x7eef] + cmp [bx+di+0x7676], sp + lahf + popfw + mov [0xf5c8], ax + xor ax, 0xa85b + jmp 0xffffffffffffb895 + test ax, 0x7b3e + mov bp, 0xa3c8 + ja 0x1827 + test [di+0x2579], cl + stosw + test [bp+di], cx + add bp, [di+0x9129] + jmp 0x1795 + cwd + nop + imul sp, [di], 0x8c + cli + pop sp + xchg bx, ax + invalid + insb + xor ch, [bx] + retf 0xd0d4 + nop + mov si, 0xe28d + insw + test [bp+0xa663], bx + stosw + repne pop fs + pop ss + mov cl, 0x0 + adc al, 0x6c + retf + aas + push cs + inc ax + inc bx + push 0xe6 + dec bp + jb 0x183d + jmp 0x180e + sar al, 0xef + loopnz 0x17e6 + or ax, bp + int3 + dec byte [bp+di-0x2d] + stosb + wait + sub [bx+0x922], dl + scasb + lock xor ax, 0x65e6 + cmpsw + add al, 0x6d + pop ax + xchg bp, ax + pushfw + pop bp + and ax, 0x81f2 + ret + or ax, 0xf4c1 + jbe 0x18ba + inc dx + or [di], cl + dec si + dec di + fldcw word [bx+si+0x3cae] + push word 0xaf5c + add [di], dh + jmp 0x18f0 + jbe 0x18ef + adc [di+0x7402], bl + dec dx + cmpxchg dh, bl + out 0x4d, ax + mov bx, [bp+si+0x12fe] + pop sp + or dh, [bp+di+0x6b] + sahf + xlatb + scasb + hlt + mov cx, 0x4b74 + jge 0x18dc + out dx, al + jns 0x18eb + cmc + arpl [bx], di + sbb ax, 0xec9 + and ax, 0x9120 + mov di, 0x76c7 + mov cl, 0x43 + iretw + pusha + aad 0xe6 + pushfw + std + pop sp + xor al, 0x91 + push bx + shr [bx+si], cl + mov [0xbb75], ax + pop bx + rep jnz 0x18a7 + or al, [bx+0x33] + out 0x27, ax + rol ax, cl + test [bp+di+0x3f], dl + push di + and ax, 0xbabb + mov dl, 0x32 + push si + out 0x5e, ax + jo 0x1932 + outsw + stc + push si + loop 0x18e2 + sub [bp+si+0x3d02], ax + xlatb + in ax, dx + and [bx+si+0x1eb9], di + or byte [bx-0x6e], 0x2f + jp 0x18f2 + bound si, [di+0x28] + rol byte [bp+si+0xe536], 0x53 + xchg sp, ax + dec di + jae 0x18e3 + xchg bx, ax + pop di + out 0x95, ax + aam 0x90 + ret 0x476e + iretw + sar word [bp+si+0x9f23], cl + dec ax + xchg [bp+si+0xb884], ax + ret 0xc8a2 + pop di + pop di + out dx, al + jno 0x18b4 + and al, 0xa1 + xchg dx, ax + aad 0x93 + wait + jz 0x197a + fild dword [bx+di+0x9371] + add [si], cl + sub cx, [bx+si+0xf270] + jns 0x1999 + mov di, cx + invalid + mov [bx+si+0x975], cs + int3 + add ax, 0xb9fb + jp 0x18b5 + iretw + sbb ax, 0x45df + xchg bx, ax + dec bp + in al, 0xb7 + clc + push ax + xor cx, [si] + and ax, 0x73a + adc [si], al + rcl word [bp+si+0xaba6], cl + into + lodsb + pop si + jnp 0x19a4 + push word 0x2ab8 + inc di + adc byte [bx+si], 0xb1 + mov al, 0x43 + rcr word [bx+si+0x54], 0x68 + and ax, [bp+di] + xor al, 0x6d + out dx, al + mov sp, 0x6e32 + ret + add [bp+di], si + outsw + push cs + mov si, 0xf9c7 + inc dx + dec sp + xor ax, 0x960 + xor al, 0xd6 + push cs + pop sp + add [si], cx + retf + cmp ax, 0x191a + mov cl, 0x32 + dec si + sbb dl, [bx+si+0xa12c] + aaa + inc bp + cbw + mov cx, 0x677a + cmp [si], cl + cmp [bx+si+0xb9a5], dh + cld + popa + sbb [bp+0x7468], bx + and sp, [bp+di+0x423b] + dec si + jz 0x19f0 + loop 0x195c + cmp bh, [di] + and [di+0xf], bx + dec ax + add cl, [si-0x57] + jcxz 0x19b9 + mov cl, cl + mov [si+0x351c], cx + scasb + jns 0x1981 + in ax, dx + xor [bp+di+0x2f], ch + invalid + push dx + test [bp+0x80d2], bh + dec si + mov [0xaa6f], al + add [fs:si], dl + and [bp+si+0xe071], ch + arpl [bp+0x57], cx + aas + mov al, 0xd4 + sub di, ax + retf 0x3e58 + cmp [bp-0x1e], dx + sti + outsb + xchg sp, ax + loope 0x1a4d + jp 0x1a3b + les bx, [si] + invalid + invalid + retf 0xbf6c + mov dh, al + mov bx, [di+0x636f] + std + xor [di+0x32], bl + stc + mov [bp+si-0x6d], ch + xchg cx, ax + sti + sar word [bx+di+0x40], cl + mov bx, 0x9f97 + jle 0x1a11 + a32 sti + add [0xda5d], al + ret 0x72d1 + int3 + push dx + push di + push si + push si + jmp word near [si+0x6832] + or dl, [bx+di] + js 0x1a27 + ret + ror byte [bx-0x38], 1 + shl word [bp+di], cl + call word far [si+0xf751] + or [si], cl + mov si, 0x3c80 + popfw + enter 0x79f9, 0x92 + dec cx + dec si + jo 0x1a4f + lodsb + or al, 0xca + jmp word 0x9c7d:0x7faa + bound ax, [si+0x434e] + inc cx + neg word [si-0x15] + add al, 0xab + mov sp, 0x5c82 + inc di + inc ax + insw + or [si+0x5cd0], al + call word 0x9107:0x62d4 + pop si + nop + pop sp + cmp [bp+0x6095], ah + jmp word 0x91c1:0xdac7 + pop cx + pushfw + o32 cmc + call 0x6f4b + out 0x8c, al + inc si + dec cx + mov bl, 0xc9 + daa + jo 0x1ac9 + dec bx + fcomi st0, st5 + repne outsb + invalid + or bh, [bx+si+0x39] + sub ah, [bx+si] + mov dl, 0xb3 + sub al, 0x98 + push dx + mov [bx+si+0xe], ah + shl [bx+0x866c], cl + mov ch, 0x6e + inc bp + js 0x1aab + movsb + xchg sp, ax + cmp al, 0x46 + mov ax, [0xd8a4] + push word 0x585 + fdivp st3, st0 + mov ax, 0x6d4f + mov al, 0xa + jo 0x1b05 + xor bx, sp + pop ds + js 0x1a86 + nop + pushfw + jnz 0x1ae9 + push si + retf 0x694b + rcl byte [bp+si-0x56], cl + out dx, al + scasw + lds di, [bx+0xe] + sahf + imul dx, [bx+si+0xe1d1], 0x6dde + out dx, al + sbb ax, cx + mov si, 0x7f18 + cmp [bp+di-0x60], ax + adc cl, [bx+0x984c] + dec si + wait + sub [bx+si-0x48], ax + test al, 0x3a + add [bp+di+0x7779], si + rcr byte [bx+si+0x6e9], cl + repne jcxz 0x1ac4 + mov dx, 0x3c22 + salc + xor [bp+si-0x66], cx + adc al, 0x17 + jz 0x1b23 + mov bx, 0x989d + jns 0x1aa5 + fmul dword [bx] + mov [bp+di-0x35], dx + jle 0x1ac1 + lodsw + pop ss + iretw + mov [bp+si+0x82cd], ch + adc ax, 0xb78 + cmp bh, [0x8483] + or ah, cl + inc ebp + mov dl, 0x4e + add dl, [bx+si+0xe565] + cld + iretw + invalid + dec di + jae 0x1ad4 + aam 0x6b + sbb si, [bp+si+0x5de6] + xchg [bp+di+0x1410], bh + sbb dh, 0xf1 + cmp al, 0x91 + mov dx, [bx+di+0x46] + sbb al, 0x68 + outsb + adc al, 0x91 + mov al, 0x9 + jmp 0x372a + mov dl, 0xf0 + call word near [bp+si] + add ax, 0x8cbb + inc sp + sbb bx, [bx] + mov ch, 0x79 + out 0xca, ax + mov dx, 0x7a67 + mov al, 0x8a + aad 0x51 + shr di, 0xb7 + xor [bp+di], dx + pop sp + mov cr1, ax + shl word [bx+di+0xe304], cl + dec di + xchg [bx+di], ah + sbb ax, 0x579 + push sp + pop si + out 0xe2, ax + xor dh, [bp+0x7a] + add al, 0xa3 + call word 0xfd50:0xe644 + call word 0xb986:0x2e46 + std + mov di, 0xe023 + add [di+0x8cdb], ch + enter 0x4e13, 0xd9 + mov cl, 0x89 + inc cx + mov ch, 0x96 + sbb ah, cl + xchg di, ax + adc cl, ch + in al, 0x61 + jcxz 0x1b3f + movsw + mov di, 0x7b96 + mov dx, 0x950f + dec sp + and ax, 0xaabd + mov di, cx + fidivr word [bp+di-0x65] + adc [bp+di+0xd52a], cl + bound bp, [bx+0xb9ff] + js 0x1b68 + test al, 0x15 + dec ax + sti + dec bx + stosb + or dh, ch + fldenv [di] + mov cx, 0x448a + test [bp+si-0x14], ax + add bh, [bp+di+0x4789] + pop bx + o32 mov [bx], dh + mov si, 0x773b + pop ds + mov [0x1b42], al + inc bx + cmc + aaa + into + push si + cmp ax, 0x84b6 + mov ah, 0x68 + pop si + cmp al, 0x52 + sbb bl, [bp+di+0x3a] + mov sp, 0x5363 + salc + scasb + mov ax, 0xd139 + arpl [bp-0x4a], bx + jmp 0xe40 + sbb [bx+si], ecx + scasw + bound ax, [bx+di+0x1095] + inc di + push di + test cl, al + cmp bp, ax + dec ax + hlt + repne xchg [si+0x46], bl + lodsb + or ax, 0xc5e + fdiv dword [gs:di-0x17] + cmp bl, bh + or [bx+di-0x28], cx + ret 0xd22c + invalid + pop di + scasb + xchg [di+0x7], cx + pop ds + dec ax + movsb + ret + jl 0x1bde + pop dx + std + mov bp, 0x7bf4 + dec sp + stosw + dec di + pusha + xor al, 0x7a + ret 0xf29c + invalid + sub [bp+0xba93], sp + xchg [bp+0x54], sp + mov dl, 0xbb + fldenv [0xa11c] + fstp tword [di+0xd88d] + xchg di, ax + cmc + cmpsw + mov al, 0x3f + in al, dx + cli + xchg sp, ax + mov di, 0x43cb + add ax, 0x5bb3 + rcr word [bp+di+0x30], 0x67 + sub dh, [di+0x1d] + pop di + test [bp+di+0x6e], ch + inc sp + xchg [bp+di+0xa8b5], sp + jp 0x1ca9 + salc + and byte [bx+di+0x56eb], 0x31 + jo 0x1c01 + sbb ch, [di] + or al, 0x86 + push ss + cmp [bx+si-0x1d], dx + mov es, [bp+si+0xccdb] + retf + and ax, 0x3136 + mov al, [0xcfd0] + xchg di, ax + sub al, 0xf5 + dec cx + loop 0x1c87 + loopnz 0x1c57 + jnp 0x1c40 + invalid + neg word [si+0x4ba3] + inc cx + insw + adc ax, 0xd690 + loopnz 0x1bfc + movsb + das + pop bp + out 0x5c, ax + push cs + invalid + push di + adc di, dx + sbb ax, [di+0x3704] + xor cx, [di+0x8e2e] + ret 0x30cd + outsw + mov ax, [0x89de] + in al, 0x6d + loope 0x1cc0 + push cs + jnz 0x1c64 + pop ds + jge 0x1c94 + add ax, 0xa2e6 + fild dword [bp+di] + cmp dh, ch + dec ax + mov di, 0xf79 + leave + arpl [di+0x5d], bp + jo 0x1d23 + nop [bx+0x65] + jz 0x1cdc + adc cl, ah + aaa + pop ds + mov [0xab26], al + mov ah, 0xd7 + xchg bx, ax + iretw + salc + sbb [bx], di + inc di + in al, 0x2c + pop cx + pop bx + rep insw + scasw + add byte [0x7bd], 0xb7 + leave + invalid + cwd + xlatb + out dx, ax + retf + and al, 0x70 + push bp + push cs + pop di + cmp ax, 0x7e82 + xchg cx, ax + or sp, bx + retf + in al, 0x3a + jno 0x1d19 + cmp [bx+di-0x47], bh + in al, 0x35 + mov ax, 0xb9bd + push dx + push sp + jo 0x1d1e + dec ax + mov ah, 0x89 + rol word [bx+si-0x65], cl + in ax, 0x2d + mov ah, 0x36 + invalid + sti + push dx + invalid + lodsb + or al, 0x9d + mov ax, 0xfc4d + or dx, [bx] + sbb dl, [bx+0xa637] + int1 + mov bl, 0x34 + mov bp, cx + xor ax, 0xe79e + and word [bp+si-0x10], 0x91fb + retf + invalid + jmp 0x10ae + in al, 0xdb + push cx + dec bx + jno 0x1cd3 + fldcw word [bp+0xc7bf] + rcl byte [bp+si], cl + bswap ax + mov di, 0x4899 + xor ax, 0xd4d7 + mov di, 0x1f98 + mov al, 0x5b + pop ds + ror byte [0x9ed], 0xf3 + fdivr dword [bx+0x25] + xchg [si-0x3f], al + mov cx, 0xd29 + jg 0x1dbd + fdivp st4, st0 + jae 0x1d67 + jae 0x1d5c + wait + cmpsw + daa + mov dx, 0xe596 + mov sp, 0x7e8d + sub ax, 0xcf64 + std + lodsb + sbb [bp+si+0xc62b], bp + insb + and ch, al + pushfw + jmp 0x1d3e + push es + pop es + mov di, 0x3871 + int 0x82 + mov dx, 0x9fa6 + dec di + mov dl, 0x81 + lahf + jnz 0x1cff + jp 0x1dbb + dec bx + mov bx, 0x7f3d + lea si, [bp+di+0xb] + sub al, 0x7b + o32 ja 0x1dc3 + sar di, 0xf + cwd + cbw + mov ax, [0xb6c] + insb + ja 0x1d4b + cmpsw + add cl, [bx+di+0x7e] + push sp + mov ch, [bx+si] + and dx, si + scasb + fcom2 st7 + fstp qword [si] + shr byte [si+0x7554], 1 + invalid + wait + adc ch, [bp+di+0x937d] + aad 0x56 + test ax, 0x3fe4 + jno 0x1e09 + loopnz 0x1d6b + xor ax, [di+0x7a5e] + std + jb 0x1da9 + add ax, 0xfde4 + into + a32 mov ax, 0x7ca + pushfw + cmp al, 0xc4 + fisttp qword [bx+di-0x3d] + and bl, al + mov bx, gs + xor [bx], si + push ss + push cx + cwd + mov dl, 0x83 + int1 + ret 0xb54 + out dx, al + cmp al, 0x92 + xchg si, ax + sbb dh, cl + mov bx, [bp+si-0x49] + pop es + xlatb + lodsb + imul bp, [bx+si+0x32b], 0x94 + movsw + sbb [bx+si+0xe0f1], dl + push es + dec di + mov cl, 0x1a + mov ch, al + jae 0x1df6 + inc sp + push di + sub al, 0xe4 + or ah, bl + xchg bx, ax + pop ds + fsub qword [bp+si-0x46] + out 0xd4, al + xor al, ah + int3 + jp 0x1e4e + and cx, si + call 0x1af7 + adc dh, [bx+di] + pop dx + outsw + pop es + or [bx+si+0x5f86], dx + mov ah, 0x4 + cmp [bp+di-0x13], al + ja 0x1e05 + pop sp + jbe 0x1e31 + jge 0x1e1a + enter 0x1445, 0xe4 + les di, [si-0x5a] + pop si + nop + jle 0x1e76 + aaa + ja 0x1ea5 + ja 0x1e29 + or [bp+di], cx + pop ss + movsw + xor dl, al + add byte [bx], 0x83 + repne jmp 0x1dc9 + jmp 0x2047 + pop bp + loop 0x1dd4 + push dx + and ax, 0xfeb2 + pop si + int1 + test bp, di + jmp 0x1e47 + movsw + mov di, 0x210b + retf + cmp dh, [bx+si-0x16] + mov ah, 0x1d + and [si+0x10], bh + aaa + out dx, al + invalid diff --git a/tests/randtest32.ref b/tests/randtest32.ref new file mode 100644 index 0000000..facd432 --- /dev/null +++ b/tests/randtest32.ref @@ -0,0 +1,3075 @@ + mov edi, 0x95804fae + int1 + cli + inc ebx + lea eax, [eax] + or al, 0xeb + aaa + add eax, 0xcfca3a9d + xor eax, 0xfca13235 + add dword [gs:eax], 0xf8 + out dx, eax + jmp dword 0x60c2:0x78636e11 + outsb + mov cr1, [ecx-0x6e] + jnp 0xffffffffffffffac + xchg esi, eax + push es + lahf + add bl, ch + out 0x9f, al + sar dword [ecx-0x61], 1 + jmp dword 0xf060:0x85e33f60 + jl 0x81 + mov ecx, 0xc0d32522 + out 0x70, eax + push esi + pop ss + aaa + in al, dx + xchg ecx, eax + and ebp, esi + push ecx + mov cl, 0xc8 + sbb al, 0x78 + into + shr ebp, 1 + adc bh, [ecx+0x7b] + pop dword [eax-0x1] + jb 0x3e + xlatb + bound eax, [ebx+0x99f7d184] + hlt + insd + xchg edi, eax + mov gs, [esi] + loope 0x71 + mov al, 0x96 + adc [ebx+0x926c585e], ah + ret 0x7e85 + add ch, ch + pop ss + daa + xchg esi, eax + mov bl, 0xe4 + mov cr0, [ecx+0xfdaf1807] + inc byte [ebx+ebp*4] + sbb dword [esi+ecx*2], 0x9c886f44 + push edi + mov ecx, 0xd409a448 + adc al, 0xe9 + insd + sub cl, bl + invalid + cmc + bound eax, [eax] + pop ds + pop ecx + mov [edi], ch + xchg edx, eax + salc + and [ecx], esp + push ebx + jbe 0xde + mov [ecx], edi + sar cl, cl + add [ebx+0x5e], cl + inc ebp + iretd + daa + mov gs, [edx] + adc eax, 0x1107e2e1 + push eax + dec ebx + repne gs movsb + scasb + a16 inc esp + jae 0x130 + ret + cmp eax, 0x5fe11475 + stosd + insd + xor [esp+0x69f80098], esi + xor eax, ebp + int3 + push 0xc8 + cmp esi, [edi+0x9bc32958] + daa + xor al, [eax+0xa151c8bf] + mov [0x705fa0e8], eax + in eax, dx + add esi, ebx + xchg ebx, eax + xor byte [ecx+0x4f], 0x37 + ja 0xa6 + xlatb + o16 shl [eax], cl + mov bh, 0x91 + push ebp + push esi + nop + push esp + mov bl, 0x83 + invalid + pop ecx + mov ebx, 0xcf58c4e3 + mov ecx, [eax+0x20] + jbe 0x145 + dec bp + js 0x94 + xor ch, [eax-0x65] + sahf + dec ecx + or bh, [esi+0xdbc2dd9a] + and eax, 0x8134fcda + xchg [edx], bh + mov al, 0xd0 + xchg esp, eax + push ss + sub eax, 0xe7fb27a4 + cmc + and eax, 0x7f5f47f6 + jno 0x198 + and dword [esi-0x79], 0x84d0c980 + cdq + div word [edi-0x44] + sub bl, ch + push esp + or [ecx+0xadd39a4a], dl + jnp 0xea + movsd + sub al, 0xe0 + wait + push ss + invalid + test al, 0x7b + int3 + cmpsd + in al, 0xac + mov dl, 0xd8 + push esp + add edi, ecx + salc + push ss + bswap ebp + sbb eax, 0x132463c4 + sub [ecx+0x98b4a3f5], al + fstp8 st1 + or al, 0x40 + out dx, eax + or [ecx-0x47], esp + jae 0x162 + call 0xffffffff95858333 + invalid + ficom dword [ecx] + movsb + jmp dword 0x5268:0x323578b0 + invalid + or [eax+0xe68fd1ef], cl + xchg ecx, eax + jns 0x112 + pushfd + jb 0x1cd + ficom word [esi] + push cs + das + loopnz 0x14f + push eax + xor [eax+0x2f], esp + cli + insd + les esi, [ebp+ebp+0x69] + outsb + add esi, [edi] + jz 0x170 + dec esp + fbstp [eax] + ret 0x7e91 + xor eax, 0x9d1189e + xchg edi, eax + sub eax, 0xe34fb563 + adc dword [edx+0x50], 0xbe + mov fs, [esi] + sbb eax, 0x8507dfba + pop esi + xchg [fs:edi+0x772f0d6d], esi + movsb + push cs + pop ebx + add [ebx+0xc3d44faf], edx + add ebp, [esi] + xor esi, [ebx+edx*8-0x73] + xlatb + mov esp, 0x84e415b + push cs + iretd + and esi, [ebx+0x42] + int3 + push esi + sbb esp, [edi] + jnz 0x222 + mov edx, 0x27656695 + xor dl, dl + outsb + shl dl, 1 + pop ebp + aad 0x47 + sub [esi-0x9], eax + call 0x2d044abe + ret 0xd5d9 + loopnz 0x193 + xchg ebx, eax + or edx, [edx] + cld + jp 0x227 + inc edi + and ch, bl + pop ss + retf + xchg ebp, eax + in eax, 0xf1 + rep pushad + scasb + inc ecx + push ss + pushad + mov eax, [0x4f574d9e] + mov esi, 0xacddd71e + xor al, 0xa3 + xchg esp, eax + shl dword [ebp+0xb39ccece], 0x48 + pushad + test al, 0xdd + mov edi, 0x4ebbc7d3 + inc ecx + movsb + or al, 0x7c + stosd + push ecx + jnp 0x22d + xor bl, [ecx+0x879355b3] + ror byte [edx-0x4f], 0xf2 + xchg ebp, eax + lock push ebx + xchg ecx, eax + push ebp + les ecx, [0xbcf5e5cb] + ror dl, cl + mov al, [0xc81304ba] + fucomi st0, st1 + jge 0x234 + adc edi, esp + std + xor [esi], edi + out 0x9b, al + invalid + inc esp + xor eax, 0x730c4733 + jle 0x1f9 + push eax + mov [0x5fa687e4], al + sti + push dword 0xf234b144 + mov [0x3d8ab4c3], eax + inc eax + mov ch, 0x87 + add ah, dl + invalid + clc + lodsd + sahf + loopnz 0x2e6 + pop ebp + mov [0x4a3a6118], eax + ret + sub dl, [esi-0x41] + xchg edx, eax + mov eax, [0xd9662e8f] + div dword [ebx+0xd0f4b5f0] + push esp + clc + shl dword [eax+esi+0x6f], 0xd5 + lahf + push ebx + mov byte [edi+0x8ed27cb8], 0xac + retf 0xe411 + sbb [ebp+edx*8+0xebed1caa], bl + mov [0xbc346bfc], eax + or [edx+0x1e5d8f31], cl + add [0x22efb4e4], edx + or cl, [esi] + push esp + arpl [0xd4b9c216], dx + sar [ecx+0x7d], cl + retf + invalid + mov ebx, 0x93818ee4 + inc esp + jg 0x2c9 + loope 0x34f + shr dl, 0x87 + invalid + xchg ecx, eax + adc [edi-0x4a], dl + scasd + push dword [edi+0x9d3c946f] + scasd + in al, 0x1b + push edi + fdiv qword [ecx+0x5f] + jae 0x2b6 + jg 0x297 + repne sub byte [bx+di+0x25], 0x7c + wait + sub dword [ebx], 0xfe1c3c3d + mov ch, 0xec + cmpsd + jp 0x299 + inc edx + invalid + push edi + xor [edx+ecx*2+0x498841f], edi + mov ebp, 0xf0b2a7ed + jnp 0x35a + sbb [edi-0x44], ecx + loope 0x392 + add [ebp+0xf01581d9], ecx + movsb + hlt + movsb + into + sbb al, 0x2d + cmpsb + cwde + dec edx + insd + invalid + mov [0x54c7e06f], eax + sbb eax, edi + cmp eax, 0xbf545531 + xchg edi, eax + push edi + js 0x381 + jge 0x30e + dec eax + fnstsw word [ecx-0x7f] + pop ds + shl dword [ecx], 0xe0 + or esp, [edi+0xd4d52926] + push edi + arpl [edi+0x38ed8291], bx + in eax, dx + dec edi + neg dword [0x1d58c367] + stc + insd + mov cl, 0x34 + mov dl, 0x1b + mov eax, [0xc33a1f8] + mov ebx, 0xd635867c + mov [ebx], al + inc esp + push es + out dx, al + lodsd + pop ss + jnz 0x3b5 + arpl di, ax + cmpsd + hlt + mov edi, 0x95ac2357 + push ebp + inc ebx + pop ebx + adc eax, 0x8ba88bc4 + shr eax, cl + dec ebx + div byte [ecx] + bound ebx, [ecx-0x21] + fdivr dword [ebp+0xa44b1a13] + xor esi, [esi-0x27] + sbb [esi], edx + ror byte [ecx+0xbb3ebc22], cl + outsd + and edi, [esi+0xd535f435] + scasd + add [eax], dh + js 0x3dc + jmp dword 0x23c5:0xbfdf8522 + jge 0x3d9 + xchg edi, eax + test [ecx+0x36], bl + xor eax, 0x2ef2dd51 + mov esi, 0x6cdd5b1f + push eax + fstp qword [eax+0x7a564f77] + movsb + mov esp, 0x6edc8fdc + xor eax, 0x57e4a5d1 + mov edi, 0x4890a0bc + fdivr st0, st2 + popfd + jo 0x39f + daa + nop + in eax, 0xe + in eax, 0xc1 + cmp [ebp+ebx*2+0x1e18e69a], ah + xchg [ebx+0x514c44bd], ecx + pushad + cmpsd + outsd + inc ebx + stosd + wait + invalid + mov eax, 0xe426f49a + mov esi, 0x3d7db05c + and [ebx+0x34], esi + fisubr dword [ecx+0x9] + stosb + cmp [edi+0xa09cb89c], cl + jg 0x44a + cmp [esi+0x55f9b487], dh + fild qword [edi+0x31] + pop eax + invalid + mov cl, 0x1f + clc + jns 0x442 + mov ebp, [edx] + in eax, 0x6 + mov ah, 0x85 + adc ecx, [ebx-0x1d] + inc edi + jnp 0x3ed + xchg esp, eax + invalid + jg 0x491 + bound edx, [ecx+edx] + fidiv word [ebp+0x4b4154c3] + jle 0x3db + test [ebp+0x72685122], eax + not byte [edx+0x50] + mov [0xab3ad9be], al + jo 0x459 + jmp 0x36460a50 + add al, 0x6f + mov [0xb9c99ce8], eax + lodsd + jmp 0x4ec + sbb eax, 0xac9bb1d1 + or eax, 0x2af1158e + fild qword [ebp+0xc1885224] + push edx + and eax, 0xf6050662 + in al, dx + push esi + jmp 0x4f3 + push ebx + cld + or al, 0xe4 + jnz 0x4bd + shl byte [eax], 1 + mov ecx, 0x10a2583c + mov esp, 0x8c1432da + jp 0x4af + popad + inc esi + jmp dword far [ebx+0xf6eb2715] + int 0xbb + dec edi + outsd + mov dl, 0x55 + sbb al, 0xbb + xchg esp, eax + sbb eax, 0x6752a77e + and eax, 0xd7a1d401 + test eax, 0xcacf5092 + sar dword [esi+0x887acef0], 0xce + mov bh, 0xf7 + and al, 0x80 + cmp [eax+edx*4], dh + in eax, 0xcf + xor [esi], ch + scasd + cmp eax, 0x2b823c89 + mov [eax], dh + mov esi, 0x59a0f5b9 + jle 0x47f + hlt + aaa + movsb + lea esi, [ebx+0x33428281] + pop ds + mov esp, 0x777cb8f + wait + repne push esi + adc al, 0xb7 + inc ecx + inc ebx + dec esi + wait + cmp eax, 0x8468a78a + fstp qword [edx+0x97e93040] + aam 0x7 + mov [0x2d7023a1], eax + retf + sbb edi, [eax+0xffbc49d3] + lahf + mov bh, 0x3a + pushfd + cmpsd + mov ah, 0xad + or dh, [edx] + push ss + inc edx + xor [ecx], ecx + mov edi, 0xa1440147 + cmp [ebx-0x1d], eax + mov dword [esp+esi*4-0x70], 0xb08aa420 + xchg ebp, eax + sbb ebp, ebx + mov bl, 0x42 + xchg [ebp-0x1f], edi + xor eax, 0x23062d90 + lock add bl, [ebx+0x2] + popfd + leave + sar dword [ecx-0x61], 0x7d + jp 0x4f2 + xchg ebx, eax + mov ecx, 0x76700e5d + fsub dword [eax+0x38de11eb] + scasd + stc + xchg esi, eax + mov al, [0x4efd36a2] + sti + invalid + xor al, 0xe7 + test byte [0x28f76ccd], 0x4c + push ss + rep inc esi + cmpsd + leave + pop edi + jecxz 0x52d + retf 0x3450 + mov ch, ah + movsd + stosb + sti + or bl, [ebx+0x1ea54199] + mov al, [0x383cc0d6] + xchg ebx, eax + dec ebp + dec edi + dec edx + dec edx + add [eax], ecx + adc al, 0x6e + inc eax + leave + adc al, 0x26 + jmp 0x556 + invalid + insd + pushad + bound esp, [edi+eax*8] + sub al, 0x77 + or al, 0xae + xchg esp, eax + invalid + repne inc edi + dec ebp + cmp eax, 0x787cbcd0 + cmp dh, bh + or edx, esi + jo 0x55b + xor al, 0x9b + test byte [ebp+0xbd740164], 0xe9 + mov [0xd2e9e77a], eax + push edx + rep push edx + mov al, 0x77 + mov cl, 0xda + mov dl, 0xec + insd + scasb + xchg ecx, eax + rol bh, 1 + and eax, 0x47c6ad88 + cli + out 0x66, eax + ja 0x5f0 + mov [0xd24da31c], al + jle 0x56f + push es + jae 0x5f5 + ja 0x623 + adc ebx, ecx + xchg ebx, eax + xlatb + cdq + pop ds + sahf + mov ebx, 0xff345910 + mov al, [0x5ec8f4c1] + pop ds + cmpsb + call 0x793f2d85 + mov dh, 0xb3 + jp 0x619 + lock jmp dword 0xce14:0x103b24f4 + inc ecx + rep fstp qword [eax+0x23] + out dx, ax + jno 0x59b + imul esp, ebp, 0xfd + or [ebp+0xae445ba2], ah + jecxz 0x5d4 + cmp bh, ah + in eax, dx + aas + nop + sbb al, 0xd8 + call dword 0x43b6:0x79d8c271 + inc edi + inc esp + popfd + das + pop edi + in al, 0xa8 + xchg ebx, eax + mov dh, 0x9f + invalid + out dx, eax + nop + test eax, 0x6ed9741d + mov eax, [0x53344910] + test esi, 0xef612761 + adc ebx, [edx+0xf2d948a9] + sub al, 0x46 + mov eax, 0x83fec441 + mov cl, 0x9d + scasd + cmp esi, eax + sub [edi-0x66], eax + dec ebp + cmp bl, 0x61 + mov al, [0x25e6ebf3] + inc ecx + pushad + movsd + int3 + test al, 0xc0 + mov cl, 0x39 + insd + jmp 0x627 + add eax, 0xda66295d + cmp [edi+0x22], edi + push eax + sub al, 0x5e + sbb ecx, [eax] + xchg ecx, eax + dec ebp + out 0xe2, eax + pop ebx + jp 0x653 + jmp dword 0x2c79:0xfa79aa3b + shl byte [edx+0xb966e325], 1 + in al, dx + lodsd + insb + add eax, 0x4e2eb90b + cmp al, 0xfb + sub eax, 0x52f2a8d8 + mov ecx, [esi+0x8] + and ecx, [eax+0xb9f8f452] + fcom st0, st7 + int1 + mov esi, 0x700d5708 + mov ebp, 0x678e58a1 + adc esp, [ecx] + adc dword [eax], 0xbf + and dword [esp+edx*4], 0xc6 + push ebx + sub eax, 0x9e1fa2af + mov ecx, 0xdcdf29ae + clc + cmp cl, cl + cmc + enter 0x4f3f, 0xf8 + adc byte [edx+0xeb4b8e71], 0xb6 + loop 0x6ad + jz 0x66e + aam 0x1b + push ebx + call 0x6e843206 + bound ebp, [eax+0xabbcc870] + sbb ah, bh + aam 0xa + or eax, 0x1b1a3f6c + in eax, 0x7c + sbb eax, 0xb9b94d07 + insd + mov bl, 0x8a + push 0xf9 + sbb ecx, [eax+0x1b31669e] + mov esi, 0xd1de5b3d + js 0x6fc + sbb eax, 0x6ffe0d5 + jge 0x6c6 + insb + inc ebp + ret 0xda6 + mov esp, 0x39e9ba3b + xchg ecx, eax + jle 0x793 + mov edx, 0x840bd8e3 + mov dh, 0xd1 + les esi, [edx] + test al, cl + int1 + fld qword [0x7ec311fa] + o16 jae 0x758 + pop esi + das + hlt + jbe 0x731 + jge 0x78e + ret + in al, dx + lodsd + ja 0x74e + pop ebx + scasd + cld + mov bh, 0xa0 + adc ah, [eax] + sbb al, 0x53 + imul eax, [ecx+0x9b0e938a], 0x53744fdc + cmpsb + xchg [edx+0x64915082], ebp + inc ebx + imul byte [edx-0x5d] + lahf + add eax, 0x6086adde + or al, 0xfb + or eax, 0xa0926d7b + in eax, dx + in al, 0x36 + jbe 0x73d + int1 + xlatb + fidiv dword [esi] + mov [edi], dl + inc al + mov [ecx+0x98476253], esp + xlatb + mov edx, 0x54abea50 + jo 0x7ae + add dh, [edi] + fsub qword [ecx] + xor [edi+ecx+0x48], ebp + lahf + arpl [edx-0x4b], bp + invalid + clc + mov esp, 0x9cbba834 + std + jecxz 0x7a0 + dec edi + add ebp, [edi-0x40] + mov edx, 0x9717a522 + sub [esp+edi*4], ch + lahf + mov esp, 0x47e94f18 + xchg [ds:esi], esi + pushfd + push ebp + cmp edx, [edi] + jz 0x834 + xchg esp, eax + dec ecx + salc + push ecx + aad 0xf9 + inc byte [edx+0x53fc8bf5] + sbb ah, [esi+0xe069e65] + shr edx, cl + in al, dx + pop ss + xchg esp, eax + and [edx], ecx + dec ecx + wait + daa + jle 0x779 + push ds + mov [ecx-0x65], ah + inc eax + pop es + jnp 0x7f4 + jmp 0x731edc27 + jns 0x796 + mov cl, 0xba + xor eax, 0x5713d376 + jp 0x87b + cmp eax, [eax-0x2a] + xor dword [edi], 0xbe56b7cd + jns 0x80f + xchg edi, eax + in al, dx + ret 0xfc88 + xchg esp, eax + outsd + mov ecx, 0xcb629fe0 + outsd + popfd + inc edx + push esp + xchg ecx, eax + mov ecx, 0x3ff2b740 + adc eax, 0xb4cf7f6a + arpl [esi+0xbbbd507b], bx + call dword far [edi+0x63a461e9] + mov eax, [ebp+0x4d] + push esi + pushad + or eax, [ebp-0x14] + push esi + sbb eax, 0x3e8fc0ae + dec eax + and al, [edi-0x3b] + push ecx + aaa + xchg [ecx+0x6b], esp + fcmove st0, st4 + jmp dword 0x2823:0x34ff9395 + adc al, bh + xor eax, 0xdc2ee2 + add [ebx+0x55fcd786], eax + jg 0x88e + jmp 0xffffffff88ddccf9 + pop ebp + cld + in al, dx + and ecx, [esi+0xf314f6fd] + xor [esi+0x8], al + fstp qword [eax-0x6e] + ja 0x803 + add byte [eax+0x6bef8a1f], 0x97 + outsb + adc [ebp-0x4b], ch + pop ecx + sub esi, [0x2d7ff4e5] + stc + mov [ebx], ds + or dword [esp+ebx*8], 0x63ee6442 + push es + push eax + das + fsubrp st5, st0 + jl 0x909 + loop 0x832 + mov esp, 0x34beb4a6 + adc eax, 0xc6745838 + out 0x71, al + cmp ch, dl + sub ecx, [edx+0x5c519127] + sbb [edi+0x33ca5cc1], ecx + salc + or eax, [edx+0x0] + das + movsd + cmc + cmpsb + add [ebx+eax*4+0x11], ch + jz 0x848 + and [ebp-0x2d], ebp + dec eax + retf + sbb [ecx], dl + mov dh, 0x35 + rcl dword [edi-0x1f], cl + or [eax-0x38], dh + pop ds + and [eax-0x2f], edi + mov cl, 0xc8 + jecxz 0x951 + and eax, 0xe26682e6 + sub al, dh + sub bh, [eax] + push ss + sbb dl, [edx+0xf55550d3] + jbe 0x93a + leave + adc edx, [ebx] + mov cl, 0xbb + push ebx + and eax, [eax+0xa] + iretd + outsd + xor [esi+0x10f4d0e8], edx + cmp eax, 0x1cf5d799 + lds eax, [eax-0x1e] + repne jbe 0x937 + dec edi + and ebp, ebx + sbb al, [eax+0x2f880b12] + pop edi + nop + xchg esp, eax + sti + invalid + arpl [ecx+0x31da1f77], sp + mov al, [0xbdb8071b] + call dword 0x2d5a:0xe58d87b + pop esp + aas + pop ss + fcmove st0, st3 + and eax, 0x71674aa9 + mov eax, [0x310bed12] + xor bl, [ebp+edi*8-0x65] + aaa + xlatb + inc eax + sub [eax], bh + jnz 0x8d3 + jmp dword 0xa9fe:0xf1be2348 + movsb + or ebx, [ss:eax+0x2d] + adc ebp, ebx + adc [esi+0x951fd235], ecx + mov [esi+0x3f], eax + ja 0x957 + sub esp, edx + xor dword [edi], 0xa7 + loop 0x936 + std + mov bh, [ecx+0x46b49152] + in al, dx + mov dl, 0x45 + xchg edx, eax + push 0xc5 + wait + pushfd + sti + in al, dx + jge 0x901 + jbe 0x9be + xchg edx, eax + inc edi + xchg edx, eax + cmp ch, cl + loop 0x9d3 + dec ecx + lodsd + pop ebx + xchg [edi+0xab489360], ah + js 0x96e + mov ecx, 0xafdca604 + stosd + into + adc esi, [ecx+0xae17d828] + rcr byte [ebp+0x3a], 1 + sub [ecx], eax + mov ebp, 0xffd342cb + and ah, ch + push esp + loope 0x9b4 + dec ebp + xor dl, bl + out dx, al + mov [edi], esi + jl 0x982 + invalid + fld qword [ebp-0x7c] + insd + wait + dec edi + push edi + adc ebx, [edx-0x27] + salc + xor dword [ecx], 0x5c + dec byte [esi-0x3f] + or [edx], eax + xchg edx, eax + into + outsd + xor [edi+0x84314b77], edx + lea edx, [ecx+ebp*2-0xd] + mov edx, 0xbe94bcdf + mov ecx, 0x1314367e + push ss + lock shl byte [ebx], 0x56 + mov [esi+0x194b4c6c], ss + out 0xbb, al + sub ecx, eax + or al, 0xaf + jno 0xa19 + das + dec esi + popfd + xor [ecx+0x2d0988f6], esp + wait + mov eax, [0xbfbf9891] + pop esp + popad + add dl, [eax+0xc17c5d02] + xlatb + push cs + iretd + std + int3 + stosd + shl dword [edx-0x34], 1 + cmp dl, dh + jno 0xa01 + adc dl, [edx+0xa271ac71] + salc + push ecx + int3 + jmp dword 0xbe7e:0xdd399c2e + cmp byte [eax], 0x67 + pop edi + jle 0xa98 + in al, 0x2f + adc [ebx], eax + idiv ebp + push es + lea ebp, [edx-0x6e] + inc ebp + pop esi + xor [0x1aee8ce4], esp + jz 0xaa5 + into + sahf + shl dword [esi+0x47], 0xf0 + movsd + inc ebp + rol dword [ecx+0x1b142a6a], 1 + int3 + mov cl, 0x8a + lock repne cmp eax, ebp + mov [esi+ebx*8], al + add al, 0x91 + arpl [edi], dx + jnz 0xa6c + push cs + adc ecx, [edi+0x7a] + jp 0xa88 + aaa + push ebx + mov [ebp-0x32], bh + or al, 0x23 + iretd + inc edx + psubusb mm7, mm4 + jecxz 0xaaf + das + das + xchg ebx, eax + mov dl, 0x8e + test al, 0xcd + invalid + adc al, 0x5b + sbb eax, 0x708660b + repne shl al, 0xf5 + pop es + salc + xchg ebx, eax + imul eax, [ebx], 0x59d49ea2 + xchg ecx, eax + dec ecx + invalid + adc al, ah + jmp dword 0xe3e8:0xe4234f72 + test [eax], ebp + fnstsw word [ecx-0x5f] + xor byte [eax+0xef750efc], 0xb9 + mov [0x39baf1b0], al + xchg esp, eax + std + popad + fbstp [ecx+ebp*4] + dec ebx + cs movsb + in al, dx + mov ecx, 0x8ee46992 + inc esp + mov edx, 0xf73d610b + test [ebx+ebx], ebx + insd + mov ch, 0x66 + sbb eax, [edx+0x9a393107] + call 0xfffffffff9747199 + btc [ecx], edi + pop ss + jl 0xb20 + jecxz 0xb2f + scasd + cmpsb + lahf + push ds + add al, 0x97 + pushfd + salc + aad 0x6 + popad + aam 0x72 + enter 0xfba7, 0x60 + out dx, eax + mov [edx+0x43], eax + inc ebx + xor eax, 0x604a48 + fdiv qword [ebp-0x13] + cdq + and eax, 0xe70452e6 + lahf + push ds + jz 0xb01 + push ebx + or esp, [ebx-0x16] + fbstp [edi] + xor dword [esi+esi+0x5a920d7f], 0xc38b1a72 + lds eax, [esi-0x2f] + inc eax + clc + push dword 0xb5f787ab + cmp [0xbb7e95fa], ebp + dec ebp + test [edi+0x748ab13c], esp + push ds + and dl, [esi] + xchg [eax+eax*8+0x366852ed], bh + pop eax + in eax, dx + stosb + popfd + cli + inc ebx + jmp dword 0xd912:0x1549a128 + fisub dword [edx] + pop edi + sahf + std + jnp 0xafd + push dword 0x657c0db7 + push edi + daa + int3 + mov ch, 0xb4 + adc eax, 0xfc744747 + mov dh, 0x9b + dec esp + jns 0xbcd + std + xor dh, al + push edx + mov ebp, 0x95134ff4 + xor ah, [eax+ecx*2] + jg 0xbab + push ss + test [edx+0xea903694], ecx + rep lodsb + repne mov ecx, 0x793b9c9e + stc + stosd + adc dh, 0x3e + sbb al, 0x4 + mov [0xcbc2f994], al + jb 0xb2c + pop ds + pop ss + sar dword [0x44386b47], 0xbe + and bl, [ecx+0xf86fc66b] + mov ch, 0x93 + pop edx + int 0x82 + xchg edi, eax + mov bl, [ebx-0x56] + stosb + call dword 0x4f82:0xb4db446 + or ch, [ebp-0x76] + js 0xb49 + or [eax+esi+0x3f1aae4d], ecx + jp 0xb5b + movsd + outsb + nop + sub ecx, [edx] + inc ebp + out dx, al + sub eax, [edx] + stc + pop edi + adc al, 0xbf + repne mov eax, [0xd45f0f35] + jnz 0xc2c + out dx, al + fsubr dword [ebx+0x1d] + mov esp, 0xe0696e72 + js 0xb9d + or [eax], ebp + pop es + lock and [ebx+0x55], ch + test al, 0xca + cmpsd + xor al, 0xdb + dec esi + lock mov cl, bl + pop ebp + call dword 0x7026:0xe705bccd + dec esi + dec esp + mov ch, 0x50 + xlatb + test [eax+0x66e4487a], eax + or eax, 0xd31061f4 + call 0xffffffffb945a135 + repne call dword 0x500c:0x815bd97e + push esp + pop edx + jecxz 0xbdf + fisubr word [edx] + popfd + out dx, eax + and [esi], bh + mov ebx, 0x8089623 + push edx + jo 0xc82 + xor ch, [edx+0x4] + jb 0xc04 + inc ebx + cmc + neg byte [esi-0x53] + pop edx + sbb al, 0x3f + lds edi, [ecx+0xafa84356] + nop + mov al, 0xb5 + or byte [eax+0x71], 0x43 + xchg edx, eax + aam 0x63 + call dword 0xee37:0xed2ec16a + adc eax, 0xa897a4b9 + a16 jz 0xc46 + movsb + imul esi, [esi+0x53fbc5a1], 0x5a + jg 0xbda + or byte [edi+0x9f367649], 0x7d + push eax + imul edi, [eax], 0x2c4aa59b + sub [ebp+0x3e], bl + and ebx, [ecx+0xce880d08] + inc esp + sub [ebp+0x11], ecx + pop esp + dec ecx + push ebp + salc + mov ah, 0x36 + jge 0xc35 + jnp 0xcb2 + pop edx + inc ecx + inc ebx + or ch, al + sub [ebx], ch + o16 jb 0xcf9 + das + sub eax, 0xc6c32927 + mov [0xe262d532], eax + inc ebp + out dx, al + xchg ebx, eax + int 0x3c + arpl [ecx+0xd89bdfe3], di + invalid + lock invalid + xchg al, ch + add eax, 0x359ed371 + sub al, [edi+0x6932c6c5] + jmp 0xc39 + xlatb + push cs + xor dh, [edi] + arpl [esp+edi*2], cx + test al, 0x4e + fbld [ecx+ecx*2-0xd] + pop eax + pop edi + add dword [edi+0x56ca6c2a], 0x15 + scasb + invalid + sbb eax, 0xa744404f + int 0x66 + sbb [esi], esi + and [esi], esi + invalid + sub bh, cl + call 0xffffffffc8bd8c41 + adc bl, [esi] + stosd + jz 0xcf3 + rol ah, 1 + int1 + mov bl, 0x4b + push es + or al, 0xd5 + imul ecx, [edx+0x1c187bd3], 0x6f7bffe8 + sbb edi, ebp + push ebx + test al, 0x4a + fidivr word [ebx+0xdbd472e7] + mov [0xfa1e3ac4], eax + xchg edi, eax + ret + push edx + push edi + push ss + dec esi + adc al, ch + wait + cdq + out dx, al + test [ebx+0xd8898cac], ecx + fcom dword [eax-0x25] + stosb + lahf + a16 mov ebx, 0xeceb1d22 + rcl byte [ecx+0xcca9c686], 1 + leave + and dh, [edi+0x109fe867] + retf + mov edi, 0x7c84aa58 + cld + cmp esp, ebx + xchg [ebx-0x6a], edx + push ds + mov cr1, [ebp+0x1b] + push ss + cli + xor ecx, [eax+0xdc5cca8e] + jb 0xd25 + imul ebx, ebx, 0x30976844 + sbb eax, 0xd37c2cb + das + inc eax + xor dword [esi], 0x1db6cb00 + mov cl, 0x2c + mov [esi-0x6f], edi + leave + mov [ebx], bh + imul eax, [esi], 0x894b630a + add eax, [esi+0x65] + xchg edi, eax + sub edi, edx + inc esi + repne or ebp, [eax-0x58] + loope 0xcfb + sub eax, 0x4b9f573e + lea edx, [edi] + in al, 0x80 + jae 0xd7d + xchg edi, eax + sbb al, 0x22 + sbb byte [edi+0x96c61637], 0x52 + jno 0xda6 + pop es + dec esp + ret 0xc7e4 + push ss + fbld [ebx] + mov edi, 0x10ad479b + repne sahf + sbb ch, [eax+0x39b6e4c7] + fmul qword [ecx+0x7b14c8c2] + xchg edi, eax + int1 + mov ebx, [ecx+esi] + fxch7 st0 + inc ecx + pop edi + popfd + xor eax, 0x78b5d870 + mov esp, 0x72aa7c3b + cmp eax, 0xdca682af + das + shl dword [esp+ebp-0xc], cl + std + xor al, 0x1d + inc esi + or eax, 0x84135706 + int1 + pushad + out 0xfe, al + test byte [eax-0x6c], 0x2f + arpl [esi+0x37], bp + or al, 0xa8 + xor [edx], ah + xchg esi, eax + xchg ecx, eax + add [edx+0x8], al + jl 0xdf6 + ficom dword [esi] + and byte [ecx], 0xbe + and al, 0xfd + test esi, esi + sub al, 0x33 + int1 + jbe 0xe3c + push cs + xor al, 0x89 + mov ebp, 0x24ea9942 + push ecx + jnz 0xddc + invalid + retf + inc edx + scasb + or byte [ecx-0x5e], 0x10 + fimul dword [edi+0x76] + imul ebp, [ebp+0x8532a334], 0x1365310f + add eax, 0x9236756a + mov bh, 0x9f + mov eax, 0xc973540d + xor eax, 0xd144f52 + rol byte [ebp+0xc595556b], 0x1f + jae 0xea7 + xor [esi+0x58], ebx + or bl, [ecx] + and ebx, [edx-0x6] + test [edi+0x4b2ab0c5], dh + and edi, [ecx+0xc6e40c95] + stc + mov al, [0x4da547be] + and edi, [ebp+0x71] + xlatb + lock jbe 0xec9 + mov ch, 0xa9 + cmp [edx+0x52], esp + xor al, 0x22 + pop es + sub dh, 0x45 + sub eax, 0xb234d79d + mov bh, 0x55 + mov ecx, 0x2e32c2c1 + pop eax + or eax, [ebx+0xac8ed1] + das + sub eax, 0x894f5fde + push dword 0xe04e1ab1 + stosd + out 0xbc, eax + pop ebp + and eax, 0x4f828d00 + nop + push ebx + xor al, 0x20 + jno 0xe8c + sbb dword [ebx+0x23ce924], 0xf8a9277e + mov dl, 0xb + fcomp3 st6 + inc ebx + out dx, al + sub [ebx+0x2a1886ca], edx + ficomp dword [ecx+0x523e59e8] + cmp [ebx+eax*4], ebp + in al, 0xdc + pop esi + not dword [edx+0x49] + lodsb + in al, 0x43 + push ds + mov [0xfc88276e], eax + pop edx + call dword 0xa3f2:0xefb5d5e5 + call dword 0xec8c:0xfa02217a + mov [0x86e676c2], eax + nop + cmp dh, [0x2711a265] + add dh, dl + cmpsd + ficomp dword [ecx+0x6393bcdf] + mov cl, 0x51 + cli + popfd + push ss + push ebp + adc [ebp+0x90438571], ah + add ebp, ebx + maskmovq mm2, [eax-0x17] + js 0xee5 + mov dl, bh + push edi + push edi + shr eax, cl + or eax, 0x25e8312c + xchg ebx, eax + dec edi + sbb al, 0x80 + and esi, [ecx] + test al, 0x14 + pushad + ret + inc ecx + adc [esi+0x3b], esp + invalid + cmp ebx, [ecx-0x34] + rol byte [esi+0x477b9d74], cl + sbb eax, ebx + cdq + push ebx + invalid + ja 0xf88 + dec esi + invalid + adc eax, 0x35fd79c6 + wait + xchg [ebp+0x941af95b], ebp + fbld [eax+0xe3469796] + stosb + mov [edx+0x22], cr0 + xchg edi, eax + imul esi, edi, 0xa2b53f5f + push eax + cmp [ecx+ebp*4], esp + bound ebx, [esi] + or esi, edi + loope 0xf83 + outsd + call 0xffffffff96f1a13f + invalid + sti + mov ecx, 0x2bb9610f + lahf + and bh, [ebx+0x4bf49c08] + imul dword [ebx-0x19] + test al, 0x67 + shl dword [edx], 0x17 + in eax, 0xfd + wait + cmp eax, 0x816f37f + adc [eax], ebp + push dword 0x844dd8cf + sub al, [ecx] + stosb + shr dword [eax+0x5a994de7], 0xd + inc ecx + mov edi, 0x35e63e4c + cwde + add [edi-0xa], ch + sub al, 0x99 + jle 0xf79 + push esi + cmpsb + inc ecx + sub dword [fs:eax+0x68], 0x7ef16c89 + xor [esi-0x4e], dh + cmp al, 0xa4 + ror byte [esi+0x4d005502], 0x8 + scasb + mul edi + aaa + out 0x11, al + or ah, [edi+0x7ee5927a] + fxch4 st1 + pop ecx + add al, 0x60 + inc ebp + pushad + xor bl, [ebx+0x35f387ce] + add al, [edi+0x1c8087e3] + sahf + sub esi, ecx + invalid + dec edx + outsb + and al, 0x50 + popfd + pop ebp + int 0x92 + rcl dword [ebp+0x19f7c430], 1 + iretd + mov [0x9814d961], al + push ss + stosd + mov al, [0xe6444d13] + sub [ebx+0xfef7182a], edx + sub eax, 0x8fd0971c + push edx + sbb ecx, esp + retf 0x3ab0 + xor al, 0x97 + adc [eax], edi + jle 0xf8d + adc [ebx+0x12ac2e1d], edi + rcl ebx, 1 + jnp 0xfa9 + fist dword [edi+esi*8+0x61] + ja 0xfb0 + scasd + push eax + mov esp, 0x4e0f5827 + dec edi + stc + invalid + jnp 0x1027 + xchg esp, eax + push ebx + push edi + jnz 0x105f + mov [0x929b4468], eax + sub al, 0x57 + and dword [esi+esi*4+0xe029656], 0x718b6ad2 + xchg esi, eax + clc + aas + xchg ecx, eax + jmp 0x41fee261 + invalid + cmp byte [esp+ecx], 0xd0 + pop eax + dec ebp + jp 0x1051 + outsd + test al, 0x78 + mov bh, 0xd3 + out 0x69, eax + mov [0x3a661122], al + aad 0xf7 + pop esp + xor [ecx-0x4f], esp + iretd + dec edi + mov [eax], ds + mov [0x6689ce77], al + adc eax, [eax+0x9b08b3b8] + sbb [ecx], esi + shr esp, cl + js 0x1035 + jmp 0x20210c31 + aas + cmpsd + jge 0x1090 + mov [edi+0x6445aac3], cr1 + test [eax+0x57], ebp + push eax + in al, 0x10 + int3 + loope 0x1051 + jns 0x1054 + call 0xffffffff8df4850a + mov ah, 0x7c + sar dword [edx+eax], 1 + mov esi, 0x2ededbe8 + rol dword [ebx+0x1d65e59b], 0x60 + scasd + mov cl, 0xe0 + dec edx + or [ecx-0x6d], edi + daa + add al, 0x7c + into + adc esp, 0x5101715 + jnz 0x1089 + sbb al, 0x4d + dec edi + or ah, [edx] + push dword 0x4c073002 + dec edx + o16 cld + sbb [fs:esi], bl + ja 0x103c + pop ebp + push ebp + retf 0xb295 + push esi + lfs edx, [ebp+0xdd081c59] + mov [eax+0xa8511d4], cl + invalid + iretd + call dword 0x8140:0x5a3afeb + jecxz 0x1123 + xchg edi, eax + call dword 0xf0aa:0x9856f431 + stosd + push esi + or eax, 0x5769a868 + fnstenv [ebx+eax*2+0x3a] + fmul qword [edx-0x76] + pop ss + pop ebp + jle 0x10a3 + pop ebx + adc eax, 0x90e1b11f + out dx, eax + xchg esp, eax + dec ecx + cmpsd + xchg esi, eax + sub edi, ebp + imul byte [edi+0x90a85bb] + rcl ebx, 1 + mov esi, 0x2e7eab26 + loopnz 0x10eb + jae 0x1180 + clc + out 0x76, al + pop eax + loop 0x1137 + mov [0x44d0fdf], al + adc ecx, [esi+0x2e] + mov ch, 0xde + retf 0x2df + in eax, dx + loopnz 0x10ad + and dl, [ebp+0x28] + invalid + cmp [eax*4+0xf6612c8b], dl + movsd + lodsd + cmp eax, [edx+0x954bbe12] + push eax + int1 + lodsd + jo 0x110b + pop esi + push edx + mov al, ah + iretd + push ebp + add eax, 0x3014be2a + xchg ecx, eax + cmp esi, [ecx+0x8] + ret 0x6b83 + mov dh, 0xbe + insb + arpl [edx], cx + and [edi], edx + clc + loope 0x10e3 + rep cdq + pop ds + jnp 0x110f + sbb eax, 0x9a64c8f1 + mov bh, 0x98 + sub [edi+0xd9e81ab1], edx + into + push ecx + mov [0xb884f280], eax + sti + nop + xchg edi, eax + push edi + js 0x117e + repne insb + rcpps xmm4, xmm7 + fstp qword [0x67acc747] + add edx, [ecx+0x8a9204f2] + das + lds edx, [ebp+0x18] + cmp al, 0xce + popfd + rcr byte [ebp-0x24], 1 + jns 0x113f + adc esp, [0x449f06e8] + mov esp, 0x81827652 + std + leave + into + invalid + push cs + mov ecx, 0x83ba4d00 + cmc + sbb eax, 0x4233b376 + pop ebp + push cs + pop ss + repne rcl dword [eax], 0x25 + invalid + jb 0x11db + test al, 0xb6 + lodsd + loope 0x11f6 + into + jecxz 0x11fb + xlatb + push esp + rol dword [edi], 0x91 + mov cl, [edi+0x7c227c17] + mov [0x4ab6de35], eax + mov edi, 0x41fc12f1 + retf + or al, 0xe5 + and al, 0xe3 + std + mov [edi+esi*2+0xe9ac9bb6], cr0 + mov eax, [0xf6a896cb] + and al, 0xfe + out dx, eax + dec esi + pushfd + xchg ebp, eax + xchg esi, eax + xor cl, [ebx] + adc dword [edx], 0x1d + push 0x1b + out dx, eax + xor eax, 0xead77ae7 + ret + or [edx], ch + o16 salc + pop edx + jb 0x11da + dec ebx + or bl, bh + lahf + call 0x7374fe67 + or [eax+0x1e], edx + in eax, dx + jmp 0x1252 + push dword 0x44fc27c4 + sahf + pushad + int 0x97 + aad 0x64 + int1 + add eax, 0x2db9f27a + dec eax + sbb esp, edi + push ds + cmp eax, ebp + jmp 0x11e8 + mov al, [0x899bd4d5] + sbb eax, 0xb615e1c0 + sub dh, [ecx+0xe3ae225] + and dword [ecx-0x76], 0xb99f8636 + test [ecx+0xc7bba943], cl + xor [edi-0x3d], dl + sbb eax, [eax] + xchg [edx], bl + mov [0xab0c392e], al + hlt + insb + inc ebx + or [eax+ebx*2-0x62], bl + out dx, al + mov [0xe52d324f], eax + dec edi + pop edx + mov al, [0xabf8316e] + test [edx], bh + shr dword [edi], 1 + fadd st1, st0 + inc edi + fidivr word [ebp-0x2d] + pop esp + mov ecx, ss + out dx, eax + invalid + add al, 0xb6 + jo 0x1276 + shr word [ecx], 1 + invalid + push ebp + retf 0x8a07 + neg byte [esi+0x2e311678] + salc + ror dword [edi+0x7d1712ae], 1 + pop ebp + cmp al, 0xd6 + shr byte [ecx-0x76], 0xab + jae 0x1317 + adc eax, esi + mov bl, 0x2a + mov al, [0x1efe9cf] + jz 0x131f + sbb ah, [edi-0x72] + cmpsb + mov eax, 0x3dd9209 + test [ecx+0x4], ch + shl [ebx+0xe7b11174], cl + shl byte [eax+ebx*2-0x23], 1 + test eax, 0xad5699b6 + insb + rep int 0xc5 + imul esi, [esi+0xd418baf4], 0xdc3e6aa9 + mov al, [0x14f5a367] + fcmove st0, st1 + sbb [edx-0x64], esp + cmp eax, 0x3f7b46d1 + pop ss + xchg ebx, eax + std + out dx, al + in al, 0x2d + sub [ecx+ebp*4+0x3257ed1b], ecx + hlt + retf 0x52a7 + repne daa + clc + jp 0x1372 + pop ecx + mov ch, 0x16 + pop edi + movsd + inc esp + mov al, [0xf676f88] + movsd + lea ebx, [edi] + salc + pop ds + add cl, bh + push ss + dec eax + ret + lds edi, [edi+0x9aa0bc93] + fst qword [ebp-0x60] + xor ch, [ecx-0xc] + o16 jl 0x131b + int1 + dec edx + jg 0x134d + pop ebx + pop ss + cmp al, 0x16 + and ecx, ecx + push esp + into + sti + mov eax, [0x2e5f2e6d] + cmp bl, [ebx] + fprem1 + inc ebp + a16 outsd + pushad + inc ecx + fidivr word [edi+0x19a7fbfd] + les eax, [edi] + in eax, 0x3a + push ds + imul esp, [ebp+0xb22daf9a], 0xf9b49a78 + sbb byte [gs:ebp+0x9452f2a0], 0xeb + mov dh, 0x5a + loopnz 0x1307 + or [0xc91f31f1], ch + sbb eax, ebp + outsb + push ss + invalid + mov ebx, 0xd15a3fdb + and ebp, ebx + movsb + cmpsd + jmp dword 0x69f8:0xf3d094f7 + add al, 0x4e + xchg [esi], esp + sbb [ecx+0x6f], esi + pop eax + push ds + mov fs, [eax+0xcfd6d55c] + arpl [edx+0x4d], sp + mov dl, dh + scasd + xlatb + sub bl, [eax+0xcdd52985] + mov eax, [0x9a135194] + xor eax, 0xce07ef5f + push eax + mov ss, ebp + insb + and byte [ebp+eax*4-0x54], 0x9f + push esp + mov esp, 0xe5950f68 + mov al, [0x9dfefe12] + lodsd + repne jno 0x139c + jb 0x13ca + xlatb + or [ebx], esp + popad + jp 0x1370 + call dword far [edx+ecx*8+0x9a417f96] + mov esi, 0xe6ba140e + loope 0x135f + int1 + add dl, bl + shl dword [edx], cl + cmp ah, bh + adc eax, 0x6ce8b335 + shr cl, 1 + fst dword [ss:ebp+0x1548eb37] + adc al, 0x16 + mov dword [esi], 0x9b74e96e + mov al, [0xd7d81053] + mov ebp, 0xa9ecffe0 + and ecx, ecx + jb 0x13f1 + invalid + cdq + scasd + push 0xa3 + movsd + jno 0x13fa + int1 + popfd + inc ebp + ret 0x7d8 + inc edx + mov ax, 0x3b54 + imul esp, [ecx], 0x49ee5bc3 + pop esp + and eax, 0x910ef28a + dec esp + xchg esi, eax + stc + jle 0x143a + jmp 0x13c2 + test [0xcd2f4cd4], ebp + mov esi, 0xa806610a + fnstcw word [eax+0xe1224195] + xchg edx, eax + cmpsd + inc esp + push esi + sbb [eax+edi*4], ebp + leave + fld dword [edx+0xa557439d] + mov ecx, [edi+0x582c6389] + test eax, 0x22d7aebd + js 0x1429 + sar dword [edx+0x4f332cec], 0xdf + xor cl, ah + mov [0x9c31a845], al + dec esp + inc edx + add [ebx+esi+0xffba64f4], esp + std + jbe 0x13fc + cmp edi, [ecx+0x55843717] + xchg ebx, eax + enter 0xd9ab, 0xfc + rcl byte [ebp+0x3f], cl + adc [edx+0x834fddb3], eax + sub al, 0x3a + mov al, [0xc6bb70d2] + and [edx-0x32], eax + jnz 0x14d0 + pop esp + or [ecx-0x61], ch + sub bh, 0xe4 + out 0xe3, al + mov ah, ah + cmp cl, bl + xchg ebp, eax + js 0x14e2 + add eax, 0x647dbe38 + sahf + xchg ebx, eax + loope 0x14dd + popfd + mov al, [0x7f296e05] + cmp eax, 0x283b3c3b + sub al, 0xb8 + inc esp + wait + xchg ebx, eax + and [ecx], esi + mov ecx, 0x26b9bfa3 + mov ah, 0xe + les eax, [edx-0x1f] + jle 0x151b + movsb + lock sbb al, 0x1a + jl 0x14ad + sub al, 0x21 + test [ebx], dl + add eax, esi + insd + inc ebp + cmc + xor eax, 0x58f5af66 + enter 0xa7, 0xa9 + or dword [edx], 0xba + inc esi + mov ebx, 0xe87ff0ca + jmp dword 0xd22f:0x3c694d5e + inc edi + int1 + in eax, 0x77 + out dx, al + and al, 0xf7 + stosd + and [eax+0xa00fbaac], ah + push esi + jnz 0x14bc + jz 0x1540 + into + inc esi + mov al, [0xf9978476] + inc edi + ret 0x77ca + adc eax, 0xf17e329d + mov ch, 0xad + repne dec esi + fisub word [ecx] + mov bh, 0x95 + scasd + mov ebp, 0xe42974fa + shl dword [cs:eax+0x7d], 0xb5 + bound edx, [edx] + outsd + fsubr st0, st5 + fcom qword [ecx-0x57] + cwde + bound edx, [edx+0x7f] + push eax + dec edi + cdq + pop es + inc byte [esp] + or ah, ch + pop ds + lea esp, [edx] + mov esi, 0x22fa717f + lock mov dh, 0x1d + jb 0x14ca + sub eax, 0xe4721f1d + out dx, al + wait + adc al, [ecx+0x7e159d2e] + xchg [eax+0x59], cl + dec ebp + retf 0xd5f8 + lock mov ah, al + lahf + mov [0x394bf5ea], al + test al, 0x45 + out 0x11, al + fidivr dword [ebx] + cmp esp, esp + xor al, 0x1 + lahf + pop eax + sbb ebp, [ecx] + pop esp + jmp 0x15a1 + adc [eax+0xae82cca9], edi + mov ebx, 0x4081775a + push ecx + and dh, [edi+0x167a0a1c] + aad 0x60 + or al, 0x84 + cmp eax, 0x9ca782ad + xchg [edx+0x2], ecx + add [ecx+0xda06ed7], ch + or [ecx+0x155f52cb], dl + daa + sub eax, 0x5c5c79e3 + push ebx + arpl [edi+ecx*4], bp + jns 0x1558 + dec ecx + mov eax, 0xa9a984a2 + test al, 0xd2 + adc edx, ebp + mov bh, [esi] + xor dl, al + xchg [edx], dh + o16 mov ah, 0xc3 + wait + add [ebx-0x4], cl + inc ebx + repne iretd + xor dh, [eax] + outsb + mov [ebx], gs + leave + add edx, ebx + inc ecx + push edx + ret + sub al, 0x73 + jz 0x15c4 + jz 0x15e1 + imul dword [ecx+0xc6423607] + movsd + pop edi + std + adc eax, 0xa9a370cb + fdivr qword [edi] + and ah, 0xe2 + stosd + dec edi + aam 0x42 + jg 0x15dc + movsb + test edi, esp + inc esp + adc bh, bl + a16 jmp 0x3f9e287b + int3 + jp 0x1619 + in eax, 0xad + rcr dword [edi+0x7cc0d60a], 1 + invalid + cmc + adc edx, ebp + mov al, dl + sub bh, [ebp+0x9386cb04] + sbb [ecx+0x6], edi + adc al, 0xe4 + pop es + mov bl, 0x1e + rcr dword [eax-0x5b], 0x13 + push es + and eax, 0xf37ffe65 + push edi + xchg edx, eax + and eax, 0x23999b38 + rcl byte [0x1181eca], 0x2f + cmpsb + call dword 0xbe08:0xae7022fd + salc + ja 0x16ac + fidiv dword [ebx] + jnz 0x1613 + jno 0x1612 + hlt + clc + push ss + adc ah, 0xaf + popad + dec edi + mov [0x6ed1dcaf], al + mov al, [0x56eabb59] + inc eax + cmp ebx, ebp + fnstenv [edx+0x91718544] + sbb eax, 0xc47a9a29 + lea ebp, [edx] + popfd + jno 0x1626 + in al, 0x9e + push esi + a16 hlt + daa + mov [0x905effe7], al + xchg ebx, eax + enter 0x1efc, 0xff + aam 0xba + loopnz 0x161f + jmp 0x4868ed2b + test esp, ebp + a16 pop ebp + cmp ah, [edi+0x30] + out 0xe6, al + sub eax, [esi] + salc + jge 0x16b3 + dec ecx + clc + adc byte [ds:edx-0x1e], 0x3e + rep fstp qword [edi] + push ecx + xchg esi, eax + test al, 0x96 + stc + jz 0x1661 + mov esi, 0x49cfb604 + or eax, 0x6ea9445e + push 0x77 + loop 0x1662 + aas + xchg edi, eax + invalid + invalid + lock das + cmp eax, 0xce5632a8 + xor [edx], dl + xchg ebp, eax + xor al, 0x70 + mul byte [ebx] + shl dword [ebp+0x13], 0x62 + scasb + lds esi, [edi-0x48] + outsd + xchg edx, eax + push ebx + out 0xd9, al + o16 xor bl, [ebx] + int1 + imul ebp, [esi+0x6418118], 0xbb5f1483 + sub edx, [0x3ec270c7] + xor al, 0xc + iretd + lahf + popad + retf 0x474 + jo 0x168a + cmp dl, [ebp+0x439b5eb5] + int1 + invalid + mov dh, 0x82 + mov dh, [ecx+0xbd381018] + nop + and al, 0xda + ja 0x1710 + mov al, [0x74e37a2] + dec esp + enter 0x8c8d, 0x2d + xchg [ebp+0x4ef79e2c], ebp + pop esi + xlatb + xchg edx, eax + lahf + cmpsd + xor edi, [edi+ebx*4+0x35] + mov ah, 0xef + xchg [edi-0x74], ah + pop esp + fisub dword [eax+0x5f7e69a0] + adc [ebp+0x56], ch + jno 0x177c + mov esp, 0xe148d095 + ret 0x5abf + or byte [eax+0x8344b9e2], 0xa1 + mov edx, 0x793024a1 + out dx, al + add eax, 0x38760464 + ret 0xf750 + mov eax, [ebp+0x22334ef8] + aaa + sbb edx, [edx+0x62a36164] + pop esi + retf 0x78ab + push esi + stosb + or [edi], ebp + or ch, [esi+esi*8+0x67] + std + jae 0x172e + test dword [edi-0x76], 0x4d148686 + sti + pop edx + fs lodsb + cmc + add [0x9ad6f4f], ecx + hlt + adc ecx, eax + mov bl, ch + jmp dword 0xe227:0x3bf35c6b + fdiv st0, st1 + or eax, 0x723b6a7b + pop ebp + inc ecx + call 0x61e56998 + int3 + sbb edx, [esi] + popfd + movsb + fcom dword [edx] + rcr dword [ebp+0xe45455ab], cl + test ebp, 0x9be65a09 + adc [edx], eax + out dx, al + ficom word [ebp+0x36] + imul ebp + popad + mov esi, 0x422b9112 + or edx, eax + xchg [esi+0x5571090b], bl + push es + outsb + jg 0x17f2 + cmpsd + mov esp, 0x3fb40b93 + cmpsd + xchg esp, eax + movsb + mov esp, 0xdac30464 + rep inc ebx + pushfd + or al, 0x20 + mov esi, 0x2a8c97b2 + imul edx, esp, 0xbb0ca76e + js 0x17b6 + jz 0x17eb + dec esp + jmp dword far [ecx-0xa] + mov eax, [0xa1397eef] + jbe 0x186b + lahf + popfd + mov [0x5b35f5c8], eax + test al, 0xe9 + xchg ebp, eax + mov al, [0xbd7b3ea9] + enter 0x77a3, 0x1f + test [ebp+0x85ab2579], cl + or eax, [ebx] + lodsd + sub [ecx+0x909980eb], edx + imul esp, [0x935cfa8c], 0xc4 + ret + insb + xor ch, [edi] + retf 0xd0d4 + nop + mov esi, 0x856de28d + sahf + arpl [esi+0xa10ff2ab], sp + pop ss + mov cl, 0x0 + adc al, 0x6c + retf + aas + push cs + inc eax + inc ebx + push 0xe6 + dec ebp + jb 0x183d + jmp 0x180e + sar al, 0xef + loopnz 0x17e6 + or eax, ebp + int3 + dec byte [ebx-0x2d] + stosb + wait + sub [edi+0xf0ae0922], dl + xor eax, 0x4a765e6 + insd + pop eax + xchg ebp, eax + pushfd + pop ebp + and eax, 0xdc381f2 + shl esp, 0x76 + push eax + inc edx + or [0xa8d94f4e], cl + scasb + cmp al, 0x68 + pop esp + scasd + add [0x737676eb], dh + adc [ebp+0xf4a7402], bl + mov al, 0xde + out 0x4d, eax + mov ebx, [edx+0xa5c12fe] + jae 0x18f9 + sahf + xlatb + scasb + hlt + mov ecx, 0x457d4b74 + out dx, al + jns 0x18eb + cmc + arpl [edi], di + sbb eax, 0x20250ec9 + xchg ecx, eax + mov edi, 0x43b176c7 + iretd + pushad + aad 0xe6 + pushfd + std + pop esp + xor al, 0x91 + push ebx + shr [eax], cl + mov [0xf35bbb75], eax + jnz 0x18a7 + or al, [edi+0x33] + out 0x27, eax + rol eax, cl + test [ebx+0x3f], dl + push edi + and eax, 0x32b2babb + push esi + out 0x5e, eax + jo 0x1932 + outsd + stc + push esi + loop 0x18e2 + sub [edx+0xedd73d02], eax + and [eax+0x4f821eb9], edi + xchg edx, eax + das + jp 0x18f2 + bound esi, [ebp+0x28] + rol byte [edx+0x9453e536], 0x4f + jae 0x18e3 + xchg ebx, eax + pop edi + out 0x95, eax + aam 0x90 + ret 0x476e + iretd + sar dword [edx+0x87489f23], cl + add byte [eax+edi*4+0x5fc8a2c2], 0x5f + out dx, al + jno 0x18b4 + and al, 0xa1 + xchg edx, eax + aad 0x93 + wait + jz 0x197a + fild dword [ecx+0xc009371] + sub ecx, [eax+0x7979f270] + mov edi, ecx + invalid + mov [eax+0x5cc0975], cs + sti + mov ecx, 0x1dcf877a + fild word [ebp-0x6d] + dec ebp + in al, 0xb7 + clc + push eax + xor ecx, [0x410073a] + rcl dword [edx+0xacceaba6], cl + pop esi + jnp 0x19a4 + push dword 0x80472ab8 + adc [ecx+0xc143b03e], dh + pop eax + push esp + push dword 0x6d340323 + out dx, al + mov esp, 0x1c36e32 + xor ebp, [edi+0xe] + mov esi, 0x4c42f9c7 + xor eax, 0xd6340960 + push cs + pop esp + add [ebx+ecx*8], ecx + cmp eax, 0x32b1191a + dec esi + sbb dl, [eax+0x4537a12c] + cwde + mov ecx, 0xc38677a + cmp [eax+0x61fcb9a5], dh + sbb [esi+0xa3237468], ebx + cmp eax, [edx+0x4e] + jz 0x19f0 + loop 0x195c + cmp bh, [0x480f5d21] + add cl, [ecx+ebp*4-0x1d] + pop ss + mov cl, cl + mov [esp+ebx+0xd679ae35], ecx + in eax, dx + xor [ebx+0x2f], ch + invalid + push edx + test [esi+0xa24e80d2], bh + outsd + stosb + add [fs:eax], dl + stosb + jno 0x19a1 + arpl [esi+0x57], cx + aas + mov al, 0xd4 + sub edi, eax + retf 0x3e58 + cmp [esi-0x1e], edx + sti + outsb + xchg esp, eax + loope 0x1a4d + jp 0x1a3b + les ebx, [edi+ecx] + daa + invalid + retf 0xbf6c + mov dh, al + mov ebx, [ebp+0x30fd636f] + pop ebp + xor bh, cl + mov [edx-0x6d], ch + xchg ecx, eax + sti + sar dword [ecx+0x40], cl + mov ebx, 0x1a7e9f97 + a16 sti + add [esi], al + pop ebp + fcmovb st0, st2 + shl dword [edx-0x34], 1 + push edx + push edi + push esi + push esi + jmp dword near [edx+esi+0x78110a68] + sbb ebx, eax + ror byte [edi-0x38], 1 + shl dword [ebx], cl + call dword far [ecx+edx*2+0xbe0c08f7] + cmp byte [ebx*4+0x9279f9c8], 0x49 + dec esi + jo 0x1a4f + lodsb + or al, 0xca + jmp dword 0x8462:0x9c7d7faa + dec esi + inc ebx + inc ecx + neg dword [ebx+ebp*8+0x4] + stosd + mov esp, 0x40475c82 + insd + or [eax+edx*8+0xd49a265c], al + bound eax, [edi] + xchg ecx, eax + pop esi + nop + pop esp + cmp [esi+0xc7ea6095], ah + fcmovb st0, st1 + xchg ecx, eax + pop ecx + pushfd + o16 cmc + call 0xffffffff8ce66f4d + inc esi + dec ecx + mov bl, 0xc9 + daa + jo 0x1ac9 + dec ebx + fcomi st0, st5 + repne outsb + invalid + or bh, [eax+0x39] + sub ah, [eax] + mov dl, 0xb3 + sub al, 0x98 + push edx + mov [eax+0xe], ah + shl [edi+0x6eb5866c], cl + inc ebp + js 0x1aab + movsb + xchg esp, eax + cmp al, 0x46 + mov eax, [0x8568d8a4] + add eax, 0x4fb8fbde + insd + mov al, 0xa + jo 0x1b05 + xor ebx, esp + pop ds + js 0x1a86 + nop + pushfd + jnz 0x1ae9 + push esi + retf 0x694b + rcl byte [edx-0x56], cl + out dx, al + scasd + lds edi, [edi+0xe] + sahf + imul edx, [eax+0x6ddee1d1], 0xbec11bee + sbb [edi+0x39], bh + inc ebx + mov al, [0x984c8f12] + dec esi + wait + sub [eax-0x48], eax + test al, 0x3a + add [ebx+0x98d27779], esi + jmp 0xfffffffff3e40cd7 + mov edx, 0x31d63c22 + dec edx + call dword 0xbb46:0x74171464 + popfd + cwde + jns 0x1aa5 + fmul dword [edi] + mov [ebx-0x35], edx + jle 0x1ac1 + lodsd + pop ss + iretd + mov [edx+0x781582cd], ch + or edi, [edx] + add dword [ds:edx+ecx+0xb24566e1], 0x4e + add dl, [eax+0xcffce565] + invalid + dec edi + jae 0x1ad4 + aam 0x6b + sbb esi, [edx+0xbb865de6] + adc [eax+eax*4], dl + fdivrp st1, st0 + cmp al, 0x91 + mov edx, [ecx+0x46] + sbb al, 0x68 + outsb + adc al, 0x91 + mov al, 0x9 + jmp 0xfffffffff0b2372c + call dword near [edx] + add eax, 0x1b448cbb + pop ds + mov ch, 0x79 + out 0xca, eax + mov edx, 0x8ab07a67 + aad 0x51 + shr edi, 0xb7 + xor [ebx], edx + pop esp + mov cr1, eax + shl dword [ecx+0x864fe304], cl + and [0x5e540579], ebx + out 0xe2, eax + xor dh, [esi+0x7a] + add al, 0xa3 + call dword 0x469a:0xfd50e644 + xchg [cs:ecx+0xe023bffd], bh + add [ebp+0x13c88cdb], ch + dec esi + fnstenv [ecx+0x96b54189] + sbb ah, cl + xchg edi, eax + adc cl, ch + in al, 0x61 + jecxz 0x1b3f + movsd + mov edi, 0xfba7b96 + xchg ebp, eax + dec esp + and eax, 0xf98baabd + fidivr word [ebx-0x65] + adc [ebx+0xaf62d52a], cl + invalid + js 0x1b68 + test al, 0x15 + dec eax + sti + dec ebx + stosb + or dh, ch + fldenv [0x85448ab9] + inc edx + in al, dx + add bh, [ebx+0x665b4789] + mov [edi], dh + mov esi, 0xa21f773b + inc edx + sbb eax, [ebx-0xb] + aaa + into + push esi + cmp eax, 0x68b484b6 + pop esi + cmp al, 0x52 + sbb bl, [ebx+0x3a] + mov esp, 0xaed65363 + mov eax, 0x5e63d139 + mov dh, 0xe9 + outsb + repne sbb [eax], cx + scasd + bound eax, [ecx+0x57471095] + test cl, al + cmp ebp, eax + dec eax + hlt + repne xchg [esi+eax*2-0x54], bl + or eax, 0xd8650c5e + jnz 0x1bd7 + cmp bl, bh + or [ecx-0x28], ecx + ret 0xd22c + invalid + pop edi + scasb + xchg [ebp+0x7], ecx + pop ds + dec eax + movsb + ret + jl 0x1bde + pop edx + std + mov ebp, 0xab4c7bf4 + dec edi + pushad + xor al, 0x7a + ret 0xf29c + invalid + sub [esi+0x6687ba93], esp + push esp + mov dl, 0xbb + fldenv [esi] + sbb al, 0xa1 + fstp tword [ebp+0xf597d88d] + cmpsd + mov al, 0x3f + in al, dx + cli + xchg esp, eax + mov edi, 0xb30543cb + pop ebx + rcr dword [ebx+0x30], 0x67 + sub dh, [ebp+0x1d] + pop edi + test [ebx+0x6e], ch + inc esp + xchg [ebx+0x657aa8b5], esp + salc + and byte [ecx+0x703156eb], 0xb5 + sbb ch, [0x16860c65] + cmp [eax-0x1d], edx + mov es, [edx+0x25cbccdb] + xor [ss:eax+0x2c97cfd0], esp + cmc + dec ecx + loop 0x1c87 + loopnz 0x1c57 + jnp 0x1c40 + invalid + neg dword [ebx+0x156d414b] + nop + salc + loopnz 0x1bfc + movsb + das + pop ebp + out 0x5c, eax + push cs + invalid + push edi + adc edi, edx + sbb eax, [ebp+0x8d333704] + mov es, edx + int 0x30 + outsd + mov eax, [0x6de489de] + loope 0x1cc0 + push cs + jnz 0x1c64 + pop ds + jge 0x1c94 + add eax, 0x3dba2e6 + cmp dh, ch + dec eax + mov edi, 0x63c90f79 + insd + pop ebp + jo 0x1d23 + nop [edi+0x65] + jz 0x1cdc + adc cl, ah + aaa + pop ds + mov [0xd7b4ab26], al + xchg ebx, eax + iretd + salc + sbb [edi], edi + inc edi + in al, 0x2c + pop ecx + pop ebx + rep insd + scasd + add byte [esi], 0xbd + pop es + mov bh, 0xc9 + invalid + cdq + xlatb + out dx, eax + retf + and al, 0x70 + push ebp + push cs + pop edi + cmp eax, 0x67917e82 + or esp, ebx + retf + in al, 0x3a + jno 0x1d19 + cmp [ecx-0x47], bh + in al, 0x35 + mov eax, 0x5264b9bd + push esp + jo 0x1d1e + dec eax + mov ah, 0x89 + rol dword [eax-0x65], cl + in eax, 0x2d + mov ah, 0x36 + invalid + sti + push edx + invalid + lodsb + or al, 0x9d + mov eax, 0x170bfc4d + sbb dl, [edi+0xb3f1a637] + xor al, 0x89 + int 0x35 + sahf + out 0x81, eax + invalid + sti + xchg ecx, eax + retf + invalid + jmp 0xffffffffdbe510b0 + push ecx + dec ebx + jno 0x1cd3 + fldcw word [esi+0x12d2c7bf] + bswap eax + mov edi, 0xd7354899 + aam 0xbf + cwde + pop ds + mov al, 0x5b + pop ds + ror byte [esi], 0xed + or ebx, esi + fdivr dword [edi+0x25] + xchg [ecx+eax*8-0x47], al + sub [0xfcde707f], ecx + jae 0x1d67 + jae 0x1d5c + wait + cmpsd + daa + mov edx, 0x8dbce596 + jle 0x1d8a + iretd + std + lodsb + sbb [edx+0x206cc62b], ebp + lds ebp, [esi] + pushfd + jmp 0x1d3e + push es + pop es + mov edi, 0x82cd3871 + mov edx, 0xb24f9fa6 + sbb dword [edi+0x3d7a8375], 0x7f3dbb4b + lea esi, [ebx+0xb] + sub al, 0x7b + o16 ja 0x1dc3 + sar edi, 0xf + cdq + cwde + mov eax, [0x776c0b6c] + mov dh, 0xa7 + add cl, [ecx+0x7e] + push esp + mov ch, [eax] + and edx, esi + scasb + fcom2 st7 + fstp qword [eax+edx*8] + lodsb + push esp + jnz 0x1d35 + out dx, al + wait + adc ch, [ebx+0x56d5937d] + test eax, 0x54713fe4 + loopnz 0x1d6b + xor eax, [ebp+0x72fd7a5e] + jmp 0x1dc4 + in al, 0xfd + into + a16 mov eax, 0x3c9c07ca + invalid + dec ecx + ret + and bl, al + mov ebx, gs + xor [edi], esi + push ss + push ecx + cdq + mov dl, 0x83 + int1 + ret 0xb54 + out dx, al + cmp al, 0x92 + xchg esi, eax + sbb dh, cl + mov ebx, [edx-0x49] + pop es + xlatb + lodsb + imul ebp, [eax+0xa594032b], 0x18 + nop + int1 + loopnz 0x1df9 + dec edi + mov cl, 0x1a + mov ch, al + jae 0x1df6 + inc esp + push edi + sub al, 0xe4 + or ah, bl + xchg ebx, eax + pop ds + fsub qword [edx-0x46] + out 0xd4, al + xor al, ah + int3 + jp 0x1e4e + and ecx, esi + call 0x31131af9 + pop edx + outsd + pop es + or [eax+0x4b45f86], edx + cmp [ebx-0x13], al + ja 0x1e05 + pop esp + jbe 0x1e31 + jge 0x1e1a + enter 0x1445, 0xe4 + les edi, [esi+0x5e] + nop + jle 0x1e76 + aaa + ja 0x1ea5 + ja 0x1e29 + or [ebx], ecx + pop ss + movsd + xor dl, al + add byte [edi], 0x83 + repne jmp 0x1dc9 + jmp 0xffffffffe25d2049 + mov edx, [edx+0x25] + mov dl, 0xfe + pop esi + int1 + test ebp, edi + jmp 0x1e47 + movsd + mov edi, 0x3acb210b + jo 0x1e45 + mov ah, 0x1d + and [eax+edx+0x37], bh + out dx, al + invalid diff --git a/tests/randtest64.ref b/tests/randtest64.ref new file mode 100644 index 0000000..43c788e --- /dev/null +++ b/tests/randtest64.ref @@ -0,0 +1,2882 @@ + mov edi, 0x95804fae + int1 + cli + lea eax, [r8] + or al, 0xeb + invalid + add eax, 0xcfca3a9d + xor eax, 0xfca13235 + add dword [gs:rax], 0xf8 + out dx, eax + invalid + adc [rsi+0x63], ebp + js 0xffffffffffffffe4 + invalid + outsb + mov cr1, [rcx-0x6e] + jnp 0xffffffffffffffac + xchg esi, eax + invalid + lahf + add bl, ch + out 0x9f, al + sar dword [rcx-0x61], 1 + invalid + invalid + invalid + jrcxz 0xffffffffffffffbd + invalid + lock jl 0x81 + mov ecx, 0xc0d32522 + out 0x70, eax + push rsi + invalid + invalid + in al, dx + xchg ecx, eax + and ebp, esi + push rcx + mov cl, 0xc8 + sbb al, 0x78 + invalid + shr ebp, 1 + adc bh, [rcx+0x7b] + pop qword [rax-0x1] + jb 0x3e + xlatb + invalid + add dword [rcx+rdx*8+0x6df499f7], 0x97 + mov gs, [rsi] + loope 0x71 + mov al, 0x96 + adc [rbx-0x6d93a7a2], ah + ret 0x7e85 + add ch, ch + invalid + invalid + xchg esi, eax + mov bl, 0xe4 + mov cr0, [rcx-0x250e7f9] + inc byte [rbx+rbp*4] + sbb dword [rsi+rcx*2], 0x9c886f44 + push rdi + mov ecx, 0xd409a448 + adc al, 0xe9 + insd + sub cl, bl + invalid + cmc + invalid + add [rdi], bl + pop rcx + mov [rdi], ch + xchg edx, eax + invalid + and [rcx], esp + push rbx + jbe 0xde + mov [rcx], edi + sar cl, cl + add [rbx+0x5e], cl + iretd + invalid + mov gs, [rdx] + adc eax, 0x1107e2e1 + push rax + repne gs movsb + scasb + a32 jae 0x130 + ret + cmp eax, 0x5fe11475 + stosd + insd + xor [rsp+0x69f80098], esi + xor eax, ebp + int3 + push 0xc8 + cmp esi, [rdi-0x643cd6a8] + invalid + xor al, [rax-0x5eae3741] + mov [0x93de01ed705fa0e8], eax + xor byte [rcx+0x4f], 0x37 + ja 0xa6 + xlatb + o16 shl [rax], cl + mov bh, 0x91 + push rbp + push rsi + nop + push rsp + mov bl, 0x83 + invalid + pop rcx + mov ebx, 0xcf58c4e3 + mov ecx, [rax+0x20] + jbe 0x145 + o16 js 0x94 + xor ch, [rax-0x65] + sahf + or dil, [r14-0x243d2266] + and eax, 0x8134fcda + xchg [rdx], bh + mov al, 0xd0 + xchg esp, eax + invalid + sub eax, 0xe7fb27a4 + cmc + and eax, 0x7f5f47f6 + jno 0x198 + and dword [rsi-0x79], 0x84d0c980 + cdq + div word [rdi-0x44] + sub bl, ch + push rsp + or [rcx-0x522c65b6], dl + jnp 0xea + movsd + sub al, 0xe0 + wait + invalid + invalid + invalid + test al, 0x7b + int3 + cmpsd + in al, 0xac + mov dl, 0xd8 + push rsp + add edi, ecx + invalid + invalid + bswap ebp + sbb eax, 0x132463c4 + sub [rcx-0x674b5c0b], al + fstp8 st1 + or al, 0x40 + out dx, eax + or [rcx-0x47], esp + jae 0x162 + call 0xffffffff95858333 + invalid + ficom dword [rcx] + movsb + invalid + mov al, 0x78 + xor eax, 0x62526832 + int1 + or [rax-0x19702e11], cl + xchg ecx, eax + jns 0x112 + pushfq + jb 0x1cd + ficom word [rsi] + invalid + invalid + loopnz 0x14f + push rax + xor [rax+0x2f], esp + cli + insd + invalid + jz 0x1d1 + imul ebp, [rsi+0x3], 0x4cc67437 + fbstp [rax] + ret 0x7e91 + xor eax, 0x9d1189e + xchg edi, eax + sub eax, 0xe34fb563 + adc dword [rdx+0x50], 0xbe + mov fs, [rsi] + sbb eax, 0x8507dfba + pop rsi + xchg [fs:rdi+0x772f0d6d], esi + movsb + invalid + pop rbx + add [rbx-0x3c2bb051], edx + add ebp, [rsi] + xor esi, [rbx+rdx*8-0x73] + xlatb + mov esp, 0x84e415b + invalid + iretd + and esi, [rbx+0x42] + int3 + push rsi + sbb esp, [rdi] + jnz 0x222 + mov edx, 0x27656695 + xor dl, dl + outsb + shl dl, 1 + pop rbp + invalid + sub [r14-0x9], r8d + call 0x2d044abe + ret 0xd5d9 + loopnz 0x193 + xchg ebx, eax + or edx, [rdx] + cld + jp 0x227 + and r13b, r11b + invalid + retf + xchg ebp, eax + in eax, 0xf1 + invalid + scasb + invalid + invalid + mov eax, [0xddd71ebe4f574d9e] + lodsb + xor al, 0xa3 + xchg esp, eax + shl dword [rbp-0x4c633132], 0x48 + invalid + test al, 0xdd + mov edi, 0x4ebbc7d3 + movsb + or al, 0x7c + stosd + push rcx + jnp 0x22d + xor bl, [rcx-0x786caa4d] + ror byte [rdx-0x4f], 0xf2 + xchg ebp, eax + lock push rbx + xchg ecx, eax + push rbp + invalid + or eax, 0xbcf5e5cb + ror dl, cl + mov al, [0xd37de9dbc81304ba] + adc edi, esp + std + xor [rsi], edi + out 0x9b, al + invalid + rol byte [rbp+rsi+0x33], 0x47 + or al, 0x73 + jle 0x1f9 + push rax + mov [0xb14468fb5fa687e4], al + xor al, 0xf2 + mov [0x287b5403d8ab4c3], eax + loop 0x267 + fdiv st0, st0 + lodsd + sahf + loopnz 0x2e6 + pop rbp + mov [0xbf562ac34a3a6118], eax + xchg edx, eax + mov eax, [0xb5f0b3f7d9662e8f] + hlt + rcl byte [rax+rdi*8-0x3f], 1 + xor [fs:rdi-0x2b], ch + lahf + push rbx + mov byte [rdi-0x712d8348], 0xac + retf 0xe411 + sbb [rbp+rdx*8-0x1412e356], bl + mov [0x8f318a08bc346bfc], eax + pop rbp + invalid + add [rip+0x22efb4e4], edx + or cl, [rsi] + push rsp + movsxd edx, dword [rip-0x2b463dea] + sar [rcx+0x7d], cl + retf + invalid + mov ebx, 0x93818ee4 + jg 0x2c9 + loope 0x34f + shr dl, 0x87 + invalid + xchg ecx, eax + adc [rdi-0x4a], dl + scasd + push qword [rdi-0x62c36b91] + scasd + in al, 0x1b + push rdi + fdiv qword [rcx+0x5f] + jae 0x2b6 + jg 0x297 + invalid + test eax, 0x9b7c0025 + sub dword [rbx], 0xfe1c3c3d + mov ch, 0xec + cmpsd + jp 0x299 + invalid + push rdi + xor [rdx+rcx*2+0x498841f], edi + mov ebp, 0xf0b2a7ed + jnp 0x35a + sbb [rdi-0x44], ecx + loope 0x392 + add [rbp-0xfea7e27], ecx + movsb + hlt + movsb + invalid + sbb al, 0x2d + cmpsb + cwde + invalid + invalid + mov [0x313df81954c7e06f], eax + push rbp + push rsp + mov edi, 0x78579764 + xor [rbp-0x45], bh + fnstsw word [rcx-0x7f] + invalid + shl dword [rcx], 0xe0 + or esp, [rdi-0x2b2ad6da] + push rdi + movsxd ebx, dword [rdi+0x38ed8291] + in eax, dx + neg qword [rip+0x1d58c367] + stc + insd + mov cl, 0x34 + mov dl, 0x1b + mov eax, [0x35867cbb0c33a1f8] + invalid + mov [rbx], al + invalid + out dx, al + lodsd + invalid + jnz 0x3b5 + movsxd eax, edi + cmpsd + hlt + mov edi, 0x95ac2357 + push rbp + pop r11 + adc eax, 0x8ba88bc4 + shr eax, cl + div byte [r9] + invalid + pop rcx + fstp9 st0 + mov ebp, 0xa44b1a13 + xor esi, [rsi-0x27] + sbb [rsi], edx + ror byte [rcx-0x44c143de], cl + outsd + and edi, [rsi-0x2aca0bcb] + scasd + add [rax], dh + js 0x3dc + invalid + and al, [rbp+0x23c5bfdf] + jge 0x3d9 + xchg edi, eax + test [rcx+0x36], bl + xor eax, 0x2ef2dd51 + mov esi, 0x6cdd5b1f + push rax + fstp qword [rax+0x7a564f77] + movsb + mov esp, 0x6edc8fdc + xor eax, 0x57e4a5d1 + mov edi, 0x4890a0bc + fdivr st0, st2 + popfq + jo 0x39f + invalid + nop + in eax, 0xe + in eax, 0xc1 + cmp [rbp+rbx*2+0x1e18e69a], ah + xchg [rbx+0x514c44bd], ecx + invalid + cmpsd + outsd + stosd + wait + invalid + mov eax, 0xe426f49a + mov esi, 0x3d7db05c + and [rbx+0x34], esi + fisubr dword [rcx+0x9] + stosb + cmp [rdi-0x5f634764], cl + jg 0x44a + cmp [rsi+0x55f9b487], dh + fild qword [rdi+0x31] + pop rax + invalid + mov cl, 0x1f + clc + jns 0x442 + mov ebp, [rdx] + in eax, 0x6 + mov ah, 0x85 + adc ecx, [rbx-0x1d] + jnp 0x3ed + xchg esp, eax + invalid + jg 0x491 + invalid + adc al, 0x11 + fidiv word [rbp+0x4b4154c3] + jle 0x3db + test [rbp+0x72685122], eax + not byte [rdx+0x50] + mov [0xe4e9f270ab3ad9be], al + add eax, 0x6f043646 + mov [0x1d76ebadb9c99ce8], eax + shl dword [rcx-0x71f25365], 1 + adc eax, 0xaddf2af1 + and al, 0x52 + mov cl, al + push rdx + and eax, 0xf6050662 + in al, dx + push rsi + jmp 0x4f3 + push rbx + cld + or al, 0xe4 + jnz 0x4bd + shl byte [rax], 1 + mov ecx, 0x10a2583c + mov esp, 0x8c1432da + jp 0x4af + invalid + jmp dword far [rbx-0x914d8eb] + int 0xbb + outsq + mov dl, 0x55 + sbb al, 0xbb + xchg esp, eax + sbb eax, 0x6752a77e + and eax, 0xd7a1d401 + test eax, 0xcacf5092 + sar dword [rsi-0x77853110], 0xce + mov bh, 0xf7 + and al, 0x80 + cmp [rax+rdx*4], dh + in eax, 0xcf + xor [rsi], ch + scasd + cmp eax, 0x2b823c89 + mov [rax], dh + mov esi, 0x59a0f5b9 + jle 0x47f + hlt + invalid + movsb + lea esi, [rbx+0x33428281] + invalid + mov esp, 0x777cb8f + wait + repne push rsi + adc al, 0xb7 + wait + cmp eax, 0x8468a78a + fstp qword [rdx-0x6816cfc0] + invalid + invalid + mov [0xd3b81bcb2d7023a1], eax + mov r12, 0xb4a79c363ab79fff + lodsd + or dh, [rdx] + invalid + xor [rcx], ecx + mov edi, 0xa1440147 + cmp [rbx-0x1d], eax + mov dword [rsp+rsi*4-0x70], 0xb08aa420 + xchg ebp, eax + sbb ebp, ebx + mov bl, 0x42 + xchg [rbp-0x1f], edi + xor eax, 0x23062d90 + lock add bl, [rbx+0x2] + popfq + leave + sar dword [rcx-0x61], 0x7d + jp 0x4f2 + xchg ebx, eax + mov ecx, 0x76700e5d + fsub dword [rax+0x38de11eb] + scasd + stc + xchg esi, eax + mov al, [0x3429ddfb4efd36a2] + out 0xf6, eax + add eax, 0x28f76ccd + invalid + rep cmpsd + leave + pop rdi + jrcxz 0x52d + retf 0x3450 + mov ch, ah + movsd + stosb + sti + or bl, [rbx+0x1ea54199] + mov al, [0x4a4f4d93383cc0d6] + add [rax], rcx + adc al, 0x6e + leave + adc al, 0x26 + jmp 0x556 + invalid + insd + invalid + invalid + and al, 0xc7 + sub al, 0x77 + or al, 0xae + xchg esp, eax + invalid + retf + repne cmp rax, 0x787cbcd0 + cmp dh, bh + or edx, esi + jo 0x55b + xor al, 0x9b + test byte [rbp-0x428bfe9c], 0xe9 + mov [0xb052f352d2e9e77a], eax + ja 0x57c + fidiv dword [rdx-0x6e519214] + rol bh, 1 + and eax, 0x47c6ad88 + cli + out 0x66, eax + ja 0x5f0 + mov [0x73068a7ed24da31c], al + or eax, 0xd9133977 + xchg ebx, eax + xlatb + cdq + invalid + sahf + mov ebx, 0xff345910 + mov al, [0x83e8a61f5ec8f4c1] + invalid + invalid + jns 0x5b9 + mov bl, 0x7a + adc esi, eax + invalid + hlt + and al, 0x3b + adc [rsi+rcx*8], dl + rep fstp qword [rax+0x23] + out dx, ax + jno 0x59b + imul esp, ebp, 0xfd + or [rbp-0x51bba45e], ah + jrcxz 0x5d4 + cmp bh, ah + in eax, dx + invalid + nop + sbb al, 0xd8 + invalid + jno 0x5ee + fdivr dword [rcx-0x4a] + popfq + invalid + pop rdi + in al, 0xa8 + xchg ebx, eax + mov dh, 0x9f + invalid + out dx, eax + nop + test eax, 0x6ed9741d + mov eax, [0x2761c6f753344910] + invalid + out dx, eax + adc ebx, [rdx-0xd26b757] + sub al, 0x46 + mov eax, 0x83fec441 + mov cl, 0x9d + scasd + cmp esi, eax + sub [rdi-0x66], eax + invalid + sti + invalid + mov al, [0xcca5604125e6ebf3] + test al, 0xc0 + mov cl, 0x39 + insd + jmp 0x627 + add eax, 0xda66295d + cmp [rdi+0x22], edi + push rax + sub al, 0x5e + sbb ecx, [rax] + xchg ecx, eax + out 0xe2, eax + pop rbx + jp 0x653 + invalid + cmp ebp, [rdx+0x2c79fa79] + shl byte [rdx-0x46991cdb], 1 + in al, dx + lodsd + insb + add eax, 0x4e2eb90b + cmp al, 0xfb + sub eax, 0x52f2a8d8 + mov ecx, [rsi+0x8] + and ecx, [rax-0x46070bae] + fcom st0, st7 + int1 + mov esi, 0x700d5708 + mov ebp, 0x678e58a1 + adc esp, [rcx] + adc dword [rax], 0xbf + and dword [rsp+rdx*4], 0xc6 + push rbx + sub eax, 0x9e1fa2af + mov ecx, 0xdcdf29ae + clc + cmp cl, cl + cmc + enter 0x4f3f, 0xf8 + invalid + xchg edx, eax + jno 0x66e + jmp 0x699 + loop 0x6ad + jz 0x66e + invalid + sbb edx, [rbx-0x18] + invalid + sub eax, [rsi+rbp*2-0x378f579e] + mov esp, 0xd4e71aab + or cl, [rip+0x1b1a3f6c] + in eax, 0x7c + sbb eax, 0xb9b94d07 + insd + mov bl, 0x8a + push 0xf9 + sbb ecx, [rax+0x1b31669e] + mov esi, 0xd1de5b3d + js 0x6fc + sbb eax, 0x6ffe0d5 + jge 0x6c6 + insb + ret 0xda6 + mov esp, 0x39e9ba3b + xchg ecx, eax + jle 0x793 + mov edx, 0x840bd8e3 + mov dh, 0xd1 + invalid + xor al, [rax+rcx*8-0x5fa220f] + adc ebx, eax + jle 0x7a4 + jae 0x758 + pop rsi + invalid + hlt + jbe 0x731 + jge 0x78e + ret + in al, dx + lodsd + ja 0x74e + pop rbx + scasd + cld + mov bh, 0xa0 + adc ah, [rax] + sbb al, 0x53 + imul eax, [rcx-0x64f16c76], 0x53744fdc + cmpsb + xchg [rdx+0x64915082], ebp + imul byte [r10-0x5d] + lahf + add eax, 0x6086adde + or al, 0xfb + or eax, 0xa0926d7b + in eax, dx + in al, 0x36 + jbe 0x73d + int1 + xlatb + fidiv dword [rsi] + mov [rdi], dl + inc al + mov [rcx-0x67b89dad], esp + xlatb + mov edx, 0x54abea50 + jo 0x7ae + add dh, [rdi] + fsub qword [rcx] + xor [rdi+rcx+0x48], ebp + lahf + movsxd ebp, dword [rdx-0x4b] + invalid + clc + mov esp, 0x9cbba834 + std + jrcxz 0x7a0 + add r13, [r15-0x40] + mov edx, 0x9717a522 + sub [rsp+rdi*4], ch + lahf + mov esp, 0x47e94f18 + xchg [ds:rsi], esi + pushfq + push rbp + cmp edx, [rdi] + jz 0x834 + xchg esp, eax + invalid + push rcx + invalid + stc + inc byte [rdx+0x53fc8bf5] + sbb ah, [rsi+0xe069e65] + shr edx, cl + in al, dx + invalid + xchg esp, eax + and [rdx], ecx + wait + invalid + jle 0x779 + invalid + mov [rcx-0x65], ah + invalid + jnp 0x7f4 + jmp 0x731edc27 + jns 0x796 + mov cl, 0xba + xor eax, 0x5713d376 + jp 0x87b + cmp eax, [rax-0x2a] + xor dword [rdi], 0xbe56b7cd + jns 0x80f + xchg edi, eax + in al, dx + ret 0xfc88 + xchg esp, eax + outsd + mov ecx, 0xcb629fe0 + outsd + popfq + push rsp + xchg ecx, eax + mov ecx, 0x3ff2b740 + adc eax, 0xb4cf7f6a + movsxd ebx, dword [rsi-0x4442af85] + call dword far [rdi+0x63a461e9] + mov eax, [rbp+0x4d] + push rsi + invalid + or eax, [rbp-0x14] + push rsi + sbb eax, 0x3e8fc0ae + and al, [rdi-0x3b] + push rcx + invalid + xchg [rcx+0x6b], esp + fcmove st0, st4 + invalid + xchg ebp, eax + xchg ebx, eax + push qword [rbx] + sub [rax], dl + clc + xor eax, 0xdc2ee2 + add [rbx+0x55fcd786], eax + jg 0x88e + jmp 0xffffffff88ddccf9 + pop rbp + cld + in al, dx + and ecx, [rsi-0xceb0903] + xor [rsi+0x8], al + fstp qword [rax-0x6e] + ja 0x803 + invalid + sbb byte [rdi], 0x8a + out dx, eax + imul edx, [rdi-0x4a92ef92], 0x59 + sub esi, [rip+0x2d7ff4e5] + stc + mov [rbx], ds + or dword [rsp+rbx*8], 0x63ee6442 + invalid + push rax + invalid + fsubrp st5, st0 + jl 0x909 + loop 0x832 + mov esp, 0x34beb4a6 + adc eax, 0xc6745838 + out 0x71, al + cmp ch, dl + sub ecx, [rdx+0x5c519127] + sbb [rdi+0x33ca5cc1], ecx + invalid + or eax, [rdx+0x0] + invalid + movsd + cmc + cmpsb + add [rbx+rax*4+0x11], ch + jz 0x848 + and [rbp-0x2d], ebp + retf + sbb [rcx], dl + mov dh, 0x35 + rcl dword [rdi-0x1f], cl + or [rax-0x38], dh + invalid + and [rax-0x2f], edi + mov cl, 0xc8 + jrcxz 0x951 + and eax, 0xe26682e6 + sub al, dh + sub bh, [rax] + invalid + sbb dl, [rdx-0xaaaaf2d] + jbe 0x93a + leave + adc edx, [rbx] + mov cl, 0xbb + push rbx + and eax, [rax+0xa] + iretd + outsd + xor [rsi+0x10f4d0e8], edx + cmp eax, 0x1cf5d799 + invalid + loop 0x8f9 + jbe 0x937 + and r13, r11 + sbb al, [rax+0x2f880b12] + pop rdi + nop + xchg esp, eax + sti + invalid + movsxd esp, dword [rcx+0x31da1f77] + mov al, [0x58d87b9abdb8071b] + invalid + pop rdx + sub eax, 0xda173f5c + retf + and eax, 0x71674aa9 + mov eax, [0x9bfd5c32310bed12] + invalid + xlatb + sub [rax], dil + jnz 0x8d3 + invalid + and rdi, [rsi-0x5b56010f] + or ebx, [ss:rax+0x2d] + adc ebp, ebx + adc [rsi-0x6ae02dcb], ecx + mov [rsi+0x3f], eax + ja 0x957 + sub esp, edx + xor dword [rdi], 0xa7 + loop 0x936 + std + mov bh, [rcx+0x46b49152] + in al, dx + mov dl, 0x45 + xchg edx, eax + push 0xc5 + wait + pushfq + sti + in al, dx + jge 0x901 + jbe 0x9be + xchg edx, eax + xchg r10d, eax + cmp ch, cl + loop 0x9d3 + lodsq + pop rbx + xchg [rdi-0x54b76ca0], ah + js 0x96e + mov ecx, 0xafdca604 + stosd + invalid + adc esi, [rcx-0x51e827d8] + rcr byte [rbp+0x3a], 1 + sub [rcx], eax + mov ebp, 0xffd342cb + and ah, ch + push rsp + loope 0x9b4 + xor r10b, r11b + out dx, al + mov [rdi], esi + jl 0x982 + invalid + fld qword [rbp-0x7c] + insd + wait + push r15 + adc ebx, [rdx-0x27] + invalid + xor dword [rcx], 0x5c + dec byte [rsi-0x3f] + or [rdx], eax + xchg edx, eax + invalid + outsd + xor [rdi-0x7bceb489], edx + lea edx, [rcx+rbp*2-0xd] + mov edx, 0xbe94bcdf + mov ecx, 0x1314367e + invalid + lock shl byte [rbx], 0x56 + mov [rsi+0x194b4c6c], ss + out 0xbb, al + sub ecx, eax + or al, 0xaf + jno 0xa19 + invalid + popfq + xor [rcx+0x2d0988f6], esp + wait + mov eax, [0x9002615cbfbf9891] + add bl, [rbp+0x7c] + rcl edi, 0xe + iretd + std + int3 + stosd + shl dword [rdx-0x34], 1 + cmp dl, dh + jno 0xa01 + adc dl, [rdx-0x5d8e538f] + invalid + push rcx + int3 + invalid + pushfq + cmp ebp, ebx + jle 0x9e2 + invalid + cmp [rdi+0x5f], ah + jle 0xa98 + in al, 0x2f + adc [rbx], eax + idiv ebp + invalid + lea ebp, [rdx-0x6e] + pop r14 + xor [rip+0x1aee8ce4], esp + jz 0xaa5 + invalid + sahf + shl dword [rsi+0x47], 0xf0 + movsd + rol dword [r9+0x1b142a6a], 1 + int3 + mov cl, 0x8a + lock repne cmp eax, ebp + mov [rsi+rbx*8], al + add al, 0x91 + movsxd edx, dword [rdi] + jnz 0xa6c + invalid + adc ecx, [rdi+0x7a] + jp 0xa88 + invalid + push rbx + mov [rbp-0x32], bh + or al, 0x23 + iretd + psubusb mm7, mm4 + jrcxz 0xaaf + invalid + invalid + xchg ebx, eax + mov dl, 0x8e + test al, 0xcd + invalid + adc al, 0x5b + sbb eax, 0x708660b + repne shl al, 0xf5 + invalid + invalid + xchg ebx, eax + imul eax, [rbx], 0x59d49ea2 + xchg ecx, eax + invalid + invalid + loopnz 0xa7e + jb 0xae5 + and esp, esp + call 0xffffffffdd289080 + jns 0xa40 + invalid + mov al, 0xfc + invalid + jnz 0xa94 + mov ecx, 0xbaf1b0a2 + cmp [rbp+rdi*8-0x56cb209f], edx + cs movsb + in al, dx + mov ecx, 0x8ee46992 + mov edx, 0xf73d610b + test [rbx+rbx], ebx + insd + mov ch, 0x66 + sbb eax, [rdx-0x65c6cef9] + call 0xfffffffff9747199 + btc [rcx], edi + invalid + jl 0xb20 + jrcxz 0xb2f + scasd + cmpsb + lahf + invalid + add al, 0x97 + pushfq + invalid + invalid + invalid + invalid + invalid + jb 0xaaf + cmpsd + sti + invalid + out dx, eax + mov [rdx+0x43], eax + xor eax, 0x604a48 + fdiv qword [rbp-0x13] + cdq + and eax, 0xe70452e6 + lahf + invalid + jz 0xb01 + push rbx + or esp, [rbx-0x16] + fbstp [rdi] + xor dword [rsi+rsi+0x5a920d7f], 0xc38b1a72 + invalid + rol dword [rax-0x8], 1 + push dword 0xb5f787ab + cmp [rip-0x44816a06], ebp + test [r15+0x748ab13c], r12 + invalid + and dl, [rsi] + xchg [rax+rax*8+0x366852ed], bh + pop rax + in eax, dx + stosb + popfq + cli + invalid + sub [rcx-0x26edeab7], ah + fisub dword [rdx] + pop rdi + sahf + std + jnp 0xafd + push dword 0x657c0db7 + push rdi + invalid + int3 + mov ch, 0xb4 + adc eax, 0xfc744747 + mov dh, 0x9b + jns 0xbcd + std + xor dh, al + push rdx + mov ebp, 0x95134ff4 + xor ah, [rax+rcx*2] + jg 0xbab + invalid + test [rdx-0x156fc96c], ecx + rep lodsb + repne mov ecx, 0x793b9c9e + stc + stosd + invalid + invalid + sbb al, 0x4 + mov [0x171fa672cbc2f994], al + sar dword [rip+0x44386b47], 0xbe + and bl, [rcx-0x7903995] + mov ch, 0x93 + pop rdx + int 0x82 + xchg edi, eax + mov bl, [rbx-0x56] + stosb + invalid + mov spl, 0x4d + or eax, [rdx-0x7592f5b1] + js 0xb49 + or [rax+rsi+0x3f1aae4d], ecx + jp 0xb5b + movsd + outsb + nop + sub ecx, [rdx] + out dx, al + sub eax, [rdx] + stc + pop rdi + adc al, 0xbf + repne mov eax, [0xd8ee6375d45f0f35] + imul ebx, [rip+0x696e72bc], 0xe0 + js 0xb9d + or [rax], ebp + invalid + lock and [rbx+0x55], ch + test al, 0xca + cmpsd + xor al, 0xdb + lock mov cl, bl + pop rbp + invalid + int 0xbc + add eax, 0x4e7026e7 + mov bpl, 0x50 + xlatb + test [rax+0x66e4487a], eax + or eax, 0xd31061f4 + call 0xffffffffb945a135 + invalid + jle 0xbde + pop rbx + or dword [rax+rdx*2], 0xd2e35a54 + fisubr word [rdx] + popfq + out dx, eax + and [rsi], bh + mov ebx, 0x8089623 + push rdx + jo 0xc82 + xor ch, [rdx+0x4] + jb 0xc04 + cmc + neg byte [rsi-0x53] + pop rdx + sbb al, 0x3f + invalid + mov ecx, 0xafa84356 + nop + mov al, 0xb5 + or byte [rax+0x71], 0x43 + xchg edx, eax + invalid + movsxd ebx, dword [rdx-0x12d13e96] + invalid + out dx, al + adc eax, 0xa897a4b9 + a32 jz 0xc46 + movsb + imul esi, [rsi+0x53fbc5a1], 0x5a + jg 0xbda + invalid + invalid + jbe 0xc8c + lahf + jge 0xca9 + imul edi, [rax], 0x2c4aa59b + sub [rbp+0x3e], bl + and ebx, [rcx-0x3177f2f8] + sub [rbp+0x11], r9d + pop rsp + push r13 + invalid + mov ah, 0x36 + jge 0xc35 + jnp 0xcb2 + pop rdx + or bpl, r8b + sub [rbx], ch + o16 jb 0xcf9 + invalid + sub eax, 0xc6c32927 + mov [0xcd93ee45e262d532], eax + cmp al, 0x63 + mov ecx, 0xd89bdfe3 + invalid + lock invalid + xchg al, ch + add eax, 0x359ed371 + sub al, [rdi+0x6932c6c5] + jmp 0xc39 + xlatb + invalid + xor dh, [rdi] + movsxd ecx, dword [rsp+rdi*2] + test al, 0x4e + fbld [rcx+rcx*2-0xd] + pop rax + pop rdi + add dword [rdi+0x56ca6c2a], 0x15 + scasb + invalid + sbb eax, 0xa744404f + int 0x66 + sbb [rsi], esi + and [rsi], esi + invalid + sub bh, cl + call 0xffffffffc8bd8c41 + adc bl, [rsi] + stosd + jz 0xcf3 + rol ah, 1 + int1 + mov bl, 0x4b + invalid + or al, 0xd5 + imul ecx, [rdx+0x1c187bd3], 0x6f7bffe8 + sbb edi, ebp + push rbx + test al, 0x4a + fidivr word [rbx-0x242b8d19] + mov [0x5752c397fa1e3ac4], eax + invalid + adc r8b, bpl + wait + cdq + out dx, al + test [rbx-0x27767354], ecx + fcom dword [rax-0x25] + stosb + lahf + a32 mov ebx, 0xeceb1d22 + rcl byte [rcx-0x3356397a], 1 + leave + and dh, [rdi+0x109fe867] + retf + mov edi, 0x7c84aa58 + cld + cmp esp, ebx + xchg [rbx-0x6a], edx + invalid + mov cr1, [rbp+0x1b] + invalid + cli + xor ecx, [rax-0x23a33572] + jb 0xd25 + imul ebx, ebx, 0x30976844 + sbb eax, 0xd37c2cb + invalid + xor dword [rsi], 0x1db6cb00 + mov cl, 0x2c + mov [rsi-0x6f], edi + leave + mov [rbx], bh + imul eax, [rsi], 0x894b630a + add eax, [rsi+0x65] + xchg edi, eax + sub edi, edx + repne or ebp, [rax-0x58] + loope 0xcfb + sub eax, 0x4b9f573e + lea edx, [rdi] + in al, 0x80 + jae 0xd7d + xchg edi, eax + sbb al, 0x22 + invalid + lahf + invalid + invalid + invalid + push rdx + jno 0xda6 + invalid + ret 0xc7e4 + invalid + fbld [rbx] + mov edi, 0x10ad479b + repne sahf + sbb ch, [rax+0x39b6e4c7] + fmul qword [rcx+0x7b14c8c2] + xchg edi, eax + int1 + mov ebx, [rcx+rsi] + fxch7 st0 + pop r15 + popfq + xor eax, 0x78b5d870 + mov esp, 0x72aa7c3b + cmp eax, 0xdca682af + invalid + shl dword [rsp+rbp-0xc], cl + std + xor al, 0x1d + or eax, 0x84135706 + int1 + invalid + out 0xfe, al + test byte [rax-0x6c], 0x2f + movsxd ebp, dword [rsi+0x37] + or al, 0xa8 + xor [rdx], ah + xchg esi, eax + xchg ecx, eax + add [rdx+0x8], al + jl 0xdf6 + ficom dword [rsi] + and byte [rcx], 0xbe + and al, 0xfd + test esi, esi + sub al, 0x33 + int1 + jbe 0xe3c + invalid + xor al, 0x89 + mov ebp, 0x24ea9942 + push rcx + jnz 0xddc + invalid + retf + scasb + invalid + mov [0xa334ad69764fda10], al + xor al, [rbp+0x1365310f] + add eax, 0x9236756a + mov bh, 0x9f + mov eax, 0xc973540d + xor eax, 0xd144f52 + rol byte [rbp-0x3a6aaa95], 0x1f + jae 0xea7 + xor [rsi+0x58], ebx + or bl, [rcx] + and ebx, [rdx-0x6] + test [rdi+0x4b2ab0c5], dh + and edi, [rcx-0x391bf36b] + stc + mov al, [0xd7717d234da547be] + lock jbe 0xec9 + mov ch, 0xa9 + cmp [rdx+0x52], esp + xor al, 0x22 + invalid + sub dh, 0x45 + sub eax, 0xb234d79d + mov bh, 0x55 + mov ecx, 0x2e32c2c1 + pop rax + or eax, [rbx+0xac8ed1] + invalid + sub eax, 0x894f5fde + push dword 0xe04e1ab1 + stosd + out 0xbc, eax + pop rbp + and eax, 0x4f828d00 + nop + push rbx + xor al, 0x20 + jno 0xe8c + sbb dword [rbx+0x23ce924], 0xf8a9277e + mov dl, 0xb + fcomp3 st6 + out dx, al + sub [rbx+0x2a1886ca], edx + ficomp dword [rcx+0x523e59e8] + cmp [rbx+rax*4], ebp + in al, 0xdc + pop rsi + not dword [rdx+0x49] + lodsb + in al, 0x43 + invalid + mov [0xd5e59a5afc88276e], eax + mov ch, 0xef + repne mov [0xa3ec8cfa02217a9a], eax + ret 0xe676 + xchg [rax-0x5d9acac6], dl + adc [rdi], esp + add dh, dl + cmpsd + ficomp dword [rcx+0x6393bcdf] + mov cl, 0x51 + cli + popfq + invalid + push rbp + adc [rbp-0x6fbc7a8f], ah + add ebp, ebx + maskmovq mm2, [rax-0x17] + js 0xee5 + mov dl, bh + push rdi + push rdi + shr eax, cl + or eax, 0x25e8312c + xchg ebx, eax + sbb al, 0x80 + and esi, [rcx] + test al, 0x14 + invalid + ret + adc [r14+0x3b], esp + invalid + cmp ebx, [rcx-0x34] + rol byte [rsi+0x477b9d74], cl + sbb eax, ebx + cdq + push rbx + invalid + ja 0xf88 + invalid + adc eax, 0x35fd79c6 + wait + xchg [rbp-0x6be506a5], ebp + fbld [rax-0x1cb9686a] + stosb + mov [rdx+0x22], cr0 + xchg edi, eax + imul esi, edi, 0xa2b53f5f + push rax + cmp [rcx+rbp*4], esp + invalid + invalid + or esi, edi + loope 0xf83 + outsd + call 0xffffffff96f1a13f + invalid + sti + mov ecx, 0x2bb9610f + lahf + and bh, [rbx+0x4bf49c08] + imul dword [rbx-0x19] + test al, 0x67 + shl dword [rdx], 0x17 + in eax, 0xfd + wait + cmp eax, 0x816f37f + adc [rax], ebp + push dword 0x844dd8cf + sub al, [rcx] + stosb + shr dword [rax+0x5a994de7], 0xd + mov r15d, 0x35e63e4c + cwde + add [rdi-0xa], ch + sub al, 0x99 + jle 0xf79 + push rsi + cmpsb + sub dword [fs:rax+0x68], 0x7ef16c89 + xor [rsi-0x4e], dh + cmp al, 0xa4 + ror byte [rsi+0x4d005502], 0x8 + scasb + mul edi + invalid + out 0x11, al + or ah, [rdi+0x7ee5927a] + fxch4 st1 + pop rcx + add al, 0x60 + invalid + xor bl, [rbx+0x35f387ce] + add al, [rdi+0x1c8087e3] + sahf + sub esi, ecx + invalid + call 0x50247e10 + popfq + pop rbp + int 0x92 + rcl dword [rbp+0x19f7c430], 1 + iretd + mov [0x13a0ab169814d961], al + out 0x29, al + xchg ebx, eax + sub bl, [rax] + idiv esi + sub eax, 0x8fd0971c + push rdx + sbb ecx, esp + retf 0x3ab0 + xor al, 0x97 + adc [rax], edi + jle 0xf8d + adc [rbx+0x12ac2e1d], edi + rcl ebx, 1 + jnp 0xfa9 + fist dword [rdi+rsi*8+0x61] + ja 0xfb0 + scasd + push rax + mov esp, 0x4e0f5827 + stc + invalid + jnp 0x1027 + xchg esp, eax + push rbx + push rdi + jnz 0x105f + mov [0xa481572c929b4468], eax + mov dh, 0x56 + xchg esi, eax + add cl, [rsi] + shr [rdx-0x75], cl + jno 0xfc1 + clc + invalid + xchg ecx, eax + jmp 0x41fee261 + invalid + cmp byte [rsp+rcx], 0xd0 + pop rax + jp 0x1051 + outsd + test al, 0x78 + mov bh, 0xd3 + out 0x69, eax + mov [0x315cf7d53a661122], al + invalid + mov cl, 0xcf + mov [r8], ds + mov [0xb3b880136689ce77], al + or [rbx-0x132ccee7], bl + js 0x1035 + jmp 0x20210c31 + invalid + cmpsd + jge 0x1090 + mov [rdi+0x6445aac3], cr1 + test [rax+0x57], ebp + push rax + in al, 0x10 + int3 + loope 0x1051 + jns 0x1054 + call 0xffffffff8df4850a + mov ah, 0x7c + sar dword [rdx+rax], 1 + mov esi, 0x2ededbe8 + rol dword [rbx+0x1d65e59b], 0x60 + scasd + mov cl, 0xe0 + or [rcx-0x6d], rdi + invalid + add al, 0x7c + invalid + adc esp, 0x5101715 + jnz 0x1089 + sbb al, 0x4d + or r12b, [r10] + push dword 0x4c073002 + o16 cld + sbb [fs:rsi], bl + ja 0x103c + pop rbp + push rbp + retf 0xb295 + push rsi + lfs edx, [rbp-0x22f7e3a7] + mov [rax+0xa8511d4], cl + invalid + retf + iretd + invalid + jmp 0x1082 + mov [0x319a974ae3814005], eax + hlt + push rsi + cwde + stosb + lock stosd + push rsi + or eax, 0x5769a868 + fnstenv [rbx+rax*2+0x3a] + fmul qword [rdx-0x76] + invalid + pop rbp + jle 0x10a3 + pop rbx + adc eax, 0x90e1b11f + out dx, eax + xchg esp, eax + cmpsq + xchg esi, eax + sub edi, ebp + imul byte [rdi+0x90a85bb] + rcl ebx, 1 + mov esi, 0x2e7eab26 + loopnz 0x10eb + jae 0x1180 + clc + out 0x76, al + pop rax + loop 0x1137 + mov [0xb52e4e13044d0fdf], al + fmulp st2, st0 + fild word [rdx] + in eax, dx + loopnz 0x10ad + and dl, [rbp+0x28] + invalid + cmp [rax*4-0x99ed375], dl + movsd + lodsd + cmp eax, [rdx-0x6ab441ee] + push rax + int1 + lodsd + jo 0x110b + pop rsi + push rdx + mov al, ah + iretd + push rbp + add eax, 0x3014be2a + xchg ecx, eax + cmp esi, [rcx+0x8] + ret 0x6b83 + mov dh, 0xbe + insb + movsxd ecx, dword [rdx] + and [rdi], edx + clc + loope 0x10e3 + rep cdq + invalid + jnp 0x110f + sbb eax, 0x9a64c8f1 + mov bh, 0x98 + sub [rdi-0x2617e54f], edx + invalid + push rcx + mov [0x579790fbb884f280], eax + js 0x117e + repne insb + rcpps xmm4, xmm7 + fstp qword [rip+0x67acc747] + add edx, [rcx-0x756dfb0e] + invalid + invalid + push rbp + sbb [rsi+rcx*8], bh + popfq + rcr byte [rbp-0x24], 1 + jns 0x113f + adc esp, [rip+0x449f06e8] + mov esp, 0x81827652 + std + leave + invalid + invalid + invalid + mov ecx, 0x83ba4d00 + cmc + sbb eax, 0x4233b376 + pop rbp + invalid + invalid + repne rcl dword [rax], 0x25 + invalid + jb 0x11db + test al, 0xb6 + lodsd + loope 0x11f6 + invalid + jrcxz 0x11fb + xlatb + push rsp + rol dword [rdi], 0x91 + mov cl, [rdi+0x7c227c17] + mov [0xfc12f1bf4ab6de35], eax + retf + or al, 0xe5 + and al, 0xe3 + std + mov [rdi+rsi*2-0x1653644a], cr0 + mov eax, [0x4eeffe24f6a896cb] + pushfq + xchg ebp, eax + xchg esi, eax + xor cl, [rbx] + adc dword [rdx], 0x1d + push 0x1b + out dx, eax + xor eax, 0xead77ae7 + ret + or [rdx], ch + invalid + pop rdx + jb 0x11da + or bl, r15b + lahf + call 0x7374fe67 + or [rax+0x1e], edx + in eax, dx + jmp 0x1252 + push dword 0x44fc27c4 + sahf + invalid + int 0x97 + invalid + int1 + add eax, 0x2db9f27a + sbb rsp, rdi + invalid + cmp eax, ebp + jmp 0x11e8 + mov al, [0x15e1c01d899bd4d5] + mov dh, 0x2a + mov cl, 0x25 + loop 0x127f + invalid + and dword [rcx-0x76], 0xb99f8636 + test [rcx-0x384456bd], cl + xor [rdi-0x3d], dl + sbb eax, [rax] + xchg [rdx], bl + mov [0x8436cf4ab0c392e], al + pop rsp + pop rax + sahf + out dx, al + mov [0x6ea05a4fe52d324f], eax + xor eax, edi + stosd + test [rdx], bh + shr dword [rdi], 1 + fadd st1, st0 + fidivr word [r13-0x2d] + pop rsp + mov ecx, ss + out dx, eax + invalid + add al, 0xb6 + jo 0x1276 + shr word [rcx], 1 + invalid + push rbp + retf 0x8a07 + neg byte [rsi+0x2e311678] + invalid + ror dword [rdi+0x7d1712ae], 1 + pop rbp + cmp al, 0xd6 + shr byte [rcx-0x76], 0xab + jae 0x1317 + adc eax, esi + mov bl, 0x2a + mov al, [0x671a6c7401efe9cf] + mov fs, [rsi-0x226df648] + add eax, [rcx+rbp*2+0x74b3d204] + adc [rcx+0x5874d0e7], esi + invalid + mov dh, 0x99 + push rsi + lodsd + insb + rep int 0xc5 + imul esi, [rsi-0x2be7450c], 0xdc3e6aa9 + mov al, [0x6219c9da14f5a367] + pushfq + cmp eax, 0x3f7b46d1 + invalid + xchg ebx, eax + std + out dx, al + in al, 0x2d + sub [rcx+rbp*4+0x3257ed1b], ecx + hlt + retf 0x52a7 + invalid + clc + jp 0x1372 + pop rcx + mov ch, 0x16 + pop rdi + movsd + mov al, [0xd61f8da50f676f88] + invalid + add cl, bh + invalid + ret + invalid + mov edi, 0x9aa0bc93 + fst qword [rbp-0x60] + xor ch, [rcx-0xc] + o16 jl 0x131b + int1 + jg 0x134d + pop rbx + invalid + cmp al, 0x16 + and ecx, ecx + push rsp + invalid + sti + mov eax, [0xf5d91b3a2e5f2e6d] + a32 outsd + invalid + fidivr word [r15+0x19a7fbfd] + invalid + invalid + in eax, 0x3a + invalid + imul esp, [rbp-0x4dd25066], 0xf9b49a78 + invalid + popfq + mov al, [0xa6e05ab6eb9452f2] + or [rip-0x36e0ce0f], ch + sbb eax, ebp + outsb + invalid + invalid + mov ebx, 0xd15a3fdb + and ebp, ebx + movsb + cmpsd + invalid + not dword [rax+rdx*8+0x469f8f3] + xchg [rsi], r12 + sbb [rcx+0x6f], esi + pop rax + invalid + mov fs, [rax-0x30292aa4] + movsxd esp, dword [rdx+0x4d] + mov dl, dh + scasd + xlatb + sub bl, [rax-0x322ad67b] + mov eax, [0x35653e659a135194] + pop rdi + out dx, eax + invalid + invalid + push rax + mov ss, ebp + insb + and byte [rbp+rax*4-0x54], 0x9f + push rsp + mov esp, 0xe5950f68 + mov al, [0xdd71f2ad9dfefe12] + jb 0x13ca + xlatb + or [rbx], esp + invalid + jp 0x1370 + call dword far [rdx+rcx*8-0x65be806a] + mov esi, 0xe6ba140e + loope 0x135f + int1 + add dl, bl + shl dword [rdx], cl + cmp ah, bh + adc eax, 0x6ce8b335 + shr cl, 1 + fst dword [ss:rbp+0x1548eb37] + adc al, 0x16 + mov dword [rsi], 0x9b74e96e + mov al, [0xecffe0bdd7d81053] + test eax, 0xf072c923 + invalid + cdq + scasd + push 0xa3 + movsd + jno 0x13fa + int1 + popfq + ret 0x7d8 + mov ax, 0x3b54 + imul esp, [rcx], 0x49ee5bc3 + pop rsp + and eax, 0x910ef28a + xchg rsi, rax + stc + jle 0x143a + jmp 0x13c2 + test [rip-0x32d0b32c], ebp + mov esi, 0xa806610a + fnstcw word [rax-0x1eddbe6b] + xchg edx, eax + cmpsd + push rsi + sbb [rax+rdi*4], ebp + leave + fld dword [rdx-0x5aa8bc63] + mov ecx, [rdi+0x582c6389] + test eax, 0x22d7aebd + js 0x1429 + sar dword [rdx+0x4f332cec], 0xdf + xor cl, ah + mov [0xa401424c9c31a845], al + xor esi, esp + mov edx, 0x8d76fdff + cmp edi, [rcx+0x55843717] + xchg ebx, eax + enter 0xd9ab, 0xfc + rcl byte [rbp+0x3f], cl + adc [rdx-0x7cb0224d], eax + sub al, 0x3a + mov al, [0x75ce4221c6bb70d2] + pop r12 + or [rcx-0x61], ch + sub bh, 0xe4 + out 0xe3, al + mov ah, ah + cmp cl, bl + xchg ebp, eax + js 0x14e2 + add eax, 0x647dbe38 + sahf + xchg ebx, eax + loope 0x14dd + popfq + mov al, [0x3b3c3b3d7f296e05] + sub [rax+rdi*4], ch + wait + xchg ebx, eax + and [rcx], esi + mov ecx, 0x26b9bfa3 + mov ah, 0xe + invalid + loope 0x1543 + push rbp + movsb + lock sbb al, 0x1a + jl 0x14ad + sub al, 0x21 + test [rbx], dl + add eax, esi + insd + cmc + xor eax, 0x58f5af66 + enter 0xa7, 0xa9 + or dword [rdx], 0xba + mov ebx, 0xe87ff0ca + invalid + pop rsi + imul r15, [r15+rbp], 0xe5f147d2 + ja 0x14e1 + and al, 0xf7 + stosd + and [rax-0x5ff04554], ah + push rsi + jnz 0x14bc + jz 0x1540 + invalid + mov al, [fs:0x77cac247f9978476] + adc eax, 0xf17e329d + mov ch, 0xad + repne fisub word [rcx] + mov bh, 0x95 + scasd + mov ebp, 0xe42974fa + shl dword [cs:rax+0x7d], 0xb5 + invalid + adc ch, [rdi-0x28] + in eax, dx + fcom qword [rcx-0x57] + cwde + invalid + push rdx + jg 0x1583 + cqo + invalid + inc byte [rsp] + or ah, ch + invalid + lea esp, [rdx] + mov esi, 0x22fa717f + lock mov dh, 0x1d + jb 0x14ca + sub eax, 0xe4721f1d + out dx, al + wait + adc al, [rcx+0x7e159d2e] + xchg [rax+0x59], cl + retf 0xd5f8 + lock mov ah, al + lahf + mov [0x11e645a8394bf5ea], al + fidivr dword [rbx] + cmp esp, esp + xor al, 0x1 + lahf + pop rax + sbb ebp, [rcx] + pop rsp + jmp 0x15a1 + adc [rax-0x517d3357], edi + mov ebx, 0x4081775a + push rcx + and dh, [rdi+0x167a0a1c] + invalid + invalid + or al, 0x84 + cmp eax, 0x9ca782ad + xchg [rdx+0x2], ecx + add [rcx+0xda06ed7], ch + or [rcx+0x155f52cb], dl + invalid + sub eax, 0x5c5c79e3 + push rbx + movsxd ebp, dword [rdi+rcx*4] + jns 0x1558 + mov r8, 0xea11d2a8a9a984a2 + mov bh, [rsi] + xor dl, al + xchg [rdx], dh + o16 mov ah, 0xc3 + wait + add [rbx-0x4], cl + repne iretd + xor dh, [rax] + outsb + mov [rbx], gs + leave + add edx, ebx + push r10 + ret + sub al, 0x73 + jz 0x15c4 + jz 0x15e1 + imul dword [rcx-0x39bdc9f9] + movsd + pop rdi + std + adc eax, 0xa9a370cb + fdivr qword [rdi] + and ah, 0xe2 + stosd + invalid + jg 0x15dc + movsb + test edi, esp + adc dil, r11b + a32 jmp 0x3f9e287b + int3 + jp 0x1619 + in eax, 0xad + rcr dword [rdi+0x7cc0d60a], 1 + invalid + cmc + adc edx, ebp + mov al, dl + sub bh, [rbp-0x6c7934fc] + sbb [rcx+0x6], edi + adc al, 0xe4 + invalid + mov bl, 0x1e + rcr dword [rax-0x5b], 0x13 + invalid + and eax, 0xf37ffe65 + push rdi + xchg edx, eax + and eax, 0x23999b38 + rcl byte [rip+0x1181eca], 0x2f + cmpsb + invalid + std + and dh, [rax-0x52] + or [rsi-0x2595882a], bh + xor esi, [rbp-0x33] + jno 0x1612 + hlt + clc + invalid + adc ah, 0xaf + invalid + mov [0xeabb59a06ed1dcaf], al + push rsi + cmp ebx, ebp + fnstenv [rdx-0x6e8e7abc] + sbb eax, 0xc47a9a29 + lea ebp, [rdx] + popfq + jno 0x1626 + in al, 0x9e + push rsi + a32 hlt + invalid + mov [0x1efcc893905effe7], al + call rsp + mov edx, 0xa5e99ee0 + invalid + push dword 0x67ec8548 + pop rbp + cmp ah, [rdi+0x30] + out 0xe6, al + sub eax, [rsi] + invalid + jge 0x16b3 + clc + adc byte [ds:rdx-0x1e], 0x3e + rep fstp qword [rdi] + push rcx + xchg esi, eax + test al, 0x96 + stc + jz 0x1661 + mov esi, 0x49cfb604 + or eax, 0x6ea9445e + push 0x77 + loop 0x1662 + invalid + xchg edi, eax + invalid + invalid + invalid + cmp eax, 0xce5632a8 + xor [rdx], dl + xchg ebp, eax + xor al, 0x70 + mul byte [rbx] + shl dword [rbp+0x13], 0x62 + scasb + invalid + ja 0x1689 + outsd + xchg edx, eax + push rbx + out 0xd9, al + o16 xor bl, [rbx] + int1 + imul ebp, [rsi+0x6418118], 0xbb5f1483 + sub edx, [rip+0x3ec270c7] + xor al, 0xc + iretd + lahf + invalid + retf 0x474 + jo 0x168a + cmp dl, [rbp+0x439b5eb5] + int1 + invalid + mov dh, 0x82 + mov dh, [rcx-0x42c7efe8] + nop + and al, 0xda + ja 0x1710 + mov al, [0x8c8dc84c074e37a2] + sub eax, 0x9e2cad87 + test dword [rsi+0x5e], 0xa79f92d7 + xor edi, [rdi+rbx*4+0x35] + mov ah, 0xef + xchg [rdi-0x74], ah + pop rsp + fisub dword [rax+0x5f7e69a0] + adc [rbp+0x56], ch + jno 0x177c + mov esp, 0xe148d095 + ret 0x5abf + or byte [rax-0x7cbb461e], 0xa1 + mov edx, 0x793024a1 + out dx, al + add eax, 0x38760464 + ret 0xf750 + mov eax, [rbp+0x22334ef8] + invalid + sbb edx, [rdx+0x62a36164] + pop rsi + retf 0x78ab + push rsi + stosb + or [rdi], ebp + or ch, [rsi+rsi*8+0x67] + std + jae 0x172e + test dword [rdi-0x76], 0x4d148686 + sti + pop rdx + fs lodsb + cmc + add [rip+0x9ad6f4f], ecx + hlt + adc ecx, eax + mov bl, ch + invalid + imul ebx, [rbx+rsi*8+0x3b], 0x27 + loop 0x1765 + int1 + or eax, 0x723b6a7b + pop rbp + call 0x61e56998 + int3 + sbb edx, [rsi] + popfq + movsb + fcom dword [rdx] + rcr dword [rbp-0x1babaa55], cl + test ebp, 0x9be65a09 + adc [rdx], eax + out dx, al + ficom word [rbp+0x36] + imul ebp + invalid + mov esi, 0x422b9112 + or edx, eax + xchg [rsi+0x5571090b], bl + invalid + outsb + jg 0x17f2 + cmpsd + mov esp, 0x3fb40b93 + cmpsd + xchg esp, eax + movsb + mov esp, 0xdac30464 + rep pushfq + or al, 0x20 + mov esi, 0x2a8c97b2 + imul edx, esp, 0xbb0ca76e + js 0x17b6 + jz 0x17eb + jmp dword far [rcx-0xa] + mov eax, [0x9d9f7676a1397eef] + mov [0xa095e9a85b35f5c8], eax + test eax, 0xc8bd7b3e + mov [0x85ab25798d841f77], eax + or eax, [rbx] + lodsd + sub [rcx-0x6f667f15], edx + imul esp, [rip-0x6ca30574], 0xc4 + ret + insb + xor ch, [rdi] + retf 0xd0d4 + nop + mov esi, 0x856de28d + sahf + movsxd esp, dword [rsi-0x5ef00d55] + invalid + mov cl, 0x0 + adc al, 0x6c + retf + invalid + invalid + push 0xe6 + jb 0x183d + jmp 0x180e + sar al, 0xef + loopnz 0x17e6 + or eax, ebp + int3 + dec byte [rbx-0x2d] + stosb + wait + sub [rdi-0xf51f6de], dl + xor eax, 0x4a765e6 + insd + pop rax + xchg ebp, eax + pushfq + pop rbp + and eax, 0xdc381f2 + shl esp, 0x76 + push rax + or [rip-0x5726b0b2], cl + scasb + cmp al, 0x68 + pop rsp + scasd + add [rip+0x737676eb], dh + adc [rbp+0xf4a7402], bl + mov al, 0xde + out 0x4d, eax + mov ebx, [rdx+0xa5c12fe] + jae 0x18f9 + sahf + xlatb + scasb + hlt + mov ecx, 0x457d4b74 + out dx, al + jns 0x18eb + cmc + movsxd edi, dword [rdi] + sbb eax, 0x20250ec9 + xchg ecx, eax + mov edi, 0x43b176c7 + iretd + invalid + invalid + out 0x9c, al + std + pop rsp + xor al, 0x91 + push rbx + shr [rax], cl + mov [0x470aec75f35bbb75], eax + xor esp, edi + invalid + rol eax, cl + test [rbx+0x3f], dl + push rdi + and eax, 0x32b2babb + push rsi + out 0x5e, eax + jo 0x1932 + outsd + stc + push rsi + loop 0x18e2 + sub [rdx-0x1228c2fe], eax + and [rax+0x4f821eb9], edi + xchg edx, eax + invalid + jp 0x18f2 + invalid + jnz 0x1910 + rol byte [rdx-0x6bac1aca], 0x4f + jae 0x18e3 + xchg ebx, eax + pop rdi + out 0x95, eax + invalid + nop + ret 0x476e + iretd + sar dword [rdx-0x78b760dd], cl + invalid + test [rax+0x5fc8a2c2], bh + pop rdi + out dx, al + jno 0x18b4 + and al, 0xa1 + xchg edx, eax + invalid + xchg ebx, eax + wait + jz 0x197a + fild dword [rcx+0xc009371] + sub ecx, [rax+0x7979f270] + mov edi, ecx + invalid + mov [rax+0x5cc0975], cs + sti + mov ecx, 0x1dcf877a + fild word [rbp-0x6d] + in al, 0xb7 + clc + push rax + xor ecx, [0x410073a] + rcl dword [rdx-0x5331545a], cl + pop rsi + jnp 0x19a4 + push dword 0x80472ab8 + adc [rcx-0x3ebc4fc2], dh + pop rax + push rsp + push dword 0x6d340323 + out dx, al + mov esp, 0x1c36e32 + xor ebp, [rdi+0xe] + mov esi, 0x4c42f9c7 + xor eax, 0xd6340960 + invalid + pop rsp + add [rbx+rcx*8], ecx + cmp eax, 0x32b1191a + sbb r10b, [rax+0x4537a12c] + cwde + mov ecx, 0xc38677a + cmp [rax+0x61fcb9a5], dh + sbb [rsi-0x5cdc8b98], ebx + cmp eax, [rdx+0x4e] + jz 0x19f0 + loop 0x195c + cmp bh, [rip+0x480f5d21] + add cl, [rcx+rbp*4-0x1d] + invalid + mov cl, cl + mov [rsp+rbx-0x298651cb], ecx + in eax, dx + xor [rbx+0x2f], ch + invalid + invalid + test [rsi-0x5db17f2e], bh + outsd + stosb + add [fs:rax], dl + stosb + jno 0x19a1 + movsxd ecx, dword [rsi+0x57] + invalid + mov al, 0xd4 + sub edi, eax + retf 0x3e58 + cmp [rsi-0x1e], edx + sti + outsb + xchg esp, eax + loope 0x1a4d + jp 0x1a3b + invalid + sbb al, 0xf + invalid + invalid + retf 0xbf6c + mov dh, al + mov ebx, [rbp+0x30fd636f] + pop rbp + xor bh, cl + mov [rdx-0x6d], ch + xchg ecx, eax + sti + sar dword [rcx+0x40], cl + mov ebx, 0x1a7e9f97 + a32 sti + add [rsi], al + pop rbp + fcmovb st0, st2 + shl dword [rdx-0x34], 1 + push rdx + push rdi + push rsi + push rsi + jmp qword near [rdx+rsi+0x78110a68] + sbb ebx, eax + ror byte [rdi-0x38], 1 + shl dword [rbx], cl + call dword far [rcx+rdx*2-0x41f3f709] + cmp byte [rbx*4-0x6d860638], 0x49 + jo 0x1a4f + lodsb + or al, 0xca + invalid + stosb + jg 0x1aaa + pushfq + invalid + test [rsi+0x43], cl + neg dword [r11+rbp*8+0x4] + stosd + mov esp, 0x40475c82 + insd + or [rax+rdx*8-0x2b65d9a4], al + invalid + invalid + xchg ecx, eax + pop rsi + nop + pop rsp + cmp [rsi-0x38159f6b], ah + fcmovb st0, st1 + xchg ecx, eax + pop rcx + pushfq + o16 cmc + call 0xffffffff8ce66f4d + mov r11b, 0xc9 + invalid + jo 0x1ac9 + fcomi st0, st5 + repne outsb + invalid + or bh, [rax+0x39] + sub ah, [rax] + mov dl, 0xb3 + sub al, 0x98 + push rdx + mov [rax+0xe], ah + shl [rdi+0x6eb5866c], cl + js 0x1aab + movsb + xchg esp, eax + cmp al, 0x46 + mov eax, [0xb8fbde058568d8a4] + invalid + mov al, 0xa + jo 0x1b05 + xor ebx, esp + invalid + js 0x1a86 + nop + pushfq + jnz 0x1ae9 + push rsi + retf 0x694b + rcl byte [rdx-0x56], cl + out dx, al + scasd + invalid + jg 0x1ab8 + sahf + imul edx, [rax+0x6ddee1d1], 0xbec11bee + sbb [rdi+0x39], bh + mov al, [0x40299b4e984c8f12] + mov eax, 0x13aa826 + mov bl, 0x79 + ja 0x1a9d + cwde + jmp 0xfffffffff3e40cd7 + mov edx, 0x31d63c22 + invalid + adc al, 0x17 + jz 0x1b23 + mov ebx, 0xc379989d + fmul dword [rdi] + mov [rbx-0x35], edx + jle 0x1ac1 + lodsd + invalid + iretd + mov [rdx+0x781582cd], ch + or edi, [rdx] + add dword [ds:rdx+rcx-0x4dba991f], 0x4e + add dl, [rax-0x30031a9b] + invalid + jae 0x1ad4 + invalid + imul ebx, [rbx], 0xb2 + out 0x5d, al + xchg [rbx-0x217febf0], bh + int1 + cmp al, 0x91 + mov edx, [rcx+0x46] + sbb al, 0x68 + outsb + adc al, 0x91 + mov al, 0x9 + jmp 0xfffffffff0b2372c + call qword near [rdx] + add eax, 0x1b448cbb + invalid + mov ch, 0x79 + out 0xca, eax + mov edx, 0x8ab07a67 + invalid + push rcx + shr edi, 0xb7 + xor [rbx], edx + pop rsp + mov cr1, eax + shl dword [rcx-0x79b01cfc], cl + and [rip+0x5e540579], ebx + out 0xe2, eax + xor dh, [rsi+0x7a] + add al, 0xa3 + invalid + out 0x50, al + std + invalid + xchg [cs:rcx-0x1fdc4003], bh + add [rbp+0x13c88cdb], ch + fnstenv [rcx-0x694abe77] + sbb ah, cl + xchg edi, eax + adc cl, ch + in al, 0x61 + jrcxz 0x1b3f + movsd + mov edi, 0xfba7b96 + xchg ebp, eax + and rax, 0xf98baabd + fidivr word [rbx-0x65] + adc [rbx-0x509d2ad6], cl + invalid + js 0x1b68 + test al, 0x15 + sti + stosb + or dh, ch + fldenv [rip-0x7abb7547] + in al, dx + add bh, [rbx+0x665b4789] + mov [rdi], dh + mov esi, 0xa21f773b + sbb eax, [rbx-0xb] + invalid + invalid + push rsi + cmp eax, 0x68b484b6 + pop rsi + cmp al, 0x52 + sbb bl, [rbx+0x3a] + mov esp, 0xaed65363 + mov eax, 0x5e63d139 + mov dh, 0xe9 + outsb + repne sbb [rax], cx + scasd + invalid + adc dword [rbp-0x7ba8b8f0], 0x48c539c1 + hlt + repne xchg [rsi+rax*2-0x54], bl + or eax, 0xd8650c5e + jnz 0x1bd7 + cmp bl, bh + or [rcx-0x28], ecx + ret 0xd22c + invalid + pop rdi + scasb + xchg [rbp+0x7], ecx + invalid + movsb + ret + jl 0x1bde + pop rdx + std + mov ebp, 0xab4c7bf4 + invalid + xor al, 0x7a + ret 0xf29c + invalid + sub [rsi+0x6687ba93], esp + push rsp + mov dl, 0xbb + fldenv [rsi] + sbb al, 0xa1 + fstp tword [rbp-0xa682773] + cmpsd + mov al, 0x3f + in al, dx + cli + xchg esp, eax + mov edi, 0xb30543cb + pop rbx + rcr dword [rbx+0x30], 0x67 + sub dh, [rbp+0x1d] + pop rdi + test [rbx+0x6e], ch + xchg [rbx+0x657aa8b5], r12d + invalid + and byte [rcx+0x703156eb], 0xb5 + sbb ch, [rip+0x16860c65] + cmp [rax-0x1d], edx + mov es, [rdx+0x25cbccdb] + xor [ss:rax+0x2c97cfd0], esp + cmc + loop 0x1c87 + loopnz 0x1c57 + jnp 0x1c40 + invalid + neg dword [rbx+0x156d414b] + nop + invalid + loopnz 0x1bfc + movsb + invalid + pop rbp + out 0x5c, eax + invalid + invalid + push rdi + adc edi, edx + sbb eax, [rbp-0x72ccc8fc] + mov es, edx + int 0x30 + outsd + mov eax, [0x750e2be16de489de] + int3 + invalid + jge 0x1c94 + add eax, 0x3dba2e6 + cmp dh, ch + mov rdi, 0x77705d6d63c90f79 + nop [rdi+0x65] + jz 0x1cdc + adc cl, ah + invalid + invalid + mov [0x19d6cf93d7b4ab26], al + invalid + in al, 0x2c + pop rcx + pop rbx + rep insd + scasd + invalid + invalid + mov ebp, 0xc6c9b707 + jp 0x1c6b + xlatb + out dx, eax + retf + and al, 0x70 + push rbp + invalid + pop rdi + cmp eax, 0x67917e82 + or esp, ebx + retf + in al, 0x3a + jno 0x1d19 + cmp [rcx-0x47], bh + in al, 0x35 + mov eax, 0x5264b9bd + push rsp + jo 0x1d1e + mov spl, 0x89 + rol dword [rax-0x65], cl + in eax, 0x2d + mov ah, 0x36 + invalid + sti + push rdx + invalid + shr byte [rsp+rcx-0x3b24763], 0xb + invalid + sbb dl, [rdi-0x4c0e59c9] + xor al, 0x89 + int 0x35 + sahf + out 0x81, eax + invalid + lock sti + xchg ecx, eax + retf + invalid + in al, dx + jmp 0xffffffffdbe510b0 + push rcx + jno 0x1cd3 + fldcw word [rsi+0x12d2c7bf] + bswap eax + mov edi, 0xd7354899 + invalid + mov edi, 0xb0641f98 + pop rbx + invalid + ror byte [rsi], 0xed + or ebx, esi + fdivr dword [rdi+0x25] + xchg [rcx+rax*8-0x47], al + sub [rip-0x3218f81], ecx + jae 0x1d67 + jae 0x1d5c + wait + cmpsd + invalid + mov edx, 0x8dbce596 + jle 0x1d8a + iretd + std + lodsb + sbb [rdx+0x206cc62b], ebp + invalid + pushfq + jmp 0x1d3e + invalid + invalid + mov edi, 0x82cd3871 + mov edx, 0xb24f9fa6 + sbb dword [rdi+0x3d7a8375], 0x7f3dbb4b + lea esi, [rbx+0xb] + sub al, 0x7b + o16 ja 0x1dc3 + sar edi, 0xf + cdq + cwde + mov eax, [0x4902a7b6776c0b6c] + jle 0x1dee + mov ch, [rax] + and edx, esi + scasb + fcom2 st7 + fstp qword [rax+rdx*8] + lodsb + push rsp + jnz 0x1d35 + out dx, al + wait + adc ch, [rbx+0x56d5937d] + test eax, 0x54713fe4 + loopnz 0x1d6b + xor eax, [rbp+0x72fd7a5e] + jmp 0x1dc4 + in al, 0xfd + invalid + a32 mov eax, 0x3c9c07ca + invalid + fisttp qword [rcx-0x3d] + and bl, al + mov ebx, gs + xor [rdi], esi + invalid + push rcx + cdq + mov dl, 0x83 + int1 + ret 0xb54 + out dx, al + cmp al, 0x92 + xchg esi, eax + sbb dh, cl + mov ebx, [rdx-0x49] + invalid + xlatb + lodsb + imul ebp, [rax-0x5a6bfcd5], 0x18 + nop + int1 + loopnz 0x1df9 + mov r9b, 0x1a + mov ch, al + jae 0x1df6 + push rdi + sub al, 0xe4 + or ah, bl + xchg ebx, eax + invalid + fsub qword [rdx-0x46] + out 0xd4, al + xor al, ah + int3 + jp 0x1e4e + and ecx, esi + call 0x31131af9 + pop rdx + outsd + invalid + or [rax+0x4b45f86], edx + cmp [rbx-0x13], al + ja 0x1e05 + pop rsp + jbe 0x1e31 + jge 0x1e1a + enter 0x1445, 0xe4 + invalid + jl 0x1dd4 + pop rsi + nop + jle 0x1e76 + invalid + ja 0x1ea5 + ja 0x1e29 + or [rbx], ecx + invalid + movsd + xor dl, al + add byte [rdi], 0x83 + repne jmp 0x1dc9 + jmp 0xffffffffe25d2049 + mov edx, [rdx+0x25] + mov dl, 0xfe + pop rsi + int1 + test ebp, edi + jmp 0x1e47 + movsd + mov edi, 0x3acb210b + jo 0x1e45 + mov ah, 0x1d + and [rax+rdx+0x37], bh + out dx, al + invalid diff --git a/tests/test16.asm b/tests/test16.asm new file mode 100644 index 0000000..94cccfe --- /dev/null +++ b/tests/test16.asm @@ -0,0 +1,2 @@ +[bits 16] + movzx eax, word [bx] diff --git a/tests/test32.asm b/tests/test32.asm new file mode 100644 index 0000000..34a8eb5 --- /dev/null +++ b/tests/test32.asm @@ -0,0 +1,280 @@ +[bits 32] + mov [0x1000], bx + mov [0x10], ax + mov ax, [0x10] + mov byte [bx+si], 0x10 + mov byte [bx+si+0x10], 0x10 + mov word [bp+0x0], 0x10 + mov word [bp+di+0x10], 0x10 + mov dword [si+0x10], 0x10 + mov word [di+0x10], 0x10 + mov dword [bx+0x10], 0x1000 + mov word [bx+0x1000], 0x1000 + mov dword [ebx+ecx*4], 0x100 + mov [eax+eax*2], eax + mov [edx+esi*8], ebp + mov dword [ecx*4+0x0], 0x100 + mov byte [cs:0x100000], 0x10 + mov word [eax+0x10], 0x10 + mov [eax+0x10], ax + mov [eax+0x1000], ebx + mov [ebp+eax+0x0], esi + mov [ebp+edi+0x100000], esp + mov byte [esp], 0x10 + add al, 0x10 + add eax, ebx + push es + pop es + adc eax, 0x10000 + and [eax], al + daa + inc ax + inc edx + push eax + push ax + pushad + bound eax, [eax] + bound ax, [ecx] + bsr ax, ax + bsf eax, [bx+si] + bswap eax + bt [eax], ax + btr ax, 0x10 + btc ebx, 0x10 + bts word [ebx], 0x10 + call ax + call word near [bx+si] + call eax + call dword near [eax+ecx] + call word 0x10:0x100 + call dword 0x10:0x10000 + call word far [eax] + call dword far [bp+si] + cbw + cwd + clc + cld + clflush [eax] + cmp eax, ebx + cmp ecx, [bx] + cmpsb + cmpsw + cmpsd + cmpxchg [eax], ax + cmpxchg8b [ebx] + cpuid + das + inc eax + inc word [ecx] + dec byte [si] + in al, 0x10 + in ax, 0x10 + in eax, 0x10 + insb + insw + insd + int 0x10 + into + lahf + lds ax, [eax] + les eax, [ebx] + lea ax, [eax] + lea eax, [bx+si] + leave + lodsb + lodsw + lodsd + test al, bl + test [eax], bl + test [eax], ebx + test [eax], bx + ret + ret 0x10 + aad 0x10 + aam 0x10 + salc + hlt + cmc + lock xchg ebx, eax + repne mov eax, ebx + rep mov eax, 0x10 + push cs + outsd + outsw + mov ax, es + mov bx, ds + mov [eax], es + mov [ebx+ecx], cs + mov cs, [ebx+ecx] + wait + pushfw + pushfd + lodsw + lodsd + retf 0x10 + int3 + into + iretw + iretd + lar eax, [eax] + lsl ax, [bx] + syscall + clts + sysret + movups xmm0, xmm1 + mov dr0, eax + wrmsr + rdmsr + rdtsc + rdtscp + rdpmc + sysenter + sysexit + cmovo eax, [eax] + cmovno eax, [bx] + cmovb eax, [eax] + cmovae eax, [bx] + cmovo eax, [eax] + cmovz eax, ebx + cmovnz eax, [eax] + cmovbe eax, [bx] + cmova eax, [bx] + movmskps eax, xmm0 + movmskpd eax, xmm0 + sqrtps xmm1, xmm0 + rsqrtps xmm1, xmm0 + rcpps xmm1, xmm0 + andps xmm1, xmm0 + orps xmm1, xmm0 + xorps xmm1, xmm0 + andnps xmm1, xmm0 + sqrtss xmm1, xmm0 + rsqrtss xmm1, xmm0 + rcpss xmm1, xmm0 + sqrtpd xmm1, xmm0 + andpd xmm1, xmm0 + andnpd xmm1, xmm0 + orpd xmm1, xmm0 + xorpd xmm1, xmm0 + sqrtsd xmm1, xmm0 + punpcklbw mm0, [eax] + punpcklwd mm0, mm1 + punpckldq mm0, mm1 + packsswb mm0, mm1 + packsswb mm0, mm1 + pcmpgtb mm0, mm1 + pcmpgtw mm0, mm1 + pcmpgtd mm0, mm1 + packuswb mm0, mm1 + punpcklbw xmm0, [eax] + punpcklwd xmm0, xmm1 + punpckldq xmm0, xmm1 + packsswb xmm0, xmm1 + packsswb xmm0, xmm1 + pcmpgtb xmm0, xmm1 + pcmpgtw xmm0, xmm1 + pcmpgtd xmm0, xmm1 + packuswb xmm0, xmm1 + pshufw mm0, mm1, 0x10 + pcmpeqb mm0, mm1 + pcmpeqw mm0, mm1 + pcmpeqd mm0, mm1 + pcmpeqb xmm0, xmm1 + pcmpeqw xmm0, xmm1 + pcmpeqd xmm0, xmm1 + emms + pshufhw xmm0, xmm1, 0x10 + pshufd xmm0, xmm1, 0x10 + pshuflw xmm0, xmm1, 0x10 + seto [eax] + setno [bx] + setz [es:eax+ecx*2+0x100] + push fs + pop fs + cpuid + bt [eax], eax + shld eax, ebx, 0x10 + shld [eax], bx, cl + cmpxchg [eax], eax + lss eax, [eax] + btr [eax], eax + movnti [eax], eax + psrlw mm0, 0x10 + fadd dword [eax] + imul eax, [eax], 0xf6 + movd dword [eax], xmm0 + movzx eax, word [eax] + push word [0x10] + insw + insd + fnstsw ax + fucomip st0, st1 + fcomip st0, st7 + fucomp st4 + fucom st5 + fstp st3 + fst st1 + ffree st0 + fdiv st7, st0 + fdivr st2, st0 + fsub st4, st0 + fsubr st6, st0 + fmul st0, st0 + fadd st5, st0 + ficom word [eax] + fidivr word [eax] + fimul word [ebx] + fisub word [ecx] + fld qword [bx+si] + fisttp qword [edx+0x100] + fnstsw word [eax] + frstor [ebx] + prefetch [bx+si] + psrlq xmm0, 0x10 + psrldq xmm0, 0x10 + movsldup xmm0, [eax] + add [0xffffffff], eax + cvtsi2ss xmm1, dword [eax] + pause + pop dword [eax] + out 0x0, al + lldt [0x100] + lgdt [0x221] + sldt [0x233] + sgdt [0x443] + lidt [eax+0x333] + lldt ax + ltr bx + verr cx + verw dx + sldt ax + str bx + str eax + and esp, 0xfc + psrlw xmm1, 0x10 + psraw xmm7, 0x1 + psllw xmm2, 0x23 + fldenv [0x10] + fldenv [0x123] + fldcw word [0x100] + fnstcw word [0x10] + ficom word [eax+ebx+0x10] + fstp tword [0x10] + fadd qword [eax+ebx*2+0x1] + frstor [0x100] + fnstsw word [0x100] + fiadd word [0x100] + fild word [0x10] + monitor + mwait + lfence + mfence + sfence + vmrun + vmmcall + vmload + vmsave + stgi + clgi + skinit + invlpga diff --git a/tests/test64.asm b/tests/test64.asm new file mode 100644 index 0000000..bfb20ed --- /dev/null +++ b/tests/test64.asm @@ -0,0 +1,154 @@ +[bits 64] + mov rax, 0x102030405060708 + mov [eax+0x10], ax + mov [eax+0x1000], ebx + mov [ebp+eax+0x0], esi + mov qword [ebp+edi+0x1000], 0x10 + mov byte [esp], 0x10 + mov [eax], rax + mov [r12], eax + mov [r13+r12+0x0], eax + mov [r8*4+0x0], sil + inc rax + dec rax + mov [rip+0x200], rax + mov rax, 0x10000 + push rax + push r12 + call word near [r8] + call qword near [rax] + call word far [r8] + call dword far [rax] + cbw + cwde + cdqe + cwd + cdq + cqo + cmovl rax, [rax] + cmovge eax, [rax] + clflush [r14] + cmp [rax], rax + cmp rbx, r12 + cmp r12d, r8d + cmpsb + cmpsw + cmpsd + cmpsq + cmpxchg [eax], r14 + cmpxchg8b [ebx] + inc r12d + inc dword [rax] + dec r11w + hlt + imul rax, [eax+ebx*8+0x100000], 0x10 + idiv dword [r12] + enter 0x100, 0x0 + enter 0x100, 0x1 + enter 0x100, 0x10 + in al, 0x10 + in ax, 0x10 + in eax, 0x10 + lfs eax, [eax] + lgs eax, [ebx] + lea eax, [rbx] + lea r11, [eax] + lodsb + lodsq + lodsd + push rax + push r11 + xchg [eax], sil + xchg [eax], ebx + xchg [eax], bx + xchg r8, rax + xchg r9, rax + xchg cx, ax + movsd + movsq + mov al, r11b + mov sil, al + mov r11b, dil + ret 0x10 + pop rax + pop r11 + pop qword [eax] + insd + outsd + mov [r14d], cs + mov cs, [ebx+ecx] + pushfq + scasq + lar rax, [eax] + lsl ax, [rbx] + movups xmm0, [r12d] + movupd xmm0, [r12d] + movsldup xmm0, [r12d] + movups xmm0, xmm1 + movups xmm10, xmm12 + movups xmm0, xmm12 + movlps xmm0, [rax] + movlps [rax], xmm0 + unpcklps xmm4, xmm5 + unpckhps xmm4, xmm5 + movhps xmm3, [eax] + movhps [rax], xmm3 + movss xmm0, [eax] + movss [eax], xmm0 + movlpd [eax], xmm0 + movlpd xmm0, [eax] + unpcklpd xmm2, xmm4 + unpckhpd xmm3, [eax+ebx*8+0xffffffff] + movhpd xmm3, [rax] + movhpd [rax], xmm2 + movsd xmm3, xmm4 + movddup xmm3, [rax] + mov dr0, rax + mov rax, dr1 + movnti [eax], eax + movnti [rax], rax + movd dword [eax], xmm0 + movd qword [eax], xmm0 + movd xmm11, qword [eax] + vmmcall + vmrun + clgi + stgi + mfence + lfence + sfence + clflush [rax] + mov cr8, rax + push qword [eax] + push word [eax] + add bh, bh + add dil, dil + add sil, bpl + add al, sil + add rax, r12 + add eax, r12d + prefetcht0 [eax] + prefetchnta [eax] + prefetch [eax] + add [r8], r9b + mov [rax-0x1], eax + inc rax + jmp qword near [eax] + jmp rax + mov [0x10], rax + mov rax, [0x10] + mov rax, 0x102030405060708 + nop + xchg r8, rax + push ax + push rax + push r11 + mov rax, [0x100] + pmovmskb r12d, xmm14 + movdq2q mm0, xmm13 + psrlw xmm10, 0x10 + psraw xmm7, 0x1 + psllw xmm12, 0x23 + swapgs + fadd dword [rax+rbx] + shl rsi, 1 diff --git a/tests/testjmp.asm b/tests/testjmp.asm new file mode 100644 index 0000000..3027ae5 --- /dev/null +++ b/tests/testjmp.asm @@ -0,0 +1,17 @@ +[bits 64] + + jnz near x + jo near x + jno word x + jc near x + jnc word x + jae dword x + jcxz x + jecxz x + jrcxz x + jmp near x + call x + jmp word x + jmp dword x + jmp word [eax] +x: jmp qword [rax] diff --git a/tests/testjmp.ref b/tests/testjmp.ref new file mode 100644 index 0000000..e40395c --- /dev/null +++ b/tests/testjmp.ref @@ -0,0 +1,15 @@ +0000000000000000 0f853b000000 jnz dword 0x41 +0000000000000006 0f8035000000 jo dword 0x41 +000000000000000c 660f813000 jno word 0x41 +0000000000000011 0f822a000000 jb dword 0x41 +0000000000000017 660f832500 jae word 0x41 +000000000000001c 0f831f000000 jae dword 0x41 +0000000000000022 67e31c jecxz 0x41 +0000000000000025 67e319 jecxz 0x41 +0000000000000028 e317 jrcxz 0x41 +000000000000002a e912000000 jmp 0x41 +000000000000002f e80d000000 call 0x41 +0000000000000034 66e90900 jmp 0x41 +0000000000000038 e904000000 jmp 0x41 +000000000000003d 6766ff20 jmp word near [eax] +0000000000000041 ff20 jmp qword near [rax] diff --git a/tests/testobscure.asm b/tests/testobscure.asm new file mode 100644 index 0000000..3097478 --- /dev/null +++ b/tests/testobscure.asm @@ -0,0 +1,12 @@ + + db 0xd1, 0xf6 ; shl Ev, 0x1 + db 0xd0, 0xf6 ; shl Eb, 0x1 + db 0xd9, 0xd9 ; fstp1 st1 + db 0xdc, 0xd0 ; fcom2 + db 0xdc, 0xd8 ; fcomp3 + db 0xdd, 0xc8 ; fxch4 + db 0xde, 0xd1 ; fcomp5 + db 0xdf, 0xc3 ; fxch7 + db 0xdf, 0xd0 ; fstp8 + db 0xdf, 0xd8 ; fstp9 + diff --git a/tests/testobscure.ref b/tests/testobscure.ref new file mode 100644 index 0000000..ab678d0 --- /dev/null +++ b/tests/testobscure.ref @@ -0,0 +1,10 @@ + shl esi, 1 + shl dh, 1 + fstp1 st1 + fcom2 st0 + fcomp3 st0 + fxch4 st0 + fcomp5 st1 + ffreep st3 + fstp8 st0 + fstp9 st0 diff --git a/udcli/Makefile.am b/udcli/Makefile.am new file mode 100644 index 0000000..65930c6 --- /dev/null +++ b/udcli/Makefile.am @@ -0,0 +1,4 @@ +bin_PROGRAMS = udcli +udcli_SOURCES = udcli.c +udcli_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) +udcli_LDADD = ../libudis86/libudis86.la diff --git a/udcli/Makefile.win32 b/udcli/Makefile.win32 new file mode 100644 index 0000000..0575fea --- /dev/null +++ b/udcli/Makefile.win32 @@ -0,0 +1,21 @@ +# +# Makefile for win32 compilers +# (I need some help here!) + +CC = cl +CFLAGS = -O2 +RM = del + + +.SUFFIXES: .c .obj + +.c.obj: + $(CC) -c $(CFLAGS) -o $@ $< + +OBJS = udcli.obj ../libudis86/udis86.lib + +udcli: $(OBJS) + $(CC) $(OBJS) -o udcli.exe + +clean: + $(RM) *.obj udcli.exe diff --git a/udcli/udcli.c b/udcli/udcli.c new file mode 100644 index 0000000..35a9d47 --- /dev/null +++ b/udcli/udcli.c @@ -0,0 +1,271 @@ +/* udis86 - udcli/udcli.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include +#include + +#if defined(__amd64__) || defined(__x86_64__) +# define FMT "l" +#else +# define FMT "ll" +#endif + +#if defined(__DJGPP__) || defined(_WIN32) +# include +# include +#endif + +#ifdef __DJGPP__ +# include /* for isatty() */ +# define _setmode setmode +# define _fileno fileno +# define _O_BINARY O_BINARY +#endif + +/* help string */ +static char help[] = +{ + "Usage: %s [-option[s]] file\n" + "Options:\n" + " -16 : Set the disassembly mode to 16 bits. \n" + " -32 : Set the disassembly mode to 32 bits. (default)\n" + " -64 : Set the disassembly mode to 64 bits.\n" + " -intel : Set the output to INTEL (NASM like) syntax. (default)\n" + " -att : Set the output to AT&T (GAS like) syntax.\n" + " -v : Set vendor. = {intel, amd}.\n" + " -o : Set the value of program counter to . (default = 0)\n" + " -s : Set the number of bytes to skip before disassembly to .\n" + " -c : Set the number of bytes to disassemble to .\n" + " -x : Set the input mode to whitespace seperated 8-bit numbers in\n" + " hexadecimal representation. Example: 0f 01 ae 00\n" + " -noff : Do not display the offset of instructions.\n" + " -nohex : Do not display the hexadecimal code of instructions.\n" + " -h : Display this help message.\n" + " --version: Show version.\n" + "\n" + "Udcli is a front-end to the Udis86 Disassembler Library.\n" + "http://udis86.sourceforge.net/\n" +}; + +FILE* fptr = NULL; +uint64_t o_skip = 0; +uint64_t o_count = 0; +unsigned char o_do_count= 0; +unsigned char o_do_off = 1; +unsigned char o_do_hex = 1; +unsigned char o_do_x = 0; +unsigned o_vendor = UD_VENDOR_AMD; + +int input_hook_x(ud_t* u); +int input_hook_file(ud_t* u); + +int main(int argc, char **argv) +{ + char *prog_path = *argv; + char *s; + ud_t ud_obj; + int mode = 0; + + /* initialize */ + ud_init(&ud_obj); + ud_set_mode(&ud_obj, 32); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + +#ifdef __DJGPP__ + if ( !isatty( fileno( stdin ) ) ) +#endif +#if defined(__DJGPP) || defined(_WIN32) + _setmode(_fileno(stdin), _O_BINARY); +#endif + + fptr = stdin; + + argv++; + + /* loop through the args */ + while(--argc > 0) { + if (strcmp(*argv,"-16") == 0) { + ud_set_mode(&ud_obj, 16); + mode = 16; + } else if (strcmp(*argv,"-32") == 0) { + ud_set_mode(&ud_obj, 32); + mode = 32; + } else if (strcmp(*argv,"-64") == 0) { + ud_set_mode(&ud_obj, 64); + mode = 64; + } else if (strcmp(*argv,"-intel") == 0) + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + else if (strcmp(*argv,"-att") == 0) + ud_set_syntax(&ud_obj, UD_SYN_ATT); + else if (strcmp(*argv,"-noff") == 0) + o_do_off = 0; + else if (strcmp(*argv,"-nohex") == 0) + o_do_hex = 0; + else if (strcmp(*argv,"-x") == 0) + o_do_x = 1; + else if (strcmp(*argv,"-s") == 0) + if (--argc) { + s = *(++argv); + if (sscanf(s, "%" FMT "d", &o_skip) == 0) + fprintf(stderr, "Invalid value given for -s.\n"); + } else { + fprintf(stderr, "No value given for -s.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + else if (strcmp(*argv,"-c") == 0) + if (--argc) { + o_do_count= 1; + s = *(++argv); + if (sscanf(s, "%" FMT "d", &o_count) == 0) + fprintf(stderr, "Invalid value given for -c.\n"); + } else { + fprintf(stderr, "No value given for -c.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + else if (strcmp(*argv,"-v") == 0) + if (--argc) { + s = *(++argv); + if (*s == 'i') + ud_set_vendor(&ud_obj, UD_VENDOR_INTEL); + } else { + fprintf(stderr, "No value given for -v.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + else if (strcmp(*argv,"-o") == 0) { + if (--argc) { + uint64_t pc = 0; + s = *(++argv); + if (sscanf(s, "%" FMT "x", &pc) == 0) + fprintf(stderr, "Invalid value given for -o.\n"); + ud_set_pc(&ud_obj, pc); + } else { + fprintf(stderr, "No value given for -o.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + } else if ( strcmp( *argv, "--version" ) == 0 ) { + fprintf(stderr, "%s\n", PACKAGE_STRING ); + exit(0); + } else if((*argv)[0] == '-') { + fprintf(stderr, "Invalid option %s.\n", *argv); + printf(help, prog_path); + exit(EXIT_FAILURE); + } else { + static int i = 0; + s = *argv; + if (i) { + fprintf(stderr, "Multiple files specified.\n"); + exit(EXIT_FAILURE); + } else i = 1; + if ((fptr = fopen(s, "rb")) == NULL) { + fprintf(stderr, "Failed to open file: %s.\n", s); + exit(EXIT_FAILURE); + } + } + argv++; + } + + if (o_do_x) + ud_set_input_hook(&ud_obj, input_hook_x); + else ud_set_input_hook(&ud_obj, input_hook_file); + + if (o_skip) { + o_count += o_skip; + ud_input_skip(&ud_obj, o_skip); + } + + /* disassembly loop */ + while (ud_disassemble(&ud_obj)) { + if (o_do_off) + printf("%016" FMT "x ", ud_insn_off(&ud_obj)); + if (o_do_hex) { + char* hex1, *hex2; + char c; + hex1 = ud_insn_hex(&ud_obj); + hex2 = hex1 + 16; + c = hex1[16]; + hex1[16] = 0; + printf("%-16s %-24s", hex1, ud_insn_asm(&ud_obj)); + hex1[16] = c; + if (strlen(hex1) > 16) { + printf("\n"); + if (o_do_off) + printf("%15s -", ""); + printf("%-16s", hex2); + } + } + else printf(" %-24s", ud_insn_asm(&ud_obj)); + + printf("\n"); + } + + exit(EXIT_SUCCESS); + return 0; +} + +int input_hook_x(ud_t* u) +{ + unsigned int c, i; + + if (o_do_count) { + if (! o_count) + return UD_EOI; + else --o_count; + } + + i = fscanf(fptr, "%x", &c); + + if (i == EOF) + return UD_EOI; + if (i == 0) { + fprintf(stderr, "Error: Invalid input, should be in hexadecimal form (8-bit).\n"); + return UD_EOI; + } + if (c > 0xFF) + fprintf(stderr, "Warning: Casting non-8-bit input (%x), to %x.\n", c, c & 0xFF); + return (int) (c & 0xFF); +} + +int input_hook_file(ud_t* u) +{ + int c; + + if (o_do_count) { + if (! o_count) { + return -1; + } else o_count -- ; + } + + if ((c = fgetc(fptr)) == EOF) + return UD_EOI; + return c; +} diff --git a/udis86.h b/udis86.h new file mode 100644 index 0000000..bdd3857 --- /dev/null +++ b/udis86.h @@ -0,0 +1,33 @@ +/* udis86 - udis86.h + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UDIS86_H +#define UDIS86_H + +#include "libudis86/types.h" +#include "libudis86/extern.h" +#include "libudis86/itab.h" + +#endif -- 2.45.1